@kaizen/components 1.78.1 → 1.78.3

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 (58) hide show
  1. package/dist/cjs/src/Filter/FilterMultiSelect/FilterMultiSelect.cjs +11 -4
  2. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.cjs +1 -1
  3. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css.cjs +9 -0
  4. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.cjs +1 -1
  5. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/{MenuPopup.module.scss.cjs → MenuPopup.module.css.cjs} +1 -1
  6. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.cjs +91 -0
  7. package/dist/cjs/src/LikertScaleLegacy/LikertScaleLegacy.cjs +5 -3
  8. package/dist/cjs/src/Menu/subcomponents/StatelessMenu/StatelessMenu.cjs +0 -1
  9. package/dist/cjs/src/__next__/Select/Select.cjs +23 -15
  10. package/dist/esm/src/Filter/FilterMultiSelect/FilterMultiSelect.mjs +12 -5
  11. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.mjs +1 -1
  12. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css.mjs +7 -0
  13. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.mjs +1 -1
  14. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.css.mjs +4 -0
  15. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.mjs +85 -0
  16. package/dist/esm/src/LikertScaleLegacy/LikertScaleLegacy.mjs +5 -3
  17. package/dist/esm/src/Menu/subcomponents/StatelessMenu/StatelessMenu.mjs +0 -1
  18. package/dist/esm/src/__next__/Select/Select.mjs +23 -15
  19. package/dist/styles.css +8717 -8712
  20. package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +7 -1
  21. package/dist/types/Filter/FilterMultiSelect/_docs/MockData.d.ts +1 -0
  22. package/dist/types/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.d.ts +22 -0
  23. package/dist/types/Filter/FilterMultiSelect/subcomponents/MenuPopup/index.d.ts +1 -0
  24. package/dist/types/LikertScaleLegacy/LikertScaleLegacy.d.ts +5 -1
  25. package/dist/types/Menu/subcomponents/StatelessMenu/StatelessMenu.d.ts +0 -1
  26. package/dist/types/__next__/Select/Select.d.ts +1 -1
  27. package/package.json +1 -1
  28. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.spec.tsx +1 -0
  29. package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +10 -4
  30. package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.mdx +9 -1
  31. package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.stories.tsx +79 -2
  32. package/src/Filter/FilterMultiSelect/_docs/MockData.ts +39 -0
  33. package/src/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.spec.tsx +2 -18
  34. package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css +20 -0
  35. package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.tsx +1 -1
  36. package/src/Filter/FilterMultiSelect/subcomponents/ListBoxSection/ListBoxSection.module.scss +1 -0
  37. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.css +20 -0
  38. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.tsx +1 -1
  39. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.tsx +115 -0
  40. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/index.ts +1 -0
  41. package/src/LikertScaleLegacy/LikertScaleLegacy.spec.tsx +1 -0
  42. package/src/LikertScaleLegacy/LikertScaleLegacy.tsx +7 -1
  43. package/src/LikertScaleLegacy/_docs/LikertScaleLegacy.mdx +8 -0
  44. package/src/LikertScaleLegacy/_docs/LikertScaleLegacy.stories.tsx +30 -1
  45. package/src/Menu/subcomponents/StatelessMenu/StatelessMenu.tsx +0 -2
  46. package/src/__next__/Select/Select.tsx +5 -0
  47. package/src/__next__/Select/_docs/Select.mdx +8 -0
  48. package/src/__next__/Select/_docs/Select.stories.tsx +93 -0
  49. package/src/__next__/Tooltip/_docs/ApiSpecification.mdx +2 -2
  50. package/src/__next__/Tooltip/_docs/Tooltip.docs.stories.tsx +15 -30
  51. package/src/__next__/Tooltip/_docs/Tooltip.mdx +1 -1
  52. package/src/__next__/Tooltip/_docs/Tooltip.spec.stories.tsx +21 -58
  53. package/src/__next__/Tooltip/_docs/Tooltip.stories.tsx +2 -2
  54. package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.cjs +0 -9
  55. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.mjs +0 -7
  56. package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss.mjs +0 -4
  57. package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss +0 -23
  58. package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss +0 -22
