rsuite 5.48.1 → 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.
Files changed (203) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Cascader/styles/index.less +5 -4
  3. package/DatePicker/styles/index.less +18 -11
  4. package/DateRangeInput/package.json +7 -0
  5. package/DateRangePicker/styles/index.less +20 -0
  6. package/Dropdown/styles/index.less +5 -4
  7. package/Dropdown/styles/mixin.less +0 -11
  8. package/InputGroup/styles/index.less +1 -0
  9. package/Picker/styles/index.less +51 -24
  10. package/Picker/styles/mixin.less +17 -13
  11. package/README.md +34 -24
  12. package/Sidenav/styles/index.less +2 -0
  13. package/TagInput/styles/index.less +1 -1
  14. package/cjs/AutoComplete/AutoComplete.js +25 -26
  15. package/cjs/Calendar/Calendar.d.ts +5 -1
  16. package/cjs/Calendar/CalendarContainer.d.ts +7 -1
  17. package/cjs/Calendar/CalendarContainer.js +11 -4
  18. package/cjs/Calendar/CalendarHeader.js +2 -0
  19. package/cjs/Calendar/MonthDropdown.js +7 -2
  20. package/cjs/Calendar/MonthDropdownItem.js +2 -2
  21. package/cjs/Calendar/Table.js +6 -1
  22. package/cjs/Calendar/TimeDropdown.js +17 -10
  23. package/cjs/Calendar/types.d.ts +1 -0
  24. package/cjs/Cascader/Cascader.js +46 -48
  25. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  26. package/cjs/CheckPicker/CheckPicker.js +33 -36
  27. package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
  28. package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
  29. package/cjs/CustomProvider/CustomProvider.js +2 -2
  30. package/cjs/DateInput/DateField.d.ts +9 -31
  31. package/cjs/DateInput/DateField.js +61 -12
  32. package/cjs/DateInput/DateInput.d.ts +7 -2
  33. package/cjs/DateInput/DateInput.js +74 -92
  34. package/cjs/DateInput/index.d.ts +4 -0
  35. package/cjs/DateInput/index.js +19 -1
  36. package/cjs/DateInput/useDateInputState.d.ts +7 -31
  37. package/cjs/DateInput/useDateInputState.js +39 -15
  38. package/cjs/DateInput/useIsFocused.d.ts +7 -0
  39. package/cjs/DateInput/useIsFocused.js +28 -0
  40. package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
  41. package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
  42. package/cjs/DateInput/utils.d.ts +23 -1
  43. package/cjs/DateInput/utils.js +155 -51
  44. package/cjs/DatePicker/DatePicker.d.ts +25 -8
  45. package/cjs/DatePicker/DatePicker.js +208 -241
  46. package/cjs/DatePicker/Toolbar.js +5 -22
  47. package/cjs/DatePicker/utils.d.ts +5 -1
  48. package/cjs/DatePicker/utils.js +17 -1
  49. package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
  50. package/cjs/DateRangeInput/DateRangeInput.js +244 -0
  51. package/cjs/DateRangeInput/index.d.ts +3 -0
  52. package/cjs/DateRangeInput/index.js +9 -0
  53. package/cjs/DateRangeInput/utils.d.ts +61 -0
  54. package/cjs/DateRangeInput/utils.js +146 -0
  55. package/cjs/DateRangePicker/Calendar.js +24 -23
  56. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  57. package/cjs/DateRangePicker/DateRangePicker.js +251 -203
  58. package/cjs/DateRangePicker/types.d.ts +11 -3
  59. package/cjs/DateRangePicker/utils.d.ts +2 -1
  60. package/cjs/DateRangePicker/utils.js +7 -5
  61. package/cjs/FormControl/FormControl.d.ts +11 -1
  62. package/cjs/FormControl/FormControl.js +6 -5
  63. package/cjs/Input/Input.d.ts +11 -0
  64. package/cjs/Input/Input.js +11 -8
  65. package/cjs/InputPicker/InputPicker.js +62 -63
  66. package/cjs/MultiCascader/MultiCascader.js +40 -42
  67. package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
  68. package/cjs/Overlay/OverlayTrigger.js +5 -0
  69. package/cjs/Picker/PickerIndicator.d.ts +10 -0
  70. package/cjs/Picker/PickerIndicator.js +49 -0
  71. package/cjs/Picker/PickerLabel.d.ts +9 -0
  72. package/cjs/Picker/PickerLabel.js +23 -0
  73. package/cjs/Picker/PickerToggle.d.ts +17 -22
  74. package/cjs/Picker/PickerToggle.js +52 -177
  75. package/cjs/Picker/index.d.ts +3 -0
  76. package/cjs/Picker/index.js +10 -1
  77. package/cjs/Picker/usePickerRef.d.ts +19 -0
  78. package/cjs/Picker/usePickerRef.js +88 -0
  79. package/cjs/Picker/utils.d.ts +5 -9
  80. package/cjs/Picker/utils.js +22 -89
  81. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  82. package/cjs/SelectPicker/SelectPicker.js +39 -42
  83. package/cjs/TreePicker/TreePicker.js +72 -75
  84. package/cjs/index.d.ts +2 -0
  85. package/cjs/index.js +3 -1
  86. package/cjs/locales/index.d.ts +2 -2
  87. package/cjs/utils/constants.d.ts +2 -1
  88. package/cjs/utils/constants.js +1 -0
  89. package/cjs/utils/dateUtils.d.ts +0 -1
  90. package/cjs/utils/dateUtils.js +0 -6
  91. package/cjs/utils/getStringLength.d.ts +2 -0
  92. package/cjs/utils/getStringLength.js +18 -0
  93. package/cjs/utils/index.d.ts +3 -0
  94. package/cjs/utils/index.js +11 -2
  95. package/cjs/utils/useCustom.js +1 -1
  96. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  97. package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
  98. package/dist/rsuite-no-reset-rtl.css +140 -207
  99. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  100. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  101. package/dist/rsuite-no-reset.css +140 -207
  102. package/dist/rsuite-no-reset.min.css +1 -1
  103. package/dist/rsuite-no-reset.min.css.map +1 -1
  104. package/dist/rsuite-rtl.css +140 -75
  105. package/dist/rsuite-rtl.min.css +1 -1
  106. package/dist/rsuite-rtl.min.css.map +1 -1
  107. package/dist/rsuite.css +140 -75
  108. package/dist/rsuite.js +4833 -258
  109. package/dist/rsuite.js.map +1 -1
  110. package/dist/rsuite.min.css +1 -1
  111. package/dist/rsuite.min.css.map +1 -1
  112. package/dist/rsuite.min.js +1 -1
  113. package/dist/rsuite.min.js.map +1 -1
  114. package/esm/AutoComplete/AutoComplete.js +28 -29
  115. package/esm/Calendar/Calendar.d.ts +5 -1
  116. package/esm/Calendar/CalendarContainer.d.ts +7 -1
  117. package/esm/Calendar/CalendarContainer.js +12 -5
  118. package/esm/Calendar/CalendarHeader.js +2 -0
  119. package/esm/Calendar/MonthDropdown.js +7 -2
  120. package/esm/Calendar/MonthDropdownItem.js +2 -2
  121. package/esm/Calendar/Table.js +6 -1
  122. package/esm/Calendar/TimeDropdown.js +17 -10
  123. package/esm/Calendar/types.d.ts +1 -0
  124. package/esm/Cascader/Cascader.js +49 -51
  125. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  126. package/esm/CheckPicker/CheckPicker.js +36 -39
  127. package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
  128. package/esm/CustomProvider/CustomProvider.d.ts +13 -0
  129. package/esm/CustomProvider/CustomProvider.js +3 -3
  130. package/esm/DateInput/DateField.d.ts +9 -31
  131. package/esm/DateInput/DateField.js +61 -12
  132. package/esm/DateInput/DateInput.d.ts +7 -2
  133. package/esm/DateInput/DateInput.js +77 -95
  134. package/esm/DateInput/index.d.ts +4 -0
  135. package/esm/DateInput/index.js +4 -0
  136. package/esm/DateInput/useDateInputState.d.ts +7 -31
  137. package/esm/DateInput/useDateInputState.js +41 -18
  138. package/esm/DateInput/useIsFocused.d.ts +7 -0
  139. package/esm/DateInput/useIsFocused.js +22 -0
  140. package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
  141. package/esm/DateInput/useKeyboardInputEvent.js +38 -0
  142. package/esm/DateInput/utils.d.ts +23 -1
  143. package/esm/DateInput/utils.js +150 -51
  144. package/esm/DatePicker/DatePicker.d.ts +25 -8
  145. package/esm/DatePicker/DatePicker.js +211 -244
  146. package/esm/DatePicker/Toolbar.js +5 -22
  147. package/esm/DatePicker/utils.d.ts +5 -1
  148. package/esm/DatePicker/utils.js +16 -1
  149. package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
  150. package/esm/DateRangeInput/DateRangeInput.js +237 -0
  151. package/esm/DateRangeInput/index.d.ts +3 -0
  152. package/esm/DateRangeInput/index.js +3 -0
  153. package/esm/DateRangeInput/utils.d.ts +61 -0
  154. package/esm/DateRangeInput/utils.js +137 -0
  155. package/esm/DateRangePicker/Calendar.js +25 -23
  156. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  157. package/esm/DateRangePicker/DateRangePicker.js +253 -205
  158. package/esm/DateRangePicker/types.d.ts +11 -3
  159. package/esm/DateRangePicker/utils.d.ts +2 -1
  160. package/esm/DateRangePicker/utils.js +7 -5
  161. package/esm/FormControl/FormControl.d.ts +11 -1
  162. package/esm/FormControl/FormControl.js +4 -3
  163. package/esm/Input/Input.d.ts +11 -0
  164. package/esm/Input/Input.js +12 -9
  165. package/esm/InputPicker/InputPicker.js +64 -65
  166. package/esm/MultiCascader/MultiCascader.js +43 -45
  167. package/esm/Overlay/OverlayTrigger.d.ts +3 -0
  168. package/esm/Overlay/OverlayTrigger.js +5 -0
  169. package/esm/Picker/PickerIndicator.d.ts +10 -0
  170. package/esm/Picker/PickerIndicator.js +43 -0
  171. package/esm/Picker/PickerLabel.d.ts +9 -0
  172. package/esm/Picker/PickerLabel.js +17 -0
  173. package/esm/Picker/PickerToggle.d.ts +17 -22
  174. package/esm/Picker/PickerToggle.js +54 -179
  175. package/esm/Picker/index.d.ts +3 -0
  176. package/esm/Picker/index.js +3 -0
  177. package/esm/Picker/usePickerRef.d.ts +19 -0
  178. package/esm/Picker/usePickerRef.js +82 -0
  179. package/esm/Picker/utils.d.ts +5 -9
  180. package/esm/Picker/utils.js +24 -90
  181. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  182. package/esm/SelectPicker/SelectPicker.js +42 -45
  183. package/esm/TreePicker/TreePicker.js +75 -78
  184. package/esm/index.d.ts +2 -0
  185. package/esm/index.js +1 -0
  186. package/esm/locales/index.d.ts +2 -2
  187. package/esm/utils/constants.d.ts +2 -1
  188. package/esm/utils/constants.js +1 -0
  189. package/esm/utils/dateUtils.d.ts +0 -1
  190. package/esm/utils/dateUtils.js +0 -5
  191. package/esm/utils/getStringLength.d.ts +2 -0
  192. package/esm/utils/getStringLength.js +13 -0
  193. package/esm/utils/index.d.ts +3 -0
  194. package/esm/utils/index.js +4 -1
  195. package/esm/utils/useCustom.js +2 -2
  196. package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  197. package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
  198. package/package.json +1 -1
  199. package/styles/color-modes/dark.less +1 -0
  200. package/styles/color-modes/high-contrast.less +1 -0
  201. package/styles/color-modes/light.less +1 -0
  202. package/styles/mixins/combobox.less +10 -0
  203. package/styles/normalize.less +230 -231
