@salt-ds/lab 1.0.0-alpha.90 → 1.0.0-alpha.91
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/CHANGELOG.md +45 -0
- package/css/salt-lab.css +125 -366
- package/dist-cjs/index.js +20 -16
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenu.js +82 -0
- package/dist-cjs/mega-menu/MegaMenu.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuContent.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuContent.js +33 -0
- package/dist-cjs/mega-menu/MegaMenuContent.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuContext.js +11 -0
- package/dist-cjs/mega-menu/MegaMenuContext.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuGroup.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuGroup.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuGroup.js +58 -0
- package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuHeader.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuHeader.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuHeader.js +26 -0
- package/dist-cjs/mega-menu/MegaMenuHeader.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuItem.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuItem.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuItem.js +52 -0
- package/dist-cjs/mega-menu/MegaMenuItem.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuItemContent.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuItemContent.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuItemContent.js +23 -0
- package/dist-cjs/mega-menu/MegaMenuItemContent.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuPanel.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuPanel.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuPanel.js +108 -0
- package/dist-cjs/mega-menu/MegaMenuPanel.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuSection.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuSection.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuSection.js +25 -0
- package/dist-cjs/mega-menu/MegaMenuSection.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuTrigger.js +92 -0
- package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +1 -0
- package/dist-cjs/mega-menu/useMegaMenu.js +15 -0
- package/dist-cjs/mega-menu/useMegaMenu.js.map +1 -0
- package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +209 -0
- package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +1 -0
- package/dist-cjs/side-panel/SidePanel.css.js +1 -1
- package/dist-cjs/side-panel/SidePanel.js +25 -30
- package/dist-cjs/side-panel/SidePanel.js.map +1 -1
- package/dist-cjs/side-panel/SidePanelCloseButton.js +38 -0
- package/dist-cjs/side-panel/SidePanelCloseButton.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelContent.css.js +1 -1
- package/dist-cjs/side-panel/SidePanelContent.js +3 -23
- package/dist-cjs/side-panel/SidePanelContent.js.map +1 -1
- package/dist-cjs/side-panel/SidePanelHeader.css.js +1 -1
- package/dist-cjs/side-panel/SidePanelProvider.js +20 -2
- package/dist-cjs/side-panel/SidePanelProvider.js.map +1 -1
- package/dist-cjs/side-panel/SidePanelTitle.css.js +1 -1
- package/dist-cjs/side-panel/SidePanelTitle.js +1 -0
- package/dist-cjs/side-panel/SidePanelTitle.js.map +1 -1
- package/dist-cjs/side-panel/SidePanelTrigger.js +4 -4
- package/dist-cjs/side-panel/SidePanelTrigger.js.map +1 -1
- package/dist-cjs/side-panel/internal/SidePanelContext.js +3 -0
- package/dist-cjs/side-panel/internal/SidePanelContext.js.map +1 -1
- package/dist-cjs/side-panel/internal/useIsScrollable.js +50 -0
- package/dist-cjs/side-panel/internal/useIsScrollable.js.map +1 -0
- package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js +121 -0
- package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
- package/dist-cjs/side-panel/useSidePanel.js +3 -1
- package/dist-cjs/side-panel/useSidePanel.js.map +1 -1
- package/dist-cjs/tree/Tree.js +8 -5
- package/dist-cjs/tree/Tree.js.map +1 -1
- package/dist-cjs/tree/TreeContext.js.map +1 -1
- package/dist-cjs/tree/TreeNode.js +18 -14
- package/dist-cjs/tree/TreeNode.js.map +1 -1
- package/dist-cjs/tree/TreeNodeTrigger.js +4 -3
- package/dist-cjs/tree/TreeNodeTrigger.js.map +1 -1
- package/dist-cjs/tree/treeModel.js +61 -0
- package/dist-cjs/tree/treeModel.js.map +1 -0
- package/dist-cjs/tree/useTree.js +71 -65
- package/dist-cjs/tree/useTree.js.map +1 -1
- package/dist-es/index.js +10 -8
- package/dist-es/index.js.map +1 -1
- package/dist-es/mega-menu/MegaMenu.js +80 -0
- package/dist-es/mega-menu/MegaMenu.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuContent.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuContent.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuContent.js +31 -0
- package/dist-es/mega-menu/MegaMenuContent.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuContext.js +9 -0
- package/dist-es/mega-menu/MegaMenuContext.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuGroup.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuGroup.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuGroup.js +56 -0
- package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuHeader.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuHeader.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuHeader.js +24 -0
- package/dist-es/mega-menu/MegaMenuHeader.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuItem.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuItem.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuItem.js +50 -0
- package/dist-es/mega-menu/MegaMenuItem.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuItemContent.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuItemContent.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuItemContent.js +21 -0
- package/dist-es/mega-menu/MegaMenuItemContent.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuPanel.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuPanel.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuPanel.js +106 -0
- package/dist-es/mega-menu/MegaMenuPanel.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuSection.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuSection.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuSection.js +23 -0
- package/dist-es/mega-menu/MegaMenuSection.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuTrigger.js +90 -0
- package/dist-es/mega-menu/MegaMenuTrigger.js.map +1 -0
- package/dist-es/mega-menu/useMegaMenu.js +13 -0
- package/dist-es/mega-menu/useMegaMenu.js.map +1 -0
- package/dist-es/mega-menu/useMegaMenuKeyboard.js +205 -0
- package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +1 -0
- package/dist-es/side-panel/SidePanel.css.js +1 -1
- package/dist-es/side-panel/SidePanel.js +28 -33
- package/dist-es/side-panel/SidePanel.js.map +1 -1
- package/dist-es/side-panel/SidePanelCloseButton.js +36 -0
- package/dist-es/side-panel/SidePanelCloseButton.js.map +1 -0
- package/dist-es/side-panel/SidePanelContent.css.js +1 -1
- package/dist-es/side-panel/SidePanelContent.js +4 -24
- package/dist-es/side-panel/SidePanelContent.js.map +1 -1
- package/dist-es/side-panel/SidePanelHeader.css.js +1 -1
- package/dist-es/side-panel/SidePanelProvider.js +20 -2
- package/dist-es/side-panel/SidePanelProvider.js.map +1 -1
- package/dist-es/side-panel/SidePanelTitle.css.js +1 -1
- package/dist-es/side-panel/SidePanelTitle.js +1 -0
- package/dist-es/side-panel/SidePanelTitle.js.map +1 -1
- package/dist-es/side-panel/SidePanelTrigger.js +5 -5
- package/dist-es/side-panel/SidePanelTrigger.js.map +1 -1
- package/dist-es/side-panel/internal/SidePanelContext.js +3 -0
- package/dist-es/side-panel/internal/SidePanelContext.js.map +1 -1
- package/dist-es/side-panel/internal/useIsScrollable.js +48 -0
- package/dist-es/side-panel/internal/useIsScrollable.js.map +1 -0
- package/dist-es/side-panel/internal/useSidePanelTabOrder.js +119 -0
- package/dist-es/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
- package/dist-es/side-panel/useSidePanel.js +3 -1
- package/dist-es/side-panel/useSidePanel.js.map +1 -1
- package/dist-es/tree/Tree.js +8 -5
- package/dist-es/tree/Tree.js.map +1 -1
- package/dist-es/tree/TreeContext.js.map +1 -1
- package/dist-es/tree/TreeNode.js +20 -16
- package/dist-es/tree/TreeNode.js.map +1 -1
- package/dist-es/tree/TreeNodeTrigger.js +4 -3
- package/dist-es/tree/TreeNodeTrigger.js.map +1 -1
- package/dist-es/tree/treeModel.js +57 -0
- package/dist-es/tree/treeModel.js.map +1 -0
- package/dist-es/tree/useTree.js +49 -43
- package/dist-es/tree/useTree.js.map +1 -1
- package/dist-types/index.d.ts +1 -2
- package/dist-types/mega-menu/MegaMenu.d.ts +27 -0
- package/dist-types/mega-menu/MegaMenuContent.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuContext.d.ts +29 -0
- package/dist-types/mega-menu/MegaMenuGroup.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuHeader.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuItem.d.ts +12 -0
- package/dist-types/mega-menu/MegaMenuItemContent.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuPanel.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuSection.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuTrigger.d.ts +8 -0
- package/dist-types/mega-menu/index.d.ts +9 -0
- package/dist-types/mega-menu/useMegaMenu.d.ts +6 -0
- package/dist-types/mega-menu/useMegaMenuKeyboard.d.ts +30 -0
- package/dist-types/side-panel/SidePanelCloseButton.d.ts +2 -0
- package/dist-types/side-panel/SidePanelTrigger.d.ts +1 -2
- package/dist-types/side-panel/index.d.ts +1 -0
- package/dist-types/side-panel/internal/SidePanelContext.d.ts +8 -0
- package/dist-types/side-panel/internal/index.d.ts +2 -0
- package/dist-types/side-panel/internal/useIsScrollable.d.ts +2 -0
- package/dist-types/side-panel/internal/useSidePanelTabOrder.d.ts +7 -0
- package/dist-types/side-panel/useSidePanel.d.ts +11 -4
- package/dist-types/tree/TreeContext.d.ts +7 -1
- package/dist-types/tree/treeModel.d.ts +24 -0
- package/dist-types/tree/useTree.d.ts +3 -14
- package/package.json +2 -4
- package/dist-cjs/rating/Rating.css.js +0 -6
- package/dist-cjs/rating/Rating.css.js.map +0 -1
- package/dist-cjs/rating/Rating.js +0 -132
- package/dist-cjs/rating/Rating.js.map +0 -1
- package/dist-cjs/rating/RatingItem.css.js +0 -6
- package/dist-cjs/rating/RatingItem.css.js.map +0 -1
- package/dist-cjs/rating/RatingItem.js +0 -70
- package/dist-cjs/rating/RatingItem.js.map +0 -1
- package/dist-cjs/tabs-next/TabBar.css.js +0 -6
- package/dist-cjs/tabs-next/TabBar.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabBar.js +0 -41
- package/dist-cjs/tabs-next/TabBar.js.map +0 -1
- package/dist-cjs/tabs-next/TabListLayoutContext.js +0 -13
- package/dist-cjs/tabs-next/TabListLayoutContext.js.map +0 -1
- package/dist-cjs/tabs-next/TabListNext.css.js +0 -6
- package/dist-cjs/tabs-next/TabListNext.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabListNext.js +0 -271
- package/dist-cjs/tabs-next/TabListNext.js.map +0 -1
- package/dist-cjs/tabs-next/TabNext.css.js +0 -6
- package/dist-cjs/tabs-next/TabNext.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabNext.js +0 -213
- package/dist-cjs/tabs-next/TabNext.js.map +0 -1
- package/dist-cjs/tabs-next/TabNextAction.js +0 -58
- package/dist-cjs/tabs-next/TabNextAction.js.map +0 -1
- package/dist-cjs/tabs-next/TabNextContext.js +0 -23
- package/dist-cjs/tabs-next/TabNextContext.js.map +0 -1
- package/dist-cjs/tabs-next/TabNextPanel.css.js +0 -6
- package/dist-cjs/tabs-next/TabNextPanel.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabNextPanel.js +0 -92
- package/dist-cjs/tabs-next/TabNextPanel.js.map +0 -1
- package/dist-cjs/tabs-next/TabNextTrigger.css.js +0 -6
- package/dist-cjs/tabs-next/TabNextTrigger.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabNextTrigger.js +0 -180
- package/dist-cjs/tabs-next/TabNextTrigger.js.map +0 -1
- package/dist-cjs/tabs-next/TabOverflowList.css.js +0 -6
- package/dist-cjs/tabs-next/TabOverflowList.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabOverflowList.js +0 -237
- package/dist-cjs/tabs-next/TabOverflowList.js.map +0 -1
- package/dist-cjs/tabs-next/TabSlot.js +0 -30
- package/dist-cjs/tabs-next/TabSlot.js.map +0 -1
- package/dist-cjs/tabs-next/TabSlotRegistryContext.js +0 -16
- package/dist-cjs/tabs-next/TabSlotRegistryContext.js.map +0 -1
- package/dist-cjs/tabs-next/TabsNext.css.js +0 -6
- package/dist-cjs/tabs-next/TabsNext.css.js.map +0 -1
- package/dist-cjs/tabs-next/TabsNext.js +0 -195
- package/dist-cjs/tabs-next/TabsNext.js.map +0 -1
- package/dist-cjs/tabs-next/TabsNextContext.js +0 -47
- package/dist-cjs/tabs-next/TabsNextContext.js.map +0 -1
- package/dist-cjs/tabs-next/domUtils.js +0 -13
- package/dist-cjs/tabs-next/domUtils.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/overflowMath.js +0 -86
- package/dist-cjs/tabs-next/hooks/overflowMath.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useCollection.js +0 -197
- package/dist-cjs/tabs-next/hooks/useCollection.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useFocusWithRetry.js +0 -64
- package/dist-cjs/tabs-next/hooks/useFocusWithRetry.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useOverflow.js +0 -266
- package/dist-cjs/tabs-next/hooks/useOverflow.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useOverflowLayoutState.js +0 -99
- package/dist-cjs/tabs-next/hooks/useOverflowLayoutState.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useOverflowSelectionState.js +0 -60
- package/dist-cjs/tabs-next/hooks/useOverflowSelectionState.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useRenderedTabWidth.js +0 -92
- package/dist-cjs/tabs-next/hooks/useRenderedTabWidth.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useRenderedTabsRegistry.js +0 -200
- package/dist-cjs/tabs-next/hooks/useRenderedTabsRegistry.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useTabListRecovery.js +0 -76
- package/dist-cjs/tabs-next/hooks/useTabListRecovery.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useTabRemovalHandler.js +0 -165
- package/dist-cjs/tabs-next/hooks/useTabRemovalHandler.js.map +0 -1
- package/dist-cjs/tabs-next/hooks/useTabSelectionFocus.js +0 -80
- package/dist-cjs/tabs-next/hooks/useTabSelectionFocus.js.map +0 -1
- package/dist-cjs/tabs-next/widthMeasurement.js +0 -42
- package/dist-cjs/tabs-next/widthMeasurement.js.map +0 -1
- package/dist-es/rating/Rating.css.js +0 -4
- package/dist-es/rating/Rating.css.js.map +0 -1
- package/dist-es/rating/Rating.js +0 -130
- package/dist-es/rating/Rating.js.map +0 -1
- package/dist-es/rating/RatingItem.css.js +0 -4
- package/dist-es/rating/RatingItem.css.js.map +0 -1
- package/dist-es/rating/RatingItem.js +0 -68
- package/dist-es/rating/RatingItem.js.map +0 -1
- package/dist-es/tabs-next/TabBar.css.js +0 -4
- package/dist-es/tabs-next/TabBar.css.js.map +0 -1
- package/dist-es/tabs-next/TabBar.js +0 -39
- package/dist-es/tabs-next/TabBar.js.map +0 -1
- package/dist-es/tabs-next/TabListLayoutContext.js +0 -10
- package/dist-es/tabs-next/TabListLayoutContext.js.map +0 -1
- package/dist-es/tabs-next/TabListNext.css.js +0 -4
- package/dist-es/tabs-next/TabListNext.css.js.map +0 -1
- package/dist-es/tabs-next/TabListNext.js +0 -269
- package/dist-es/tabs-next/TabListNext.js.map +0 -1
- package/dist-es/tabs-next/TabNext.css.js +0 -4
- package/dist-es/tabs-next/TabNext.css.js.map +0 -1
- package/dist-es/tabs-next/TabNext.js +0 -211
- package/dist-es/tabs-next/TabNext.js.map +0 -1
- package/dist-es/tabs-next/TabNextAction.js +0 -56
- package/dist-es/tabs-next/TabNextAction.js.map +0 -1
- package/dist-es/tabs-next/TabNextContext.js +0 -20
- package/dist-es/tabs-next/TabNextContext.js.map +0 -1
- package/dist-es/tabs-next/TabNextPanel.css.js +0 -4
- package/dist-es/tabs-next/TabNextPanel.css.js.map +0 -1
- package/dist-es/tabs-next/TabNextPanel.js +0 -90
- package/dist-es/tabs-next/TabNextPanel.js.map +0 -1
- package/dist-es/tabs-next/TabNextTrigger.css.js +0 -4
- package/dist-es/tabs-next/TabNextTrigger.css.js.map +0 -1
- package/dist-es/tabs-next/TabNextTrigger.js +0 -178
- package/dist-es/tabs-next/TabNextTrigger.js.map +0 -1
- package/dist-es/tabs-next/TabOverflowList.css.js +0 -4
- package/dist-es/tabs-next/TabOverflowList.css.js.map +0 -1
- package/dist-es/tabs-next/TabOverflowList.js +0 -235
- package/dist-es/tabs-next/TabOverflowList.js.map +0 -1
- package/dist-es/tabs-next/TabSlot.js +0 -28
- package/dist-es/tabs-next/TabSlot.js.map +0 -1
- package/dist-es/tabs-next/TabSlotRegistryContext.js +0 -13
- package/dist-es/tabs-next/TabSlotRegistryContext.js.map +0 -1
- package/dist-es/tabs-next/TabsNext.css.js +0 -4
- package/dist-es/tabs-next/TabsNext.css.js.map +0 -1
- package/dist-es/tabs-next/TabsNext.js +0 -193
- package/dist-es/tabs-next/TabsNext.js.map +0 -1
- package/dist-es/tabs-next/TabsNextContext.js +0 -44
- package/dist-es/tabs-next/TabsNextContext.js.map +0 -1
- package/dist-es/tabs-next/domUtils.js +0 -11
- package/dist-es/tabs-next/domUtils.js.map +0 -1
- package/dist-es/tabs-next/hooks/overflowMath.js +0 -82
- package/dist-es/tabs-next/hooks/overflowMath.js.map +0 -1
- package/dist-es/tabs-next/hooks/useCollection.js +0 -195
- package/dist-es/tabs-next/hooks/useCollection.js.map +0 -1
- package/dist-es/tabs-next/hooks/useFocusWithRetry.js +0 -62
- package/dist-es/tabs-next/hooks/useFocusWithRetry.js.map +0 -1
- package/dist-es/tabs-next/hooks/useOverflow.js +0 -264
- package/dist-es/tabs-next/hooks/useOverflow.js.map +0 -1
- package/dist-es/tabs-next/hooks/useOverflowLayoutState.js +0 -97
- package/dist-es/tabs-next/hooks/useOverflowLayoutState.js.map +0 -1
- package/dist-es/tabs-next/hooks/useOverflowSelectionState.js +0 -58
- package/dist-es/tabs-next/hooks/useOverflowSelectionState.js.map +0 -1
- package/dist-es/tabs-next/hooks/useRenderedTabWidth.js +0 -90
- package/dist-es/tabs-next/hooks/useRenderedTabWidth.js.map +0 -1
- package/dist-es/tabs-next/hooks/useRenderedTabsRegistry.js +0 -198
- package/dist-es/tabs-next/hooks/useRenderedTabsRegistry.js.map +0 -1
- package/dist-es/tabs-next/hooks/useTabListRecovery.js +0 -74
- package/dist-es/tabs-next/hooks/useTabListRecovery.js.map +0 -1
- package/dist-es/tabs-next/hooks/useTabRemovalHandler.js +0 -163
- package/dist-es/tabs-next/hooks/useTabRemovalHandler.js.map +0 -1
- package/dist-es/tabs-next/hooks/useTabSelectionFocus.js +0 -78
- package/dist-es/tabs-next/hooks/useTabSelectionFocus.js.map +0 -1
- package/dist-es/tabs-next/widthMeasurement.js +0 -36
- package/dist-es/tabs-next/widthMeasurement.js.map +0 -1
- package/dist-types/rating/Rating.d.ts +0 -48
- package/dist-types/rating/RatingItem.d.ts +0 -47
- package/dist-types/rating/index.d.ts +0 -1
- package/dist-types/tabs-next/TabBar.d.ts +0 -12
- package/dist-types/tabs-next/TabListLayoutContext.d.ts +0 -9
- package/dist-types/tabs-next/TabListNext.d.ts +0 -12
- package/dist-types/tabs-next/TabNext.d.ts +0 -12
- package/dist-types/tabs-next/TabNextAction.d.ts +0 -4
- package/dist-types/tabs-next/TabNextContext.d.ts +0 -12
- package/dist-types/tabs-next/TabNextPanel.d.ts +0 -9
- package/dist-types/tabs-next/TabNextTrigger.d.ts +0 -4
- package/dist-types/tabs-next/TabOverflowList.d.ts +0 -10
- package/dist-types/tabs-next/TabSlot.d.ts +0 -6
- package/dist-types/tabs-next/TabSlotRegistryContext.d.ts +0 -5
- package/dist-types/tabs-next/TabsNext.d.ts +0 -18
- package/dist-types/tabs-next/TabsNextContext.d.ts +0 -43
- package/dist-types/tabs-next/domUtils.d.ts +0 -1
- package/dist-types/tabs-next/hooks/overflowMath.d.ts +0 -18
- package/dist-types/tabs-next/hooks/useCollection.d.ts +0 -30
- package/dist-types/tabs-next/hooks/useFocusWithRetry.d.ts +0 -9
- package/dist-types/tabs-next/hooks/useOverflow.d.ts +0 -11
- package/dist-types/tabs-next/hooks/useOverflowLayoutState.d.ts +0 -13
- package/dist-types/tabs-next/hooks/useOverflowSelectionState.d.ts +0 -13
- package/dist-types/tabs-next/hooks/useRenderedTabWidth.d.ts +0 -12
- package/dist-types/tabs-next/hooks/useRenderedTabsRegistry.d.ts +0 -12
- package/dist-types/tabs-next/hooks/useTabListRecovery.d.ts +0 -12
- package/dist-types/tabs-next/hooks/useTabRemovalHandler.d.ts +0 -32
- package/dist-types/tabs-next/hooks/useTabSelectionFocus.d.ts +0 -15
- package/dist-types/tabs-next/index.d.ts +0 -7
- package/dist-types/tabs-next/widthMeasurement.d.ts +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuGroup.js","sources":["../src/mega-menu/MegaMenuGroup.tsx"],"sourcesContent":["import { makePrefixer, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n cloneElement,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport megaMenuGroupCss from \"./MegaMenuGroup.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuGroup\");\n\nfunction isMegaMenuHeader(child: ReactElement): boolean {\n return !!(child.type as { __isMegaMenuHeader?: boolean })?.__isMegaMenuHeader;\n}\n\nexport interface MegaMenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The content of the mega menu group, typically MegaMenuHeader and MegaMenuItem components.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuGroup = forwardRef<HTMLDivElement, MegaMenuGroupProps>(\n function MegaMenuGroup({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-group\",\n css: megaMenuGroupCss,\n window: targetWindow,\n });\n\n const headerId = useId();\n let header: ReactNode = null;\n const items: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && isMegaMenuHeader(child) && !header) {\n header = cloneElement(child, { id: headerId });\n } else {\n items.push(child);\n }\n });\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n data-mega-menu-column=\"\"\n ref={ref}\n {...rest}\n >\n {header}\n <ol\n className={withBaseName(\"list\")}\n aria-labelledby={header ? headerId : undefined}\n >\n {items}\n </ol>\n </div>\n );\n },\n);\n"],"names":["MegaMenuGroup","megaMenuGroupCss"],"mappings":";;;;;;;;AAeA,MAAM,YAAA,GAAe,aAAa,mBAAmB,CAAA;AAErD,SAAS,iBAAiB,KAAA,EAA8B;AAjBxD,EAAA,IAAA,EAAA;AAkBE,EAAA,OAAO,CAAC,EAAA,CAAE,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiD,kBAAA,CAAA;AAC7D;AASO,MAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,SAASA,eAAc,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC5D,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,WAAW,KAAA,EAAM;AACvB,IAAA,IAAI,MAAA,GAAoB,IAAA;AACxB,IAAA,MAAM,QAAqB,EAAC;AAE5B,IAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AACpC,MAAA,IAAI,eAAe,KAAK,CAAA,IAAK,iBAAiB,KAAK,CAAA,IAAK,CAAC,MAAA,EAAQ;AAC/D,QAAA,MAAA,GAAS,YAAA,CAAa,KAAA,EAAO,EAAE,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/C,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,uBAAA,EAAsB,EAAA;AAAA,QACtB,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA;AAAA,0BACD,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,cAC9B,iBAAA,EAAiB,SAAS,QAAA,GAAW,MAAA;AAAA,cAEpC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css_248z = ".saltMegaMenuHeader-content {\n display: flex;\n align-items: center;\n padding: var(--salt-spacing-50) var(--salt-spacing-100);\n font-family: var(--salt-text-label-fontFamily);\n font-size: var(--salt-text-label-fontSize);\n font-weight: var(--salt-text-fontWeight-strong);\n line-height: var(--salt-text-label-lineHeight);\n min-height: var(--salt-size-base);\n color: var(--salt-content-secondary-foreground);\n}\n.saltMegaMenuHeader {\n margin-bottom: var(--salt-spacing-50);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-tertiary-borderColor);\n}\n";
|
|
2
|
+
|
|
3
|
+
export { css_248z as default };
|
|
4
|
+
//# sourceMappingURL=MegaMenuHeader.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuHeader.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makePrefixer } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { forwardRef } from 'react';
|
|
7
|
+
import css_248z from './MegaMenuHeader.css.js';
|
|
8
|
+
|
|
9
|
+
const withBaseName = makePrefixer("saltMegaMenuHeader");
|
|
10
|
+
const MegaMenuHeader = forwardRef(
|
|
11
|
+
function MegaMenuHeader2({ children, className, ...rest }, ref) {
|
|
12
|
+
const targetWindow = useWindow();
|
|
13
|
+
useComponentCssInjection({
|
|
14
|
+
testId: "salt-mega-menu-header",
|
|
15
|
+
css: css_248z,
|
|
16
|
+
window: targetWindow
|
|
17
|
+
});
|
|
18
|
+
return /* @__PURE__ */ jsx("div", { className: clsx(withBaseName(), className), ref, ...rest, children: /* @__PURE__ */ jsx("div", { className: clsx(withBaseName("content")), children }) });
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
MegaMenuHeader.__isMegaMenuHeader = true;
|
|
22
|
+
|
|
23
|
+
export { MegaMenuHeader };
|
|
24
|
+
//# sourceMappingURL=MegaMenuHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuHeader.js","sources":["../src/mega-menu/MegaMenuHeader.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport megaMenuHeaderCss from \"./MegaMenuHeader.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuHeader\");\n\nexport interface MegaMenuHeaderProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of the mega menu header.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuHeader = forwardRef<HTMLDivElement, MegaMenuHeaderProps>(\n function MegaMenuHeader({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-header\",\n css: megaMenuHeaderCss,\n window: targetWindow,\n });\n\n return (\n <div className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n <div className={clsx(withBaseName(\"content\"))}>{children}</div>\n </div>\n );\n },\n);\n\n/** @internal Marker used by MegaMenuGroup to identify header children. */\n(MegaMenuHeader as any).__isMegaMenuHeader = true;\n"],"names":["MegaMenuHeader","megaMenuHeaderCss"],"mappings":";;;;;;;;AAWA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA;AAS/C,MAAM,cAAA,GAAiB,UAAA;AAAA,EAC5B,SAASA,gBAAe,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC7D,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,IAAA,CAAK,cAAa,EAAG,SAAS,GAAG,GAAA,EAAW,GAAG,MAC7D,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,IAAA,CAAK,YAAA,CAAa,SAAS,CAAC,CAAA,EAAI,UAAS,CAAA,EAC3D,CAAA;AAAA,EAEJ;AACF;AAGC,cAAA,CAAuB,kBAAA,GAAqB,IAAA;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css_248z = ".saltMegaMenuItem {\n list-style: none;\n}\n\n.saltMegaMenuItem > a {\n display: flex;\n padding: var(--salt-spacing-50) var(--salt-spacing-100);\n align-items: flex-start;\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-hover);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n box-sizing: border-box;\n gap: var(--salt-spacing-100);\n position: relative;\n border-radius: var(--salt-palette-corner-weak);\n text-decoration: none;\n}\n\n.saltMegaMenuItem > a > .saltIcon {\n display: flex;\n height: var(--salt-size-base);\n align-items: center;\n}\n\n.saltMegaMenuItem > a:focus-visible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n}\n\n.saltMegaMenuItem > a:hover {\n outline: none;\n background: var(--salt-navigable-background-hover);\n}\n\n.saltMegaMenuItem > a:active {\n background: var(--salt-navigable-accent-background-active);\n}\n\n.saltMegaMenuItem > a:active::before {\n content: \"\";\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n border-radius: inherit;\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-navigable-accent-borderColor-active);\n pointer-events: none;\n}\n";
|
|
2
|
+
|
|
3
|
+
export { css_248z as default };
|
|
4
|
+
//# sourceMappingURL=MegaMenuItem.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuItem.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makePrefixer, renderProps } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { forwardRef } from 'react';
|
|
7
|
+
import css_248z from './MegaMenuItem.css.js';
|
|
8
|
+
import { useMegaMenu } from './useMegaMenu.js';
|
|
9
|
+
|
|
10
|
+
const withBaseName = makePrefixer("saltMegaMenuItem");
|
|
11
|
+
function ItemAction(props) {
|
|
12
|
+
return renderProps("a", props);
|
|
13
|
+
}
|
|
14
|
+
const MegaMenuItem = forwardRef(
|
|
15
|
+
function MegaMenuItem2({ children, className, href = "#", onClick, onKeyDown, ...rest }, ref) {
|
|
16
|
+
const targetWindow = useWindow();
|
|
17
|
+
const megaMenu = useMegaMenu();
|
|
18
|
+
useComponentCssInjection({
|
|
19
|
+
testId: "salt-mega-menu-item",
|
|
20
|
+
css: css_248z,
|
|
21
|
+
window: targetWindow
|
|
22
|
+
});
|
|
23
|
+
const handleClick = (event) => {
|
|
24
|
+
onClick == null ? void 0 : onClick(event);
|
|
25
|
+
megaMenu.setOpen(false);
|
|
26
|
+
};
|
|
27
|
+
const handleKeyDown = (event) => {
|
|
28
|
+
onKeyDown == null ? void 0 : onKeyDown(event);
|
|
29
|
+
if (!event.defaultPrevented && event.key === " ") {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
event.currentTarget.click();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
return /* @__PURE__ */ jsx("li", { className: withBaseName(), ref, children: /* @__PURE__ */ jsx(
|
|
35
|
+
ItemAction,
|
|
36
|
+
{
|
|
37
|
+
className: clsx(withBaseName(), className),
|
|
38
|
+
"data-mega-menu-item": "",
|
|
39
|
+
href,
|
|
40
|
+
onClick: handleClick,
|
|
41
|
+
onKeyDown: handleKeyDown,
|
|
42
|
+
...rest,
|
|
43
|
+
children
|
|
44
|
+
}
|
|
45
|
+
) });
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
export { MegaMenuItem };
|
|
50
|
+
//# sourceMappingURL=MegaMenuItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuItem.js","sources":["../src/mega-menu/MegaMenuItem.tsx"],"sourcesContent":["import { makePrefixer, renderProps } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type AnchorHTMLAttributes,\n type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport megaMenuItemCss from \"./MegaMenuItem.css\";\nimport { useMegaMenu } from \"./useMegaMenu\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuItem\");\n\n// biome-ignore lint/suspicious/noExplicitAny: We don't know the exact type here\nfunction ItemAction(props: ComponentPropsWithoutRef<any>) {\n return renderProps(\"a\", props);\n}\n\nexport interface MegaMenuItemProps\n extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * The content of the mega menu item.\n */\n children?: ReactNode;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nexport const MegaMenuItem = forwardRef<HTMLLIElement, MegaMenuItemProps>(\n function MegaMenuItem(\n { children, className, href = \"#\", onClick, onKeyDown, ...rest },\n ref,\n ) {\n const targetWindow = useWindow();\n const megaMenu = useMegaMenu();\n\n useComponentCssInjection({\n testId: \"salt-mega-menu-item\",\n css: megaMenuItemCss,\n window: targetWindow,\n });\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n megaMenu.setOpen(false);\n };\n\n // Native `<a>` activates on Enter but not Space — handle Space here for parity.\n const handleKeyDown = (event: KeyboardEvent<HTMLAnchorElement>) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented && event.key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n };\n\n return (\n <li className={withBaseName()} ref={ref}>\n <ItemAction\n className={clsx(withBaseName(), className)}\n data-mega-menu-item=\"\"\n href={href}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </ItemAction>\n </li>\n );\n },\n);\n"],"names":["MegaMenuItem","megaMenuItemCss"],"mappings":";;;;;;;;;AAeA,MAAM,YAAA,GAAe,aAAa,kBAAkB,CAAA;AAGpD,SAAS,WAAW,KAAA,EAAsC;AACxD,EAAA,OAAO,WAAA,CAAY,KAAK,KAAK,CAAA;AAC/B;AAcO,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,SAASA,aAAAA,CACP,EAAE,QAAA,EAAU,SAAA,EAAW,IAAA,GAAO,GAAA,EAAK,OAAA,EAAS,SAAA,EAAW,GAAG,IAAA,EAAK,EAC/D,GAAA,EACA;AACA,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAyC;AAC5D,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AACV,MAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IACxB,CAAA;AAGA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA4C;AACjE,MAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAY,KAAA,CAAA;AACZ,MAAA,IAAI,CAAC,KAAA,CAAM,gBAAA,IAAoB,KAAA,CAAM,QAAQ,GAAA,EAAK;AAChD,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,cAAc,KAAA,EAAM;AAAA,MAC5B;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,YAAA,IAAgB,GAAA,EAC7B,QAAA,kBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,qBAAA,EAAoB,EAAA;AAAA,QACpB,IAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,aAAA;AAAA,QACV,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css_248z = ".saltMegaMenuItemContent {\n flex: 1 0;\n margin: var(--salt-spacing-75) 0;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n}\n";
|
|
2
|
+
|
|
3
|
+
export { css_248z as default };
|
|
4
|
+
//# sourceMappingURL=MegaMenuItemContent.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuItemContent.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makePrefixer } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { forwardRef } from 'react';
|
|
7
|
+
import css_248z from './MegaMenuItemContent.css.js';
|
|
8
|
+
|
|
9
|
+
const withBaseName = makePrefixer("saltMegaMenuItemContent");
|
|
10
|
+
const MegaMenuItemContent = forwardRef(function MegaMenuItemContent2({ children, className, ...restProps }, ref) {
|
|
11
|
+
const targetWindow = useWindow();
|
|
12
|
+
useComponentCssInjection({
|
|
13
|
+
testId: "salt-mega-menu-item-content",
|
|
14
|
+
css: css_248z,
|
|
15
|
+
window: targetWindow
|
|
16
|
+
});
|
|
17
|
+
return /* @__PURE__ */ jsx("div", { className: clsx(withBaseName(), className), ...restProps, ref, children });
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export { MegaMenuItemContent };
|
|
21
|
+
//# sourceMappingURL=MegaMenuItemContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuItemContent.js","sources":["../src/mega-menu/MegaMenuItemContent.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport megaMenuItemContent from \"./MegaMenuItemContent.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuItemContent\");\n\nexport interface MegaMenuItemContentProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of Mega Menu Item.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuItemContent = forwardRef<\n HTMLDivElement,\n MegaMenuItemContentProps\n>(function MegaMenuItemContent({ children, className, ...restProps }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-item-content\",\n css: megaMenuItemContent,\n window: targetWindow,\n });\n\n return (\n <div className={clsx(withBaseName(), className)} {...restProps} ref={ref}>\n {children}\n </div>\n );\n});\n"],"names":["MegaMenuItemContent","megaMenuItemContent"],"mappings":";;;;;;;;AAWA,MAAM,YAAA,GAAe,aAAa,yBAAyB,CAAA;AAUpD,MAAM,mBAAA,GAAsB,UAAA,CAGjC,SAASA,oBAAAA,CAAoB,EAAE,UAAU,SAAA,EAAW,GAAG,SAAA,EAAU,EAAG,GAAA,EAAK;AACzE,EAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,EAAA,wBAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,6BAAA;AAAA,IACR,GAAA,EAAKC,QAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA,EAAI,GAAG,SAAA,EAAW,GAAA,EAC7D,QAAA,EACH,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css_248z = ".saltMegaMenuPanel {\n display: flex;\n flex-wrap: wrap;\n inline-size: var(--saltMegaMenuPanel-inlineSize, fit-content);\n max-inline-size: var(--saltMegaMenuPanel-maxInlineSize, var(--saltMegaMenuPanel-availableWidth, calc(100vw - var(--salt-spacing-600))));\n max-height: 90%;\n overflow-x: hidden;\n overflow-y: auto;\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-container-primary-borderColor);\n background: var(--salt-container-primary-background);\n box-shadow: var(--salt-overlayable-shadow-popout);\n}\n";
|
|
2
|
+
|
|
3
|
+
export { css_248z as default };
|
|
4
|
+
//# sourceMappingURL=MegaMenuPanel.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { offset, flip, shift, limitShift, size } from '@floating-ui/react';
|
|
3
|
+
import { makePrefixer, useFloatingComponent, useId, useFloatingUI } from '@salt-ds/core';
|
|
4
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
|
+
import { useWindow } from '@salt-ds/window';
|
|
6
|
+
import { clsx } from 'clsx';
|
|
7
|
+
import { forwardRef, useEffect, useState } from 'react';
|
|
8
|
+
import css_248z from './MegaMenuPanel.css.js';
|
|
9
|
+
import { useMegaMenu } from './useMegaMenu.js';
|
|
10
|
+
|
|
11
|
+
const withBaseName = makePrefixer("saltMegaMenuPanel");
|
|
12
|
+
const MegaMenuPanel = forwardRef(
|
|
13
|
+
function MegaMenuPanel2({ children, className, id: idProp, ...rest }, ref) {
|
|
14
|
+
const targetWindow = useWindow();
|
|
15
|
+
useComponentCssInjection({
|
|
16
|
+
testId: "salt-mega-menu-panel",
|
|
17
|
+
css: css_248z,
|
|
18
|
+
window: targetWindow
|
|
19
|
+
});
|
|
20
|
+
const { Component: FloatingComponent } = useFloatingComponent();
|
|
21
|
+
const {
|
|
22
|
+
openState: isOpen,
|
|
23
|
+
floatingRootContext,
|
|
24
|
+
placement,
|
|
25
|
+
getFloatingProps,
|
|
26
|
+
setFloating,
|
|
27
|
+
focusFirstItemOnOpen,
|
|
28
|
+
setPanelId
|
|
29
|
+
} = useMegaMenu();
|
|
30
|
+
const id = useId(idProp);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
setPanelId(id);
|
|
33
|
+
return () => setPanelId(void 0);
|
|
34
|
+
}, [id, setPanelId]);
|
|
35
|
+
const [pageMargin, setPageMargin] = useState(0);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!targetWindow) return;
|
|
38
|
+
const referenceEl = floatingRootContext.elements.domReference;
|
|
39
|
+
const host = referenceEl ?? targetWindow.document.body;
|
|
40
|
+
const doc = targetWindow.document;
|
|
41
|
+
const measure = () => {
|
|
42
|
+
const probe = doc.createElement("div");
|
|
43
|
+
probe.style.cssText = "position:absolute;visibility:hidden;pointer-events:none;width:var(--saltMegaMenuPanel-pageMargin, var(--salt-layout-page-margin));";
|
|
44
|
+
host.appendChild(probe);
|
|
45
|
+
const width = probe.getBoundingClientRect().width;
|
|
46
|
+
probe.remove();
|
|
47
|
+
setPageMargin((prev) => prev === width ? prev : width);
|
|
48
|
+
};
|
|
49
|
+
measure();
|
|
50
|
+
targetWindow.addEventListener("resize", measure);
|
|
51
|
+
return () => targetWindow.removeEventListener("resize", measure);
|
|
52
|
+
}, [targetWindow, floatingRootContext]);
|
|
53
|
+
const floatingUIResult = useFloatingUI({
|
|
54
|
+
rootContext: floatingRootContext,
|
|
55
|
+
placement,
|
|
56
|
+
middleware: [
|
|
57
|
+
offset(1),
|
|
58
|
+
flip({ padding: pageMargin }),
|
|
59
|
+
shift({ padding: pageMargin, limiter: limitShift() }),
|
|
60
|
+
size({
|
|
61
|
+
padding: pageMargin,
|
|
62
|
+
apply({ availableWidth, elements }) {
|
|
63
|
+
elements.floating.style.setProperty(
|
|
64
|
+
"--saltMegaMenuPanel-availableWidth",
|
|
65
|
+
`${availableWidth}px`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
]
|
|
70
|
+
});
|
|
71
|
+
const floatingProps = getFloatingProps();
|
|
72
|
+
return /* @__PURE__ */ jsx(
|
|
73
|
+
FloatingComponent,
|
|
74
|
+
{
|
|
75
|
+
open: isOpen,
|
|
76
|
+
position: floatingUIResult.strategy,
|
|
77
|
+
top: floatingUIResult.y ?? 0,
|
|
78
|
+
left: floatingUIResult.x ?? 0,
|
|
79
|
+
focusManagerProps: {
|
|
80
|
+
context: floatingUIResult.context,
|
|
81
|
+
modal: false,
|
|
82
|
+
initialFocus: focusFirstItemOnOpen ? 0 : -1,
|
|
83
|
+
returnFocus: true,
|
|
84
|
+
closeOnFocusOut: false,
|
|
85
|
+
guards: false
|
|
86
|
+
},
|
|
87
|
+
ref: setFloating,
|
|
88
|
+
children: /* @__PURE__ */ jsx(
|
|
89
|
+
"div",
|
|
90
|
+
{
|
|
91
|
+
className: clsx(withBaseName(), className),
|
|
92
|
+
id,
|
|
93
|
+
role: "region",
|
|
94
|
+
ref,
|
|
95
|
+
...floatingProps,
|
|
96
|
+
...rest,
|
|
97
|
+
children
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
export { MegaMenuPanel };
|
|
106
|
+
//# sourceMappingURL=MegaMenuPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuPanel.js","sources":["../src/mega-menu/MegaMenuPanel.tsx"],"sourcesContent":["import { flip, limitShift, offset, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useEffect,\n useState,\n} from \"react\";\nimport megaMenuPanelCss from \"./MegaMenuPanel.css\";\nimport { useMegaMenu } from \"./useMegaMenu\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuPanel\");\n\nexport interface MegaMenuPanelProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The content of the mega menu panel.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuPanel = forwardRef<HTMLDivElement, MegaMenuPanelProps>(\n function MegaMenuPanel({ children, className, id: idProp, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-panel\",\n css: megaMenuPanelCss,\n window: targetWindow,\n });\n\n const { Component: FloatingComponent } = useFloatingComponent();\n const {\n openState: isOpen,\n floatingRootContext,\n placement,\n getFloatingProps,\n setFloating,\n focusFirstItemOnOpen,\n setPanelId,\n } = useMegaMenu();\n\n const id = useId(idProp);\n\n // Register the panel id in context so the trigger can reference it via aria-controls.\n useEffect(() => {\n setPanelId(id);\n return () => setPanelId(undefined);\n }, [id, setPanelId]);\n\n // Resolve the panel's page-margin to a pixel value to override the margin as required.\n const [pageMargin, setPageMargin] = useState(0);\n useEffect(() => {\n if (!targetWindow) return;\n const referenceEl = floatingRootContext.elements.domReference as\n | HTMLElement\n | null\n | undefined;\n const host = referenceEl ?? targetWindow.document.body;\n const doc = targetWindow.document;\n const measure = () => {\n const probe = doc.createElement(\"div\");\n probe.style.cssText =\n \"position:absolute;visibility:hidden;pointer-events:none;width:var(--saltMegaMenuPanel-pageMargin, var(--salt-layout-page-margin));\";\n host.appendChild(probe);\n const width = probe.getBoundingClientRect().width;\n probe.remove();\n setPageMargin((prev) => (prev === width ? prev : width));\n };\n measure();\n targetWindow.addEventListener(\"resize\", measure);\n return () => targetWindow.removeEventListener(\"resize\", measure);\n }, [targetWindow, floatingRootContext]);\n\n const floatingUIResult = useFloatingUI({\n rootContext: floatingRootContext,\n placement,\n middleware: [\n offset(1),\n flip({ padding: pageMargin }),\n shift({ padding: pageMargin, limiter: limitShift() }),\n size({\n padding: pageMargin,\n apply({ availableWidth, elements }) {\n elements.floating.style.setProperty(\n \"--saltMegaMenuPanel-availableWidth\",\n `${availableWidth}px`,\n );\n },\n }),\n ],\n });\n\n const floatingProps = getFloatingProps();\n\n return (\n <FloatingComponent\n open={isOpen}\n position={floatingUIResult.strategy}\n top={floatingUIResult.y ?? 0}\n left={floatingUIResult.x ?? 0}\n focusManagerProps={{\n context: floatingUIResult.context,\n modal: false,\n initialFocus: focusFirstItemOnOpen ? 0 : -1,\n returnFocus: true,\n closeOnFocusOut: false,\n guards: false,\n }}\n ref={setFloating}\n >\n <div\n className={clsx(withBaseName(), className)}\n id={id}\n role=\"region\"\n ref={ref}\n {...floatingProps}\n {...rest}\n >\n {children}\n </div>\n </FloatingComponent>\n );\n },\n);\n"],"names":["MegaMenuPanel","megaMenuPanelCss"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css_248z = ".saltMegaMenuSection {\n display: grid;\n grid-template-columns: repeat(auto-fit, var(--saltMegaMenuSection-columnWidth, 12rem));\n gap: var(--salt-spacing-300);\n padding: var(--salt-spacing-300);\n max-inline-size: var(--saltMegaMenuPanel-availableWidth, calc(100vw - var(--salt-spacing-600)));\n}\n";
|
|
2
|
+
|
|
3
|
+
export { css_248z as default };
|
|
4
|
+
//# sourceMappingURL=MegaMenuSection.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuSection.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makePrefixer } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { forwardRef } from 'react';
|
|
7
|
+
import css_248z from './MegaMenuSection.css.js';
|
|
8
|
+
|
|
9
|
+
const withBaseName = makePrefixer("saltMegaMenuSection");
|
|
10
|
+
const MegaMenuSection = forwardRef(
|
|
11
|
+
function MegaMenuSection2({ children, className, ...rest }, ref) {
|
|
12
|
+
const targetWindow = useWindow();
|
|
13
|
+
useComponentCssInjection({
|
|
14
|
+
testId: "salt-mega-menu-section",
|
|
15
|
+
css: css_248z,
|
|
16
|
+
window: targetWindow
|
|
17
|
+
});
|
|
18
|
+
return /* @__PURE__ */ jsx("div", { className: clsx(withBaseName(), className), ref, ...rest, children });
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export { MegaMenuSection };
|
|
23
|
+
//# sourceMappingURL=MegaMenuSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuSection.js","sources":["../src/mega-menu/MegaMenuSection.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport megaMenuSectionCss from \"./MegaMenuSection.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuSection\");\n\nexport interface MegaMenuSectionProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The content of the mega menu section.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuSection = forwardRef<HTMLDivElement, MegaMenuSectionProps>(\n function MegaMenuSection({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-section\",\n css: megaMenuSectionCss,\n window: targetWindow,\n });\n\n return (\n <div className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n {children}\n </div>\n );\n },\n);\n"],"names":["MegaMenuSection","megaMenuSectionCss"],"mappings":";;;;;;;;AAOA,MAAM,YAAA,GAAe,aAAa,qBAAqB,CAAA;AAShD,MAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,SAASA,iBAAgB,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC9D,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA,EAAG,GAAA,EAAW,GAAG,IAAA,EAC5D,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useForkRef, getRefFromChildren, mergeProps, NavigationItem } from '@salt-ds/core';
|
|
3
|
+
import { forwardRef, useCallback, isValidElement, cloneElement } from 'react';
|
|
4
|
+
import { useMegaMenu } from './useMegaMenu.js';
|
|
5
|
+
import { focusFirstItem, FOCUSABLE_SELECTOR } from './useMegaMenuKeyboard.js';
|
|
6
|
+
|
|
7
|
+
function getAdjacentTrigger(currentTarget, direction) {
|
|
8
|
+
const li = currentTarget.closest("li");
|
|
9
|
+
if (!li) return null;
|
|
10
|
+
const sibling = direction === "next" ? li.nextElementSibling : li.previousElementSibling;
|
|
11
|
+
if (!(sibling instanceof HTMLElement)) return null;
|
|
12
|
+
return sibling.querySelector(FOCUSABLE_SELECTOR);
|
|
13
|
+
}
|
|
14
|
+
const MegaMenuTrigger = forwardRef(
|
|
15
|
+
function MegaMenuTrigger2(props, ref) {
|
|
16
|
+
const { children, ...rest } = props;
|
|
17
|
+
const megaMenu = useMegaMenu();
|
|
18
|
+
const {
|
|
19
|
+
getReferenceProps,
|
|
20
|
+
setReference,
|
|
21
|
+
setOpen,
|
|
22
|
+
openState,
|
|
23
|
+
setFocusFirstItemOnOpen,
|
|
24
|
+
floatingRootContext,
|
|
25
|
+
panelId
|
|
26
|
+
} = megaMenu;
|
|
27
|
+
const handleKeyDown = useCallback(
|
|
28
|
+
(event) => {
|
|
29
|
+
const { key, shiftKey } = event;
|
|
30
|
+
if (key === "ArrowRight" || key === "ArrowLeft") {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
const direction = key === "ArrowRight" ? "next" : "previous";
|
|
33
|
+
const adjacent = getAdjacentTrigger(event.currentTarget, direction);
|
|
34
|
+
if (adjacent) {
|
|
35
|
+
if (openState) setOpen(false);
|
|
36
|
+
setFocusFirstItemOnOpen(false);
|
|
37
|
+
adjacent.focus();
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (openState && (key === "ArrowDown" || key === "Tab" && !shiftKey)) {
|
|
42
|
+
event.preventDefault();
|
|
43
|
+
const floating = floatingRootContext.elements.floating;
|
|
44
|
+
if (floating) focusFirstItem(floating);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!openState && key === "ArrowDown") {
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
setFocusFirstItemOnOpen(true);
|
|
50
|
+
setOpen(true);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
[
|
|
55
|
+
openState,
|
|
56
|
+
setOpen,
|
|
57
|
+
setFocusFirstItemOnOpen,
|
|
58
|
+
floatingRootContext.elements.floating
|
|
59
|
+
]
|
|
60
|
+
);
|
|
61
|
+
const handleFloatingRef = useForkRef(
|
|
62
|
+
getRefFromChildren(children),
|
|
63
|
+
setReference
|
|
64
|
+
);
|
|
65
|
+
const handleRef = useForkRef(handleFloatingRef, ref);
|
|
66
|
+
if (!children || !isValidElement(children)) {
|
|
67
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
68
|
+
}
|
|
69
|
+
const childProps = children.props;
|
|
70
|
+
const isNavigationItemChild = children.type === NavigationItem;
|
|
71
|
+
const shouldSyncExpanded = isNavigationItemChild || childProps.expanded !== void 0;
|
|
72
|
+
return cloneElement(children, {
|
|
73
|
+
...mergeProps(
|
|
74
|
+
getReferenceProps({
|
|
75
|
+
// For NavigationItem, sync via the `expanded` prop (which maps to aria-expanded internally).
|
|
76
|
+
// For all other elements, set aria-expanded directly.
|
|
77
|
+
...shouldSyncExpanded ? { expanded: openState } : { "aria-expanded": openState },
|
|
78
|
+
...panelId && openState ? { "aria-controls": panelId } : null,
|
|
79
|
+
onKeyDown: handleKeyDown,
|
|
80
|
+
...rest
|
|
81
|
+
}),
|
|
82
|
+
children.props
|
|
83
|
+
),
|
|
84
|
+
ref: handleRef
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
export { MegaMenuTrigger };
|
|
90
|
+
//# sourceMappingURL=MegaMenuTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenuTrigger.js","sources":["../src/mega-menu/MegaMenuTrigger.tsx"],"sourcesContent":["import {\n getRefFromChildren,\n mergeProps,\n NavigationItem,\n useForkRef,\n} from \"@salt-ds/core\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n useCallback,\n} from \"react\";\nimport { useMegaMenu } from \"./useMegaMenu\";\nimport { FOCUSABLE_SELECTOR, focusFirstItem } from \"./useMegaMenuKeyboard\";\n\nexport interface MegaMenuTriggerProps {\n /**\n * The trigger element for the mega menu, typically a `NavigationItem` or `Button`.\n */\n children?: ReactNode;\n}\n\nfunction getAdjacentTrigger(\n currentTarget: HTMLElement,\n direction: \"next\" | \"previous\",\n): HTMLElement | null {\n const li = currentTarget.closest(\"li\");\n if (!li) return null;\n const sibling =\n direction === \"next\" ? li.nextElementSibling : li.previousElementSibling;\n if (!(sibling instanceof HTMLElement)) return null;\n return sibling.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n}\n\nexport const MegaMenuTrigger = forwardRef<HTMLElement, MegaMenuTriggerProps>(\n function MegaMenuTrigger(props, ref) {\n const { children, ...rest } = props;\n const megaMenu = useMegaMenu();\n\n const {\n getReferenceProps,\n setReference,\n setOpen,\n openState,\n setFocusFirstItemOnOpen,\n floatingRootContext,\n panelId,\n } = megaMenu;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const { key, shiftKey } = event;\n\n // ArrowLeft/Right: move to adjacent trigger in nav bar\n if (key === \"ArrowRight\" || key === \"ArrowLeft\") {\n event.preventDefault();\n const direction = key === \"ArrowRight\" ? \"next\" : \"previous\";\n const adjacent = getAdjacentTrigger(event.currentTarget, direction);\n if (adjacent) {\n if (openState) setOpen(false);\n setFocusFirstItemOnOpen(false);\n adjacent.focus();\n }\n return;\n }\n\n // When menu is open: ArrowDown or Tab moves focus into the menu\n if (\n openState &&\n (key === \"ArrowDown\" || (key === \"Tab\" && !shiftKey))\n ) {\n event.preventDefault();\n const floating = floatingRootContext.elements\n .floating as HTMLElement | null;\n if (floating) focusFirstItem(floating);\n return;\n }\n\n // When menu is closed: ArrowDown opens and focuses first item\n if (!openState && key === \"ArrowDown\") {\n event.preventDefault();\n setFocusFirstItemOnOpen(true);\n setOpen(true);\n return;\n }\n },\n [\n openState,\n setOpen,\n setFocusFirstItemOnOpen,\n floatingRootContext.elements.floating,\n ],\n );\n\n const handleFloatingRef = useForkRef(\n getRefFromChildren(children),\n setReference,\n );\n const handleRef = useForkRef(handleFloatingRef, ref);\n\n if (!children || !isValidElement<{ ref?: Ref<unknown> }>(children)) {\n return <>{children}</>;\n }\n\n const childProps = children.props as Record<string, unknown>;\n const isNavigationItemChild = children.type === NavigationItem;\n const shouldSyncExpanded =\n isNavigationItemChild || childProps.expanded !== undefined;\n\n return cloneElement(children, {\n ...mergeProps(\n getReferenceProps({\n // For NavigationItem, sync via the `expanded` prop (which maps to aria-expanded internally).\n // For all other elements, set aria-expanded directly.\n ...(shouldSyncExpanded\n ? { expanded: openState }\n : { \"aria-expanded\": openState }),\n ...(panelId && openState ? { \"aria-controls\": panelId } : null),\n onKeyDown: handleKeyDown,\n ...rest,\n }),\n children.props,\n ),\n ref: handleRef,\n });\n },\n);\n"],"names":["MegaMenuTrigger"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { MegaMenuContext } from './MegaMenuContext.js';
|
|
3
|
+
|
|
4
|
+
function useMegaMenu() {
|
|
5
|
+
const context = useContext(MegaMenuContext);
|
|
6
|
+
if (context === void 0) {
|
|
7
|
+
throw new Error("useMegaMenu must be used within a MegaMenu");
|
|
8
|
+
}
|
|
9
|
+
return context;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { useMegaMenu };
|
|
13
|
+
//# sourceMappingURL=useMegaMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMegaMenu.js","sources":["../src/mega-menu/useMegaMenu.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { MegaMenuContext, type MegaMenuContextValue } from \"./MegaMenuContext\";\n/**\n * Access the nearest MegaMenu context.\n * Must be used within a `MegaMenu` provider.\n */\nexport function useMegaMenu(): MegaMenuContextValue {\n const context = useContext(MegaMenuContext);\n if (context === undefined) {\n throw new Error(\"useMegaMenu must be used within a MegaMenu\");\n }\n return context;\n}\n"],"names":[],"mappings":";;;AAMO,SAAS,WAAA,GAAoC;AAClD,EAAA,MAAM,OAAA,GAAU,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,OAAA;AACT;;;;"}
|