@commercetools-uikit/dropdown-menu 19.2.0 → 19.3.1
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 +74 -30
- package/dist/commercetools-uikit-dropdown-menu.cjs.prod.js +69 -29
- package/dist/commercetools-uikit-dropdown-menu.esm.js +63 -19
- 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,29 @@ 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+KG51bGwpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudSB3aGVuIGl0IGlzIG9wZW5cbiAgICBpZiAocHJvcHMuaXNPcGVuICYmIHByb3BzLnRyaWdnZXJFbGVtZW50UmVmLmN1cnJlbnQgJiYgbWVudVJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzID1cbiAgICAgICAgcHJvcHMudHJpZ2dlckVsZW1lbnRSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLnRvcCArIHRyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMuaGVpZ2h0XG4gICAgICB9cHhgO1xuICAgICAgaWYgKHByb3BzLm1lbnVQb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5sZWZ0ID0gYCR7dHJpZ2dlckVsZW1lbnRDb29yZGluYXRlcy5sZWZ0fXB4YDtcbiAgICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdyaWdodCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLnJpZ2h0ID0gYCR7XG4gICAgICAgICAgd2luZG93LmlubmVyV2lkdGggLSB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLnJpZ2h0XG4gICAgICAgIH1weGA7XG4gICAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbGVmdCcpO1xuICAgICAgfVxuICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLm1heEhlaWdodCA9IHByb3BzLm1lbnVNYXhIZWlnaHRcbiAgICAgICAgPyBgJHtwcm9wcy5tZW51TWF4SGVpZ2h0fXB4YFxuICAgICAgICA6IGBjYWxjKCR7XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgLVxuICAgICAgICAgICAgKHRyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMudG9wICsgdHJpZ2dlckVsZW1lbnRDb29yZGluYXRlcy5oZWlnaHQpXG4gICAgICAgICAgfXB4IC0gJHttYXJnaW5Ub3B9IC0gJHtib3hTaGFkb3dCb3R0b21TaXplfSlgO1xuICAgIH1cbiAgfSwgW1xuICAgIHByb3BzLmlzT3BlbixcbiAgICBwcm9wcy5tZW51UG9zaXRpb24sXG4gICAgcHJvcHMudHJpZ2dlckVsZW1lbnRSZWYsXG4gICAgcHJvcHMubWVudU1heEhlaWdodCxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2dldERyb3Bkb3duTWVudUJhc2VTdHlsZXMocHJvcHMpfVxuICAgICAgc3R5bGU9e3Byb3BzLmN1c3RvbVN0eWxlc31cbiAgICAgIHJlZj17bWVudVJlZn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFREcm9wZG93bkNvbnRlbnRNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGhvcml6b250YWxDb25zdHJhaW50OiBUTWF4UHJvcDtcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICBtZW51TWF4SGVpZ2h0PzogbnVtYmVyO1xuICBpc09wZW46IGJvb2xlYW47XG4gIHRyaWdnZXJFbGVtZW50UmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xufTtcbmV4cG9ydCBjb25zdCBEcm9wZG93bkNvbnRlbnRNZW51ID0gKHByb3BzOiBURHJvcGRvd25Db250ZW50TWVudVByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPERyb3Bkb3duQmFzZU1lbnVcbiAgICAgIGN1c3RvbVN0eWxlcz17e1xuICAgICAgICBwYWRkaW5nOiBkZXNpZ25Ub2tlbnMuc3BhY2luZzMwLFxuICAgICAgfX1cbiAgICAgIGhvcml6b250YWxDb25zdHJhaW50PXtwcm9wcy5ob3Jpem9udGFsQ29uc3RyYWludH1cbiAgICAgIGlzT3Blbj17cHJvcHMuaXNPcGVufVxuICAgICAgbWVudVBvc2l0aW9uPXtwcm9wcy5tZW51UG9zaXRpb259XG4gICAgICBtZW51TWF4SGVpZ2h0PXtwcm9wcy5tZW51TWF4SGVpZ2h0fVxuICAgICAgdHJpZ2dlckVsZW1lbnRSZWY9e3Byb3BzLnRyaWdnZXJFbGVtZW50UmVmfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0Ryb3Bkb3duQmFzZU1lbnU+XG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBURHJvcGRvd25MaXN0TWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG4gIG1lbnVQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICB0cmlnZ2VyRWxlbWVudFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50Pjtcbn07XG5leHBvcnQgY29uc3QgRHJvcGRvd25MaXN0TWVudSA9IChwcm9wczogVERyb3Bkb3duTGlzdE1lbnVQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxEcm9wZG93bkJhc2VNZW51XG4gICAgICBob3Jpem9udGFsQ29uc3RyYWludD17cHJvcHMuaG9yaXpvbnRhbENvbnN0cmFpbnR9XG4gICAgICBpc09wZW49e3Byb3BzLmlzT3Blbn1cbiAgICAgIG1lbnVQb3NpdGlvbj17cHJvcHMubWVudVBvc2l0aW9ufVxuICAgICAgbWVudU1heEhlaWdodD17cHJvcHMubWVudU1heEhlaWdodH1cbiAgICAgIHRyaWdnZXJFbGVtZW50UmVmPXtwcm9wcy50cmlnZ2VyRWxlbWVudFJlZn1cbiAgICA+XG4gICAgICA8U3BhY2luZ3NTdGFjayBzY2FsZT1cInhzXCI+e3Byb3BzLmNoaWxkcmVufTwvU3BhY2luZ3NTdGFjaz5cbiAgICA8L0Ryb3Bkb3duQmFzZU1lbnU+XG4gICk7XG59O1xuIl19 */");
|
|
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
|
-
const menuElementCoordinates = menuRef.current.getBoundingClientRect();
|
|
61
64
|
menuRef.current.style.top = "".concat(triggerElementCoordinates.top + triggerElementCoordinates.height, "px");
|
|
62
|
-
|
|
65
|
+
if (props.menuPosition === 'left') {
|
|
66
|
+
menuRef.current.style.left = "".concat(triggerElementCoordinates.left, "px");
|
|
67
|
+
menuRef.current.style.removeProperty('right');
|
|
68
|
+
} else {
|
|
69
|
+
menuRef.current.style.right = "".concat(window.innerWidth - triggerElementCoordinates.right, "px");
|
|
70
|
+
menuRef.current.style.removeProperty('left');
|
|
71
|
+
}
|
|
72
|
+
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
73
|
}
|
|
64
|
-
}, [props.isOpen, props.menuPosition, props.triggerElementRef]);
|
|
74
|
+
}, [props.isOpen, props.menuPosition, props.triggerElementRef, props.menuMaxHeight]);
|
|
65
75
|
return jsxRuntime.jsx("div", {
|
|
66
76
|
css: getDropdownMenuBaseStyles(props),
|
|
67
77
|
style: props.customStyles,
|
|
@@ -75,6 +85,7 @@ DropdownBaseMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
75
85
|
horizontalConstraint: _pt__default["default"].any.isRequired,
|
|
76
86
|
isOpen: _pt__default["default"].bool.isRequired,
|
|
77
87
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']).isRequired,
|
|
88
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
78
89
|
triggerElementRef: _pt__default["default"].any.isRequired
|
|
79
90
|
} : {};
|
|
80
91
|
const DropdownContentMenu = props => {
|
|
@@ -85,6 +96,7 @@ const DropdownContentMenu = props => {
|
|
|
85
96
|
horizontalConstraint: props.horizontalConstraint,
|
|
86
97
|
isOpen: props.isOpen,
|
|
87
98
|
menuPosition: props.menuPosition,
|
|
99
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
88
100
|
triggerElementRef: props.triggerElementRef,
|
|
89
101
|
children: props.children
|
|
90
102
|
});
|
|
@@ -93,6 +105,7 @@ DropdownContentMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
93
105
|
children: _pt__default["default"].node.isRequired,
|
|
94
106
|
horizontalConstraint: _pt__default["default"].any.isRequired,
|
|
95
107
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']).isRequired,
|
|
108
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
96
109
|
isOpen: _pt__default["default"].bool.isRequired,
|
|
97
110
|
triggerElementRef: _pt__default["default"].any.isRequired
|
|
98
111
|
} : {};
|
|
@@ -101,6 +114,7 @@ const DropdownListMenu = props => {
|
|
|
101
114
|
horizontalConstraint: props.horizontalConstraint,
|
|
102
115
|
isOpen: props.isOpen,
|
|
103
116
|
menuPosition: props.menuPosition,
|
|
117
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
104
118
|
triggerElementRef: props.triggerElementRef,
|
|
105
119
|
children: jsxRuntime.jsx(SpacingsStack__default["default"], {
|
|
106
120
|
scale: "xs",
|
|
@@ -112,12 +126,13 @@ DropdownListMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
112
126
|
children: _pt__default["default"].node.isRequired,
|
|
113
127
|
horizontalConstraint: _pt__default["default"].any.isRequired,
|
|
114
128
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']).isRequired,
|
|
129
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
115
130
|
isOpen: _pt__default["default"].bool.isRequired,
|
|
116
131
|
triggerElementRef: _pt__default["default"].any.isRequired
|
|
117
132
|
} : {};
|
|
118
133
|
|
|
119
134
|
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 */")];
|
|
135
|
+
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
136
|
}
|
|
122
137
|
function DropdownListMenuItem(props) {
|
|
123
138
|
const _useDropdownMenuConte = useDropdownMenuContext(),
|
|
@@ -136,6 +151,40 @@ function DropdownListMenuItem(props) {
|
|
|
136
151
|
}
|
|
137
152
|
|
|
138
153
|
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)."; }
|
|
154
|
+
function getScrollableParent(element) {
|
|
155
|
+
if (!element) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const overflowY = window.getComputedStyle(element).overflowY;
|
|
159
|
+
const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
|
|
160
|
+
if (isScrollable && element.scrollHeight >= element.clientHeight) {
|
|
161
|
+
return element;
|
|
162
|
+
}
|
|
163
|
+
return getScrollableParent(element.parentElement);
|
|
164
|
+
}
|
|
165
|
+
function useScrollBlock(isOpen, triggerRef) {
|
|
166
|
+
const scrollableParentRef = react.useRef();
|
|
167
|
+
react.useEffect(() => {
|
|
168
|
+
if (!scrollableParentRef.current) {
|
|
169
|
+
scrollableParentRef.current = getScrollableParent(triggerRef.current);
|
|
170
|
+
}
|
|
171
|
+
const scrollableParent = scrollableParentRef.current;
|
|
172
|
+
if (scrollableParent && isOpen) {
|
|
173
|
+
scrollableParent.setAttribute('data-prev-scroll', scrollableParent.style.overflowY);
|
|
174
|
+
scrollableParent.style.overflowY = 'hidden';
|
|
175
|
+
}
|
|
176
|
+
return () => {
|
|
177
|
+
// The cleanup effect runs after the component is unmounted but also everytime
|
|
178
|
+
// the dependency array changes. We need to manage both to manage opening/closing
|
|
179
|
+
// the dropdown but also to manage the the dropdown is opened and the component
|
|
180
|
+
// is unmounted. For instance, when navigating to another page client-side.
|
|
181
|
+
if (scrollableParent && isOpen) {
|
|
182
|
+
const prevScroll = scrollableParent.getAttribute('data-prev-scroll');
|
|
183
|
+
scrollableParent.style.overflowY = prevScroll || '';
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}, [isOpen, scrollableParentRef, triggerRef]);
|
|
187
|
+
}
|
|
139
188
|
const defaultProps = {
|
|
140
189
|
menuHorizontalConstraint: 'auto',
|
|
141
190
|
menuPosition: 'left',
|
|
@@ -152,7 +201,7 @@ const Container = /*#__PURE__*/_styled__default["default"]("div", process.env.NO
|
|
|
152
201
|
} : {
|
|
153
202
|
name: "1nrevy2",
|
|
154
203
|
styles: "position:relative;display:inline-block",
|
|
155
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
204
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9HNEIiLCJmaWxlIjoiZHJvcGRvd24tbWVudS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHR5cGUgUmVhY3RFbGVtZW50LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvZ2dsZVN0YXRlIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaG9va3MnO1xuaW1wb3J0IHsgdHlwZSBUTWF4UHJvcCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2NvbnN0cmFpbnRzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBEcm9wZG93bk1lbnVDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgRHJvcGRvd25UcmlnZ2VyIGZyb20gJy4vdHJpZ2dlcic7XG5pbXBvcnQge1xuICBEcm9wZG93bkNvbnRlbnRNZW51LFxuICBEcm9wZG93bkxpc3RNZW51LFxuICBEcm9wZG93bkxpc3RNZW51SXRlbSxcbn0gZnJvbSAnLi9tZW51JztcblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTWVudVByb3BzID0ge1xuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAqL1xuICBtZW51UG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgbWVudSBpbiBwaXhlbHMuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtYXggaGVpZ2h0IHdpbGwgYmUgdGhlIGF2YWlsYWJsZSBzcGFjZSBiZXR3ZWVuIHRoZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcnMgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgdHJpZ2dlckVsZW1lbnQ6IFJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBtZW51LlxuICAgKiBUaGUgJ2RlZmF1bHQnIHR5cGUganVzdCByZW5kZXJzIGEgZHJvcGRvd24gY29udGFpbmVyIGJ1dCB0aGUgJ2xpc3QnIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBEcm9wZG93bk1lbnUuTGlzdE1lbnVJdGVtIGNvbXBvbmVudC5cbiAgICovXG4gIG1lbnVUeXBlPzogJ2RlZmF1bHQnIHwgJ2xpc3QnO1xuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgY29uc3RyYWludCBvZiB0aGUgbWVudS5cbiAgICovXG4gIG1lbnVIb3Jpem9udGFsQ29uc3RyYWludD86IFRNYXhQcm9wO1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZO1xuICBjb25zdCBpc1Njcm9sbGFibGUgPSBvdmVyZmxvd1kgIT09ICd2aXNpYmxlJyAmJiBvdmVyZmxvd1kgIT09ICdoaWRkZW4nO1xuICBpZiAoaXNTY3JvbGxhYmxlICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID49IGVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGxCbG9jayhpc09wZW46IGJvb2xlYW4sIHRyaWdnZXJSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4pIHtcbiAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNjcm9sbGFibGVQYXJlbnRSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudFJlZi5jdXJyZW50ID0gZ2V0U2Nyb2xsYWJsZVBhcmVudCh0cmlnZ2VyUmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3VycmVudDogc2Nyb2xsYWJsZVBhcmVudCB9ID0gc2Nyb2xsYWJsZVBhcmVudFJlZjtcbiAgICBpZiAoc2Nyb2xsYWJsZVBhcmVudCAmJiBpc09wZW4pIHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1wcmV2LXNjcm9sbCcsXG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnQuc3R5bGUub3ZlcmZsb3dZXG4gICAgICApO1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIFRoZSBjbGVhbnVwIGVmZmVjdCBydW5zIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJ1dCBhbHNvIGV2ZXJ5dGltZVxuICAgICAgLy8gdGhlIGRlcGVuZGVuY3kgYXJyYXkgY2hhbmdlcy4gV2UgbmVlZCB0byBtYW5hZ2UgYm90aCB0byBtYW5hZ2Ugb3BlbmluZy9jbG9zaW5nXG4gICAgICAvLyB0aGUgZHJvcGRvd24gYnV0IGFsc28gdG8gbWFuYWdlIHRoZSB0aGUgZHJvcGRvd24gaXMgb3BlbmVkIGFuZCB0aGUgY29tcG9uZW50XG4gICAgICAvLyBpcyB1bm1vdW50ZWQuIEZvciBpbnN0YW5jZSwgd2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgcGFnZSBjbGllbnQtc2lkZS5cbiAgICAgIGlmIChzY3JvbGxhYmxlUGFyZW50ICYmIGlzT3Blbikge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldi1zY3JvbGwnKTtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSBwcmV2U2Nyb2xsIHx8ICcnO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtpc09wZW4sIHNjcm9sbGFibGVQYXJlbnRSZWYsIHRyaWdnZXJSZWZdKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzOiBQaWNrPFxuICBURHJvcGRvd25NZW51UHJvcHMsXG4gICdtZW51UG9zaXRpb24nIHwgJ21lbnVUeXBlJyB8ICdtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQnXG4+ID0ge1xuICBtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQ6ICdhdXRvJyxcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcsXG4gIG1lbnVUeXBlOiAnZGVmYXVsdCcsXG59O1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbmA7XG5cbmZ1bmN0aW9uIERyb3Bkb3duTWVudShwcm9wczogVERyb3Bkb3duTWVudVByb3BzKSB7XG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZV0gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIC8vIFdlIHVzZSB0aGUgY29udGV4dCBzbyBjaGlsZHJlbiBjYW4gdG9nZ2xlIHRoZSBkcm9wZG93blxuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaXNPcGVuLFxuICAgICAgdG9nZ2xlLFxuICAgIH0pLFxuICAgIFtpc09wZW4sIHRvZ2dsZV1cbiAgKTtcbiAgY29uc3QgTWVudSA9XG4gICAgcHJvcHMubWVudVR5cGUgPT09ICdkZWZhdWx0JyA/IERyb3Bkb3duQ29udGVudE1lbnUgOiBEcm9wZG93bkxpc3RNZW51O1xuXG4gIC8vIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgb2YgaXRcbiAgY29uc3QgaGFuZGxlR2xvYmFsQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgICAgaWYgKFxuICAgICAgICBpc09wZW4gJiZcbiAgICAgICAgdHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0cmlnZ2VyRWxlbWVudCAmJlxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhdHJpZ2dlckVsZW1lbnQucGFyZW50RWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgKSB7XG4gICAgICAgIHRvZ2dsZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdHJpZ2dlclJlZiwgdG9nZ2xlLCBpc09wZW5dXG4gICk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlR2xvYmFsQ2xpY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVHbG9iYWxDbGljayk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUdsb2JhbENsaWNrXSk7XG5cbiAgLy8gQmxvY2sgc2Nyb2xsaW5nIHdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4uXG4gIC8vIFdlIGRvIHRoaXMgdG8gYXZvaWQgcmVxdWlyaW5nIGRyb3Bkb3duIHJlcmVuZGVyaW5nIHdoaWxlIHRoZSB1c2VyIHNjcm9sbHMuXG4gIHVzZVNjcm9sbEJsb2NrKGlzT3BlbiwgdHJpZ2dlclJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8RHJvcGRvd25UcmlnZ2VyIG9uQ2xpY2s9e3RvZ2dsZX0gcmVmPXt0cmlnZ2VyUmVmfT5cbiAgICAgICAgICB7cHJvcHMudHJpZ2dlckVsZW1lbnR9XG4gICAgICAgIDwvRHJvcGRvd25UcmlnZ2VyPlxuXG4gICAgICAgIDxNZW51XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9e3Byb3BzLm1lbnVIb3Jpem9udGFsQ29uc3RyYWludCF9XG4gICAgICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICAgICAgbWVudVBvc2l0aW9uPXtwcm9wcy5tZW51UG9zaXRpb24hfVxuICAgICAgICAgIG1lbnVNYXhIZWlnaHQ9e3Byb3BzLm1lbnVNYXhIZWlnaHR9XG4gICAgICAgICAgdHJpZ2dlckVsZW1lbnRSZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgID5cbiAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvTWVudT5cbiAgICAgIDwvQ29udGFpbmVyPlxuICAgIDwvRHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbkRyb3Bkb3duTWVudS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbkRyb3Bkb3duTWVudS5MaXN0TWVudUl0ZW0gPSBEcm9wZG93bkxpc3RNZW51SXRlbTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25NZW51O1xuIl19 */",
|
|
156
205
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
157
206
|
});
|
|
158
207
|
function DropdownMenu(props) {
|
|
@@ -160,40 +209,33 @@ function DropdownMenu(props) {
|
|
|
160
209
|
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
161
210
|
isOpen = _useToggleState2[0],
|
|
162
211
|
toggle = _useToggleState2[1];
|
|
163
|
-
const triggerRef =
|
|
212
|
+
const triggerRef = react.useRef(null);
|
|
164
213
|
|
|
165
214
|
// We use the context so children can toggle the dropdown
|
|
166
|
-
const context =
|
|
215
|
+
const context = react.useMemo(() => ({
|
|
167
216
|
isOpen,
|
|
168
217
|
toggle
|
|
169
218
|
}), [isOpen, toggle]);
|
|
170
219
|
const Menu = props.menuType === 'default' ? DropdownContentMenu : DropdownListMenu;
|
|
171
220
|
|
|
172
221
|
// Close the dropdown when clicking outside of it
|
|
173
|
-
const handleGlobalClick =
|
|
222
|
+
const handleGlobalClick = react.useCallback(event => {
|
|
174
223
|
var _triggerElement$paren;
|
|
175
224
|
const triggerElement = triggerRef.current;
|
|
176
225
|
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
226
|
toggle(false);
|
|
178
227
|
}
|
|
179
228
|
}, [triggerRef, toggle, isOpen]);
|
|
180
|
-
|
|
229
|
+
react.useEffect(() => {
|
|
181
230
|
window.addEventListener('click', handleGlobalClick);
|
|
182
231
|
return () => {
|
|
183
232
|
window.removeEventListener('click', handleGlobalClick);
|
|
184
233
|
};
|
|
185
234
|
}, [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]);
|
|
235
|
+
|
|
236
|
+
// Block scrolling when the dropdown is open.
|
|
237
|
+
// We do this to avoid requiring dropdown rerendering while the user scrolls.
|
|
238
|
+
useScrollBlock(isOpen, triggerRef);
|
|
197
239
|
return jsxRuntime.jsx(DropdownMenuContext.Provider, {
|
|
198
240
|
value: context,
|
|
199
241
|
children: jsxRuntime.jsxs(Container, {
|
|
@@ -205,6 +247,7 @@ function DropdownMenu(props) {
|
|
|
205
247
|
horizontalConstraint: props.menuHorizontalConstraint,
|
|
206
248
|
isOpen: isOpen,
|
|
207
249
|
menuPosition: props.menuPosition,
|
|
250
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
208
251
|
triggerElementRef: triggerRef,
|
|
209
252
|
children: props.children
|
|
210
253
|
})]
|
|
@@ -213,6 +256,7 @@ function DropdownMenu(props) {
|
|
|
213
256
|
}
|
|
214
257
|
DropdownMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
215
258
|
menuPosition: _pt__default["default"].oneOf(['left', 'right']),
|
|
259
|
+
menuMaxHeight: _pt__default["default"].number,
|
|
216
260
|
triggerElement: _pt__default["default"].element.isRequired,
|
|
217
261
|
menuType: _pt__default["default"].oneOf(['default', 'list']),
|
|
218
262
|
menuHorizontalConstraint: _pt__default["default"].any,
|
|
@@ -222,7 +266,7 @@ DropdownMenu.defaultProps = defaultProps;
|
|
|
222
266
|
DropdownMenu.ListMenuItem = DropdownListMenuItem;
|
|
223
267
|
|
|
224
268
|
// NOTE: This string will be replaced on build time with the package version.
|
|
225
|
-
var version = "19.
|
|
269
|
+
var version = "19.3.1";
|
|
226
270
|
|
|
227
271
|
exports["default"] = DropdownMenu;
|
|
228
272
|
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,29 @@ 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
|
-
const menuElementCoordinates = menuRef.current.getBoundingClientRect();
|
|
60
63
|
menuRef.current.style.top = "".concat(triggerElementCoordinates.top + triggerElementCoordinates.height, "px");
|
|
61
|
-
|
|
64
|
+
if (props.menuPosition === 'left') {
|
|
65
|
+
menuRef.current.style.left = "".concat(triggerElementCoordinates.left, "px");
|
|
66
|
+
menuRef.current.style.removeProperty('right');
|
|
67
|
+
} else {
|
|
68
|
+
menuRef.current.style.right = "".concat(window.innerWidth - triggerElementCoordinates.right, "px");
|
|
69
|
+
menuRef.current.style.removeProperty('left');
|
|
70
|
+
}
|
|
71
|
+
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
72
|
}
|
|
63
|
-
}, [props.isOpen, props.menuPosition, props.triggerElementRef]);
|
|
73
|
+
}, [props.isOpen, props.menuPosition, props.triggerElementRef, props.menuMaxHeight]);
|
|
64
74
|
return jsxRuntime.jsx("div", {
|
|
65
75
|
css: getDropdownMenuBaseStyles(props),
|
|
66
76
|
style: props.customStyles,
|
|
@@ -77,6 +87,7 @@ const DropdownContentMenu = props => {
|
|
|
77
87
|
horizontalConstraint: props.horizontalConstraint,
|
|
78
88
|
isOpen: props.isOpen,
|
|
79
89
|
menuPosition: props.menuPosition,
|
|
90
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
80
91
|
triggerElementRef: props.triggerElementRef,
|
|
81
92
|
children: props.children
|
|
82
93
|
});
|
|
@@ -87,6 +98,7 @@ const DropdownListMenu = props => {
|
|
|
87
98
|
horizontalConstraint: props.horizontalConstraint,
|
|
88
99
|
isOpen: props.isOpen,
|
|
89
100
|
menuPosition: props.menuPosition,
|
|
101
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
90
102
|
triggerElementRef: props.triggerElementRef,
|
|
91
103
|
children: jsxRuntime.jsx(SpacingsStack__default["default"], {
|
|
92
104
|
scale: "xs",
|
|
@@ -97,7 +109,7 @@ const DropdownListMenu = props => {
|
|
|
97
109
|
DropdownListMenu.propTypes = {};
|
|
98
110
|
|
|
99
111
|
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, ";" + ("" ), "" )];
|
|
112
|
+
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
113
|
}
|
|
102
114
|
function DropdownListMenuItem(props) {
|
|
103
115
|
const _useDropdownMenuConte = useDropdownMenuContext(),
|
|
@@ -115,6 +127,40 @@ function DropdownListMenuItem(props) {
|
|
|
115
127
|
});
|
|
116
128
|
}
|
|
117
129
|
|
|
130
|
+
function getScrollableParent(element) {
|
|
131
|
+
if (!element) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const overflowY = window.getComputedStyle(element).overflowY;
|
|
135
|
+
const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
|
|
136
|
+
if (isScrollable && element.scrollHeight >= element.clientHeight) {
|
|
137
|
+
return element;
|
|
138
|
+
}
|
|
139
|
+
return getScrollableParent(element.parentElement);
|
|
140
|
+
}
|
|
141
|
+
function useScrollBlock(isOpen, triggerRef) {
|
|
142
|
+
const scrollableParentRef = react.useRef();
|
|
143
|
+
react.useEffect(() => {
|
|
144
|
+
if (!scrollableParentRef.current) {
|
|
145
|
+
scrollableParentRef.current = getScrollableParent(triggerRef.current);
|
|
146
|
+
}
|
|
147
|
+
const scrollableParent = scrollableParentRef.current;
|
|
148
|
+
if (scrollableParent && isOpen) {
|
|
149
|
+
scrollableParent.setAttribute('data-prev-scroll', scrollableParent.style.overflowY);
|
|
150
|
+
scrollableParent.style.overflowY = 'hidden';
|
|
151
|
+
}
|
|
152
|
+
return () => {
|
|
153
|
+
// The cleanup effect runs after the component is unmounted but also everytime
|
|
154
|
+
// the dependency array changes. We need to manage both to manage opening/closing
|
|
155
|
+
// the dropdown but also to manage the the dropdown is opened and the component
|
|
156
|
+
// is unmounted. For instance, when navigating to another page client-side.
|
|
157
|
+
if (scrollableParent && isOpen) {
|
|
158
|
+
const prevScroll = scrollableParent.getAttribute('data-prev-scroll');
|
|
159
|
+
scrollableParent.style.overflowY = prevScroll || '';
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}, [isOpen, scrollableParentRef, triggerRef]);
|
|
163
|
+
}
|
|
118
164
|
const defaultProps = {
|
|
119
165
|
menuHorizontalConstraint: 'auto',
|
|
120
166
|
menuPosition: 'left',
|
|
@@ -131,40 +177,33 @@ function DropdownMenu(props) {
|
|
|
131
177
|
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
132
178
|
isOpen = _useToggleState2[0],
|
|
133
179
|
toggle = _useToggleState2[1];
|
|
134
|
-
const triggerRef =
|
|
180
|
+
const triggerRef = react.useRef(null);
|
|
135
181
|
|
|
136
182
|
// We use the context so children can toggle the dropdown
|
|
137
|
-
const context =
|
|
183
|
+
const context = react.useMemo(() => ({
|
|
138
184
|
isOpen,
|
|
139
185
|
toggle
|
|
140
186
|
}), [isOpen, toggle]);
|
|
141
187
|
const Menu = props.menuType === 'default' ? DropdownContentMenu : DropdownListMenu;
|
|
142
188
|
|
|
143
189
|
// Close the dropdown when clicking outside of it
|
|
144
|
-
const handleGlobalClick =
|
|
190
|
+
const handleGlobalClick = react.useCallback(event => {
|
|
145
191
|
var _triggerElement$paren;
|
|
146
192
|
const triggerElement = triggerRef.current;
|
|
147
193
|
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
194
|
toggle(false);
|
|
149
195
|
}
|
|
150
196
|
}, [triggerRef, toggle, isOpen]);
|
|
151
|
-
|
|
197
|
+
react.useEffect(() => {
|
|
152
198
|
window.addEventListener('click', handleGlobalClick);
|
|
153
199
|
return () => {
|
|
154
200
|
window.removeEventListener('click', handleGlobalClick);
|
|
155
201
|
};
|
|
156
202
|
}, [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]);
|
|
203
|
+
|
|
204
|
+
// Block scrolling when the dropdown is open.
|
|
205
|
+
// We do this to avoid requiring dropdown rerendering while the user scrolls.
|
|
206
|
+
useScrollBlock(isOpen, triggerRef);
|
|
168
207
|
return jsxRuntime.jsx(DropdownMenuContext.Provider, {
|
|
169
208
|
value: context,
|
|
170
209
|
children: jsxRuntime.jsxs(Container, {
|
|
@@ -176,6 +215,7 @@ function DropdownMenu(props) {
|
|
|
176
215
|
horizontalConstraint: props.menuHorizontalConstraint,
|
|
177
216
|
isOpen: isOpen,
|
|
178
217
|
menuPosition: props.menuPosition,
|
|
218
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
179
219
|
triggerElementRef: triggerRef,
|
|
180
220
|
children: props.children
|
|
181
221
|
})]
|
|
@@ -187,7 +227,7 @@ DropdownMenu.defaultProps = defaultProps;
|
|
|
187
227
|
DropdownMenu.ListMenuItem = DropdownListMenuItem;
|
|
188
228
|
|
|
189
229
|
// NOTE: This string will be replaced on build time with the package version.
|
|
190
|
-
var version = "19.
|
|
230
|
+
var version = "19.3.1";
|
|
191
231
|
|
|
192
232
|
exports["default"] = DropdownMenu;
|
|
193
233
|
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,29 @@ 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+KG51bGwpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudSB3aGVuIGl0IGlzIG9wZW5cbiAgICBpZiAocHJvcHMuaXNPcGVuICYmIHByb3BzLnRyaWdnZXJFbGVtZW50UmVmLmN1cnJlbnQgJiYgbWVudVJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzID1cbiAgICAgICAgcHJvcHMudHJpZ2dlckVsZW1lbnRSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLnRvcCArIHRyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMuaGVpZ2h0XG4gICAgICB9cHhgO1xuICAgICAgaWYgKHByb3BzLm1lbnVQb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5sZWZ0ID0gYCR7dHJpZ2dlckVsZW1lbnRDb29yZGluYXRlcy5sZWZ0fXB4YDtcbiAgICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdyaWdodCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLnJpZ2h0ID0gYCR7XG4gICAgICAgICAgd2luZG93LmlubmVyV2lkdGggLSB0cmlnZ2VyRWxlbWVudENvb3JkaW5hdGVzLnJpZ2h0XG4gICAgICAgIH1weGA7XG4gICAgICAgIG1lbnVSZWYuY3VycmVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbGVmdCcpO1xuICAgICAgfVxuICAgICAgbWVudVJlZi5jdXJyZW50LnN0eWxlLm1heEhlaWdodCA9IHByb3BzLm1lbnVNYXhIZWlnaHRcbiAgICAgICAgPyBgJHtwcm9wcy5tZW51TWF4SGVpZ2h0fXB4YFxuICAgICAgICA6IGBjYWxjKCR7XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgLVxuICAgICAgICAgICAgKHRyaWdnZXJFbGVtZW50Q29vcmRpbmF0ZXMudG9wICsgdHJpZ2dlckVsZW1lbnRDb29yZGluYXRlcy5oZWlnaHQpXG4gICAgICAgICAgfXB4IC0gJHttYXJnaW5Ub3B9IC0gJHtib3hTaGFkb3dCb3R0b21TaXplfSlgO1xuICAgIH1cbiAgfSwgW1xuICAgIHByb3BzLmlzT3BlbixcbiAgICBwcm9wcy5tZW51UG9zaXRpb24sXG4gICAgcHJvcHMudHJpZ2dlckVsZW1lbnRSZWYsXG4gICAgcHJvcHMubWVudU1heEhlaWdodCxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2dldERyb3Bkb3duTWVudUJhc2VTdHlsZXMocHJvcHMpfVxuICAgICAgc3R5bGU9e3Byb3BzLmN1c3RvbVN0eWxlc31cbiAgICAgIHJlZj17bWVudVJlZn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFREcm9wZG93bkNvbnRlbnRNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGhvcml6b250YWxDb25zdHJhaW50OiBUTWF4UHJvcDtcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICBtZW51TWF4SGVpZ2h0PzogbnVtYmVyO1xuICBpc09wZW46IGJvb2xlYW47XG4gIHRyaWdnZXJFbGVtZW50UmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xufTtcbmV4cG9ydCBjb25zdCBEcm9wZG93bkNvbnRlbnRNZW51ID0gKHByb3BzOiBURHJvcGRvd25Db250ZW50TWVudVByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPERyb3Bkb3duQmFzZU1lbnVcbiAgICAgIGN1c3RvbVN0eWxlcz17e1xuICAgICAgICBwYWRkaW5nOiBkZXNpZ25Ub2tlbnMuc3BhY2luZzMwLFxuICAgICAgfX1cbiAgICAgIGhvcml6b250YWxDb25zdHJhaW50PXtwcm9wcy5ob3Jpem9udGFsQ29uc3RyYWludH1cbiAgICAgIGlzT3Blbj17cHJvcHMuaXNPcGVufVxuICAgICAgbWVudVBvc2l0aW9uPXtwcm9wcy5tZW51UG9zaXRpb259XG4gICAgICBtZW51TWF4SGVpZ2h0PXtwcm9wcy5tZW51TWF4SGVpZ2h0fVxuICAgICAgdHJpZ2dlckVsZW1lbnRSZWY9e3Byb3BzLnRyaWdnZXJFbGVtZW50UmVmfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0Ryb3Bkb3duQmFzZU1lbnU+XG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBURHJvcGRvd25MaXN0TWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBob3Jpem9udGFsQ29uc3RyYWludDogVE1heFByb3A7XG4gIG1lbnVQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICB0cmlnZ2VyRWxlbWVudFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50Pjtcbn07XG5leHBvcnQgY29uc3QgRHJvcGRvd25MaXN0TWVudSA9IChwcm9wczogVERyb3Bkb3duTGlzdE1lbnVQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxEcm9wZG93bkJhc2VNZW51XG4gICAgICBob3Jpem9udGFsQ29uc3RyYWludD17cHJvcHMuaG9yaXpvbnRhbENvbnN0cmFpbnR9XG4gICAgICBpc09wZW49e3Byb3BzLmlzT3Blbn1cbiAgICAgIG1lbnVQb3NpdGlvbj17cHJvcHMubWVudVBvc2l0aW9ufVxuICAgICAgbWVudU1heEhlaWdodD17cHJvcHMubWVudU1heEhlaWdodH1cbiAgICAgIHRyaWdnZXJFbGVtZW50UmVmPXtwcm9wcy50cmlnZ2VyRWxlbWVudFJlZn1cbiAgICA+XG4gICAgICA8U3BhY2luZ3NTdGFjayBzY2FsZT1cInhzXCI+e3Byb3BzLmNoaWxkcmVufTwvU3BhY2luZ3NTdGFjaz5cbiAgICA8L0Ryb3Bkb3duQmFzZU1lbnU+XG4gICk7XG59O1xuIl19 */");
|
|
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
|
-
const menuElementCoordinates = menuRef.current.getBoundingClientRect();
|
|
48
51
|
menuRef.current.style.top = "".concat(triggerElementCoordinates.top + triggerElementCoordinates.height, "px");
|
|
49
|
-
|
|
52
|
+
if (props.menuPosition === 'left') {
|
|
53
|
+
menuRef.current.style.left = "".concat(triggerElementCoordinates.left, "px");
|
|
54
|
+
menuRef.current.style.removeProperty('right');
|
|
55
|
+
} else {
|
|
56
|
+
menuRef.current.style.right = "".concat(window.innerWidth - triggerElementCoordinates.right, "px");
|
|
57
|
+
menuRef.current.style.removeProperty('left');
|
|
58
|
+
}
|
|
59
|
+
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
60
|
}
|
|
51
|
-
}, [props.isOpen, props.menuPosition, props.triggerElementRef]);
|
|
61
|
+
}, [props.isOpen, props.menuPosition, props.triggerElementRef, props.menuMaxHeight]);
|
|
52
62
|
return jsx("div", {
|
|
53
63
|
css: getDropdownMenuBaseStyles(props),
|
|
54
64
|
style: props.customStyles,
|
|
@@ -62,6 +72,7 @@ DropdownBaseMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
62
72
|
horizontalConstraint: _pt.any.isRequired,
|
|
63
73
|
isOpen: _pt.bool.isRequired,
|
|
64
74
|
menuPosition: _pt.oneOf(['left', 'right']).isRequired,
|
|
75
|
+
menuMaxHeight: _pt.number,
|
|
65
76
|
triggerElementRef: _pt.any.isRequired
|
|
66
77
|
} : {};
|
|
67
78
|
const DropdownContentMenu = props => {
|
|
@@ -72,6 +83,7 @@ const DropdownContentMenu = props => {
|
|
|
72
83
|
horizontalConstraint: props.horizontalConstraint,
|
|
73
84
|
isOpen: props.isOpen,
|
|
74
85
|
menuPosition: props.menuPosition,
|
|
86
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
75
87
|
triggerElementRef: props.triggerElementRef,
|
|
76
88
|
children: props.children
|
|
77
89
|
});
|
|
@@ -80,6 +92,7 @@ DropdownContentMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
80
92
|
children: _pt.node.isRequired,
|
|
81
93
|
horizontalConstraint: _pt.any.isRequired,
|
|
82
94
|
menuPosition: _pt.oneOf(['left', 'right']).isRequired,
|
|
95
|
+
menuMaxHeight: _pt.number,
|
|
83
96
|
isOpen: _pt.bool.isRequired,
|
|
84
97
|
triggerElementRef: _pt.any.isRequired
|
|
85
98
|
} : {};
|
|
@@ -88,6 +101,7 @@ const DropdownListMenu = props => {
|
|
|
88
101
|
horizontalConstraint: props.horizontalConstraint,
|
|
89
102
|
isOpen: props.isOpen,
|
|
90
103
|
menuPosition: props.menuPosition,
|
|
104
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
91
105
|
triggerElementRef: props.triggerElementRef,
|
|
92
106
|
children: jsx(SpacingsStack, {
|
|
93
107
|
scale: "xs",
|
|
@@ -99,6 +113,7 @@ DropdownListMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
99
113
|
children: _pt.node.isRequired,
|
|
100
114
|
horizontalConstraint: _pt.any.isRequired,
|
|
101
115
|
menuPosition: _pt.oneOf(['left', 'right']).isRequired,
|
|
116
|
+
menuMaxHeight: _pt.number,
|
|
102
117
|
isOpen: _pt.bool.isRequired,
|
|
103
118
|
triggerElementRef: _pt.any.isRequired
|
|
104
119
|
} : {};
|
|
@@ -123,6 +138,40 @@ function DropdownListMenuItem(props) {
|
|
|
123
138
|
}
|
|
124
139
|
|
|
125
140
|
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)."; }
|
|
141
|
+
function getScrollableParent(element) {
|
|
142
|
+
if (!element) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
const overflowY = window.getComputedStyle(element).overflowY;
|
|
146
|
+
const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
|
|
147
|
+
if (isScrollable && element.scrollHeight >= element.clientHeight) {
|
|
148
|
+
return element;
|
|
149
|
+
}
|
|
150
|
+
return getScrollableParent(element.parentElement);
|
|
151
|
+
}
|
|
152
|
+
function useScrollBlock(isOpen, triggerRef) {
|
|
153
|
+
const scrollableParentRef = useRef();
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
if (!scrollableParentRef.current) {
|
|
156
|
+
scrollableParentRef.current = getScrollableParent(triggerRef.current);
|
|
157
|
+
}
|
|
158
|
+
const scrollableParent = scrollableParentRef.current;
|
|
159
|
+
if (scrollableParent && isOpen) {
|
|
160
|
+
scrollableParent.setAttribute('data-prev-scroll', scrollableParent.style.overflowY);
|
|
161
|
+
scrollableParent.style.overflowY = 'hidden';
|
|
162
|
+
}
|
|
163
|
+
return () => {
|
|
164
|
+
// The cleanup effect runs after the component is unmounted but also everytime
|
|
165
|
+
// the dependency array changes. We need to manage both to manage opening/closing
|
|
166
|
+
// the dropdown but also to manage the the dropdown is opened and the component
|
|
167
|
+
// is unmounted. For instance, when navigating to another page client-side.
|
|
168
|
+
if (scrollableParent && isOpen) {
|
|
169
|
+
const prevScroll = scrollableParent.getAttribute('data-prev-scroll');
|
|
170
|
+
scrollableParent.style.overflowY = prevScroll || '';
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}, [isOpen, scrollableParentRef, triggerRef]);
|
|
174
|
+
}
|
|
126
175
|
const defaultProps = {
|
|
127
176
|
menuHorizontalConstraint: 'auto',
|
|
128
177
|
menuPosition: 'left',
|
|
@@ -139,7 +188,7 @@ const Container = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "producti
|
|
|
139
188
|
} : {
|
|
140
189
|
name: "1nrevy2",
|
|
141
190
|
styles: "position:relative;display:inline-block",
|
|
142
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
191
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9HNEIiLCJmaWxlIjoiZHJvcGRvd24tbWVudS50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHR5cGUgUmVhY3RFbGVtZW50LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvZ2dsZVN0YXRlIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaG9va3MnO1xuaW1wb3J0IHsgdHlwZSBUTWF4UHJvcCB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2NvbnN0cmFpbnRzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBEcm9wZG93bk1lbnVDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgRHJvcGRvd25UcmlnZ2VyIGZyb20gJy4vdHJpZ2dlcic7XG5pbXBvcnQge1xuICBEcm9wZG93bkNvbnRlbnRNZW51LFxuICBEcm9wZG93bkxpc3RNZW51LFxuICBEcm9wZG93bkxpc3RNZW51SXRlbSxcbn0gZnJvbSAnLi9tZW51JztcblxuZXhwb3J0IHR5cGUgVERyb3Bkb3duTWVudVByb3BzID0ge1xuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAqL1xuICBtZW51UG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogVGhlIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgbWVudSBpbiBwaXhlbHMuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtYXggaGVpZ2h0IHdpbGwgYmUgdGhlIGF2YWlsYWJsZSBzcGFjZSBiZXR3ZWVuIHRoZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgbWVudU1heEhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcnMgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgdHJpZ2dlckVsZW1lbnQ6IFJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBtZW51LlxuICAgKiBUaGUgJ2RlZmF1bHQnIHR5cGUganVzdCByZW5kZXJzIGEgZHJvcGRvd24gY29udGFpbmVyIGJ1dCB0aGUgJ2xpc3QnIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBEcm9wZG93bk1lbnUuTGlzdE1lbnVJdGVtIGNvbXBvbmVudC5cbiAgICovXG4gIG1lbnVUeXBlPzogJ2RlZmF1bHQnIHwgJ2xpc3QnO1xuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgY29uc3RyYWludCBvZiB0aGUgbWVudS5cbiAgICovXG4gIG1lbnVIb3Jpem9udGFsQ29uc3RyYWludD86IFRNYXhQcm9wO1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3ZlcmZsb3dZID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZO1xuICBjb25zdCBpc1Njcm9sbGFibGUgPSBvdmVyZmxvd1kgIT09ICd2aXNpYmxlJyAmJiBvdmVyZmxvd1kgIT09ICdoaWRkZW4nO1xuICBpZiAoaXNTY3JvbGxhYmxlICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID49IGVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGxCbG9jayhpc09wZW46IGJvb2xlYW4sIHRyaWdnZXJSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4pIHtcbiAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNjcm9sbGFibGVQYXJlbnRSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudFJlZi5jdXJyZW50ID0gZ2V0U2Nyb2xsYWJsZVBhcmVudCh0cmlnZ2VyUmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3VycmVudDogc2Nyb2xsYWJsZVBhcmVudCB9ID0gc2Nyb2xsYWJsZVBhcmVudFJlZjtcbiAgICBpZiAoc2Nyb2xsYWJsZVBhcmVudCAmJiBpc09wZW4pIHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAnZGF0YS1wcmV2LXNjcm9sbCcsXG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnQuc3R5bGUub3ZlcmZsb3dZXG4gICAgICApO1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIFRoZSBjbGVhbnVwIGVmZmVjdCBydW5zIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJ1dCBhbHNvIGV2ZXJ5dGltZVxuICAgICAgLy8gdGhlIGRlcGVuZGVuY3kgYXJyYXkgY2hhbmdlcy4gV2UgbmVlZCB0byBtYW5hZ2UgYm90aCB0byBtYW5hZ2Ugb3BlbmluZy9jbG9zaW5nXG4gICAgICAvLyB0aGUgZHJvcGRvd24gYnV0IGFsc28gdG8gbWFuYWdlIHRoZSB0aGUgZHJvcGRvd24gaXMgb3BlbmVkIGFuZCB0aGUgY29tcG9uZW50XG4gICAgICAvLyBpcyB1bm1vdW50ZWQuIEZvciBpbnN0YW5jZSwgd2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgcGFnZSBjbGllbnQtc2lkZS5cbiAgICAgIGlmIChzY3JvbGxhYmxlUGFyZW50ICYmIGlzT3Blbikge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldi1zY3JvbGwnKTtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudC5zdHlsZS5vdmVyZmxvd1kgPSBwcmV2U2Nyb2xsIHx8ICcnO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtpc09wZW4sIHNjcm9sbGFibGVQYXJlbnRSZWYsIHRyaWdnZXJSZWZdKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzOiBQaWNrPFxuICBURHJvcGRvd25NZW51UHJvcHMsXG4gICdtZW51UG9zaXRpb24nIHwgJ21lbnVUeXBlJyB8ICdtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQnXG4+ID0ge1xuICBtZW51SG9yaXpvbnRhbENvbnN0cmFpbnQ6ICdhdXRvJyxcbiAgbWVudVBvc2l0aW9uOiAnbGVmdCcsXG4gIG1lbnVUeXBlOiAnZGVmYXVsdCcsXG59O1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbmA7XG5cbmZ1bmN0aW9uIERyb3Bkb3duTWVudShwcm9wczogVERyb3Bkb3duTWVudVByb3BzKSB7XG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZV0gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIC8vIFdlIHVzZSB0aGUgY29udGV4dCBzbyBjaGlsZHJlbiBjYW4gdG9nZ2xlIHRoZSBkcm9wZG93blxuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaXNPcGVuLFxuICAgICAgdG9nZ2xlLFxuICAgIH0pLFxuICAgIFtpc09wZW4sIHRvZ2dsZV1cbiAgKTtcbiAgY29uc3QgTWVudSA9XG4gICAgcHJvcHMubWVudVR5cGUgPT09ICdkZWZhdWx0JyA/IERyb3Bkb3duQ29udGVudE1lbnUgOiBEcm9wZG93bkxpc3RNZW51O1xuXG4gIC8vIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgb2YgaXRcbiAgY29uc3QgaGFuZGxlR2xvYmFsQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgICAgaWYgKFxuICAgICAgICBpc09wZW4gJiZcbiAgICAgICAgdHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0cmlnZ2VyRWxlbWVudCAmJlxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhdHJpZ2dlckVsZW1lbnQucGFyZW50RWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgKSB7XG4gICAgICAgIHRvZ2dsZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdHJpZ2dlclJlZiwgdG9nZ2xlLCBpc09wZW5dXG4gICk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlR2xvYmFsQ2xpY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVHbG9iYWxDbGljayk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUdsb2JhbENsaWNrXSk7XG5cbiAgLy8gQmxvY2sgc2Nyb2xsaW5nIHdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4uXG4gIC8vIFdlIGRvIHRoaXMgdG8gYXZvaWQgcmVxdWlyaW5nIGRyb3Bkb3duIHJlcmVuZGVyaW5nIHdoaWxlIHRoZSB1c2VyIHNjcm9sbHMuXG4gIHVzZVNjcm9sbEJsb2NrKGlzT3BlbiwgdHJpZ2dlclJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8RHJvcGRvd25UcmlnZ2VyIG9uQ2xpY2s9e3RvZ2dsZX0gcmVmPXt0cmlnZ2VyUmVmfT5cbiAgICAgICAgICB7cHJvcHMudHJpZ2dlckVsZW1lbnR9XG4gICAgICAgIDwvRHJvcGRvd25UcmlnZ2VyPlxuXG4gICAgICAgIDxNZW51XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9e3Byb3BzLm1lbnVIb3Jpem9udGFsQ29uc3RyYWludCF9XG4gICAgICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICAgICAgbWVudVBvc2l0aW9uPXtwcm9wcy5tZW51UG9zaXRpb24hfVxuICAgICAgICAgIG1lbnVNYXhIZWlnaHQ9e3Byb3BzLm1lbnVNYXhIZWlnaHR9XG4gICAgICAgICAgdHJpZ2dlckVsZW1lbnRSZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgID5cbiAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvTWVudT5cbiAgICAgIDwvQ29udGFpbmVyPlxuICAgIDwvRHJvcGRvd25NZW51Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbkRyb3Bkb3duTWVudS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbkRyb3Bkb3duTWVudS5MaXN0TWVudUl0ZW0gPSBEcm9wZG93bkxpc3RNZW51SXRlbTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25NZW51O1xuIl19 */",
|
|
143
192
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
144
193
|
});
|
|
145
194
|
function DropdownMenu(props) {
|
|
@@ -147,7 +196,7 @@ function DropdownMenu(props) {
|
|
|
147
196
|
_useToggleState2 = _slicedToArray(_useToggleState, 2),
|
|
148
197
|
isOpen = _useToggleState2[0],
|
|
149
198
|
toggle = _useToggleState2[1];
|
|
150
|
-
const triggerRef =
|
|
199
|
+
const triggerRef = useRef(null);
|
|
151
200
|
|
|
152
201
|
// We use the context so children can toggle the dropdown
|
|
153
202
|
const context = useMemo(() => ({
|
|
@@ -170,17 +219,10 @@ function DropdownMenu(props) {
|
|
|
170
219
|
window.removeEventListener('click', handleGlobalClick);
|
|
171
220
|
};
|
|
172
221
|
}, [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]);
|
|
222
|
+
|
|
223
|
+
// Block scrolling when the dropdown is open.
|
|
224
|
+
// We do this to avoid requiring dropdown rerendering while the user scrolls.
|
|
225
|
+
useScrollBlock(isOpen, triggerRef);
|
|
184
226
|
return jsx(DropdownMenuContext.Provider, {
|
|
185
227
|
value: context,
|
|
186
228
|
children: jsxs(Container, {
|
|
@@ -192,6 +234,7 @@ function DropdownMenu(props) {
|
|
|
192
234
|
horizontalConstraint: props.menuHorizontalConstraint,
|
|
193
235
|
isOpen: isOpen,
|
|
194
236
|
menuPosition: props.menuPosition,
|
|
237
|
+
menuMaxHeight: props.menuMaxHeight,
|
|
195
238
|
triggerElementRef: triggerRef,
|
|
196
239
|
children: props.children
|
|
197
240
|
})]
|
|
@@ -200,6 +243,7 @@ function DropdownMenu(props) {
|
|
|
200
243
|
}
|
|
201
244
|
DropdownMenu.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
202
245
|
menuPosition: _pt.oneOf(['left', 'right']),
|
|
246
|
+
menuMaxHeight: _pt.number,
|
|
203
247
|
triggerElement: _pt.element.isRequired,
|
|
204
248
|
menuType: _pt.oneOf(['default', 'list']),
|
|
205
249
|
menuHorizontalConstraint: _pt.any,
|
|
@@ -209,6 +253,6 @@ DropdownMenu.defaultProps = defaultProps;
|
|
|
209
253
|
DropdownMenu.ListMenuItem = DropdownListMenuItem;
|
|
210
254
|
|
|
211
255
|
// NOTE: This string will be replaced on build time with the package version.
|
|
212
|
-
var version = "19.
|
|
256
|
+
var version = "19.3.1";
|
|
213
257
|
|
|
214
258
|
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.1",
|
|
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.1",
|
|
25
|
+
"@commercetools-uikit/constraints": "19.3.1",
|
|
26
|
+
"@commercetools-uikit/design-system": "19.3.1",
|
|
27
|
+
"@commercetools-uikit/hooks": "19.3.1",
|
|
28
|
+
"@commercetools-uikit/secondary-button": "19.3.1",
|
|
29
|
+
"@commercetools-uikit/spacings-inline": "19.3.1",
|
|
30
|
+
"@commercetools-uikit/spacings-stack": "19.3.1",
|
|
31
|
+
"@commercetools-uikit/utils": "19.3.1",
|
|
32
32
|
"@emotion/react": "^11.10.5",
|
|
33
33
|
"@emotion/styled": "^11.10.5",
|
|
34
34
|
"prop-types": "15.8.1",
|