@@ -1,4 +1,4 @@
1
- import React, { Ref } from 'react';
1
+ import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
3
  import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
@@ -12,7 +12,7 @@ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerL
12
12
  }
13
13
  export interface CheckPickerComponent {
14
14
  <T>(props: CheckPickerProps<T> & {
15
- ref?: Ref<PickerHandle>;
15
+ ref?: React.Ref<PickerHandle>;
16
16
  }): JSX.Element | null;
17
17
  displayName?: string;
18
18
  propTypes?: React.WeakValidationMap<CheckPickerProps<any>>;
@@ -3,7 +3,7 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
5
  var _templateObject;
6
- import React, { useRef, useState, useCallback } from 'react';
6
+ import React, { useState } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import clone from 'lodash/clone';
9
9
  import isUndefined from 'lodash/isUndefined';
@@ -13,9 +13,9 @@ import omit from 'lodash/omit';
13
13
  import pick from 'lodash/pick';
14
14
  import isNil from 'lodash/isNil';
15
15
  import { filterNodesOfTree } from '../utils/treeUtils';
16
- import { createChainedFunction, useClassNames, shallowEqual, useCustom, useControlled, mergeRefs } from '../utils';
16
+ import { createChainedFunction, useClassNames, shallowEqual, useCustom, useControlled, useEventCallback, mergeRefs } from '../utils';
17
17
  import { getDataGroupBy } from '../utils/getDataGroupBy';
18
- import { DropdownMenu, DropdownMenuCheckItem as DropdownMenuItem, PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, useFocusItemValue, usePickerClassName, useSearch, usePublicMethods, useToggleKeyDownEvent, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
18
+ import { DropdownMenu, DropdownMenuCheckItem as DropdownMenuItem, PickerToggle, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, useFocusItemValue, usePickerClassName, useSearch, useToggleKeyDownEvent, usePickerRef, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
19
19
  var emptyArray = [];
20
20
  /**
21
21
  * A component for selecting checkable items in a dropdown list.
@@ -80,11 +80,13 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
80
80
  onClose = props.onClose,
81
81
  onOpen = props.onOpen,
82
82
  rest = _objectWithoutPropertiesLoose(props, ["as", "appearance", "classPrefix", "countable", "data", "disabledItemValues", "valueKey", "labelKey", "searchable", "virtualized", "cleanable", "placement", "menuAutoWidth", "menuMaxHeight", "menuClassName", "menuStyle", "locale", "placeholder", "disabled", "toggleAs", "style", "sticky", "value", "defaultValue", "groupBy", "listProps", "id", "sort", "searchBy", "renderMenuItem", "renderMenuGroup", "renderValue", "renderExtraFooter", "renderMenu", "onGroupTitleClick", "onSearch", "onEnter", "onEntered", "onExited", "onClean", "onChange", "onSelect", "onClose", "onOpen"]);
83
- var triggerRef = useRef(null);
84
- var targetRef = useRef(null);
85
- var overlayRef = useRef(null);
86
- var searchInputRef = useRef(null);
87
- var listRef = useRef(null);
83
+ var _usePickerRef = usePickerRef(ref),
84
+ trigger = _usePickerRef.trigger,
85
+ root = _usePickerRef.root,
86
+ target = _usePickerRef.target,
87
+ overlay = _usePickerRef.overlay,
88
+ list = _usePickerRef.list,
89
+ searchInput = _usePickerRef.searchInput;
88
90
  var _useCustom = useCustom('Picker', overrideLocale),
89
91
  locale = _useCustom.locale;
90
92
  var _useControlled = useControlled(valueProp, defaultValue || []),
@@ -94,18 +96,18 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
94
96
  data: data,
95
97
  valueKey: valueKey,
96
98
  target: function target() {
97
- return overlayRef.current;
99
+ return overlay.current;
98
100
  }
99
101
  }),
100
102
  focusItemValue = _useFocusItemValue.focusItemValue,
101
103
  setFocusItemValue = _useFocusItemValue.setFocusItemValue,
102
104
  onFocusItem = _useFocusItemValue.onKeyDown;
103
- var handleSearchCallback = useCallback(function (searchKeyword, filteredData, event) {
105
+ var handleSearchCallback = useEventCallback(function (searchKeyword, filteredData, event) {
104
106
  var _filteredData$;
105
107
  // The first option after filtering is the focus.
106
108
  setFocusItemValue(filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]);
107
109
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
108
- }, [setFocusItemValue, onSearch, valueKey]);
110
+ });
109
111
 
110
112
  // Use search keywords to filter options.
111
113
  var _useSearch = useSearch(data, {
@@ -139,17 +141,17 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
141
  }
140
142
  setStickyItems(nextStickyItems);
141
143
  };
142
- var handleChangeValue = useCallback(function (value, event) {
144
+ var handleChangeValue = useEventCallback(function (value, event) {
143
145
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
144
- }, [onChange]);
145
- var handleClean = useCallback(function (event) {
146
+ });
147
+ var handleClean = useEventCallback(function (event) {
146
148
  if (disabled || !cleanable) {
147
149
  return;
148
150
  }
149
151
  setValue([]);
150
152
  onClean === null || onClean === void 0 ? void 0 : onClean(event);
151
153
  handleChangeValue([], event);
152
- }, [disabled, cleanable, setValue, onClean, handleChangeValue]);
154
+ });
153
155
  var handleMenuPressEnter = function handleMenuPressEnter(event) {
154
156
  var nextValue = clone(value);
155
157
  if (!focusItemValue) {
@@ -173,10 +175,10 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
173
175
  };
174
176
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
175
177
  toggle: !focusItemValue || !active,
176
- triggerRef: triggerRef,
177
- targetRef: targetRef,
178
- overlayRef: overlayRef,
179
- searchInputRef: searchInputRef,
178
+ trigger: trigger,
179
+ target: target,
180
+ overlay: overlay,
181
+ searchInput: searchInput,
180
182
  active: active,
181
183
  onExit: handleClean,
182
184
  onMenuKeyDown: onFocusItem,
@@ -186,10 +188,10 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
186
188
  setFocusItemValue(null);
187
189
  }
188
190
  }, rest));
189
- var handleSelect = useCallback(function (nextItemValue, item, event) {
191
+ var handleSelect = useEventCallback(function (nextItemValue, item, event) {
190
192
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(nextItemValue, item, event);
191
- }, [onSelect]);
192
- var handleItemSelect = useCallback(function (nextItemValue, item, event, checked) {
193
+ });
194
+ var handleItemSelect = useEventCallback(function (nextItemValue, item, event, checked) {
193
195
  var nextValue = clone(value);
194
196
  if (checked) {
195
197
  nextValue.push(nextItemValue);
@@ -202,22 +204,16 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
202
204
  setFocusItemValue(nextItemValue);
203
205
  handleSelect(nextValue, item, event);
204
206
  handleChangeValue(nextValue, event);
205
- }, [value, setValue, handleSelect, handleChangeValue, setFocusItemValue]);
206
- var handleEntered = useCallback(function () {
207
+ });
208
+ var handleEntered = useEventCallback(function () {
207
209
  setActive(true);
208
210
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
209
- }, [onOpen]);
210
- var handleExited = useCallback(function () {
211
+ });
212
+ var handleExited = useEventCallback(function () {
211
213
  resetSearch();
212
214
  setFocusItemValue(null);
213
215
  setActive(false);
214
216
  onClose === null || onClose === void 0 ? void 0 : onClose();
215
- }, [onClose, setFocusItemValue, resetSearch]);
216
- usePublicMethods(ref, {
217
- triggerRef: triggerRef,
218
- overlayRef: overlayRef,
219
- targetRef: targetRef,
220
- listRef: listRef
221
217
  });
222
218
  var selectedItems = data.filter(function (item) {
223
219
  return value === null || value === void 0 ? void 0 : value.some(function (val) {
@@ -281,7 +277,7 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
281
277
  var menu = items.length || filteredStickyItems.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
282
278
  id: id ? id + "-listbox" : undefined,
283
279
  listProps: listProps,
284
- listRef: listRef,
280
+ listRef: list,
285
281
  disabledItemValues: disabledItemValues,
286
282
  valueKey: valueKey,
287
283
  labelKey: labelKey,
@@ -304,17 +300,17 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
304
300
  className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["none"])))
305
301
  }, locale === null || locale === void 0 ? void 0 : locale.noResultsText);
306
302
  return /*#__PURE__*/React.createElement(PickerOverlay, {
307
- ref: mergeRefs(overlayRef, speakerRef),
303
+ ref: mergeRefs(overlay, speakerRef),
308
304
  autoWidth: menuAutoWidth,
309
305
  className: classes,
310
306
  style: styles,
311
307
  onKeyDown: onPickerKeyDown,
312
- target: triggerRef
308
+ target: trigger
313
309
  }, searchable && /*#__PURE__*/React.createElement(SearchBar, {
314
310
  placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
315
311
  onChange: handleSearch,
316
312
  value: searchKeyword,
317
- inputRef: searchInputRef
313
+ inputRef: searchInput
318
314
  }), renderMenu ? renderMenu(menu) : menu, renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
319
315
  };
320
316
  var _usePickerClassName = usePickerClassName(_extends({}, props, {
@@ -329,7 +325,7 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
329
325
  usedClassNamePropKeys = _usePickerClassName[1];
330
326
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
331
327
  pickerProps: pick(props, pickTriggerPropKeys),
332
- ref: triggerRef,
328
+ ref: trigger,
333
329
  placement: placement,
334
330
  onEnter: createChainedFunction(initStickyItems, onEnter),
335
331
  onEntered: createChainedFunction(handleEntered, onEntered),
@@ -337,10 +333,11 @@ var CheckPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
337
333
  speaker: renderDropdownMenu
338
334
  }, /*#__PURE__*/React.createElement(Component, {
339
335
  className: classes,
340
- style: style
336
+ style: style,
337
+ ref: root
341
338
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
342
339
  id: id,
343
- ref: targetRef,
340
+ ref: target,
344
341
  appearance: appearance,
345
342
  disabled: disabled,
346
343
  onClean: handleClean,
@@ -7,15 +7,15 @@ import _omit from "lodash/omit";
7
7
  import _isFunction from "lodash/isFunction";
8
8
  import _pick from "lodash/pick";
9
9
  import _isNil from "lodash/isNil";
10
- import React, { useState, useRef, useEffect, useCallback, useContext, useMemo } from 'react';
10
+ import React, { useState, useEffect, useContext, useMemo } from 'react';
11
11
  import PropTypes from 'prop-types';
12
12
  import classNames from 'classnames';
13
13
  import { List, AutoSizer } from '../Windowing';
14
14
  import CheckTreeNode from './CheckTreeNode';
15
15
  import TreeContext from '../Tree/TreeContext';
16
16
  import { getKeyParentMap, getPathTowardsItem, getTreeNodeIndent } from '../utils/treeUtils';
17
- import { createChainedFunction, useCustom, useClassNames, useControlled, KEY_VALUES, mergeRefs } from '../utils';
18
- import { PickerToggle, onMenuKeyDown as _onMenuKeyDown, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, createConcatChildrenFunction, usePickerClassName, usePublicMethods, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes, useToggleKeyDownEvent } from '../Picker';
17
+ import { createChainedFunction, useCustom, useClassNames, useControlled, useEventCallback, KEY_VALUES, mergeRefs } from '../utils';
18
+ import { PickerToggle, onMenuKeyDown as _onMenuKeyDown, PickerOverlay, SearchBar, SelectedElement, PickerToggleTrigger, createConcatChildrenFunction, usePickerClassName, useToggleKeyDownEvent, usePickerRef, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
19
19
  import { isEveryChildChecked, isSomeNodeHasChildren, isAllSiblingNodeUncheckable, isEveryFirstLevelNodeUncheckable, getFormattedTree, getDisabledState, getCheckTreePickerDefaultValue, getSelectedItems, isNodeUncheckable } from './utils';
20
20
  import { hasVisibleChildren, getExpandWhenSearching, useTreeSearch, useTreeNodeRefs, getDefaultExpandItemValues, useFlattenTreeData, focusNextItem, getFocusableItems, focusPreviousItem, toggleExpand, getActiveItem, useGetTreeNodeChildren, focusToActiveTreeNode, focusTreeNode, leftArrowHandler, rightArrowHandler, isSearching } from '../utils/treeUtils';
21
21
  var emptyArray = [];
@@ -106,12 +106,16 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
106
106
  rest = _objectWithoutPropertiesLoose(props, ["as", "data", "style", "appearance", "cleanable", "countable", "searchBy", "toggleAs", "searchKeyword", "showIndentLine", "locale", "cascade", "disabled", "valueKey", "labelKey", "placement", "childrenKey", "placeholder", "value", "defaultValue", "defaultExpandAll", "disabledItemValues", "expandItemValues", "defaultExpandItemValues", "height", "menuMaxHeight", "menuStyle", "searchable", "virtualized", "className", "classPrefix", "menuClassName", "menuAutoWidth", "uncheckableItemValues", "id", "listProps", "renderMenu", "getChildren", "renderExtraFooter", "onEntered", "onChange", "onClean", "onClose", "onExited", "onSearch", "onSelect", "onSelectItem", "onOpen", "onScroll", "onExpand", "renderValue", "renderTreeIcon", "renderTreeNode"]);
107
107
  var _useContext = useContext(TreeContext),
108
108
  inline = _useContext.inline;
109
- var triggerRef = useRef(null);
110
- var targetRef = useRef(null);
111
- var listRef = useRef(null);
112
- var overlayRef = useRef(null);
113
- var searchInputRef = useRef(null);
114
- var treeViewRef = useRef(null);
109
+ var _usePickerRef = usePickerRef(ref, {
110
+ inline: inline
111
+ }),
112
+ trigger = _usePickerRef.trigger,
113
+ root = _usePickerRef.root,
114
+ target = _usePickerRef.target,
115
+ overlay = _usePickerRef.overlay,
116
+ list = _usePickerRef.list,
117
+ searchInput = _usePickerRef.searchInput,
118
+ treeView = _usePickerRef.treeView;
115
119
  var _useCustom = useCustom('Picker', overrideLocale),
116
120
  rtl = _useCustom.rtl,
117
121
  locale = _useCustom.locale;
@@ -192,7 +196,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
192
196
  * get formatted nodes for render tree
193
197
  * @params render - renderNode function. only used when virtualized setting false
194
198
  */
195
- var getFormattedNodes = useCallback(function (render) {
199
+ var getFormattedNodes = function getFormattedNodes(render) {
196
200
  if (virtualized) {
197
201
  return formatVirtualizedTreeData(flattenNodes, filteredData, expandItemValues, {
198
202
  cascade: cascade,
@@ -207,7 +211,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
207
211
  }).map(function (node) {
208
212
  return render === null || render === void 0 ? void 0 : render(node, 1);
209
213
  });
210
- }, [searchKeywordState, expandItemValues, filteredData, flattenNodes, formatVirtualizedTreeData, virtualized, childrenKey, cascade]);
214
+ };
211
215
  var getTreeNodeProps = function getTreeNodeProps(node, layer) {
212
216
  return {
213
217
  as: Component,
@@ -238,19 +242,19 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
238
242
  onRenderTreeIcon: renderTreeIcon
239
243
  };
240
244
  };
241
- var focusActiveNode = useCallback(function () {
242
- if (listRef.current) {
245
+ var focusActiveNode = function focusActiveNode() {
246
+ if (list.current) {
243
247
  focusToActiveTreeNode({
244
- list: listRef.current,
248
+ list: list.current,
245
249
  valueKey: valueKey,
246
250
  selector: "." + checkTreePrefix('node-active'),
247
251
  activeNode: activeNode,
248
252
  virtualized: virtualized,
249
- container: treeViewRef.current,
253
+ container: treeView.current,
250
254
  formattedNodes: getFormattedNodes()
251
255
  });
252
256
  }
253
- }, [checkTreePrefix, activeNode, getFormattedNodes, valueKey, virtualized]);
257
+ };
254
258
  useEffect(function () {
255
259
  setValue(getCheckTreePickerDefaultValue(value, uncheckableItemValues));
256
260
  }, []); // eslint-disable-line react-hooks/exhaustive-deps
@@ -280,7 +284,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
280
284
  });
281
285
  forceUpdate();
282
286
  }, [cascade, value, uncheckableItemValues, unSerializeList, flattenNodes, forceUpdate]);
283
- var toggleUpChecked = useCallback(function (nodes, node, checked) {
287
+ var toggleUpChecked = useEventCallback(function (nodes, node, checked) {
284
288
  var currentNode = node.refKey ? nodes[node.refKey] : null;
285
289
  if (cascade && currentNode) {
286
290
  if (!checked) {
@@ -299,8 +303,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
299
303
  toggleUpChecked(nodes, currentNode.parent, checked);
300
304
  }
301
305
  }
302
- }, [cascade]);
303
- var toggleDownChecked = useCallback(function (nodes, node, isChecked) {
306
+ });
307
+ var toggleDownChecked = useEventCallback(function (nodes, node, isChecked) {
304
308
  var currentNode = node.refKey ? nodes[node.refKey] : null;
305
309
  if (!currentNode) {
306
310
  return;
@@ -314,8 +318,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
314
318
  toggleDownChecked(nodes, child, isChecked);
315
319
  });
316
320
  }
317
- }, [cascade, childrenKey]);
318
- var toggleChecked = useCallback(function (node, isChecked) {
321
+ });
322
+ var toggleChecked = useEventCallback(function (node, isChecked) {
319
323
  var nodes = _cloneDeep(flattenNodes);
320
324
  toggleDownChecked(nodes, node, isChecked);
321
325
  node.parent && toggleUpChecked(nodes, node.parent, isChecked);
@@ -324,7 +328,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
324
328
  return values.filter(function (v) {
325
329
  return !uncheckableItemValues.includes(v);
326
330
  });
327
- }, [flattenNodes, uncheckableItemValues, serializeListOnlyParent, toggleDownChecked, toggleUpChecked]);
331
+ });
328
332
 
329
333
  // TODO-Doma
330
334
  // Replace `getKeyParentMap` with `getParentMap`
@@ -335,7 +339,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
335
339
  return node[childrenKey];
336
340
  });
337
341
  }, [childrenKey, data, valueKey]);
