rsuite 5.49.0 → 5.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/Cascader/styles/index.less +4 -4
- package/DateRangePicker/styles/index.less +15 -5
- package/Dropdown/styles/index.less +5 -4
- package/Dropdown/styles/mixin.less +0 -11
- package/Picker/styles/index.less +31 -24
- package/Picker/styles/mixin.less +17 -13
- package/README.md +4 -4
- package/TagInput/styles/index.less +1 -1
- package/cjs/AutoComplete/AutoComplete.js +25 -26
- package/cjs/Calendar/Calendar.d.ts +5 -1
- package/cjs/Calendar/CalendarContainer.d.ts +5 -1
- package/cjs/Cascader/Cascader.js +46 -48
- package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
- package/cjs/CheckPicker/CheckPicker.js +33 -36
- package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
- package/cjs/DatePicker/DatePicker.d.ts +5 -1
- package/cjs/DatePicker/DatePicker.js +2 -4
- package/cjs/DatePicker/Toolbar.js +2 -1
- package/cjs/DateRangeInput/DateRangeInput.js +2 -2
- package/cjs/DateRangePicker/Calendar.js +24 -23
- package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
- package/cjs/DateRangePicker/DateRangePicker.js +239 -201
- package/cjs/DateRangePicker/types.d.ts +11 -3
- package/cjs/DateRangePicker/utils.d.ts +2 -1
- package/cjs/DateRangePicker/utils.js +7 -5
- package/cjs/FormControl/FormControl.d.ts +11 -1
- package/cjs/FormControl/FormControl.js +6 -5
- package/cjs/InputPicker/InputPicker.js +62 -63
- package/cjs/MultiCascader/MultiCascader.js +40 -42
- package/cjs/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
- package/cjs/{DatePicker → Picker}/PickerIndicator.js +2 -1
- package/cjs/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
- package/cjs/Picker/PickerToggle.d.ts +17 -22
- package/cjs/Picker/PickerToggle.js +52 -177
- package/cjs/Picker/index.d.ts +3 -0
- package/cjs/Picker/index.js +10 -1
- package/cjs/Picker/usePickerRef.d.ts +3 -1
- package/cjs/Picker/usePickerRef.js +13 -7
- package/cjs/Picker/utils.d.ts +5 -9
- package/cjs/Picker/utils.js +22 -89
- package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
- package/cjs/SelectPicker/SelectPicker.js +39 -42
- package/cjs/TreePicker/TreePicker.js +72 -75
- package/cjs/utils/constants.d.ts +2 -1
- package/cjs/utils/constants.js +1 -0
- package/cjs/utils/dateUtils.d.ts +0 -1
- package/cjs/utils/dateUtils.js +0 -6
- package/cjs/utils/getStringLength.d.ts +2 -0
- package/cjs/utils/getStringLength.js +18 -0
- package/cjs/utils/index.d.ts +1 -0
- package/cjs/utils/index.js +4 -1
- package/dist/rsuite-no-reset-rtl.css +92 -69
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +92 -69
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +92 -69
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +92 -69
- package/dist/rsuite.js +67 -46
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/AutoComplete/AutoComplete.js +28 -29
- package/esm/Calendar/Calendar.d.ts +5 -1
- package/esm/Calendar/CalendarContainer.d.ts +5 -1
- package/esm/Cascader/Cascader.js +49 -51
- package/esm/CheckPicker/CheckPicker.d.ts +2 -2
- package/esm/CheckPicker/CheckPicker.js +36 -39
- package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
- package/esm/DatePicker/DatePicker.d.ts +5 -1
- package/esm/DatePicker/DatePicker.js +1 -3
- package/esm/DatePicker/Toolbar.js +2 -1
- package/esm/DateRangeInput/DateRangeInput.js +2 -2
- package/esm/DateRangePicker/Calendar.js +25 -23
- package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
- package/esm/DateRangePicker/DateRangePicker.js +241 -203
- package/esm/DateRangePicker/types.d.ts +11 -3
- package/esm/DateRangePicker/utils.d.ts +2 -1
- package/esm/DateRangePicker/utils.js +7 -5
- package/esm/FormControl/FormControl.d.ts +11 -1
- package/esm/FormControl/FormControl.js +4 -3
- package/esm/InputPicker/InputPicker.js +64 -65
- package/esm/MultiCascader/MultiCascader.js +43 -45
- package/esm/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
- package/esm/{DatePicker → Picker}/PickerIndicator.js +2 -1
- package/esm/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
- package/esm/Picker/PickerToggle.d.ts +17 -22
- package/esm/Picker/PickerToggle.js +54 -179
- package/esm/Picker/index.d.ts +3 -0
- package/esm/Picker/index.js +3 -0
- package/esm/Picker/usePickerRef.d.ts +3 -1
- package/esm/Picker/usePickerRef.js +13 -8
- package/esm/Picker/utils.d.ts +5 -9
- package/esm/Picker/utils.js +24 -90
- package/esm/SelectPicker/SelectPicker.d.ts +2 -2
- package/esm/SelectPicker/SelectPicker.js +42 -45
- package/esm/TreePicker/TreePicker.js +75 -78
- package/esm/utils/constants.d.ts +2 -1
- package/esm/utils/constants.js +1 -0
- package/esm/utils/dateUtils.d.ts +0 -1
- package/esm/utils/dateUtils.js +0 -5
- package/esm/utils/getStringLength.d.ts +2 -0
- package/esm/utils/getStringLength.js +13 -0
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.js +1 -0
- package/package.json +1 -1
- package/styles/mixins/combobox.less +10 -0
- /package/cjs/{DatePicker → Picker}/PickerLabel.js +0 -0
- /package/esm/{DatePicker → Picker}/PickerLabel.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
-
import React, { useState,
|
|
4
|
+
import React, { useState, useCallback } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import pick from 'lodash/pick';
|
|
7
7
|
import omit from 'lodash/omit';
|
|
@@ -12,8 +12,8 @@ import Checkbox from '../Checkbox';
|
|
|
12
12
|
import { useCascadeValue, useColumnData, useFlattenData, isSomeChildChecked } from './utils';
|
|
13
13
|
import { getNodeParents, findNodeOfTree } from '../utils/treeUtils';
|
|
14
14
|
import { getColumnsAndPaths } from '../Cascader/utils';
|
|
15
|
-
import { createChainedFunction, mergeRefs, getSafeRegExpString, useClassNames, useCustom, useUpdateEffect, useControlled } from '../utils';
|
|
16
|
-
import { PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, usePickerClassName,
|
|
15
|
+
import { createChainedFunction, mergeRefs, getSafeRegExpString, useClassNames, useCustom, useUpdateEffect, useControlled, useEventCallback } from '../utils';
|
|
16
|
+
import { PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, usePickerClassName, usePickerRef, useToggleKeyDownEvent, useFocusItemValue, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
|
|
17
17
|
var emptyArray = [];
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -114,15 +114,12 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
114
114
|
var _useState2 = useState(),
|
|
115
115
|
selectedPaths = _useState2[0],
|
|
116
116
|
setSelectedPaths = _useState2[1];
|
|
117
|
-
var
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
overlayRef: overlayRef,
|
|
124
|
-
targetRef: targetRef
|
|
125
|
-
});
|
|
117
|
+
var _usePickerRef = usePickerRef(ref),
|
|
118
|
+
trigger = _usePickerRef.trigger,
|
|
119
|
+
root = _usePickerRef.root,
|
|
120
|
+
target = _usePickerRef.target,
|
|
121
|
+
overlay = _usePickerRef.overlay,
|
|
122
|
+
searchInput = _usePickerRef.searchInput;
|
|
126
123
|
var _useCustom = useCustom('Picker', overrideLocale),
|
|
127
124
|
locale = _useCustom.locale,
|
|
128
125
|
rtl = _useCustom.rtl;
|
|
@@ -139,7 +136,7 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
139
136
|
valueKey: valueKey,
|
|
140
137
|
defaultLayer: selectedPaths !== null && selectedPaths !== void 0 && selectedPaths.length ? selectedPaths.length - 1 : 0,
|
|
141
138
|
target: function target() {
|
|
142
|
-
return
|
|
139
|
+
return overlay.current;
|
|
143
140
|
},
|
|
144
141
|
callback: useCallback(function (value) {
|
|
145
142
|
var _getColumnsAndPaths = getColumnsAndPaths(data, flattenData.find(function (item) {
|
|
@@ -173,16 +170,16 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
173
170
|
var _useState3 = useState(''),
|
|
174
171
|
searchKeyword = _useState3[0],
|
|
175
172
|
setSearchKeyword = _useState3[1];
|
|
176
|
-
var handleEntered =
|
|
173
|
+
var handleEntered = useEventCallback(function () {
|
|
177
174
|
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
178
175
|
setActive(true);
|
|
179
|
-
}
|
|
180
|
-
var handleExited =
|
|
176
|
+
});
|
|
177
|
+
var handleExited = useEventCallback(function () {
|
|
181
178
|
setActive(false);
|
|
182
179
|
setSearchKeyword('');
|
|
183
|
-
}
|
|
184
|
-
var handleSelect =
|
|
185
|
-
var _node$childrenKey, _node$childrenKey2,
|
|
180
|
+
});
|
|
181
|
+
var handleSelect = useEventCallback(function (node, cascadePaths, event) {
|
|
182
|
+
var _node$childrenKey, _node$childrenKey2, _trigger$current, _trigger$current$upda;
|
|
186
183
|
setSelectedPaths(cascadePaths);
|
|
187
184
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
|
|
188
185
|
var columnIndex = cascadePaths.length;
|
|
@@ -195,7 +192,7 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
195
192
|
children.then(function (data) {
|
|
196
193
|
node.loading = false;
|
|
197
194
|
node[childrenKey] = data;
|
|
198
|
-
if (
|
|
195
|
+
if (target.current || inline) {
|
|
199
196
|
addFlattenData(data, node);
|
|
200
197
|
addColumn(data, columnIndex);
|
|
201
198
|
}
|
|
@@ -212,9 +209,9 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
212
209
|
// Removes subsequent columns of the current column when the clicked node is a leaf node.
|
|
213
210
|
removeColumnByIndex(columnIndex);
|
|
214
211
|
}
|
|
215
|
-
(
|
|
216
|
-
}
|
|
217
|
-
var handleCheck =
|
|
212
|
+
(_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$upda = _trigger$current.updatePosition) === null || _trigger$current$upda === void 0 ? void 0 : _trigger$current$upda.call(_trigger$current);
|
|
213
|
+
});
|
|
214
|
+
var handleCheck = useEventCallback(function (node, event, checked) {
|
|
218
215
|
var nodeValue = node[valueKey];
|
|
219
216
|
var nextValue = [];
|
|
220
217
|
if (cascade) {
|
|
@@ -232,38 +229,38 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
232
229
|
setValue(nextValue);
|
|
233
230
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
234
231
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
|
|
235
|
-
}
|
|
236
|
-
var handleClean =
|
|
237
|
-
if (disabled || !
|
|
232
|
+
});
|
|
233
|
+
var handleClean = useEventCallback(function (event) {
|
|
234
|
+
if (disabled || !target.current) {
|
|
238
235
|
return;
|
|
239
236
|
}
|
|
240
237
|
setSelectedPaths([]);
|
|
241
238
|
setValue([]);
|
|
242
239
|
setColumnData([data]);
|
|
243
240
|
onChange === null || onChange === void 0 ? void 0 : onChange([], event);
|
|
244
|
-
}
|
|
245
|
-
var handleMenuPressEnter =
|
|
246
|
-
var
|
|
241
|
+
});
|
|
242
|
+
var handleMenuPressEnter = useEventCallback(function (event) {
|
|
243
|
+
var _overlay$current;
|
|
247
244
|
var focusItem = findNodeOfTree(data, function (item) {
|
|
248
245
|
return item[valueKey] === focusItemValue;
|
|
249
246
|
});
|
|
250
|
-
var checkbox = (
|
|
247
|
+
var checkbox = (_overlay$current = overlay.current) === null || _overlay$current === void 0 ? void 0 : _overlay$current.querySelector("[data-key=\"" + focusItemValue + "\"] [type=\"checkbox\"]");
|
|
251
248
|
if (checkbox) {
|
|
252
249
|
handleCheck(focusItem, event, (checkbox === null || checkbox === void 0 ? void 0 : checkbox.getAttribute('aria-checked')) !== 'true');
|
|
253
250
|
}
|
|
254
|
-
}
|
|
251
|
+
});
|
|
255
252
|
var onPickerKeyDown = useToggleKeyDownEvent(_extends({
|
|
256
253
|
toggle: !focusItemValue || !active,
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
254
|
+
trigger: trigger,
|
|
255
|
+
target: target,
|
|
256
|
+
overlay: overlay,
|
|
257
|
+
searchInput: searchInput,
|
|
261
258
|
active: active,
|
|
262
259
|
onExit: handleClean,
|
|
263
260
|
onMenuKeyDown: onFocusItem,
|
|
264
261
|
onMenuPressEnter: handleMenuPressEnter
|
|
265
262
|
}, rest));
|
|
266
|
-
var handleSearch =
|
|
263
|
+
var handleSearch = useEventCallback(function (value, event) {
|
|
267
264
|
setSearchKeyword(value);
|
|
268
265
|
onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
|
|
269
266
|
if (value) {
|
|
@@ -272,8 +269,8 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
272
269
|
setLayer(selectedPaths.length - 1);
|
|
273
270
|
}
|
|
274
271
|
setKeys([]);
|
|
275
|
-
}
|
|
276
|
-
var getSearchResult =
|
|
272
|
+
});
|
|
273
|
+
var getSearchResult = function getSearchResult() {
|
|
277
274
|
var items = [];
|
|
278
275
|
var result = flattenData.filter(function (item) {
|
|
279
276
|
if (uncheckableItemValues.some(function (value) {
|
|
@@ -295,7 +292,7 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
295
292
|
}
|
|
296
293
|
}
|
|
297
294
|
return items;
|
|
298
|
-
}
|
|
295
|
+
};
|
|
299
296
|
var renderSearchRow = function renderSearchRow(item, key) {
|
|
300
297
|
var _extends2;
|
|
301
298
|
var nodes = getNodeParents(item);
|
|
@@ -380,16 +377,16 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
380
377
|
inline: inline
|
|
381
378
|
}));
|
|
382
379
|
return /*#__PURE__*/React.createElement(PickerOverlay, {
|
|
383
|
-
ref: mergeRefs(
|
|
380
|
+
ref: mergeRefs(overlay, speakerRef),
|
|
384
381
|
className: classes,
|
|
385
382
|
style: styles,
|
|
386
|
-
target:
|
|
383
|
+
target: trigger,
|
|
387
384
|
onKeyDown: onPickerKeyDown
|
|
388
385
|
}, searchable && /*#__PURE__*/React.createElement(SearchBar, {
|
|
389
386
|
placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
|
|
390
387
|
onChange: handleSearch,
|
|
391
388
|
value: searchKeyword,
|
|
392
|
-
inputRef:
|
|
389
|
+
inputRef: searchInput
|
|
393
390
|
}), renderSearchResultPanel(), searchKeyword === '' && /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
394
391
|
id: id ? id + "-listbox" : undefined,
|
|
395
392
|
cascade: cascade,
|
|
@@ -445,7 +442,7 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
445
442
|
}
|
|
446
443
|
return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
|
|
447
444
|
pickerProps: pick(props, pickTriggerPropKeys),
|
|
448
|
-
ref:
|
|
445
|
+
ref: trigger,
|
|
449
446
|
placement: placement,
|
|
450
447
|
onEnter: createChainedFunction(handleEntered, onEnter),
|
|
451
448
|
onExited: createChainedFunction(handleExited, onExited),
|
|
@@ -453,13 +450,14 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
453
450
|
speaker: renderDropdownMenu
|
|
454
451
|
}, /*#__PURE__*/React.createElement(Component, {
|
|
455
452
|
className: classes,
|
|
456
|
-
style: style
|
|
453
|
+
style: style,
|
|
454
|
+
ref: root
|
|
457
455
|
}, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
|
|
458
456
|
id: id,
|
|
459
457
|
as: toggleAs,
|
|
460
458
|
appearance: appearance,
|
|
461
459
|
disabled: disabled,
|
|
462
|
-
ref:
|
|
460
|
+
ref: target,
|
|
463
461
|
onClean: createChainedFunction(handleClean, onClean),
|
|
464
462
|
onKeyDown: onPickerKeyDown,
|
|
465
463
|
cleanable: cleanable && !disabled,
|
|
@@ -34,7 +34,8 @@ var PickerIndicator = function PickerIndicator(_ref) {
|
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
return caretAs && /*#__PURE__*/React.createElement(Icon, {
|
|
37
|
-
as: caretAs
|
|
37
|
+
as: caretAs,
|
|
38
|
+
className: prefix('caret-icon')
|
|
38
39
|
});
|
|
39
40
|
};
|
|
40
41
|
return /*#__PURE__*/React.createElement(Component, null, addon());
|
|
@@ -4,38 +4,33 @@ import { RsRefForwardingComponent, TypeAttributes } from '../@types/common';
|
|
|
4
4
|
import { IconProps } from '@rsuite/icons/lib/Icon';
|
|
5
5
|
declare type ValueType = string | number;
|
|
6
6
|
export interface PickerToggleProps extends ToggleButtonProps {
|
|
7
|
-
|
|
8
|
-
inputValue?: ValueType | ValueType[];
|
|
9
|
-
id?: string;
|
|
7
|
+
active?: boolean;
|
|
10
8
|
hasValue?: boolean;
|
|
11
9
|
cleanable?: boolean;
|
|
12
10
|
caret?: boolean;
|
|
13
|
-
active?: boolean;
|
|
14
|
-
disabled?: boolean;
|
|
15
|
-
readOnly?: boolean;
|
|
16
|
-
plaintext?: boolean;
|
|
17
|
-
tabIndex?: number;
|
|
18
|
-
/** Whether to display an loading indicator on toggle button */
|
|
19
|
-
loading?: boolean;
|
|
20
|
-
editable?: boolean;
|
|
21
|
-
name?: string;
|
|
22
|
-
inputPlaceholder?: string;
|
|
23
|
-
inputMask?: (string | RegExp)[];
|
|
24
|
-
onInputChange?: (value: string, event: React.ChangeEvent) => void;
|
|
25
|
-
onInputPressEnter?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
26
|
-
onInputBackspace?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
27
|
-
onInputBlur?: (event: React.FocusEvent<HTMLElement>) => void;
|
|
28
|
-
onInputFocus?: (event: React.FocusEvent<HTMLElement>) => void;
|
|
29
|
-
placement?: TypeAttributes.Placement;
|
|
30
11
|
/**
|
|
31
12
|
* Custom caret component
|
|
32
13
|
* @deprecated Use `caretAs` instead
|
|
33
14
|
*/
|
|
34
15
|
caretComponent?: React.FC<IconProps>;
|
|
35
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Custom caret component
|
|
18
|
+
*/
|
|
36
19
|
caretAs?: React.ElementType;
|
|
37
|
-
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
placement?: TypeAttributes.Placement;
|
|
22
|
+
readOnly?: boolean;
|
|
23
|
+
plaintext?: boolean;
|
|
24
|
+
tabIndex?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Whether to display an loading indicator on toggle button
|
|
27
|
+
*/
|
|
28
|
+
loading?: boolean;
|
|
38
29
|
label?: React.ReactNode;
|
|
30
|
+
name?: string;
|
|
31
|
+
id?: string;
|
|
32
|
+
inputValue?: ValueType | ValueType[];
|
|
33
|
+
onClean?: (event: React.MouseEvent) => void;
|
|
39
34
|
}
|
|
40
35
|
declare const PickerToggle: RsRefForwardingComponent<typeof ToggleButton, PickerToggleProps>;
|
|
41
36
|
export default PickerToggle;
|
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
|
|
3
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
|
|
4
4
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
5
|
-
var _templateObject
|
|
6
|
-
import React, {
|
|
7
|
-
import PropTypes from 'prop-types';
|
|
8
|
-
import debounce from 'lodash/debounce';
|
|
5
|
+
var _templateObject;
|
|
6
|
+
import React, { useRef, useMemo } from 'react';
|
|
9
7
|
import ToggleButton from './ToggleButton';
|
|
10
|
-
import
|
|
11
|
-
import { useClassNames, useCustom, KEY_VALUES, mergeRefs } from '../utils';
|
|
8
|
+
import { useClassNames, mergeRefs, useEventCallback } from '../utils';
|
|
12
9
|
import Plaintext from '../Plaintext';
|
|
13
10
|
import useToggleCaret from '../utils/useToggleCaret';
|
|
14
|
-
import TextMask from '../MaskedInput/TextMask';
|
|
15
|
-
import deprecatePropType from '../utils/deprecatePropType';
|
|
16
|
-
import Loader from '../Loader';
|
|
17
11
|
import Stack from '../Stack';
|
|
18
|
-
|
|
12
|
+
import PickerIndicator from './PickerIndicator';
|
|
13
|
+
import PickerLabel from './PickerLabel';
|
|
19
14
|
var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
20
|
-
var
|
|
15
|
+
var active = props.active,
|
|
21
16
|
_props$as = props.as,
|
|
22
17
|
Component = _props$as === void 0 ? ToggleButton : _props$as,
|
|
23
18
|
_props$classPrefix = props.classPrefix,
|
|
@@ -30,26 +25,14 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
30
25
|
readOnly = props.readOnly,
|
|
31
26
|
plaintext = props.plaintext,
|
|
32
27
|
hasValue = props.hasValue,
|
|
33
|
-
editable = props.editable,
|
|
34
28
|
_props$loading = props.loading,
|
|
35
29
|
loading = _props$loading === void 0 ? false : _props$loading,
|
|
36
|
-
|
|
30
|
+
cleanable = props.cleanable,
|
|
37
31
|
_props$tabIndex = props.tabIndex,
|
|
38
|
-
|
|
32
|
+
tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
|
|
39
33
|
id = props.id,
|
|
40
|
-
value = props.value,
|
|
41
|
-
inputPlaceholder = props.inputPlaceholder,
|
|
42
34
|
inputValueProp = props.inputValue,
|
|
43
|
-
_props$inputMask = props.inputMask,
|
|
44
|
-
inputMask = _props$inputMask === void 0 ? defaultInputMask : _props$inputMask,
|
|
45
|
-
onInputChange = props.onInputChange,
|
|
46
|
-
onInputPressEnter = props.onInputPressEnter,
|
|
47
|
-
onInputBackspace = props.onInputBackspace,
|
|
48
|
-
onInputBlur = props.onInputBlur,
|
|
49
|
-
onInputFocus = props.onInputFocus,
|
|
50
35
|
onClean = props.onClean,
|
|
51
|
-
onFocus = props.onFocus,
|
|
52
|
-
onBlur = props.onBlur,
|
|
53
36
|
_props$placement = props.placement,
|
|
54
37
|
placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
|
|
55
38
|
caretComponent = props.caretComponent,
|
|
@@ -57,102 +40,29 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
57
40
|
caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
|
|
58
41
|
label = props.label,
|
|
59
42
|
name = props.name,
|
|
60
|
-
rest = _objectWithoutPropertiesLoose(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "
|
|
61
|
-
var
|
|
62
|
-
locale = _useCustom.locale;
|
|
63
|
-
var inputRef = useRef(null);
|
|
64
|
-
var comboboxRef = useRef(null);
|
|
65
|
-
var _useState = useState(false),
|
|
66
|
-
activeState = _useState[0],
|
|
67
|
-
setActive = _useState[1];
|
|
43
|
+
rest = _objectWithoutPropertiesLoose(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "loading", "cleanable", "tabIndex", "id", "inputValue", "onClean", "placement", "caretComponent", "caretAs", "label", "name"]);
|
|
44
|
+
var combobox = useRef(null);
|
|
68
45
|
var _useClassNames = useClassNames(classPrefix),
|
|
69
46
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
70
47
|
merge = _useClassNames.merge,
|
|
71
48
|
prefix = _useClassNames.prefix;
|
|
72
|
-
var
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
setInputValue = _useState2[1];
|
|
78
|
-
useEffect(function () {
|
|
79
|
-
if (comboboxRef.current) {
|
|
80
|
-
var _value = getInputValue();
|
|
81
|
-
setInputValue(_value);
|
|
49
|
+
var inputValue = useMemo(function () {
|
|
50
|
+
if (typeof inputValueProp === 'number' || typeof inputValueProp === 'string') {
|
|
51
|
+
return inputValueProp;
|
|
52
|
+
} else if (Array.isArray(inputValueProp)) {
|
|
53
|
+
return inputValueProp.join(',');
|
|
82
54
|
}
|
|
83
|
-
|
|
55
|
+
return '';
|
|
56
|
+
}, [inputValueProp]);
|
|
84
57
|
var classes = merge(className, withClassPrefix({
|
|
85
|
-
active:
|
|
58
|
+
active: active
|
|
86
59
|
}));
|
|
87
|
-
var
|
|
88
|
-
|
|
89
|
-
setActive(true);
|
|
90
|
-
}
|
|
91
|
-
if (editable) {
|
|
92
|
-
// Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
|
|
93
|
-
if (event.target === inputRef.current) {
|
|
94
|
-
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Force the input to be focused and editable.
|
|
98
|
-
if (document.activeElement === comboboxRef.current) {
|
|
99
|
-
var _inputRef$current;
|
|
100
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
101
|
-
}
|
|
102
|
-
} else {
|
|
103
|
-
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
104
|
-
}
|
|
105
|
-
}, [editable, loading, onFocus]);
|
|
106
|
-
var handleBlur = useCallback(function (event) {
|
|
107
|
-
if (inputRef.current && !editable) {
|
|
108
|
-
setActive(false);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// When activeElement is an input, it remains active.
|
|
112
|
-
if (editable && inputRef.current && document.activeElement !== inputRef.current) {
|
|
113
|
-
setActive(false);
|
|
114
|
-
}
|
|
115
|
-
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
116
|
-
}, [editable, onBlur]);
|
|
117
|
-
var handleInputBlur = function handleInputBlur(event) {
|
|
118
|
-
setInputValue(getInputValue());
|
|
119
|
-
onInputBlur === null || onInputBlur === void 0 ? void 0 : onInputBlur(event);
|
|
120
|
-
};
|
|
121
|
-
var handleClean = useCallback(function (event) {
|
|
122
|
-
var _inputRef$current2, _comboboxRef$current;
|
|
60
|
+
var handleClean = useEventCallback(function (event) {
|
|
61
|
+
var _combobox$current;
|
|
123
62
|
event.stopPropagation();
|
|
124
63
|
onClean === null || onClean === void 0 ? void 0 : onClean(event);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
editable ? (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus() : (_comboboxRef$current = comboboxRef.current) === null || _comboboxRef$current === void 0 ? void 0 : _comboboxRef$current.focus();
|
|
128
|
-
}, [editable, onClean]);
|
|
129
|
-
var handleInputChange = useCallback(function (event) {
|
|
130
|
-
var _event$target;
|
|
131
|
-
var value = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value;
|
|
132
|
-
setInputValue(value);
|
|
133
|
-
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
|
|
134
|
-
}, [onInputChange]);
|
|
135
|
-
var handleInputKeyDown = useCallback(function (event) {
|
|
136
|
-
if (editable) {
|
|
137
|
-
if (event.key === KEY_VALUES.ENTER) {
|
|
138
|
-
onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
|
|
139
|
-
}
|
|
140
|
-
if (event.key === KEY_VALUES.BACKSPACE) {
|
|
141
|
-
onInputBackspace === null || onInputBackspace === void 0 ? void 0 : onInputBackspace(event);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}, [editable, onInputPressEnter, onInputBackspace]);
|
|
145
|
-
var renderInput = useCallback(function (ref, props) {
|
|
146
|
-
return /*#__PURE__*/React.createElement("input", _extends({
|
|
147
|
-
type: "text",
|
|
148
|
-
autoComplete: "off",
|
|
149
|
-
ref: mergeRefs(inputRef, ref),
|
|
150
|
-
name: name,
|
|
151
|
-
style: {
|
|
152
|
-
pointerEvents: editable ? undefined : 'none'
|
|
153
|
-
}
|
|
154
|
-
}, props));
|
|
155
|
-
}, [editable, name]);
|
|
64
|
+
(_combobox$current = combobox.current) === null || _combobox$current === void 0 ? void 0 : _combobox$current.focus();
|
|
65
|
+
});
|
|
156
66
|
var ToggleCaret = useToggleCaret(placement);
|
|
157
67
|
var Caret = caretAs !== null && caretAs !== void 0 ? caretAs : ToggleCaret;
|
|
158
68
|
if (plaintext) {
|
|
@@ -161,88 +71,53 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
161
71
|
localeKey: "notSelected"
|
|
162
72
|
}, hasValue ? children : null);
|
|
163
73
|
}
|
|
164
|
-
var showCleanButton =
|
|
165
|
-
|
|
166
|
-
// When the component is read-only or disabled, the input is not interactive.
|
|
167
|
-
var inputFocused = readOnly || disabled ? false : editable && activeState;
|
|
168
|
-
var tabIndex = disabled ? undefined : tabIndexProp;
|
|
74
|
+
var showCleanButton = cleanable && hasValue && !readOnly;
|
|
169
75
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
170
76
|
role: "combobox",
|
|
171
77
|
"aria-haspopup": "listbox",
|
|
172
|
-
"aria-expanded":
|
|
78
|
+
"aria-expanded": active,
|
|
173
79
|
"aria-disabled": disabled,
|
|
174
80
|
"aria-owns": id ? id + "-listbox" : undefined
|
|
175
81
|
}, rest, {
|
|
176
|
-
ref: mergeRefs(
|
|
82
|
+
ref: mergeRefs(combobox, ref),
|
|
177
83
|
disabled: disabled,
|
|
178
|
-
tabIndex: tabIndex,
|
|
179
|
-
className: classes
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
,
|
|
183
|
-
|
|
184
|
-
}), /*#__PURE__*/React.createElement(Stack, null, label && /*#__PURE__*/React.createElement(Stack.Item, null, /*#__PURE__*/React.createElement("span", {
|
|
185
|
-
className: prefix('label')
|
|
84
|
+
tabIndex: disabled ? undefined : tabIndex,
|
|
85
|
+
className: classes
|
|
86
|
+
}), /*#__PURE__*/React.createElement(Stack, null, label && /*#__PURE__*/React.createElement(Stack.Item, null, /*#__PURE__*/React.createElement(PickerLabel, {
|
|
87
|
+
as: "span",
|
|
88
|
+
className: prefix('label'),
|
|
89
|
+
id: id ? id + "-label" : undefined
|
|
186
90
|
}, label)), /*#__PURE__*/React.createElement(Stack.Item, {
|
|
187
91
|
grow: 1,
|
|
188
92
|
style: {
|
|
189
93
|
overflow: 'hidden'
|
|
190
94
|
}
|
|
191
|
-
},
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
padding: '1px 0'
|
|
195
|
-
},
|
|
196
|
-
"data-testid": "spinner"
|
|
197
|
-
}) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextMask, {
|
|
198
|
-
keepCharPositions: true,
|
|
199
|
-
mask: inputMask,
|
|
200
|
-
value: Array.isArray(inputValue) ? inputValue.toString() : inputValue,
|
|
201
|
-
onBlur: handleInputBlur,
|
|
202
|
-
onFocus: onInputFocus,
|
|
203
|
-
onChange: handleInputChange,
|
|
204
|
-
onKeyDown: handleInputKeyDown,
|
|
205
|
-
id: id,
|
|
206
|
-
"aria-hidden": !inputFocused,
|
|
207
|
-
readOnly: !inputFocused,
|
|
208
|
-
disabled: disabled,
|
|
95
|
+
}, /*#__PURE__*/React.createElement("input", {
|
|
96
|
+
readOnly: true,
|
|
97
|
+
"aria-hidden": true,
|
|
209
98
|
"aria-controls": id ? id + "-listbox" : undefined,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
99
|
+
"aria-labelledby": label ? id + "-label" : undefined,
|
|
100
|
+
tabIndex: -1,
|
|
101
|
+
"data-testid": "picker-toggle-input",
|
|
102
|
+
name: name,
|
|
103
|
+
value: inputValue,
|
|
104
|
+
id: id,
|
|
105
|
+
className: prefix('textbox', 'read-only'),
|
|
106
|
+
style: {
|
|
107
|
+
pointerEvents: 'none'
|
|
108
|
+
}
|
|
217
109
|
}), children ? /*#__PURE__*/React.createElement("span", {
|
|
218
110
|
className: prefix(hasValue ? 'value' : 'placeholder'),
|
|
219
111
|
"aria-placeholder": typeof children === 'string' ? children : undefined
|
|
220
|
-
}, children) : null)
|
|
221
|
-
className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
})));
|
|
112
|
+
}, children) : null), /*#__PURE__*/React.createElement(Stack.Item, {
|
|
113
|
+
className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["indicator"])))
|
|
114
|
+
}, /*#__PURE__*/React.createElement(PickerIndicator, {
|
|
115
|
+
as: React.Fragment,
|
|
116
|
+
loading: loading,
|
|
117
|
+
caretAs: caret ? Caret : null,
|
|
118
|
+
onClose: handleClean,
|
|
119
|
+
showCleanButton: showCleanButton
|
|
120
|
+
}))));
|
|
230
121
|
});
|
|
231
122
|
PickerToggle.displayName = 'PickerToggle';
|
|
232
|
-
PickerToggle.propTypes = {
|
|
233
|
-
classPrefix: PropTypes.string,
|
|
234
|
-
hasValue: PropTypes.bool,
|
|
235
|
-
cleanable: PropTypes.bool,
|
|
236
|
-
className: PropTypes.string,
|
|
237
|
-
children: PropTypes.node,
|
|
238
|
-
caret: PropTypes.bool,
|
|
239
|
-
as: PropTypes.elementType,
|
|
240
|
-
onClean: PropTypes.func,
|
|
241
|
-
active: PropTypes.bool,
|
|
242
|
-
readOnly: PropTypes.bool,
|
|
243
|
-
disabled: PropTypes.bool,
|
|
244
|
-
plaintext: PropTypes.bool,
|
|
245
|
-
caretComponent: deprecatePropType(PropTypes.elementType, 'Use `caretAs` instead.'),
|
|
246
|
-
caretAs: PropTypes.elementType
|
|
247
|
-
};
|
|
248
123
|
export default PickerToggle;
|
package/esm/Picker/index.d.ts
CHANGED
|
@@ -7,9 +7,12 @@ export { default as DropdownMenuGroup } from './DropdownMenuGroup';
|
|
|
7
7
|
export { default as DropdownMenuItem } from './DropdownMenuItem';
|
|
8
8
|
export { default as PickerOverlay } from './PickerOverlay';
|
|
9
9
|
export { default as PickerToggle } from './PickerToggle';
|
|
10
|
+
export { default as PickerLabel } from './PickerLabel';
|
|
11
|
+
export { default as PickerIndicator } from './PickerIndicator';
|
|
10
12
|
export { default as PickerToggleTrigger } from './PickerToggleTrigger';
|
|
11
13
|
export { default as SearchBar } from './SearchBar';
|
|
12
14
|
export { default as SelectedElement } from './SelectedElement';
|
|
15
|
+
export { default as usePickerRef } from './usePickerRef';
|
|
13
16
|
export { pickTriggerPropKeys, omitTriggerPropKeys };
|
|
14
17
|
export type { OverlayTriggerHandle, PositionChildProps, PickerHandle, PickerComponent, PickerToggleProps };
|
|
15
18
|
export * from './utils';
|
package/esm/Picker/index.js
CHANGED
|
@@ -6,9 +6,12 @@ export { default as DropdownMenuGroup } from './DropdownMenuGroup';
|
|
|
6
6
|
export { default as DropdownMenuItem } from './DropdownMenuItem';
|
|
7
7
|
export { default as PickerOverlay } from './PickerOverlay';
|
|
8
8
|
export { default as PickerToggle } from './PickerToggle';
|
|
9
|
+
export { default as PickerLabel } from './PickerLabel';
|
|
10
|
+
export { default as PickerIndicator } from './PickerIndicator';
|
|
9
11
|
export { default as PickerToggleTrigger } from './PickerToggleTrigger';
|
|
10
12
|
export { default as SearchBar } from './SearchBar';
|
|
11
13
|
export { default as SelectedElement } from './SelectedElement';
|
|
14
|
+
export { default as usePickerRef } from './usePickerRef';
|
|
12
15
|
export { pickTriggerPropKeys, omitTriggerPropKeys };
|
|
13
16
|
export * from './utils';
|
|
14
17
|
export * from './propTypes';
|
|
@@ -9,9 +9,11 @@ export interface PickerDependentParameters {
|
|
|
9
9
|
*/
|
|
10
10
|
declare function usePickerRef(ref: any, parmas?: PickerDependentParameters): {
|
|
11
11
|
trigger: import("react").RefObject<OverlayTriggerHandle>;
|
|
12
|
-
root: import("react").
|
|
12
|
+
root: import("react").MutableRefObject<any>;
|
|
13
13
|
overlay: import("react").RefObject<HTMLElement>;
|
|
14
14
|
target: import("react").RefObject<HTMLElement>;
|
|
15
15
|
list: import("react").RefObject<ListHandle>;
|
|
16
|
+
searchInput: import("react").RefObject<HTMLInputElement>;
|
|
17
|
+
treeView: import("react").RefObject<HTMLDivElement>;
|
|
16
18
|
};
|
|
17
19
|
export default usePickerRef;
|