rsuite 5.16.1 → 5.16.4
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 +27 -0
- package/Picker/styles/index.less +3 -1
- package/Slider/styles/index.less +2 -1
- package/TreePicker/styles/index.less +0 -3
- package/cjs/Cascader/utils.js +3 -5
- package/cjs/CheckPicker/CheckPicker.d.ts +1 -1
- package/cjs/CheckPicker/test/CheckPicker.test.js +8 -0
- package/cjs/CheckTreePicker/CheckTreePicker.d.ts +2 -2
- package/cjs/CheckTreePicker/CheckTreePicker.js +5 -0
- package/cjs/CheckTreePicker/test/CheckTreePicker.test.d.ts +1 -0
- package/cjs/CheckTreePicker/test/CheckTreePicker.test.js +15 -0
- package/cjs/CheckTreePicker/utils.js +3 -1
- package/cjs/CustomProvider/CustomProvider.js +6 -3
- package/cjs/DatePicker/DatePicker.d.ts +1 -1
- package/cjs/DatePicker/DatePicker.js +1 -1
- package/cjs/DatePicker/Toolbar.js +1 -1
- package/cjs/DateRangePicker/Calendar.d.ts +0 -1
- package/cjs/DateRangePicker/Calendar.js +1 -39
- package/cjs/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/cjs/DateRangePicker/DateRangePicker.js +23 -23
- package/cjs/DateRangePicker/utils.d.ts +2 -1
- package/cjs/DateRangePicker/utils.js +12 -3
- package/cjs/InputPicker/InputPicker.d.ts +2 -2
- package/cjs/InputPicker/test/InputPicker.test.d.ts +1 -0
- package/cjs/InputPicker/test/InputPicker.test.js +15 -0
- package/cjs/MultiCascader/utils.js +3 -2
- package/cjs/Overlay/OverlayTrigger.js +43 -34
- package/cjs/Panel/Panel.js +8 -7
- package/cjs/Picker/DropdownMenu.d.ts +1 -1
- package/cjs/Picker/PickerToggle.d.ts +1 -1
- package/cjs/Picker/PickerToggle.js +52 -27
- package/cjs/SelectPicker/SelectPicker.d.ts +9 -3
- package/cjs/SelectPicker/test/SelectPicker.test.js +33 -0
- package/cjs/Tree/Tree.d.ts +2 -2
- package/cjs/Tree/test/Tree.test.d.ts +1 -0
- package/cjs/Tree/test/Tree.test.js +18 -0
- package/cjs/TreePicker/TreePicker.d.ts +2 -2
- package/cjs/TreePicker/test/TreePicker.test.d.ts +1 -0
- package/cjs/TreePicker/test/TreePicker.test.js +15 -0
- package/cjs/utils/attachParent.d.ts +1 -0
- package/cjs/utils/attachParent.js +15 -0
- package/cjs/utils/treeUtils.js +3 -2
- package/cjs/utils/usePortal.d.ts +4 -2
- package/cjs/utils/usePortal.js +40 -14
- package/dist/rsuite-rtl.css +9 -10
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +9 -10
- package/dist/rsuite.js +29 -18
- 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/Cascader/utils.js +2 -4
- package/esm/CheckPicker/CheckPicker.d.ts +1 -1
- package/esm/CheckPicker/test/CheckPicker.test.js +8 -0
- package/esm/CheckTreePicker/CheckTreePicker.d.ts +2 -2
- package/esm/CheckTreePicker/CheckTreePicker.js +5 -0
- package/esm/CheckTreePicker/test/CheckTreePicker.test.d.ts +1 -0
- package/esm/CheckTreePicker/test/CheckTreePicker.test.js +10 -0
- package/esm/CheckTreePicker/utils.js +2 -1
- package/esm/CustomProvider/CustomProvider.js +6 -3
- package/esm/DatePicker/DatePicker.d.ts +1 -1
- package/esm/DatePicker/DatePicker.js +1 -1
- package/esm/DatePicker/Toolbar.js +1 -1
- package/esm/DateRangePicker/Calendar.d.ts +0 -1
- package/esm/DateRangePicker/Calendar.js +2 -41
- package/esm/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/esm/DateRangePicker/DateRangePicker.js +23 -23
- package/esm/DateRangePicker/utils.d.ts +2 -1
- package/esm/DateRangePicker/utils.js +12 -3
- package/esm/InputPicker/InputPicker.d.ts +2 -2
- package/esm/InputPicker/test/InputPicker.test.d.ts +1 -0
- package/esm/InputPicker/test/InputPicker.test.js +10 -0
- package/esm/MultiCascader/utils.js +2 -2
- package/esm/Overlay/OverlayTrigger.js +44 -35
- package/esm/Panel/Panel.js +8 -7
- package/esm/Picker/DropdownMenu.d.ts +1 -1
- package/esm/Picker/PickerToggle.d.ts +1 -1
- package/esm/Picker/PickerToggle.js +52 -27
- package/esm/SelectPicker/SelectPicker.d.ts +9 -3
- package/esm/SelectPicker/test/SelectPicker.test.js +32 -0
- package/esm/Tree/Tree.d.ts +2 -2
- package/esm/Tree/test/Tree.test.d.ts +1 -0
- package/esm/Tree/test/Tree.test.js +11 -0
- package/esm/TreePicker/TreePicker.d.ts +2 -2
- package/esm/TreePicker/test/TreePicker.test.d.ts +1 -0
- package/esm/TreePicker/test/TreePicker.test.js +10 -0
- package/esm/utils/attachParent.d.ts +1 -0
- package/esm/utils/attachParent.js +10 -0
- package/esm/utils/treeUtils.js +2 -2
- package/esm/utils/usePortal.d.ts +4 -2
- package/esm/utils/usePortal.js +36 -14
- package/package.json +1 -1
|
@@ -278,56 +278,65 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
|
|
|
278
278
|
var preventDefault = (0, _react.useCallback)(function (event) {
|
|
279
279
|
event.preventDefault();
|
|
280
280
|
}, []);
|
|
281
|
-
var triggerEvents = {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
281
|
+
var triggerEvents = (0, _react.useMemo)(function () {
|
|
282
|
+
// Pass events by props
|
|
283
|
+
var events = {
|
|
284
|
+
onClick: onClick,
|
|
285
|
+
onContextMenu: onContextMenu,
|
|
286
|
+
onMouseOver: onMouseOver,
|
|
287
|
+
onMouseOut: onMouseOut,
|
|
288
|
+
onFocus: onFocus,
|
|
289
|
+
onBlur: onBlur,
|
|
290
|
+
onMouseMove: onMouseMove
|
|
291
|
+
}; // When trigger is disabled, no predefined event listeners are added.
|
|
292
|
+
|
|
293
|
+
if (disabled || readOnly || plaintext || trigger === 'none') {
|
|
294
|
+
return events;
|
|
295
|
+
} // Get the cursor position through onMouseMove.
|
|
296
|
+
// https://rsuitejs.com/components/tooltip/#follow-cursor
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
if (followCursor) {
|
|
300
|
+
events.onMouseMove = (0, _utils.createChainedFunction)(handledMoveOverlay, onMouseMove);
|
|
301
|
+
} // The `click` event is usually used in `toggle` scenarios.
|
|
302
|
+
// The first click will open and the second click will close.
|
|
303
|
+
|
|
290
304
|
|
|
291
|
-
if (!disabled && !readOnly && !plaintext) {
|
|
292
305
|
if ((0, _isOneOf.default)('click', trigger)) {
|
|
293
|
-
|
|
294
|
-
|
|
306
|
+
events.onClick = (0, _utils.createChainedFunction)(handleOpenState, events.onClick);
|
|
307
|
+
return events;
|
|
308
|
+
} // The difference between it and the click event is that it does not trigger the close.
|
|
295
309
|
|
|
296
|
-
if ((0, _isOneOf.default)('contextMenu', trigger)) {
|
|
297
|
-
triggerEvents.onContextMenu = (0, _utils.createChainedFunction)(preventDefault, handleOpenState, triggerEvents.onContextMenu);
|
|
298
|
-
}
|
|
299
310
|
|
|
300
311
|
if ((0, _isOneOf.default)('active', trigger)) {
|
|
301
|
-
|
|
312
|
+
events.onClick = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onClick);
|
|
313
|
+
return events;
|
|
302
314
|
}
|
|
303
315
|
|
|
304
316
|
if ((0, _isOneOf.default)('hover', trigger)) {
|
|
305
|
-
var onMouseOverListener =
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if (trigger !== 'none') {
|
|
309
|
-
onMouseOverListener = function onMouseOverListener(e) {
|
|
310
|
-
return onMouseEventHandler(handleDelayedOpen, e);
|
|
311
|
-
};
|
|
317
|
+
var onMouseOverListener = function onMouseOverListener(e) {
|
|
318
|
+
return onMouseEventHandler(handleDelayedOpen, e);
|
|
319
|
+
};
|
|
312
320
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
}
|
|
321
|
+
var onMouseOutListener = function onMouseOutListener(e) {
|
|
322
|
+
return onMouseEventHandler(handleDelayedClose, e);
|
|
323
|
+
};
|
|
317
324
|
|
|
318
|
-
|
|
319
|
-
|
|
325
|
+
events.onMouseOver = (0, _utils.createChainedFunction)(onMouseOverListener, events.onMouseOver);
|
|
326
|
+
events.onMouseOut = (0, _utils.createChainedFunction)(onMouseOutListener, events.onMouseOut);
|
|
320
327
|
}
|
|
321
328
|
|
|
322
329
|
if ((0, _isOneOf.default)('focus', trigger)) {
|
|
323
|
-
|
|
324
|
-
|
|
330
|
+
events.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onFocus);
|
|
331
|
+
events.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, events.onBlur);
|
|
325
332
|
}
|
|
326
333
|
|
|
327
|
-
if (
|
|
328
|
-
|
|
334
|
+
if ((0, _isOneOf.default)('contextMenu', trigger)) {
|
|
335
|
+
events.onContextMenu = (0, _utils.createChainedFunction)(preventDefault, handleOpenState, events.onContextMenu);
|
|
329
336
|
}
|
|
330
|
-
|
|
337
|
+
|
|
338
|
+
return events;
|
|
339
|
+
}, [disabled, followCursor, handleDelayedClose, handleDelayedOpen, handleOpenState, handledMoveOverlay, onBlur, onClick, onContextMenu, onFocus, onMouseMove, onMouseOut, onMouseOver, plaintext, preventDefault, readOnly, trigger]);
|
|
331
340
|
|
|
332
341
|
var renderOverlay = function renderOverlay() {
|
|
333
342
|
var overlayProps = (0, _extends2.default)({}, rest, {
|
package/cjs/Panel/Panel.js
CHANGED
|
@@ -121,21 +121,19 @@ var Panel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
121
121
|
return null;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
var
|
|
124
|
+
var panelTitleElement;
|
|
125
125
|
|
|
126
126
|
if (! /*#__PURE__*/_react.default.isValidElement(header) || Array.isArray(header)) {
|
|
127
|
-
|
|
128
|
-
rotate: expanded ? 180 : 0
|
|
129
|
-
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
127
|
+
panelTitleElement = /*#__PURE__*/_react.default.createElement("span", {
|
|
130
128
|
className: prefix('title'),
|
|
131
129
|
role: "presentation"
|
|
132
130
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
133
131
|
className: expanded ? undefined : 'collapsed'
|
|
134
|
-
}, header))
|
|
132
|
+
}, header));
|
|
135
133
|
} else {
|
|
136
134
|
var _className = merge(prefix('title'), (0, _get.default)(header, 'props.className'));
|
|
137
135
|
|
|
138
|
-
|
|
136
|
+
panelTitleElement = /*#__PURE__*/_react.default.cloneElement(header, {
|
|
139
137
|
className: _className
|
|
140
138
|
});
|
|
141
139
|
}
|
|
@@ -147,7 +145,10 @@ var Panel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
147
145
|
className: prefix('header'),
|
|
148
146
|
onClick: collapsible ? handleSelect : undefined,
|
|
149
147
|
tabIndex: -1
|
|
150
|
-
},
|
|
148
|
+
}, panelTitleElement, collapsible && /*#__PURE__*/_react.default.createElement(_AngleDown.default, {
|
|
149
|
+
rotate: expanded ? 180 : 0,
|
|
150
|
+
"data-testid": "caret icon"
|
|
151
|
+
}));
|
|
151
152
|
};
|
|
152
153
|
|
|
153
154
|
var classes = merge(className, withClassPrefix({
|
|
@@ -19,7 +19,7 @@ export interface DropdownMenuProps<Multiple = false> extends StandardProps, Omit
|
|
|
19
19
|
rowHeight?: number;
|
|
20
20
|
rowGroupHeight?: number;
|
|
21
21
|
virtualized?: boolean;
|
|
22
|
-
listProps?: ListProps
|
|
22
|
+
listProps?: Partial<ListProps>;
|
|
23
23
|
/** Custom selected option */
|
|
24
24
|
renderMenuItem?: (itemLabel: React.ReactNode, item: any) => React.ReactNode;
|
|
25
25
|
renderMenuGroup?: (title: React.ReactNode, item: any) => React.ReactNode;
|
|
@@ -15,7 +15,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
|
|
|
15
15
|
readOnly?: boolean;
|
|
16
16
|
plaintext?: boolean;
|
|
17
17
|
tabIndex?: number;
|
|
18
|
-
|
|
18
|
+
editable?: boolean;
|
|
19
19
|
inputPlaceholder?: string;
|
|
20
20
|
inputMask?: (string | RegExp)[];
|
|
21
21
|
onInputChange?: (value: string, event: React.ChangeEvent) => void;
|
|
@@ -51,12 +51,12 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
51
51
|
readOnly = props.readOnly,
|
|
52
52
|
plaintext = props.plaintext,
|
|
53
53
|
hasValue = props.hasValue,
|
|
54
|
+
editable = props.editable,
|
|
54
55
|
cleanableProp = props.cleanable,
|
|
55
56
|
_props$tabIndex = props.tabIndex,
|
|
56
|
-
|
|
57
|
+
tabIndexProp = _props$tabIndex === void 0 ? editable ? -1 : 0 : _props$tabIndex,
|
|
57
58
|
id = props.id,
|
|
58
59
|
value = props.value,
|
|
59
|
-
input = props.input,
|
|
60
60
|
inputPlaceholder = props.inputPlaceholder,
|
|
61
61
|
inputValueProp = props.inputValue,
|
|
62
62
|
_props$inputMask = props.inputMask,
|
|
@@ -74,8 +74,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
74
74
|
_props$caretAs = props.caretAs,
|
|
75
75
|
caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
|
|
76
76
|
label = props.label,
|
|
77
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "cleanable", "tabIndex", "id", "value", "
|
|
77
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label"]);
|
|
78
78
|
var inputRef = (0, _react.useRef)(null);
|
|
79
|
+
var comboboxRef = (0, _react.useRef)(null);
|
|
79
80
|
|
|
80
81
|
var _useState = (0, _react.useState)(false),
|
|
81
82
|
activeState = _useState[0],
|
|
@@ -95,30 +96,46 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
95
96
|
setInputValue = _useState2[1];
|
|
96
97
|
|
|
97
98
|
(0, _react.useEffect)(function () {
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
if (comboboxRef.current) {
|
|
100
|
+
var _value = getInputValue();
|
|
101
|
+
|
|
102
|
+
setInputValue(_value);
|
|
103
|
+
}
|
|
100
104
|
}, [getInputValue]);
|
|
101
105
|
var classes = merge(className, withClassPrefix({
|
|
102
106
|
active: activeProp || activeState
|
|
103
107
|
}));
|
|
104
108
|
var handleFocus = (0, _react.useCallback)(function (event) {
|
|
105
109
|
setActive(true);
|
|
106
|
-
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
107
110
|
|
|
108
|
-
if (
|
|
109
|
-
|
|
111
|
+
if (editable) {
|
|
112
|
+
// Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
|
|
113
|
+
if (event.target === inputRef.current) {
|
|
114
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
115
|
+
} // Force the input to be focused and editable.
|
|
110
116
|
|
|
111
|
-
|
|
117
|
+
|
|
118
|
+
if (document.activeElement === comboboxRef.current) {
|
|
119
|
+
var _inputRef$current;
|
|
120
|
+
|
|
121
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
112
125
|
}
|
|
113
|
-
}, [
|
|
126
|
+
}, [editable, onFocus]);
|
|
114
127
|
var handleBlur = (0, _react.useCallback)(function (event) {
|
|
115
|
-
if (inputRef.current &&
|
|
128
|
+
if (inputRef.current && !editable) {
|
|
129
|
+
setActive(false);
|
|
130
|
+
} // When activeElement is an input, it remains active.
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
if (editable && inputRef.current && document.activeElement !== inputRef.current) {
|
|
116
134
|
setActive(false);
|
|
117
|
-
inputRef.current.blur();
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
121
|
-
}, [onBlur]);
|
|
138
|
+
}, [editable, onBlur]);
|
|
122
139
|
|
|
123
140
|
var handleInputBlur = function handleInputBlur(event) {
|
|
124
141
|
setInputValue(getInputValue());
|
|
@@ -126,10 +143,13 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
126
143
|
};
|
|
127
144
|
|
|
128
145
|
var handleClean = (0, _react.useCallback)(function (event) {
|
|
146
|
+
var _inputRef$current2, _comboboxRef$current;
|
|
147
|
+
|
|
129
148
|
event.stopPropagation();
|
|
130
|
-
onClean === null || onClean === void 0 ? void 0 : onClean(event);
|
|
131
|
-
|
|
132
|
-
|
|
149
|
+
onClean === null || onClean === void 0 ? void 0 : onClean(event); // When the value is cleared, the current component is still in focus.
|
|
150
|
+
|
|
151
|
+
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();
|
|
152
|
+
}, [editable, onClean]);
|
|
133
153
|
var handleInputChange = (0, _react.useCallback)(function (event) {
|
|
134
154
|
var _event$target;
|
|
135
155
|
|
|
@@ -138,10 +158,18 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
138
158
|
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
|
|
139
159
|
}, [onInputChange]);
|
|
140
160
|
var handleInputKeyDown = (0, _react.useCallback)(function (event) {
|
|
141
|
-
if (
|
|
161
|
+
if (editable && event.key === _utils.KEY_VALUES.ENTER) {
|
|
142
162
|
onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
|
|
143
163
|
}
|
|
144
|
-
}, [onInputPressEnter,
|
|
164
|
+
}, [onInputPressEnter, editable]);
|
|
165
|
+
var renderInput = (0, _react.useCallback)(function (ref, props) {
|
|
166
|
+
return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
|
|
167
|
+
ref: (0, _utils.mergeRefs)(inputRef, ref),
|
|
168
|
+
style: {
|
|
169
|
+
pointerEvents: editable ? undefined : 'none'
|
|
170
|
+
}
|
|
171
|
+
}, props));
|
|
172
|
+
}, [editable]);
|
|
145
173
|
var ToggleCaret = (0, _useToggleCaret.default)(placement);
|
|
146
174
|
var Caret = caretAs !== null && caretAs !== void 0 ? caretAs : ToggleCaret;
|
|
147
175
|
|
|
@@ -154,7 +182,8 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
154
182
|
|
|
155
183
|
var showCleanButton = cleanableProp && hasValue && !readOnly; // When the component is read-only or disabled, the input is not interactive.
|
|
156
184
|
|
|
157
|
-
var inputFocused = readOnly || disabled ? false :
|
|
185
|
+
var inputFocused = readOnly || disabled ? false : editable && activeState;
|
|
186
|
+
var tabIndex = disabled ? undefined : tabIndexProp;
|
|
158
187
|
return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
|
|
159
188
|
role: "combobox",
|
|
160
189
|
"aria-haspopup": "listbox",
|
|
@@ -162,9 +191,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
162
191
|
"aria-disabled": disabled,
|
|
163
192
|
"aria-owns": id ? id + "-listbox" : undefined
|
|
164
193
|
}, rest, {
|
|
165
|
-
ref: ref,
|
|
194
|
+
ref: (0, _utils.mergeRefs)(comboboxRef, ref),
|
|
166
195
|
disabled: disabled,
|
|
167
|
-
tabIndex:
|
|
196
|
+
tabIndex: tabIndex,
|
|
168
197
|
className: classes,
|
|
169
198
|
onFocus: !disabled ? handleFocus : null // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
|
|
170
199
|
,
|
|
@@ -181,16 +210,12 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
181
210
|
readOnly: !inputFocused,
|
|
182
211
|
disabled: disabled,
|
|
183
212
|
"aria-controls": id ? id + "-listbox" : undefined,
|
|
184
|
-
tabIndex: -1,
|
|
213
|
+
tabIndex: editable ? 0 : -1,
|
|
185
214
|
className: prefix('textbox', {
|
|
186
215
|
'read-only': !inputFocused
|
|
187
216
|
}),
|
|
188
217
|
placeholder: inputPlaceholder,
|
|
189
|
-
render:
|
|
190
|
-
return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
|
|
191
|
-
ref: (0, _utils.mergeRefs)(inputRef, ref)
|
|
192
|
-
}, props));
|
|
193
|
-
}
|
|
218
|
+
render: renderInput
|
|
194
219
|
}), children ? /*#__PURE__*/_react.default.createElement("span", {
|
|
195
220
|
className: prefix(hasValue ? 'value' : 'placeholder'),
|
|
196
221
|
"aria-placeholder": typeof children === 'string' ? children : undefined
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { Ref } from 'react';
|
|
2
2
|
import { PickerLocale } from '../locales';
|
|
3
3
|
import { PickerInstance, PickerToggleProps } from '../Picker';
|
|
4
|
+
import { ListProps } from '../Picker/VirtualizedList';
|
|
4
5
|
import { FormControlPickerProps, ItemDataType } from '../@types/common';
|
|
5
|
-
import { ListProps } from 'react-virtualized/dist/commonjs/List';
|
|
6
6
|
export interface SelectProps<T> {
|
|
7
7
|
/** Set group condition key in data */
|
|
8
8
|
groupBy?: string;
|
|
@@ -14,7 +14,7 @@ export interface SelectProps<T> {
|
|
|
14
14
|
* List-related properties in `react-virtualized`
|
|
15
15
|
* https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types
|
|
16
16
|
*/
|
|
17
|
-
listProps?: ListProps
|
|
17
|
+
listProps?: Partial<ListProps>;
|
|
18
18
|
/** Custom search rules. */
|
|
19
19
|
searchBy?: (keyword: string, label: React.ReactNode, item: ItemDataType) => boolean;
|
|
20
20
|
/** Sort options */
|
|
@@ -40,7 +40,13 @@ export interface MultipleSelectProps<T> extends Omit<SelectProps<T>, 'renderValu
|
|
|
40
40
|
/** Custom render selected items */
|
|
41
41
|
renderValue?: (value: T[], item: ItemDataType<T>[], selectedElement: React.ReactNode) => React.ReactNode;
|
|
42
42
|
}
|
|
43
|
-
export interface SelectPickerProps<T> extends FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, SelectProps<T>, Pick<PickerToggleProps, 'label'> {
|
|
43
|
+
export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, 'value' | 'defaultValue' | 'onChange'>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'label'> {
|
|
44
|
+
/** Initial value */
|
|
45
|
+
defaultValue?: T;
|
|
46
|
+
/** Current value of the component. Creates a controlled component */
|
|
47
|
+
value?: T | null;
|
|
48
|
+
/** Called after the value has been changed */
|
|
49
|
+
onChange?: (value: T | null, event: React.SyntheticEvent) => void;
|
|
44
50
|
}
|
|
45
51
|
export interface SelectPickerComponent {
|
|
46
52
|
<T>(props: SelectPickerProps<T> & {
|
|
@@ -74,4 +74,37 @@ _react.default.createElement(_SelectPicker.default, {
|
|
|
74
74
|
_react.default.createElement(_SelectPicker.default, {
|
|
75
75
|
label: "User",
|
|
76
76
|
data: []
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
/*#__PURE__*/
|
|
80
|
+
_react.default.createElement(_SelectPicker.default, {
|
|
81
|
+
data: [{
|
|
82
|
+
label: 'Ascending',
|
|
83
|
+
value: 'asc'
|
|
84
|
+
}, {
|
|
85
|
+
label: 'Descending',
|
|
86
|
+
value: 'desc'
|
|
87
|
+
}],
|
|
88
|
+
value: "asc",
|
|
89
|
+
onChange: function onChange(value) {
|
|
90
|
+
(0, _tsExpect.expectType)(value);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/*#__PURE__*/
|
|
95
|
+
_react.default.createElement(_SelectPicker.default, {
|
|
96
|
+
caretAs: function caretAs() {
|
|
97
|
+
return /*#__PURE__*/_react.default.createElement("div", null);
|
|
98
|
+
},
|
|
99
|
+
data: []
|
|
100
|
+
}); // Override the default value of listProps.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/*#__PURE__*/
|
|
104
|
+
_react.default.createElement(_SelectPicker.default, {
|
|
105
|
+
data: [],
|
|
106
|
+
virtualized: true,
|
|
107
|
+
listProps: {
|
|
108
|
+
rowHeight: 70
|
|
109
|
+
}
|
|
77
110
|
});
|
package/cjs/Tree/Tree.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { StandardProps, ItemDataType, RsRefForwardingComponent } from '../@types/common';
|
|
3
|
-
import { ListProps } from '
|
|
3
|
+
import { ListProps } from '../Picker/VirtualizedList';
|
|
4
4
|
/**
|
|
5
5
|
* Tree Node Drag Type
|
|
6
6
|
*/
|
|
@@ -50,7 +50,7 @@ export interface TreeBaseProps<ValueType = string | number, ItemDataType = Recor
|
|
|
50
50
|
* List-related properties in `react-virtualized`
|
|
51
51
|
* https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types
|
|
52
52
|
*/
|
|
53
|
-
listProps?: ListProps
|
|
53
|
+
listProps?: Partial<ListProps>;
|
|
54
54
|
/** Expand all nodes By default */
|
|
55
55
|
defaultExpandAll?: boolean;
|
|
56
56
|
/** searchKeyword (Controlled) */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _Tree = _interopRequireDefault(require("../Tree"));
|
|
8
|
+
|
|
9
|
+
// Override the default value of listProps.
|
|
10
|
+
|
|
11
|
+
/*#__PURE__*/
|
|
12
|
+
_react.default.createElement(_Tree.default, {
|
|
13
|
+
data: [],
|
|
14
|
+
virtualized: true,
|
|
15
|
+
listProps: {
|
|
16
|
+
rowHeight: 70
|
|
17
|
+
}
|
|
18
|
+
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { PickerLocale } from '../locales';
|
|
3
|
-
import { PickerComponent } from '../Picker';
|
|
3
|
+
import { PickerComponent, PickerToggleProps } from '../Picker';
|
|
4
4
|
import { TreeDragProps, TreeBaseProps } from '../Tree/Tree';
|
|
5
5
|
import { FormControlPickerProps, ItemDataType } from '../@types/common';
|
|
6
6
|
export declare const maxTreeHeight = 320;
|
|
7
|
-
export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType> {
|
|
7
|
+
export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
|
|
8
8
|
/** The height of Dropdown */
|
|
9
9
|
height?: number;
|
|
10
10
|
/** Tree node cascade */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _TreePicker = _interopRequireDefault(require("../TreePicker"));
|
|
8
|
+
|
|
9
|
+
/*#__PURE__*/
|
|
10
|
+
_react.default.createElement(_TreePicker.default, {
|
|
11
|
+
caretAs: function caretAs() {
|
|
12
|
+
return /*#__PURE__*/_react.default.createElement("div", null);
|
|
13
|
+
},
|
|
14
|
+
data: []
|
|
15
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function attachParent<T>(data: T, parent: T): T;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.attachParent = attachParent;
|
|
5
|
+
|
|
6
|
+
function attachParent(data, parent) {
|
|
7
|
+
// mark "parent" unenumable
|
|
8
|
+
Object.defineProperty(data, 'parent', {
|
|
9
|
+
value: parent,
|
|
10
|
+
writable: false,
|
|
11
|
+
enumerable: false,
|
|
12
|
+
configurable: true
|
|
13
|
+
});
|
|
14
|
+
return data;
|
|
15
|
+
}
|
package/cjs/utils/treeUtils.js
CHANGED
|
@@ -66,6 +66,8 @@ var _reactToString = _interopRequireDefault(require("./reactToString"));
|
|
|
66
66
|
|
|
67
67
|
var _constants = require("./constants");
|
|
68
68
|
|
|
69
|
+
var _attachParent = require("./attachParent");
|
|
70
|
+
|
|
69
71
|
// gap of tree node
|
|
70
72
|
var TREE_NODE_GAP = 4;
|
|
71
73
|
/**
|
|
@@ -113,8 +115,7 @@ function flattenTree(tree, childrenKey, executor) {
|
|
|
113
115
|
|
|
114
116
|
data.forEach(function (item, index) {
|
|
115
117
|
var node = typeof executor === 'function' ? executor(item, index) : item;
|
|
116
|
-
|
|
117
|
-
flattenData.push((0, _extends3.default)({}, node));
|
|
118
|
+
flattenData.push((0, _attachParent.attachParent)(node, parent));
|
|
118
119
|
|
|
119
120
|
if (item[childrenKey]) {
|
|
120
121
|
traverse(item[childrenKey], item);
|
package/cjs/utils/usePortal.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
interface PortalProps {
|
|
3
|
-
id?: string;
|
|
4
3
|
container?: HTMLElement | (() => HTMLElement | null) | null;
|
|
4
|
+
waitMount?: boolean;
|
|
5
5
|
}
|
|
6
6
|
declare function usePortal(props?: PortalProps): {
|
|
7
7
|
target: HTMLElement | null;
|
|
8
|
-
Portal:
|
|
8
|
+
Portal: ((props: any) => JSX.Element) | (({ children }: {
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}) => React.ReactPortal | null);
|
|
9
11
|
};
|
|
10
12
|
export default usePortal;
|
package/cjs/utils/usePortal.js
CHANGED
|
@@ -1,41 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
+
|
|
3
5
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
6
|
|
|
5
7
|
exports.__esModule = true;
|
|
6
8
|
exports.default = void 0;
|
|
7
9
|
|
|
8
|
-
var
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
13
|
|
|
10
14
|
var _reactDom = require("react-dom");
|
|
11
15
|
|
|
12
16
|
var _canUseDOM = _interopRequireDefault(require("dom-lib/canUseDOM"));
|
|
13
17
|
|
|
18
|
+
var MountedPortal = /*#__PURE__*/_react.default.memo(function (_ref) {
|
|
19
|
+
var children = _ref.children,
|
|
20
|
+
container = _ref.container;
|
|
21
|
+
|
|
22
|
+
var _useState = (0, _react.useState)(false),
|
|
23
|
+
mounted = _useState[0],
|
|
24
|
+
setMounted = _useState[1];
|
|
25
|
+
|
|
26
|
+
(0, _react.useEffect)(function () {
|
|
27
|
+
return setMounted(true);
|
|
28
|
+
}, []);
|
|
29
|
+
|
|
30
|
+
if (container && mounted) {
|
|
31
|
+
return /*#__PURE__*/(0, _reactDom.createPortal)(children, container);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return null;
|
|
35
|
+
});
|
|
36
|
+
|
|
14
37
|
function usePortal(props) {
|
|
15
38
|
if (props === void 0) {
|
|
16
39
|
props = {};
|
|
17
40
|
}
|
|
18
41
|
|
|
19
42
|
var _props = props,
|
|
20
|
-
|
|
21
|
-
|
|
43
|
+
container = _props.container,
|
|
44
|
+
_props$waitMount = _props.waitMount,
|
|
45
|
+
waitMount = _props$waitMount === void 0 ? false : _props$waitMount;
|
|
22
46
|
var rootElemRef = (0, _react.useRef)(_canUseDOM.default ? document.body : null);
|
|
23
47
|
(0, _react.useEffect)(function () {
|
|
24
|
-
var containerElement = typeof container === 'function' ? container() : container; //
|
|
25
|
-
|
|
26
|
-
var existingParent = id && document.querySelector("#" + id); // Parent is either a new root or the existing dom element
|
|
48
|
+
var containerElement = typeof container === 'function' ? container() : container; // Parent is either a new root or the existing dom element
|
|
27
49
|
|
|
28
|
-
var parentElement = containerElement ||
|
|
50
|
+
var parentElement = containerElement || document.body;
|
|
29
51
|
rootElemRef.current = parentElement;
|
|
30
|
-
}, [rootElemRef, container
|
|
31
|
-
var Portal = (0, _react.useCallback)(function (
|
|
32
|
-
var children =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
52
|
+
}, [rootElemRef, container]);
|
|
53
|
+
var Portal = (0, _react.useCallback)(function (_ref2) {
|
|
54
|
+
var children = _ref2.children;
|
|
55
|
+
return rootElemRef.current != null ? /*#__PURE__*/(0, _reactDom.createPortal)(children, rootElemRef.current) : null;
|
|
56
|
+
}, []);
|
|
57
|
+
var WaitMountPortal = (0, _react.useCallback)(function (props) {
|
|
58
|
+
return /*#__PURE__*/_react.default.createElement(MountedPortal, (0, _extends2.default)({
|
|
59
|
+
container: rootElemRef.current
|
|
60
|
+
}, props));
|
|
61
|
+
}, []);
|
|
36
62
|
return {
|
|
37
63
|
target: rootElemRef.current,
|
|
38
|
-
Portal: Portal
|
|
64
|
+
Portal: waitMount ? WaitMountPortal : Portal
|
|
39
65
|
};
|
|
40
66
|
}
|
|
41
67
|
|
package/dist/rsuite-rtl.css
CHANGED
|
@@ -10939,6 +10939,7 @@ textarea.rs-picker-search-input {
|
|
|
10939
10939
|
color: var(--rs-text-primary);
|
|
10940
10940
|
background-color: #fff;
|
|
10941
10941
|
background-color: var(--rs-input-bg);
|
|
10942
|
+
outline: none;
|
|
10942
10943
|
}
|
|
10943
10944
|
.rs-picker-toggle.rs-btn-lg .rs-picker-toggle-textbox {
|
|
10944
10945
|
padding-right: 14px;
|
|
@@ -10951,7 +10952,6 @@ textarea.rs-picker-search-input {
|
|
|
10951
10952
|
}
|
|
10952
10953
|
.rs-picker-toggle-read-only {
|
|
10953
10954
|
opacity: 0;
|
|
10954
|
-
pointer-events: none;
|
|
10955
10955
|
}
|
|
10956
10956
|
.rs-picker-default .rs-btn,
|
|
10957
10957
|
.rs-picker-default .rs-picker-toggle {
|
|
@@ -11656,6 +11656,13 @@ textarea.rs-picker-search-input {
|
|
|
11656
11656
|
overflow: hidden;
|
|
11657
11657
|
-webkit-transition: none;
|
|
11658
11658
|
transition: none;
|
|
11659
|
+
display: -webkit-box;
|
|
11660
|
+
display: -ms-flexbox;
|
|
11661
|
+
display: flex;
|
|
11662
|
+
-webkit-box-orient: vertical;
|
|
11663
|
+
-webkit-box-direction: normal;
|
|
11664
|
+
-ms-flex-direction: column;
|
|
11665
|
+
flex-direction: column;
|
|
11659
11666
|
/* stylelint-disable-next-line */
|
|
11660
11667
|
}
|
|
11661
11668
|
.rs-theme-high-contrast .rs-picker-menu {
|
|
@@ -13857,6 +13864,7 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
|
|
|
13857
13864
|
.rs-slider-handle {
|
|
13858
13865
|
position: absolute;
|
|
13859
13866
|
top: -50%;
|
|
13867
|
+
outline: none;
|
|
13860
13868
|
}
|
|
13861
13869
|
.rs-slider-handle::before {
|
|
13862
13870
|
content: '';
|
|
@@ -15729,15 +15737,6 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
|
|
|
15729
15737
|
margin-right: -13px;
|
|
15730
15738
|
border-right: 1px solid rgba(0, 0, 0, 0.1);
|
|
15731
15739
|
}
|
|
15732
|
-
.rs-picker-menu {
|
|
15733
|
-
display: -webkit-box;
|
|
15734
|
-
display: -ms-flexbox;
|
|
15735
|
-
display: flex;
|
|
15736
|
-
-webkit-box-orient: vertical;
|
|
15737
|
-
-webkit-box-direction: normal;
|
|
15738
|
-
-ms-flex-direction: column;
|
|
15739
|
-
flex-direction: column;
|
|
15740
|
-
}
|
|
15741
15740
|
.rs-picker-menu.rs-tree-menu {
|
|
15742
15741
|
padding-top: 12px;
|
|
15743
15742
|
}
|