338
- var handleSelect = useCallback(function (node, event) {
342
+ var handleSelect = useEventCallback(function (node, event) {
339
343
  var currentNode = node.refKey ? flattenNodes[node.refKey] : null;
340
344
  if (!node || !currentNode) {
341
345
  return;
@@ -358,18 +362,18 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
358
362
  onSelectItem === null || onSelectItem === void 0 ? void 0 : onSelectItem(node, getPathTowardsItem(node, function (item) {
359
363
  return itemParentMap.get(item[valueKey]);
360
364
  }));
361
- }, [flattenNodes, toggleChecked, isControlled, valueKey, onChange, onSelect, onSelectItem, unSerializeList, cascade, uncheckableItemValues, setValue, itemParentMap]);
362
- var handleOpen = useCallback(function () {
363
- var _triggerRef$current, _triggerRef$current$o;
364
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$o = _triggerRef$current.open) === null || _triggerRef$current$o === void 0 ? void 0 : _triggerRef$current$o.call(_triggerRef$current);
365
+ });
366
+ var handleOpen = useEventCallback(function () {
367
+ var _trigger$current, _trigger$current$open;
368
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$open = _trigger$current.open) === null || _trigger$current$open === void 0 ? void 0 : _trigger$current$open.call(_trigger$current);
365
369
  setFocusItemValue(activeNode === null || activeNode === void 0 ? void 0 : activeNode[valueKey]);
366
370
  focusActiveNode();
367
371
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
368
372
  setActive(true);
369
- }, [activeNode, focusActiveNode, onOpen, valueKey]);
370
- var handleClose = useCallback(function () {
371
- var _triggerRef$current2, _triggerRef$current2$, _targetRef$current;
372
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.close) === null || _triggerRef$current2$ === void 0 ? void 0 : _triggerRef$current2$.call(_triggerRef$current2);
373
+ });
374
+ var handleClose = useEventCallback(function () {
375
+ var _trigger$current2, _trigger$current2$clo, _target$current;
376
+ (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : (_trigger$current2$clo = _trigger$current2.close) === null || _trigger$current2$clo === void 0 ? void 0 : _trigger$current2$clo.call(_trigger$current2);
373
377
  setSearchKeyword('');
374
378
  onClose === null || onClose === void 0 ? void 0 : onClose();
375
379
  setFocusItemValue(null);
@@ -378,9 +382,9 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
378
382
  /**
379
383
  * when using keyboard toggle picker, should refocus on PickerToggle Component after close picker menu
380
384
  */
381
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : _targetRef$current.focus();
382
- }, [onClose, setSearchKeyword]);
383
- var handleExpand = useCallback(function (node) {
385
+ (_target$current = target.current) === null || _target$current === void 0 ? void 0 : _target$current.focus();
386
+ });
387
+ var handleExpand = useEventCallback(function (node) {
384
388
  var nextExpandItemValues = toggleExpand({
385
389
  node: node,
386
390
  isExpand: !node.expand,
@@ -395,16 +399,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
395
399
  if (_isFunction(getChildren) && !node.expand && Array.isArray(node[childrenKey]) && node[childrenKey].length === 0) {
396
400
  loadChildren(node, getChildren);
397
401
  }
398
- }, [childrenKey, expandItemValues, getChildren, loadChildren, onExpand, setExpandItemValues, valueKey]);
399
- usePublicMethods(ref, {
400
- rootRef: inline ? treeViewRef : undefined,
401
- triggerRef: triggerRef,
402
- overlayRef: overlayRef,
403
- targetRef: targetRef,
404
- listRef: listRef,
405
- inline: inline
406
402
  });
407
- var handleClean = useCallback(function (event) {
403
+ var handleClean = useEventCallback(function (event) {
408
404
  var target = event.target;
409
405
  // exclude searchBar
410
406
  if (target.matches('div[role="searchbox"] > input') || disabled || !cleanable) {
@@ -423,8 +419,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
423
419
  });
424
420
  }
425
421
  onChange === null || onChange === void 0 ? void 0 : onChange([], event);
426
- }, [cascade, cleanable, disabled, flattenNodes, onChange, setValue, unSerializeList, uncheckableItemValues, isControlled]);
427
- var handleFocusItem = useCallback(function (key) {
422
+ });
423
+ var handleFocusItem = useEventCallback(function (key) {
428
424
  var focusableItems = getFocusableItems(filteredData, {
429
425
  disabledItemValues: disabledItemValues,
430
426
  valueKey: valueKey,
@@ -449,8 +445,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
449
445
  if (key === KEY_VALUES.UP) {
450
446
  focusPreviousItem(focusProps);
451
447
  }
452
- }, [searchKeywordState, checkTreePrefix, expandItemValues, filteredData, focusItemValue, treeNodesRefs, childrenKey, valueKey, disabledItemValues]);
453
- var handleLeftArrow = useCallback(function () {
448
+ });
449
+ var handleLeftArrow = useEventCallback(function () {
454
450
  if (_isNil(focusItemValue)) return;
455
451
  var focusItem = getActiveItem(focusItemValue, flattenNodes, valueKey);
456
452
  leftArrowHandler({
@@ -464,8 +460,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
464
460
  focusTreeNode(focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent2 = focusItem.parent) === null || _focusItem$parent2 === void 0 ? void 0 : _focusItem$parent2.refKey, treeNodesRefs, "." + checkTreePrefix('node-label'));
465
461
  }
466
462
  });
467
- }, [checkTreePrefix, expandItemValues, flattenNodes, focusItemValue, handleExpand, treeNodesRefs, valueKey, childrenKey]);
468
- var handleRightArrow = useCallback(function () {
463
+ });
464
+ var handleRightArrow = useEventCallback(function () {
469
465
  if (_isNil(focusItemValue)) return;
470
466
  var focusItem = getActiveItem(focusItemValue, flattenNodes, valueKey);
471
467
  rightArrowHandler({
@@ -477,8 +473,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
477
473
  handleFocusItem(KEY_VALUES.DOWN);
478
474
  }
479
475
  });
480
- }, [focusItemValue, flattenNodes, valueKey, expandItemValues, childrenKey, handleExpand, handleFocusItem]);
481
- var selectActiveItem = useCallback(function (event) {
476
+ });
477
+ var selectActiveItem = function selectActiveItem(event) {
482
478
  if (_isNil(focusItemValue)) return;
483
479
  var activeItem = getActiveItem(focusItemValue, flattenNodes, valueKey);
484
480
  if (!isNodeUncheckable(activeItem, {
@@ -487,13 +483,13 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
487
483
  }) && activeItem !== null) {
488
484
  handleSelect(activeItem, event);
489
485
  }
490
- }, [flattenNodes, focusItemValue, handleSelect, uncheckableItemValues, valueKey]);
486
+ };
491
487
  var onPickerKeydown = useToggleKeyDownEvent(_extends({
492
488
  toggle: !focusItemValue || !active,
493
- triggerRef: triggerRef,
494
- targetRef: targetRef,
495
- overlayRef: overlayRef,
496
- searchInputRef: searchInputRef,
489
+ trigger: trigger,
490
+ target: target,
491
+ overlay: overlay,
492
+ searchInput: searchInput,
497
493
  active: active,
498
494
  onExit: handleClean,
499
495
  onClose: handleClose,
@@ -512,8 +508,8 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
512
508
  });
513
509
  }
