@dxos/react-ui 0.8.4-main.67995b8 → 0.8.4-main.69d29f4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/chunk-CEKVHJ27.mjs +774 -0
- package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3069 -59
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +65 -49
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/chunk-2NHEX4AD.mjs +776 -0
- package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3069 -59
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +65 -49
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
- package/dist/types/src/components/Button/Button.d.ts.map +1 -0
- package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
- package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
- package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
- package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
- package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
- package/dist/types/src/components/Button/index.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/Dialog.d.ts +40 -0
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +27 -0
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.d.ts +2 -2
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
- package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
- package/dist/types/src/components/Input/Input.d.ts +6 -5
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +11 -12
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -0
- package/dist/types/src/components/List/List.stories.d.ts +14 -0
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
- package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
- package/dist/types/src/components/List/Tree.d.ts.map +1 -0
- package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
- package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
- package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
- package/dist/types/src/components/List/index.d.ts.map +1 -0
- package/dist/types/src/components/Main/Main.d.ts +10 -19
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts +6 -7
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/Menu/index.d.ts.map +1 -0
- package/dist/types/src/components/Message/Message.d.ts +1 -1
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +8 -17
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +3 -3
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +10 -8
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +8 -30
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
- package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/Select/Select.d.ts +10 -10
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Separator/Separator.d.ts +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts +2 -8
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.stories.d.ts +12 -12
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -3
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.d.ts +5 -5
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +17 -17
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +5 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts +5 -9
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +12 -4
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts +5 -11
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/index.d.ts +2 -1
- package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withTheme.d.ts +3 -0
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +2 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/usePx.d.ts +8 -0
- package/dist/types/src/util/usePx.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +37 -31
- package/src/components/Avatars/Avatar.stories.tsx +21 -12
- package/src/components/Avatars/Avatar.tsx +4 -4
- package/src/components/Avatars/AvatarGroup.stories.tsx +10 -6
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +17 -12
- package/src/components/Breadcrumb/Breadcrumb.tsx +1 -1
- package/src/components/{Buttons → Button}/Button.stories.tsx +8 -9
- package/src/components/{Buttons → Button}/Button.tsx +1 -1
- package/src/components/{Buttons → Button}/IconButton.stories.tsx +11 -8
- package/src/components/{Buttons → Button}/IconButton.tsx +22 -15
- package/src/components/{Buttons → Button}/Toggle.stories.tsx +13 -9
- package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +10 -7
- package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
- package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
- package/src/components/Clipboard/CopyButton.tsx +6 -5
- package/src/components/DensityProvider/DensityProvider.tsx +2 -2
- package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +15 -12
- package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +13 -13
- package/src/components/Dialog/Dialog.stories.tsx +97 -0
- package/src/components/{Dialogs → Dialog}/Dialog.tsx +151 -51
- package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
- package/src/components/Icon/Icon.stories.tsx +113 -0
- package/src/components/Icon/Icon.tsx +2 -2
- package/src/components/Input/Input.stories.tsx +13 -15
- package/src/components/Input/Input.tsx +28 -19
- package/src/components/Link/Link.stories.tsx +10 -6
- package/src/components/{Lists → List}/List.stories.tsx +32 -26
- package/src/components/{Lists → List}/List.tsx +17 -13
- package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
- package/src/components/{Lists → List}/Tree.stories.tsx +11 -8
- package/src/components/{Lists → List}/Tree.tsx +4 -3
- package/src/components/{Lists → List}/TreeDropIndicator.tsx +1 -1
- package/src/components/{Lists → List}/Treegrid.stories.tsx +12 -6
- package/src/components/{Lists → List}/Treegrid.tsx +58 -17
- package/src/components/Main/Main.stories.tsx +17 -9
- package/src/components/Main/Main.tsx +43 -28
- package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +11 -8
- package/src/components/{Menus → Menu}/ContextMenu.tsx +1 -0
- package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +12 -9
- package/src/components/{Menus → Menu}/DropdownMenu.tsx +102 -71
- package/src/components/Message/Message.stories.tsx +12 -8
- package/src/components/Message/Message.tsx +30 -5
- package/src/components/Popover/Popover.stories.tsx +12 -9
- package/src/components/Popover/Popover.tsx +64 -45
- package/src/components/ScrollArea/ScrollArea.stories.tsx +64 -11
- package/src/components/ScrollArea/ScrollArea.tsx +54 -8
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
- package/src/components/ScrollContainer/ScrollContainer.tsx +233 -0
- package/src/components/ScrollContainer/index.ts +5 -0
- package/src/components/Select/Select.stories.tsx +15 -12
- package/src/components/Select/Select.tsx +9 -8
- package/src/components/Status/Status.stories.tsx +9 -6
- package/src/components/Tag/Tag.stories.tsx +20 -11
- package/src/components/Tag/Tag.tsx +1 -1
- package/src/components/ThemeProvider/ThemeProvider.tsx +3 -4
- package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
- package/src/components/ThemeProvider/index.ts +3 -3
- package/src/components/Toast/Toast.stories.tsx +12 -9
- package/src/components/Toast/Toast.tsx +9 -9
- package/src/components/Toolbar/Toolbar.stories.tsx +14 -12
- package/src/components/Toolbar/Toolbar.tsx +37 -10
- package/src/components/Tooltip/Tooltip.stories.tsx +16 -12
- package/src/components/Tooltip/Tooltip.tsx +27 -24
- package/src/components/index.ts +5 -4
- package/src/hooks/useDensityContext.ts +1 -1
- package/src/hooks/useElevationContext.ts +1 -1
- package/src/hooks/useSafeArea.ts +3 -2
- package/src/hooks/useVisualViewport.ts +4 -4
- package/src/index.ts +1 -1
- package/src/playground/Controls.stories.tsx +12 -8
- package/src/playground/Custom.stories.tsx +13 -24
- package/src/playground/Typography.stories.tsx +8 -6
- package/src/testing/decorators/index.ts +2 -1
- package/src/testing/decorators/withLayout.tsx +63 -0
- package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +5 -5
- package/src/testing/decorators/withTheme.tsx +32 -0
- package/src/util/index.ts +3 -1
- package/src/util/usePx.ts +61 -0
- package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
- package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
- package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
- package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
- package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
- package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
- package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
- package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
- package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
- package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
- package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
- package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
- package/dist/types/src/components/Lists/List.d.ts.map +0 -1
- package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
- package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
- package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
- package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
- package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
- package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
- package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
- package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
- package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
- package/dist/types/src/components/Lists/index.d.ts.map +0 -1
- package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
- package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
- package/dist/types/src/components/Menus/index.d.ts.map +0 -1
- package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
- package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
- package/dist/types/src/util/ThemedClassName.d.ts +0 -5
- package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
- package/src/components/Dialogs/Dialog.stories.tsx +0 -65
- package/src/testing/decorators/withTheme.ts +0 -25
- package/src/util/ThemedClassName.ts +0 -7
- /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
- /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
- /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
- /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
- /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
- /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
- /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
- /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
- /package/src/components/{Buttons → Button}/index.ts +0 -0
- /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
- /package/src/components/{Lists → List}/index.ts +0 -0
- /package/src/components/{Menus → Menu}/index.ts +0 -0
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
6
|
-
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
7
6
|
import React from 'react';
|
|
8
7
|
|
|
9
|
-
import { Main, useSidebars } from './Main';
|
|
10
8
|
import { withTheme } from '../../testing';
|
|
11
|
-
import { Button } from '../
|
|
9
|
+
import { Button } from '../Button';
|
|
10
|
+
|
|
11
|
+
import { Main, useSidebars } from './Main';
|
|
12
12
|
|
|
13
13
|
type StoryMainArgs = {};
|
|
14
14
|
|
|
@@ -45,15 +45,23 @@ const DefaultStory = (_args: StoryMainArgs) => {
|
|
|
45
45
|
);
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
const meta = {
|
|
49
49
|
title: 'ui/react-ui-core/Main',
|
|
50
50
|
component: Main.Root,
|
|
51
51
|
render: DefaultStory,
|
|
52
52
|
decorators: [withTheme],
|
|
53
|
-
parameters: {
|
|
54
|
-
|
|
53
|
+
parameters: {
|
|
54
|
+
layout: 'fullscreen',
|
|
55
|
+
chromatic: {
|
|
56
|
+
disableSnapshot: false,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
60
|
+
|
|
61
|
+
export default meta;
|
|
62
|
+
|
|
63
|
+
type Story = StoryObj<typeof meta>;
|
|
55
64
|
|
|
56
|
-
export const Default = {
|
|
65
|
+
export const Default: Story = {
|
|
57
66
|
args: {},
|
|
58
|
-
layout: 'fullscreen',
|
|
59
67
|
};
|
|
@@ -2,49 +2,41 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { useFocusableGroup } from '@fluentui/react-tabster';
|
|
5
6
|
import { createContext } from '@radix-ui/react-context';
|
|
6
|
-
import { Root as DialogRoot,
|
|
7
|
+
import { DialogContent, Root as DialogRoot, DialogTitle } from '@radix-ui/react-dialog';
|
|
7
8
|
import { Primitive } from '@radix-ui/react-primitive';
|
|
8
9
|
import { Slot } from '@radix-ui/react-slot';
|
|
9
10
|
import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
10
11
|
import React, {
|
|
11
12
|
type ComponentPropsWithRef,
|
|
13
|
+
type ComponentPropsWithoutRef,
|
|
12
14
|
type Dispatch,
|
|
13
|
-
|
|
15
|
+
type KeyboardEvent,
|
|
14
16
|
type PropsWithChildren,
|
|
15
17
|
type SetStateAction,
|
|
18
|
+
forwardRef,
|
|
16
19
|
useCallback,
|
|
17
20
|
useEffect,
|
|
18
21
|
useRef,
|
|
19
22
|
useState,
|
|
20
|
-
type KeyboardEvent,
|
|
21
|
-
type ComponentPropsWithoutRef,
|
|
22
23
|
} from 'react';
|
|
23
24
|
|
|
24
25
|
import { log } from '@dxos/log';
|
|
25
|
-
import {
|
|
26
|
+
import { useForwardedRef, useMediaQuery } from '@dxos/react-hooks';
|
|
26
27
|
|
|
27
|
-
import { useSwipeToDismiss } from './useSwipeToDismiss';
|
|
28
28
|
import { useThemeContext } from '../../hooks';
|
|
29
29
|
import { type ThemedClassName } from '../../util';
|
|
30
30
|
import { type Label, toLocalizedString, useTranslation } from '../ThemeProvider';
|
|
31
31
|
|
|
32
|
+
import { useSwipeToDismiss } from './useSwipeToDismiss';
|
|
33
|
+
|
|
34
|
+
const MAIN_NAME = 'Main';
|
|
32
35
|
const MAIN_ROOT_NAME = 'MainRoot';
|
|
33
36
|
const NAVIGATION_SIDEBAR_NAME = 'NavigationSidebar';
|
|
34
37
|
const COMPLEMENTARY_SIDEBAR_NAME = 'ComplementarySidebar';
|
|
35
|
-
const MAIN_NAME = 'Main';
|
|
36
38
|
const GENERIC_CONSUMER_NAME = 'GenericConsumer';
|
|
37
39
|
|
|
38
|
-
type SidebarState = 'expanded' | 'collapsed' | 'closed';
|
|
39
|
-
|
|
40
|
-
type MainContextValue = {
|
|
41
|
-
resizing: boolean;
|
|
42
|
-
navigationSidebarState: SidebarState;
|
|
43
|
-
setNavigationSidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
|
|
44
|
-
complementarySidebarState: SidebarState;
|
|
45
|
-
setComplementarySidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
40
|
const landmarkAttr = 'data-main-landmark';
|
|
49
41
|
|
|
50
42
|
/**
|
|
@@ -69,20 +61,38 @@ const useLandmarkMover = (propsOnKeyDown: ComponentPropsWithoutRef<'div'>['onKey
|
|
|
69
61
|
},
|
|
70
62
|
[propsOnKeyDown],
|
|
71
63
|
);
|
|
72
|
-
const focusableGroupAttrs = window ? {} : { tabBehavior: 'limited', ignoreDefaultKeydown: { Tab: true } };
|
|
73
64
|
|
|
74
|
-
|
|
65
|
+
// TODO(thure): This was disconnected once before in #8818;
|
|
66
|
+
// if this should change again to support the browser extension, please ensure the change doesn’t break web, desktop and mobile.
|
|
67
|
+
const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited', ignoreDefaultKeydown: { Tab: true } });
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
onKeyDown: handleKeyDown,
|
|
71
|
+
[landmarkAttr]: landmark,
|
|
72
|
+
tabIndex: 0,
|
|
73
|
+
...focusableGroupAttrs,
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
type SidebarState = 'expanded' | 'collapsed' | 'closed';
|
|
78
|
+
|
|
79
|
+
type MainContextValue = {
|
|
80
|
+
resizing: boolean;
|
|
81
|
+
navigationSidebarState: SidebarState;
|
|
82
|
+
setNavigationSidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
|
|
83
|
+
complementarySidebarState: SidebarState;
|
|
84
|
+
setComplementarySidebarState: Dispatch<SetStateAction<SidebarState | undefined>>;
|
|
75
85
|
};
|
|
76
86
|
|
|
77
87
|
const [MainProvider, useMainContext] = createContext<MainContextValue>(MAIN_NAME, {
|
|
78
88
|
resizing: false,
|
|
79
89
|
navigationSidebarState: 'closed',
|
|
80
|
-
setNavigationSidebarState: (
|
|
90
|
+
setNavigationSidebarState: (_nextState) => {
|
|
81
91
|
// TODO(burdon): Standardize with other context missing errors using raise.
|
|
82
92
|
log.warn('Attempt to set sidebar state without initializing `MainRoot`');
|
|
83
93
|
},
|
|
84
94
|
complementarySidebarState: 'closed',
|
|
85
|
-
setComplementarySidebarState: (
|
|
95
|
+
setComplementarySidebarState: (_nextState) => {
|
|
86
96
|
// TODO(burdon): Standardize with other context missing errors using raise.
|
|
87
97
|
log.warn('Attempt to set sidebar state without initializing `MainRoot`');
|
|
88
98
|
},
|
|
@@ -135,7 +145,7 @@ const MainRoot = ({
|
|
|
135
145
|
children,
|
|
136
146
|
...props
|
|
137
147
|
}: MainRootProps) => {
|
|
138
|
-
const [isLg] = useMediaQuery('lg'
|
|
148
|
+
const [isLg] = useMediaQuery('lg');
|
|
139
149
|
const [navigationSidebarState = isLg ? 'expanded' : 'collapsed', setNavigationSidebarState] =
|
|
140
150
|
useControllableState<SidebarState>({
|
|
141
151
|
prop: propsNavigationSidebarState,
|
|
@@ -204,7 +214,7 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
|
|
|
204
214
|
{ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props },
|
|
205
215
|
forwardedRef,
|
|
206
216
|
) => {
|
|
207
|
-
const [isLg] = useMediaQuery('lg'
|
|
217
|
+
const [isLg] = useMediaQuery('lg');
|
|
208
218
|
const { tx } = useThemeContext();
|
|
209
219
|
const { t } = useTranslation();
|
|
210
220
|
const ref = useForwardedRef(forwardedRef);
|
|
@@ -212,10 +222,15 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
|
|
|
212
222
|
useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
|
|
213
223
|
onDismiss: () => onStateChange?.('closed'),
|
|
214
224
|
});
|
|
225
|
+
// NOTE(thure): This is a workaround for something further down the tree grabbing focus on Escape. Adding this
|
|
226
|
+
// intervention to `Tabs.Root` or `Tabs.Tabpenel` instances is somehow ineffectual.
|
|
215
227
|
const handleKeyDown = useCallback(
|
|
216
228
|
(event: KeyboardEvent<HTMLDivElement>) => {
|
|
217
|
-
|
|
218
|
-
|
|
229
|
+
const focusGroupParent = (event.target as HTMLElement).closest('[data-tabster]');
|
|
230
|
+
if (event.key === 'Escape' && focusGroupParent) {
|
|
231
|
+
event.preventDefault();
|
|
232
|
+
event.stopPropagation();
|
|
233
|
+
(focusGroupParent as HTMLElement).focus();
|
|
219
234
|
}
|
|
220
235
|
props.onKeyDown?.(event);
|
|
221
236
|
},
|
|
@@ -233,8 +248,8 @@ const MainSidebar = forwardRef<HTMLDivElement, MainSidebarProps>(
|
|
|
233
248
|
data-state={state}
|
|
234
249
|
data-resizing={resizing ? 'true' : 'false'}
|
|
235
250
|
className={tx('main.sidebar', 'main__sidebar', {}, classNames)}
|
|
236
|
-
|
|
237
|
-
{...(state === 'closed' && { inert:
|
|
251
|
+
onKeyDownCapture={handleKeyDown}
|
|
252
|
+
{...(state === 'closed' && { inert: true })}
|
|
238
253
|
ref={ref}
|
|
239
254
|
>
|
|
240
255
|
{children}
|
|
@@ -323,7 +338,7 @@ MainContent.displayName = MAIN_NAME;
|
|
|
323
338
|
type MainOverlayProps = ThemedClassName<Omit<ComponentPropsWithRef<typeof Primitive.div>, 'children'>>;
|
|
324
339
|
|
|
325
340
|
const MainOverlay = forwardRef<HTMLDivElement, MainOverlayProps>(({ classNames, ...props }, forwardedRef) => {
|
|
326
|
-
const [isLg] = useMediaQuery('lg'
|
|
341
|
+
const [isLg] = useMediaQuery('lg');
|
|
327
342
|
const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } =
|
|
328
343
|
useMainContext(MAIN_NAME);
|
|
329
344
|
const { tx } = useThemeContext();
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
6
|
-
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
7
6
|
import React from 'react';
|
|
8
7
|
|
|
9
|
-
import { ContextMenu } from './ContextMenu';
|
|
10
8
|
import { withTheme } from '../../testing';
|
|
11
9
|
|
|
10
|
+
import { ContextMenu } from './ContextMenu';
|
|
11
|
+
|
|
12
12
|
const DefaultStory = () => {
|
|
13
13
|
// NOTE(thure): Since long-tap will select text in some OSs, apply `select-none` to `ContextMenu.Trigger` where possible.
|
|
14
14
|
return (
|
|
@@ -91,15 +91,18 @@ const DefaultStory = () => {
|
|
|
91
91
|
);
|
|
92
92
|
};
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
const meta = {
|
|
95
95
|
title: 'ui/react-ui-core/ContextMenu',
|
|
96
|
-
component: ContextMenu,
|
|
96
|
+
component: ContextMenu.Root as any,
|
|
97
97
|
render: DefaultStory,
|
|
98
98
|
decorators: [withTheme],
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
100
|
+
|
|
101
|
+
export default meta;
|
|
102
|
+
|
|
103
|
+
type Story = StoryObj<typeof meta>;
|
|
101
104
|
|
|
102
|
-
export const Default = {
|
|
105
|
+
export const Default: Story = {
|
|
103
106
|
args: {},
|
|
104
107
|
parameters: {
|
|
105
108
|
chromatic: { delay: 1600 },
|
|
@@ -34,6 +34,7 @@ const ContextMenuContent = forwardRef<HTMLDivElement, ContextMenuContentProps>(
|
|
|
34
34
|
return (
|
|
35
35
|
<ContextMenuPrimitive.Content
|
|
36
36
|
{...props}
|
|
37
|
+
data-arrow-keys='up down'
|
|
37
38
|
collisionPadding={safeCollisionPadding}
|
|
38
39
|
className={tx('menu.content', 'menu', { elevation }, classNames)}
|
|
39
40
|
ref={forwardedRef}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
6
|
-
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
7
6
|
import React, { useRef, useState } from 'react';
|
|
8
7
|
|
|
9
|
-
import { DropdownMenu } from './DropdownMenu';
|
|
10
8
|
import { withTheme } from '../../testing';
|
|
11
|
-
import { Button } from '../
|
|
9
|
+
import { Button } from '../Button';
|
|
10
|
+
|
|
11
|
+
import { DropdownMenu } from './DropdownMenu';
|
|
12
12
|
|
|
13
13
|
const DefaultStory = () => {
|
|
14
14
|
return (
|
|
@@ -91,15 +91,18 @@ const DefaultStory = () => {
|
|
|
91
91
|
);
|
|
92
92
|
};
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
const meta = {
|
|
95
95
|
title: 'ui/react-ui-core/DropdownMenu',
|
|
96
|
-
component: DropdownMenu,
|
|
96
|
+
component: DropdownMenu.Root,
|
|
97
97
|
render: DefaultStory,
|
|
98
98
|
decorators: [withTheme],
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
100
|
+
|
|
101
|
+
export default meta;
|
|
102
|
+
|
|
103
|
+
type Story = StoryObj<typeof meta>;
|
|
101
104
|
|
|
102
|
-
export const Default = {
|
|
105
|
+
export const Default: Story = {
|
|
103
106
|
args: {},
|
|
104
107
|
parameters: {
|
|
105
108
|
chromatic: { delay: 1600 },
|
|
@@ -15,17 +15,18 @@ import { Primitive } from '@radix-ui/react-primitive';
|
|
|
15
15
|
import { Slot } from '@radix-ui/react-slot';
|
|
16
16
|
import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
17
17
|
import React, {
|
|
18
|
-
type ReactNode,
|
|
19
|
-
type FC,
|
|
20
|
-
useRef,
|
|
21
|
-
type ElementRef,
|
|
22
|
-
useCallback,
|
|
23
|
-
type ComponentPropsWithoutRef,
|
|
24
|
-
forwardRef,
|
|
25
18
|
type ComponentPropsWithRef,
|
|
26
|
-
|
|
19
|
+
type ComponentPropsWithoutRef,
|
|
20
|
+
type ElementRef,
|
|
21
|
+
type FC,
|
|
27
22
|
type MutableRefObject,
|
|
23
|
+
type ReactNode,
|
|
28
24
|
type RefObject,
|
|
25
|
+
forwardRef,
|
|
26
|
+
useCallback,
|
|
27
|
+
useEffect,
|
|
28
|
+
useMemo,
|
|
29
|
+
useRef,
|
|
29
30
|
} from 'react';
|
|
30
31
|
|
|
31
32
|
import { useElevationContext, useThemeContext } from '../../hooks';
|
|
@@ -34,15 +35,15 @@ import { type ThemedClassName } from '../../util';
|
|
|
34
35
|
|
|
35
36
|
type Direction = 'ltr' | 'rtl';
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
//
|
|
39
|
+
// DropdownMenu
|
|
40
|
+
//
|
|
40
41
|
|
|
41
42
|
const DROPDOWN_MENU_NAME = 'DropdownMenu';
|
|
42
43
|
|
|
43
44
|
type ScopedProps<P> = P & { __scopeDropdownMenu?: Scope };
|
|
44
45
|
const [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(DROPDOWN_MENU_NAME, [createMenuScope]);
|
|
45
|
-
const useMenuScope = createMenuScope();
|
|
46
|
+
const useMenuScope: (scope?: Scope) => any = createMenuScope();
|
|
46
47
|
|
|
47
48
|
type DropdownMenuContextValue = {
|
|
48
49
|
triggerId: string;
|
|
@@ -96,9 +97,9 @@ const DropdownMenuRoot: FC<DropdownMenuRootProps> = (props: ScopedProps<Dropdown
|
|
|
96
97
|
|
|
97
98
|
DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
|
|
98
99
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
//
|
|
101
|
+
// DropdownMenuTrigger
|
|
102
|
+
//
|
|
102
103
|
|
|
103
104
|
const TRIGGER_NAME = 'DropdownMenuTrigger';
|
|
104
105
|
|
|
@@ -124,6 +125,7 @@ const DropdownMenuTrigger = forwardRef<DropdownMenuTriggerElement, DropdownMenuT
|
|
|
124
125
|
disabled={disabled}
|
|
125
126
|
{...triggerProps}
|
|
126
127
|
ref={composeRefs(forwardedRef, context.triggerRef)}
|
|
128
|
+
data-arrow-keys='down'
|
|
127
129
|
onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {
|
|
128
130
|
// only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
|
|
129
131
|
// but not when the control key is pressed (avoiding MacOS right click)
|
|
@@ -160,14 +162,14 @@ const DropdownMenuTrigger = forwardRef<DropdownMenuTriggerElement, DropdownMenuT
|
|
|
160
162
|
|
|
161
163
|
DropdownMenuTrigger.displayName = TRIGGER_NAME;
|
|
162
164
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
165
|
+
//
|
|
166
|
+
// DropdownMenuVirtualTrigger
|
|
167
|
+
//
|
|
166
168
|
|
|
167
169
|
const VIRTUAL_TRIGGER_NAME = 'DropdownMenuVirtualTrigger';
|
|
168
170
|
|
|
169
171
|
interface DropdownMenuVirtualTriggerProps {
|
|
170
|
-
virtualRef: RefObject<DropdownMenuTriggerElement>;
|
|
172
|
+
virtualRef: RefObject<DropdownMenuTriggerElement | null>;
|
|
171
173
|
}
|
|
172
174
|
|
|
173
175
|
const DropdownMenuVirtualTrigger = (props: ScopedProps<DropdownMenuVirtualTriggerProps>) => {
|
|
@@ -179,14 +181,14 @@ const DropdownMenuVirtualTrigger = (props: ScopedProps<DropdownMenuVirtualTrigge
|
|
|
179
181
|
context.triggerRef.current = virtualRef.current;
|
|
180
182
|
}
|
|
181
183
|
});
|
|
182
|
-
return <MenuPrimitive.Anchor {...menuScope} virtualRef={virtualRef} />;
|
|
184
|
+
return <MenuPrimitive.Anchor {...menuScope} virtualRef={virtualRef as RefObject<DropdownMenuTriggerElement>} />;
|
|
183
185
|
};
|
|
184
186
|
|
|
185
187
|
DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
|
|
186
188
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
189
|
+
//
|
|
190
|
+
// DropdownMenuPortal
|
|
191
|
+
//
|
|
190
192
|
|
|
191
193
|
const PORTAL_NAME = 'DropdownMenuPortal';
|
|
192
194
|
|
|
@@ -201,9 +203,9 @@ const DropdownMenuPortal: FC<DropdownMenuPortalProps> = (props: ScopedProps<Drop
|
|
|
201
203
|
|
|
202
204
|
DropdownMenuPortal.displayName = PORTAL_NAME;
|
|
203
205
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
//
|
|
207
|
+
// DropdownMenuViewport
|
|
208
|
+
//
|
|
207
209
|
|
|
208
210
|
type DropdownMenuViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
209
211
|
asChild?: boolean;
|
|
@@ -221,9 +223,9 @@ const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProp
|
|
|
221
223
|
},
|
|
222
224
|
);
|
|
223
225
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
//
|
|
227
|
+
// DropdownMenuContent
|
|
228
|
+
//
|
|
227
229
|
|
|
228
230
|
const CONTENT_NAME = 'DropdownMenuContent';
|
|
229
231
|
|
|
@@ -233,19 +235,35 @@ interface DropdownMenuContentProps extends Omit<MenuContentProps, 'onEntryFocus'
|
|
|
233
235
|
|
|
234
236
|
const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
|
|
235
237
|
(props: ScopedProps<DropdownMenuContentProps>, forwardedRef) => {
|
|
236
|
-
const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
|
|
238
|
+
const { __scopeDropdownMenu, classNames, collisionPadding = 8, collisionBoundary, ...contentProps } = props;
|
|
237
239
|
const { tx } = useThemeContext();
|
|
238
240
|
const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
|
|
239
241
|
const elevation = useElevationContext();
|
|
240
242
|
const menuScope = useMenuScope(__scopeDropdownMenu);
|
|
241
243
|
const hasInteractedOutsideRef = useRef(false);
|
|
242
244
|
const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
|
|
245
|
+
|
|
246
|
+
// Check for the closest annotated collision boundary in the DOM tree.
|
|
247
|
+
const computedCollisionBoundary = useMemo(() => {
|
|
248
|
+
const closestBoundary = context.triggerRef.current?.closest(
|
|
249
|
+
'[data-popover-collision-boundary]',
|
|
250
|
+
) as HTMLElement | null;
|
|
251
|
+
return closestBoundary
|
|
252
|
+
? Array.isArray(collisionBoundary)
|
|
253
|
+
? [closestBoundary, ...collisionBoundary]
|
|
254
|
+
: collisionBoundary
|
|
255
|
+
? [closestBoundary, collisionBoundary]
|
|
256
|
+
: [closestBoundary]
|
|
257
|
+
: collisionBoundary;
|
|
258
|
+
}, [context.open, collisionBoundary, context.triggerRef.current]);
|
|
259
|
+
|
|
243
260
|
return (
|
|
244
261
|
<MenuPrimitive.Content
|
|
245
262
|
id={context.contentId}
|
|
246
263
|
aria-labelledby={context.triggerId}
|
|
247
264
|
{...menuScope}
|
|
248
265
|
{...contentProps}
|
|
266
|
+
collisionBoundary={computedCollisionBoundary}
|
|
249
267
|
collisionPadding={safeCollisionPadding}
|
|
250
268
|
ref={forwardedRef}
|
|
251
269
|
onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
|
|
@@ -264,6 +282,7 @@ const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuC
|
|
|
264
282
|
hasInteractedOutsideRef.current = true;
|
|
265
283
|
}
|
|
266
284
|
})}
|
|
285
|
+
data-arrow-keys='up down'
|
|
267
286
|
className={tx('menu.content', 'menu', { elevation }, classNames)}
|
|
268
287
|
style={{
|
|
269
288
|
...props.style,
|
|
@@ -283,9 +302,9 @@ const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuC
|
|
|
283
302
|
|
|
284
303
|
DropdownMenuContent.displayName = CONTENT_NAME;
|
|
285
304
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
305
|
+
//
|
|
306
|
+
// DropdownMenuGroup
|
|
307
|
+
//
|
|
289
308
|
|
|
290
309
|
const GROUP_NAME = 'DropdownMenuGroup';
|
|
291
310
|
|
|
@@ -303,9 +322,9 @@ const DropdownMenuGroup = forwardRef<DropdownMenuGroupElement, DropdownMenuGroup
|
|
|
303
322
|
|
|
304
323
|
DropdownMenuGroup.displayName = GROUP_NAME;
|
|
305
324
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
325
|
+
//
|
|
326
|
+
// DropdownMenuLabel
|
|
327
|
+
//
|
|
309
328
|
|
|
310
329
|
const LABEL_NAME = 'DropdownMenuLabel';
|
|
311
330
|
|
|
@@ -331,9 +350,9 @@ const DropdownMenuGroupLabel = forwardRef<DropdownMenuLabelElement, DropdownMenu
|
|
|
331
350
|
|
|
332
351
|
DropdownMenuGroupLabel.displayName = LABEL_NAME;
|
|
333
352
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
353
|
+
//
|
|
354
|
+
// DropdownMenuItem
|
|
355
|
+
//
|
|
337
356
|
|
|
338
357
|
const ITEM_NAME = 'DropdownMenuItem';
|
|
339
358
|
|
|
@@ -359,9 +378,9 @@ const DropdownMenuItem = forwardRef<DropdownMenuItemElement, DropdownMenuItemPro
|
|
|
359
378
|
|
|
360
379
|
DropdownMenuItem.displayName = ITEM_NAME;
|
|
361
380
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
381
|
+
//
|
|
382
|
+
// DropdownMenuCheckboxItem
|
|
383
|
+
//
|
|
365
384
|
|
|
366
385
|
const CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';
|
|
367
386
|
|
|
@@ -387,9 +406,9 @@ const DropdownMenuCheckboxItem = forwardRef<DropdownMenuCheckboxItemElement, Dro
|
|
|
387
406
|
|
|
388
407
|
DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
|
|
389
408
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
409
|
+
//
|
|
410
|
+
// DropdownMenuRadioGroup
|
|
411
|
+
//
|
|
393
412
|
|
|
394
413
|
const RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';
|
|
395
414
|
|
|
@@ -407,29 +426,37 @@ const DropdownMenuRadioGroup = forwardRef<DropdownMenuRadioGroupElement, Dropdow
|
|
|
407
426
|
|
|
408
427
|
DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
|
|
409
428
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
429
|
+
//
|
|
430
|
+
// DropdownMenuRadioItem
|
|
431
|
+
//
|
|
413
432
|
|
|
414
433
|
const RADIO_ITEM_NAME = 'DropdownMenuRadioItem';
|
|
415
434
|
|
|
416
435
|
type DropdownMenuRadioItemElement = ElementRef<typeof MenuPrimitive.RadioItem>;
|
|
417
436
|
type MenuRadioItemProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;
|
|
418
|
-
|
|
437
|
+
type DropdownMenuRadioItemProps = ThemedClassName<MenuRadioItemProps>;
|
|
419
438
|
|
|
420
439
|
const DropdownMenuRadioItem = forwardRef<DropdownMenuRadioItemElement, DropdownMenuRadioItemProps>(
|
|
421
440
|
(props: ScopedProps<DropdownMenuRadioItemProps>, forwardedRef) => {
|
|
422
|
-
const { __scopeDropdownMenu, ...
|
|
441
|
+
const { __scopeDropdownMenu, classNames, ...itemProps } = props;
|
|
423
442
|
const menuScope = useMenuScope(__scopeDropdownMenu);
|
|
424
|
-
|
|
443
|
+
const { tx } = useThemeContext();
|
|
444
|
+
return (
|
|
445
|
+
<MenuPrimitive.Item
|
|
446
|
+
{...menuScope}
|
|
447
|
+
{...itemProps}
|
|
448
|
+
className={tx('menu.item', 'menu__item', {}, classNames)}
|
|
449
|
+
ref={forwardedRef}
|
|
450
|
+
/>
|
|
451
|
+
);
|
|
425
452
|
},
|
|
426
453
|
);
|
|
427
454
|
|
|
428
455
|
DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
|
|
429
456
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
457
|
+
//
|
|
458
|
+
// DropdownMenuItemIndicator
|
|
459
|
+
//
|
|
433
460
|
|
|
434
461
|
const INDICATOR_NAME = 'DropdownMenuItemIndicator';
|
|
435
462
|
|
|
@@ -447,9 +474,9 @@ const DropdownMenuItemIndicator = forwardRef<DropdownMenuItemIndicatorElement, D
|
|
|
447
474
|
|
|
448
475
|
DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
|
|
449
476
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
477
|
+
//
|
|
478
|
+
// DropdownMenuSeparator
|
|
479
|
+
//
|
|
453
480
|
|
|
454
481
|
const SEPARATOR_NAME = 'DropdownMenuSeparator';
|
|
455
482
|
|
|
@@ -475,9 +502,9 @@ const DropdownMenuSeparator = forwardRef<DropdownMenuSeparatorElement, DropdownM
|
|
|
475
502
|
|
|
476
503
|
DropdownMenuSeparator.displayName = SEPARATOR_NAME;
|
|
477
504
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
505
|
+
//
|
|
506
|
+
// DropdownMenuArrow
|
|
507
|
+
//
|
|
481
508
|
|
|
482
509
|
const ARROW_NAME = 'DropdownMenuArrow';
|
|
483
510
|
|
|
@@ -503,9 +530,9 @@ const DropdownMenuArrow = forwardRef<DropdownMenuArrowElement, DropdownMenuArrow
|
|
|
503
530
|
|
|
504
531
|
DropdownMenuArrow.displayName = ARROW_NAME;
|
|
505
532
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
533
|
+
//
|
|
534
|
+
// DropdownMenuSub
|
|
535
|
+
//
|
|
509
536
|
|
|
510
537
|
interface DropdownMenuSubProps {
|
|
511
538
|
children?: ReactNode;
|
|
@@ -530,9 +557,9 @@ const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMe
|
|
|
530
557
|
);
|
|
531
558
|
};
|
|
532
559
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
560
|
+
//
|
|
561
|
+
// DropdownMenuSubTrigger
|
|
562
|
+
//
|
|
536
563
|
|
|
537
564
|
const SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';
|
|
538
565
|
|
|
@@ -550,9 +577,9 @@ const DropdownMenuSubTrigger = forwardRef<DropdownMenuSubTriggerElement, Dropdow
|
|
|
550
577
|
|
|
551
578
|
DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
|
|
552
579
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
580
|
+
//
|
|
581
|
+
// DropdownMenuSubContent
|
|
582
|
+
//
|
|
556
583
|
|
|
557
584
|
const SUB_CONTENT_NAME = 'DropdownMenuSubContent';
|
|
558
585
|
|
|
@@ -588,7 +615,9 @@ const DropdownMenuSubContent = forwardRef<DropdownMenuSubContentElement, Dropdow
|
|
|
588
615
|
|
|
589
616
|
DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
|
|
590
617
|
|
|
591
|
-
|
|
618
|
+
//
|
|
619
|
+
// DropdownMenu
|
|
620
|
+
//
|
|
592
621
|
|
|
593
622
|
export const DropdownMenu = {
|
|
594
623
|
Root: DropdownMenuRoot,
|
|
@@ -611,7 +640,9 @@ export const DropdownMenu = {
|
|
|
611
640
|
SubContent: DropdownMenuSubContent,
|
|
612
641
|
};
|
|
613
642
|
|
|
614
|
-
|
|
643
|
+
type DropdownMenuScope = Scope;
|
|
644
|
+
|
|
645
|
+
const useDropdownMenuMenuScope: (scope?: DropdownMenuScope) => any = useMenuScope;
|
|
615
646
|
|
|
616
647
|
export { createDropdownMenuScope, useDropdownMenuContext, useDropdownMenuMenuScope };
|
|
617
648
|
|