@kaizen/components 1.79.9 → 1.80.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.
Files changed (41) hide show
  1. package/dist/cjs/src/Avatar/Avatar.cjs +2 -2
  2. package/dist/cjs/src/Filter/FilterMultiSelect/FilterMultiSelect.cjs +11 -4
  3. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.cjs +1 -1
  4. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css.cjs +9 -0
  5. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.cjs +1 -1
  6. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/{MenuPopup.module.scss.cjs → MenuPopup.module.css.cjs} +1 -1
  7. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.cjs +91 -0
  8. package/dist/esm/src/Avatar/Avatar.mjs +2 -2
  9. package/dist/esm/src/Filter/FilterMultiSelect/FilterMultiSelect.mjs +12 -5
  10. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.mjs +1 -1
  11. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css.mjs +7 -0
  12. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.mjs +1 -1
  13. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.css.mjs +4 -0
  14. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.mjs +85 -0
  15. package/dist/styles.css +9216 -9208
  16. package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +7 -1
  17. package/dist/types/Filter/FilterMultiSelect/_docs/MockData.d.ts +1 -0
  18. package/dist/types/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.d.ts +22 -0
  19. package/dist/types/Filter/FilterMultiSelect/subcomponents/MenuPopup/index.d.ts +1 -0
  20. package/locales/de.json +17 -17
  21. package/package.json +1 -1
  22. package/src/Avatar/Avatar.spec.tsx +1 -0
  23. package/src/Avatar/Avatar.tsx +2 -2
  24. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.spec.tsx +1 -0
  25. package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +10 -4
  26. package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.mdx +9 -1
  27. package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.stories.tsx +79 -2
  28. package/src/Filter/FilterMultiSelect/_docs/MockData.ts +39 -0
  29. package/src/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.spec.tsx +2 -18
  30. package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css +22 -0
  31. package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.tsx +1 -1
  32. package/src/Filter/FilterMultiSelect/subcomponents/ListBoxSection/ListBoxSection.module.scss +1 -0
  33. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.css +22 -0
  34. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.tsx +1 -1
  35. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.tsx +115 -0
  36. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/index.ts +1 -0
  37. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.cjs +0 -9
  38. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.mjs +0 -7
  39. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss.mjs +0 -4
  40. package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss +0 -25
  41. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss +0 -24