514
510
  }, rest));
515
- var handleTreeKeydown = useCallback(function (event) {
516
- if (!treeViewRef.current) {
511
+ var handleTreeKeydown = useEventCallback(function (event) {
512
+ if (!treeView.current) {
517
513
  return;
518
514
  }
519
515
  _onMenuKeyDown(event, {
@@ -527,7 +523,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
527
523
  right: rtl ? handleLeftArrow : handleRightArrow,
528
524
  enter: selectActiveItem
529
525
  });
530
- }, [handleFocusItem, handleLeftArrow, handleRightArrow, rtl, selectActiveItem]);
526
+ });
531
527
  var renderNode = function renderNode(node, layer) {
532
528
  var visible = node.visible,
533
529
  refKey = node.refKey; // when searching, all nodes should be expand
@@ -619,7 +615,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
619
615
  }, style) : {};
620
616
  return /*#__PURE__*/React.createElement("div", {
621
617
  id: id ? id + "-listbox" : undefined,
622
- ref: treeViewRef,
618
+ ref: inline ? root : treeView,
623
619
  role: "tree",
624
620
  "aria-multiselectable": true,
625
621
  className: classes,
@@ -637,7 +633,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
637
633
  }, function (_ref5) {
638
634
  var height = _ref5.height;
639
635
  return /*#__PURE__*/React.createElement(List, _extends({
640
- ref: listRef,
636
+ ref: list,
641
637
  height: height,
642
638
  itemSize: itemSize,
643
639
  itemCount: formattedNodes.length,
@@ -658,14 +654,14 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
658
654
  autoWidth: menuAutoWidth,
659
655
  className: classes,
660
656
  style: mergedMenuStyle,
661
- ref: mergeRefs(overlayRef, speakerRef),
657
+ ref: mergeRefs(overlay, speakerRef),
662
658
  onKeyDown: onPickerKeydown,
663
- target: triggerRef
659
+ target: trigger
664
660
  }, searchable ? /*#__PURE__*/React.createElement(SearchBar, {
665
661
  placeholder: locale.searchPlaceholder,
666
662
  onChange: handleSearch,
667
663
  value: searchKeywordState,
668
- inputRef: searchInputRef
664
+ inputRef: searchInput
669
665
  }) : null, renderMenu ? renderMenu(renderCheckTree()) : renderCheckTree(), renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
670
666
  };
671
667
  var selectedItems = useMemo(function () {
@@ -711,7 +707,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
711
707
  }
712
708
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
713
709
  pickerProps: _pick(props, pickTriggerPropKeys),
714
- ref: triggerRef,
710
+ ref: trigger,
715
711
  placement: placement,
716
712
  onEnter: handleOpen,
717
713
  onEntered: onEntered,
@@ -719,10 +715,11 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
719
715
  speaker: renderDropdownMenu
720
716
  }, /*#__PURE__*/React.createElement(Component, {
721
717
  className: classes,
722
- style: style
718
+ style: style,
719
+ ref: root
723
720
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, _omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
724
721
  id: id,
725
- ref: targetRef,
722
+ ref: target,
726
723
  appearance: appearance,
727
724
  onKeyDown: onPickerKeydown,
728
725
  onClean: createChainedFunction(handleClean, onClean),
@@ -67,6 +67,19 @@ declare const CustomContext: React.Context<CustomProviderProps<{
67
67
  more: string;
68
68
  prev: string;
69
69
  next: string;
70
+ /**
71
+ * Return the date parsed from string using the given format string.
72
+ *
73
+ * Example:
74
+ *
75
+ * import parse from 'date-fns/parse';
76
+ * import eo from 'date-fns/locale/eo'
77
+ *
78
+ * function parseDate(date, formatStr) {
79
+ * return parse(date, formatStr, new Date(), { locale: eo });
80
+ * }
81
+ *
82
+ * */
70
83
  first: string;
71
84
  last: string;
72
85
  limit: string;
@@ -1,11 +1,11 @@
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, { useEffect } from 'react';
4
+ import React from 'react';
5
5
  import { getClassNamePrefix, prefix } from '../utils/prefix';
6
6
  import { addClass, removeClass, canUseDOM } from '../DOMHelper';
7
7
  import ToastContainer, { toastPlacements } from '../toaster/ToastContainer';
8
- import { usePortal } from '../utils';
8
+ import { usePortal, useIsomorphicLayoutEffect } from '../utils';
9
9
  var CustomContext = /*#__PURE__*/React.createContext({});
10
10
  var themes = ['light', 'dark', 'high-contrast'];
11
11
 
@@ -36,7 +36,7 @@ var CustomProvider = function CustomProvider(props) {
36
36
  disableRipple: disableRipple
37
37
  }, rest);
38
38
  }, [classPrefix, theme, disableRipple, rest]);
39
- useEffect(function () {
39
+ useIsomorphicLayoutEffect(function () {
40
40
  if (canUseDOM && theme) {
41
41
  addClass(document.body, prefix(classPrefix, "theme-" + theme));
42
42