@linzjs/step-ag-grid 23.0.1 → 25.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GridTheme.scss +1 -1
- package/dist/index.css +0 -13
- package/dist/src/components/ComponentLoadingWrapper.d.ts +1 -1
- package/dist/src/components/Grid.d.ts +17 -17
- package/dist/src/components/GridCell.d.ts +9 -9
- package/dist/src/components/GridCellFiller.d.ts +2 -2
- package/dist/src/components/GridCellMultiEditor.d.ts +6 -6
- package/dist/src/components/GridCellMultiSelectClassRules.d.ts +1 -1
- package/dist/src/components/GridIcon.d.ts +2 -2
- package/dist/src/components/GridNoRowsOverlay.d.ts +1 -1
- package/dist/src/components/GridPopoverHook.d.ts +2 -2
- package/dist/src/components/GridWrapper.d.ts +1 -1
- package/dist/src/components/PostSortRowsHook.d.ts +1 -1
- package/dist/src/components/clickInputWhenContainingCellClicked.d.ts +1 -1
- package/dist/src/components/gridFilter/GridFilterButtons.d.ts +5 -5
- package/dist/src/components/gridFilter/GridFilterColumnsToggle.d.ts +1 -1
- package/dist/src/components/gridFilter/GridFilterDownloadCsvButton.d.ts +1 -1
- package/dist/src/components/gridFilter/GridFilterHeaderIconButton.d.ts +2 -2
- package/dist/src/components/gridFilter/GridFilters.d.ts +1 -1
- package/dist/src/components/gridFilter/index.d.ts +7 -7
- package/dist/src/components/gridFilter/useGridFilter.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormDropDown.d.ts +8 -8
- package/dist/src/components/gridForm/GridFormEditBearing.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormMessage.d.ts +3 -3
- package/dist/src/components/gridForm/GridFormMultiSelect.d.ts +4 -4
- package/dist/src/components/gridForm/GridFormMultiSelectGrid.d.ts +4 -4
- package/dist/src/components/gridForm/GridFormPopoverMenu.d.ts +5 -5
- package/dist/src/components/gridForm/GridFormSubComponentTextArea.d.ts +4 -4
- package/dist/src/components/gridForm/GridFormSubComponentTextInput.d.ts +4 -4
- package/dist/src/components/gridForm/GridFormTextArea.d.ts +4 -4
- package/dist/src/components/gridForm/GridFormTextInput.d.ts +3 -3
- package/dist/src/components/gridForm/index.d.ts +10 -10
- package/dist/src/components/gridHeader/GridHeaderSelect.d.ts +1 -1
- package/dist/src/components/gridHeader/index.d.ts +1 -1
- package/dist/src/components/gridHook/index.d.ts +1 -1
- package/dist/src/components/gridHook/useGridContextMenu.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridButton.d.ts +5 -5
- package/dist/src/components/gridPopoverEdit/GridEditBoolean.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoutEditMultiSelect.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoutEditMultiSelectGrid.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoverEditBearing.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoverEditDropDown.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoverMenu.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoverMessage.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoverTextArea.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/GridPopoverTextInput.d.ts +4 -4
- package/dist/src/components/gridPopoverEdit/index.d.ts +11 -11
- package/dist/src/components/gridRender/GridRenderGenericCell.d.ts +5 -5
- package/dist/src/components/gridRender/GridRenderPopoutMenuCell.d.ts +1 -1
- package/dist/src/components/gridRender/index.d.ts +2 -2
- package/dist/src/components/gridUtil.d.ts +1 -1
- package/dist/src/components/index.d.ts +19 -19
- package/dist/src/contexts/GridContext.d.ts +4 -4
- package/dist/src/contexts/GridContextProvider.d.ts +3 -3
- package/dist/src/contexts/GridPopoverContext.d.ts +3 -3
- package/dist/src/contexts/GridPopoverContextProvider.d.ts +4 -4
- package/dist/src/contexts/GridUpdatingContextProvider.d.ts +1 -1
- package/dist/src/index.d.ts +19 -17
- package/dist/src/lui/ActionButton.d.ts +9 -9
- package/dist/src/lui/FormError.d.ts +2 -2
- package/dist/src/lui/TextAreaInput.d.ts +1 -1
- package/dist/src/lui/TextInputFormatted.d.ts +2 -2
- package/dist/src/lui/reactUtils.d.ts +1 -1
- package/dist/src/lui/stateDeferredHook.d.ts +1 -1
- package/dist/src/react-menu3/components/ControlledMenu.d.ts +2 -2
- package/dist/src/react-menu3/components/FocusableItem.d.ts +3 -3
- package/dist/src/react-menu3/components/Menu.d.ts +3 -3
- package/dist/src/react-menu3/components/MenuButton.d.ts +2 -2
- package/dist/src/react-menu3/components/MenuDivider.d.ts +1 -1
- package/dist/src/react-menu3/components/MenuGroup.d.ts +2 -2
- package/dist/src/react-menu3/components/MenuHeader.d.ts +2 -2
- package/dist/src/react-menu3/components/MenuItem.d.ts +3 -3
- package/dist/src/react-menu3/components/MenuList.d.ts +1 -1
- package/dist/src/react-menu3/components/MenuRadioGroup.d.ts +2 -2
- package/dist/src/react-menu3/components/SubMenu.d.ts +5 -5
- package/dist/src/react-menu3/contexts/EventHandlersContext.d.ts +1 -1
- package/dist/src/react-menu3/contexts/MenuListContext.d.ts +2 -2
- package/dist/src/react-menu3/contexts/MenuListItemContext.d.ts +1 -1
- package/dist/src/react-menu3/contexts/RadioGroupContext.d.ts +1 -1
- package/dist/src/react-menu3/contexts/SettingsContext.d.ts +2 -2
- package/dist/src/react-menu3/hooks/index.d.ts +9 -9
- package/dist/src/react-menu3/hooks/useBEM.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useCombinedRef.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useIsomorphicLayoutEffect.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useItemEffect.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useItemState.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useItems.d.ts +2 -2
- package/dist/src/react-menu3/hooks/useMenuChange.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useMenuState.d.ts +1 -1
- package/dist/src/react-menu3/hooks/useMenuStateAndFocus.d.ts +1 -1
- package/dist/src/react-menu3/index.d.ts +11 -11
- package/dist/src/react-menu3/positionUtils/getPositionHelpers.d.ts +1 -1
- package/dist/src/react-menu3/positionUtils/index.d.ts +3 -3
- package/dist/src/react-menu3/positionUtils/placeArrowHorizontal.d.ts +1 -1
- package/dist/src/react-menu3/positionUtils/placeArrowVertical.d.ts +1 -1
- package/dist/src/react-menu3/positionUtils/placeLeftorRight.d.ts +4 -4
- package/dist/src/react-menu3/positionUtils/placeToporBottom.d.ts +5 -5
- package/dist/src/react-menu3/positionUtils/positionContextMenu.d.ts +2 -2
- package/dist/src/react-menu3/positionUtils/positionMenu.d.ts +5 -5
- package/dist/src/react-menu3/style-utils/index.d.ts +1 -1
- package/dist/src/react-menu3/types.d.ts +15 -15
- package/dist/src/react-menu3/utils/constants.d.ts +1 -1
- package/dist/src/react-menu3/utils/index.d.ts +3 -3
- package/dist/src/react-menu3/utils/utils.d.ts +5 -5
- package/dist/src/react-menu3/utils/withHovering.d.ts +1 -1
- package/{src/utils → dist/src/utils/__tests__}/storybookTestUtil.ts +2 -2
- package/{src/utils → dist/src/utils/__tests__}/testQuick.ts +15 -14
- package/{src/utils → dist/src/utils/__tests__}/testUtil.ts +31 -36
- package/dist/src/utils/__tests__/vitestUtil.ts +295 -0
- package/dist/src/utils/textValidator.d.ts +2 -2
- package/dist/{step-ag-grid.cjs.js → step-ag-grid.cjs} +969 -955
- package/dist/step-ag-grid.cjs.map +1 -0
- package/dist/step-ag-grid.esm.js +970 -958
- package/dist/step-ag-grid.esm.js.map +1 -1
- package/dist/vite.config.d.ts +1 -1
- package/package.json +38 -57
- package/src/components/ComponentLoadingWrapper.tsx +5 -6
- package/src/components/Grid.tsx +85 -83
- package/src/components/GridCell.test.tsx +17 -15
- package/src/components/GridCell.tsx +46 -44
- package/src/components/GridCellFiller.tsx +5 -4
- package/src/components/GridCellMultiEditor.tsx +7 -7
- package/src/components/GridCellMultiSelectClassRules.tsx +3 -3
- package/src/components/GridIcon.tsx +6 -7
- package/src/components/GridLoadableCell.tsx +2 -2
- package/src/components/GridNoRowsOverlay.tsx +8 -8
- package/src/components/GridPopoverHook.tsx +16 -16
- package/src/components/GridWrapper.tsx +2 -2
- package/src/components/PostSortRowsHook.ts +11 -11
- package/src/components/clickInputWhenContainingCellClicked.tsx +5 -5
- package/src/components/gridFilter/GridFilterButtons.tsx +8 -9
- package/src/components/gridFilter/GridFilterColumnsToggle.tsx +25 -26
- package/src/components/gridFilter/GridFilterDownloadCsvButton.tsx +12 -13
- package/src/components/gridFilter/GridFilterHeaderIconButton.tsx +9 -10
- package/src/components/gridFilter/GridFilterQuick.tsx +6 -6
- package/src/components/gridFilter/GridFilters.tsx +1 -1
- package/src/components/gridFilter/index.ts +7 -7
- package/src/components/gridFilter/useGridFilter.ts +3 -3
- package/src/components/gridForm/GridFormDropDown.tsx +56 -52
- package/src/components/gridForm/GridFormEditBearing.tsx +12 -12
- package/src/components/gridForm/GridFormMessage.tsx +10 -10
- package/src/components/gridForm/GridFormMultiSelect.tsx +53 -51
- package/src/components/gridForm/GridFormMultiSelectGrid.tsx +25 -26
- package/src/components/gridForm/GridFormPopoverMenu.tsx +32 -29
- package/src/components/gridForm/GridFormSubComponentTextArea.tsx +10 -10
- package/src/components/gridForm/GridFormSubComponentTextInput.tsx +8 -8
- package/src/components/gridForm/GridFormTextArea.tsx +11 -11
- package/src/components/gridForm/GridFormTextInput.tsx +11 -11
- package/src/components/gridForm/index.ts +10 -10
- package/src/components/gridHeader/GridHeaderSelect.tsx +9 -9
- package/src/components/gridHeader/index.ts +1 -1
- package/src/components/gridHook/index.ts +1 -1
- package/src/components/gridHook/useGridContextMenu.tsx +7 -7
- package/src/components/gridPopoverEdit/GridButton.tsx +13 -12
- package/src/components/gridPopoverEdit/GridEditBoolean.tsx +19 -18
- package/src/components/gridPopoverEdit/GridPopoutEditMultiSelect.ts +7 -6
- package/src/components/gridPopoverEdit/GridPopoutEditMultiSelectGrid.ts +7 -6
- package/src/components/gridPopoverEdit/GridPopoverEditBearing.ts +9 -9
- package/src/components/gridPopoverEdit/GridPopoverEditDropDown.ts +8 -7
- package/src/components/gridPopoverEdit/GridPopoverMenu.tsx +6 -6
- package/src/components/gridPopoverEdit/GridPopoverMessage.ts +4 -4
- package/src/components/gridPopoverEdit/GridPopoverTextArea.ts +4 -4
- package/src/components/gridPopoverEdit/GridPopoverTextInput.ts +4 -4
- package/src/components/gridPopoverEdit/index.ts +11 -11
- package/src/components/gridRender/GridRenderGenericCell.tsx +5 -5
- package/src/components/gridRender/GridRenderPopoutMenuCell.tsx +8 -9
- package/src/components/gridRender/index.ts +2 -2
- package/src/components/gridUtil.ts +3 -3
- package/src/components/index.ts +19 -19
- package/src/contexts/GridContext.tsx +52 -46
- package/src/contexts/GridContextProvider.test.tsx +15 -14
- package/src/contexts/GridContextProvider.tsx +42 -42
- package/src/contexts/GridPopoverContext.tsx +10 -7
- package/src/contexts/GridPopoverContextProvider.tsx +12 -10
- package/src/contexts/GridSubComponentContext.ts +6 -5
- package/src/contexts/GridUpdatingContext.tsx +5 -4
- package/src/contexts/GridUpdatingContextProvider.tsx +3 -3
- package/src/index.ts +19 -21
- package/src/lui/ActionButton.scss +2 -2
- package/src/lui/ActionButton.tsx +42 -41
- package/src/lui/FormError.scss +3 -4
- package/src/lui/FormError.tsx +4 -4
- package/src/lui/TextAreaInput.tsx +9 -9
- package/src/lui/TextInputFormatted.scss +1 -1
- package/src/lui/TextInputFormatted.tsx +11 -11
- package/src/lui/reactUtils.test.tsx +9 -8
- package/src/lui/reactUtils.tsx +2 -2
- package/src/lui/stateDeferredHook.tsx +3 -5
- package/src/lui/timeoutHook.test.tsx +12 -11
- package/src/lui/timeoutHook.tsx +1 -1
- package/src/react-app-env.d.ts +1 -1
- package/src/react-menu3/components/ControlledMenu.tsx +48 -48
- package/src/react-menu3/components/FocusableItem.tsx +7 -7
- package/src/react-menu3/components/Menu.tsx +11 -11
- package/src/react-menu3/components/MenuButton.tsx +4 -4
- package/src/react-menu3/components/MenuDivider.tsx +4 -4
- package/src/react-menu3/components/MenuGroup.tsx +5 -5
- package/src/react-menu3/components/MenuHeader.tsx +4 -4
- package/src/react-menu3/components/MenuItem.tsx +14 -14
- package/src/react-menu3/components/MenuList.tsx +55 -55
- package/src/react-menu3/components/MenuRadioGroup.tsx +7 -7
- package/src/react-menu3/components/SubMenu.tsx +24 -24
- package/src/react-menu3/contexts/EventHandlersContext.ts +2 -2
- package/src/react-menu3/contexts/HoverItemContext.ts +1 -1
- package/src/react-menu3/contexts/ItemSettingsContext.ts +1 -1
- package/src/react-menu3/contexts/MenuListContext.ts +2 -2
- package/src/react-menu3/contexts/MenuListItemContext.ts +2 -2
- package/src/react-menu3/contexts/RadioGroupContext.ts +2 -2
- package/src/react-menu3/contexts/SettingsContext.ts +2 -2
- package/src/react-menu3/hooks/index.ts +9 -9
- package/src/react-menu3/hooks/useBEM.ts +4 -4
- package/src/react-menu3/hooks/useCombinedRef.ts +2 -2
- package/src/react-menu3/hooks/useIsomorphicLayoutEffect.ts +4 -4
- package/src/react-menu3/hooks/useItemEffect.ts +3 -3
- package/src/react-menu3/hooks/useItemState.ts +5 -5
- package/src/react-menu3/hooks/useItems.ts +8 -8
- package/src/react-menu3/hooks/useMenuChange.ts +3 -3
- package/src/react-menu3/hooks/useMenuState.ts +5 -5
- package/src/react-menu3/hooks/useMenuStateAndFocus.ts +4 -4
- package/src/react-menu3/index.ts +11 -11
- package/src/react-menu3/positionUtils/getPositionHelpers.ts +2 -2
- package/src/react-menu3/positionUtils/index.ts +3 -3
- package/src/react-menu3/positionUtils/placeArrowHorizontal.ts +1 -1
- package/src/react-menu3/positionUtils/placeArrowVertical.ts +1 -1
- package/src/react-menu3/positionUtils/placeLeftorRight.ts +13 -13
- package/src/react-menu3/positionUtils/placeToporBottom.ts +15 -15
- package/src/react-menu3/positionUtils/positionContextMenu.ts +4 -4
- package/src/react-menu3/positionUtils/positionMenu.ts +14 -14
- package/src/react-menu3/style-utils/index.ts +24 -24
- package/src/react-menu3/types.ts +15 -15
- package/src/react-menu3/utils/constants.ts +33 -33
- package/src/react-menu3/utils/index.ts +3 -4
- package/src/react-menu3/utils/propTypes2.ts +10 -10
- package/src/react-menu3/utils/utils.ts +14 -14
- package/src/react-menu3/utils/withHovering.tsx +3 -3
- package/src/stories/components/ActionButton.stories.tsx +23 -24
- package/src/stories/grid/FormTest.tsx +15 -16
- package/src/stories/grid/GridDragRow.stories.tsx +33 -34
- package/src/stories/grid/GridFilterButtons.stories.tsx +32 -33
- package/src/stories/grid/GridNoRowsOverlay.stories.tsx +9 -10
- package/src/stories/grid/GridNonEditableRow.stories.tsx +40 -41
- package/src/stories/grid/GridPinnedRow.stories.tsx +25 -26
- package/src/stories/grid/GridPopoutContextMenu.stories.tsx +33 -32
- package/src/stories/grid/GridPopoutEditBoolean.stories.tsx +21 -22
- package/src/stories/grid/GridPopoutEditGeneric.stories.tsx +18 -19
- package/src/stories/grid/GridPopoutEditGenericTextArea.stories.tsx +50 -49
- package/src/stories/grid/GridPopoverEditBearing.stories.tsx +25 -26
- package/src/stories/grid/GridPopoverEditDropDown.stories.tsx +93 -94
- package/src/stories/grid/GridPopoverEditMultiSelect.stories.tsx +62 -63
- package/src/stories/grid/GridPopoverEditMultiSelectGrid.stories.tsx +28 -28
- package/src/stories/grid/GridReadOnly.stories.tsx +66 -67
- package/src/stories/grid/GridViewList.stories.tsx +37 -38
- package/src/stories/grid/gridFormInteraction/GridFormDropDownInteraction.stories.tsx +37 -38
- package/src/stories/grid/gridFormInteraction/GridFormEditBearingCorrectionInteraction.stories.tsx +25 -26
- package/src/stories/grid/gridFormInteraction/GridFormEditBearingInteraction.stories.tsx +25 -26
- package/src/stories/grid/gridFormInteraction/GridFormMultiSelectGridInteraction.stories.tsx +31 -31
- package/src/stories/grid/gridFormInteraction/GridFormMultiSelectInteraction.stories.tsx +47 -48
- package/src/stories/grid/gridFormInteraction/GridFormPopoverMenuInteraction.stories.tsx +44 -45
- package/src/stories/grid/gridFormInteraction/GridFormTextAreaInteraction.stories.tsx +19 -20
- package/src/stories/grid/gridFormInteraction/GridFormTextInputInteraction.stories.tsx +21 -22
- package/src/stories/grid/gridFormStatic/GridFormDropDown.stories.tsx +40 -41
- package/src/stories/grid/gridFormStatic/GridFormEditBearing.stories.tsx +14 -15
- package/src/stories/grid/gridFormStatic/GridFormEditBearingCorrection.stories.tsx +14 -15
- package/src/stories/grid/gridFormStatic/GridFormMessage.stories.tsx +10 -11
- package/src/stories/grid/gridFormStatic/GridFormMultiSelect.stories.tsx +20 -21
- package/src/stories/grid/gridFormStatic/GridFormPopoverMenu.stories.tsx +16 -17
- package/src/stories/grid/gridFormStatic/GridFormTextArea.stories.tsx +13 -14
- package/src/stories/grid/gridFormStatic/GridFormTextInput.stories.tsx +13 -14
- package/src/stories/grid/interactions/GridKeyboardInteractions.stories.tsx +68 -71
- package/src/stories/react-menu/ReactMenu.stories.tsx +26 -26
- package/src/styles/Grid.scss +9 -9
- package/src/styles/GridIcon.scss +6 -6
- package/src/styles/GridPopoverMenu.scss +3 -3
- package/src/styles/GridTheme.scss +1 -1
- package/src/styles/react-menu-customisations.scss +26 -41
- package/src/utils/__tests__/storybookTestUtil.ts +4 -0
- package/src/utils/__tests__/testQuick.ts +157 -0
- package/src/utils/__tests__/testUtil.ts +294 -0
- package/src/utils/__tests__/vitestUtil.ts +295 -0
- package/src/utils/bearing.test.ts +47 -45
- package/src/utils/bearing.ts +20 -20
- package/src/utils/deferredPromise.ts +1 -1
- package/src/utils/textMatcher.test.ts +10 -9
- package/src/utils/textMatcher.ts +8 -8
- package/src/utils/textValidator.test.ts +61 -62
- package/src/utils/textValidator.ts +11 -11
- package/src/utils/util.test.ts +21 -20
- package/src/utils/util.ts +7 -7
- package/dist/src/utils/storybookTestUtil.d.ts +0 -3
- package/dist/src/utils/testQuick.d.ts +0 -62
- package/dist/src/utils/testUtil.d.ts +0 -46
- package/dist/step-ag-grid.cjs.js.map +0 -1
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { FocusEvent, ForwardedRef,
|
|
2
|
-
import { createPortal } from
|
|
3
|
-
|
|
4
|
-
import { hasParentClass } from
|
|
5
|
-
import { EventHandlersContext, EventHandlersContextType } from
|
|
6
|
-
import { ItemSettingsContext } from
|
|
7
|
-
import { SettingsContext } from
|
|
8
|
-
import { useBEM } from
|
|
9
|
-
import { ControlledMenuProps, PortalFieldType, RadioChangeEvent } from
|
|
10
|
-
import { CloseReason,
|
|
11
|
-
import { MenuList } from
|
|
1
|
+
import { FocusEvent, ForwardedRef, forwardRef, MutableRefObject, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
3
|
+
|
|
4
|
+
import { hasParentClass } from '../../utils/util';
|
|
5
|
+
import { EventHandlersContext, EventHandlersContextType } from '../contexts/EventHandlersContext';
|
|
6
|
+
import { ItemSettingsContext } from '../contexts/ItemSettingsContext';
|
|
7
|
+
import { SettingsContext } from '../contexts/SettingsContext';
|
|
8
|
+
import { useBEM } from '../hooks';
|
|
9
|
+
import { ControlledMenuProps, PortalFieldType, RadioChangeEvent } from '../types';
|
|
10
|
+
import { CloseReason, getTransition, isMenuOpen, Keys, menuContainerClass, mergeProps, safeCall } from '../utils';
|
|
11
|
+
import { MenuList } from './MenuList';
|
|
12
12
|
|
|
13
13
|
export const ControlledMenuFr = (
|
|
14
14
|
{
|
|
15
|
-
|
|
15
|
+
'aria-label': ariaLabel,
|
|
16
16
|
className,
|
|
17
17
|
containerProps,
|
|
18
18
|
initialMounted,
|
|
@@ -21,11 +21,11 @@ export const ControlledMenuFr = (
|
|
|
21
21
|
transitionTimeout,
|
|
22
22
|
boundingBoxRef,
|
|
23
23
|
boundingBoxPadding,
|
|
24
|
-
reposition =
|
|
24
|
+
reposition = 'auto',
|
|
25
25
|
submenuOpenDelay = 300,
|
|
26
26
|
submenuCloseDelay = 150,
|
|
27
27
|
skipOpen,
|
|
28
|
-
viewScroll =
|
|
28
|
+
viewScroll = 'initial',
|
|
29
29
|
portal,
|
|
30
30
|
theming,
|
|
31
31
|
onItemClick,
|
|
@@ -68,10 +68,10 @@ export const ControlledMenuFr = (
|
|
|
68
68
|
|
|
69
69
|
const isWithinMenu = useCallback(
|
|
70
70
|
(target: EventTarget | null) =>
|
|
71
|
-
hasParentClass(
|
|
71
|
+
hasParentClass('szh-menu--state-open', target as Node) ||
|
|
72
72
|
// This is temporary, it will be removed when the overlay click is fixed
|
|
73
|
-
hasParentClass(
|
|
74
|
-
hasParentClass(
|
|
73
|
+
hasParentClass('LuiModalPrefab', target as Node) ||
|
|
74
|
+
hasParentClass('prefab-modal', target as Node),
|
|
75
75
|
[],
|
|
76
76
|
);
|
|
77
77
|
|
|
@@ -85,7 +85,7 @@ export const ControlledMenuFr = (
|
|
|
85
85
|
// This doesn't happen in React18
|
|
86
86
|
// To work around it, I invoke the save by clicking on a passed in invisible button ref
|
|
87
87
|
if (saveButtonRef?.current) {
|
|
88
|
-
saveButtonRef.current.setAttribute(
|
|
88
|
+
saveButtonRef.current.setAttribute('data-reason', CloseReason.BLUR);
|
|
89
89
|
saveButtonRef.current.click();
|
|
90
90
|
} else safeCall(onClose, { reason: CloseReason.BLUR });
|
|
91
91
|
|
|
@@ -121,7 +121,7 @@ export const ControlledMenuFr = (
|
|
|
121
121
|
const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;
|
|
122
122
|
const activeElement = thisDocument.activeElement;
|
|
123
123
|
if (!anchorRef?.current || !activeElement) return;
|
|
124
|
-
if (ev.key !==
|
|
124
|
+
if (ev.key !== 'Tab' && ev.key !== 'Enter') return;
|
|
125
125
|
|
|
126
126
|
if (ev.repeat) {
|
|
127
127
|
ev.preventDefault();
|
|
@@ -131,14 +131,14 @@ export const ControlledMenuFr = (
|
|
|
131
131
|
|
|
132
132
|
const invokeSave = (reason: string) => {
|
|
133
133
|
if (!saveButtonRef?.current) return;
|
|
134
|
-
saveButtonRef.current?.setAttribute(
|
|
134
|
+
saveButtonRef.current?.setAttribute('data-reason', reason);
|
|
135
135
|
saveButtonRef?.current?.click();
|
|
136
136
|
};
|
|
137
137
|
|
|
138
138
|
// data-allowtabtosave is used such that list filter inputs can use tab to save
|
|
139
|
-
const allowTabToSave = activeElement.getAttribute(
|
|
139
|
+
const allowTabToSave = activeElement.getAttribute('data-allowtabtosave') == 'true';
|
|
140
140
|
|
|
141
|
-
const inputElsIterator = thisDocument.querySelectorAll<HTMLElement>(
|
|
141
|
+
const inputElsIterator = thisDocument.querySelectorAll<HTMLElement>('.szh-menu--state-open input,textarea');
|
|
142
142
|
let inputEls: HTMLElement[] = [];
|
|
143
143
|
inputElsIterator.forEach((el) => inputEls.push(el));
|
|
144
144
|
inputEls = inputEls.filter((el) => !(el as any).disabled);
|
|
@@ -146,10 +146,10 @@ export const ControlledMenuFr = (
|
|
|
146
146
|
const firstInputEl = inputEls[0];
|
|
147
147
|
const lastInputEl = inputEls[inputEls.length - 1];
|
|
148
148
|
|
|
149
|
-
const isTextArea = activeElement.nodeName ===
|
|
150
|
-
const suppressEnterAutoSave = activeElement.getAttribute(
|
|
149
|
+
const isTextArea = activeElement.nodeName === 'TEXTAREA';
|
|
150
|
+
const suppressEnterAutoSave = activeElement.getAttribute('data-disableenterautosave') == 'true' || isTextArea;
|
|
151
151
|
|
|
152
|
-
if (ev.key ===
|
|
152
|
+
if (ev.key === 'Tab') {
|
|
153
153
|
const tabDirection = ev.shiftKey ? CloseReason.TAB_BACKWARD : CloseReason.TAB_FORWARD;
|
|
154
154
|
if (
|
|
155
155
|
(activeElement === lastInputEl && !ev.shiftKey) ||
|
|
@@ -167,14 +167,14 @@ export const ControlledMenuFr = (
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
const type = activeElement.getAttribute(
|
|
171
|
-
const isTextInput = type ===
|
|
170
|
+
const type = activeElement.getAttribute('type');
|
|
171
|
+
const isTextInput = type === 'text' || type == null || type === 'textarea';
|
|
172
172
|
|
|
173
173
|
switch (activeElement.nodeName) {
|
|
174
|
-
case
|
|
174
|
+
case 'INPUT':
|
|
175
175
|
{
|
|
176
176
|
// If there's only one input element, we support tab and enter
|
|
177
|
-
if (isTextInput && ev.key ===
|
|
177
|
+
if (isTextInput && ev.key === 'Enter' && !suppressEnterAutoSave) {
|
|
178
178
|
ev.preventDefault();
|
|
179
179
|
ev.stopPropagation();
|
|
180
180
|
if (isDown) {
|
|
@@ -196,19 +196,19 @@ export const ControlledMenuFr = (
|
|
|
196
196
|
useEffect(() => {
|
|
197
197
|
if (isMenuOpen(state)) {
|
|
198
198
|
const thisDocument = anchorRef?.current ? anchorRef?.current.ownerDocument : document;
|
|
199
|
-
thisDocument.addEventListener(
|
|
200
|
-
thisDocument.addEventListener(
|
|
201
|
-
thisDocument.addEventListener(
|
|
202
|
-
thisDocument.addEventListener(
|
|
203
|
-
thisDocument.addEventListener(
|
|
204
|
-
thisDocument.addEventListener(
|
|
199
|
+
thisDocument.addEventListener('keydown', handleKeydownTabAndEnter, true);
|
|
200
|
+
thisDocument.addEventListener('keyup', handleKeyupTabAndEnter, true);
|
|
201
|
+
thisDocument.addEventListener('mousedown', handleScreenEventForSave, true);
|
|
202
|
+
thisDocument.addEventListener('mouseup', handleScreenEventForCancel, true);
|
|
203
|
+
thisDocument.addEventListener('click', handleScreenEventForCancel, true);
|
|
204
|
+
thisDocument.addEventListener('dblclick', handleScreenEventForCancel, true);
|
|
205
205
|
return () => {
|
|
206
|
-
thisDocument.removeEventListener(
|
|
207
|
-
thisDocument.removeEventListener(
|
|
208
|
-
thisDocument.removeEventListener(
|
|
209
|
-
thisDocument.removeEventListener(
|
|
210
|
-
thisDocument.removeEventListener(
|
|
211
|
-
thisDocument.removeEventListener(
|
|
206
|
+
thisDocument.removeEventListener('keydown', handleKeydownTabAndEnter, true);
|
|
207
|
+
thisDocument.removeEventListener('keyup', handleKeyupTabAndEnter, true);
|
|
208
|
+
thisDocument.removeEventListener('mousedown', handleScreenEventForSave, true);
|
|
209
|
+
thisDocument.removeEventListener('mouseup', handleScreenEventForCancel, true);
|
|
210
|
+
thisDocument.removeEventListener('click', handleScreenEventForCancel, true);
|
|
211
|
+
thisDocument.removeEventListener('dblclick', handleScreenEventForCancel, true);
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
214
|
return () => {};
|
|
@@ -248,7 +248,7 @@ export const ControlledMenuFr = (
|
|
|
248
248
|
key: event.key,
|
|
249
249
|
shiftKey: event.shiftKey,
|
|
250
250
|
reason:
|
|
251
|
-
event.key ===
|
|
251
|
+
event.key === 'Tab'
|
|
252
252
|
? event.shiftKey
|
|
253
253
|
? CloseReason.TAB_BACKWARD
|
|
254
254
|
: CloseReason.TAB_FORWARD
|
|
@@ -295,7 +295,7 @@ export const ControlledMenuFr = (
|
|
|
295
295
|
}
|
|
296
296
|
};
|
|
297
297
|
|
|
298
|
-
const itemTransition = getTransition(transition,
|
|
298
|
+
const itemTransition = getTransition(transition, 'item');
|
|
299
299
|
const modifiers = useMemo(() => ({ theme: theming, itemTransition }), [theming, itemTransition]);
|
|
300
300
|
|
|
301
301
|
const menuList = (
|
|
@@ -306,7 +306,7 @@ export const ControlledMenuFr = (
|
|
|
306
306
|
modifiers,
|
|
307
307
|
className,
|
|
308
308
|
})}
|
|
309
|
-
style={{ ...containerProps?.style, position:
|
|
309
|
+
style={{ ...containerProps?.style, position: 'relative' }}
|
|
310
310
|
ref={containerRef}
|
|
311
311
|
>
|
|
312
312
|
{state && (
|
|
@@ -315,7 +315,7 @@ export const ControlledMenuFr = (
|
|
|
315
315
|
<EventHandlersContext.Provider value={eventHandlers}>
|
|
316
316
|
<MenuList
|
|
317
317
|
{...restProps}
|
|
318
|
-
ariaLabel={ariaLabel ||
|
|
318
|
+
ariaLabel={ariaLabel || 'Menu'}
|
|
319
319
|
externalRef={externalRef}
|
|
320
320
|
containerRef={containerRef}
|
|
321
321
|
onClose={onClose}
|
|
@@ -328,7 +328,7 @@ export const ControlledMenuFr = (
|
|
|
328
328
|
);
|
|
329
329
|
|
|
330
330
|
if (portal === true && anchorRef?.current != null) {
|
|
331
|
-
if (hasParentClass(
|
|
331
|
+
if (hasParentClass('react-menu-inline-test', anchorRef.current)) {
|
|
332
332
|
portal = false;
|
|
333
333
|
} else {
|
|
334
334
|
portal = { target: anchorRef.current.ownerDocument.body } as PortalFieldType;
|
|
@@ -336,8 +336,8 @@ export const ControlledMenuFr = (
|
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
if (portal) {
|
|
339
|
-
if (typeof portal ===
|
|
340
|
-
if (portal && typeof document !==
|
|
339
|
+
if (typeof portal === 'boolean') {
|
|
340
|
+
if (portal && typeof document !== 'undefined') {
|
|
341
341
|
return createPortal(menuList, document.body);
|
|
342
342
|
}
|
|
343
343
|
} else {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { LegacyRef, ReactElement, useContext, useMemo, useRef } from
|
|
1
|
+
import { LegacyRef, ReactElement, useContext, useMemo, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import { EventHandlersContext } from
|
|
4
|
-
import { useBEM, useCombinedRef, useItemState } from
|
|
5
|
-
import { BaseProps } from
|
|
6
|
-
import { commonProps, menuClass, menuItemClass, mergeProps, safeCall, withHovering } from
|
|
7
|
-
import { withHoveringResultProps } from
|
|
3
|
+
import { EventHandlersContext } from '../contexts/EventHandlersContext';
|
|
4
|
+
import { useBEM, useCombinedRef, useItemState } from '../hooks';
|
|
5
|
+
import { BaseProps } from '../types';
|
|
6
|
+
import { commonProps, menuClass, menuItemClass, mergeProps, safeCall, withHovering } from '../utils';
|
|
7
|
+
import { withHoveringResultProps } from '../utils/withHovering';
|
|
8
8
|
|
|
9
9
|
export interface FocusableItemProps extends BaseProps, withHoveringResultProps {
|
|
10
10
|
disabled?: boolean;
|
|
@@ -66,4 +66,4 @@ export const FocusableItemFr = ({
|
|
|
66
66
|
);
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
export const FocusableItem = withHovering(
|
|
69
|
+
export const FocusableItem = withHovering('FocusableItem', FocusableItemFr);
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
|
+
cloneElement,
|
|
2
3
|
ForwardedRef,
|
|
4
|
+
forwardRef,
|
|
3
5
|
Fragment,
|
|
4
6
|
ReactElement,
|
|
5
|
-
cloneElement,
|
|
6
|
-
forwardRef,
|
|
7
7
|
useCallback,
|
|
8
8
|
useImperativeHandle,
|
|
9
9
|
useRef,
|
|
10
|
-
} from
|
|
10
|
+
} from 'react';
|
|
11
11
|
|
|
12
|
-
import { useCombinedRef, useMenuChange, useMenuStateAndFocus } from
|
|
13
|
-
import { MenuButtonModifiers, MenuCloseEvent, RenderProp, RootMenuProps, UncontrolledMenuProps } from
|
|
14
|
-
import { FocusPositions,
|
|
15
|
-
import { ControlledMenu } from
|
|
12
|
+
import { useCombinedRef, useMenuChange, useMenuStateAndFocus } from '../hooks';
|
|
13
|
+
import { MenuButtonModifiers, MenuCloseEvent, RenderProp, RootMenuProps, UncontrolledMenuProps } from '../types';
|
|
14
|
+
import { FocusPositions, getName, isMenuOpen, Keys, mergeProps, safeCall } from '../utils';
|
|
15
|
+
import { ControlledMenu } from './ControlledMenu';
|
|
16
16
|
|
|
17
17
|
//
|
|
18
18
|
// Menu
|
|
@@ -31,7 +31,7 @@ export interface MenuProps extends RootMenuProps, UncontrolledMenuProps {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export function MenuFr(
|
|
34
|
-
{
|
|
34
|
+
{ 'aria-label': ariaLabel, menuButton, instanceRef, onMenuChange, ...restProps }: MenuProps,
|
|
35
35
|
externalRef: ForwardedRef<ReactElement>,
|
|
36
36
|
) {
|
|
37
37
|
const [stateProps, toggleMenu, openMenu] = useMenuStateAndFocus(restProps);
|
|
@@ -72,14 +72,14 @@ export function MenuFr(
|
|
|
72
72
|
|
|
73
73
|
// Too many mixed types here to figure out what to pick for button. Bad code.
|
|
74
74
|
const button: any = safeCall(menuButton, { open: isOpen });
|
|
75
|
-
if (!button || !button.type) throw new Error(
|
|
75
|
+
if (!button || !button.type) throw new Error('Menu requires a menuButton prop.');
|
|
76
76
|
|
|
77
77
|
const buttonProps = {
|
|
78
78
|
ref: useCombinedRef(button.ref, buttonRef),
|
|
79
79
|
...mergeProps({ onClick, onKeyDown }, button.props),
|
|
80
80
|
isOpen: false,
|
|
81
81
|
};
|
|
82
|
-
if (getName(button.type) ===
|
|
82
|
+
if (getName(button.type) === 'MenuButton') {
|
|
83
83
|
buttonProps.isOpen = isOpen;
|
|
84
84
|
}
|
|
85
85
|
const renderButton = cloneElement(button, buttonProps);
|
|
@@ -97,7 +97,7 @@ export function MenuFr(
|
|
|
97
97
|
<ControlledMenu
|
|
98
98
|
{...restProps}
|
|
99
99
|
{...stateProps}
|
|
100
|
-
aria-label={ariaLabel || (typeof button.props.children ===
|
|
100
|
+
aria-label={ariaLabel || (typeof button.props.children === 'string' ? button.props.children : 'Menu')}
|
|
101
101
|
anchorRef={buttonRef}
|
|
102
102
|
ref={externalRef}
|
|
103
103
|
onClose={handleClose}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { LegacyRef, ReactNode,
|
|
1
|
+
import { forwardRef, LegacyRef, ReactNode, useMemo } from 'react';
|
|
2
2
|
|
|
3
|
-
import { useBEM } from
|
|
4
|
-
import { BaseProps, MenuButtonModifiers } from
|
|
5
|
-
import { menuButtonClass } from
|
|
3
|
+
import { useBEM } from '../hooks';
|
|
4
|
+
import { BaseProps, MenuButtonModifiers } from '../types';
|
|
5
|
+
import { menuButtonClass } from '../utils';
|
|
6
6
|
|
|
7
7
|
export interface MenuButtonProps extends BaseProps<MenuButtonModifiers> {
|
|
8
8
|
disabled?: boolean;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { forwardRef, LegacyRef, memo } from 'react';
|
|
2
2
|
|
|
3
|
-
import { useBEM } from
|
|
4
|
-
import { BaseProps } from
|
|
5
|
-
import { menuClass, menuDividerClass } from
|
|
3
|
+
import { useBEM } from '../hooks';
|
|
4
|
+
import { BaseProps } from '../types';
|
|
5
|
+
import { menuClass, menuDividerClass } from '../utils';
|
|
6
6
|
|
|
7
7
|
const MenuDividerFr = ({ className, ...restProps }: BaseProps, externalRef: LegacyRef<HTMLLIElement>) => {
|
|
8
8
|
return (
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ForwardedRef,
|
|
1
|
+
import { ForwardedRef, forwardRef, ReactNode, useContext, useRef, useState } from 'react';
|
|
2
2
|
|
|
3
|
-
import { MenuListContext } from
|
|
4
|
-
import { useBEM, useCombinedRef, useLayoutEffect } from
|
|
5
|
-
import { BaseProps, MenuOverflow } from
|
|
6
|
-
import { menuClass, menuGroupClass } from
|
|
3
|
+
import { MenuListContext } from '../contexts/MenuListContext';
|
|
4
|
+
import { useBEM, useCombinedRef, useLayoutEffect } from '../hooks';
|
|
5
|
+
import { BaseProps, MenuOverflow } from '../types';
|
|
6
|
+
import { menuClass, menuGroupClass } from '../utils';
|
|
7
7
|
|
|
8
8
|
export interface MenuGroupProps extends BaseProps {
|
|
9
9
|
children?: ReactNode;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ForwardedRef, forwardRef, memo } from
|
|
1
|
+
import { ForwardedRef, forwardRef, memo } from 'react';
|
|
2
2
|
|
|
3
|
-
import { useBEM } from
|
|
4
|
-
import { BasePropsWithChildren } from
|
|
5
|
-
import { menuClass, menuHeaderClass } from
|
|
3
|
+
import { useBEM } from '../hooks';
|
|
4
|
+
import { BasePropsWithChildren } from '../types';
|
|
5
|
+
import { menuClass, menuHeaderClass } from '../utils';
|
|
6
6
|
|
|
7
7
|
export const MenuHeaderFr = (
|
|
8
8
|
{ className, ...restProps }: BasePropsWithChildren,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { KeyboardEvent, Ref, useContext, useMemo } from
|
|
1
|
+
import { KeyboardEvent, Ref, useContext, useMemo } from 'react';
|
|
2
2
|
|
|
3
|
-
import { EventHandlersContext } from
|
|
4
|
-
import { RadioGroupContext } from
|
|
5
|
-
import { useBEM, useCombinedRef, useItemState } from
|
|
6
|
-
import { BaseProps, ClickEvent, EventHandler, Hoverable, MenuItemTypeProp, RenderProp } from
|
|
7
|
-
import {
|
|
8
|
-
import { withHoveringResultProps } from
|
|
3
|
+
import { EventHandlersContext } from '../contexts/EventHandlersContext';
|
|
4
|
+
import { RadioGroupContext } from '../contexts/RadioGroupContext';
|
|
5
|
+
import { useBEM, useCombinedRef, useItemState } from '../hooks';
|
|
6
|
+
import { BaseProps, ClickEvent, EventHandler, Hoverable, MenuItemTypeProp, RenderProp } from '../types';
|
|
7
|
+
import { commonProps, Keys, menuClass, menuItemClass, mergeProps, RMEvent, safeCall, withHovering } from '../utils';
|
|
8
|
+
import { withHoveringResultProps } from '../utils/withHovering';
|
|
9
9
|
|
|
10
10
|
//
|
|
11
11
|
// MenuItem
|
|
@@ -33,7 +33,7 @@ export type MenuItemModifiers = Readonly<{
|
|
|
33
33
|
anchor: boolean;
|
|
34
34
|
}>;
|
|
35
35
|
|
|
36
|
-
export interface MenuItemProps extends Omit<BaseProps<MenuItemModifiers>,
|
|
36
|
+
export interface MenuItemProps extends Omit<BaseProps<MenuItemModifiers>, 'onClick'>, Hoverable {
|
|
37
37
|
/**
|
|
38
38
|
* Any value provided to this prop will be available in the event object of click events.
|
|
39
39
|
*
|
|
@@ -85,8 +85,8 @@ const MenuItemFr = ({
|
|
|
85
85
|
const { setHover, ...restStateProps } = useItemState(menuItemRef, menuItemRef, isHovering, isDisabled);
|
|
86
86
|
const eventHandlers = useContext(EventHandlersContext);
|
|
87
87
|
const radioGroup = useContext(RadioGroupContext);
|
|
88
|
-
const isRadio = type ===
|
|
89
|
-
const isCheckBox = type ===
|
|
88
|
+
const isRadio = type === 'radio';
|
|
89
|
+
const isCheckBox = type === 'checkbox';
|
|
90
90
|
const isAnchor = !!href && !isDisabled && !isRadio && !isCheckBox;
|
|
91
91
|
const isChecked = isRadio ? radioGroup.value === value : isCheckBox ? !!checked : false;
|
|
92
92
|
|
|
@@ -122,7 +122,7 @@ const MenuItemFr = ({
|
|
|
122
122
|
|
|
123
123
|
const handleKeyDown = (e: KeyboardEvent) => {
|
|
124
124
|
// if tab is allowed the handleKeyUp event can't process the tab
|
|
125
|
-
if (e.key ===
|
|
125
|
+
if (e.key === 'Tab') {
|
|
126
126
|
e.preventDefault();
|
|
127
127
|
e.stopPropagation();
|
|
128
128
|
}
|
|
@@ -176,8 +176,8 @@ const MenuItemFr = ({
|
|
|
176
176
|
// 2. Merged outer and local props
|
|
177
177
|
// 3. ref, className
|
|
178
178
|
const menuItemProps = {
|
|
179
|
-
role: isRadio ?
|
|
180
|
-
|
|
179
|
+
role: isRadio ? 'menuitemradio' : isCheckBox ? 'menuitemcheckbox' : 'menuitem',
|
|
180
|
+
'aria-checked': isRadio || isCheckBox ? isChecked : undefined,
|
|
181
181
|
...mergedProps,
|
|
182
182
|
...commonProps(isDisabled, isHovering),
|
|
183
183
|
ref: useCombinedRef(externalRef as Ref<any>, menuItemRef),
|
|
@@ -196,4 +196,4 @@ const MenuItemFr = ({
|
|
|
196
196
|
}
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
-
export const MenuItem = withHovering(
|
|
199
|
+
export const MenuItem = withHovering('MenuItem', MenuItemFr);
|