@pingux/astro 2.71.0-alpha.0 → 2.71.0-alpha.2
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/lib/cjs/components/ListBox/ListBox.js +4 -2
- package/lib/cjs/components/ListBox/ListBox.styles.js +20 -0
- package/lib/cjs/components/ListBox/Option.js +47 -8
- package/lib/cjs/components/MultivaluesField/CondensedMultivaluesField.js +508 -0
- package/lib/cjs/components/MultivaluesField/DefaultMultivaluesField.js +616 -0
- package/lib/cjs/components/MultivaluesField/MultivaluesField.js +18 -481
- package/lib/cjs/components/MultivaluesField/MultivaluesField.stories.js +114 -2
- package/lib/cjs/components/MultivaluesField/MultivaluesField.test.js +251 -2
- package/lib/cjs/components/SelectFieldBase/SelectFieldBase.js +3 -1
- package/lib/cjs/recipes/DateTimeRangePicker.stories.js +182 -0
- package/lib/cjs/types/listBox.d.ts +6 -0
- package/lib/cjs/utils/designUtils/figmaLinks.d.ts +3 -0
- package/lib/cjs/utils/designUtils/figmaLinks.js +3 -0
- package/lib/components/ListBox/ListBox.js +4 -2
- package/lib/components/ListBox/ListBox.styles.js +20 -0
- package/lib/components/ListBox/Option.js +47 -8
- package/lib/components/MultivaluesField/CondensedMultivaluesField.js +495 -0
- package/lib/components/MultivaluesField/DefaultMultivaluesField.js +603 -0
- package/lib/components/MultivaluesField/MultivaluesField.js +18 -480
- package/lib/components/MultivaluesField/MultivaluesField.stories.js +111 -1
- package/lib/components/MultivaluesField/MultivaluesField.test.js +250 -2
- package/lib/components/SelectFieldBase/SelectFieldBase.js +3 -1
- package/lib/recipes/DateTimeRangePicker.stories.js +167 -0
- package/lib/utils/designUtils/figmaLinks.js +3 -0
- package/package.json +1 -1
@@ -0,0 +1,616 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
6
|
+
var _filterInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
7
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
9
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
10
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
11
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
12
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
13
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
14
|
+
_Object$defineProperty(exports, "__esModule", {
|
15
|
+
value: true
|
16
|
+
});
|
17
|
+
exports["default"] = void 0;
|
18
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
19
|
+
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
|
20
|
+
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
|
21
|
+
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
|
22
|
+
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
23
|
+
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
24
|
+
var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
|
25
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
26
|
+
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
27
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
28
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
29
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
30
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
31
|
+
var _react = _interopRequireWildcard(require("react"));
|
32
|
+
var _reactAria = require("react-aria");
|
33
|
+
var _CloseIcon = _interopRequireDefault(require("@pingux/mdi-react/CloseIcon"));
|
34
|
+
var _i18n = require("@react-aria/i18n");
|
35
|
+
var _utils = require("@react-aria/utils");
|
36
|
+
var _visuallyHidden = require("@react-aria/visually-hidden");
|
37
|
+
var _list = require("@react-stately/list");
|
38
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
39
|
+
var _ = require("../..");
|
40
|
+
var _MultivaluesContext = require("../../context/MultivaluesContext");
|
41
|
+
var _hooks = require("../../hooks");
|
42
|
+
var _pendoID = require("../../utils/devUtils/constants/pendoID");
|
43
|
+
var _isIterable = require("../../utils/devUtils/props/isIterable");
|
44
|
+
var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
|
45
|
+
var _fieldAttributes = require("../../utils/docUtils/fieldAttributes");
|
46
|
+
var _statusProp = require("../../utils/docUtils/statusProp");
|
47
|
+
var _ListBox = _interopRequireDefault(require("../ListBox"));
|
48
|
+
var _react2 = require("@emotion/react");
|
49
|
+
var _excluded = ["defaultSelectedKeys", "direction", "disabledKeys", "containerProps", "hasAutoFocus", "hasNoStatusIndicator", "helperText", "inputProps", "isDisabled", "isNotFlippable", "isReadOnly", "isRequired", "items", "label", "mode", "onBlur", "onFocus", "onInputChange", "onKeyDown", "onKeyUp", "onOpenChange", "onSelectionChange", "placeholder", "readOnlyKeys", "selectedKeys", "scrollBoxProps", "status"];
|
50
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
51
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
52
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty2(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
53
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context11, _context12; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context11 = ownKeys(Object(source), !0)).call(_context11, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context12 = ownKeys(Object(source))).call(_context12, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
54
|
+
var DefaultMultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
55
|
+
var _context8, _listBoxRef$current;
|
56
|
+
var defaultSelectedKeys = props.defaultSelectedKeys,
|
57
|
+
direction = props.direction,
|
58
|
+
_props$disabledKeys = props.disabledKeys,
|
59
|
+
disabledKeys = _props$disabledKeys === void 0 ? [] : _props$disabledKeys,
|
60
|
+
containerProps = props.containerProps,
|
61
|
+
hasAutoFocus = props.hasAutoFocus,
|
62
|
+
hasNoStatusIndicator = props.hasNoStatusIndicator,
|
63
|
+
helperText = props.helperText,
|
64
|
+
customInputProps = props.inputProps,
|
65
|
+
isDisabled = props.isDisabled,
|
66
|
+
isNotFlippable = props.isNotFlippable,
|
67
|
+
isReadOnly = props.isReadOnly,
|
68
|
+
isRequired = props.isRequired,
|
69
|
+
initialItems = props.items,
|
70
|
+
label = props.label,
|
71
|
+
mode = props.mode,
|
72
|
+
_onBlur = props.onBlur,
|
73
|
+
_onFocus = props.onFocus,
|
74
|
+
onInputChange = props.onInputChange,
|
75
|
+
onKeyDown = props.onKeyDown,
|
76
|
+
_onKeyUp = props.onKeyUp,
|
77
|
+
onOpenChange = props.onOpenChange,
|
78
|
+
onSelectionChange = props.onSelectionChange,
|
79
|
+
placeholder = props.placeholder,
|
80
|
+
_props$readOnlyKeys = props.readOnlyKeys,
|
81
|
+
readOnlyKeys = _props$readOnlyKeys === void 0 ? [] : _props$readOnlyKeys,
|
82
|
+
selectedKeys = props.selectedKeys,
|
83
|
+
scrollBoxProps = props.scrollBoxProps,
|
84
|
+
status = props.status,
|
85
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
86
|
+
var hasCustomValue = mode === 'non-restrictive';
|
87
|
+
(0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
|
88
|
+
var _useState = (0, _react.useState)([]),
|
89
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
90
|
+
customItems = _useState2[0],
|
91
|
+
setCustomItems = _useState2[1];
|
92
|
+
var _useState3 = (0, _react.useState)(''),
|
93
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
94
|
+
filterString = _useState4[0],
|
95
|
+
setFilterString = _useState4[1];
|
96
|
+
var _useState5 = (0, _react.useState)(false),
|
97
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
98
|
+
isOpen = _useState6[0],
|
99
|
+
setIsOpen = _useState6[1];
|
100
|
+
var _useState7 = (0, _react.useState)(initialItems),
|
101
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
102
|
+
items = _useState8[0],
|
103
|
+
setItems = _useState8[1];
|
104
|
+
var _useState9 = (0, _react.useState)(''),
|
105
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
|
106
|
+
activeDescendant = _useState10[0],
|
107
|
+
setActiveDescendant = _useState10[1];
|
108
|
+
var toggleItems = function toggleItems(keys) {
|
109
|
+
setItems((0, _filter["default"])(initialItems).call(initialItems, function (item) {
|
110
|
+
var _context;
|
111
|
+
return !(0, _includes["default"])(_context = (0, _from["default"])(keys)).call(_context, item.key);
|
112
|
+
}));
|
113
|
+
setFilterString('');
|
114
|
+
if (onSelectionChange) onSelectionChange(keys);
|
115
|
+
};
|
116
|
+
var _useFilter = (0, _i18n.useFilter)({
|
117
|
+
sensitivity: 'base'
|
118
|
+
}),
|
119
|
+
contains = _useFilter.contains;
|
120
|
+
var state = (0, _list.useListState)(_objectSpread(_objectSpread({}, props), {}, {
|
121
|
+
filter: function filter(nodes) {
|
122
|
+
var _context2;
|
123
|
+
return (0, _filter["default"])(_context2 = (0, _from["default"])(nodes)).call(_context2, function (item) {
|
124
|
+
return contains(item.textValue, filterString);
|
125
|
+
});
|
126
|
+
},
|
127
|
+
items: (0, _filter["default"])(items).call(items, function (_ref) {
|
128
|
+
var key = _ref.key;
|
129
|
+
return !(0, _includes["default"])(readOnlyKeys).call(readOnlyKeys, key);
|
130
|
+
}),
|
131
|
+
onSelectionChange: toggleItems,
|
132
|
+
selectionMode: 'multiple'
|
133
|
+
}));
|
134
|
+
var selectionManager = state.selectionManager;
|
135
|
+
var filteredItems = (0, _react.useMemo)(function () {
|
136
|
+
return (0, _from["default"])(state.collection);
|
137
|
+
}, [state.collection, filterString]);
|
138
|
+
var close = function close() {
|
139
|
+
return setIsOpen(false);
|
140
|
+
};
|
141
|
+
var closeBadgeRefs = (0, _react.useRef)([]);
|
142
|
+
var inputWrapperRef = (0, _react.useRef)();
|
143
|
+
var inputRef = (0, _react.useRef)();
|
144
|
+
/* istanbul ignore next */
|
145
|
+
(0, _react.useImperativeHandle)(ref, function () {
|
146
|
+
return inputWrapperRef.current;
|
147
|
+
});
|
148
|
+
(0, _react.useImperativeHandle)(ref, function () {
|
149
|
+
return inputRef.current;
|
150
|
+
});
|
151
|
+
var listBoxRef = (0, _react.useRef)();
|
152
|
+
var popoverRef = (0, _react.useRef)();
|
153
|
+
var _useOverlayPosition = (0, _reactAria.useOverlayPosition)({
|
154
|
+
isOpen: isOpen,
|
155
|
+
onClose: close,
|
156
|
+
offset: 1,
|
157
|
+
overlayRef: popoverRef,
|
158
|
+
placement: "".concat(direction, " end"),
|
159
|
+
scrollRef: listBoxRef,
|
160
|
+
shouldFlip: !isNotFlippable,
|
161
|
+
targetRef: inputWrapperRef
|
162
|
+
}),
|
163
|
+
overlayProps = _useOverlayPosition.overlayProps,
|
164
|
+
placement = _useOverlayPosition.placement,
|
165
|
+
updatePosition = _useOverlayPosition.updatePosition;
|
166
|
+
|
167
|
+
// Update position once the ListBox has rendered. This ensures that
|
168
|
+
// it flips properly when it doesn't fit in the available space.
|
169
|
+
/* istanbul ignore next */
|
170
|
+
(0, _utils.useLayoutEffect)(function () {
|
171
|
+
if (isOpen) {
|
172
|
+
requestAnimationFrame(function () {
|
173
|
+
updatePosition();
|
174
|
+
});
|
175
|
+
}
|
176
|
+
}, [isOpen, selectionManager.selectedKeys, updatePosition]);
|
177
|
+
|
178
|
+
// Measure the width of the input to inform the width of the menu (below).
|
179
|
+
var _useState11 = (0, _react.useState)(null),
|
180
|
+
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
181
|
+
menuWidth = _useState12[0],
|
182
|
+
setMenuWidth = _useState12[1];
|
183
|
+
var onResize = (0, _react.useCallback)(function () {
|
184
|
+
/* istanbul ignore next */
|
185
|
+
if (inputWrapperRef.current) {
|
186
|
+
setMenuWidth("".concat(inputWrapperRef.current.offsetWidth + 2, "px"));
|
187
|
+
}
|
188
|
+
}, [inputWrapperRef, isOpen, setMenuWidth]);
|
189
|
+
(0, _utils.useResizeObserver)({
|
190
|
+
ref: inputWrapperRef,
|
191
|
+
onResize: onResize
|
192
|
+
});
|
193
|
+
(0, _utils.useLayoutEffect)(onResize, [onResize]);
|
194
|
+
var style = _objectSpread(_objectSpread({}, overlayProps.style), {}, {
|
195
|
+
width: menuWidth,
|
196
|
+
minWidth: menuWidth
|
197
|
+
});
|
198
|
+
(0, _react.useEffect)(function () {
|
199
|
+
if (defaultSelectedKeys) selectionManager.setSelectedKeys(defaultSelectedKeys);
|
200
|
+
}, []);
|
201
|
+
(0, _react.useEffect)(function () {
|
202
|
+
if (selectedKeys) selectionManager.setSelectedKeys(selectedKeys);
|
203
|
+
}, []);
|
204
|
+
(0, _react.useEffect)(function () {
|
205
|
+
if (onOpenChange) onOpenChange(isOpen);
|
206
|
+
if (!isOpen) setActiveDescendant('');
|
207
|
+
}, [isOpen]);
|
208
|
+
var addNewBadgeFromInput = function addNewBadgeFromInput(inputValue) {
|
209
|
+
var _context3, _context4;
|
210
|
+
var key = (0, _trim["default"])(inputValue).call(inputValue);
|
211
|
+
if (key === '') {
|
212
|
+
return;
|
213
|
+
}
|
214
|
+
if (state.selectionManager.isSelected(key)) {
|
215
|
+
return;
|
216
|
+
}
|
217
|
+
selectionManager.setSelectedKeys((0, _concat["default"])(_context3 = []).call(_context3, (0, _from["default"])(selectionManager.state.selectedKeys), [key]));
|
218
|
+
setCustomItems((0, _concat["default"])(_context4 = []).call(_context4, customItems, [{
|
219
|
+
id: key,
|
220
|
+
key: key,
|
221
|
+
name: key
|
222
|
+
}]));
|
223
|
+
setFilterString('');
|
224
|
+
};
|
225
|
+
|
226
|
+
// there actually is a test for this, but coverage is not picking it up.
|
227
|
+
/* istanbul ignore next */
|
228
|
+
var selectTheOnlyFilteredItem = function selectTheOnlyFilteredItem() {
|
229
|
+
var key = filteredItems[0].key;
|
230
|
+
if (!(0, _includes["default"])(disabledKeys).call(disabledKeys, key)) {
|
231
|
+
selectionManager.toggleSelection(filteredItems[0].key);
|
232
|
+
setFilterString('');
|
233
|
+
}
|
234
|
+
};
|
235
|
+
|
236
|
+
// there actually is a test for this, but coverage is not picking it up.
|
237
|
+
/* istanbul ignore next */
|
238
|
+
var onBlurTextField = function onBlurTextField() {
|
239
|
+
if (hasCustomValue && filteredItems.length === 1) {
|
240
|
+
selectTheOnlyFilteredItem();
|
241
|
+
} else if (hasCustomValue) {
|
242
|
+
addNewBadgeFromInput(filterString);
|
243
|
+
}
|
244
|
+
};
|
245
|
+
|
246
|
+
/* istanbul ignore next */
|
247
|
+
var keyDown = function keyDown(e) {
|
248
|
+
switch (e.key) {
|
249
|
+
case 'Enter':
|
250
|
+
{
|
251
|
+
e.preventDefault();
|
252
|
+
if (selectionManager.focusedKey) {
|
253
|
+
var key = selectionManager.focusedKey;
|
254
|
+
if (!(0, _includes["default"])(disabledKeys).call(disabledKeys, key)) {
|
255
|
+
selectionManager.toggleSelection(selectionManager.focusedKey);
|
256
|
+
setFilterString('');
|
257
|
+
}
|
258
|
+
} else if (hasCustomValue && !selectionManager.focusedKey) {
|
259
|
+
var _key = e.target.value;
|
260
|
+
if (_key === '') {
|
261
|
+
return;
|
262
|
+
}
|
263
|
+
addNewBadgeFromInput(e.target.value);
|
264
|
+
} else if (hasCustomValue && filteredItems.length === 1) {
|
265
|
+
selectTheOnlyFilteredItem();
|
266
|
+
} else if (!hasCustomValue) {
|
267
|
+
setFilterString('');
|
268
|
+
close();
|
269
|
+
}
|
270
|
+
break;
|
271
|
+
}
|
272
|
+
case 'ArrowDown':
|
273
|
+
{
|
274
|
+
var nextKey = state.collection.getKeyAfter(selectionManager.focusedKey) || state.collection.getFirstKey();
|
275
|
+
if (nextKey) selectionManager.setFocusedKey(nextKey);
|
276
|
+
break;
|
277
|
+
}
|
278
|
+
case 'ArrowUp':
|
279
|
+
{
|
280
|
+
var prevKey = state.collection.getKeyBefore(selectionManager.focusedKey) || state.collection.getLastKey();
|
281
|
+
if (prevKey) selectionManager.setFocusedKey(prevKey);
|
282
|
+
break;
|
283
|
+
}
|
284
|
+
case 'Escape':
|
285
|
+
{
|
286
|
+
setFilterString('');
|
287
|
+
close();
|
288
|
+
break;
|
289
|
+
}
|
290
|
+
default:
|
291
|
+
break;
|
292
|
+
}
|
293
|
+
if (onKeyDown) onKeyDown(e.nativeEvent);
|
294
|
+
};
|
295
|
+
var deleteItem = function deleteItem(key, e) {
|
296
|
+
var _context5;
|
297
|
+
var activeBadgesKeys = (0, _reduce["default"])(_context5 = closeBadgeRefs.current).call(_context5, function (result, item) {
|
298
|
+
if (item) {
|
299
|
+
result.push(item.dataset.item);
|
300
|
+
}
|
301
|
+
return result;
|
302
|
+
}, []);
|
303
|
+
selectionManager.toggleSelection(key);
|
304
|
+
if (e.pointerType !== 'keyboard') return;
|
305
|
+
if (activeBadgesKeys.length > 1) {
|
306
|
+
var badgeIndex = (0, _findIndex["default"])(activeBadgesKeys).call(activeBadgesKeys, function (item) {
|
307
|
+
return item === key;
|
308
|
+
});
|
309
|
+
var nextFocusBadgeIndex = badgeIndex === activeBadgesKeys.length - 1 ? badgeIndex - 1 : badgeIndex;
|
310
|
+
closeBadgeRefs.current[nextFocusBadgeIndex].focus();
|
311
|
+
} else {
|
312
|
+
inputRef.current.focus();
|
313
|
+
}
|
314
|
+
};
|
315
|
+
var readOnlyTextItem = function readOnlyTextItem(key, name) {
|
316
|
+
return (0, _react2.jsx)(_.Text, {
|
317
|
+
key: key,
|
318
|
+
role: "presentation",
|
319
|
+
label: name,
|
320
|
+
variant: "bodyStrong",
|
321
|
+
sx: {
|
322
|
+
bg: 'accent.95',
|
323
|
+
fontSize: 'sm',
|
324
|
+
alignSelf: 'center',
|
325
|
+
':not(:last-of-type):after': {
|
326
|
+
content: "\",\xA0\""
|
327
|
+
}
|
328
|
+
}
|
329
|
+
}, name);
|
330
|
+
};
|
331
|
+
var readOnlyInputEntry = isReadOnly && (readOnlyKeys.length ? (0, _map["default"])(readOnlyKeys).call(readOnlyKeys, function (key) {
|
332
|
+
var _context6, _context7;
|
333
|
+
var item = (0, _find["default"])(_context6 = (0, _concat["default"])(_context7 = []).call(_context7, initialItems, customItems)).call(_context6, function (el) {
|
334
|
+
return el.key === key;
|
335
|
+
});
|
336
|
+
if (item) {
|
337
|
+
return readOnlyTextItem(item.key, item.name);
|
338
|
+
}
|
339
|
+
return null;
|
340
|
+
}) : (0, _map["default"])(initialItems).call(initialItems, function (item) {
|
341
|
+
return readOnlyTextItem(item.key, item.name);
|
342
|
+
}));
|
343
|
+
var readOnlyItems = !isReadOnly && (0, _map["default"])(readOnlyKeys).call(readOnlyKeys, function (key) {
|
344
|
+
var item = (0, _find["default"])(initialItems).call(initialItems, function (el) {
|
345
|
+
return el.key === key;
|
346
|
+
});
|
347
|
+
if (item) {
|
348
|
+
return (0, _react2.jsx)(_.Badge, {
|
349
|
+
key: item.key,
|
350
|
+
label: item.name,
|
351
|
+
variant: "readOnlyBadge",
|
352
|
+
bg: "white",
|
353
|
+
textProps: {
|
354
|
+
sx: {
|
355
|
+
color: 'text.primary',
|
356
|
+
tabIndex: '-1'
|
357
|
+
}
|
358
|
+
},
|
359
|
+
as: "li",
|
360
|
+
tabIndex: 0
|
361
|
+
});
|
362
|
+
}
|
363
|
+
return null;
|
364
|
+
});
|
365
|
+
var multivaluesFieldBadge = function multivaluesFieldBadge(item, index) {
|
366
|
+
return (0, _react2.jsx)(_.Box, {
|
367
|
+
as: "li",
|
368
|
+
key: "li ".concat(item.key)
|
369
|
+
}, (0, _react2.jsx)(_.Badge, (0, _extends2["default"])({
|
370
|
+
key: item.key,
|
371
|
+
role: "presentation",
|
372
|
+
variant: "selectedItemBadge",
|
373
|
+
bg: "active",
|
374
|
+
label: item.name,
|
375
|
+
slots: item.slots
|
376
|
+
}, item.badgeProps), (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
|
377
|
+
"aria-label": "delete ".concat(item.name),
|
378
|
+
"data-item": item.name,
|
379
|
+
onPress: function onPress(e) {
|
380
|
+
return deleteItem(item.key, e);
|
381
|
+
},
|
382
|
+
ref: function ref(el) {
|
383
|
+
return closeBadgeRefs.current[index] = el;
|
384
|
+
} // eslint-disable-line
|
385
|
+
,
|
386
|
+
variant: "badge.deleteButton",
|
387
|
+
"aria-describedby": "selectedKeysState"
|
388
|
+
}, item.buttonProps), (0, _react2.jsx)(_.Icon, {
|
389
|
+
icon: _CloseIcon["default"],
|
390
|
+
color: "white",
|
391
|
+
size: 14,
|
392
|
+
title: {
|
393
|
+
name: 'Clear Icon'
|
394
|
+
}
|
395
|
+
}))));
|
396
|
+
};
|
397
|
+
var selectedItems = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _map["default"])(_context8 = (0, _from["default"])(selectionManager.selectedKeys)).call(_context8, function (key, i) {
|
398
|
+
var _context9, _context10;
|
399
|
+
var item = (0, _find["default"])(_context9 = (0, _concat["default"])(_context10 = []).call(_context10, initialItems, customItems)).call(_context9, function (el) {
|
400
|
+
return el.key === key;
|
401
|
+
});
|
402
|
+
if (item) {
|
403
|
+
return multivaluesFieldBadge(item, i);
|
404
|
+
}
|
405
|
+
return null;
|
406
|
+
}));
|
407
|
+
var listbox = (0, _react2.jsx)(_reactAria.FocusScope, null, (0, _react2.jsx)(_reactAria.DismissButton, {
|
408
|
+
onDismiss: close
|
409
|
+
}), (0, _react2.jsx)(_.ScrollBox, scrollBoxProps, (0, _react2.jsx)(_ListBox["default"], {
|
410
|
+
ref: listBoxRef,
|
411
|
+
hasAutoFocus: hasAutoFocus,
|
412
|
+
hasVirtualFocus: true,
|
413
|
+
hasNoEmptySelection: true,
|
414
|
+
state: state,
|
415
|
+
"aria-label": "List of options"
|
416
|
+
})), (0, _react2.jsx)(_reactAria.DismissButton, {
|
417
|
+
onDismiss: close
|
418
|
+
}));
|
419
|
+
var visuallyHidden = (0, _react2.jsx)(_visuallyHidden.VisuallyHidden, {
|
420
|
+
id: "selectedKeysState"
|
421
|
+
}, "Selected options:", (0, _from["default"])(selectionManager.selectedKeys).join(' '));
|
422
|
+
|
423
|
+
// the reason we are using two different visually hiddens, rather than one that updates it's value
|
424
|
+
// is because there are tests that break if an empty visually hidden is rendered in the TextField
|
425
|
+
var EmptyVisuallyHidden = function EmptyVisuallyHidden() {
|
426
|
+
return (0, _react2.jsx)(_visuallyHidden.VisuallyHidden, {
|
427
|
+
id: "emptyKeysState"
|
428
|
+
}, "Nothing Selected");
|
429
|
+
};
|
430
|
+
var inputProps = _objectSpread(_objectSpread({}, customInputProps), {}, {
|
431
|
+
controlProps: {
|
432
|
+
'aria-activedescendant': activeDescendant,
|
433
|
+
'aria-controls': (_listBoxRef$current = listBoxRef.current) === null || _listBoxRef$current === void 0 ? void 0 : _listBoxRef$current.id,
|
434
|
+
'aria-expanded': isOpen,
|
435
|
+
role: 'combobox',
|
436
|
+
ref: inputRef
|
437
|
+
},
|
438
|
+
hasAutoFocus: hasAutoFocus,
|
439
|
+
hasNoStatusIndicator: hasNoStatusIndicator,
|
440
|
+
isDisabled: isDisabled,
|
441
|
+
isReadOnly: isReadOnly,
|
442
|
+
isRequired: isRequired,
|
443
|
+
label: label,
|
444
|
+
placeholder: placeholder,
|
445
|
+
wrapperProps: {
|
446
|
+
ref: inputWrapperRef,
|
447
|
+
variant: 'forms.input.multivaluesWrapper',
|
448
|
+
sx: isReadOnly && {
|
449
|
+
boxShadow: 'inset 0 0 0 100px #e5e9f8',
|
450
|
+
border: 'none'
|
451
|
+
}
|
452
|
+
},
|
453
|
+
status: status
|
454
|
+
});
|
455
|
+
return (0, _react2.jsx)(_MultivaluesContext.MultivaluesContext.Provider, {
|
456
|
+
value: setActiveDescendant
|
457
|
+
}, (0, _react2.jsx)(_.Box, containerProps, (0, _react2.jsx)(_.TextField, (0, _extends2["default"])({
|
458
|
+
onBlur: function onBlur(e) {
|
459
|
+
setIsOpen(false);
|
460
|
+
if (filterString !== '') onBlurTextField();
|
461
|
+
if (_onBlur) _onBlur(e.nativeEvent);
|
462
|
+
if (!hasCustomValue) setFilterString('');
|
463
|
+
},
|
464
|
+
onChange: function onChange(e) {
|
465
|
+
if (!isOpen) setIsOpen(true);
|
466
|
+
setFilterString(e.target.value);
|
467
|
+
if (onInputChange) onInputChange(e.target.value);
|
468
|
+
},
|
469
|
+
onFocus: function onFocus(e) {
|
470
|
+
if (!isReadOnly) {
|
471
|
+
setIsOpen(true);
|
472
|
+
}
|
473
|
+
if (_onFocus) _onFocus(e.nativeEvent);
|
474
|
+
},
|
475
|
+
onKeyDown: keyDown,
|
476
|
+
onKeyUp: function onKeyUp(e) {
|
477
|
+
return _onKeyUp && _onKeyUp(e.nativeEvent);
|
478
|
+
},
|
479
|
+
"aria-describedby": selectionManager.selectedKeys.size > 0 ? 'selectedKeysState' : 'emptyKeysState',
|
480
|
+
slots: {
|
481
|
+
beforeInput: (0, _react2.jsx)(_react["default"].Fragment, null, readOnlyItems && (0, _react2.jsx)(_.Box, {
|
482
|
+
as: "ul",
|
483
|
+
isRow: true,
|
484
|
+
sx: {
|
485
|
+
p: 0,
|
486
|
+
flexWrap: 'wrap'
|
487
|
+
}
|
488
|
+
}, readOnlyItems), ' ', selectedItems && (0, _react2.jsx)(_.Box, {
|
489
|
+
as: "ul",
|
490
|
+
isRow: true,
|
491
|
+
sx: {
|
492
|
+
p: 0,
|
493
|
+
flexWrap: 'wrap'
|
494
|
+
}
|
495
|
+
}, selectedItems), readOnlyInputEntry, selectionManager.selectedKeys.size > 0 && visuallyHidden)
|
496
|
+
} // eslint-disable-line
|
497
|
+
,
|
498
|
+
value: filterString,
|
499
|
+
helperText: helperText,
|
500
|
+
"aria-invalid": status === 'error' && true
|
501
|
+
}, (0, _pendoID.getPendoID)('MultivaluesField'), others, inputProps)), (0, _react2.jsx)(_.PopoverContainer, {
|
502
|
+
hasNoArrow: true,
|
503
|
+
isNonModal: true,
|
504
|
+
isOpen: !state.collection.size ? false : isOpen,
|
505
|
+
onClose: close,
|
506
|
+
placement: placement,
|
507
|
+
ref: popoverRef,
|
508
|
+
style: style
|
509
|
+
}, listbox), (0, _react2.jsx)(EmptyVisuallyHidden, null)));
|
510
|
+
});
|
511
|
+
DefaultMultivaluesField.propTypes = _objectSpread(_objectSpread(_objectSpread({
|
512
|
+
/** The initial selected keys in the collection (uncontrolled). */
|
513
|
+
defaultSelectedKeys: _isIterable.isIterableProp,
|
514
|
+
/** Where the menu opens relative to its trigger. */
|
515
|
+
direction: _propTypes["default"].oneOf(['top', 'right', 'bottom', 'left']),
|
516
|
+
/**
|
517
|
+
* The item keys that are disabled. These items cannot be selected.
|
518
|
+
*/
|
519
|
+
disabledKeys: _isIterable.isIterableProp,
|
520
|
+
/** Whether the element should receive focus on render. */
|
521
|
+
hasAutoFocus: _propTypes["default"].bool,
|
522
|
+
/** Whether the field has a status indicator. */
|
523
|
+
hasNoStatusIndicator: _propTypes["default"].bool,
|
524
|
+
/** Text rendered below the input. */
|
525
|
+
helperText: _propTypes["default"].node,
|
526
|
+
/**
|
527
|
+
* Props that get passed as-is to the underlying TextField element
|
528
|
+
*/
|
529
|
+
inputProps: _propTypes["default"].shape({}),
|
530
|
+
/** Whether the input is disabled. */
|
531
|
+
isDisabled: _propTypes["default"].bool,
|
532
|
+
/**
|
533
|
+
* Whether the menu is prevented from flipping directions when insufficient space is
|
534
|
+
* available for the given `direction` placement.
|
535
|
+
*/
|
536
|
+
isNotFlippable: _propTypes["default"].bool,
|
537
|
+
/** Whether the input can be selected but not changed by the user. */
|
538
|
+
isReadOnly: _propTypes["default"].bool,
|
539
|
+
/** Whether user input is required on the input before form submission. */
|
540
|
+
isRequired: _propTypes["default"].bool,
|
541
|
+
/** The list of items.
|
542
|
+
*
|
543
|
+
* **Note:** Every item needs to have key and name properties.
|
544
|
+
*
|
545
|
+
* `Array<{key: string, name: string}>`
|
546
|
+
*/
|
547
|
+
items: _isIterable.isIterableProp,
|
548
|
+
/** The rendered label for the field. */
|
549
|
+
label: _propTypes["default"].string,
|
550
|
+
/** Whether the component allows to create new values or only choose from the selection list */
|
551
|
+
mode: _propTypes["default"].oneOf(['restrictive', 'non-restrictive']),
|
552
|
+
/**
|
553
|
+
* Handler that is called when the element loses focus.
|
554
|
+
*
|
555
|
+
* `(e: FocusEvent) => void`
|
556
|
+
*/
|
557
|
+
onBlur: _propTypes["default"].func,
|
558
|
+
/**
|
559
|
+
* Handler that is called when the element receives focus.
|
560
|
+
*
|
561
|
+
* `(e: FocusEvent) => void`
|
562
|
+
*/
|
563
|
+
onFocus: _propTypes["default"].func,
|
564
|
+
/**
|
565
|
+
* Handler that is called when the input value changes.
|
566
|
+
*
|
567
|
+
* `(value: string) => void`
|
568
|
+
*/
|
569
|
+
onInputChange: _propTypes["default"].func,
|
570
|
+
/**
|
571
|
+
* Handler that is called when a key is pressed.
|
572
|
+
*
|
573
|
+
* `(e: KeyboardEvent) => void`
|
574
|
+
*/
|
575
|
+
onKeyDown: _propTypes["default"].func,
|
576
|
+
/**
|
577
|
+
* Handler that is called when a key is released.
|
578
|
+
*
|
579
|
+
* `(e: KeyboardEvent) => void`
|
580
|
+
*/
|
581
|
+
onKeyUp: _propTypes["default"].func,
|
582
|
+
/**
|
583
|
+
* Method that is called when the open state of the menu changes.
|
584
|
+
*
|
585
|
+
* `(isOpen: boolean) => void`
|
586
|
+
*/
|
587
|
+
onOpenChange: _propTypes["default"].func,
|
588
|
+
/**
|
589
|
+
* Handler that is called when the selection changes.
|
590
|
+
*
|
591
|
+
* `(keys: Iterable<Key>) => any`
|
592
|
+
*/
|
593
|
+
onSelectionChange: _propTypes["default"].func,
|
594
|
+
/** Temporary text that occupies the text input when it is empty. */
|
595
|
+
placeholder: _propTypes["default"].string,
|
596
|
+
/**
|
597
|
+
* The item keys that are readonly. These items cannot be changed or selected.
|
598
|
+
*/
|
599
|
+
readOnlyKeys: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
600
|
+
/** The currently selected keys in the collection (controlled). */
|
601
|
+
selectedKeys: _isIterable.isIterableProp,
|
602
|
+
// /** Props object that is spread directly into the ScrollBox element. */
|
603
|
+
/** @ignore */
|
604
|
+
scrollBoxProps: _propTypes["default"].shape({
|
605
|
+
maxHeight: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object, _propTypes["default"].number])
|
606
|
+
})
|
607
|
+
}, _statusProp.statusPropTypes), _ariaAttributes.ariaAttributesBasePropTypes), _fieldAttributes.inputFieldAttributesBasePropTypes);
|
608
|
+
DefaultMultivaluesField.defaultProps = _objectSpread({
|
609
|
+
direction: 'bottom',
|
610
|
+
isReadOnly: false,
|
611
|
+
scrollBoxProps: {
|
612
|
+
maxHeight: 300
|
613
|
+
}
|
614
|
+
}, _statusProp.statusDefaultProp);
|
615
|
+
var _default = DefaultMultivaluesField;
|
616
|
+
exports["default"] = _default;
|