@@ -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;
@@ -36,7 +36,8 @@ var LikertScaleLegacy = function (_a) {
36
36
  onSelect = _a.onSelect,
37
37
  validationMessage = _a.validationMessage,
38
38
  status = _a.status,
39
- labelId = _a.labelId;
39
+ labelId = _a.labelId,
40
+ isRequired = _a.isRequired;
40
41
  var _e = React.useState(null),
41
42
  hoveredItem = _e[0],
42
43
  setHoveredItem = _e[1];
@@ -83,11 +84,12 @@ var LikertScaleLegacy = function (_a) {
83
84
  var isRated = selectedItem && selectedItem.value > 0;
84
85
  return React__default.default.createElement("div", {
85
86
  className: classnames__default.default(LikertScaleLegacy_module.container, isRated && LikertScaleLegacy_module.rated, reversed && [LikertScaleLegacy_module.reversed], hoveredItem !== null && LikertScaleLegacy_module.hovered),
86
- "aria-labelledby": labelId,
87
+ "aria-labelledby": isRequired ? "".concat(labelId) : labelId,
87
88
  role: "radiogroup",
88
89
  tabIndex: -1,
89
90
  "aria-describedby": validationMessageId,
90
- "data-testid": dataTestId
91
+ "data-testid": dataTestId,
92
+ "aria-required": isRequired
91
93
  }, React__default.default.createElement("div", {
92
94
  className: LikertScaleLegacy_module.legend,
93
95
  "data-testid": dataTestId && "".concat(dataTestId, "-legend")
@@ -40,7 +40,6 @@ var StatelessMenu = function (_a) {
40
40
  'onMouseDown': function (e) {
41
41
  return e.preventDefault();
42
42
  },
43
- 'aria-haspopup': true,
44
43
  'aria-expanded': isMenuVisible
45
44
  });
46
45
  React.useEffect(function () {
@@ -44,16 +44,19 @@ var Select = function (_a) {
44
44
  status = _a.status,
45
45
  validationMessage = _a.validationMessage,
46
46
  isReversed = _a.isReversed,
47
+ _c = _a.isRequired,
48
+ isRequired = _c === void 0 ? false : _c,
47
49
  isFullWidth = _a.isFullWidth,
48
50
  disabledValues = _a.disabledValues,
49
51
  classNameOverride = _a.classNameOverride,
50
52
  selectedKey = _a.selectedKey,
51
53
  description = _a.description,
52
- _c = _a.placeholder,
53
- placeholder = _c === void 0 ? '' : _c,
54
+ _d = _a.placeholder,
55
+ placeholder = _d === void 0 ? '' : _d,
54
56
  isDisabled = _a.isDisabled,
55
57
  portalContainerId = _a.portalContainerId,
56
- restProps = tslib.__rest(_a, ["label", "items", "id", "trigger", "children", "status", "validationMessage", "isReversed", "isFullWidth", "disabledValues", "classNameOverride", "selectedKey", "description", "placeholder", "isDisabled", "portalContainerId"]);
58
+ onSelectionChange = _a.onSelectionChange,
59
+ restProps = tslib.__rest(_a, ["label", "items", "id", "trigger", "children", "status", "validationMessage", "isReversed", "isRequired", "isFullWidth", "disabledValues", "classNameOverride", "selectedKey", "description", "placeholder", "isDisabled", "portalContainerId", "onSelectionChange"]);
57
60
  var refs = reactDom.useFloating().refs;
58
61
  var triggerRef = refs.reference;
59
62
  var fallbackId = React.useId();
@@ -70,16 +73,20 @@ var Select = function (_a) {
70
73
  selectedKey: typeof selectedKey === 'number' ? selectedKey.toString() : selectedKey,
71
74
  description: description,
72
75
  placeholder: placeholder,
73
- isDisabled: isDisabled
76
+ isDisabled: isDisabled,
77
+ isRequired: isRequired,
78
+ onSelectionChange: onSelectionChange ? function (key) {
79
+ return onSelectionChange(key);
80
+ } : undefined
74
81
  }, restProps);
75
82
  var state = select.useSelectState(ariaSelectProps);
76
- var _d = select$1.useSelect(ariaSelectProps, state, triggerRef),
77
- labelProps = _d.labelProps,
78
- reactAriaTriggerProps = _d.triggerProps,
79
- valueProps = _d.valueProps,
80
- menuProps = _d.menuProps,
81
- errorMessageProps = _d.errorMessageProps,
82
- descriptionProps = _d.descriptionProps;
83
+ var _e = select$1.useSelect(ariaSelectProps, state, triggerRef),
84
+ labelProps = _e.labelProps,
85
+ reactAriaTriggerProps = _e.triggerProps,
86
+ valueProps = _e.valueProps,
87
+ menuProps = _e.menuProps,
88
+ errorMessageProps = _e.errorMessageProps,
89
+ descriptionProps = _e.descriptionProps;
83
90
  // Hack incoming:
84
91
  // react-aria/useSelect wants to prefix the combobox's accessible name with the value of the select.
85
92
  // We use role=combobox, meaning screen readers will read the value.
@@ -101,11 +108,12 @@ var Select = function (_a) {
101
108
  'isDisabled': triggerProps.isDisabled,
102
109
  isReversed: isReversed,
103
110
  'ref': refs.setReference,
104
- 'aria-describedby': classnames__default.default(validationMessage && validationId, description && descriptionId)
111
+ 'aria-describedby': classnames__default.default(validationMessage && validationId, description && descriptionId),
112
+ 'aria-required': isRequired
105
113
  });
106
- var _e = React.useState(),
107
- portalContainer = _e[0],
108
- setPortalContainer = _e[1];
114
+ var _f = React.useState(),
115
+ portalContainer = _f[0],
116
+ setPortalContainer = _f[1];
109
117
  React.useEffect(function () {
110
118
  if (portalContainerId) {
111
119
  var portalElement = document.getElementById(portalContainerId);
@@ -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 };
@@ -27,7 +27,8 @@ var LikertScaleLegacy = function (_a) {
27
27
  onSelect = _a.onSelect,
28
28
  validationMessage = _a.validationMessage,
29
29
  status = _a.status,
30
- labelId = _a.labelId;
30
+ labelId = _a.labelId,
31
+ isRequired = _a.isRequired;
31
32
  var _e = useState(null),
32
33
  hoveredItem = _e[0],
33
34
  setHoveredItem = _e[1];
@@ -74,11 +75,12 @@ var LikertScaleLegacy = function (_a) {
74
75
  var isRated = selectedItem && selectedItem.value > 0;
75
76
  return /*#__PURE__*/React.createElement("div", {
76
77
  className: classnames(styles.container, isRated && styles.rated, reversed && [styles.reversed], hoveredItem !== null && styles.hovered),
77
- "aria-labelledby": labelId,
78
+ "aria-labelledby": isRequired ? "".concat(labelId) : labelId,
78
79
  role: "radiogroup",
79
80
  tabIndex: -1,
80
81
  "aria-describedby": validationMessageId,
81
- "data-testid": dataTestId
82
+ "data-testid": dataTestId,
83
+ "aria-required": isRequired
82
84
  }, /*#__PURE__*/React.createElement("div", {
83
85
  className: styles.legend,
84
86
  "data-testid": dataTestId && "".concat(dataTestId, "-legend")
@@ -32,7 +32,6 @@ const StatelessMenu = /*#__PURE__*/function () {
32
32
  'onMouseDown': function (e) {
33
33
  return e.preventDefault();
34
34
  },
35
- 'aria-haspopup': true,
36
35
  'aria-expanded': isMenuVisible
37
36
  });
38
37
  useEffect(function () {
@@ -36,16 +36,19 @@ const Select = /*#__PURE__*/function () {
36
36
  status = _a.status,
37
37
  validationMessage = _a.validationMessage,
38
38
  isReversed = _a.isReversed,
39
+ _c = _a.isRequired,
40
+ isRequired = _c === void 0 ? false : _c,
39
41
  isFullWidth = _a.isFullWidth,
40
42
  disabledValues = _a.disabledValues,
41
43
  classNameOverride = _a.classNameOverride,
42
44
  selectedKey = _a.selectedKey,
43
45
  description = _a.description,
44
- _c = _a.placeholder,
45
- placeholder = _c === void 0 ? '' : _c,
46
+ _d = _a.placeholder,
47
+ placeholder = _d === void 0 ? '' : _d,
46
48
  isDisabled = _a.isDisabled,
47
49
  portalContainerId = _a.portalContainerId,
48
- restProps = __rest(_a, ["label", "items", "id", "trigger", "children", "status", "validationMessage", "isReversed", "isFullWidth", "disabledValues", "classNameOverride", "selectedKey", "description", "placeholder", "isDisabled", "portalContainerId"]);
50
+ onSelectionChange = _a.onSelectionChange,
51
+ restProps = __rest(_a, ["label", "items", "id", "trigger", "children", "status", "validationMessage", "isReversed", "isRequired", "isFullWidth", "disabledValues", "classNameOverride", "selectedKey", "description", "placeholder", "isDisabled", "portalContainerId", "onSelectionChange"]);
49
52
  var refs = useFloating().refs;
50
53
  var triggerRef = refs.reference;
51
54
  var fallbackId = useId();
@@ -62,16 +65,20 @@ const Select = /*#__PURE__*/function () {
62
65
  selectedKey: typeof selectedKey === 'number' ? selectedKey.toString() : selectedKey,
63
66
  description: description,
64
67
  placeholder: placeholder,
65
- isDisabled: isDisabled
68
+ isDisabled: isDisabled,
69
+ isRequired: isRequired,
70
+ onSelectionChange: onSelectionChange ? function (key) {
71
+ return onSelectionChange(key);
72
+ } : undefined
66
73
  }, restProps);
67
74
  var state = useSelectState(ariaSelectProps);
68
- var _d = useSelect(ariaSelectProps, state, triggerRef),
69
- labelProps = _d.labelProps,
70
- reactAriaTriggerProps = _d.triggerProps,
71
- valueProps = _d.valueProps,
72
- menuProps = _d.menuProps,
73
- errorMessageProps = _d.errorMessageProps,
74
- descriptionProps = _d.descriptionProps;
75
+ var _e = useSelect(ariaSelectProps, state, triggerRef),
76
+ labelProps = _e.labelProps,
77
+ reactAriaTriggerProps = _e.triggerProps,
78
+ valueProps = _e.valueProps,
79
+ menuProps = _e.menuProps,
80
+ errorMessageProps = _e.errorMessageProps,
81
+ descriptionProps = _e.descriptionProps;
75
82
  // Hack incoming:
76
83
  // react-aria/useSelect wants to prefix the combobox's accessible name with the value of the select.
77
84
  // We use role=combobox, meaning screen readers will read the value.
@@ -93,11 +100,12 @@ const Select = /*#__PURE__*/function () {
93
100
  'isDisabled': triggerProps.isDisabled,
94
101
  isReversed: isReversed,
95
102
  'ref': refs.setReference,
96
- 'aria-describedby': classnames(validationMessage && validationId, description && descriptionId)
103
+ 'aria-describedby': classnames(validationMessage && validationId, description && descriptionId),
104
+ 'aria-required': isRequired
97
105
  });
98
- var _e = useState(),
99
- portalContainer = _e[0],
100
- setPortalContainer = _e[1];
106
+ var _f = useState(),
107
+ portalContainer = _f[0],
108
+ setPortalContainer = _f[1];
101
109
  useEffect(function () {
102
110
  if (portalContainerId) {
103
111
  var portalElement = document.getElementById(portalContainerId);