@linzjs/step-ag-grid 1.4.2 → 1.4.5

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.
Files changed (101) hide show
  1. package/dist/index.js +1610 -3048
  2. package/dist/index.js.map +1 -1
  3. package/dist/src/components/GridLoadableCell.d.ts +2 -0
  4. package/dist/src/components/gridForm/GridFormDropDown.d.ts +1 -1
  5. package/dist/src/components/gridForm/GridFormMultiSelect.d.ts +1 -1
  6. package/dist/src/components/gridPopoverEdit/GridPopoverMenu.d.ts +1 -1
  7. package/dist/src/react-menu3/components/ControlledMenu.d.ts +2 -0
  8. package/dist/src/react-menu3/components/FocusableItem.d.ts +1 -0
  9. package/dist/src/react-menu3/components/Menu.d.ts +2 -0
  10. package/dist/src/react-menu3/components/MenuButton.d.ts +1 -0
  11. package/dist/src/react-menu3/components/MenuDivider.d.ts +2 -0
  12. package/dist/src/react-menu3/components/MenuGroup.d.ts +2 -0
  13. package/dist/src/react-menu3/components/MenuHeader.d.ts +2 -0
  14. package/dist/src/react-menu3/components/MenuItem.d.ts +1 -0
  15. package/dist/src/react-menu3/components/MenuList.d.ts +30 -0
  16. package/dist/src/react-menu3/components/MenuRadioGroup.d.ts +2 -0
  17. package/dist/src/react-menu3/components/SubMenu.d.ts +1 -0
  18. package/dist/src/react-menu3/hooks/index.d.ts +9 -0
  19. package/dist/src/react-menu3/hooks/useBEM.d.ts +9 -0
  20. package/dist/src/react-menu3/hooks/useCombinedRef.d.ts +2 -0
  21. package/dist/src/react-menu3/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
  22. package/dist/src/react-menu3/hooks/useItemEffect.d.ts +2 -0
  23. package/dist/src/react-menu3/hooks/useItemState.d.ts +6 -0
  24. package/dist/src/react-menu3/hooks/useItems.d.ts +5 -0
  25. package/dist/src/react-menu3/hooks/useMenuChange.d.ts +1 -0
  26. package/dist/src/react-menu3/hooks/useMenuState.d.ts +11 -0
  27. package/dist/src/react-menu3/hooks/useMenuStateAndFocus.d.ts +10 -0
  28. package/dist/src/react-menu3/index.d.ts +11 -0
  29. package/dist/src/react-menu3/positionUtils/getPositionHelpers.d.ts +10 -0
  30. package/dist/src/react-menu3/positionUtils/index.d.ts +3 -0
  31. package/dist/src/react-menu3/positionUtils/placeArrowHorizontal.d.ts +7 -0
  32. package/dist/src/react-menu3/positionUtils/placeArrowVertical.d.ts +7 -0
  33. package/dist/src/react-menu3/positionUtils/placeLeftorRight.d.ts +21 -0
  34. package/dist/src/react-menu3/positionUtils/placeToporBottom.d.ts +21 -0
  35. package/dist/src/react-menu3/positionUtils/positionContextMenu.d.ts +8 -0
  36. package/dist/src/react-menu3/positionUtils/positionMenu.d.ts +21 -0
  37. package/dist/src/react-menu3/style-utils/index.d.ts +11 -0
  38. package/dist/src/react-menu3/utils/constants.d.ts +50 -0
  39. package/dist/src/react-menu3/utils/index.d.ts +4 -0
  40. package/dist/src/react-menu3/utils/propTypes.d.ts +55 -0
  41. package/dist/src/react-menu3/utils/utils.d.ts +27 -0
  42. package/dist/src/react-menu3/utils/withHovering.d.ts +1 -0
  43. package/dist/step-ag-grid.esm.js +1521 -2958
  44. package/dist/step-ag-grid.esm.js.map +1 -1
  45. package/package.json +18 -9
  46. package/src/components/GridLoadableCell.scss +4 -0
  47. package/src/components/GridLoadableCell.tsx +5 -1
  48. package/src/components/GridPopoverHook.tsx +4 -50
  49. package/src/components/gridForm/GridFormDropDown.tsx +3 -3
  50. package/src/components/gridForm/GridFormMultiSelect.tsx +4 -4
  51. package/src/components/gridForm/GridFormPopoutMenu.tsx +1 -1
  52. package/src/components/gridPopoverEdit/GridPopoverMenu.scss +6 -2
  53. package/src/components/gridPopoverEdit/GridPopoverMenu.tsx +1 -1
  54. package/src/components/gridRender/GridRenderPopoutMenuCell.tsx +7 -9
  55. package/src/react-menu3/components/ControlledMenu.tsx +260 -0
  56. package/src/react-menu3/components/FocusableItem.tsx +70 -0
  57. package/src/react-menu3/components/Menu.tsx +96 -0
  58. package/src/react-menu3/components/MenuButton.tsx +33 -0
  59. package/src/react-menu3/components/MenuDivider.tsx +21 -0
  60. package/src/react-menu3/components/MenuGroup.tsx +38 -0
  61. package/src/react-menu3/components/MenuHeader.tsx +21 -0
  62. package/src/react-menu3/components/MenuItem.tsx +130 -0
  63. package/src/react-menu3/components/MenuList.tsx +434 -0
  64. package/src/react-menu3/components/MenuRadioGroup.tsx +33 -0
  65. package/src/react-menu3/components/SubMenu.tsx +243 -0
  66. package/src/react-menu3/hooks/index.ts +9 -0
  67. package/src/react-menu3/hooks/useBEM.ts +32 -0
  68. package/src/react-menu3/hooks/useCombinedRef.ts +30 -0
  69. package/src/react-menu3/hooks/useIsomorphicLayoutEffect.ts +15 -0
  70. package/src/react-menu3/hooks/useItemEffect.ts +22 -0
  71. package/src/react-menu3/hooks/useItemState.ts +63 -0
  72. package/src/react-menu3/hooks/useItems.ts +110 -0
  73. package/src/react-menu3/hooks/useMenuChange.ts +12 -0
  74. package/src/react-menu3/hooks/useMenuState.ts +24 -0
  75. package/src/react-menu3/hooks/useMenuStateAndFocus.ts +15 -0
  76. package/src/react-menu3/index.d.ts +682 -0
  77. package/src/react-menu3/index.ts +11 -0
  78. package/src/react-menu3/positionUtils/getPositionHelpers.ts +76 -0
  79. package/src/react-menu3/positionUtils/index.ts +3 -0
  80. package/src/react-menu3/positionUtils/placeArrowHorizontal.ts +8 -0
  81. package/src/react-menu3/positionUtils/placeArrowVertical.ts +8 -0
  82. package/src/react-menu3/positionUtils/placeLeftorRight.ts +76 -0
  83. package/src/react-menu3/positionUtils/placeToporBottom.ts +77 -0
  84. package/src/react-menu3/positionUtils/positionContextMenu.ts +49 -0
  85. package/src/react-menu3/positionUtils/positionMenu.ts +73 -0
  86. package/src/react-menu3/style-utils/index.ts +80 -0
  87. package/src/react-menu3/style-utils.d.ts +110 -0
  88. package/src/react-menu3/styles/_mixins.scss +11 -0
  89. package/src/react-menu3/styles/_var.scss +20 -0
  90. package/src/react-menu3/styles/core.scss +80 -0
  91. package/src/react-menu3/styles/index.scss +70 -0
  92. package/src/react-menu3/styles/theme-dark.scss +30 -0
  93. package/src/react-menu3/styles/transitions/slide.scss +47 -0
  94. package/src/react-menu3/utils/constants.ts +63 -0
  95. package/src/react-menu3/utils/index.ts +4 -0
  96. package/src/react-menu3/utils/propTypes.ts +61 -0
  97. package/src/react-menu3/utils/utils.ts +71 -0
  98. package/src/react-menu3/utils/withHovering.tsx +22 -0
  99. package/src/stories/components/GridPopoutEditDropDown.stories.tsx +44 -3
  100. package/src/utils/bearing.ts +7 -4
  101. package/src/utils/util.ts +2 -1
