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.
Files changed (95) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Picker/styles/index.less +3 -1
  3. package/Slider/styles/index.less +2 -1
  4. package/TreePicker/styles/index.less +0 -3
  5. package/cjs/Cascader/utils.js +3 -5
  6. package/cjs/CheckPicker/CheckPicker.d.ts +1 -1
  7. package/cjs/CheckPicker/test/CheckPicker.test.js +8 -0
  8. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +2 -2
  9. package/cjs/CheckTreePicker/CheckTreePicker.js +5 -0
  10. package/cjs/CheckTreePicker/test/CheckTreePicker.test.d.ts +1 -0
  11. package/cjs/CheckTreePicker/test/CheckTreePicker.test.js +15 -0
  12. package/cjs/CheckTreePicker/utils.js +3 -1
  13. package/cjs/CustomProvider/CustomProvider.js +6 -3
  14. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  15. package/cjs/DatePicker/DatePicker.js +1 -1
  16. package/cjs/DatePicker/Toolbar.js +1 -1
  17. package/cjs/DateRangePicker/Calendar.d.ts +0 -1
  18. package/cjs/DateRangePicker/Calendar.js +1 -39
  19. package/cjs/DateRangePicker/DateRangePicker.d.ts +1 -1
  20. package/cjs/DateRangePicker/DateRangePicker.js +23 -23
  21. package/cjs/DateRangePicker/utils.d.ts +2 -1
  22. package/cjs/DateRangePicker/utils.js +12 -3
  23. package/cjs/InputPicker/InputPicker.d.ts +2 -2
  24. package/cjs/InputPicker/test/InputPicker.test.d.ts +1 -0
  25. package/cjs/InputPicker/test/InputPicker.test.js +15 -0
  26. package/cjs/MultiCascader/utils.js +3 -2
  27. package/cjs/Overlay/OverlayTrigger.js +43 -34
  28. package/cjs/Panel/Panel.js +8 -7
  29. package/cjs/Picker/DropdownMenu.d.ts +1 -1
  30. package/cjs/Picker/PickerToggle.d.ts +1 -1
  31. package/cjs/Picker/PickerToggle.js +52 -27
  32. package/cjs/SelectPicker/SelectPicker.d.ts +9 -3
  33. package/cjs/SelectPicker/test/SelectPicker.test.js +33 -0
  34. package/cjs/Tree/Tree.d.ts +2 -2
  35. package/cjs/Tree/test/Tree.test.d.ts +1 -0
  36. package/cjs/Tree/test/Tree.test.js +18 -0
  37. package/cjs/TreePicker/TreePicker.d.ts +2 -2
  38. package/cjs/TreePicker/test/TreePicker.test.d.ts +1 -0
  39. package/cjs/TreePicker/test/TreePicker.test.js +15 -0
  40. package/cjs/utils/attachParent.d.ts +1 -0
  41. package/cjs/utils/attachParent.js +15 -0
  42. package/cjs/utils/treeUtils.js +3 -2
  43. package/cjs/utils/usePortal.d.ts +4 -2
  44. package/cjs/utils/usePortal.js +40 -14
  45. package/dist/rsuite-rtl.css +9 -10
  46. package/dist/rsuite-rtl.min.css +1 -1
  47. package/dist/rsuite-rtl.min.css.map +1 -1
  48. package/dist/rsuite.css +9 -10
  49. package/dist/rsuite.js +29 -18
  50. package/dist/rsuite.js.map +1 -1
  51. package/dist/rsuite.min.css +1 -1
  52. package/dist/rsuite.min.css.map +1 -1
  53. package/dist/rsuite.min.js +1 -1
  54. package/dist/rsuite.min.js.map +1 -1
  55. package/esm/Cascader/utils.js +2 -4
  56. package/esm/CheckPicker/CheckPicker.d.ts +1 -1
  57. package/esm/CheckPicker/test/CheckPicker.test.js +8 -0
  58. package/esm/CheckTreePicker/CheckTreePicker.d.ts +2 -2
  59. package/esm/CheckTreePicker/CheckTreePicker.js +5 -0
  60. package/esm/CheckTreePicker/test/CheckTreePicker.test.d.ts +1 -0
  61. package/esm/CheckTreePicker/test/CheckTreePicker.test.js +10 -0
  62. package/esm/CheckTreePicker/utils.js +2 -1
  63. package/esm/CustomProvider/CustomProvider.js +6 -3
  64. package/esm/DatePicker/DatePicker.d.ts +1 -1
  65. package/esm/DatePicker/DatePicker.js +1 -1
  66. package/esm/DatePicker/Toolbar.js +1 -1
  67. package/esm/DateRangePicker/Calendar.d.ts +0 -1
  68. package/esm/DateRangePicker/Calendar.js +2 -41
  69. package/esm/DateRangePicker/DateRangePicker.d.ts +1 -1
  70. package/esm/DateRangePicker/DateRangePicker.js +23 -23
  71. package/esm/DateRangePicker/utils.d.ts +2 -1
  72. package/esm/DateRangePicker/utils.js +12 -3
  73. package/esm/InputPicker/InputPicker.d.ts +2 -2
  74. package/esm/InputPicker/test/InputPicker.test.d.ts +1 -0
  75. package/esm/InputPicker/test/InputPicker.test.js +10 -0
  76. package/esm/MultiCascader/utils.js +2 -2
  77. package/esm/Overlay/OverlayTrigger.js +44 -35
  78. package/esm/Panel/Panel.js +8 -7
  79. package/esm/Picker/DropdownMenu.d.ts +1 -1
  80. package/esm/Picker/PickerToggle.d.ts +1 -1
  81. package/esm/Picker/PickerToggle.js +52 -27
  82. package/esm/SelectPicker/SelectPicker.d.ts +9 -3
  83. package/esm/SelectPicker/test/SelectPicker.test.js +32 -0
  84. package/esm/Tree/Tree.d.ts +2 -2
  85. package/esm/Tree/test/Tree.test.d.ts +1 -0
  86. package/esm/Tree/test/Tree.test.js +11 -0
  87. package/esm/TreePicker/TreePicker.d.ts +2 -2
  88. package/esm/TreePicker/test/TreePicker.test.d.ts +1 -0
  89. package/esm/TreePicker/test/TreePicker.test.js +10 -0
  90. package/esm/utils/attachParent.d.ts +1 -0
  91. package/esm/utils/attachParent.js +10 -0
  92. package/esm/utils/treeUtils.js +2 -2
  93. package/esm/utils/usePortal.d.ts +4 -2
  94. package/esm/utils/usePortal.js +36 -14
  95. 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
