@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.
- package/dist/cjs/src/Filter/FilterMultiSelect/FilterMultiSelect.cjs +11 -4
- package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.cjs +1 -1
- package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css.cjs +9 -0
- package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.cjs +1 -1
- package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/{MenuPopup.module.scss.cjs → MenuPopup.module.css.cjs} +1 -1
- package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.cjs +91 -0
- package/dist/cjs/src/LikertScaleLegacy/LikertScaleLegacy.cjs +5 -3
- package/dist/cjs/src/Menu/subcomponents/StatelessMenu/StatelessMenu.cjs +0 -1
- package/dist/cjs/src/__next__/Select/Select.cjs +23 -15
- package/dist/esm/src/Filter/FilterMultiSelect/FilterMultiSelect.mjs +12 -5
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.mjs +1 -1
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css.mjs +7 -0
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.mjs +1 -1
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.css.mjs +4 -0
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.mjs +85 -0
- package/dist/esm/src/LikertScaleLegacy/LikertScaleLegacy.mjs +5 -3
- package/dist/esm/src/Menu/subcomponents/StatelessMenu/StatelessMenu.mjs +0 -1
- package/dist/esm/src/__next__/Select/Select.mjs +23 -15
- package/dist/styles.css +8717 -8712
- package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +7 -1
- package/dist/types/Filter/FilterMultiSelect/_docs/MockData.d.ts +1 -0
- package/dist/types/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.d.ts +22 -0
- package/dist/types/Filter/FilterMultiSelect/subcomponents/MenuPopup/index.d.ts +1 -0
- package/dist/types/LikertScaleLegacy/LikertScaleLegacy.d.ts +5 -1
- package/dist/types/Menu/subcomponents/StatelessMenu/StatelessMenu.d.ts +0 -1
- package/dist/types/__next__/Select/Select.d.ts +1 -1
- package/package.json +1 -1
- package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.spec.tsx +1 -0
- package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +10 -4
- package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.mdx +9 -1
- package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.stories.tsx +79 -2
- package/src/Filter/FilterMultiSelect/_docs/MockData.ts +39 -0
- package/src/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.spec.tsx +2 -18
- package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.css +20 -0
- package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.tsx +1 -1
- package/src/Filter/FilterMultiSelect/subcomponents/ListBoxSection/ListBoxSection.module.scss +1 -0
- package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.css +20 -0
- package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.tsx +1 -1
- package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/ResponsiveMenuPopup.tsx +115 -0
- package/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/index.ts +1 -0
- package/src/LikertScaleLegacy/LikertScaleLegacy.spec.tsx +1 -0
- package/src/LikertScaleLegacy/LikertScaleLegacy.tsx +7 -1
- package/src/LikertScaleLegacy/_docs/LikertScaleLegacy.mdx +8 -0
- package/src/LikertScaleLegacy/_docs/LikertScaleLegacy.stories.tsx +30 -1
- package/src/Menu/subcomponents/StatelessMenu/StatelessMenu.tsx +0 -2
- package/src/__next__/Select/Select.tsx +5 -0
- package/src/__next__/Select/_docs/Select.mdx +8 -0
- package/src/__next__/Select/_docs/Select.stories.tsx +93 -0
- package/src/__next__/Tooltip/_docs/ApiSpecification.mdx +2 -2
- package/src/__next__/Tooltip/_docs/Tooltip.docs.stories.tsx +15 -30
- package/src/__next__/Tooltip/_docs/Tooltip.mdx +1 -1
- package/src/__next__/Tooltip/_docs/Tooltip.spec.stories.tsx +21 -58
- package/src/__next__/Tooltip/_docs/Tooltip.stories.tsx +2 -2
- package/dist/cjs/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.cjs +0 -9
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.mjs +0 -7
- package/dist/esm/src/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss.mjs +0 -4
- package/src/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss +0 -23
- 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(
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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")
|
|
@@ -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
|
-
|
|
53
|
-
placeholder =
|
|
54
|
+
_d = _a.placeholder,
|
|
55
|
+
placeholder = _d === void 0 ? '' : _d,
|
|
54
56
|
isDisabled = _a.isDisabled,
|
|
55
57
|
portalContainerId = _a.portalContainerId,
|
|
56
|
-
|
|
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
|
|
77
|
-
labelProps =
|
|
78
|
-
reactAriaTriggerProps =
|
|
79
|
-
valueProps =
|
|
80
|
-
menuProps =
|
|
81
|
-
errorMessageProps =
|
|
82
|
-
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
|
|
107
|
-
portalContainer =
|
|
108
|
-
setPortalContainer =
|
|
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(
|
|
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.
|
|
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) {
|
|
@@ -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.
|
|
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,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")
|
|
@@ -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
|
-
|
|
45
|
-
placeholder =
|
|
46
|
+
_d = _a.placeholder,
|
|
47
|
+
placeholder = _d === void 0 ? '' : _d,
|
|
46
48
|
isDisabled = _a.isDisabled,
|
|
47
49
|
portalContainerId = _a.portalContainerId,
|
|
48
|
-
|
|
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
|
|
69
|
-
labelProps =
|
|
70
|
-
reactAriaTriggerProps =
|
|
71
|
-
valueProps =
|
|
72
|
-
menuProps =
|
|
73
|
-
errorMessageProps =
|
|
74
|
-
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
|
|
99
|
-
portalContainer =
|
|
100
|
-
setPortalContainer =
|
|
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);
|