@@ -0,0 +1,96 @@
1
+ // @ts-nocheck
2
+ import { cloneElement, Fragment, forwardRef, useRef, useCallback, useImperativeHandle } from "react";
3
+ import { element, func, oneOfType } from "prop-types";
4
+ import { ControlledMenu } from "./ControlledMenu";
5
+ import { useMenuChange, useMenuStateAndFocus, useCombinedRef } from "../hooks";
6
+ import {
7
+ getName,
8
+ mergeProps,
9
+ safeCall,
10
+ isMenuOpen,
11
+ uncontrolledMenuPropTypes,
12
+ rootMenuPropTypes,
13
+ Keys,
14
+ FocusPositions,
15
+ } from "../utils";
16
+
17
+ export const Menu = forwardRef(function Menu(
18
+ { "aria-label": ariaLabel, captureFocus: _, menuButton, instanceRef, onMenuChange, ...restProps },
19
+ externalRef,
20
+ ) {
21
+ const [stateProps, toggleMenu, openMenu] = useMenuStateAndFocus(restProps);
22
+ const isOpen = isMenuOpen(stateProps.state);
23
+ const skipOpen = useRef(false);
24
+ const buttonRef = useRef(null);
25
+
26
+ const handleClose = useCallback(
27
+ (e) => {
28
+ toggleMenu(false);
29
+ if (e.key) buttonRef.current.focus();
30
+ },
31
+ [toggleMenu],
32
+ );
33
+
34
+ const onClick = (e) => {
35
+ if (skipOpen.current) return;
36
+ // Focus (hover) the first menu item when onClick event is trigger by keyboard
37
+ openMenu(e.detail === 0 ? FocusPositions.FIRST : undefined);
38
+ };
39
+
40
+ const onKeyDown = (e) => {
41
+ switch (e.key) {
42
+ case Keys.UP:
43
+ openMenu(FocusPositions.LAST);
44
+ break;
45
+
46
+ case Keys.DOWN:
47
+ openMenu(FocusPositions.FIRST);
48
+ break;
49
+
50
+ default:
51
+ return;
52
+ }
53
+
54
+ e.preventDefault();
55
+ };
56
+
57
+ const button = safeCall(menuButton, { open: isOpen });
58
+ if (!button || !button.type) throw new Error("Menu requires a menuButton prop.");
59
+
60
+ const buttonProps = {
61
+ ref: useCombinedRef(button.ref, buttonRef),
62
+ ...mergeProps({ onClick, onKeyDown }, button.props),
63
+ };
64
+ if (getName(button.type) === "MenuButton") {
65
+ buttonProps.isOpen = isOpen;
66
+ }
67
+ const renderButton = cloneElement(button, buttonProps);
68
+
69
+ useMenuChange(onMenuChange, isOpen);
70
+
71
+ useImperativeHandle(instanceRef, () => ({
72
+ openMenu,
73
+ closeMenu: () => toggleMenu(false),
74
+ }));
75
+
76
+ return (
77
+ <Fragment>
78
+ {renderButton}
79
+ <ControlledMenu
80
+ {...restProps}
81
+ {...stateProps}
82
+ aria-label={ariaLabel || (typeof button.props.children === "string" ? button.props.children : "Menu")}
83
+ anchorRef={buttonRef}
84
+ ref={externalRef}
85
+ onClose={handleClose}
86
+ skipOpen={skipOpen}
87
+ />
88
+ </Fragment>
89
+ );
90
+ });
91
+
92
+ Menu.propTypes = {
93
+ ...rootMenuPropTypes,
94
+ ...uncontrolledMenuPropTypes,
95
+ menuButton: oneOfType([element, func]).isRequired,
96
+ };
@@ -0,0 +1,33 @@
1
+ // @ts-nocheck
2
+ import { forwardRef, useMemo } from "react";
3
+ import { bool } from "prop-types";
4
+ import { useBEM } from "../hooks";
5
+ import { defineName, menuButtonClass, stylePropTypes } from "../utils";
6
+
7
+ export const MenuButton = defineName(
8
+ "MenuButton",
9
+ forwardRef(function MenuButton({ className, isOpen, disabled, children, ...restProps }, ref) {
10
+ const modifiers = useMemo(() => ({ open: isOpen }), [isOpen]);
11
+
12
+ return (
13
+ <button
14
+ aria-haspopup
15
+ aria-expanded={isOpen}
16
+ aria-disabled={disabled || undefined}
17
+ type="button"
18
+ disabled={disabled}
19
+ {...restProps}
20
+ ref={ref}
21
+ className={useBEM({ block: menuButtonClass, modifiers, className })}
22
+ >
23
+ {children}
24
+ </button>
25
+ );
26
+ }),
27
+ );
28
+
29
+ MenuButton.propTypes = {
30
+ ...stylePropTypes(),
31
+ isOpen: bool,
32
+ disabled: bool,
33
+ };
@@ -0,0 +1,21 @@
1
+ // @ts-nocheck
2
+ import { memo, forwardRef } from "react";
3
+ import { useBEM } from "../hooks";
4
+ import { menuClass, menuDividerClass, stylePropTypes } from "../utils";
5
+
6
+ export const MenuDivider = memo(
7
+ forwardRef(function MenuDivider({ className, ...restProps }, externalRef) {
8
+ return (
9
+ <li
10
+ role="separator"
11
+ {...restProps}
12
+ ref={externalRef}
13
+ className={useBEM({ block: menuClass, element: menuDividerClass, className })}
14
+ />
15
+ );
16
+ }),
17
+ );
18
+
19
+ MenuDivider.propTypes = {
20
+ ...stylePropTypes(),
21
+ };
@@ -0,0 +1,38 @@
1
+ // @ts-nocheck
2
+ import { forwardRef, useContext, useRef, useState } from "react";
3
+ import { bool } from "prop-types";
4
+ import { useBEM, useLayoutEffect, useCombinedRef } from "../hooks";
5
+ import { menuClass, menuGroupClass, stylePropTypes, MenuListContext } from "../utils";
6
+
7
+ export const MenuGroup = forwardRef(function MenuGroup({ className, style, takeOverflow, ...restProps }, externalRef) {
8
+ const ref = useRef(null);
9
+ const [overflowStyle, setOverflowStyle] = useState();
10
+ const { overflow, overflowAmt } = useContext(MenuListContext);
11
+
12
+ useLayoutEffect(() => {
13
+ let maxHeight;
14
+ if (takeOverflow && overflowAmt >= 0) {
15
+ maxHeight = ref.current.getBoundingClientRect().height - overflowAmt;
16
+ if (maxHeight < 0) maxHeight = 0;
17
+ }
18
+ setOverflowStyle(maxHeight >= 0 ? { maxHeight, overflow } : undefined);
19
+ }, [takeOverflow, overflow, overflowAmt]);
20
+
21
+ useLayoutEffect(() => {
22
+ if (overflowStyle) ref.current.scrollTop = 0;
23
+ }, [overflowStyle]);
24
+
25
+ return (
26
+ <div
27
+ {...restProps}
28
+ ref={useCombinedRef(externalRef, ref)}
29
+ className={useBEM({ block: menuClass, element: menuGroupClass, className })}
30
+ style={{ ...style, ...overflowStyle }}
31
+ />
32
+ );
33
+ });
34
+
35
+ MenuGroup.propTypes = {
36
+ ...stylePropTypes(),
37
+ takeOverflow: bool,
38
+ };
@@ -0,0 +1,21 @@
1
+ // @ts-nocheck
2
+ import { memo, forwardRef } from "react";
3
+ import { useBEM } from "../hooks";
4
+ import { menuClass, menuHeaderClass, stylePropTypes } from "../utils";
5
+
6
+ export const MenuHeader = memo(
7
+ forwardRef(function MenuHeader({ className, ...restProps }, externalRef) {
8
+ return (
9
+ <li
10
+ role="presentation"
11
+ {...restProps}
12
+ ref={externalRef}
13
+ className={useBEM({ block: menuClass, element: menuHeaderClass, className })}
14
+ />
15
+ );
16
+ }),
17
+ );
18
+
19
+ MenuHeader.propTypes = {
20
+ ...stylePropTypes(),
21
+ };
@@ -0,0 +1,130 @@
1
+ // @ts-nocheck
2
+ import { useContext, useMemo } from "react";
3
+ import { any, string, bool, func, node, oneOf, oneOfType } from "prop-types";
4
+ import { useBEM, useItemState, useCombinedRef } from "../hooks";
5
+ import {
6
+ mergeProps,
7
+ commonProps,
8
+ safeCall,
9
+ stylePropTypes,
10
+ menuClass,
11
+ menuItemClass,
12
+ withHovering,
13
+ EventHandlersContext,
14
+ RadioGroupContext,
15
+ Keys,
16
+ } from "../utils";
17
+
18
+ export const MenuItem = withHovering(
19
+ "MenuItem",
20
+ function MenuItem({
21
+ className,
22
+ value,
23
+ href,
24
+ type,
25
+ checked,
26
+ disabled,
27
+ children,
28
+ onClick,
29
+ isHovering,
30
+ itemRef,
31
+ externalRef,
32
+ ...restProps
33
+ }) {
34
+ const isDisabled = !!disabled;
35
+ const { setHover, ...restStateProps } = useItemState(itemRef, itemRef, isHovering, isDisabled);
36
+ const eventHandlers = useContext(EventHandlersContext);
37
+ const radioGroup = useContext(RadioGroupContext);
38
+ const isRadio = type === "radio";
39
+ const isCheckBox = type === "checkbox";
40
+ const isAnchor = !!href && !isDisabled && !isRadio && !isCheckBox;
41
+ const isChecked = isRadio ? radioGroup.value === value : isCheckBox ? !!checked : false;
42
+
43
+ const handleClick = (e) => {
44
+ if (isDisabled) {
45
+ e.stopPropagation();
46
+ e.preventDefault();
47
+ return;
48
+ }
49
+
50
+ const event = { value, syntheticEvent: e };
51
+ if (e.key !== undefined) event.key = e.key;
52
+ if (isCheckBox) event.checked = !isChecked;
53
+ if (isRadio) event.name = radioGroup.name;
54
+ safeCall(onClick, event);
55
+ if (isRadio) safeCall(radioGroup.onRadioChange, event);
56
+ eventHandlers.handleClick(event, isCheckBox || isRadio);
57
+ };
58
+
59
+ const handleKeyDown = (e) => {
60
+ if (!isHovering) return;
61
+
62
+ switch (e.key) {
63
+ case Keys.ENTER:
64
+ case Keys.SPACE:
65
+ if (isAnchor) {
66
+ itemRef.current.click();
67
+ } else {
68
+ handleClick(e);
69
+ }
70
+ break;
71
+ }
72
+ };
73
+
74
+ const modifiers = useMemo(
75
+ () => ({
76
+ type,
77
+ disabled: isDisabled,
78
+ hover: isHovering,
79
+ checked: isChecked,
80
+ anchor: isAnchor,
81
+ }),
82
+ [type, isDisabled, isHovering, isChecked, isAnchor],
83
+ );
84
+
85
+ const mergedProps = mergeProps(
86
+ {
87
+ ...restStateProps,
88
+ onPointerDown: setHover,
89
+ onKeyDown: handleKeyDown,
90
+ onClick: handleClick,
91
+ },
92
+ restProps,
93
+ );
94
+
95
+ // Order of props overriding (same in all components):
96
+ // 1. Preset props adhering to WAI-ARIA Authoring Practices.
97
+ // 2. Merged outer and local props
98
+ // 3. ref, className
99
+ const menuItemProps = {
100
+ role: isRadio ? "menuitemradio" : isCheckBox ? "menuitemcheckbox" : "menuitem",
101
+ "aria-checked": isRadio || isCheckBox ? isChecked : undefined,
102
+ ...mergedProps,
103
+ ...commonProps(isDisabled, isHovering),
104
+ ref: useCombinedRef(externalRef, itemRef),
105
+ className: useBEM({ block: menuClass, element: menuItemClass, modifiers, className }),
106
+ children: useMemo(() => safeCall(children, modifiers), [children, modifiers]),
107
+ };
108
+
109
+ if (isAnchor) {
110
+ return (
111
+ <li role="presentation">
112
+ <a href={href} {...menuItemProps} />
113
+ </li>
114
+ );
115
+ } else {
116
+ return <li {...menuItemProps} />;
117
+ }
118
+ },
119
+ );
120
+
121
+ MenuItem.propTypes = {
122
+ ...stylePropTypes(),
123
+ value: any,
124
+ href: string,
125
+ type: oneOf(["checkbox", "radio"]),
126
+ checked: bool,
127
+ disabled: bool,
128
+ children: oneOfType([node, func]),
129
+ onClick: func,
130
+ };