@elliemae/ds-menu-button 3.45.0-rc.1 → 3.45.0-rc.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/cjs/DSMenuButton.js +16 -5
- package/dist/cjs/DSMenuButton.js.map +2 -2
- package/dist/cjs/config/useMenuButton.js +49 -18
- package/dist/cjs/config/useMenuButton.js.map +3 -3
- package/dist/cjs/config/useSplitInherithedProps.js +141 -0
- package/dist/cjs/config/useSplitInherithedProps.js.map +7 -0
- package/dist/cjs/config/useValidateProps.js.map +2 -2
- package/dist/cjs/constants/index.js +17 -4
- package/dist/cjs/constants/index.js.map +2 -2
- package/dist/cjs/index.js +7 -3
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/parts/DSFlyoutMenu/DSFlyoutMenu.js +96 -0
- package/dist/cjs/parts/DSFlyoutMenu/DSFlyoutMenu.js.map +7 -0
- package/dist/cjs/parts/DSFlyoutMenu/config/useFlyoutMenu.js +54 -0
- package/dist/cjs/parts/DSFlyoutMenu/config/useFlyoutMenu.js.map +7 -0
- package/dist/cjs/parts/{ItemFactory.js → DSFlyoutMenu/config/useValidateProps.js} +9 -35
- package/dist/cjs/parts/DSFlyoutMenu/config/useValidateProps.js.map +7 -0
- package/dist/cjs/parts/DSFlyoutMenu/constants/index.js +46 -0
- package/dist/cjs/parts/DSFlyoutMenu/constants/index.js.map +7 -0
- package/dist/cjs/{DSMenuButtonCTX.js → parts/DSFlyoutMenu/index.js} +7 -8
- package/dist/cjs/parts/DSFlyoutMenu/index.js.map +7 -0
- package/dist/cjs/parts/DSFlyoutMenu/react-desc-prop-types.js +62 -0
- package/dist/cjs/parts/DSFlyoutMenu/react-desc-prop-types.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js +70 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js +40 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js +186 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js +89 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js +92 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js +315 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js +66 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js +40 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/Errors.js +58 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/Errors.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/index.js +44 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/index.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/index.js +37 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/index.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js +53 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js +139 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js +144 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js.map +7 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js +44 -0
- package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableMenuItem.js +116 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js +159 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js +97 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js +122 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js +173 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js +130 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js +176 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js +162 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js +57 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/config/useValidateProps.js +40 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/config/useValidateProps.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/constants/index.js +48 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/constants/index.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/index.js +37 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/index.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/react-desc-prop-types.js +51 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/react-desc-prop-types.js.map +7 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js +62 -0
- package/dist/cjs/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/DSOpinionatedButton.js +100 -0
- package/dist/cjs/parts/DSOpinionatedButton/DSOpinionatedButton.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/config/useOpinionatedButton.js +80 -0
- package/dist/cjs/parts/DSOpinionatedButton/config/useOpinionatedButton.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js +98 -0
- package/dist/cjs/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/config/useValidateProps.js +40 -0
- package/dist/cjs/parts/DSOpinionatedButton/config/useValidateProps.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/constants/index.js +48 -0
- package/dist/cjs/parts/DSOpinionatedButton/constants/index.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/index.js +37 -0
- package/dist/cjs/parts/DSOpinionatedButton/index.js.map +7 -0
- package/dist/cjs/parts/DSOpinionatedButton/react-desc-prop-types.js +53 -0
- package/dist/cjs/parts/DSOpinionatedButton/react-desc-prop-types.js.map +7 -0
- package/dist/cjs/react-desc-prop-types.js +61 -25
- package/dist/cjs/react-desc-prop-types.js.map +2 -2
- package/dist/cjs/utils/nodesTypeguardsAndGetters.js +123 -0
- package/dist/cjs/utils/nodesTypeguardsAndGetters.js.map +7 -0
- package/dist/cjs/utils/useOptionsArrayToDsTree.js +55 -0
- package/dist/cjs/utils/useOptionsArrayToDsTree.js.map +7 -0
- package/dist/esm/DSMenuButton.js +19 -8
- package/dist/esm/DSMenuButton.js.map +2 -2
- package/dist/esm/config/useMenuButton.js +51 -20
- package/dist/esm/config/useMenuButton.js.map +3 -3
- package/dist/esm/config/useSplitInherithedProps.js +111 -0
- package/dist/esm/config/useSplitInherithedProps.js.map +7 -0
- package/dist/esm/config/useValidateProps.js.map +2 -2
- package/dist/esm/constants/index.js +17 -4
- package/dist/esm/constants/index.js.map +2 -2
- package/dist/esm/index.js +8 -4
- package/dist/esm/index.js.map +3 -3
- package/dist/esm/parts/DSFlyoutMenu/DSFlyoutMenu.js +66 -0
- package/dist/esm/parts/DSFlyoutMenu/DSFlyoutMenu.js.map +7 -0
- package/dist/esm/parts/DSFlyoutMenu/config/useFlyoutMenu.js +24 -0
- package/dist/esm/parts/DSFlyoutMenu/config/useFlyoutMenu.js.map +7 -0
- package/dist/esm/parts/DSFlyoutMenu/config/useValidateProps.js +10 -0
- package/dist/esm/parts/DSFlyoutMenu/config/useValidateProps.js.map +7 -0
- package/dist/esm/parts/DSFlyoutMenu/constants/index.js +16 -0
- package/dist/esm/parts/DSFlyoutMenu/constants/index.js.map +7 -0
- package/dist/esm/parts/DSFlyoutMenu/index.js +7 -0
- package/dist/esm/parts/DSFlyoutMenu/index.js.map +7 -0
- package/dist/esm/parts/DSFlyoutMenu/react-desc-prop-types.js +40 -0
- package/dist/esm/parts/DSFlyoutMenu/react-desc-prop-types.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js +42 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js +10 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js +161 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js +59 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js +65 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js +292 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js +36 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js +10 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/Errors.js +28 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/Errors.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/index.js +14 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/index.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/index.js +10 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/index.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js +23 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js +113 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js +123 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js.map +7 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js +14 -0
- package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/ActivableMenuItem.js +91 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/ActivableMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js +134 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js +78 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js +97 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js +148 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js +105 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js +151 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js +137 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js +30 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/config/useValidateProps.js +10 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/config/useValidateProps.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/constants/index.js +18 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/constants/index.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/index.js +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/index.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/react-desc-prop-types.js +26 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/react-desc-prop-types.js.map +7 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js +32 -0
- package/dist/esm/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/DSOpinionatedButton.js +70 -0
- package/dist/esm/parts/DSOpinionatedButton/DSOpinionatedButton.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/config/useOpinionatedButton.js +53 -0
- package/dist/esm/parts/DSOpinionatedButton/config/useOpinionatedButton.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js +68 -0
- package/dist/esm/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/config/useValidateProps.js +10 -0
- package/dist/esm/parts/DSOpinionatedButton/config/useValidateProps.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/constants/index.js +18 -0
- package/dist/esm/parts/DSOpinionatedButton/constants/index.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/index.js +10 -0
- package/dist/esm/parts/DSOpinionatedButton/index.js.map +7 -0
- package/dist/esm/parts/DSOpinionatedButton/react-desc-prop-types.js +23 -0
- package/dist/esm/parts/DSOpinionatedButton/react-desc-prop-types.js.map +7 -0
- package/dist/esm/react-desc-prop-types.js +62 -26
- package/dist/esm/react-desc-prop-types.js.map +2 -2
- package/dist/esm/utils/nodesTypeguardsAndGetters.js +93 -0
- package/dist/esm/utils/nodesTypeguardsAndGetters.js.map +7 -0
- package/dist/esm/utils/useOptionsArrayToDsTree.js +25 -0
- package/dist/esm/utils/useOptionsArrayToDsTree.js.map +7 -0
- package/dist/types/DSMenuButton.d.ts +4 -6
- package/dist/types/config/useMenuButton.d.ts +9 -13
- package/dist/types/config/useSplitInherithedProps.d.ts +495 -0
- package/dist/types/config/useValidateProps.d.ts +3 -3
- package/dist/types/constants/index.d.ts +14 -2
- package/dist/types/index.d.ts +4 -2
- package/dist/types/parts/DSFlyoutMenu/DSFlyoutMenu.d.ts +5 -0
- package/dist/types/parts/DSFlyoutMenu/config/useFlyoutMenu.d.ts +8 -0
- package/dist/types/parts/DSFlyoutMenu/config/useValidateProps.d.ts +3 -0
- package/dist/types/parts/DSFlyoutMenu/constants/index.d.ts +7 -0
- package/dist/types/parts/DSFlyoutMenu/index.d.ts +1 -0
- package/dist/types/parts/DSFlyoutMenu/react-desc-prop-types.d.ts +25 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.d.ts +5 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.d.ts +5 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.d.ts +15 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.d.ts +15 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.d.ts +15 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.d.ts +18 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.d.ts +17 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.d.ts +3 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/constants/Errors.d.ts +15 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/constants/index.d.ts +7 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/index.d.ts +1 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.d.ts +24 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.d.ts +6 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.d.ts +35 -0
- package/dist/types/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.d.ts +13 -0
- package/dist/types/parts/DSMenuItemRendererFactory/ActivableMenuItem.d.ts +5 -0
- package/dist/types/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.d.ts +7 -0
- package/dist/types/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.d.ts +5 -0
- package/dist/types/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.d.ts +5 -0
- package/dist/types/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.d.ts +7 -0
- package/dist/types/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.d.ts +5 -0
- package/dist/types/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.d.ts +7 -0
- package/dist/types/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.d.ts +7 -0
- package/dist/types/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.d.ts +6 -0
- package/dist/types/parts/DSMenuItemRendererFactory/config/useValidateProps.d.ts +3 -0
- package/dist/types/parts/DSMenuItemRendererFactory/constants/index.d.ts +6 -0
- package/dist/types/parts/DSMenuItemRendererFactory/index.d.ts +1 -0
- package/dist/types/parts/DSMenuItemRendererFactory/react-desc-prop-types.d.ts +24 -0
- package/dist/types/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.d.ts +12 -0
- package/dist/types/parts/DSOpinionatedButton/DSOpinionatedButton.d.ts +5 -0
- package/dist/types/parts/DSOpinionatedButton/config/useOpinionatedButton.d.ts +38 -0
- package/dist/types/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.d.ts +14 -0
- package/dist/types/parts/DSOpinionatedButton/config/useValidateProps.d.ts +3 -0
- package/dist/types/parts/DSOpinionatedButton/constants/index.d.ts +6 -0
- package/dist/types/parts/DSOpinionatedButton/index.d.ts +1 -0
- package/dist/types/parts/DSOpinionatedButton/react-desc-prop-types.d.ts +23 -0
- package/dist/types/react-desc-prop-types.d.ts +206 -41
- package/dist/types/utils/nodesTypeguardsAndGetters.d.ts +22 -0
- package/dist/types/utils/useOptionsArrayToDsTree.d.ts +8 -0
- package/package.json +18 -16
- package/dist/cjs/DSMenuButtonCTX.js.map +0 -7
- package/dist/cjs/parts/ItemFactory.js.map +0 -7
- package/dist/cjs/parts/Menu.js +0 -125
- package/dist/cjs/parts/Menu.js.map +0 -7
- package/dist/cjs/parts/MenuButtonContent.js +0 -156
- package/dist/cjs/parts/MenuButtonContent.js.map +0 -7
- package/dist/cjs/parts/MenuItem.js +0 -252
- package/dist/cjs/parts/MenuItem.js.map +0 -7
- package/dist/cjs/styled.js +0 -132
- package/dist/cjs/styled.js.map +0 -7
- package/dist/esm/DSMenuButtonCTX.js +0 -8
- package/dist/esm/DSMenuButtonCTX.js.map +0 -7
- package/dist/esm/parts/ItemFactory.js +0 -36
- package/dist/esm/parts/ItemFactory.js.map +0 -7
- package/dist/esm/parts/Menu.js +0 -95
- package/dist/esm/parts/Menu.js.map +0 -7
- package/dist/esm/parts/MenuButtonContent.js +0 -126
- package/dist/esm/parts/MenuButtonContent.js.map +0 -7
- package/dist/esm/parts/MenuItem.js +0 -229
- package/dist/esm/parts/MenuItem.js.map +0 -7
- package/dist/esm/styled.js +0 -102
- package/dist/esm/styled.js.map +0 -7
- package/dist/types/DSMenuButtonCTX.d.ts +0 -15
- package/dist/types/parts/ItemFactory.d.ts +0 -14
- package/dist/types/parts/Menu.d.ts +0 -14
- package/dist/types/parts/MenuButtonContent.d.ts +0 -1
- package/dist/types/parts/MenuItem.d.ts +0 -21
- package/dist/types/styled.d.ts +0 -16
@@ -1,36 +0,0 @@
|
|
1
|
-
import * as React from "react";
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
3
|
-
import { MenuItem, Section, Separator } from "./MenuItem.js";
|
4
|
-
const ItemFactory = ({
|
5
|
-
item,
|
6
|
-
innerRef,
|
7
|
-
onFocus,
|
8
|
-
tabIndex,
|
9
|
-
level,
|
10
|
-
selectionMode,
|
11
|
-
parentId
|
12
|
-
}) => {
|
13
|
-
if (item.type === "separator") {
|
14
|
-
return /* @__PURE__ */ jsx(Separator, {});
|
15
|
-
}
|
16
|
-
if (item.type === "section") {
|
17
|
-
return /* @__PURE__ */ jsx(Section, { item });
|
18
|
-
}
|
19
|
-
return /* @__PURE__ */ jsx(
|
20
|
-
MenuItem,
|
21
|
-
{
|
22
|
-
item,
|
23
|
-
innerRef,
|
24
|
-
onFocus,
|
25
|
-
tabIndex,
|
26
|
-
level,
|
27
|
-
parentId,
|
28
|
-
selectionMode: selectionMode || item.type
|
29
|
-
},
|
30
|
-
item.dsId
|
31
|
-
);
|
32
|
-
};
|
33
|
-
export {
|
34
|
-
ItemFactory
|
35
|
-
};
|
36
|
-
//# sourceMappingURL=ItemFactory.js.map
|
@@ -1,7 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": 3,
|
3
|
-
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/ItemFactory.tsx"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable import/no-cycle */\n/* eslint-disable arrow-body-style */\nimport React from 'react';\nimport { type TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';\nimport { MenuItem, Section, Separator } from './MenuItem.js';\n\nimport type { MenuButtonT } from '../react-desc-prop-types.js';\ninterface ItemFactoryProps {\n item: MenuButtonT.Item;\n level: number;\n selectionMode?: 'single' | 'multiple';\n parentId?: string;\n tabIndex: TypescriptHelpersT.WCAGTabIndex;\n onFocus: React.FocusEventHandler;\n innerRef: TypescriptHelpersT.AnyRef<HTMLElement>;\n}\n\nexport const ItemFactory: React.FC<ItemFactoryProps> = ({\n item,\n innerRef,\n onFocus,\n tabIndex,\n level,\n selectionMode,\n parentId,\n}) => {\n if (item.type === 'separator') {\n return <Separator />;\n }\n if (item.type === 'section') {\n return <Section item={item} />;\n }\n return (\n <MenuItem\n key={item.dsId}\n item={item}\n innerRef={innerRef}\n onFocus={onFocus}\n tabIndex={tabIndex}\n level={level}\n parentId={parentId}\n selectionMode={selectionMode || item.type}\n />\n );\n};\n"],
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;AC2BZ;AAvBX,SAAS,UAAU,SAAS,iBAAiB;AAatC,MAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,oBAAC,aAAU;AAAA,EACpB;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,oBAAC,WAAQ,MAAY;AAAA,EAC9B;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe,iBAAiB,KAAK;AAAA;AAAA,IAPhC,KAAK;AAAA,EAQZ;AAEJ;",
|
6
|
-
"names": []
|
7
|
-
}
|
package/dist/esm/parts/Menu.js
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
import * as React from "react";
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
3
|
-
import React2, { useState, useMemo, useCallback, useContext } from "react";
|
4
|
-
import { useKeyboardNavigation, DIRECTIONS } from "@elliemae/ds-hooks-keyboard-navigation";
|
5
|
-
import { MenuButtonContext } from "../DSMenuButtonCTX.js";
|
6
|
-
import { StyledMenu } from "../styled.js";
|
7
|
-
import { ItemFactory } from "./ItemFactory.js";
|
8
|
-
const Menu = (props) => {
|
9
|
-
const { referenceElement, showSubMenu, selectionMode, setShowSubMenu, parentId, level, items, minWidth } = props;
|
10
|
-
const { focusedOption, setFocusedOption } = useContext(MenuButtonContext);
|
11
|
-
const listRef = React2.useRef(null);
|
12
|
-
const rect = referenceElement?.getBoundingClientRect();
|
13
|
-
const [coords, setCoords] = useState({ x: rect?.width ?? 0, y: 0 });
|
14
|
-
React2.useLayoutEffect(() => {
|
15
|
-
const listRect = listRef?.current?.getBoundingClientRect();
|
16
|
-
if (!listRect) return;
|
17
|
-
if (level === 1) {
|
18
|
-
if (listRect.bottom < window.innerHeight) {
|
19
|
-
setCoords({ x: 0, y: rect?.height || 0 });
|
20
|
-
} else {
|
21
|
-
setCoords({ x: 0, y: -listRect.height });
|
22
|
-
}
|
23
|
-
return;
|
24
|
-
}
|
25
|
-
if (listRect.right > window.innerWidth) {
|
26
|
-
setCoords({ x: -(minWidth || rect?.width || 0), y: 0 });
|
27
|
-
} else {
|
28
|
-
setCoords({ x: rect?.width || 0, y: 0 });
|
29
|
-
}
|
30
|
-
}, [level, minWidth, rect?.height, rect?.width, referenceElement]);
|
31
|
-
const config = {
|
32
|
-
options: items.filter((item) => item.type !== "separator" && item.type !== "section").map((item) => item.dsId),
|
33
|
-
direction: DIRECTIONS.VERTICAL,
|
34
|
-
focusedOption,
|
35
|
-
setFocusedOption
|
36
|
-
};
|
37
|
-
const { getWrapperProps, getItemProps } = useKeyboardNavigation(config);
|
38
|
-
const { onKeyDown, onBlur } = getWrapperProps();
|
39
|
-
const handleOnMenuKeyDown = useCallback(
|
40
|
-
(event) => {
|
41
|
-
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
42
|
-
event.stopPropagation();
|
43
|
-
}
|
44
|
-
onKeyDown(event);
|
45
|
-
},
|
46
|
-
[onKeyDown]
|
47
|
-
);
|
48
|
-
const handleOnBlur = useCallback(
|
49
|
-
(e) => {
|
50
|
-
setTimeout(() => {
|
51
|
-
if (!listRef.current?.contains(document.activeElement)) {
|
52
|
-
setShowSubMenu(false);
|
53
|
-
}
|
54
|
-
});
|
55
|
-
onBlur(e);
|
56
|
-
},
|
57
|
-
[onBlur, setShowSubMenu]
|
58
|
-
);
|
59
|
-
const subMenuStyles = useMemo(
|
60
|
-
() => ({
|
61
|
-
position: "absolute",
|
62
|
-
top: coords.y,
|
63
|
-
left: coords.x,
|
64
|
-
zIndex: 1001 + level,
|
65
|
-
minWidth
|
66
|
-
}),
|
67
|
-
[coords, level, minWidth]
|
68
|
-
);
|
69
|
-
if (!referenceElement || !showSubMenu) return null;
|
70
|
-
return /* @__PURE__ */ jsx(
|
71
|
-
StyledMenu,
|
72
|
-
{
|
73
|
-
innerRef: listRef,
|
74
|
-
role: "menu",
|
75
|
-
onKeyDown: handleOnMenuKeyDown,
|
76
|
-
onBlur: handleOnBlur,
|
77
|
-
style: subMenuStyles,
|
78
|
-
children: items.map((item) => /* @__PURE__ */ jsx(
|
79
|
-
ItemFactory,
|
80
|
-
{
|
81
|
-
item,
|
82
|
-
selectionMode,
|
83
|
-
level,
|
84
|
-
parentId,
|
85
|
-
...getItemProps(item.dsId)
|
86
|
-
},
|
87
|
-
item.dsId
|
88
|
-
))
|
89
|
-
}
|
90
|
-
);
|
91
|
-
};
|
92
|
-
export {
|
93
|
-
Menu
|
94
|
-
};
|
95
|
-
//# sourceMappingURL=Menu.js.map
|
@@ -1,7 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": 3,
|
3
|
-
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/Menu.tsx"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable import/no-cycle */\nimport React, { useState, useMemo, useCallback, useContext } from 'react';\nimport { useKeyboardNavigation, DIRECTIONS } from '@elliemae/ds-hooks-keyboard-navigation';\nimport { MenuButtonContext } from '../DSMenuButtonCTX.js';\nimport type { MenuButtonT } from '../react-desc-prop-types.js';\nimport { StyledMenu } from '../styled.js';\nimport { ItemFactory } from './ItemFactory.js';\n\ninterface SubMenuProps {\n referenceElement: HTMLElement | null;\n showSubMenu: boolean;\n selectionMode?: 'single' | 'multiple';\n setShowSubMenu: React.Dispatch<React.SetStateAction<boolean>>;\n parentId?: string;\n level: number;\n items: MenuButtonT.Item[];\n minWidth?: string | number;\n}\n\nexport const Menu: React.FC<SubMenuProps> = (props) => {\n const { referenceElement, showSubMenu, selectionMode, setShowSubMenu, parentId, level, items, minWidth } = props;\n const { focusedOption, setFocusedOption } = useContext(MenuButtonContext);\n const listRef = React.useRef<HTMLDivElement>(null);\n const rect = referenceElement?.getBoundingClientRect();\n const [coords, setCoords] = useState<{ x: number; y: number }>({ x: rect?.width ?? 0, y: 0 });\n\n // this logic will be part of the new popper custom hook\n React.useLayoutEffect(() => {\n const listRect = listRef?.current?.getBoundingClientRect();\n if (!listRect) return;\n if (level === 1) {\n if (listRect.bottom < window.innerHeight) {\n setCoords({ x: 0, y: rect?.height || 0 });\n } else {\n setCoords({ x: 0, y: -listRect.height });\n }\n return;\n }\n if (listRect.right > window.innerWidth) {\n setCoords({ x: -(minWidth || rect?.width || 0), y: 0 });\n } else {\n setCoords({ x: rect?.width || 0, y: 0 });\n }\n }, [level, minWidth, rect?.height, rect?.width, referenceElement]);\n\n const config = {\n options: items.filter((item) => item.type !== 'separator' && item.type !== 'section').map((item) => item.dsId),\n direction: DIRECTIONS.VERTICAL,\n focusedOption,\n setFocusedOption,\n };\n\n const { getWrapperProps, getItemProps } = useKeyboardNavigation(config);\n\n const { onKeyDown, onBlur } = getWrapperProps();\n\n const handleOnMenuKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.stopPropagation();\n }\n onKeyDown(event);\n },\n [onKeyDown],\n );\n\n const handleOnBlur: React.FocusEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n setTimeout(() => {\n if (!listRef.current?.contains(document.activeElement)) {\n setShowSubMenu(false);\n }\n });\n onBlur(e);\n },\n [onBlur, setShowSubMenu],\n );\n\n const subMenuStyles = useMemo(\n () => ({\n position: 'absolute',\n top: coords.y,\n left: coords.x,\n zIndex: 1001 + level,\n minWidth,\n }),\n [coords, level, minWidth],\n );\n\n if (!referenceElement || !showSubMenu) return null;\n\n return (\n <StyledMenu\n innerRef={listRef}\n role=\"menu\"\n onKeyDown={handleOnMenuKeyDown}\n onBlur={handleOnBlur}\n style={subMenuStyles}\n >\n {items.map((item) => (\n <ItemFactory\n key={item.dsId}\n item={item}\n selectionMode={selectionMode}\n level={level}\n parentId={parentId}\n {...getItemProps(item.dsId)}\n />\n ))}\n </StyledMenu>\n );\n};\n"],
|
5
|
-
"mappings": "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",
|
6
|
-
"names": ["React"]
|
7
|
-
}
|
@@ -1,126 +0,0 @@
|
|
1
|
-
import * as React from "react";
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
3
|
-
import React2, { useMemo, useCallback, useContext, useRef } from "react";
|
4
|
-
import { useGetGlobalAttributes, useGetXstyledProps } from "@elliemae/ds-props-helpers";
|
5
|
-
import { Menu } from "./Menu.js";
|
6
|
-
import { MenuButtonContext } from "../DSMenuButtonCTX.js";
|
7
|
-
import { StyledMenuButtonWrapper } from "../styled.js";
|
8
|
-
function useOnClickOutside(ref, cb) {
|
9
|
-
React2.useEffect(() => {
|
10
|
-
const listener = (event) => {
|
11
|
-
if (!ref?.current || ref?.current?.contains?.(event.target)) {
|
12
|
-
return;
|
13
|
-
}
|
14
|
-
cb(event);
|
15
|
-
};
|
16
|
-
document.addEventListener("mousedown", listener);
|
17
|
-
document.addEventListener("touchstart", listener);
|
18
|
-
return () => {
|
19
|
-
document.removeEventListener("mousedown", listener);
|
20
|
-
document.removeEventListener("touchstart", listener);
|
21
|
-
};
|
22
|
-
}, [ref, cb]);
|
23
|
-
}
|
24
|
-
const MenuButtonContent = () => {
|
25
|
-
const { setFocusedOption, triggerElementRef, setTriggerElementRef, isOpen, setIsOpen, propsWithDefault } = useContext(MenuButtonContext);
|
26
|
-
const { items, TriggerElement, selectionMode, triggerElementProps, menuMinWidth } = propsWithDefault;
|
27
|
-
const globalProps = useGetGlobalAttributes(propsWithDefault);
|
28
|
-
const xstyledProps = useGetXstyledProps(propsWithDefault);
|
29
|
-
const firstItem = useMemo(() => {
|
30
|
-
const first = items.find((item) => item.type !== "separator" && item.type !== "section");
|
31
|
-
return first;
|
32
|
-
}, [items]);
|
33
|
-
const handleOnKeyDown = useCallback(
|
34
|
-
(event) => {
|
35
|
-
if (event.key === "Escape") {
|
36
|
-
triggerElementRef?.focus();
|
37
|
-
}
|
38
|
-
if (event.key === "ArrowDown" && isOpen) {
|
39
|
-
event.preventDefault();
|
40
|
-
setFocusedOption(firstItem?.dsId || "");
|
41
|
-
}
|
42
|
-
if (event.key === "ArrowUp" && isOpen) {
|
43
|
-
event.preventDefault();
|
44
|
-
setFocusedOption(items[items.length - 1].dsId);
|
45
|
-
}
|
46
|
-
if ((event.key === "Enter" || event.key === " ") && !isOpen && firstItem) {
|
47
|
-
setFocusedOption(firstItem?.dsId);
|
48
|
-
}
|
49
|
-
},
|
50
|
-
[isOpen, firstItem, triggerElementRef, setFocusedOption, items]
|
51
|
-
);
|
52
|
-
const handleOnTriggerOnKeyDown = useCallback(
|
53
|
-
(e) => {
|
54
|
-
if (e.key === "Enter" || e.key === " ") {
|
55
|
-
e.preventDefault();
|
56
|
-
setFocusedOption(firstItem?.dsId || "");
|
57
|
-
}
|
58
|
-
if (e.key === "ArrowDown" && !isOpen) {
|
59
|
-
setIsOpen(true);
|
60
|
-
setFocusedOption(firstItem?.dsId || "");
|
61
|
-
}
|
62
|
-
if (e.key === "ArrowUp" && !isOpen) {
|
63
|
-
setIsOpen(true);
|
64
|
-
setFocusedOption(items[items.length - 1].dsId);
|
65
|
-
}
|
66
|
-
},
|
67
|
-
[firstItem?.dsId, isOpen, items, setFocusedOption, setIsOpen]
|
68
|
-
);
|
69
|
-
const handleOnClick = useCallback(() => {
|
70
|
-
setIsOpen(!isOpen);
|
71
|
-
}, [isOpen, setIsOpen]);
|
72
|
-
const attributes = useMemo(
|
73
|
-
() => ({
|
74
|
-
"aria-haspopup": "true",
|
75
|
-
"aria-expanded": isOpen
|
76
|
-
}),
|
77
|
-
[isOpen]
|
78
|
-
);
|
79
|
-
const listeners = useMemo(
|
80
|
-
() => ({
|
81
|
-
onKeyDown: handleOnTriggerOnKeyDown
|
82
|
-
}),
|
83
|
-
[handleOnTriggerOnKeyDown]
|
84
|
-
);
|
85
|
-
const containerRef = useRef(null);
|
86
|
-
useOnClickOutside(containerRef, () => setIsOpen(false));
|
87
|
-
return /* @__PURE__ */ jsxs(
|
88
|
-
StyledMenuButtonWrapper,
|
89
|
-
{
|
90
|
-
onClick: handleOnClick,
|
91
|
-
onKeyDown: handleOnKeyDown,
|
92
|
-
innerRef: containerRef,
|
93
|
-
...globalProps,
|
94
|
-
...xstyledProps,
|
95
|
-
children: [
|
96
|
-
/* @__PURE__ */ jsx(
|
97
|
-
TriggerElement,
|
98
|
-
{
|
99
|
-
isOpen,
|
100
|
-
innerRef: setTriggerElementRef,
|
101
|
-
setIsOpen,
|
102
|
-
attributes,
|
103
|
-
listeners,
|
104
|
-
triggerElementProps
|
105
|
-
}
|
106
|
-
),
|
107
|
-
isOpen && /* @__PURE__ */ jsx(
|
108
|
-
Menu,
|
109
|
-
{
|
110
|
-
level: 1,
|
111
|
-
items,
|
112
|
-
showSubMenu: isOpen,
|
113
|
-
setShowSubMenu: setIsOpen,
|
114
|
-
referenceElement: triggerElementRef,
|
115
|
-
selectionMode,
|
116
|
-
minWidth: menuMinWidth
|
117
|
-
}
|
118
|
-
)
|
119
|
-
]
|
120
|
-
}
|
121
|
-
);
|
122
|
-
};
|
123
|
-
export {
|
124
|
-
MenuButtonContent
|
125
|
-
};
|
126
|
-
//# sourceMappingURL=MenuButtonContent.js.map
|
@@ -1,7 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": 3,
|
3
|
-
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/MenuButtonContent.tsx"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nimport React, { useMemo, useCallback, useContext, useRef } from 'react';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { Menu } from './Menu.js';\nimport { MenuButtonContext } from '../DSMenuButtonCTX.js';\n\nimport { StyledMenuButtonWrapper } from '../styled.js';\nfunction useOnClickOutside(ref: React.RefObject<HTMLElement>, cb: (event: MouseEvent | TouchEvent) => void) {\n React.useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref?.current || ref?.current?.contains?.(event.target as Node)) {\n return;\n }\n cb(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, cb]);\n}\n\nexport const MenuButtonContent = () => {\n const { setFocusedOption, triggerElementRef, setTriggerElementRef, isOpen, setIsOpen, propsWithDefault } =\n useContext(MenuButtonContext);\n\n const { items, TriggerElement, selectionMode, triggerElementProps, menuMinWidth } = propsWithDefault;\n const globalProps = useGetGlobalAttributes(propsWithDefault);\n const xstyledProps = useGetXstyledProps(propsWithDefault);\n\n const firstItem = useMemo(() => {\n const first = items.find((item) => item.type !== 'separator' && item.type !== 'section');\n return first;\n }, [items]);\n\n const handleOnKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n triggerElementRef?.focus();\n }\n if (event.key === 'ArrowDown' && isOpen) {\n event.preventDefault();\n setFocusedOption(firstItem?.dsId || '');\n }\n if (event.key === 'ArrowUp' && isOpen) {\n event.preventDefault();\n setFocusedOption(items[items.length - 1].dsId);\n }\n\n if ((event.key === 'Enter' || event.key === ' ') && !isOpen && firstItem) {\n setFocusedOption(firstItem?.dsId);\n }\n },\n [isOpen, firstItem, triggerElementRef, setFocusedOption, items],\n );\n\n const handleOnTriggerOnKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setFocusedOption(firstItem?.dsId || '');\n }\n if (e.key === 'ArrowDown' && !isOpen) {\n setIsOpen(true);\n setFocusedOption(firstItem?.dsId || '');\n }\n if (e.key === 'ArrowUp' && !isOpen) {\n setIsOpen(true);\n setFocusedOption(items[items.length - 1].dsId);\n }\n },\n [firstItem?.dsId, isOpen, items, setFocusedOption, setIsOpen],\n );\n\n const handleOnClick = useCallback(() => {\n setIsOpen(!isOpen);\n }, [isOpen, setIsOpen]);\n\n const attributes = useMemo(\n () => ({\n 'aria-haspopup': 'true',\n 'aria-expanded': isOpen,\n }),\n [isOpen],\n );\n\n const listeners = useMemo(\n () => ({\n onKeyDown: handleOnTriggerOnKeyDown,\n }),\n [handleOnTriggerOnKeyDown],\n );\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n useOnClickOutside(containerRef, () => setIsOpen(false));\n\n return (\n <StyledMenuButtonWrapper\n onClick={handleOnClick}\n onKeyDown={handleOnKeyDown}\n innerRef={containerRef}\n {...globalProps}\n {...xstyledProps}\n >\n <TriggerElement\n isOpen={isOpen}\n innerRef={setTriggerElementRef}\n setIsOpen={setIsOpen}\n attributes={attributes}\n listeners={listeners}\n triggerElementProps={triggerElementProps}\n />\n {isOpen && (\n <Menu\n level={1}\n items={items}\n showSubMenu={isOpen}\n setShowSubMenu={setIsOpen}\n referenceElement={triggerElementRef}\n selectionMode={selectionMode}\n minWidth={menuMinWidth}\n />\n )}\n </StyledMenuButtonWrapper>\n );\n};\n"],
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACoGnB,SAOE,KAPF;AAnGJ,OAAOA,UAAS,SAAS,aAAa,YAAY,cAAc;AAChE,SAAS,wBAAwB,0BAA0B;AAC3D,SAAS,YAAY;AACrB,SAAS,yBAAyB;AAElC,SAAS,+BAA+B;AACxC,SAAS,kBAAkB,KAAmC,IAA8C;AAC1G,EAAAA,OAAM,UAAU,MAAM;AACpB,UAAM,WAAW,CAAC,UAAmC;AAEnD,UAAI,CAAC,KAAK,WAAW,KAAK,SAAS,WAAW,MAAM,MAAc,GAAG;AACnE;AAAA,MACF;AACA,SAAG,KAAK;AAAA,IACV;AACA,aAAS,iBAAiB,aAAa,QAAQ;AAC/C,aAAS,iBAAiB,cAAc,QAAQ;AAChD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,QAAQ;AAClD,eAAS,oBAAoB,cAAc,QAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,KAAK,EAAE,CAAC;AACd;AAEO,MAAM,oBAAoB,MAAM;AACrC,QAAM,EAAE,kBAAkB,mBAAmB,sBAAsB,QAAQ,WAAW,iBAAiB,IACrG,WAAW,iBAAiB;AAE9B,QAAM,EAAE,OAAO,gBAAgB,eAAe,qBAAqB,aAAa,IAAI;AACpF,QAAM,cAAc,uBAAuB,gBAAgB;AAC3D,QAAM,eAAe,mBAAmB,gBAAgB;AAExD,QAAM,YAAY,QAAQ,MAAM;AAC9B,UAAM,QAAQ,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,eAAe,KAAK,SAAS,SAAS;AACvF,WAAO;AAAA,EACT,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,kBAAkB;AAAA,IACtB,CAAC,UAA+B;AAC9B,UAAI,MAAM,QAAQ,UAAU;AAC1B,2BAAmB,MAAM;AAAA,MAC3B;AACA,UAAI,MAAM,QAAQ,eAAe,QAAQ;AACvC,cAAM,eAAe;AACrB,yBAAiB,WAAW,QAAQ,EAAE;AAAA,MACxC;AACA,UAAI,MAAM,QAAQ,aAAa,QAAQ;AACrC,cAAM,eAAe;AACrB,yBAAiB,MAAM,MAAM,SAAS,CAAC,EAAE,IAAI;AAAA,MAC/C;AAEA,WAAK,MAAM,QAAQ,WAAW,MAAM,QAAQ,QAAQ,CAAC,UAAU,WAAW;AACxE,yBAAiB,WAAW,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,WAAW,mBAAmB,kBAAkB,KAAK;AAAA,EAChE;AAEA,QAAM,2BAA2B;AAAA,IAC/B,CAAC,MAA2B;AAC1B,UAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,UAAE,eAAe;AACjB,yBAAiB,WAAW,QAAQ,EAAE;AAAA,MACxC;AACA,UAAI,EAAE,QAAQ,eAAe,CAAC,QAAQ;AACpC,kBAAU,IAAI;AACd,yBAAiB,WAAW,QAAQ,EAAE;AAAA,MACxC;AACA,UAAI,EAAE,QAAQ,aAAa,CAAC,QAAQ;AAClC,kBAAU,IAAI;AACd,yBAAiB,MAAM,MAAM,SAAS,CAAC,EAAE,IAAI;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,CAAC,WAAW,MAAM,QAAQ,OAAO,kBAAkB,SAAS;AAAA,EAC9D;AAEA,QAAM,gBAAgB,YAAY,MAAM;AACtC,cAAU,CAAC,MAAM;AAAA,EACnB,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,QAAM,aAAa;AAAA,IACjB,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,IACnB;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,YAAY;AAAA,IAChB,OAAO;AAAA,MACL,WAAW;AAAA,IACb;AAAA,IACA,CAAC,wBAAwB;AAAA,EAC3B;AAEA,QAAM,eAAe,OAA8B,IAAI;AACvD,oBAAkB,cAAc,MAAM,UAAU,KAAK,CAAC;AAEtD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MAEJ;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACC,UACC;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA,YACA,aAAa;AAAA,YACb,gBAAgB;AAAA,YAChB,kBAAkB;AAAA,YAClB;AAAA,YACA,UAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
|
6
|
-
"names": ["React"]
|
7
|
-
}
|
@@ -1,229 +0,0 @@
|
|
1
|
-
import * as React from "react";
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
3
|
-
import React2, { useState, useCallback, useMemo } from "react";
|
4
|
-
import { TriangleUpSmall, Checkmark, TriangleDownSmall, ChevronSmallDown, ChevronSmallRight } from "@elliemae/ds-icons";
|
5
|
-
import { DSTypography } from "@elliemae/ds-typography";
|
6
|
-
import { mergeRefs } from "@elliemae/ds-system";
|
7
|
-
import { Grid } from "@elliemae/ds-grid";
|
8
|
-
import { MenuButtonContext } from "../DSMenuButtonCTX.js";
|
9
|
-
import {
|
10
|
-
StyledMenuItem,
|
11
|
-
StyledMenuItemContent,
|
12
|
-
StyledLeftContent,
|
13
|
-
StyledRightContent,
|
14
|
-
StyledSeparator,
|
15
|
-
StyledSection
|
16
|
-
} from "../styled.js";
|
17
|
-
import { Menu } from "./Menu.js";
|
18
|
-
const MenuItemAddon = React2.memo(({ level, isOpen }) => {
|
19
|
-
if (level === 0)
|
20
|
-
return isOpen ? /* @__PURE__ */ jsx(TriangleUpSmall, { color: ["brand-primary", "600"] }) : /* @__PURE__ */ jsx(TriangleDownSmall, { color: ["brand-primary", "600"] });
|
21
|
-
return isOpen ? /* @__PURE__ */ jsx(ChevronSmallDown, { size: "m", color: ["brand-primary", "600"] }) : /* @__PURE__ */ jsx(ChevronSmallRight, { size: "m", color: ["brand-primary", "600"] });
|
22
|
-
});
|
23
|
-
const MenuItem = ({
|
24
|
-
innerRef,
|
25
|
-
tabIndex,
|
26
|
-
onFocus,
|
27
|
-
selectionMode,
|
28
|
-
item,
|
29
|
-
level,
|
30
|
-
parentId,
|
31
|
-
isVertical
|
32
|
-
}) => {
|
33
|
-
const {
|
34
|
-
setFocusedOption,
|
35
|
-
focusedOption,
|
36
|
-
selectedKeys,
|
37
|
-
onSelectionChange,
|
38
|
-
triggerElementRef,
|
39
|
-
setIsOpen,
|
40
|
-
propsWithDefault: { ItemRenderer }
|
41
|
-
} = React2.useContext(MenuButtonContext);
|
42
|
-
const listRef = React2.useRef(null);
|
43
|
-
const [showSubMenu, setShowSubMenu] = useState(false);
|
44
|
-
const [referenceElement, setReferenceElement] = React2.useState(null);
|
45
|
-
const itemRef = useCallback(
|
46
|
-
(node) => {
|
47
|
-
if (node !== null) {
|
48
|
-
if (focusedOption === item.dsId) node.focus();
|
49
|
-
}
|
50
|
-
return node;
|
51
|
-
},
|
52
|
-
[focusedOption, item.dsId]
|
53
|
-
);
|
54
|
-
const selectionLogic = useCallback(() => {
|
55
|
-
if (item.disabled) return;
|
56
|
-
if (selectionMode === "single") {
|
57
|
-
const newValue = item.dsId === selectedKeys[0] ? [] : [item.dsId];
|
58
|
-
onSelectionChange(newValue, parentId || "root", item);
|
59
|
-
}
|
60
|
-
if (selectionMode === "multiple") {
|
61
|
-
const newValue = selectedKeys.includes(item.dsId) ? selectedKeys.filter((key) => key !== item.dsId) : [...selectedKeys, item.dsId];
|
62
|
-
onSelectionChange(newValue, parentId || "root", item);
|
63
|
-
}
|
64
|
-
}, [item, onSelectionChange, parentId, selectedKeys, selectionMode]);
|
65
|
-
const handleOnClick = useCallback(
|
66
|
-
(e) => {
|
67
|
-
if (selectionMode !== "single" || item.disabled) {
|
68
|
-
e.stopPropagation();
|
69
|
-
}
|
70
|
-
selectionLogic();
|
71
|
-
},
|
72
|
-
[item.disabled, selectionLogic, selectionMode]
|
73
|
-
);
|
74
|
-
const onItemKeyDown = useCallback(
|
75
|
-
(event) => {
|
76
|
-
if (event.key === "Enter" && !item.disabled) {
|
77
|
-
setIsOpen(false);
|
78
|
-
triggerElementRef?.focus();
|
79
|
-
}
|
80
|
-
if (event.key === "Enter" || event.key === " ") {
|
81
|
-
event.preventDefault();
|
82
|
-
selectionLogic();
|
83
|
-
}
|
84
|
-
if ((event.key === "ArrowDown" && level === 0 || event.key === "ArrowRight" && level !== 0) && item.subitems) {
|
85
|
-
event.preventDefault();
|
86
|
-
event.stopPropagation();
|
87
|
-
setShowSubMenu(true);
|
88
|
-
setFocusedOption(item.subitems[0].dsId);
|
89
|
-
}
|
90
|
-
if (event.key === "ArrowLeft" && level >= 2) {
|
91
|
-
event.preventDefault();
|
92
|
-
event.stopPropagation();
|
93
|
-
if (parentId) setFocusedOption(parentId);
|
94
|
-
}
|
95
|
-
if (event.key === "Escape" && level > 0) {
|
96
|
-
if (parentId !== void 0) {
|
97
|
-
setFocusedOption(parentId);
|
98
|
-
}
|
99
|
-
}
|
100
|
-
},
|
101
|
-
[item.disabled, item.subitems, level, setIsOpen, triggerElementRef, selectionLogic, setFocusedOption, parentId]
|
102
|
-
);
|
103
|
-
const handleOnLIKeyDown = useCallback(
|
104
|
-
(e) => {
|
105
|
-
if (e.key === "Enter") {
|
106
|
-
setShowSubMenu(false);
|
107
|
-
if (level === 0) {
|
108
|
-
setFocusedOption(item.dsId);
|
109
|
-
}
|
110
|
-
}
|
111
|
-
},
|
112
|
-
[item.dsId, level, setFocusedOption]
|
113
|
-
);
|
114
|
-
const handleOnMouseEnter = useCallback(() => {
|
115
|
-
setShowSubMenu(true);
|
116
|
-
setFocusedOption(item.dsId);
|
117
|
-
}, [item.dsId, setFocusedOption]);
|
118
|
-
const handleOnMouseLeave = useCallback(() => {
|
119
|
-
setShowSubMenu(false);
|
120
|
-
}, []);
|
121
|
-
const ariaExpanded = useMemo(() => {
|
122
|
-
if (item.subitems) {
|
123
|
-
return showSubMenu ? "true" : "false";
|
124
|
-
}
|
125
|
-
return void 0;
|
126
|
-
}, [item.subitems, showSubMenu]);
|
127
|
-
const role = useMemo(() => {
|
128
|
-
if (selectionMode === "single") {
|
129
|
-
return "menuitemradio";
|
130
|
-
}
|
131
|
-
if (selectionMode === "multiple") {
|
132
|
-
return "menuitemcheckbox";
|
133
|
-
}
|
134
|
-
return "menuitem";
|
135
|
-
}, [selectionMode]);
|
136
|
-
const ariaChecked = useMemo(() => {
|
137
|
-
if (selectionMode === "multiple" || selectionMode === "single") {
|
138
|
-
return selectedKeys.includes(item.dsId) ? "true" : "false";
|
139
|
-
}
|
140
|
-
return void 0;
|
141
|
-
}, [item.dsId, selectionMode, selectedKeys]);
|
142
|
-
return /* @__PURE__ */ jsxs(
|
143
|
-
StyledMenuItem,
|
144
|
-
{
|
145
|
-
role: "none",
|
146
|
-
innerRef: listRef,
|
147
|
-
onMouseEnter: handleOnMouseEnter,
|
148
|
-
onMouseLeave: handleOnMouseLeave,
|
149
|
-
onKeyDown: handleOnLIKeyDown,
|
150
|
-
isOpen: showSubMenu,
|
151
|
-
level,
|
152
|
-
isVertical,
|
153
|
-
isDisabled: item.disabled,
|
154
|
-
children: [
|
155
|
-
/* @__PURE__ */ jsxs(
|
156
|
-
StyledMenuItemContent,
|
157
|
-
{
|
158
|
-
role,
|
159
|
-
"aria-checked": ariaChecked,
|
160
|
-
"aria-haspopup": item.subitems ? "true" : "false",
|
161
|
-
"aria-expanded": ariaExpanded,
|
162
|
-
innerRef: mergeRefs(innerRef, itemRef, setReferenceElement),
|
163
|
-
onKeyDown: onItemKeyDown,
|
164
|
-
onClick: handleOnClick,
|
165
|
-
hasChildren: item.subitems !== void 0,
|
166
|
-
onFocus,
|
167
|
-
tabIndex,
|
168
|
-
"aria-disabled": item.disabled ? "true" : "false",
|
169
|
-
children: [
|
170
|
-
/* @__PURE__ */ jsxs(StyledLeftContent, { children: [
|
171
|
-
/* @__PURE__ */ jsx(SelectionAddon, { selectionMode: selectionMode || item.type, item, selectedKeys }),
|
172
|
-
ItemRenderer ? /* @__PURE__ */ jsx(ItemRenderer, { item, isSelected: selectedKeys.includes(item.dsId) }) : /* @__PURE__ */ jsx(DSTypography, { variant: "b1", children: item.label })
|
173
|
-
] }),
|
174
|
-
/* @__PURE__ */ jsx(StyledRightContent, { children: item.subitems ? /* @__PURE__ */ jsx(MenuItemAddon, { isOpen: showSubMenu, level }) : null })
|
175
|
-
]
|
176
|
-
}
|
177
|
-
),
|
178
|
-
item.subitems && showSubMenu && /* @__PURE__ */ jsx(
|
179
|
-
Menu,
|
180
|
-
{
|
181
|
-
level: level + 1,
|
182
|
-
items: item.subitems,
|
183
|
-
showSubMenu,
|
184
|
-
setShowSubMenu,
|
185
|
-
referenceElement,
|
186
|
-
parentId: item.dsId,
|
187
|
-
selectionMode: item.selectionMode,
|
188
|
-
minWidth: item.minWidth
|
189
|
-
}
|
190
|
-
)
|
191
|
-
]
|
192
|
-
}
|
193
|
-
);
|
194
|
-
};
|
195
|
-
const SelectionAddon = ({
|
196
|
-
item,
|
197
|
-
selectedKeys,
|
198
|
-
selectionMode
|
199
|
-
}) => {
|
200
|
-
if (selectionMode === "multiple" && selectedKeys.includes(item.dsId)) {
|
201
|
-
return /* @__PURE__ */ jsx(Grid, { children: /* @__PURE__ */ jsx(Checkmark, { size: "s", color: ["brand-primary", "600"] }) });
|
202
|
-
}
|
203
|
-
if (selectionMode === "single" && selectedKeys.includes(item.dsId)) {
|
204
|
-
return /* @__PURE__ */ jsx(Grid, { width: "16px", children: /* @__PURE__ */ jsx(
|
205
|
-
"div",
|
206
|
-
{
|
207
|
-
style: {
|
208
|
-
width: 8,
|
209
|
-
height: 8,
|
210
|
-
borderRadius: "50%",
|
211
|
-
backgroundColor: "#005EA2"
|
212
|
-
}
|
213
|
-
}
|
214
|
-
) });
|
215
|
-
}
|
216
|
-
if ((selectionMode === "single" || selectionMode === "multiple") && selectedKeys[0] !== item.dsId) {
|
217
|
-
return /* @__PURE__ */ jsx("div", { style: { width: 16 } });
|
218
|
-
}
|
219
|
-
return null;
|
220
|
-
};
|
221
|
-
const Separator = () => /* @__PURE__ */ jsx("li", { role: "none", style: { padding: "0px 16px" }, children: /* @__PURE__ */ jsx(StyledSeparator, { role: "separator" }) });
|
222
|
-
const Section = ({ item }) => /* @__PURE__ */ jsx("li", { role: "none", style: { padding: "0px 16px", minHeight: 24, display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(StyledSection, { role: "presentation", children: item.label }) });
|
223
|
-
export {
|
224
|
-
MenuItem,
|
225
|
-
MenuItemAddon,
|
226
|
-
Section,
|
227
|
-
Separator
|
228
|
-
};
|
229
|
-
//# sourceMappingURL=MenuItem.js.map
|
@@ -1,7 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": 3,
|
3
|
-
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/MenuItem.tsx"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable import/no-cycle */\n/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable complexity */\n/* eslint-disable max-lines */\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { TriangleUpSmall, Checkmark, TriangleDownSmall, ChevronSmallDown, ChevronSmallRight } from '@elliemae/ds-icons';\nimport { type TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport { mergeRefs } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { MenuButtonContext } from '../DSMenuButtonCTX.js';\nimport {\n StyledMenuItem,\n StyledMenuItemContent,\n StyledLeftContent,\n StyledRightContent,\n StyledSeparator,\n StyledSection,\n} from '../styled.js';\nimport { Menu } from './Menu.js';\nimport type { MenuButtonT } from '../react-desc-prop-types.js';\n\nexport const MenuItemAddon = React.memo(({ level, isOpen }: { level: number; isOpen: boolean }) => {\n if (level === 0)\n return isOpen ? (\n <TriangleUpSmall color={['brand-primary', '600']} />\n ) : (\n <TriangleDownSmall color={['brand-primary', '600']} />\n );\n return isOpen ? (\n <ChevronSmallDown size=\"m\" color={['brand-primary', '600']} />\n ) : (\n <ChevronSmallRight size=\"m\" color={['brand-primary', '600']} />\n );\n});\n\nexport const MenuItem = ({\n innerRef,\n tabIndex,\n onFocus,\n selectionMode,\n item,\n level,\n parentId,\n isVertical,\n}: {\n selectionMode?: 'single' | 'multiple';\n item: MenuButtonT.Item;\n level: number;\n parentId: string | undefined;\n isVertical?: boolean;\n tabIndex: number;\n onFocus: React.FocusEventHandler;\n innerRef: TypescriptHelpersT.AnyRef<HTMLElement>;\n}) => {\n const {\n setFocusedOption,\n focusedOption,\n selectedKeys,\n onSelectionChange,\n triggerElementRef,\n setIsOpen,\n propsWithDefault: { ItemRenderer },\n } = React.useContext(MenuButtonContext);\n const listRef = React.useRef(null);\n const [showSubMenu, setShowSubMenu] = useState(false);\n const [referenceElement, setReferenceElement] = React.useState<HTMLElement | null>(null);\n const itemRef = useCallback(\n (node: HTMLElement | null) => {\n if (node !== null) {\n if (focusedOption === item.dsId) node.focus();\n }\n return node;\n },\n [focusedOption, item.dsId],\n );\n\n const selectionLogic = useCallback(() => {\n if (item.disabled) return;\n if (selectionMode === 'single') {\n const newValue = item.dsId === selectedKeys[0] ? [] : [item.dsId];\n onSelectionChange(newValue, parentId || 'root', item);\n }\n if (selectionMode === 'multiple') {\n const newValue = selectedKeys.includes(item.dsId)\n ? selectedKeys.filter((key: string) => key !== item.dsId)\n : [...selectedKeys, item.dsId];\n onSelectionChange(newValue, parentId || 'root', item);\n }\n }, [item, onSelectionChange, parentId, selectedKeys, selectionMode]);\n\n const handleOnClick: React.MouseEventHandler = useCallback(\n (e) => {\n if (selectionMode !== 'single' || item.disabled) {\n e.stopPropagation();\n }\n selectionLogic();\n },\n [item.disabled, selectionLogic, selectionMode],\n );\n const onItemKeyDown: React.KeyboardEventHandler = useCallback(\n (event) => {\n // Enter to close the menu and focus the trigger element\n if (event.key === 'Enter' && !item.disabled) {\n setIsOpen(false);\n triggerElementRef?.focus();\n }\n // selection\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n selectionLogic();\n }\n // open submenu logic\n if (\n ((event.key === 'ArrowDown' && level === 0) || (event.key === 'ArrowRight' && level !== 0)) &&\n item.subitems\n ) {\n event.preventDefault();\n event.stopPropagation();\n setShowSubMenu(true);\n setFocusedOption(item.subitems[0].dsId);\n }\n\n // close submenu logic\n if (event.key === 'ArrowLeft' && level >= 2) {\n event.preventDefault();\n event.stopPropagation();\n if (parentId) setFocusedOption(parentId);\n }\n if (event.key === 'Escape' && level > 0) {\n if (parentId !== undefined) {\n setFocusedOption(parentId);\n }\n }\n },\n [item.disabled, item.subitems, level, setIsOpen, triggerElementRef, selectionLogic, setFocusedOption, parentId],\n );\n\n const handleOnLIKeyDown: React.KeyboardEventHandler = useCallback(\n (e) => {\n // logic to close all submenus and focus on parent\n if (e.key === 'Enter') {\n setShowSubMenu(false);\n if (level === 0) {\n setFocusedOption(item.dsId);\n }\n }\n },\n [item.dsId, level, setFocusedOption],\n );\n\n const handleOnMouseEnter = useCallback(() => {\n setShowSubMenu(true);\n setFocusedOption(item.dsId);\n }, [item.dsId, setFocusedOption]);\n\n const handleOnMouseLeave = useCallback(() => {\n setShowSubMenu(false);\n }, []);\n\n const ariaExpanded = useMemo(() => {\n if (item.subitems) {\n return showSubMenu ? 'true' : 'false';\n }\n return undefined;\n }, [item.subitems, showSubMenu]);\n\n const role = useMemo(() => {\n if (selectionMode === 'single') {\n return 'menuitemradio';\n }\n if (selectionMode === 'multiple') {\n return 'menuitemcheckbox';\n }\n return 'menuitem';\n }, [selectionMode]);\n\n const ariaChecked = useMemo(() => {\n if (selectionMode === 'multiple' || selectionMode === 'single') {\n return selectedKeys.includes(item.dsId) ? 'true' : 'false';\n }\n return undefined;\n }, [item.dsId, selectionMode, selectedKeys]);\n\n return (\n <StyledMenuItem\n role=\"none\"\n innerRef={listRef}\n onMouseEnter={handleOnMouseEnter}\n onMouseLeave={handleOnMouseLeave}\n onKeyDown={handleOnLIKeyDown}\n isOpen={showSubMenu}\n level={level}\n isVertical={isVertical}\n isDisabled={item.disabled}\n >\n <StyledMenuItemContent\n role={role}\n aria-checked={ariaChecked}\n aria-haspopup={item.subitems ? 'true' : 'false'}\n aria-expanded={ariaExpanded}\n innerRef={mergeRefs(innerRef, itemRef, setReferenceElement)}\n onKeyDown={onItemKeyDown}\n onClick={handleOnClick}\n hasChildren={item.subitems !== undefined}\n onFocus={onFocus}\n tabIndex={tabIndex}\n aria-disabled={item.disabled ? 'true' : 'false'}\n >\n <StyledLeftContent>\n <SelectionAddon selectionMode={selectionMode || item.type} item={item} selectedKeys={selectedKeys} />\n {ItemRenderer ? (\n <ItemRenderer item={item} isSelected={selectedKeys.includes(item.dsId)} />\n ) : (\n <DSTypography variant=\"b1\">{item.label}</DSTypography>\n )}\n </StyledLeftContent>\n <StyledRightContent>\n {item.subitems ? <MenuItemAddon isOpen={showSubMenu} level={level} /> : null}\n </StyledRightContent>\n </StyledMenuItemContent>\n {item.subitems && showSubMenu && (\n <Menu\n level={level + 1}\n items={item.subitems}\n showSubMenu={showSubMenu}\n setShowSubMenu={setShowSubMenu}\n referenceElement={referenceElement}\n parentId={item.dsId}\n selectionMode={item.selectionMode}\n minWidth={item.minWidth}\n />\n )}\n </StyledMenuItem>\n );\n};\n\nconst SelectionAddon = ({\n item,\n selectedKeys,\n selectionMode,\n}: {\n item: MenuButtonT.Item;\n selectedKeys: string[];\n selectionMode?: 'single' | 'multiple';\n}) => {\n if (selectionMode === 'multiple' && selectedKeys.includes(item.dsId)) {\n return (\n <Grid>\n <Checkmark size=\"s\" color={['brand-primary', '600']} />\n </Grid>\n );\n }\n if (selectionMode === 'single' && selectedKeys.includes(item.dsId)) {\n return (\n <Grid width=\"16px\">\n <div\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: '#005EA2',\n }}\n />\n </Grid>\n );\n }\n if ((selectionMode === 'single' || selectionMode === 'multiple') && selectedKeys[0] !== item.dsId) {\n return <div style={{ width: 16 }} />;\n }\n return null;\n};\n\nexport const Separator = () => (\n <li role=\"none\" style={{ padding: '0px 16px' }}>\n <StyledSeparator role=\"separator\" />\n </li>\n);\n\nexport const Section = ({ item }: { item: MenuButtonT.Item }) => (\n <li role=\"none\" style={{ padding: '0px 16px', minHeight: 24, display: 'flex', alignItems: 'center' }}>\n <StyledSection role=\"presentation\">{item.label}</StyledSection>\n </li>\n);\n"],
|
5
|
-
"mappings": "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",
|
6
|
-
"names": ["React"]
|
7
|
-
}
|