diff --git a/docs/data/base/components/trap-focus/BasicTrapFocus.js b/docs/data/base/components/trap-focus/BasicTrapFocus.js index b05f0efd1c310a..3b3a173f989d7a 100644 --- a/docs/data/base/components/trap-focus/BasicTrapFocus.js +++ b/docs/data/base/components/trap-focus/BasicTrapFocus.js @@ -1,18 +1,12 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; +import Box from '@mui/system/Box'; import TrapFocus from '@mui/base/TrapFocus'; export default function BasicTrapFocus() { const [open, setOpen] = React.useState(false); return ( - + diff --git a/docs/data/base/components/trap-focus/BasicTrapFocus.tsx b/docs/data/base/components/trap-focus/BasicTrapFocus.tsx index b05f0efd1c310a..3b3a173f989d7a 100644 --- a/docs/data/base/components/trap-focus/BasicTrapFocus.tsx +++ b/docs/data/base/components/trap-focus/BasicTrapFocus.tsx @@ -1,18 +1,12 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; +import Box from '@mui/system/Box'; import TrapFocus from '@mui/base/TrapFocus'; export default function BasicTrapFocus() { const [open, setOpen] = React.useState(false); return ( - + diff --git a/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.js b/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.js index 0fb77c38f0aeac..39e3bdc084cb07 100644 --- a/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.js +++ b/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.js @@ -1,26 +1,17 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; -import Stack from '@mui/material/Stack'; +import Stack from '@mui/system/Stack'; import TrapFocus from '@mui/base/TrapFocus'; -export default function BasicTrapFocus() { +export default function ContainedToggleTrappedFocus() { const [open, setOpen] = React.useState(false); return ( - + - - - - + + {open && ( - + ); } diff --git a/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx b/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx index 0fb77c38f0aeac..39e3bdc084cb07 100644 --- a/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx +++ b/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx @@ -1,26 +1,17 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; -import Stack from '@mui/material/Stack'; +import Stack from '@mui/system/Stack'; import TrapFocus from '@mui/base/TrapFocus'; -export default function BasicTrapFocus() { +export default function ContainedToggleTrappedFocus() { const [open, setOpen] = React.useState(false); return ( - + - - - - + + {open && ( - + ); } diff --git a/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx.preview b/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx.preview index d748ddf123628c..f1a9366d736753 100644 --- a/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx.preview +++ b/docs/data/base/components/trap-focus/ContainedToggleTrappedFocus.tsx.preview @@ -1,14 +1,14 @@ - - - + + + + {open && ( + + )} - {open && ( - - )} - - \ No newline at end of file + + \ No newline at end of file diff --git a/docs/data/base/components/trap-focus/DisableEnforceFocus.js b/docs/data/base/components/trap-focus/DisableEnforceFocus.js index b0da4058dba400..376657865fe7ec 100644 --- a/docs/data/base/components/trap-focus/DisableEnforceFocus.js +++ b/docs/data/base/components/trap-focus/DisableEnforceFocus.js @@ -1,18 +1,12 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; +import Box from '@mui/system/Box'; import TrapFocus from '@mui/base/TrapFocus'; export default function DisableEnforceFocus() { const [open, setOpen] = React.useState(false); return ( - + diff --git a/docs/data/base/components/trap-focus/DisableEnforceFocus.tsx b/docs/data/base/components/trap-focus/DisableEnforceFocus.tsx index b0da4058dba400..376657865fe7ec 100644 --- a/docs/data/base/components/trap-focus/DisableEnforceFocus.tsx +++ b/docs/data/base/components/trap-focus/DisableEnforceFocus.tsx @@ -1,18 +1,12 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; +import Box from '@mui/system/Box'; import TrapFocus from '@mui/base/TrapFocus'; export default function DisableEnforceFocus() { const [open, setOpen] = React.useState(false); return ( - + diff --git a/docs/data/base/components/trap-focus/LazyTrapFocus.js b/docs/data/base/components/trap-focus/LazyTrapFocus.js index 9cf8bfc814bd4d..0a2fce258772f1 100644 --- a/docs/data/base/components/trap-focus/LazyTrapFocus.js +++ b/docs/data/base/components/trap-focus/LazyTrapFocus.js @@ -1,18 +1,12 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; +import Box from '@mui/system/Box'; import TrapFocus from '@mui/base/TrapFocus'; export default function LazyTrapFocus() { const [open, setOpen] = React.useState(false); return ( - + diff --git a/docs/data/base/components/trap-focus/LazyTrapFocus.tsx b/docs/data/base/components/trap-focus/LazyTrapFocus.tsx index 9cf8bfc814bd4d..0a2fce258772f1 100644 --- a/docs/data/base/components/trap-focus/LazyTrapFocus.tsx +++ b/docs/data/base/components/trap-focus/LazyTrapFocus.tsx @@ -1,18 +1,12 @@ import * as React from 'react'; -import Box from '@mui/material/Box'; +import Box from '@mui/system/Box'; import TrapFocus from '@mui/base/TrapFocus'; export default function LazyTrapFocus() { const [open, setOpen] = React.useState(false); return ( - + diff --git a/docs/data/base/components/trap-focus/PortalTrapFocus.js b/docs/data/base/components/trap-focus/PortalTrapFocus.js index 7535f8ea5a6bb7..0c0e05bc6226f0 100644 --- a/docs/data/base/components/trap-focus/PortalTrapFocus.js +++ b/docs/data/base/components/trap-focus/PortalTrapFocus.js @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Box } from '@mui/system'; +import Box from '@mui/system/Box'; import Portal from '@mui/base/Portal'; import TrapFocus from '@mui/base/TrapFocus'; @@ -8,13 +8,7 @@ export default function PortalTrapFocus() { const [container, setContainer] = React.useState(null); return ( - + diff --git a/docs/data/base/components/trap-focus/PortalTrapFocus.tsx b/docs/data/base/components/trap-focus/PortalTrapFocus.tsx index df12988df2ec9d..316b679a9a8d98 100644 --- a/docs/data/base/components/trap-focus/PortalTrapFocus.tsx +++ b/docs/data/base/components/trap-focus/PortalTrapFocus.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Box } from '@mui/system'; +import Box from '@mui/system/Box'; import Portal from '@mui/base/Portal'; import TrapFocus from '@mui/base/TrapFocus'; @@ -8,13 +8,7 @@ export default function PortalTrapFocus() { const [container, setContainer] = React.useState(null); return ( - + diff --git a/package.json b/package.json index 76186d706245b0..8db5b27a91548c 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,6 @@ "@rollup/plugin-replace": "^4.0.0", "@testing-library/dom": "^8.17.1", "@testing-library/react": "^13.3.0", - "@testing-library/user-event": "^14.3.0", "@types/chai": "^4.3.3", "@types/chai-dom": "^0.0.13", "@types/enzyme": "^3.10.12", diff --git a/packages/mui-base/src/TrapFocus/TrapFocus.test.js b/packages/mui-base/src/TrapFocus/TrapFocus.test.js index 26324e14f53c67..d65f3951bab254 100644 --- a/packages/mui-base/src/TrapFocus/TrapFocus.test.js +++ b/packages/mui-base/src/TrapFocus/TrapFocus.test.js @@ -4,7 +4,6 @@ import { expect } from 'chai'; import { act, createRenderer, screen } from 'test/utils'; import TrapFocus from '@mui/base/TrapFocus'; import Portal from '@mui/base/Portal'; -import userEvent from '@testing-library/user-event'; describe('', () => { const { clock, render } = createRenderer(); @@ -284,36 +283,6 @@ describe('', () => { expect(screen.getByTestId('root')).toHaveFocus(); }); - it('does not create any tabbable elements when open={false}', () => { - function Test(props) { - return ( -
- - -
- -
-
- -
- ); - } - - render(); - - expect(screen.getByTestId('initial-focus')).toHaveFocus(); - act(() => { - userEvent.tab(); - }); - expect(screen.getByTestId('inside-focus')).toHaveFocus(); - act(() => { - userEvent.tab(); - }); - expect(screen.getByTestId('end-focus')).toHaveFocus(); - }); - describe('interval', () => { clock.withFakeTimers(); diff --git a/test/e2e/fixtures/TrapFocus/ClosedTrapFocus.tsx b/test/e2e/fixtures/TrapFocus/ClosedTrapFocus.tsx new file mode 100644 index 00000000000000..48d61d96af8afb --- /dev/null +++ b/test/e2e/fixtures/TrapFocus/ClosedTrapFocus.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; +import TrapFocus from '@mui/base/TrapFocus'; + +export default function ClosedTrapFocus() { + return ( + + + +
+ +
+
+ +
+ ); +} diff --git a/test/e2e/index.test.ts b/test/e2e/index.test.ts index f021f2aaa64a94..97386094b96cd7 100644 --- a/test/e2e/index.test.ts +++ b/test/e2e/index.test.ts @@ -162,6 +162,16 @@ describe('e2e', () => { await page.keyboard.press('Tab'); await expect(screen.getByText('ok')).toHaveFocus(); }); + + it('should be able to be tabbed straight through when rendered closed', async () => { + await renderFixture('TrapFocus/ClosedTrapFocus'); + + await expect(screen.getByText('initial focus')).toHaveFocus(); + await page.keyboard.press('Tab'); + await expect(screen.getByText('inside focusable')).toHaveFocus(); + await page.keyboard.press('Tab'); + await expect(screen.getByText('final tab target')).toHaveFocus(); + }); }); describe('', () => { diff --git a/yarn.lock b/yarn.lock index 35a7b281421d15..05ce9a03912049 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3194,11 +3194,6 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" -"@testing-library/user-event@^14.3.0": - version "14.3.0" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.3.0.tgz#0a6750b94b40e4739706d41e8efc2ccf64d2aad9" - integrity sha512-P02xtBBa8yMaLhK8CzJCIns8rqwnF6FxhR9zs810flHOBXUYCFjLd8Io1rQrAkQRWEmW2PGdZIEdMxf/KLsqFA== - "@theme-ui/color-modes@0.14.7": version "0.14.7" resolved "https://registry.yarnpkg.com/@theme-ui/color-modes/-/color-modes-0.14.7.tgz#6f93bf4d0890ffe3386df311663eaee9bea40796"