- onClick: onClick,
283
- onContextMenu: onContextMenu,
284
- onMouseOver: onMouseOver,
285
- onMouseOut: onMouseOut,
286
- onFocus: onFocus,
287
- onBlur: onBlur,
288
- onMouseMove: onMouseMove
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
- triggerEvents.onClick = (0, _utils.createChainedFunction)(handleOpenState, triggerEvents.onClick);
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
- triggerEvents.onClick = (0, _utils.createChainedFunction)(handleDelayedOpen, triggerEvents.onClick);
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 = null;
306
- var onMouseOutListener = null;
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
- onMouseOutListener = function onMouseOutListener(e) {
314
- return onMouseEventHandler(handleDelayedClose, e);
315
- };
316
- }
321
+ var onMouseOutListener = function onMouseOutListener(e) {
322
+ return onMouseEventHandler(handleDelayedClose, e);
323
+ };
317
324
 
318
- triggerEvents.onMouseOver = (0, _utils.createChainedFunction)(onMouseOverListener, onMouseOver);
319
- triggerEvents.onMouseOut = (0, _utils.createChainedFunction)(onMouseOutListener, onMouseOut);
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
- triggerEvents.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, onFocus);
324
- triggerEvents.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, onBlur);
330
+ events.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onFocus);
331
+ events.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, events.onBlur);
325
332
  }
326
333
 
327
- if (trigger !== 'none') {
328
- triggerEvents.onMouseMove = (0, _utils.createChainedFunction)(handledMoveOverlay, onMouseMove);
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, {
@@ -121,21 +121,19 @@ var Panel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
121
121
  return null;
122
122
  }
123
123
 
124
- var content;
124
+ var panelTitleElement;
125
125
 
126
126
  if (! /*#__PURE__*/_react.default.isValidElement(header) || Array.isArray(header)) {
127
- content = collapsible ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AngleDown.default, {
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))) : header;
132
+ }, header));
135
133
  } else {
136
134
  var _className = merge(prefix('title'), (0, _get.default)(header, 'props.className'));
137
135
 
138
- content = /*#__PURE__*/_react.default.cloneElement(header, {
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
- }, content);
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
- input?: boolean;
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
- tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,
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", "input", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label"]);
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
- var value = getInputValue();
99
- setInputValue(value);
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 (input) {
109
- var _inputRef$current;
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
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
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
- }, [input, onFocus]);
126
+ }, [editable, onFocus]);
114
127
  var handleBlur = (0, _react.useCallback)(function (event) {
115
- if (inputRef.current && document.activeElement !== 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
- setActive(false);
132
- }, [onClean]);
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 (input && event.key === _utils.KEY_VALUES.ENTER) {
161
+ if (editable && event.key === _utils.KEY_VALUES.ENTER) {
142
162
  onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
143
163
  }
144
- }, [onInputPressEnter, input]);
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 : input && activeState;
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: disabled ? undefined : 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: function render(ref, props) {
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
  });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { StandardProps, ItemDataType, RsRefForwardingComponent } from '../@types/common';
3
- import { ListProps } from 'react-virtualized/dist/commonjs/List';
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
+ }
@@ -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
- node.parent = parent;
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);
@@ -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: React.FC<any>;
8
+ Portal: ((props: any) => JSX.Element) | (({ children }: {
9
+ children: React.ReactNode;
10
+ }) => React.ReactPortal | null);
9
11
  };
10
12
  export default usePortal;
@@ -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 _react = require("react");
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
- id = _props.id,
21
- container = _props.container;
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; // Look for existing target dom element to append to
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 || existingParent || document.body;
50
+ var parentElement = containerElement || document.body;
29
51
  rootElemRef.current = parentElement;
30
- }, [rootElemRef, container, id]);
31
- var Portal = (0, _react.useCallback)(function (_ref) {
32
- var children = _ref.children;
33
- if (rootElemRef.current != null) return /*#__PURE__*/(0, _reactDom.createPortal)(children, rootElemRef.current);
34
- return null;
35
- }, [rootElemRef]);
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
 
@@ -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
  }