@@ -109,9 +109,9 @@ var Avatar = function (_a) {
109
109
  var isOtherUser = isNoneOrError && !isCurrentUser;
110
110
  return React__default.default.createElement("span", tslib.__assign({
111
111
  className: classnames__default.default(Avatar_module.wrapper, Avatar_module[size], classNameOverride, isCompany && Avatar_module.company, isPersonal && Avatar_module.personal, isOtherUser && Avatar_module.otherUser)
112
- }, restProps), avatarState !== 'none' && React__default.default.createElement("img", {
112
+ }, restProps), avatarState !== 'none' && avatarState !== 'error' && React__default.default.createElement("img", {
113
113
  ref: image,
114
- className: classnames__default.default(Avatar_module.avatarImage, isCompany && Avatar_module.companyAvatarImage, (avatarState === 'loading' || avatarState === 'error') && Avatar_module.loading),
114
+ className: classnames__default.default(Avatar_module.avatarImage, isCompany && Avatar_module.companyAvatarImage, avatarState === 'loading' && Avatar_module.loading),
115
115
  src: avatarSrc,
116
116
  onError: onImageFailure,
117
117
  onLoad: onImageSuccess,
@@ -10,6 +10,7 @@ var LoadMoreButton = require('./subcomponents/LoadMoreButton/LoadMoreButton.cjs'
10
10
  var MenuFooter = require('./subcomponents/MenuLayout/MenuFooter/MenuFooter.cjs');
11
11
  var MenuLoadingSkeleton = require('./subcomponents/MenuLayout/MenuLoadingSkeleton/MenuLoadingSkeleton.cjs');
12
12
  var MenuPopup = require('./subcomponents/MenuPopup/MenuPopup.cjs');
13
+ var ResponsiveMenuPopup = require('./subcomponents/MenuPopup/ResponsiveMenuPopup.cjs');
13
14
  var MultiSelectOption = require('./subcomponents/MultiSelectOption/MultiSelectOption.cjs');
14
15
  var NoResults = require('./subcomponents/NoResults/NoResults.cjs');
15
16
  var SearchInput = require('./subcomponents/SearchInput/SearchInput.cjs');
@@ -27,6 +28,7 @@ var React__default = /*#__PURE__*/_interopDefault(React);
27
28
  var FilterMultiSelect = function (_a) {
28
29
  var trigger = _a.trigger,
29
30
  children = _a.children,
31
+ customMenuPopup = _a.customMenuPopup,
30
32
  isOpen = _a.isOpen,
31
33
  defaultOpen = _a.defaultOpen,
32
34
  onOpenChange = _a.onOpenChange,
@@ -41,17 +43,19 @@ var FilterMultiSelect = function (_a) {
41
43
  selectionMode = _b === void 0 ? 'multiple' : _b,
42
44
  onSearchInputChange = _a.onSearchInputChange,
43
45
  triggerRef = _a.triggerRef,
44
- className = _a.className;
46
+ className = _a.className,
47
+ restProps = tslib.__rest(_a, ["trigger", "children", "customMenuPopup", "isOpen", "defaultOpen", "onOpenChange", "isLoading", "loadingSkeleton", "label", "items", "selectedKeys", "defaultSelectedKeys", "onSelectionChange", "selectionMode", "onSearchInputChange", "triggerRef", "className"]);
48
+ var MenuComponent = customMenuPopup !== null && customMenuPopup !== void 0 ? customMenuPopup : MenuPopup.MenuPopup;
45
49
  var menuTriggerProps = {
46
50
  isOpen: isOpen,
47
51
  defaultOpen: defaultOpen,
48
52
  onOpenChange: onOpenChange,
49
53
  triggerRef: triggerRef
50
54
  };
51
- var menuPopupProps = {
55
+ var menuPopupProps = tslib.__assign({
52
56
  isLoading: isLoading,
53
57
  loadingSkeleton: loadingSkeleton
54
- };
58
+ }, restProps);
55
59
  var disabledKeys = new Set(items === null || items === void 0 ? void 0 : items.filter(function (item) {
56
60
  return item.isDisabled === true;
57
61
  }).map(function (disabledItem) {
@@ -69,7 +73,9 @@ var FilterMultiSelect = function (_a) {
69
73
  };
70
74
  return React__default.default.createElement(MenuTriggerProvider.MenuTriggerProvider, tslib.__assign({}, menuTriggerProps), React__default.default.createElement("div", {
71
75
  className: className
72
- }, React__default.default.createElement(MenuTriggerProvider.MenuTriggerConsumer, null, trigger), React__default.default.createElement(MenuPopup.MenuPopup, tslib.__assign({}, menuPopupProps), React__default.default.createElement(SelectionProvider.SelectionProvider, tslib.__assign({}, selectionProps), React__default.default.createElement(SelectionProvider.SelectionConsumer, null, children)))));
76
+ }, React__default.default.createElement(MenuTriggerProvider.MenuTriggerConsumer, null, trigger), React__default.default.createElement(MenuComponent, tslib.__assign({
77
+ "aria-label": label
78
+ }, menuPopupProps), React__default.default.createElement(SelectionProvider.SelectionProvider, tslib.__assign({}, selectionProps), React__default.default.createElement(SelectionProvider.SelectionConsumer, null, children)))));
73
79
  };
74
80
  FilterMultiSelect.displayName = 'FilterMultiSelect';
75
81
  FilterMultiSelect.TriggerButton = FilterTriggerButton.FilterTriggerButton;
@@ -85,4 +91,5 @@ FilterMultiSelect.MenuFooter = MenuFooter.MenuFooter; // For layout
85
91
  FilterMultiSelect.MenuLoadingSkeleton = MenuLoadingSkeleton.MenuLoadingSkeleton; // Menu Loading Skeleton example
86
92
  FilterMultiSelect.LoadMoreButton = LoadMoreButton.LoadMoreButton;
87
93
  FilterMultiSelect.NoResults = NoResults.NoResults;
94
+ FilterMultiSelect.ResponsiveMenuPopup = ResponsiveMenuPopup.ResponsiveMenuPopup;
88
95
  exports.FilterMultiSelect = FilterMultiSelect;
@@ -4,7 +4,7 @@ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var classnames = require('classnames');
6
6
  var SelectionProvider = require('../../context/SelectionProvider/SelectionProvider.cjs');
7
- var ListBox_module = require('./ListBox.module.scss.cjs');
7
+ var ListBox_module = require('./ListBox.module.css.cjs');
8
8
  function _interopDefault(e) {
9
9
  return e && e.__esModule ? e : {
10
10
  default: e
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var styles = {
4
+ "listBox": "ListBox-module_listBox__HBScm",
5
+ "overflown": "ListBox-module_overflown__PdKED",
6
+ "hidden": "ListBox-module_hidden__mO-oL",
7
+ "noResultsWrapper": "ListBox-module_noResultsWrapper__RnMj0"
8
+ };
9
+ module.exports = styles;
@@ -6,7 +6,7 @@ var focus = require('@react-aria/focus');
6
6
  var overlays = require('@react-aria/overlays');
7
7
  var MenuTriggerProvider = require('../../context/MenuTriggerProvider/MenuTriggerProvider.cjs');
8
8
  require('../../context/SelectionProvider/SelectionProvider.cjs');
9
- var MenuPopup_module = require('./MenuPopup.module.scss.cjs');
9
+ var MenuPopup_module = require('./MenuPopup.module.css.cjs');
10
10
  function _interopDefault(e) {
11
11
  return e && e.__esModule ? e : {
12
12
  default: e
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var styles = {
4
- "menuPopup": "MenuPopup-module_menuPopup__UVgnP"
4
+ "menuPopup": "MenuPopup-module_menuPopup__QgGEa"
5
5
  };
6
6
  module.exports = styles;
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var reactDom = require('@floating-ui/react-dom');
6
+ var classnames = require('classnames');
7
+ var reactFocusOn = require('react-focus-on');
8
+ var MenuTriggerProvider = require('../../context/MenuTriggerProvider/MenuTriggerProvider.cjs');
9
+ require('../../context/SelectionProvider/SelectionProvider.cjs');
10
+ var MenuPopup_module = require('./MenuPopup.module.css.cjs');
11
+ function _interopDefault(e) {
12
+ return e && e.__esModule ? e : {
13
+ default: e
14
+ };
15
+ }
16
+ var React__default = /*#__PURE__*/_interopDefault(React);
17
+ var classnames__default = /*#__PURE__*/_interopDefault(classnames);
18
+
19
+ /** This is a popup primitive that can be used with the FilterMultiSelect when there are overflow issues with the original implementation. This uses the floating-ui */
20
+ var ResponsiveMenuPopup = function (_a) {
21
+ var children = _a.children,
22
+ _b = _a.floatingConfig,
23
+ floatingConfig = _b === void 0 ? {
24
+ placement: 'bottom-start',
25
+ strategy: 'absolute',
26
+ whileElementsMounted: reactDom.autoUpdate,
27
+ shouldFlip: true,
28
+ shouldResize: true
29
+ } : _b,
30
+ classNameOverride = _a.classNameOverride,
31
+ isLoading = _a.isLoading,
32
+ loadingSkeleton = _a.loadingSkeleton,
33
+ restProps = tslib.__rest(_a, ["children", "floatingConfig", "classNameOverride", "isLoading", "loadingSkeleton"]);
34
+ var _c = React.useState(null),
35
+ floatingElement = _c[0],
36
+ setFloatingElement = _c[1];
37
+ var _d = MenuTriggerProvider.useMenuTriggerContext(),
38
+ menuTriggerState = _d.menuTriggerState,
39
+ buttonRef = _d.buttonRef;
40
+ var referenceElement = buttonRef.current;
41
+ var _e = reactDom.useFloating(tslib.__assign({
42
+ elements: {
43
+ reference: referenceElement,
44
+ floating: floatingElement
45
+ },
46
+ middleware: [reactDom.offset(6), floatingConfig.shouldFlip && reactDom.autoPlacement({
47
+ allowedPlacements: ['bottom-start', 'top-start']
48
+ }), floatingConfig.shouldResize && reactDom.size({
49
+ apply: function (_a) {
50
+ var availableHeight = _a.availableHeight,
51
+ elements = _a.elements;
52
+ Object.assign(elements.floating.style, {
53
+ maxHeight: Math.max(250, Math.min(availableHeight - 12, 500)) + 'px'
54
+ });
55
+ }
56
+ })]
57
+ }, floatingConfig)),
58
+ floatingStyles = _e.floatingStyles,
59
+ update = _e.update;
60
+ var handleReturnFocus = function () {
61
+ requestAnimationFrame(function () {
62
+ var _a;
63
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
64
+ });
65
+ };
66
+ React.useEffect(function () {
67
+ var _a;
68
+ if (floatingElement && referenceElement) {
69
+ (_a = floatingElement.showPopover) === null || _a === void 0 ? void 0 : _a.call(floatingElement);
70
+ update();
71
+ }
72
+ }, [floatingElement, referenceElement, update]);
73
+ return menuTriggerState.isOpen ? React__default.default.createElement(reactFocusOn.FocusOn, {
74
+ enabled: menuTriggerState.isOpen,
75
+ scrollLock: true,
76
+ returnFocus: false,
77
+ onClickOutside: menuTriggerState.close,
78
+ onEscapeKey: menuTriggerState.close,
79
+ onDeactivation: handleReturnFocus
80
+ }, React__default.default.createElement("div", tslib.__assign({
81
+ ref: setFloatingElement,
82
+ style: floatingStyles,
83
+ className: classnames__default.default(MenuPopup_module.menuPopup, classNameOverride),
84
+ role: "dialog",
85
+ "aria-modal": "true",
86
+ // @ts-expect-error: popover is valid in supported browsers
87
+ popover: "manual"
88
+ }, restProps), isLoading && loadingSkeleton ? loadingSkeleton : children)) : React__default.default.createElement(React__default.default.Fragment, null);
89
+ };
90
+ ResponsiveMenuPopup.displayName = 'FilterMultiSelect.ResponsiveMenuPopup';
91
+ exports.ResponsiveMenuPopup = ResponsiveMenuPopup;
@@ -101,9 +101,9 @@ var Avatar = function (_a) {
101
101
  var isOtherUser = isNoneOrError && !isCurrentUser;
102
102
  return /*#__PURE__*/React.createElement("span", __assign({
103
103
  className: classnames(styles.wrapper, styles[size], classNameOverride, isCompany && styles.company, isPersonal && styles.personal, isOtherUser && styles.otherUser)
104
- }, restProps), avatarState !== 'none' && (/*#__PURE__*/React.createElement("img", {
104
+ }, restProps), avatarState !== 'none' && avatarState !== 'error' && (/*#__PURE__*/React.createElement("img", {
105
105
  ref: image,
106
- className: classnames(styles.avatarImage, isCompany && styles.companyAvatarImage, (avatarState === 'loading' || avatarState === 'error') && styles.loading),
106
+ className: classnames(styles.avatarImage, isCompany && styles.companyAvatarImage, avatarState === 'loading' && styles.loading),
107
107
  src: avatarSrc,
108
108
  onError: onImageFailure,
109
109
  onLoad: onImageSuccess,
@@ -1,4 +1,4 @@
1
- import { __assign } from 'tslib';
1
+ import { __rest, __assign } from 'tslib';
2
2
  import React from 'react';
3
3
  import { MenuTriggerProvider, MenuTriggerConsumer } from './context/MenuTriggerProvider/MenuTriggerProvider.mjs';
4
4
  import { SelectionProvider, SelectionConsumer } from './context/SelectionProvider/SelectionProvider.mjs';
@@ -8,6 +8,7 @@ import { LoadMoreButton } from './subcomponents/LoadMoreButton/LoadMoreButton.mj
8
8
  import { MenuFooter } from './subcomponents/MenuLayout/MenuFooter/MenuFooter.mjs';
9
9
  import { MenuLoadingSkeleton } from './subcomponents/MenuLayout/MenuLoadingSkeleton/MenuLoadingSkeleton.mjs';
10
10
  import { MenuPopup } from './subcomponents/MenuPopup/MenuPopup.mjs';
11
+ import { ResponsiveMenuPopup } from './subcomponents/MenuPopup/ResponsiveMenuPopup.mjs';
11
12
  import { MultiSelectOption } from './subcomponents/MultiSelectOption/MultiSelectOption.mjs';
12
13
  import { NoResults } from './subcomponents/NoResults/NoResults.mjs';
13
14
  import { SearchInput } from './subcomponents/SearchInput/SearchInput.mjs';
@@ -20,6 +21,7 @@ const FilterMultiSelect = /*#__PURE__*/function () {
20
21
  const FilterMultiSelect = function (_a) {
21
22
  var trigger = _a.trigger,
22
23
  children = _a.children,
24
+ customMenuPopup = _a.customMenuPopup,
23
25
  isOpen = _a.isOpen,
24
26
  defaultOpen = _a.defaultOpen,
25
27
  onOpenChange = _a.onOpenChange,
@@ -34,17 +36,19 @@ const FilterMultiSelect = /*#__PURE__*/function () {
34
36
  selectionMode = _b === void 0 ? 'multiple' : _b,
35
37
  onSearchInputChange = _a.onSearchInputChange,
36
38
  triggerRef = _a.triggerRef,
37
- className = _a.className;
39
+ className = _a.className,
40
+ restProps = __rest(_a, ["trigger", "children", "customMenuPopup", "isOpen", "defaultOpen", "onOpenChange", "isLoading", "loadingSkeleton", "label", "items", "selectedKeys", "defaultSelectedKeys", "onSelectionChange", "selectionMode", "onSearchInputChange", "triggerRef", "className"]);
41
+ var MenuComponent = customMenuPopup !== null && customMenuPopup !== void 0 ? customMenuPopup : MenuPopup;
38
42
  var menuTriggerProps = {
39
43
  isOpen: isOpen,
40
44
  defaultOpen: defaultOpen,
41
45
  onOpenChange: onOpenChange,
42
46
  triggerRef: triggerRef
43
47
  };
44
- var menuPopupProps = {
48
+ var menuPopupProps = __assign({
45
49
  isLoading: isLoading,
46
50
  loadingSkeleton: loadingSkeleton
47
- };
51
+ }, restProps);
48
52
  var disabledKeys = new Set(items === null || items === void 0 ? void 0 : items.filter(function (item) {
49
53
  return item.isDisabled === true;
50
54
  }).map(function (disabledItem) {
@@ -62,7 +66,9 @@ const FilterMultiSelect = /*#__PURE__*/function () {
62
66
  };
63
67
  return /*#__PURE__*/React.createElement(MenuTriggerProvider, __assign({}, menuTriggerProps), /*#__PURE__*/React.createElement("div", {
64
68
  className: className
65
- }, /*#__PURE__*/React.createElement(MenuTriggerConsumer, null, trigger), /*#__PURE__*/React.createElement(MenuPopup, __assign({}, menuPopupProps), /*#__PURE__*/React.createElement(SelectionProvider, __assign({}, selectionProps), /*#__PURE__*/React.createElement(SelectionConsumer, null, children)))));
69
+ }, /*#__PURE__*/React.createElement(MenuTriggerConsumer, null, trigger), /*#__PURE__*/React.createElement(MenuComponent, __assign({
70
+ "aria-label": label
71
+ }, menuPopupProps), /*#__PURE__*/React.createElement(SelectionProvider, __assign({}, selectionProps), /*#__PURE__*/React.createElement(SelectionConsumer, null, children)))));
66
72
  };
67
73
  FilterMultiSelect.displayName = 'FilterMultiSelect';
68
74
  FilterMultiSelect.TriggerButton = FilterTriggerButton;
@@ -79,6 +85,7 @@ const FilterMultiSelect = /*#__PURE__*/function () {
79
85
  FilterMultiSelect.MenuLoadingSkeleton = MenuLoadingSkeleton;
80
86
  FilterMultiSelect.LoadMoreButton = LoadMoreButton;
81
87
  FilterMultiSelect.NoResults = NoResults;
88
+ FilterMultiSelect.ResponsiveMenuPopup = ResponsiveMenuPopup;
82
89
  return FilterMultiSelect;
83
90
  }();
84
91
  export { FilterMultiSelect };
@@ -2,7 +2,7 @@ import { __assign, __spreadArray } from 'tslib';
2
2
  import React, { useState, useEffect } from 'react';
3
3
  import classnames from 'classnames';
4
4
  import { useSelectionContext } from '../../context/SelectionProvider/SelectionProvider.mjs';
5
- import styles from './ListBox.module.scss.mjs';
5
+ import styles from './ListBox.module.css.mjs';
6
6
  var getItemsFromKeys = function (items, keys) {
7
7
  var itemKeys = Array.from(keys);
8
8
  return itemKeys.reduce(function (acc, itemKey) {
@@ -0,0 +1,7 @@
1
+ var styles = {
2
+ "listBox": "ListBox-module_listBox__HBScm",
3
+ "overflown": "ListBox-module_overflown__PdKED",
4
+ "hidden": "ListBox-module_hidden__mO-oL",
5
+ "noResultsWrapper": "ListBox-module_noResultsWrapper__RnMj0"
6
+ };
7
+ export { styles as default };
@@ -4,7 +4,7 @@ import { FocusScope } from '@react-aria/focus';
4
4
  import { useOverlay, DismissButton } from '@react-aria/overlays';
5
5
  import { useMenuTriggerContext } from '../../context/MenuTriggerProvider/MenuTriggerProvider.mjs';
6
6
  import '../../context/SelectionProvider/SelectionProvider.mjs';
7
- import styles from './MenuPopup.module.scss.mjs';
7
+ import styles from './MenuPopup.module.css.mjs';
8
8
  const MenuPopup = /*#__PURE__*/function () {
9
9
  const MenuPopup = function (_a) {
10
10
  var isLoading = _a.isLoading,
@@ -0,0 +1,4 @@
1
+ var styles = {
2
+ "menuPopup": "MenuPopup-module_menuPopup__QgGEa"
3
+ };
4
+ export { styles as default };
@@ -0,0 +1,85 @@
1
+ import { __rest, __assign } from 'tslib';
2
+ import React, { useState, useEffect } from 'react';
3
+ import { useFloating, offset, autoPlacement, size, autoUpdate } from '@floating-ui/react-dom';
4
+ import classnames from 'classnames';
5
+ import { FocusOn } from 'react-focus-on';
6
+ import { useMenuTriggerContext } from '../../context/MenuTriggerProvider/MenuTriggerProvider.mjs';
7
+ import '../../context/SelectionProvider/SelectionProvider.mjs';
8
+ import styles from './MenuPopup.module.css.mjs';
9
+
10
+ /** This is a popup primitive that can be used with the FilterMultiSelect when there are overflow issues with the original implementation. This uses the floating-ui */
11
+ const ResponsiveMenuPopup = /*#__PURE__*/function () {
12
+ const ResponsiveMenuPopup = function (_a) {
13
+ var children = _a.children,
14
+ _b = _a.floatingConfig,
15
+ floatingConfig = _b === void 0 ? {
16
+ placement: 'bottom-start',
17
+ strategy: 'absolute',
18
+ whileElementsMounted: autoUpdate,
19
+ shouldFlip: true,
20
+ shouldResize: true
21
+ } : _b,
22
+ classNameOverride = _a.classNameOverride,
23
+ isLoading = _a.isLoading,
24
+ loadingSkeleton = _a.loadingSkeleton,
25
+ restProps = __rest(_a, ["children", "floatingConfig", "classNameOverride", "isLoading", "loadingSkeleton"]);
26
+ var _c = useState(null),
27
+ floatingElement = _c[0],
28
+ setFloatingElement = _c[1];
29
+ var _d = useMenuTriggerContext(),
30
+ menuTriggerState = _d.menuTriggerState,
31
+ buttonRef = _d.buttonRef;
32
+ var referenceElement = buttonRef.current;
33
+ var _e = useFloating(__assign({
34
+ elements: {
35
+ reference: referenceElement,
36
+ floating: floatingElement
37
+ },
38
+ middleware: [offset(6), floatingConfig.shouldFlip && autoPlacement({
39
+ allowedPlacements: ['bottom-start', 'top-start']
40
+ }), floatingConfig.shouldResize && size({
41
+ apply: function (_a) {
42
+ var availableHeight = _a.availableHeight,
43
+ elements = _a.elements;
44
+ Object.assign(elements.floating.style, {
45
+ maxHeight: Math.max(250, Math.min(availableHeight - 12, 500)) + 'px'
46
+ });
47
+ }
48
+ })]
49
+ }, floatingConfig)),
50
+ floatingStyles = _e.floatingStyles,
51
+ update = _e.update;
52
+ var handleReturnFocus = function () {
53
+ requestAnimationFrame(function () {
54
+ var _a;
55
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
56
+ });
57
+ };
58
+ useEffect(function () {
59
+ var _a;
60
+ if (floatingElement && referenceElement) {
61
+ (_a = floatingElement.showPopover) === null || _a === void 0 ? void 0 : _a.call(floatingElement);
62
+ update();
63
+ }
64
+ }, [floatingElement, referenceElement, update]);
65
+ return menuTriggerState.isOpen ? (/*#__PURE__*/React.createElement(FocusOn, {
66
+ enabled: menuTriggerState.isOpen,
67
+ scrollLock: true,
68
+ returnFocus: false,
69
+ onClickOutside: menuTriggerState.close,
70
+ onEscapeKey: menuTriggerState.close,
71
+ onDeactivation: handleReturnFocus
72
+ }, /*#__PURE__*/React.createElement("div", __assign({
73
+ ref: setFloatingElement,
74
+ style: floatingStyles,
75
+ className: classnames(styles.menuPopup, classNameOverride),
76
+ role: "dialog",
77
+ "aria-modal": "true",
78
+ // @ts-expect-error: popover is valid in supported browsers
79
+ popover: "manual"
80
+ }, restProps), isLoading && loadingSkeleton ? loadingSkeleton : children))) : (/*#__PURE__*/React.createElement(React.Fragment, null));
81
+ };
82
+ ResponsiveMenuPopup.displayName = 'FilterMultiSelect.ResponsiveMenuPopup';
83
+ return ResponsiveMenuPopup;
84
+ }();
85
+ export { ResponsiveMenuPopup };