@commercetools-uikit/dropdown-menu 19.1.0 → 19.3.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/README.md +1 -0
- package/dist/commercetools-uikit-dropdown-menu.cjs.dev.js +67 -28
- package/dist/commercetools-uikit-dropdown-menu.cjs.prod.js +62 -27
- package/dist/commercetools-uikit-dropdown-menu.esm.js +56 -17
- package/dist/declarations/src/dropdown-menu.d.ts +1 -0
- package/dist/declarations/src/menu/dropdown-menu-menu.d.ts +2 -0
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -90,6 +90,7 @@ export const CustomDropdownExample = () => {
|
|
|
90
90
|
| Props | Type | Required | Default | Description |
|
|
91
91
|
| -------------------------- | ----------------------------------------------------- | :------: | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
92
92
|
| `menuPosition` | `union`<br/>Possible values:<br/>`'left' , 'right'` | | `'left'` | The position of the menu relative to the trigger element. |
|
|
93
|
+
| `menuMaxHeight` | `number` | | | The maximum height for the menu in pixels.
By default, the max height will be the available space between the trigger element and the bottom of the viewport. |
|
|
93
94
|
| `triggerElement` | `ReactElement` | ✅ | | The element that triggers the dropdown. |
|
|
94
95
|
| `menuType` | `union`<br/>Possible values:<br/>`'default' , 'list'` | | `'default'` | The type of the menu.
The 'default' type just renders a dropdown container but the 'list' type is intended to be used with the DropdownMenu.ListMenuItem component. |
|
|
95
96
|
| `menuHorizontalConstraint` | `TMaxProp` | | `'auto'` | The horizontal constraint of the menu. |
|
|
@@ -5,10 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
6
6
|
var _styled = require('@emotion/styled/base');
|
|
7
7
|
var _pt = require('prop-types');
|
|
8
|
-
var
|
|
8
|
+
var react = require('react');
|
|
9
9
|
var hooks = require('@commercetools-uikit/hooks');
|
|
10
10
|
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
11
|
-
var
|
|
11
|
+
var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
|
|
12
|
+
var react$1 = require('@emotion/react');
|
|
12
13
|
var designSystem = require('@commercetools-uikit/design-system');
|
|
13
14
|
var Constraints = require('@commercetools-uikit/constraints');
|
|
14
15
|
var SpacingsStack = require('@commercetools-uikit/spacings-stack');
|
|
@@ -18,17 +19,17 @@ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e };
|
|
|
18
19
|
|
|
19
20
|
var _styled__default = /*#__PURE__*/_interopDefault(_styled);
|
|
20
21
|
var _pt__default = /*#__PURE__*/_interopDefault(_pt);
|
|
21
|
-
var
|
|
22
|
+
var _concatInstanceProperty__default = /*#__PURE__*/_interopDefault(_concatInstanceProperty);
|
|
22
23
|
var Constraints__default = /*#__PURE__*/_interopDefault(Constraints);
|
|
23
24
|
var SpacingsStack__default = /*#__PURE__*/_interopDefault(SpacingsStack);
|
|
24
25
|
var AccessibleButton__default = /*#__PURE__*/_interopDefault(AccessibleButton);
|
|
25
26
|
|
|
26
|
-
const DropdownMenuContext = /*#__PURE__*/
|
|
27
|
+
const DropdownMenuContext = /*#__PURE__*/react.createContext({
|
|
27
28
|
isOpen: false,
|
|
28
29
|
toggle: () => {}
|
|
29
30
|
});
|
|
30
31
|
function useDropdownMenuContext() {
|
|
31
|
-
const context =
|
|
32
|
+
const context = react.useContext(DropdownMenuContext);
|
|
32
33
|
if (!context) {
|
|
33
34
|
throw new Error('[ui-kit] DropdownMenu context can only be used in DropdownMenu children components.');
|
|
34
35
|
}
|
|
@@ -38,7 +39,7 @@ function useDropdownMenuContext() {
|
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
const DropDownTrigger = /*#__PURE__*/
|
|
42
|
+
const DropDownTrigger = /*#__PURE__*/react.forwardRef((props, ref) => {
|
|
42
43
|
return jsxRuntime.jsx("div", {
|
|
43
44
|
onClick: props.onClick,
|
|
44
45
|
ref: ref,
|
|
@@ -48,20 +49,24 @@ const DropDownTrigger = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
48
49
|
DropDownTrigger.displayName = 'DropDownTrigger';
|
|
49
50
|
var DropdownTrigger = DropDownTrigger;
|
|
50
51
|
|
|
52
|
+
const boxShadowBottomSize = '5px';
|
|
53
|
+
const marginTop = designSystem.designTokens.spacing20;
|
|
51
54
|
function getDropdownMenuBaseStyles(params) {
|
|
52
|
-
return /*#__PURE__*/react.css("background-color:", designSystem.designTokens.colorSurface, ";border:1px solid ", designSystem.designTokens.colorSurface, ";border-radius:", designSystem.designTokens.borderRadius4, ";box-shadow:0 2px
|
|
55
|
+
return /*#__PURE__*/react$1.css("background-color:", designSystem.designTokens.colorSurface, ";border:1px solid ", designSystem.designTokens.colorSurface, ";border-radius:", designSystem.designTokens.borderRadius4, ";box-shadow:0 2px ", boxShadowBottomSize, " 0px rgba(0, 0, 0, 0.15);display:", params.isOpen ? 'block' : 'none', ";margin-top:", marginTop, ";max-width:", Constraints__default["default"].getMaxPropTokenValue(params.horizontalConstraint), ";overflow-y:auto;position:fixed;width:", params.horizontalConstraint === 'auto' ? 'auto' : '100%', ";z-index:5;" + (process.env.NODE_ENV === "production" ? "" : ";label:getDropdownMenuBaseStyles;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUtbWVudS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JZIiwiZmlsZSI6ImRyb3Bkb3duLW1lbnUtbWVudS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDU1NQcm9wZXJ0aWVzLFxuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGRlc2lnblRva2VucyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IENvbnN0cmFpbnRzLCB7IHR5cGUgVE1heFByb3AgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9jb25zdHJhaW50cyc7XG5pbXBvcnQgU3BhY2luZ3NTdGFjayBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9zcGFjaW5ncy1zdGFjayc7XG5cbi8vIFdlIGRlY2xhcmUgdGhpcyBzdHlsZSBwcm9wZXJ0aWVzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZW0gYm90aCBmb3IgaW5pdGlhbCBjb21wb25lbnQgc3R5bGluZ1xuLy8gYnV0IGFsc28gZm9yIGNhbGN1bGF0aW5nIHRoZSBkZWZhdWx0IG1heCBoZWlnaHQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgc28gd2UgbWFrZSBzdXJlIGl0IGZpdHNcbi8vIHdpdGhpbiB0aGUgdmlld3BvcnQuXG5jb25zdCBib3hTaGFkb3dCb3R0b21TaXplID0gJzVweCc7XG5jb25zdCBtYXJnaW5Ub3AgPSBkZXNpZ25Ub2tlbnMuc3BhY2luZzIwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJvcGRvd25NZW51QmFzZVN0eWxlcyhwYXJhbXM6IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG59KSB7XG4gIHJldHVybiBjc3NgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Rlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4ICR7Ym94U2hhZG93Qm90dG9tU2l6ZX0gMHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgZGlzcGxheTogJHtwYXJhbXMuaXNPcGVuID8gJ2Jsb2NrJyA6ICdub25lJ307XG4gICAgbWFyZ2luLXRvcDogJHttYXJnaW5Ub3B9O1xuICAgIG1heC13aWR0aDogJHtDb25zdHJhaW50cy5nZXRNYXhQcm9wVG9rZW5WYWx1ZShwYXJhbXMuaG9yaXpvbnRhbENvbnN0cmFpbnQpfTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB3aWR0aDogJHtwYXJhbXMuaG9yaXpvbnRhbENvbnN0cmFpbnQgPT09ICdhdXRvJyA/ICdhdXRvJyA6ICcxMDAlJ307XG4gICAgei1pbmRleDogNTtcbiAgYDtcbn1cblxudHlwZSBURHJvcGRvd25CYXNlTWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjdXN0b21TdHlsZXM/OiBDU1NQcm9wZXJ0aWVzO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICBtZW51TWF4SGVpZ2h0PzogbnVtYmVyO1xuICB0cmlnZ2VyRWxlbWVudFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50Pjtcbn07XG5mdW5jdGlvbiBEcm9wZG93bkJhc2VNZW51KHByb3BzOiBURHJvcGRvd25CYXNlTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudSB3aGVuIGl0IGlzIG9wZW5cbiAgICBpZiAocHJvcHMuaXNPcGVuICYmIHByb3BzLnRyaWdnZXJFbGVtZW50UmVmLmN1cnJlbnQgJiYgbWVudVJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzID1cbiAgICAgICAgcHJvcHMudHJpZ2dlckVsZW1lbnRSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IG1lbnVFbGVtZW50Q29vcmRpbmF0ZXMgPSBtZW51UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgdHJpZ2dlckVsZW1lbnRDb29yZGluYXRlcy50b3AgKyB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLmhlaWdodFxuICAgICAgfXB4YDtcbiAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgcHJvcHMubWVudVBvc2l0aW9uID09PSAnbGVmdCdcbiAgICAgICAgICA/IGAke3RyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMubGVmdH1weGBcbiAgICAgICAgICA6IGAke1xuICAgICAgICAgICAgICB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLmxlZnQgK1xuICAgICAgICAgICAgICB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLndpZHRoIC1cbiAgICAgICAgICAgICAgbWVudUVsZW1lbnRDb29yZGluYXRlcy53aWR0aFxuICAgICAgICAgICAgfXB4YDtcbiAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5tYXhIZWlnaHQgPSBwcm9wcy5tZW51TWF4SGVpZ2h0XG4gICAgICAgID8gYCR7cHJvcHMubWVudU1heEhlaWdodH1weGBcbiAgICAgICAgOiBgY2FsYygke1xuICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0IC1cbiAgICAgICAgICAgICh0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLnRvcCArIHRyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMuaGVpZ2h0KVxuICAgICAgICAgIH1weCAtICR7bWFyZ2luVG9wfSAtICR7Ym94U2hhZG93Qm90dG9tU2l6ZX0pYDtcbiAgICB9XG4gIH0sIFtcbiAgICBwcm9wcy5pc09wZW4sXG4gICAgcHJvcHMubWVudVBvc2l0aW9uLFxuICAgIHByb3BzLnRyaWdnZXJFbGVtZW50UmVmLFxuICAgIHByb3BzLm1lbnVNYXhIZWlnaHQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtnZXREcm9wZG93bk1lbnVCYXNlU3R5bGVzKHByb3BzKX1cbiAgICAgIHN0eWxlPXtwcm9wcy5jdXN0b21TdHlsZXN9XG4gICAgICByZWY9e21lbnVSZWZ9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgdHlwZSBURHJvcGRvd25Db250ZW50TWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG4gIG1lbnVQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICB0cmlnZ2VyRWxlbWVudFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50Pjtcbn07XG5leHBvcnQgY29uc3QgRHJvcGRvd25Db250ZW50TWVudSA9IChwcm9wczogVERyb3Bkb3duQ29udGVudE1lbnVQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxEcm9wZG93bkJhc2VNZW51XG4gICAgICBjdXN0b21TdHlsZXM9e3tcbiAgICAgICAgcGFkZGluZzogZGVzaWduVG9rZW5zLnNwYWNpbmczMCxcbiAgICAgIH19XG4gICAgICBob3Jpem9udGFsQ29uc3RyYWludD17cHJvcHMuaG9yaXpvbnRhbENvbnN0cmFpbnR9XG4gICAgICBpc09wZW49e3Byb3BzLmlzT3Blbn1cbiAgICAgIG1lbnVQb3NpdGlvbj17cHJvcHMubWVudVBvc2l0aW9ufVxuICAgICAgbWVudU1heEhlaWdodD17cHJvcHMubWVudU1heEhlaWdodH1cbiAgICAgIHRyaWdnZXJFbGVtZW50UmVmPXtwcm9wcy50cmlnZ2VyRWxlbWVudFJlZn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9Ecm9wZG93bkJhc2VNZW51PlxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTGlzdE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaG9yaXpvbnRhbENvbnN0cmFpbnQ6IFRNYXhQcm9wO1xuICBtZW51UG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCc7XG4gIG1lbnVNYXhIZWlnaHQ/OiBudW1iZXI7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgdHJpZ2dlckVsZW1lbnRSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG59O1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duTGlzdE1lbnUgPSAocHJvcHM6IFREcm9wZG93bkxpc3RNZW51UHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25CYXNlTWVudVxuICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9e3Byb3BzLmhvcml6b250YWxDb25zdHJhaW50fVxuICAgICAgaXNPcGVuPXtwcm9wcy5pc09wZW59XG4gICAgICBtZW51UG9zaXRpb249e3Byb3BzLm1lbnVQb3NpdGlvbn1cbiAgICAgIG1lbnVNYXhIZWlnaHQ9e3Byb3BzLm1lbnVNYXhIZWlnaHR9XG4gICAgICB0cmlnZ2VyRWxlbWVudFJlZj17cHJvcHMudHJpZ2dlckVsZW1lbnRSZWZ9XG4gICAgPlxuICAgICAgPFNwYWNpbmdzU3RhY2sgc2NhbGU9XCJ4c1wiPntwcm9wcy5jaGlsZHJlbn08L1NwYWNpbmdzU3RhY2s+XG4gICAgPC9Ecm9wZG93bkJhc2VNZW51PlxuICApO1xufTtcbiJdfQ== */");
|
|
53
56
|
}
|
|
54
57
|
function DropdownBaseMenu(props) {
|
|
55
|
-
const menuRef =
|
|
56
|
-
|
|
58
|
+
const menuRef = react.useRef(null);
|
|
59
|
+
react.useLayoutEffect(() => {
|
|
57
60
|
// Update the position of the menu when it is open
|
|
58
61
|
if (props.isOpen && props.triggerElementRef.current && menuRef.current) {
|
|
62
|
+
var _context, _context2;
|
|
59
63
|
const triggerElementCoordinates = props.triggerElementRef.current.getBoundingClientRect();
|
|
60
64
|
const menuElementCoordinates = menuRef.current.getBoundingClientRect();
|
|
61
65
|
menuRef.current.style.top = "".concat(triggerElementCoordinates.top + triggerElementCoordinates.height, "px");
|
|
62
66
|
menuRef.current.style.left = props.menuPosition === 'left' ? "".concat(triggerElementCoordinates.left, "px") : "".concat(triggerElementCoordinates.left + triggerElementCoordinates.width - menuElementCoordinates.width, "px");
|
|
67
|
+
menuRef.current.style.maxHeight = props.menuMaxHeight ? "".concat(props.menuMaxHeight, "px") : _concatInstanceProperty__default["default"](_context = _concatInstanceProperty__default["default"](_context2 = "calc(".concat(window.innerHeight - (triggerElementCoordinates.top + triggerElementCoordinates.height), "px - ")).call(_context2, marginTop, " - ")).call(_context, boxShadowBottomSize, ")");
|
|
63
68
|
}
|
|
64
|
-
}, [props.isOpen, props.menuPosition, props.triggerElementRef]);
|
|
69
|
+
}, [props.isOpen, props.menuPosition, props.triggerElementRef, props.menuMaxHeight]);
|
|
65
70
|
return jsxRuntime.jsx("div", {
|
|
66
71
|
css: getDropdownMenuBaseStyles(props),
|
|
67
72
|
style: props.customStyles,
|
|
@@ -75,6 +80,7 @@ DropdownBaseMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
75
80
|
horizontalConstraint: _pt__default["default"].any.isRequired,
|
|
76
81
|
isOpen: _pt__default["default"].bool.isRequired,
|
|
77
82
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']).isRequired,
|
|
83
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
78
84
|
triggerElementRef: _pt__default["default"].any.isRequired
|
|
79
85
|
} : {};
|
|
80
86
|
const DropdownContentMenu = props => {
|
|
@@ -85,6 +91,7 @@ const DropdownContentMenu = props => {
|
|
|
85
91
|
horizontalConstraint: props.horizontalConstraint,
|
|
86
92
|
isOpen: props.isOpen,
|
|
87
93
|
menuPosition: props.menuPosition,
|
|
94
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
88
95
|
triggerElementRef: props.triggerElementRef,
|
|
89
96
|
children: props.children
|
|
90
97
|
});
|
|
@@ -93,6 +100,7 @@ DropdownContentMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
93
100
|
children: _pt__default["default"].node.isRequired,
|
|
94
101
|
horizontalConstraint: _pt__default["default"].any.isRequired,
|
|
95
102
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']).isRequired,
|
|
103
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
96
104
|
isOpen: _pt__default["default"].bool.isRequired,
|
|
97
105
|
triggerElementRef: _pt__default["default"].any.isRequired
|
|
98
106
|
} : {};
|
|
@@ -101,6 +109,7 @@ const DropdownListMenu = props => {
|
|
|
101
109
|
horizontalConstraint: props.horizontalConstraint,
|
|
102
110
|
isOpen: props.isOpen,
|
|
103
111
|
menuPosition: props.menuPosition,
|
|
112
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
104
113
|
triggerElementRef: props.triggerElementRef,
|
|
105
114
|
children: jsxRuntime.jsx(SpacingsStack__default["default"], {
|
|
106
115
|
scale: "xs",
|
|
@@ -112,12 +121,13 @@ DropdownListMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
112
121
|
children: _pt__default["default"].node.isRequired,
|
|
113
122
|
horizontalConstraint: _pt__default["default"].any.isRequired,
|
|
114
123
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']).isRequired,
|
|
124
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
115
125
|
isOpen: _pt__default["default"].bool.isRequired,
|
|
116
126
|
triggerElementRef: _pt__default["default"].any.isRequired
|
|
117
127
|
} : {};
|
|
118
128
|
|
|
119
129
|
function getDropdownListMenuItemStyles(props) {
|
|
120
|
-
return [/*#__PURE__*/react.css("display:block;text-align:left;text-wrap:wrap;width:100%;padding:", designSystem.designTokens.spacing20, " ", designSystem.designTokens.spacing30, ";background-color:", designSystem.designTokens.colorSurface, ";&:first-of-type{border-radius:", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, " 0 0;}&:last-of-type{border-radius:0 0 ", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, ";}&:hover{background-color:", designSystem.designTokens.colorPrimary98, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:getDropdownListMenuItemStyles;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUtbGlzdC1pdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPTyIsImZpbGUiOiJkcm9wZG93bi1tZW51LWxpc3QtaXRlbS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9hY2Nlc3NpYmxlLWJ1dHRvbic7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZURyb3Bkb3duTWVudUNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2Ryb3Bkb3duLW1lbnUtY29udGV4dCc7XG5cbmZ1bmN0aW9uIGdldERyb3Bkb3duTGlzdE1lbnVJdGVtU3R5bGVzKHByb3BzOiBURHJvcGRvd25MaXN0TWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gW1xuICAgIGNzc2BcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHRleHQtd3JhcDogd3JhcDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZzogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAke2Rlc2lnblRva2Vucy5zcGFjaW5nMzB9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czZ9XG4gICAgICAgICAgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNn0gMCAwO1xuICAgICAgfVxuICAgICAgJjpsYXN0LW9mLXR5cGUge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNn1cbiAgICAgICAgICAke2Rlc2lnblRva2Vucy5ib3JkZXJSYWRpdXM2fTtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Rlc2lnblRva2Vucy5jb2xvclByaW1hcnk5OH07XG4gICAgICB9XG4gICAgYCxcbiAgICBwcm9wcy5pc0Rpc2FibGVkICYmXG4gICAgICBjc3NgXG4gICAgICAgIGNvbG9yOiAke2Rlc2lnblRva2Vucy5jb2xvck5ldXRyYWx9O1xuICAgICAgYCxcbiAgXTtcbn1cblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTGlzdE1lbnVJdGVtUHJvcHMgPSB7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW46IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyb3Bkb3duTGlzdE1lbnVJdGVtKHByb3BzOiBURHJvcGRvd25MaXN0TWVudUl0ZW1Qcm9wcykge1xuICBjb25zdCB7IHRvZ2dsZSB9ID0gdXNlRHJvcGRvd25NZW51Q29udGV4dCgpO1xuICByZXR1cm4gKFxuICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICBsYWJlbD17cHJvcHMuY2hpbGRyZW59XG4gICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgIHRvZ2dsZSgpO1xuICAgICAgICBwcm9wcy5vbkNsaWNrPy4oKTtcbiAgICAgIH19XG4gICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgY3NzPXtnZXREcm9wZG93bkxpc3RNZW51SXRlbVN0eWxlcyhwcm9wcyl9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25MaXN0TWVudUl0ZW07XG4iXX0= */"), props.isDisabled && /*#__PURE__*/react.css("color:", designSystem.designTokens.colorNeutral, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:getDropdownListMenuItemStyles;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUtbGlzdC1pdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQlMiLCJmaWxlIjoiZHJvcGRvd24tbWVudS1saXN0LWl0ZW0udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvYWNjZXNzaWJsZS1idXR0b24nO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VEcm9wZG93bk1lbnVDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9kcm9wZG93bi1tZW51LWNvbnRleHQnO1xuXG5mdW5jdGlvbiBnZXREcm9wZG93bkxpc3RNZW51SXRlbVN0eWxlcyhwcm9wczogVERyb3Bkb3duTGlzdE1lbnVJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIFtcbiAgICBjc3NgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB0ZXh0LXdyYXA6IHdyYXA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmc6ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzMwfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAke2Rlc2lnblRva2Vucy5ib3JkZXJSYWRpdXM2fVxuICAgICAgICAgICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czZ9IDAgMDtcbiAgICAgIH1cbiAgICAgICY6bGFzdC1vZi10eXBlIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czZ9XG4gICAgICAgICAgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNn07XG4gICAgICB9XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JQcmltYXJ5OTh9O1xuICAgICAgfVxuICAgIGAsXG4gICAgcHJvcHMuaXNEaXNhYmxlZCAmJlxuICAgICAgY3NzYFxuICAgICAgICBjb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgIGAsXG4gIF07XG59XG5cbmV4cG9ydCB0eXBlIFREcm9wZG93bkxpc3RNZW51SXRlbVByb3BzID0ge1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBEcm9wZG93bkxpc3RNZW51SXRlbShwcm9wczogVERyb3Bkb3duTGlzdE1lbnVJdGVtUHJvcHMpIHtcbiAgY29uc3QgeyB0b2dnbGUgfSA9IHVzZURyb3Bkb3duTWVudUNvbnRleHQoKTtcbiAgcmV0dXJuIChcbiAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgbGFiZWw9e3Byb3BzLmNoaWxkcmVufVxuICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICB0b2dnbGUoKTtcbiAgICAgICAgcHJvcHMub25DbGljaz8uKCk7XG4gICAgICB9fVxuICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgIGNzcz17Z2V0RHJvcGRvd25MaXN0TWVudUl0ZW1TdHlsZXMocHJvcHMpfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3Bkb3duTGlzdE1lbnVJdGVtO1xuIl19 */")];
|
|
130
|
+
return [/*#__PURE__*/react$1.css("display:block;text-align:left;text-wrap:wrap;width:100%;padding:", designSystem.designTokens.spacing20, " ", designSystem.designTokens.spacing30, ";background-color:", designSystem.designTokens.colorSurface, ";&:first-of-type{border-radius:", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, " 0 0;}&:last-of-type{border-radius:0 0 ", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, ";}&:hover{background-color:", designSystem.designTokens.colorPrimary98, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:getDropdownListMenuItemStyles;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUtbGlzdC1pdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPTyIsImZpbGUiOiJkcm9wZG93bi1tZW51LWxpc3QtaXRlbS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9hY2Nlc3NpYmxlLWJ1dHRvbic7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZURyb3Bkb3duTWVudUNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2Ryb3Bkb3duLW1lbnUtY29udGV4dCc7XG5cbmZ1bmN0aW9uIGdldERyb3Bkb3duTGlzdE1lbnVJdGVtU3R5bGVzKHByb3BzOiBURHJvcGRvd25MaXN0TWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gW1xuICAgIGNzc2BcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHRleHQtd3JhcDogd3JhcDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZzogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAke2Rlc2lnblRva2Vucy5zcGFjaW5nMzB9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czZ9XG4gICAgICAgICAgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNn0gMCAwO1xuICAgICAgfVxuICAgICAgJjpsYXN0LW9mLXR5cGUge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNn1cbiAgICAgICAgICAke2Rlc2lnblRva2Vucy5ib3JkZXJSYWRpdXM2fTtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Rlc2lnblRva2Vucy5jb2xvclByaW1hcnk5OH07XG4gICAgICB9XG4gICAgYCxcbiAgICBwcm9wcy5pc0Rpc2FibGVkICYmXG4gICAgICBjc3NgXG4gICAgICAgIGNvbG9yOiAke2Rlc2lnblRva2Vucy5jb2xvck5ldXRyYWx9O1xuICAgICAgYCxcbiAgXTtcbn1cblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTGlzdE1lbnVJdGVtUHJvcHMgPSB7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW46IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyb3Bkb3duTGlzdE1lbnVJdGVtKHByb3BzOiBURHJvcGRvd25MaXN0TWVudUl0ZW1Qcm9wcykge1xuICBjb25zdCB7IHRvZ2dsZSB9ID0gdXNlRHJvcGRvd25NZW51Q29udGV4dCgpO1xuICByZXR1cm4gKFxuICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICBsYWJlbD17cHJvcHMuY2hpbGRyZW59XG4gICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgIHRvZ2dsZSgpO1xuICAgICAgICBwcm9wcy5vbkNsaWNrPy4oKTtcbiAgICAgIH19XG4gICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgY3NzPXtnZXREcm9wZG93bkxpc3RNZW51SXRlbVN0eWxlcyhwcm9wcyl9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25MaXN0TWVudUl0ZW07XG4iXX0= */"), props.isDisabled && /*#__PURE__*/react$1.css("color:", designSystem.designTokens.colorNeutral, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:getDropdownListMenuItemStyles;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUtbGlzdC1pdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQlMiLCJmaWxlIjoiZHJvcGRvd24tbWVudS1saXN0LWl0ZW0udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvYWNjZXNzaWJsZS1idXR0b24nO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VEcm9wZG93bk1lbnVDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9kcm9wZG93bi1tZW51LWNvbnRleHQnO1xuXG5mdW5jdGlvbiBnZXREcm9wZG93bkxpc3RNZW51SXRlbVN0eWxlcyhwcm9wczogVERyb3Bkb3duTGlzdE1lbnVJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIFtcbiAgICBjc3NgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB0ZXh0LXdyYXA6IHdyYXA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmc6ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzMwfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAke2Rlc2lnblRva2Vucy5ib3JkZXJSYWRpdXM2fVxuICAgICAgICAgICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czZ9IDAgMDtcbiAgICAgIH1cbiAgICAgICY6bGFzdC1vZi10eXBlIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czZ9XG4gICAgICAgICAgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNn07XG4gICAgICB9XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JQcmltYXJ5OTh9O1xuICAgICAgfVxuICAgIGAsXG4gICAgcHJvcHMuaXNEaXNhYmxlZCAmJlxuICAgICAgY3NzYFxuICAgICAgICBjb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgIGAsXG4gIF07XG59XG5cbmV4cG9ydCB0eXBlIFREcm9wZG93bkxpc3RNZW51SXRlbVByb3BzID0ge1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBEcm9wZG93bkxpc3RNZW51SXRlbShwcm9wczogVERyb3Bkb3duTGlzdE1lbnVJdGVtUHJvcHMpIHtcbiAgY29uc3QgeyB0b2dnbGUgfSA9IHVzZURyb3Bkb3duTWVudUNvbnRleHQoKTtcbiAgcmV0dXJuIChcbiAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgbGFiZWw9e3Byb3BzLmNoaWxkcmVufVxuICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICB0b2dnbGUoKTtcbiAgICAgICAgcHJvcHMub25DbGljaz8uKCk7XG4gICAgICB9fVxuICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgIGNzcz17Z2V0RHJvcGRvd25MaXN0TWVudUl0ZW1TdHlsZXMocHJvcHMpfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3Bkb3duTGlzdE1lbnVJdGVtO1xuIl19 */")];
|
|
121
131
|
}
|
|
122
132
|
function DropdownListMenuItem(props) {
|
|
123
133
|
const _useDropdownMenuConte = useDropdownMenuContext(),
|
|
@@ -136,6 +146,40 @@ function DropdownListMenuItem(props) {
|
|
|
136
146
|
}
|
|
137
147
|
|
|
138
148
|
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
149
|
+
function getScrollableParent(element) {
|
|
150
|
+
if (!element) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const overflowY = window.getComputedStyle(element).overflowY;
|
|
154
|
+
const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
|
|
155
|
+
if (isScrollable && element.scrollHeight >= element.clientHeight) {
|
|
156
|
+
return element;
|
|
157
|
+
}
|
|
158
|
+
return getScrollableParent(element.parentElement);
|
|
159
|
+
}
|
|
160
|
+
function useScrollBlock(isOpen, triggerRef) {
|
|
161
|
+
const scrollableParentRef = react.useRef();
|
|
162
|
+
react.useEffect(() => {
|
|
163
|
+
if (!scrollableParentRef.current) {
|
|
164
|
+
scrollableParentRef.current = getScrollableParent(triggerRef.current);
|
|
165
|
+
}
|
|
166
|
+
const scrollableParent = scrollableParentRef.current;
|
|
167
|
+
if (scrollableParent && isOpen) {
|
|
168
|
+
scrollableParent.setAttribute('data-prev-scroll', scrollableParent.style.overflowY);
|
|
169
|
+
scrollableParent.style.overflowY = 'hidden';
|
|
170
|
+
}
|
|
171
|
+
return () => {
|
|
172
|
+
// The cleanup effect runs after the component is unmounted but also everytime
|
|
173
|
+
// the dependency array changes. We need to manage both to manage opening/closing
|
|
174
|
+
// the dropdown but also to manage the the dropdown is opened and the component
|
|
175
|
+
// is unmounted. For instance, when navigating to another page client-side.
|
|
176
|
+
if (scrollableParent && isOpen) {
|
|
177
|
+
const prevScroll = scrollableParent.getAttribute('data-prev-scroll');
|
|
178
|
+
scrollableParent.style.overflowY = prevScroll || '';
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
}, [isOpen, scrollableParentRef, triggerRef]);
|
|
182
|
+
}
|
|
139
183
|
const defaultProps = {
|
|
140
184
|
menuHorizontalConstraint: 'auto',
|
|
141
185
|
menuPosition: 'left',
|
|
@@ -152,7 +196,7 @@ const Container = /*#__PURE__*/_styled__default["default"]("div", process.env.NO
|
|
|
152
196
|
} : {
|
|
153
197
|
name: "1nrevy2",
|
|
154
198
|
styles: "position:relative;display:inline-block",
|
|
155
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
199
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9HNEIiLCJmaWxlIjoiZHJvcGRvd24tbWVudS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHR5cGUgUmVhY3RFbGVtZW50LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvZ2dsZVN0YXRlIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaG9va3MnO1xuaW1wb3J0IHsgdHlwZSBUTWF4UHJvcCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2NvbnN0cmFpbnRzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBEcm9wZG93bk1lbnVDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgRHJvcGRvd25UcmlnZ2VyIGZyb20gJy4vdHJpZ2dlcic7XG5pbXBvcnQge1xuICBEcm9wZG93bkNvbnRlbnRNZW51LFxuICBEcm9wZG93bkxpc3RNZW51LFxuICBEcm9wZG93bkxpc3RNZW51SXRlbSxcbn0gZnJvbSAnLi9tZW51JztcblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTWVudVByb3BzID0ge1xuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAqL1xuICBtZW51UG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgbWVudSBpbiBwaXhlbHMuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtYXggaGVpZ2h0IHdpbGwgYmUgdGhlIGF2YWlsYWJsZSBzcGFjZSBiZXR3ZWVuIHRoZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcnMgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgdHJpZ2dlckVsZW1lbnQ6IFJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBtZW51LlxuICAgKiBUaGUgJ2RlZmF1bHQnIHR5cGUganVzdCByZW5kZXJzIGEgZHJvcGRvd24gY29udGFpbmVyIGJ1dCB0aGUgJ2xpc3QnIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBEcm9wZG93bk1lbnUuTGlzdE1lbnVJdGVtIGNvbXBvbmVudC5cbiAgICovXG4gIG1lbnVUeXBlPzogJ2RlZmF1bHQnIHwgJ2xpc3QnO1xuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgY29uc3RyYWludCBvZiB0aGUgbWVudS5cbiAgICovXG4gIG1lbnVIb3Jpem9udGFsQ29uc3RyYWludD86IFRNYXhQcm9wO1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZO1xuICBjb25zdCBpc1Njcm9sbGFibGUgPSBvdmVyZmxvd1kgIT09ICd2aXNpYmxlJyAmJiBvdmVyZmxvd1kgIT09ICdoaWRkZW4nO1xuICBpZiAoaXNTY3JvbGxhYmxlICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID49IGVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGxCbG9jayhpc09wZW46IGJvb2xlYW4sIHRyaWdnZXJSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4pIHtcbiAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNjcm9sbGFibGVQYXJlbnRSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudFJlZi5jdXJyZW50ID0gZ2V0U2Nyb2xsYWJsZVBhcmVudCh0cmlnZ2VyUmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3VycmVudDogc2Nyb2xsYWJsZVBhcmVudCB9ID0gc2Nyb2xsYWJsZVBhcmVudFJlZjtcbiAgICBpZiAoc2Nyb2xsYWJsZVBhcmVudCAmJiBpc09wZW4pIHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1wcmV2LXNjcm9sbCcsXG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnQuc3R5bGUub3ZlcmZsb3dZXG4gICAgICApO1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIFRoZSBjbGVhbnVwIGVmZmVjdCBydW5zIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJ1dCBhbHNvIGV2ZXJ5dGltZVxuICAgICAgLy8gdGhlIGRlcGVuZGVuY3kgYXJyYXkgY2hhbmdlcy4gV2UgbmVlZCB0byBtYW5hZ2UgYm90aCB0byBtYW5hZ2Ugb3BlbmluZy9jbG9zaW5nXG4gICAgICAvLyB0aGUgZHJvcGRvd24gYnV0IGFsc28gdG8gbWFuYWdlIHRoZSB0aGUgZHJvcGRvd24gaXMgb3BlbmVkIGFuZCB0aGUgY29tcG9uZW50XG4gICAgICAvLyBpcyB1bm1vdW50ZWQuIEZvciBpbnN0YW5jZSwgd2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgcGFnZSBjbGllbnQtc2lkZS5cbiAgICAgIGlmIChzY3JvbGxhYmxlUGFyZW50ICYmIGlzT3Blbikge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldi1zY3JvbGwnKTtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSBwcmV2U2Nyb2xsIHx8ICcnO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtpc09wZW4sIHNjcm9sbGFibGVQYXJlbnRSZWYsIHRyaWdnZXJSZWZdKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzOiBQaWNrPFxuICBURHJvcGRvd25NZW51UHJvcHMsXG4gICdtZW51UG9zaXRpb24nIHwgJ21lbnVUeXBlJyB8ICdtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQnXG4+ID0ge1xuICBtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQ6ICdhdXRvJyxcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcsXG4gIG1lbnVUeXBlOiAnZGVmYXVsdCcsXG59O1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbmA7XG5cbmZ1bmN0aW9uIERyb3Bkb3duTWVudShwcm9wczogVERyb3Bkb3duTWVudVByb3BzKSB7XG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZV0gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIC8vIFdlIHVzZSB0aGUgY29udGV4dCBzbyBjaGlsZHJlbiBjYW4gdG9nZ2xlIHRoZSBkcm9wZG93blxuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaXNPcGVuLFxuICAgICAgdG9nZ2xlLFxuICAgIH0pLFxuICAgIFtpc09wZW4sIHRvZ2dsZV1cbiAgKTtcbiAgY29uc3QgTWVudSA9XG4gICAgcHJvcHMubWVudVR5cGUgPT09ICdkZWZhdWx0JyA/IERyb3Bkb3duQ29udGVudE1lbnUgOiBEcm9wZG93bkxpc3RNZW51O1xuXG4gIC8vIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgb2YgaXRcbiAgY29uc3QgaGFuZGxlR2xvYmFsQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgICAgaWYgKFxuICAgICAgICBpc09wZW4gJiZcbiAgICAgICAgdHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0cmlnZ2VyRWxlbWVudCAmJlxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhdHJpZ2dlckVsZW1lbnQucGFyZW50RWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgKSB7XG4gICAgICAgIHRvZ2dsZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdHJpZ2dlclJlZiwgdG9nZ2xlLCBpc09wZW5dXG4gICk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlR2xvYmFsQ2xpY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVHbG9iYWxDbGljayk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUdsb2JhbENsaWNrXSk7XG5cbiAgLy8gQmxvY2sgc2Nyb2xsaW5nIHdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4uXG4gIC8vIFdlIGRvIHRoaXMgdG8gYXZvaWQgcmVxdWlyaW5nIGRyb3Bkb3duIHJlcmVuZGVyaW5nIHdoaWxlIHRoZSB1c2VyIHNjcm9sbHMuXG4gIHVzZVNjcm9sbEJsb2NrKGlzT3BlbiwgdHJpZ2dlclJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8RHJvcGRvd25UcmlnZ2VyIG9uQ2xpY2s9e3RvZ2dsZX0gcmVmPXt0cmlnZ2VyUmVmfT5cbiAgICAgICAgICB7cHJvcHMudHJpZ2dlckVsZW1lbnR9XG4gICAgICAgIDwvRHJvcGRvd25UcmlnZ2VyPlxuXG4gICAgICAgIDxNZW51XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9e3Byb3BzLm1lbnVIb3Jpem9udGFsQ29uc3RyYWludCF9XG4gICAgICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICAgICAgbWVudVBvc2l0aW9uPXtwcm9wcy5tZW51UG9zaXRpb24hfVxuICAgICAgICAgIG1lbnVNYXhIZWlnaHQ9e3Byb3BzLm1lbnVNYXhIZWlnaHR9XG4gICAgICAgICAgdHJpZ2dlckVsZW1lbnRSZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgID5cbiAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvTWVudT5cbiAgICAgIDwvQ29udGFpbmVyPlxuICAgIDwvRHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbkRyb3Bkb3duTWVudS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbkRyb3Bkb3duTWVudS5MaXN0TWVudUl0ZW0gPSBEcm9wZG93bkxpc3RNZW51SXRlbTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25NZW51O1xuIl19 */",
|
|
156
200
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
157
201
|
});
|
|
158
202
|
function DropdownMenu(props) {
|
|
@@ -160,40 +204,33 @@ function DropdownMenu(props) {
|
|
|
160
204
|
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
161
205
|
isOpen = _useToggleState2[0],
|
|
162
206
|
toggle = _useToggleState2[1];
|
|
163
|
-
const triggerRef =
|
|
207
|
+
const triggerRef = react.useRef(null);
|
|
164
208
|
|
|
165
209
|
// We use the context so children can toggle the dropdown
|
|
166
|
-
const context =
|
|
210
|
+
const context = react.useMemo(() => ({
|
|
167
211
|
isOpen,
|
|
168
212
|
toggle
|
|
169
213
|
}), [isOpen, toggle]);
|
|
170
214
|
const Menu = props.menuType === 'default' ? DropdownContentMenu : DropdownListMenu;
|
|
171
215
|
|
|
172
216
|
// Close the dropdown when clicking outside of it
|
|
173
|
-
const handleGlobalClick =
|
|
217
|
+
const handleGlobalClick = react.useCallback(event => {
|
|
174
218
|
var _triggerElement$paren;
|
|
175
219
|
const triggerElement = triggerRef.current;
|
|
176
220
|
if (isOpen && triggerElement && event.target !== triggerElement && window.document.contains(event.target) && !((_triggerElement$paren = triggerElement.parentElement) !== null && _triggerElement$paren !== void 0 && _triggerElement$paren.contains(event.target))) {
|
|
177
221
|
toggle(false);
|
|
178
222
|
}
|
|
179
223
|
}, [triggerRef, toggle, isOpen]);
|
|
180
|
-
|
|
224
|
+
react.useEffect(() => {
|
|
181
225
|
window.addEventListener('click', handleGlobalClick);
|
|
182
226
|
return () => {
|
|
183
227
|
window.removeEventListener('click', handleGlobalClick);
|
|
184
228
|
};
|
|
185
229
|
}, [handleGlobalClick]);
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
} else {
|
|
191
|
-
window.document.body.style.overflow = 'initial';
|
|
192
|
-
}
|
|
193
|
-
return () => {
|
|
194
|
-
window.document.body.style.overflow = 'initial';
|
|
195
|
-
};
|
|
196
|
-
}, [isOpen]);
|
|
230
|
+
|
|
231
|
+
// Block scrolling when the dropdown is open.
|
|
232
|
+
// We do this to avoid requiring dropdown rerendering while the user scrolls.
|
|
233
|
+
useScrollBlock(isOpen, triggerRef);
|
|
197
234
|
return jsxRuntime.jsx(DropdownMenuContext.Provider, {
|
|
198
235
|
value: context,
|
|
199
236
|
children: jsxRuntime.jsxs(Container, {
|
|
@@ -205,6 +242,7 @@ function DropdownMenu(props) {
|
|
|
205
242
|
horizontalConstraint: props.menuHorizontalConstraint,
|
|
206
243
|
isOpen: isOpen,
|
|
207
244
|
menuPosition: props.menuPosition,
|
|
245
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
208
246
|
triggerElementRef: triggerRef,
|
|
209
247
|
children: props.children
|
|
210
248
|
})]
|
|
@@ -213,6 +251,7 @@ function DropdownMenu(props) {
|
|
|
213
251
|
}
|
|
214
252
|
DropdownMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
215
253
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']),
|
|
254
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
216
255
|
triggerElement: _pt__default["default"].element.isRequired,
|
|
217
256
|
menuType: _pt__default["default"].oneOf(['default', 'list']),
|
|
218
257
|
menuHorizontalConstraint: _pt__default["default"].any,
|
|
@@ -222,7 +261,7 @@ DropdownMenu.defaultProps = defaultProps;
|
|
|
222
261
|
DropdownMenu.ListMenuItem = DropdownListMenuItem;
|
|
223
262
|
|
|
224
263
|
// NOTE: This string will be replaced on build time with the package version.
|
|
225
|
-
var version = "19.
|
|
264
|
+
var version = "19.3.0";
|
|
226
265
|
|
|
227
266
|
exports["default"] = DropdownMenu;
|
|
228
267
|
exports.useDropdownMenuContext = useDropdownMenuContext;
|
|
@@ -5,10 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
6
6
|
var _styled = require('@emotion/styled/base');
|
|
7
7
|
require('prop-types');
|
|
8
|
-
var
|
|
8
|
+
var react = require('react');
|
|
9
9
|
var hooks = require('@commercetools-uikit/hooks');
|
|
10
10
|
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
11
|
-
var
|
|
11
|
+
var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
|
|
12
|
+
var react$1 = require('@emotion/react');
|
|
12
13
|
var designSystem = require('@commercetools-uikit/design-system');
|
|
13
14
|
var Constraints = require('@commercetools-uikit/constraints');
|
|
14
15
|
var SpacingsStack = require('@commercetools-uikit/spacings-stack');
|
|
@@ -17,17 +18,17 @@ var AccessibleButton = require('@commercetools-uikit/accessible-button');
|
|
|
17
18
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
18
19
|
|
|
19
20
|
var _styled__default = /*#__PURE__*/_interopDefault(_styled);
|
|
20
|
-
var
|
|
21
|
+
var _concatInstanceProperty__default = /*#__PURE__*/_interopDefault(_concatInstanceProperty);
|
|
21
22
|
var Constraints__default = /*#__PURE__*/_interopDefault(Constraints);
|
|
22
23
|
var SpacingsStack__default = /*#__PURE__*/_interopDefault(SpacingsStack);
|
|
23
24
|
var AccessibleButton__default = /*#__PURE__*/_interopDefault(AccessibleButton);
|
|
24
25
|
|
|
25
|
-
const DropdownMenuContext = /*#__PURE__*/
|
|
26
|
+
const DropdownMenuContext = /*#__PURE__*/react.createContext({
|
|
26
27
|
isOpen: false,
|
|
27
28
|
toggle: () => {}
|
|
28
29
|
});
|
|
29
30
|
function useDropdownMenuContext() {
|
|
30
|
-
const context =
|
|
31
|
+
const context = react.useContext(DropdownMenuContext);
|
|
31
32
|
if (!context) {
|
|
32
33
|
throw new Error('[ui-kit] DropdownMenu context can only be used in DropdownMenu children components.');
|
|
33
34
|
}
|
|
@@ -37,7 +38,7 @@ function useDropdownMenuContext() {
|
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
const DropDownTrigger = /*#__PURE__*/
|
|
41
|
+
const DropDownTrigger = /*#__PURE__*/react.forwardRef((props, ref) => {
|
|
41
42
|
return jsxRuntime.jsx("div", {
|
|
42
43
|
onClick: props.onClick,
|
|
43
44
|
ref: ref,
|
|
@@ -47,20 +48,24 @@ const DropDownTrigger = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
47
48
|
DropDownTrigger.displayName = 'DropDownTrigger';
|
|
48
49
|
var DropdownTrigger = DropDownTrigger;
|
|
49
50
|
|
|
51
|
+
const boxShadowBottomSize = '5px';
|
|
52
|
+
const marginTop = designSystem.designTokens.spacing20;
|
|
50
53
|
function getDropdownMenuBaseStyles(params) {
|
|
51
|
-
return /*#__PURE__*/react.css("background-color:", designSystem.designTokens.colorSurface, ";border:1px solid ", designSystem.designTokens.colorSurface, ";border-radius:", designSystem.designTokens.borderRadius4, ";box-shadow:0 2px
|
|
54
|
+
return /*#__PURE__*/react$1.css("background-color:", designSystem.designTokens.colorSurface, ";border:1px solid ", designSystem.designTokens.colorSurface, ";border-radius:", designSystem.designTokens.borderRadius4, ";box-shadow:0 2px ", boxShadowBottomSize, " 0px rgba(0, 0, 0, 0.15);display:", params.isOpen ? 'block' : 'none', ";margin-top:", marginTop, ";max-width:", Constraints__default["default"].getMaxPropTokenValue(params.horizontalConstraint), ";overflow-y:auto;position:fixed;width:", params.horizontalConstraint === 'auto' ? 'auto' : '100%', ";z-index:5;" + ("" ), "" );
|
|
52
55
|
}
|
|
53
56
|
function DropdownBaseMenu(props) {
|
|
54
|
-
const menuRef =
|
|
55
|
-
|
|
57
|
+
const menuRef = react.useRef(null);
|
|
58
|
+
react.useLayoutEffect(() => {
|
|
56
59
|
// Update the position of the menu when it is open
|
|
57
60
|
if (props.isOpen && props.triggerElementRef.current && menuRef.current) {
|
|
61
|
+
var _context, _context2;
|
|
58
62
|
const triggerElementCoordinates = props.triggerElementRef.current.getBoundingClientRect();
|
|
59
63
|
const menuElementCoordinates = menuRef.current.getBoundingClientRect();
|
|
60
64
|
menuRef.current.style.top = "".concat(triggerElementCoordinates.top + triggerElementCoordinates.height, "px");
|
|
61
65
|
menuRef.current.style.left = props.menuPosition === 'left' ? "".concat(triggerElementCoordinates.left, "px") : "".concat(triggerElementCoordinates.left + triggerElementCoordinates.width - menuElementCoordinates.width, "px");
|
|
66
|
+
menuRef.current.style.maxHeight = props.menuMaxHeight ? "".concat(props.menuMaxHeight, "px") : _concatInstanceProperty__default["default"](_context = _concatInstanceProperty__default["default"](_context2 = "calc(".concat(window.innerHeight - (triggerElementCoordinates.top + triggerElementCoordinates.height), "px - ")).call(_context2, marginTop, " - ")).call(_context, boxShadowBottomSize, ")");
|
|
62
67
|
}
|
|
63
|
-
}, [props.isOpen, props.menuPosition, props.triggerElementRef]);
|
|
68
|
+
}, [props.isOpen, props.menuPosition, props.triggerElementRef, props.menuMaxHeight]);
|
|
64
69
|
return jsxRuntime.jsx("div", {
|
|
65
70
|
css: getDropdownMenuBaseStyles(props),
|
|
66
71
|
style: props.customStyles,
|
|
@@ -77,6 +82,7 @@ const DropdownContentMenu = props => {
|
|
|
77
82
|
horizontalConstraint: props.horizontalConstraint,
|
|
78
83
|
isOpen: props.isOpen,
|
|
79
84
|
menuPosition: props.menuPosition,
|
|
85
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
80
86
|
triggerElementRef: props.triggerElementRef,
|
|
81
87
|
children: props.children
|
|
82
88
|
});
|
|
@@ -87,6 +93,7 @@ const DropdownListMenu = props => {
|
|
|
87
93
|
horizontalConstraint: props.horizontalConstraint,
|
|
88
94
|
isOpen: props.isOpen,
|
|
89
95
|
menuPosition: props.menuPosition,
|
|
96
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
90
97
|
triggerElementRef: props.triggerElementRef,
|
|
91
98
|
children: jsxRuntime.jsx(SpacingsStack__default["default"], {
|
|
92
99
|
scale: "xs",
|
|
@@ -97,7 +104,7 @@ const DropdownListMenu = props => {
|
|
|
97
104
|
DropdownListMenu.propTypes = {};
|
|
98
105
|
|
|
99
106
|
function getDropdownListMenuItemStyles(props) {
|
|
100
|
-
return [/*#__PURE__*/react.css("display:block;text-align:left;text-wrap:wrap;width:100%;padding:", designSystem.designTokens.spacing20, " ", designSystem.designTokens.spacing30, ";background-color:", designSystem.designTokens.colorSurface, ";&:first-of-type{border-radius:", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, " 0 0;}&:last-of-type{border-radius:0 0 ", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, ";}&:hover{background-color:", designSystem.designTokens.colorPrimary98, ";}" + ("" ), "" ), props.isDisabled && /*#__PURE__*/react.css("color:", designSystem.designTokens.colorNeutral, ";" + ("" ), "" )];
|
|
107
|
+
return [/*#__PURE__*/react$1.css("display:block;text-align:left;text-wrap:wrap;width:100%;padding:", designSystem.designTokens.spacing20, " ", designSystem.designTokens.spacing30, ";background-color:", designSystem.designTokens.colorSurface, ";&:first-of-type{border-radius:", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, " 0 0;}&:last-of-type{border-radius:0 0 ", designSystem.designTokens.borderRadius6, " ", designSystem.designTokens.borderRadius6, ";}&:hover{background-color:", designSystem.designTokens.colorPrimary98, ";}" + ("" ), "" ), props.isDisabled && /*#__PURE__*/react$1.css("color:", designSystem.designTokens.colorNeutral, ";" + ("" ), "" )];
|
|
101
108
|
}
|
|
102
109
|
function DropdownListMenuItem(props) {
|
|
103
110
|
const _useDropdownMenuConte = useDropdownMenuContext(),
|
|
@@ -115,6 +122,40 @@ function DropdownListMenuItem(props) {
|
|
|
115
122
|
});
|
|
116
123
|
}
|
|
117
124
|
|
|
125
|
+
function getScrollableParent(element) {
|
|
126
|
+
if (!element) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const overflowY = window.getComputedStyle(element).overflowY;
|
|
130
|
+
const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
|
|
131
|
+
if (isScrollable && element.scrollHeight >= element.clientHeight) {
|
|
132
|
+
return element;
|
|
133
|
+
}
|
|
134
|
+
return getScrollableParent(element.parentElement);
|
|
135
|
+
}
|
|
136
|
+
function useScrollBlock(isOpen, triggerRef) {
|
|
137
|
+
const scrollableParentRef = react.useRef();
|
|
138
|
+
react.useEffect(() => {
|
|
139
|
+
if (!scrollableParentRef.current) {
|
|
140
|
+
scrollableParentRef.current = getScrollableParent(triggerRef.current);
|
|
141
|
+
}
|
|
142
|
+
const scrollableParent = scrollableParentRef.current;
|
|
143
|
+
if (scrollableParent && isOpen) {
|
|
144
|
+
scrollableParent.setAttribute('data-prev-scroll', scrollableParent.style.overflowY);
|
|
145
|
+
scrollableParent.style.overflowY = 'hidden';
|
|
146
|
+
}
|
|
147
|
+
return () => {
|
|
148
|
+
// The cleanup effect runs after the component is unmounted but also everytime
|
|
149
|
+
// the dependency array changes. We need to manage both to manage opening/closing
|
|
150
|
+
// the dropdown but also to manage the the dropdown is opened and the component
|
|
151
|
+
// is unmounted. For instance, when navigating to another page client-side.
|
|
152
|
+
if (scrollableParent && isOpen) {
|
|
153
|
+
const prevScroll = scrollableParent.getAttribute('data-prev-scroll');
|
|
154
|
+
scrollableParent.style.overflowY = prevScroll || '';
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}, [isOpen, scrollableParentRef, triggerRef]);
|
|
158
|
+
}
|
|
118
159
|
const defaultProps = {
|
|
119
160
|
menuHorizontalConstraint: 'auto',
|
|
120
161
|
menuPosition: 'left',
|
|
@@ -131,40 +172,33 @@ function DropdownMenu(props) {
|
|
|
131
172
|
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
132
173
|
isOpen = _useToggleState2[0],
|
|
133
174
|
toggle = _useToggleState2[1];
|
|
134
|
-
const triggerRef =
|
|
175
|
+
const triggerRef = react.useRef(null);
|
|
135
176
|
|
|
136
177
|
// We use the context so children can toggle the dropdown
|
|
137
|
-
const context =
|
|
178
|
+
const context = react.useMemo(() => ({
|
|
138
179
|
isOpen,
|
|
139
180
|
toggle
|
|
140
181
|
}), [isOpen, toggle]);
|
|
141
182
|
const Menu = props.menuType === 'default' ? DropdownContentMenu : DropdownListMenu;
|
|
142
183
|
|
|
143
184
|
// Close the dropdown when clicking outside of it
|
|
144
|
-
const handleGlobalClick =
|
|
185
|
+
const handleGlobalClick = react.useCallback(event => {
|
|
145
186
|
var _triggerElement$paren;
|
|
146
187
|
const triggerElement = triggerRef.current;
|
|
147
188
|
if (isOpen && triggerElement && event.target !== triggerElement && window.document.contains(event.target) && !((_triggerElement$paren = triggerElement.parentElement) !== null && _triggerElement$paren !== void 0 && _triggerElement$paren.contains(event.target))) {
|
|
148
189
|
toggle(false);
|
|
149
190
|
}
|
|
150
191
|
}, [triggerRef, toggle, isOpen]);
|
|
151
|
-
|
|
192
|
+
react.useEffect(() => {
|
|
152
193
|
window.addEventListener('click', handleGlobalClick);
|
|
153
194
|
return () => {
|
|
154
195
|
window.removeEventListener('click', handleGlobalClick);
|
|
155
196
|
};
|
|
156
197
|
}, [handleGlobalClick]);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
} else {
|
|
162
|
-
window.document.body.style.overflow = 'initial';
|
|
163
|
-
}
|
|
164
|
-
return () => {
|
|
165
|
-
window.document.body.style.overflow = 'initial';
|
|
166
|
-
};
|
|
167
|
-
}, [isOpen]);
|
|
198
|
+
|
|
199
|
+
// Block scrolling when the dropdown is open.
|
|
200
|
+
// We do this to avoid requiring dropdown rerendering while the user scrolls.
|
|
201
|
+
useScrollBlock(isOpen, triggerRef);
|
|
168
202
|
return jsxRuntime.jsx(DropdownMenuContext.Provider, {
|
|
169
203
|
value: context,
|
|
170
204
|
children: jsxRuntime.jsxs(Container, {
|
|
@@ -176,6 +210,7 @@ function DropdownMenu(props) {
|
|
|
176
210
|
horizontalConstraint: props.menuHorizontalConstraint,
|
|
177
211
|
isOpen: isOpen,
|
|
178
212
|
menuPosition: props.menuPosition,
|
|
213
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
179
214
|
triggerElementRef: triggerRef,
|
|
180
215
|
children: props.children
|
|
181
216
|
})]
|
|
@@ -187,7 +222,7 @@ DropdownMenu.defaultProps = defaultProps;
|
|
|
187
222
|
DropdownMenu.ListMenuItem = DropdownListMenuItem;
|
|
188
223
|
|
|
189
224
|
// NOTE: This string will be replaced on build time with the package version.
|
|
190
|
-
var version = "19.
|
|
225
|
+
var version = "19.3.0";
|
|
191
226
|
|
|
192
227
|
exports["default"] = DropdownMenu;
|
|
193
228
|
exports.useDropdownMenuContext = useDropdownMenuContext;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
|
|
2
2
|
import _styled from '@emotion/styled/base';
|
|
3
3
|
import _pt from 'prop-types';
|
|
4
|
-
import
|
|
4
|
+
import { useContext, createContext, forwardRef, useRef, useLayoutEffect, useMemo, useCallback, useEffect } from 'react';
|
|
5
5
|
import { useToggleState } from '@commercetools-uikit/hooks';
|
|
6
6
|
import { jsx, jsxs } from '@emotion/react/jsx-runtime';
|
|
7
|
+
import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
|
|
7
8
|
import { css } from '@emotion/react';
|
|
8
9
|
import { designTokens } from '@commercetools-uikit/design-system';
|
|
9
10
|
import Constraints from '@commercetools-uikit/constraints';
|
|
@@ -35,20 +36,24 @@ const DropDownTrigger = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
35
36
|
DropDownTrigger.displayName = 'DropDownTrigger';
|
|
36
37
|
var DropdownTrigger = DropDownTrigger;
|
|
37
38
|
|
|
39
|
+
const boxShadowBottomSize = '5px';
|
|
40
|
+
const marginTop = designTokens.spacing20;
|
|
38
41
|
function getDropdownMenuBaseStyles(params) {
|
|
39
|
-
return /*#__PURE__*/css("background-color:", designTokens.colorSurface, ";border:1px solid ", designTokens.colorSurface, ";border-radius:", designTokens.borderRadius4, ";box-shadow:0 2px
|
|
42
|
+
return /*#__PURE__*/css("background-color:", designTokens.colorSurface, ";border:1px solid ", designTokens.colorSurface, ";border-radius:", designTokens.borderRadius4, ";box-shadow:0 2px ", boxShadowBottomSize, " 0px rgba(0, 0, 0, 0.15);display:", params.isOpen ? 'block' : 'none', ";margin-top:", marginTop, ";max-width:", Constraints.getMaxPropTokenValue(params.horizontalConstraint), ";overflow-y:auto;position:fixed;width:", params.horizontalConstraint === 'auto' ? 'auto' : '100%', ";z-index:5;" + (process.env.NODE_ENV === "production" ? "" : ";label:getDropdownMenuBaseStyles;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUtbWVudS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JZIiwiZmlsZSI6ImRyb3Bkb3duLW1lbnUtbWVudS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDU1NQcm9wZXJ0aWVzLFxuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGRlc2lnblRva2VucyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IENvbnN0cmFpbnRzLCB7IHR5cGUgVE1heFByb3AgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9jb25zdHJhaW50cyc7XG5pbXBvcnQgU3BhY2luZ3NTdGFjayBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9zcGFjaW5ncy1zdGFjayc7XG5cbi8vIFdlIGRlY2xhcmUgdGhpcyBzdHlsZSBwcm9wZXJ0aWVzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZW0gYm90aCBmb3IgaW5pdGlhbCBjb21wb25lbnQgc3R5bGluZ1xuLy8gYnV0IGFsc28gZm9yIGNhbGN1bGF0aW5nIHRoZSBkZWZhdWx0IG1heCBoZWlnaHQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgc28gd2UgbWFrZSBzdXJlIGl0IGZpdHNcbi8vIHdpdGhpbiB0aGUgdmlld3BvcnQuXG5jb25zdCBib3hTaGFkb3dCb3R0b21TaXplID0gJzVweCc7XG5jb25zdCBtYXJnaW5Ub3AgPSBkZXNpZ25Ub2tlbnMuc3BhY2luZzIwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJvcGRvd25NZW51QmFzZVN0eWxlcyhwYXJhbXM6IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG59KSB7XG4gIHJldHVybiBjc3NgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Rlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7ZGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4ICR7Ym94U2hhZG93Qm90dG9tU2l6ZX0gMHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgZGlzcGxheTogJHtwYXJhbXMuaXNPcGVuID8gJ2Jsb2NrJyA6ICdub25lJ307XG4gICAgbWFyZ2luLXRvcDogJHttYXJnaW5Ub3B9O1xuICAgIG1heC13aWR0aDogJHtDb25zdHJhaW50cy5nZXRNYXhQcm9wVG9rZW5WYWx1ZShwYXJhbXMuaG9yaXpvbnRhbENvbnN0cmFpbnQpfTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB3aWR0aDogJHtwYXJhbXMuaG9yaXpvbnRhbENvbnN0cmFpbnQgPT09ICdhdXRvJyA/ICdhdXRvJyA6ICcxMDAlJ307XG4gICAgei1pbmRleDogNTtcbiAgYDtcbn1cblxudHlwZSBURHJvcGRvd25CYXNlTWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjdXN0b21TdHlsZXM/OiBDU1NQcm9wZXJ0aWVzO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICBtZW51TWF4SGVpZ2h0PzogbnVtYmVyO1xuICB0cmlnZ2VyRWxlbWVudFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50Pjtcbn07XG5mdW5jdGlvbiBEcm9wZG93bkJhc2VNZW51KHByb3BzOiBURHJvcGRvd25CYXNlTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudSB3aGVuIGl0IGlzIG9wZW5cbiAgICBpZiAocHJvcHMuaXNPcGVuICYmIHByb3BzLnRyaWdnZXJFbGVtZW50UmVmLmN1cnJlbnQgJiYgbWVudVJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzID1cbiAgICAgICAgcHJvcHMudHJpZ2dlckVsZW1lbnRSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IG1lbnVFbGVtZW50Q29vcmRpbmF0ZXMgPSBtZW51UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgdHJpZ2dlckVsZW1lbnRDb29yZGluYXRlcy50b3AgKyB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLmhlaWdodFxuICAgICAgfXB4YDtcbiAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgcHJvcHMubWVudVBvc2l0aW9uID09PSAnbGVmdCdcbiAgICAgICAgICA/IGAke3RyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMubGVmdH1weGBcbiAgICAgICAgICA6IGAke1xuICAgICAgICAgICAgICB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLmxlZnQgK1xuICAgICAgICAgICAgICB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLndpZHRoIC1cbiAgICAgICAgICAgICAgbWVudUVsZW1lbnRDb29yZGluYXRlcy53aWR0aFxuICAgICAgICAgICAgfXB4YDtcbiAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5tYXhIZWlnaHQgPSBwcm9wcy5tZW51TWF4SGVpZ2h0XG4gICAgICAgID8gYCR7cHJvcHMubWVudU1heEhlaWdodH1weGBcbiAgICAgICAgOiBgY2FsYygke1xuICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0IC1cbiAgICAgICAgICAgICh0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLnRvcCArIHRyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMuaGVpZ2h0KVxuICAgICAgICAgIH1weCAtICR7bWFyZ2luVG9wfSAtICR7Ym94U2hhZG93Qm90dG9tU2l6ZX0pYDtcbiAgICB9XG4gIH0sIFtcbiAgICBwcm9wcy5pc09wZW4sXG4gICAgcHJvcHMubWVudVBvc2l0aW9uLFxuICAgIHByb3BzLnRyaWdnZXJFbGVtZW50UmVmLFxuICAgIHByb3BzLm1lbnVNYXhIZWlnaHQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtnZXREcm9wZG93bk1lbnVCYXNlU3R5bGVzKHByb3BzKX1cbiAgICAgIHN0eWxlPXtwcm9wcy5jdXN0b21TdHlsZXN9XG4gICAgICByZWY9e21lbnVSZWZ9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgdHlwZSBURHJvcGRvd25Db250ZW50TWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG4gIG1lbnVQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICB0cmlnZ2VyRWxlbWVudFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50Pjtcbn07XG5leHBvcnQgY29uc3QgRHJvcGRvd25Db250ZW50TWVudSA9IChwcm9wczogVERyb3Bkb3duQ29udGVudE1lbnVQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxEcm9wZG93bkJhc2VNZW51XG4gICAgICBjdXN0b21TdHlsZXM9e3tcbiAgICAgICAgcGFkZGluZzogZGVzaWduVG9rZW5zLnNwYWNpbmczMCxcbiAgICAgIH19XG4gICAgICBob3Jpem9udGFsQ29uc3RyYWludD17cHJvcHMuaG9yaXpvbnRhbENvbnN0cmFpbnR9XG4gICAgICBpc09wZW49e3Byb3BzLmlzT3Blbn1cbiAgICAgIG1lbnVQb3NpdGlvbj17cHJvcHMubWVudVBvc2l0aW9ufVxuICAgICAgbWVudU1heEhlaWdodD17cHJvcHMubWVudU1heEhlaWdodH1cbiAgICAgIHRyaWdnZXJFbGVtZW50UmVmPXtwcm9wcy50cmlnZ2VyRWxlbWVudFJlZn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9Ecm9wZG93bkJhc2VNZW51PlxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTGlzdE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaG9yaXpvbnRhbENvbnN0cmFpbnQ6IFRNYXhQcm9wO1xuICBtZW51UG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCc7XG4gIG1lbnVNYXhIZWlnaHQ/OiBudW1iZXI7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgdHJpZ2dlckVsZW1lbnRSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG59O1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duTGlzdE1lbnUgPSAocHJvcHM6IFREcm9wZG93bkxpc3RNZW51UHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25CYXNlTWVudVxuICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9e3Byb3BzLmhvcml6b250YWxDb25zdHJhaW50fVxuICAgICAgaXNPcGVuPXtwcm9wcy5pc09wZW59XG4gICAgICBtZW51UG9zaXRpb249e3Byb3BzLm1lbnVQb3NpdGlvbn1cbiAgICAgIG1lbnVNYXhIZWlnaHQ9e3Byb3BzLm1lbnVNYXhIZWlnaHR9XG4gICAgICB0cmlnZ2VyRWxlbWVudFJlZj17cHJvcHMudHJpZ2dlckVsZW1lbnRSZWZ9XG4gICAgPlxuICAgICAgPFNwYWNpbmdzU3RhY2sgc2NhbGU9XCJ4c1wiPntwcm9wcy5jaGlsZHJlbn08L1NwYWNpbmdzU3RhY2s+XG4gICAgPC9Ecm9wZG93bkJhc2VNZW51PlxuICApO1xufTtcbiJdfQ== */");
|
|
40
43
|
}
|
|
41
44
|
function DropdownBaseMenu(props) {
|
|
42
45
|
const menuRef = useRef(null);
|
|
43
46
|
useLayoutEffect(() => {
|
|
44
47
|
// Update the position of the menu when it is open
|
|
45
48
|
if (props.isOpen && props.triggerElementRef.current && menuRef.current) {
|
|
49
|
+
var _context, _context2;
|
|
46
50
|
const triggerElementCoordinates = props.triggerElementRef.current.getBoundingClientRect();
|
|
47
51
|
const menuElementCoordinates = menuRef.current.getBoundingClientRect();
|
|
48
52
|
menuRef.current.style.top = "".concat(triggerElementCoordinates.top + triggerElementCoordinates.height, "px");
|
|
49
53
|
menuRef.current.style.left = props.menuPosition === 'left' ? "".concat(triggerElementCoordinates.left, "px") : "".concat(triggerElementCoordinates.left + triggerElementCoordinates.width - menuElementCoordinates.width, "px");
|
|
54
|
+
menuRef.current.style.maxHeight = props.menuMaxHeight ? "".concat(props.menuMaxHeight, "px") : _concatInstanceProperty(_context = _concatInstanceProperty(_context2 = "calc(".concat(window.innerHeight - (triggerElementCoordinates.top + triggerElementCoordinates.height), "px - ")).call(_context2, marginTop, " - ")).call(_context, boxShadowBottomSize, ")");
|
|
50
55
|
}
|
|
51
|
-
}, [props.isOpen, props.menuPosition, props.triggerElementRef]);
|
|
56
|
+
}, [props.isOpen, props.menuPosition, props.triggerElementRef, props.menuMaxHeight]);
|
|
52
57
|
return jsx("div", {
|
|
53
58
|
css: getDropdownMenuBaseStyles(props),
|
|
54
59
|
style: props.customStyles,
|
|
@@ -62,6 +67,7 @@ DropdownBaseMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
62
67
|
horizontalConstraint: _pt.any.isRequired,
|
|
63
68
|
isOpen: _pt.bool.isRequired,
|
|
64
69
|
menuPosition: _pt.oneOf(['left', 'right']).isRequired,
|
|
70
|
+
menuMaxHeight: _pt.number,
|
|
65
71
|
triggerElementRef: _pt.any.isRequired
|
|
66
72
|
} : {};
|
|
67
73
|
const DropdownContentMenu = props => {
|
|
@@ -72,6 +78,7 @@ const DropdownContentMenu = props => {
|
|
|
72
78
|
horizontalConstraint: props.horizontalConstraint,
|
|
73
79
|
isOpen: props.isOpen,
|
|
74
80
|
menuPosition: props.menuPosition,
|
|
81
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
75
82
|
triggerElementRef: props.triggerElementRef,
|
|
76
83
|
children: props.children
|
|
77
84
|
});
|
|
@@ -80,6 +87,7 @@ DropdownContentMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
80
87
|
children: _pt.node.isRequired,
|
|
81
88
|
horizontalConstraint: _pt.any.isRequired,
|
|
82
89
|
menuPosition: _pt.oneOf(['left', 'right']).isRequired,
|
|
90
|
+
menuMaxHeight: _pt.number,
|
|
83
91
|
isOpen: _pt.bool.isRequired,
|
|
84
92
|
triggerElementRef: _pt.any.isRequired
|
|
85
93
|
} : {};
|
|
@@ -88,6 +96,7 @@ const DropdownListMenu = props => {
|
|
|
88
96
|
horizontalConstraint: props.horizontalConstraint,
|
|
89
97
|
isOpen: props.isOpen,
|
|
90
98
|
menuPosition: props.menuPosition,
|
|
99
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
91
100
|
triggerElementRef: props.triggerElementRef,
|
|
92
101
|
children: jsx(SpacingsStack, {
|
|
93
102
|
scale: "xs",
|
|
@@ -99,6 +108,7 @@ DropdownListMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
99
108
|
children: _pt.node.isRequired,
|
|
100
109
|
horizontalConstraint: _pt.any.isRequired,
|
|
101
110
|
menuPosition: _pt.oneOf(['left', 'right']).isRequired,
|
|
111
|
+
menuMaxHeight: _pt.number,
|
|
102
112
|
isOpen: _pt.bool.isRequired,
|
|
103
113
|
triggerElementRef: _pt.any.isRequired
|
|
104
114
|
} : {};
|
|
@@ -123,6 +133,40 @@ function DropdownListMenuItem(props) {
|
|
|
123
133
|
}
|
|
124
134
|
|
|
125
135
|
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
136
|
+
function getScrollableParent(element) {
|
|
137
|
+
if (!element) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const overflowY = window.getComputedStyle(element).overflowY;
|
|
141
|
+
const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
|
|
142
|
+
if (isScrollable && element.scrollHeight >= element.clientHeight) {
|
|
143
|
+
return element;
|
|
144
|
+
}
|
|
145
|
+
return getScrollableParent(element.parentElement);
|
|
146
|
+
}
|
|
147
|
+
function useScrollBlock(isOpen, triggerRef) {
|
|
148
|
+
const scrollableParentRef = useRef();
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
if (!scrollableParentRef.current) {
|
|
151
|
+
scrollableParentRef.current = getScrollableParent(triggerRef.current);
|
|
152
|
+
}
|
|
153
|
+
const scrollableParent = scrollableParentRef.current;
|
|
154
|
+
if (scrollableParent && isOpen) {
|
|
155
|
+
scrollableParent.setAttribute('data-prev-scroll', scrollableParent.style.overflowY);
|
|
156
|
+
scrollableParent.style.overflowY = 'hidden';
|
|
157
|
+
}
|
|
158
|
+
return () => {
|
|
159
|
+
// The cleanup effect runs after the component is unmounted but also everytime
|
|
160
|
+
// the dependency array changes. We need to manage both to manage opening/closing
|
|
161
|
+
// the dropdown but also to manage the the dropdown is opened and the component
|
|
162
|
+
// is unmounted. For instance, when navigating to another page client-side.
|
|
163
|
+
if (scrollableParent && isOpen) {
|
|
164
|
+
const prevScroll = scrollableParent.getAttribute('data-prev-scroll');
|
|
165
|
+
scrollableParent.style.overflowY = prevScroll || '';
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}, [isOpen, scrollableParentRef, triggerRef]);
|
|
169
|
+
}
|
|
126
170
|
const defaultProps = {
|
|
127
171
|
menuHorizontalConstraint: 'auto',
|
|
128
172
|
menuPosition: 'left',
|
|
@@ -139,7 +183,7 @@ const Container = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "producti
|
|
|
139
183
|
} : {
|
|
140
184
|
name: "1nrevy2",
|
|
141
185
|
styles: "position:relative;display:inline-block",
|
|
142
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
186
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9HNEIiLCJmaWxlIjoiZHJvcGRvd24tbWVudS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHR5cGUgUmVhY3RFbGVtZW50LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvZ2dsZVN0YXRlIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaG9va3MnO1xuaW1wb3J0IHsgdHlwZSBUTWF4UHJvcCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2NvbnN0cmFpbnRzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBEcm9wZG93bk1lbnVDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgRHJvcGRvd25UcmlnZ2VyIGZyb20gJy4vdHJpZ2dlcic7XG5pbXBvcnQge1xuICBEcm9wZG93bkNvbnRlbnRNZW51LFxuICBEcm9wZG93bkxpc3RNZW51LFxuICBEcm9wZG93bkxpc3RNZW51SXRlbSxcbn0gZnJvbSAnLi9tZW51JztcblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTWVudVByb3BzID0ge1xuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAqL1xuICBtZW51UG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgbWVudSBpbiBwaXhlbHMuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtYXggaGVpZ2h0IHdpbGwgYmUgdGhlIGF2YWlsYWJsZSBzcGFjZSBiZXR3ZWVuIHRoZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcnMgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgdHJpZ2dlckVsZW1lbnQ6IFJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBtZW51LlxuICAgKiBUaGUgJ2RlZmF1bHQnIHR5cGUganVzdCByZW5kZXJzIGEgZHJvcGRvd24gY29udGFpbmVyIGJ1dCB0aGUgJ2xpc3QnIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBEcm9wZG93bk1lbnUuTGlzdE1lbnVJdGVtIGNvbXBvbmVudC5cbiAgICovXG4gIG1lbnVUeXBlPzogJ2RlZmF1bHQnIHwgJ2xpc3QnO1xuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgY29uc3RyYWludCBvZiB0aGUgbWVudS5cbiAgICovXG4gIG1lbnVIb3Jpem9udGFsQ29uc3RyYWludD86IFRNYXhQcm9wO1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZO1xuICBjb25zdCBpc1Njcm9sbGFibGUgPSBvdmVyZmxvd1kgIT09ICd2aXNpYmxlJyAmJiBvdmVyZmxvd1kgIT09ICdoaWRkZW4nO1xuICBpZiAoaXNTY3JvbGxhYmxlICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID49IGVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGxCbG9jayhpc09wZW46IGJvb2xlYW4sIHRyaWdnZXJSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4pIHtcbiAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNjcm9sbGFibGVQYXJlbnRSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudFJlZi5jdXJyZW50ID0gZ2V0U2Nyb2xsYWJsZVBhcmVudCh0cmlnZ2VyUmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3VycmVudDogc2Nyb2xsYWJsZVBhcmVudCB9ID0gc2Nyb2xsYWJsZVBhcmVudFJlZjtcbiAgICBpZiAoc2Nyb2xsYWJsZVBhcmVudCAmJiBpc09wZW4pIHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1wcmV2LXNjcm9sbCcsXG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnQuc3R5bGUub3ZlcmZsb3dZXG4gICAgICApO1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIFRoZSBjbGVhbnVwIGVmZmVjdCBydW5zIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJ1dCBhbHNvIGV2ZXJ5dGltZVxuICAgICAgLy8gdGhlIGRlcGVuZGVuY3kgYXJyYXkgY2hhbmdlcy4gV2UgbmVlZCB0byBtYW5hZ2UgYm90aCB0byBtYW5hZ2Ugb3BlbmluZy9jbG9zaW5nXG4gICAgICAvLyB0aGUgZHJvcGRvd24gYnV0IGFsc28gdG8gbWFuYWdlIHRoZSB0aGUgZHJvcGRvd24gaXMgb3BlbmVkIGFuZCB0aGUgY29tcG9uZW50XG4gICAgICAvLyBpcyB1bm1vdW50ZWQuIEZvciBpbnN0YW5jZSwgd2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgcGFnZSBjbGllbnQtc2lkZS5cbiAgICAgIGlmIChzY3JvbGxhYmxlUGFyZW50ICYmIGlzT3Blbikge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldi1zY3JvbGwnKTtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSBwcmV2U2Nyb2xsIHx8ICcnO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtpc09wZW4sIHNjcm9sbGFibGVQYXJlbnRSZWYsIHRyaWdnZXJSZWZdKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzOiBQaWNrPFxuICBURHJvcGRvd25NZW51UHJvcHMsXG4gICdtZW51UG9zaXRpb24nIHwgJ21lbnVUeXBlJyB8ICdtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQnXG4+ID0ge1xuICBtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQ6ICdhdXRvJyxcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcsXG4gIG1lbnVUeXBlOiAnZGVmYXVsdCcsXG59O1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbmA7XG5cbmZ1bmN0aW9uIERyb3Bkb3duTWVudShwcm9wczogVERyb3Bkb3duTWVudVByb3BzKSB7XG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZV0gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIC8vIFdlIHVzZSB0aGUgY29udGV4dCBzbyBjaGlsZHJlbiBjYW4gdG9nZ2xlIHRoZSBkcm9wZG93blxuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaXNPcGVuLFxuICAgICAgdG9nZ2xlLFxuICAgIH0pLFxuICAgIFtpc09wZW4sIHRvZ2dsZV1cbiAgKTtcbiAgY29uc3QgTWVudSA9XG4gICAgcHJvcHMubWVudVR5cGUgPT09ICdkZWZhdWx0JyA/IERyb3Bkb3duQ29udGVudE1lbnUgOiBEcm9wZG93bkxpc3RNZW51O1xuXG4gIC8vIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgb2YgaXRcbiAgY29uc3QgaGFuZGxlR2xvYmFsQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgICAgaWYgKFxuICAgICAgICBpc09wZW4gJiZcbiAgICAgICAgdHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0cmlnZ2VyRWxlbWVudCAmJlxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhdHJpZ2dlckVsZW1lbnQucGFyZW50RWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgKSB7XG4gICAgICAgIHRvZ2dsZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdHJpZ2dlclJlZiwgdG9nZ2xlLCBpc09wZW5dXG4gICk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlR2xvYmFsQ2xpY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVHbG9iYWxDbGljayk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUdsb2JhbENsaWNrXSk7XG5cbiAgLy8gQmxvY2sgc2Nyb2xsaW5nIHdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4uXG4gIC8vIFdlIGRvIHRoaXMgdG8gYXZvaWQgcmVxdWlyaW5nIGRyb3Bkb3duIHJlcmVuZGVyaW5nIHdoaWxlIHRoZSB1c2VyIHNjcm9sbHMuXG4gIHVzZVNjcm9sbEJsb2NrKGlzT3BlbiwgdHJpZ2dlclJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8RHJvcGRvd25UcmlnZ2VyIG9uQ2xpY2s9e3RvZ2dsZX0gcmVmPXt0cmlnZ2VyUmVmfT5cbiAgICAgICAgICB7cHJvcHMudHJpZ2dlckVsZW1lbnR9XG4gICAgICAgIDwvRHJvcGRvd25UcmlnZ2VyPlxuXG4gICAgICAgIDxNZW51XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9e3Byb3BzLm1lbnVIb3Jpem9udGFsQ29uc3RyYWludCF9XG4gICAgICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICAgICAgbWVudVBvc2l0aW9uPXtwcm9wcy5tZW51UG9zaXRpb24hfVxuICAgICAgICAgIG1lbnVNYXhIZWlnaHQ9e3Byb3BzLm1lbnVNYXhIZWlnaHR9XG4gICAgICAgICAgdHJpZ2dlckVsZW1lbnRSZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgID5cbiAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvTWVudT5cbiAgICAgIDwvQ29udGFpbmVyPlxuICAgIDwvRHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbkRyb3Bkb3duTWVudS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbkRyb3Bkb3duTWVudS5MaXN0TWVudUl0ZW0gPSBEcm9wZG93bkxpc3RNZW51SXRlbTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25NZW51O1xuIl19 */",
|
|
143
187
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
144
188
|
});
|
|
145
189
|
function DropdownMenu(props) {
|
|
@@ -147,7 +191,7 @@ function DropdownMenu(props) {
|
|
|
147
191
|
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
148
192
|
isOpen = _useToggleState2[0],
|
|
149
193
|
toggle = _useToggleState2[1];
|
|
150
|
-
const triggerRef =
|
|
194
|
+
const triggerRef = useRef(null);
|
|
151
195
|
|
|
152
196
|
// We use the context so children can toggle the dropdown
|
|
153
197
|
const context = useMemo(() => ({
|
|
@@ -170,17 +214,10 @@ function DropdownMenu(props) {
|
|
|
170
214
|
window.removeEventListener('click', handleGlobalClick);
|
|
171
215
|
};
|
|
172
216
|
}, [handleGlobalClick]);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
} else {
|
|
178
|
-
window.document.body.style.overflow = 'initial';
|
|
179
|
-
}
|
|
180
|
-
return () => {
|
|
181
|
-
window.document.body.style.overflow = 'initial';
|
|
182
|
-
};
|
|
183
|
-
}, [isOpen]);
|
|
217
|
+
|
|
218
|
+
// Block scrolling when the dropdown is open.
|
|
219
|
+
// We do this to avoid requiring dropdown rerendering while the user scrolls.
|
|
220
|
+
useScrollBlock(isOpen, triggerRef);
|
|
184
221
|
return jsx(DropdownMenuContext.Provider, {
|
|
185
222
|
value: context,
|
|
186
223
|
children: jsxs(Container, {
|
|
@@ -192,6 +229,7 @@ function DropdownMenu(props) {
|
|
|
192
229
|
horizontalConstraint: props.menuHorizontalConstraint,
|
|
193
230
|
isOpen: isOpen,
|
|
194
231
|
menuPosition: props.menuPosition,
|
|
232
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
195
233
|
triggerElementRef: triggerRef,
|
|
196
234
|
children: props.children
|
|
197
235
|
})]
|
|
@@ -200,6 +238,7 @@ function DropdownMenu(props) {
|
|
|
200
238
|
}
|
|
201
239
|
DropdownMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
202
240
|
menuPosition: _pt.oneOf(['left', 'right']),
|
|
241
|
+
menuMaxHeight: _pt.number,
|
|
203
242
|
triggerElement: _pt.element.isRequired,
|
|
204
243
|
menuType: _pt.oneOf(['default', 'list']),
|
|
205
244
|
menuHorizontalConstraint: _pt.any,
|
|
@@ -209,6 +248,6 @@ DropdownMenu.defaultProps = defaultProps;
|
|
|
209
248
|
DropdownMenu.ListMenuItem = DropdownListMenuItem;
|
|
210
249
|
|
|
211
250
|
// NOTE: This string will be replaced on build time with the package version.
|
|
212
|
-
var version = "19.
|
|
251
|
+
var version = "19.3.0";
|
|
213
252
|
|
|
214
253
|
export { DropdownMenu as default, useDropdownMenuContext, version };
|
|
@@ -3,6 +3,7 @@ import { type TMaxProp } from '@commercetools-uikit/constraints';
|
|
|
3
3
|
import { DropdownListMenuItem } from "./menu/index.js";
|
|
4
4
|
export type TDropdownMenuProps = {
|
|
5
5
|
menuPosition?: 'left' | 'right';
|
|
6
|
+
menuMaxHeight?: number;
|
|
6
7
|
triggerElement: ReactElement;
|
|
7
8
|
menuType?: 'default' | 'list';
|
|
8
9
|
menuHorizontalConstraint?: TMaxProp;
|
|
@@ -8,6 +8,7 @@ export type TDropdownContentMenuProps = {
|
|
|
8
8
|
children: ReactNode;
|
|
9
9
|
horizontalConstraint: TMaxProp;
|
|
10
10
|
menuPosition: 'left' | 'right';
|
|
11
|
+
menuMaxHeight?: number;
|
|
11
12
|
isOpen: boolean;
|
|
12
13
|
triggerElementRef: RefObject<HTMLElement>;
|
|
13
14
|
};
|
|
@@ -16,6 +17,7 @@ export type TDropdownListMenuProps = {
|
|
|
16
17
|
children: ReactNode;
|
|
17
18
|
horizontalConstraint: TMaxProp;
|
|
18
19
|
menuPosition: 'left' | 'right';
|
|
20
|
+
menuMaxHeight?: number;
|
|
19
21
|
isOpen: boolean;
|
|
20
22
|
triggerElementRef: RefObject<HTMLElement>;
|
|
21
23
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commercetools-uikit/dropdown-menu",
|
|
3
3
|
"description": "The Dropdown Menu component represents a component that triggers the rendering of a floating menu.",
|
|
4
|
-
"version": "19.
|
|
4
|
+
"version": "19.3.0",
|
|
5
5
|
"bugs": "https://github.com/commercetools/ui-kit/issues",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@babel/runtime": "^7.20.13",
|
|
23
23
|
"@babel/runtime-corejs3": "^7.20.13",
|
|
24
|
-
"@commercetools-uikit/accessible-button": "19.
|
|
25
|
-
"@commercetools-uikit/constraints": "19.
|
|
26
|
-
"@commercetools-uikit/design-system": "19.
|
|
27
|
-
"@commercetools-uikit/hooks": "19.
|
|
28
|
-
"@commercetools-uikit/secondary-button": "19.
|
|
29
|
-
"@commercetools-uikit/spacings-inline": "19.
|
|
30
|
-
"@commercetools-uikit/spacings-stack": "19.
|
|
31
|
-
"@commercetools-uikit/utils": "19.
|
|
24
|
+
"@commercetools-uikit/accessible-button": "19.3.0",
|
|
25
|
+
"@commercetools-uikit/constraints": "19.3.0",
|
|
26
|
+
"@commercetools-uikit/design-system": "19.3.0",
|
|
27
|
+
"@commercetools-uikit/hooks": "19.3.0",
|
|
28
|
+
"@commercetools-uikit/secondary-button": "19.3.0",
|
|
29
|
+
"@commercetools-uikit/spacings-inline": "19.3.0",
|
|
30
|
+
"@commercetools-uikit/spacings-stack": "19.3.0",
|
|
31
|
+
"@commercetools-uikit/utils": "19.3.0",
|
|
32
32
|
"@emotion/react": "^11.10.5",
|
|
33
33
|
"@emotion/styled": "^11.10.5",
|
|
34
34
|
"prop-types": "15.8.1",
|