rsuite 5.49.0 → 5.51.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 (233) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/Cascader/styles/index.less +4 -4
  3. package/CheckTreePicker/styles/index.less +3 -3
  4. package/DatePicker/styles/index.less +1 -1
  5. package/DateRangePicker/styles/index.less +15 -5
  6. package/Dropdown/styles/index.less +5 -4
  7. package/Dropdown/styles/mixin.less +0 -11
  8. package/Form/styles/mixin.less +1 -2
  9. package/InputGroup/styles/index.less +0 -14
  10. package/InputPicker/styles/index.less +1 -1
  11. package/Picker/styles/index.less +33 -26
  12. package/Picker/styles/mixin.less +20 -16
  13. package/README.md +4 -4
  14. package/TagInput/styles/index.less +2 -2
  15. package/TagPicker/styles/index.less +5 -1
  16. package/TreePicker/styles/index.less +2 -2
  17. package/cjs/@types/common.d.ts +8 -0
  18. package/cjs/AutoComplete/AutoComplete.js +39 -37
  19. package/cjs/AutoComplete/Combobox.d.ts +8 -0
  20. package/cjs/AutoComplete/Combobox.js +31 -0
  21. package/cjs/Calendar/Calendar.d.ts +5 -1
  22. package/cjs/Calendar/CalendarContainer.d.ts +5 -1
  23. package/cjs/Calendar/CalendarContainer.js +35 -37
  24. package/cjs/Cascader/Cascader.js +58 -59
  25. package/cjs/Cascader/DropdownMenu.d.ts +3 -20
  26. package/cjs/Cascader/DropdownMenu.js +48 -48
  27. package/cjs/Cascader/TreeView.d.ts +24 -0
  28. package/cjs/Cascader/TreeView.js +174 -0
  29. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  30. package/cjs/CheckPicker/CheckPicker.js +42 -44
  31. package/cjs/CheckTreePicker/CheckTreeNode.d.ts +2 -2
  32. package/cjs/CheckTreePicker/CheckTreeNode.js +31 -59
  33. package/cjs/CheckTreePicker/CheckTreePicker.js +81 -84
  34. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  35. package/cjs/DatePicker/DatePicker.js +7 -10
  36. package/cjs/DatePicker/Toolbar.js +2 -1
  37. package/cjs/DateRangeInput/DateRangeInput.js +2 -2
  38. package/cjs/DateRangePicker/Calendar.js +24 -23
  39. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  40. package/cjs/DateRangePicker/DateRangePicker.js +239 -202
  41. package/cjs/DateRangePicker/types.d.ts +11 -3
  42. package/cjs/DateRangePicker/utils.d.ts +2 -1
  43. package/cjs/DateRangePicker/utils.js +7 -5
  44. package/cjs/Form/Form.d.ts +14 -0
  45. package/cjs/Form/Form.js +39 -30
  46. package/cjs/Form/FormContext.d.ts +1 -0
  47. package/cjs/FormControl/FormControl.d.ts +11 -1
  48. package/cjs/FormControl/FormControl.js +40 -17
  49. package/cjs/FormGroup/FormGroup.js +2 -1
  50. package/cjs/InputPicker/InputPicker.js +108 -92
  51. package/cjs/InputPicker/InputSearch.js +3 -15
  52. package/cjs/InputPicker/TagList.d.ts +3 -0
  53. package/cjs/InputPicker/TagList.js +29 -0
  54. package/cjs/InputPicker/TextBox.d.ts +18 -0
  55. package/cjs/InputPicker/TextBox.js +48 -0
  56. package/cjs/MultiCascader/MultiCascader.js +53 -52
  57. package/cjs/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
  58. package/cjs/MultiCascader/{DropdownMenu.js → TreeView.js} +77 -74
  59. package/{esm/Picker/DropdownMenuCheckItem.d.ts → cjs/Picker/ListCheckItem.d.ts} +3 -3
  60. package/cjs/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +14 -30
  61. package/cjs/Picker/{DropdownMenuItem.d.ts → ListItem.d.ts} +4 -4
  62. package/cjs/Picker/{DropdownMenuItem.js → ListItem.js} +15 -24
  63. package/cjs/Picker/ListItemGroup.d.ts +6 -0
  64. package/cjs/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
  65. package/cjs/Picker/Listbox.d.ts +35 -0
  66. package/cjs/Picker/{DropdownMenu.js → Listbox.js} +49 -64
  67. package/cjs/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  68. package/cjs/{DatePicker → Picker}/PickerIndicator.js +2 -1
  69. package/cjs/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  70. package/cjs/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
  71. package/cjs/Picker/{PickerOverlay.js → PickerPopup.js} +9 -7
  72. package/cjs/Picker/PickerToggle.d.ts +17 -22
  73. package/cjs/Picker/PickerToggle.js +63 -181
  74. package/cjs/Picker/PickerToggleTrigger.d.ts +15 -0
  75. package/cjs/Picker/PickerToggleTrigger.js +21 -5
  76. package/cjs/Picker/SearchBar.js +7 -9
  77. package/cjs/Picker/TreeView.d.ts +7 -0
  78. package/cjs/Picker/TreeView.js +31 -0
  79. package/cjs/Picker/hooks/index.d.ts +6 -0
  80. package/cjs/Picker/hooks/index.js +18 -0
  81. package/cjs/Picker/hooks/useCombobox.d.ts +7 -0
  82. package/cjs/Picker/hooks/useCombobox.js +22 -0
  83. package/cjs/Picker/hooks/useFocusItemValue.d.ts +30 -0
  84. package/cjs/Picker/hooks/useFocusItemValue.js +246 -0
  85. package/cjs/Picker/hooks/usePickerClassName.d.ts +21 -0
  86. package/cjs/Picker/hooks/usePickerClassName.js +39 -0
  87. package/cjs/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +5 -3
  88. package/cjs/Picker/{usePickerRef.js → hooks/usePickerRef.js} +13 -7
  89. package/cjs/Picker/hooks/useSearch.d.ts +18 -0
  90. package/cjs/Picker/hooks/useSearch.js +57 -0
  91. package/cjs/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
  92. package/cjs/Picker/hooks/useToggleKeyDownEvent.js +101 -0
  93. package/cjs/Picker/index.d.ts +9 -5
  94. package/cjs/Picker/index.js +32 -16
  95. package/cjs/Picker/propTypes.d.ts +0 -6
  96. package/cjs/Picker/propTypes.js +0 -5
  97. package/cjs/Picker/utils.d.ts +2 -100
  98. package/cjs/Picker/utils.js +1 -473
  99. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  100. package/cjs/SelectPicker/SelectPicker.js +47 -50
  101. package/cjs/TagInput/index.js +4 -0
  102. package/cjs/TreePicker/TreeNode.d.ts +2 -2
  103. package/cjs/TreePicker/TreeNode.js +22 -56
  104. package/cjs/TreePicker/TreePicker.js +91 -95
  105. package/cjs/utils/constants.d.ts +2 -1
  106. package/cjs/utils/constants.js +1 -0
  107. package/cjs/utils/dateUtils.d.ts +0 -1
  108. package/cjs/utils/dateUtils.js +0 -6
  109. package/cjs/utils/getStringLength.d.ts +2 -0
  110. package/cjs/utils/getStringLength.js +18 -0
  111. package/cjs/utils/index.d.ts +1 -0
  112. package/cjs/utils/index.js +4 -1
  113. package/dist/rsuite-no-reset-rtl.css +201 -186
  114. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  115. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  116. package/dist/rsuite-no-reset.css +201 -186
  117. package/dist/rsuite-no-reset.min.css +1 -1
  118. package/dist/rsuite-no-reset.min.css.map +1 -1
  119. package/dist/rsuite-rtl.css +201 -186
  120. package/dist/rsuite-rtl.min.css +1 -1
  121. package/dist/rsuite-rtl.min.css.map +1 -1
  122. package/dist/rsuite.css +201 -186
  123. package/dist/rsuite.js +235 -104
  124. package/dist/rsuite.js.map +1 -1
  125. package/dist/rsuite.min.css +1 -1
  126. package/dist/rsuite.min.css.map +1 -1
  127. package/dist/rsuite.min.js +1 -1
  128. package/dist/rsuite.min.js.map +1 -1
  129. package/esm/@types/common.d.ts +8 -0
  130. package/esm/AutoComplete/AutoComplete.js +42 -40
  131. package/esm/AutoComplete/Combobox.d.ts +8 -0
  132. package/esm/AutoComplete/Combobox.js +25 -0
  133. package/esm/Calendar/Calendar.d.ts +5 -1
  134. package/esm/Calendar/CalendarContainer.d.ts +5 -1
  135. package/esm/Calendar/CalendarContainer.js +37 -39
  136. package/esm/Cascader/Cascader.js +61 -62
  137. package/esm/Cascader/DropdownMenu.d.ts +3 -20
  138. package/esm/Cascader/DropdownMenu.js +50 -49
  139. package/esm/Cascader/TreeView.d.ts +24 -0
  140. package/esm/Cascader/TreeView.js +167 -0
  141. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  142. package/esm/CheckPicker/CheckPicker.js +45 -47
  143. package/esm/CheckTreePicker/CheckTreeNode.d.ts +2 -2
  144. package/esm/CheckTreePicker/CheckTreeNode.js +33 -61
  145. package/esm/CheckTreePicker/CheckTreePicker.js +84 -87
  146. package/esm/DatePicker/DatePicker.d.ts +5 -1
  147. package/esm/DatePicker/DatePicker.js +5 -8
  148. package/esm/DatePicker/Toolbar.js +2 -1
  149. package/esm/DateRangeInput/DateRangeInput.js +2 -2
  150. package/esm/DateRangePicker/Calendar.js +25 -23
  151. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  152. package/esm/DateRangePicker/DateRangePicker.js +241 -204
  153. package/esm/DateRangePicker/types.d.ts +11 -3
  154. package/esm/DateRangePicker/utils.d.ts +2 -1
  155. package/esm/DateRangePicker/utils.js +7 -5
  156. package/esm/Form/Form.d.ts +14 -0
  157. package/esm/Form/Form.js +41 -32
  158. package/esm/Form/FormContext.d.ts +1 -0
  159. package/esm/FormControl/FormControl.d.ts +11 -1
  160. package/esm/FormControl/FormControl.js +41 -18
  161. package/esm/FormGroup/FormGroup.js +3 -2
  162. package/esm/InputPicker/InputPicker.js +110 -94
  163. package/esm/InputPicker/InputSearch.js +4 -15
  164. package/esm/InputPicker/TagList.d.ts +3 -0
  165. package/esm/InputPicker/TagList.js +23 -0
  166. package/esm/InputPicker/TextBox.d.ts +18 -0
  167. package/esm/InputPicker/TextBox.js +42 -0
  168. package/esm/MultiCascader/MultiCascader.js +56 -55
  169. package/esm/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
  170. package/esm/MultiCascader/{DropdownMenu.js → TreeView.js} +79 -75
  171. package/{cjs/Picker/DropdownMenuCheckItem.d.ts → esm/Picker/ListCheckItem.d.ts} +3 -3
  172. package/esm/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +15 -30
  173. package/esm/Picker/{DropdownMenuItem.d.ts → ListItem.d.ts} +4 -4
  174. package/esm/Picker/{DropdownMenuItem.js → ListItem.js} +16 -24
  175. package/esm/Picker/ListItemGroup.d.ts +6 -0
  176. package/esm/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
  177. package/esm/Picker/Listbox.d.ts +35 -0
  178. package/esm/Picker/{DropdownMenu.js → Listbox.js} +50 -64
  179. package/esm/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  180. package/esm/{DatePicker → Picker}/PickerIndicator.js +2 -1
  181. package/esm/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  182. package/esm/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
  183. package/esm/Picker/{PickerOverlay.js → PickerPopup.js} +10 -8
  184. package/esm/Picker/PickerToggle.d.ts +17 -22
  185. package/esm/Picker/PickerToggle.js +65 -183
  186. package/esm/Picker/PickerToggleTrigger.d.ts +15 -0
  187. package/esm/Picker/PickerToggleTrigger.js +20 -5
  188. package/esm/Picker/SearchBar.js +8 -9
  189. package/esm/Picker/TreeView.d.ts +7 -0
  190. package/esm/Picker/TreeView.js +25 -0
  191. package/esm/Picker/hooks/index.d.ts +6 -0
  192. package/esm/Picker/hooks/index.js +7 -0
  193. package/esm/Picker/hooks/useCombobox.d.ts +7 -0
  194. package/esm/Picker/hooks/useCombobox.js +17 -0
  195. package/esm/Picker/hooks/useFocusItemValue.d.ts +30 -0
  196. package/esm/Picker/hooks/useFocusItemValue.js +240 -0
  197. package/esm/Picker/hooks/usePickerClassName.d.ts +21 -0
  198. package/esm/Picker/hooks/usePickerClassName.js +33 -0
  199. package/esm/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +5 -3
  200. package/esm/Picker/{usePickerRef.js → hooks/usePickerRef.js} +13 -8
  201. package/esm/Picker/hooks/useSearch.d.ts +18 -0
  202. package/esm/Picker/hooks/useSearch.js +51 -0
  203. package/esm/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
  204. package/esm/Picker/hooks/useToggleKeyDownEvent.js +96 -0
  205. package/esm/Picker/index.d.ts +9 -5
  206. package/esm/Picker/index.js +9 -5
  207. package/esm/Picker/propTypes.d.ts +0 -6
  208. package/esm/Picker/propTypes.js +0 -5
  209. package/esm/Picker/utils.d.ts +2 -100
  210. package/esm/Picker/utils.js +2 -467
  211. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  212. package/esm/SelectPicker/SelectPicker.js +50 -53
  213. package/esm/TagInput/index.js +4 -0
  214. package/esm/TreePicker/TreeNode.d.ts +2 -2
  215. package/esm/TreePicker/TreeNode.js +24 -58
  216. package/esm/TreePicker/TreePicker.js +94 -98
  217. package/esm/utils/constants.d.ts +2 -1
  218. package/esm/utils/constants.js +1 -0
  219. package/esm/utils/dateUtils.d.ts +0 -1
  220. package/esm/utils/dateUtils.js +0 -5
  221. package/esm/utils/getStringLength.d.ts +2 -0
  222. package/esm/utils/getStringLength.js +13 -0
  223. package/esm/utils/index.d.ts +1 -0
  224. package/esm/utils/index.js +1 -0
  225. package/package.json +1 -1
  226. package/styles/mixins/combobox.less +10 -0
  227. package/styles/variables.less +1 -3
  228. package/cjs/Picker/DropdownMenu.d.ts +0 -59
  229. package/cjs/Picker/DropdownMenuGroup.d.ts +0 -6
  230. package/esm/Picker/DropdownMenu.d.ts +0 -59
  231. package/esm/Picker/DropdownMenuGroup.d.ts +0 -6
  232. /package/cjs/{DatePicker → Picker}/PickerLabel.js +0 -0
  233. /package/esm/{DatePicker → Picker}/PickerLabel.js +0 -0
@@ -1,33 +1,11 @@
1
1
  import React from 'react';
2
- import { OverlayTriggerHandle } from './PickerToggleTrigger';
3
- import { TypeAttributes } from '../@types/common';
4
- import type { ListHandle } from '../Windowing';
5
2
  export interface NodeKeys {
6
3
  valueKey: string;
7
4
  childrenKey: string;
8
5
  }
9
6
  export declare function createConcatChildrenFunction<T = any>(node: any, nodeValue?: any, nodeKeys?: NodeKeys): (data: T[], children: T[]) => T[];
10
7
  export declare function shouldDisplay(label: React.ReactNode, searchKeyword: string): boolean;
11
- export interface PickerClassNameProps {
12
- name?: string;
13
- classPrefix: string;
14
- className?: string;
15
- placement?: TypeAttributes.Placement;
16
- appearance?: 'default' | 'subtle';
17
- cleanable?: boolean;
18
- block?: boolean;
19
- disabled?: boolean;
20
- countable?: boolean;
21
- readOnly?: boolean;
22
- plaintext?: boolean;
23
- hasValue?: boolean;
24
- classes?: any;
25
- }
26
- /**
27
- * The className of the assembled Toggle is on the Picker.
28
- */
29
- export declare function usePickerClassName(props: PickerClassNameProps): [string, string[]];
30
- export interface EventsProps {
8
+ export interface KeyboardEvents {
31
9
  down?: React.KeyboardEventHandler;
32
10
  up?: React.KeyboardEventHandler;
33
11
  enter?: React.KeyboardEventHandler;
@@ -41,80 +19,4 @@ export interface EventsProps {
41
19
  * @param event Keyboard event object
42
20
  * @param events Event callback functions
43
21
  */
44
- export declare function onMenuKeyDown(event: React.KeyboardEvent, events: EventsProps): void;
45
- export interface FocusItemValueProps<T = unknown> {
46
- target: HTMLElement | null | (() => HTMLElement | null);
47
- data?: T[];
48
- valueKey?: string;
49
- focusableQueryKey?: string;
50
- defaultLayer?: number;
51
- rtl?: boolean;
52
- callback?: (value: any, event: React.KeyboardEvent) => void;
53
- getParent?: (node: T) => T | undefined;
54
- }
55
- /**
56
- * A hook that manages the focus state of the option.
57
- * @param defaultFocusItemValue
58
- * @param props
59
- */
60
- export declare const useFocusItemValue: <T, D>(defaultFocusItemValue: T | null | undefined, props: FocusItemValueProps<D>) => {
61
- focusItemValue: T | null | undefined;
62
- setFocusItemValue: React.Dispatch<React.SetStateAction<T | null | undefined>>;
63
- layer: number;
64
- setLayer: React.Dispatch<React.SetStateAction<number>>;
65
- keys: any[];
66
- setKeys: React.Dispatch<React.SetStateAction<any[]>>;
67
- onKeyDown: (event: any) => void;
68
- };
69
- export interface ToggleKeyDownEventProps {
70
- toggle?: boolean;
71
- triggerRef: React.RefObject<any>;
72
- targetRef: React.RefObject<any>;
73
- overlayRef?: React.RefObject<any>;
74
- searchInputRef?: React.RefObject<any>;
75
- active?: boolean;
76
- readOnly?: boolean;
77
- disabled?: boolean;
78
- onExit?: (event: any) => void;
79
- onKeyDown?: (event: any) => void;
80
- onOpen?: () => void;
81
- onClose?: () => void;
82
- onMenuKeyDown?: (event: any) => void;
83
- onMenuPressEnter?: (event: any) => void;
84
- onMenuPressBackspace?: (event: any) => void;
85
- [key: string]: any;
86
- }
87
- /**
88
- * A hook to control the toggle keyboard operation
89
- * @param props
90
- */
91
- export declare const useToggleKeyDownEvent: (props: ToggleKeyDownEventProps) => (event: React.KeyboardEvent) => void;
92
- interface SearchOptions<T> {
93
- labelKey: string;
94
- searchBy?: (keyword: string, label: any, item: T) => boolean;
95
- callback?: (keyword: string, data: T[], event: React.SyntheticEvent) => void;
96
- }
97
- declare type UseSearchResult<T> = {
98
- searchKeyword: string;
99
- filteredData: T[];
100
- checkShouldDisplay: (item: T, keyword?: string) => boolean;
101
- handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
102
- resetSearch: () => void;
103
- };
104
- /**
105
- * A hook that handles search filter options
106
- */
107
- export declare function useSearch<T>(data: readonly T[], props: SearchOptions<T>): UseSearchResult<T>;
108
- export interface PickerDependentParameters {
109
- triggerRef?: React.RefObject<OverlayTriggerHandle>;
110
- rootRef?: React.RefObject<HTMLElement>;
111
- overlayRef?: React.RefObject<HTMLElement>;
112
- targetRef?: React.RefObject<HTMLElement>;
113
- listRef?: React.RefObject<ListHandle>;
114
- inline?: boolean;
115
- }
116
- /**
117
- * A hook of the exposed method of Picker
118
- */
119
- export declare function usePublicMethods(ref: any, parmas: PickerDependentParameters): void;
120
- export {};
22
+ export declare function onMenuKeyDown(event: React.KeyboardEvent, events: KeyboardEvents): void;
@@ -1,15 +1,8 @@
1
1
  'use client';
2
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useState, useImperativeHandle, useCallback, useMemo } from 'react';
4
- import kebabCase from 'lodash/kebabCase';
2
+ import React from 'react';
5
3
  import trim from 'lodash/trim';
6
- import isFunction from 'lodash/isFunction';
7
- import isUndefined from 'lodash/isUndefined';
8
- import omit from 'lodash/omit';
9
- import find from 'lodash/find';
10
4
  import { findNodeOfTree } from '../utils/treeUtils';
11
- import { KEY_VALUES, useClassNames, shallowEqual, reactToString, placementPolyfill } from '../utils';
12
- import { getHeight } from 'dom-lib';
5
+ import { KEY_VALUES, reactToString } from '../utils';
13
6
  var defaultNodeKeys = {
14
7
  valueKey: 'value',
15
8
  childrenKey: 'children'
@@ -44,33 +37,6 @@ export function shouldDisplay(label, searchKeyword) {
44
37
  }
45
38
  return false;
46
39
  }
47
- /**
48
- * The className of the assembled Toggle is on the Picker.
49
- */
50
- export function usePickerClassName(props) {
51
- var _withClassPrefix;
52
- var name = props.name,
53
- classPrefix = props.classPrefix,
54
- className = props.className,
55
- placement = props.placement,
56
- appearance = props.appearance,
57
- cleanable = props.cleanable,
58
- block = props.block,
59
- disabled = props.disabled,
60
- countable = props.countable,
61
- readOnly = props.readOnly,
62
- plaintext = props.plaintext,
63
- hasValue = props.hasValue,
64
- rest = _objectWithoutPropertiesLoose(props, ["name", "classPrefix", "className", "placement", "appearance", "cleanable", "block", "disabled", "countable", "readOnly", "plaintext", "hasValue"]);
65
- var _useClassNames = useClassNames(classPrefix),
66
- withClassPrefix = _useClassNames.withClassPrefix,
67
- merge = _useClassNames.merge;
68
- var classes = merge(className, withClassPrefix(name, appearance, 'toggle-wrapper', (_withClassPrefix = {}, _withClassPrefix["placement-" + kebabCase(placementPolyfill(placement))] = placement, _withClassPrefix['read-only'] = readOnly, _withClassPrefix['has-value'] = hasValue, _withClassPrefix.cleanable = cleanable, _withClassPrefix.block = block, _withClassPrefix.disabled = disabled, _withClassPrefix.countable = countable, _withClassPrefix.plaintext = plaintext, _withClassPrefix)));
69
-
70
- // Those props that're used for composing the className
71
- var usedClassNamePropKeys = Object.keys(omit(props, [].concat(Object.keys(rest || {}), ['disabled', 'readOnly', 'plaintext', 'name'])));
72
- return [classes, usedClassNamePropKeys];
73
- }
74
40
  /**
75
41
  * Handling keyboard events...
76
42
  * @param event Keyboard event object
@@ -119,435 +85,4 @@ export function onMenuKeyDown(event, events) {
119
85
  break;
120
86
  default:
121
87
  }
122
- }
123
- /**
124
- * Checks if the element has a vertical scrollbar.
125
- */
126
- function hasVerticalScroll(element) {
127
- var scrollHeight = element.scrollHeight,
128
- clientHeight = element.clientHeight;
129
- return scrollHeight > clientHeight;
130
- }
131
-
132
- /**
133
- * Checks if the element is within the visible area of the container
134
- */
135
- function isVisible(element, container, direction) {
136
- if (!hasVerticalScroll(container)) {
137
- return true;
138
- }
139
- var _element$getBoundingC = element.getBoundingClientRect(),
140
- top = _element$getBoundingC.top,
141
- bottom = _element$getBoundingC.bottom,
142
- height = _element$getBoundingC.height;
143
- var _container$getBoundin = container.getBoundingClientRect(),
144
- containerTop = _container$getBoundin.top,
145
- containerBottom = _container$getBoundin.bottom;
146
- if (direction === 'top') {
147
- return top + height > containerTop;
148
- }
149
- return bottom - height < containerBottom;
150
- }
151
- function scrollTo(container, direction, step) {
152
- var scrollTop = container.scrollTop;
153
- container.scrollTop = direction === 'top' ? scrollTop - step : scrollTop + step;
154
- }
155
-
156
- /**
157
- * A hook that manages the focus state of the option.
158
- * @param defaultFocusItemValue
159
- * @param props
160
- */
161
- export var useFocusItemValue = function useFocusItemValue(defaultFocusItemValue, props) {
162
- var _props$valueKey = props.valueKey,
163
- valueKey = _props$valueKey === void 0 ? 'value' : _props$valueKey,
164
- _props$focusableQuery = props.focusableQueryKey,
165
- focusableQueryKey = _props$focusableQuery === void 0 ? '[data-key][aria-disabled="false"]' : _props$focusableQuery,
166
- _props$defaultLayer = props.defaultLayer,
167
- defaultLayer = _props$defaultLayer === void 0 ? 0 : _props$defaultLayer,
168
- data = props.data,
169
- target = props.target,
170
- rtl = props.rtl,
171
- callback = props.callback,
172
- _props$getParent = props.getParent,
173
- getParent = _props$getParent === void 0 ? function (item) {
174
- return item === null || item === void 0 ? void 0 : item.parent;
175
- } : _props$getParent;
176
- var _useState = useState(defaultFocusItemValue),
177
- focusItemValue = _useState[0],
178
- setFocusItemValue = _useState[1];
179
- var _useState2 = useState(defaultLayer),
180
- layer = _useState2[0],
181
- setLayer = _useState2[1];
182
- var _useState3 = useState([]),
183
- keys = _useState3[0],
184
- setKeys = _useState3[1];
185
- var focusCallback = useCallback(function (value, event) {
186
- var menu = isFunction(target) ? target() : target;
187
- var focusElement = menu === null || menu === void 0 ? void 0 : menu.querySelector("[data-key=\"" + value + "\"]");
188
- focusElement === null || focusElement === void 0 ? void 0 : focusElement.focus();
189
- callback === null || callback === void 0 ? void 0 : callback(value, event);
190
- }, [callback, target]);
191
- var getScrollContainer = useCallback(function () {
192
- var menu = isFunction(target) ? target() : target;
193
-
194
- // For Cascader and MutiCascader
195
- var subMenu = menu === null || menu === void 0 ? void 0 : menu.querySelector("[data-layer=\"" + layer + "\"]");
196
- if (subMenu) {
197
- return subMenu;
198
- }
199
-
200
- // For SelectPicker、CheckPicker、Autocomplete、InputPicker、TagPicker
201
- return menu === null || menu === void 0 ? void 0 : menu.querySelector('[role="listbox"]');
202
- }, [layer, target]);
203
-
204
- /**
205
- * Get the elements visible in all options.
206
- */
207
- var getFocusableMenuItems = useCallback(function () {
208
- if (!target) {
209
- return [];
210
- }
211
- var currentKeys = keys;
212
- if (layer < 1) {
213
- var popup = isFunction(target) ? target() : target;
214
- var rootMenu = popup === null || popup === void 0 ? void 0 : popup.querySelector('[data-layer="0"]');
215
- if (rootMenu) {
216
- var _rootMenu$querySelect;
217
- currentKeys = Array.from((_rootMenu$querySelect = rootMenu.querySelectorAll(focusableQueryKey)) !== null && _rootMenu$querySelect !== void 0 ? _rootMenu$querySelect : []).map(function (item) {
218
- var _item$dataset;
219
- return (_item$dataset = item.dataset) === null || _item$dataset === void 0 ? void 0 : _item$dataset.key;
220
- });
221
- } else {
222
- var _popup$querySelectorA;
223
- currentKeys = Array.from((_popup$querySelectorA = popup === null || popup === void 0 ? void 0 : popup.querySelectorAll(focusableQueryKey)) !== null && _popup$querySelectorA !== void 0 ? _popup$querySelectorA : []).map(function (item) {
224
- var _item$dataset2;
225
- return (_item$dataset2 = item.dataset) === null || _item$dataset2 === void 0 ? void 0 : _item$dataset2.key;
226
- });
227
- }
228
- }
229
-
230
- // 1. It is necessary to traverse the `keys` instead of `data` here to preserve the order of the array.
231
- // 2. The values ​​in `keys` are all string, so the corresponding value of `data` should also be converted to string
232
- return currentKeys.map(function (key) {
233
- return find(data, function (i) {
234
- return "" + i[valueKey] === key;
235
- });
236
- });
237
- }, [data, focusableQueryKey, keys, target, valueKey, layer]);
238
-
239
- /**
240
- * Get the index of the focus item.
241
- */
242
- var findFocusItemIndex = useCallback(function (callback) {
243
- var items = getFocusableMenuItems();
244
- for (var i = 0; i < items.length; i += 1) {
245
- var _items$i;
246
- if (shallowEqual(focusItemValue, (_items$i = items[i]) === null || _items$i === void 0 ? void 0 : _items$i[valueKey])) {
247
- callback(items, i);
248
- return;
249
- }
250
- }
251
- callback(items, -1);
252
- }, [focusItemValue, getFocusableMenuItems, valueKey]);
253
- var scrollListItem = useCallback(function (direction, itemValue, willOverflow) {
254
- var container = getScrollContainer();
255
- var item = container === null || container === void 0 ? void 0 : container.querySelector("[data-key=\"" + itemValue + "\"]");
256
- if (willOverflow && container) {
257
- var scrollHeight = container.scrollHeight,
258
- clientHeight = container.clientHeight;
259
- container.scrollTop = direction === 'top' ? scrollHeight - clientHeight : 0;
260
- return;
261
- }
262
- if (item && container) {
263
- if (!isVisible(item, container, direction)) {
264
- var height = getHeight(item);
265
- scrollTo(container, direction, height);
266
- }
267
- }
268
- }, [getScrollContainer]);
269
- var focusNextMenuItem = useCallback(function (event) {
270
- findFocusItemIndex(function (items, index) {
271
- var willOverflow = index + 2 > items.length;
272
- var nextIndex = willOverflow ? 0 : index + 1;
273
- var focusItem = items[nextIndex];
274
- if (!isUndefined(focusItem)) {
275
- setFocusItemValue(focusItem[valueKey]);
276
- focusCallback(focusItem[valueKey], event);
277
- scrollListItem('bottom', focusItem[valueKey], willOverflow);
278
- }
279
- });
280
- }, [focusCallback, findFocusItemIndex, scrollListItem, valueKey]);
281
- var focusPrevMenuItem = useCallback(function (event) {
282
- findFocusItemIndex(function (items, index) {
283
- var willOverflow = index === 0;
284
- var nextIndex = willOverflow ? items.length - 1 : index - 1;
285
- var focusItem = items[nextIndex];
286
- if (!isUndefined(focusItem)) {
287
- setFocusItemValue(focusItem[valueKey]);
288
- focusCallback(focusItem[valueKey], event);
289
- scrollListItem('top', focusItem[valueKey], willOverflow);
290
- }
291
- });
292
- }, [focusCallback, findFocusItemIndex, scrollListItem, valueKey]);
293
- var getSubMenuKeys = useCallback(function (nextLayer) {
294
- var menu = isFunction(target) ? target() : target;
295
- var subMenu = menu === null || menu === void 0 ? void 0 : menu.querySelector("[data-layer=\"" + nextLayer + "\"]");
296
- if (subMenu) {
297
- var _Array$from;
298
- return (_Array$from = Array.from(subMenu.querySelectorAll(focusableQueryKey))) === null || _Array$from === void 0 ? void 0 : _Array$from.map(function (item) {
299
- var _item$dataset3;
300
- return (_item$dataset3 = item.dataset) === null || _item$dataset3 === void 0 ? void 0 : _item$dataset3.key;
301
- });
302
- }
303
- return null;
304
- }, [focusableQueryKey, target]);
305
- var focusNextLevelMenu = useCallback(function (event) {
306
- var nextLayer = layer + 1;
307
- var nextKeys = getSubMenuKeys(nextLayer);
308
- if (nextKeys) {
309
- setKeys(nextKeys);
310
- setLayer(nextLayer);
311
- setFocusItemValue(nextKeys[0]);
312
- focusCallback(nextKeys[0], event);
313
- }
314
- }, [focusCallback, getSubMenuKeys, layer]);
315
- var focusPrevLevelMenu = useCallback(function (event) {
316
- var nextLayer = layer - 1;
317
- var nextKeys = getSubMenuKeys(nextLayer);
318
- if (nextKeys) {
319
- var _getParent;
320
- setKeys(nextKeys);
321
- setLayer(nextLayer);
322
- var focusItem = findNodeOfTree(data, function (item) {
323
- return item[valueKey] === focusItemValue;
324
- });
325
- var parentItemValue = (_getParent = getParent(focusItem)) === null || _getParent === void 0 ? void 0 : _getParent[valueKey];
326
- if (parentItemValue) {
327
- setFocusItemValue(parentItemValue);
328
- focusCallback(parentItemValue, event);
329
- }
330
- }
331
- }, [focusCallback, data, focusItemValue, getParent, getSubMenuKeys, layer, valueKey]);
332
- var handleKeyDown = useCallback(function (event) {
333
- var _onMenuKeyDown;
334
- onMenuKeyDown(event, (_onMenuKeyDown = {
335
- down: focusNextMenuItem,
336
- up: focusPrevMenuItem
337
- }, _onMenuKeyDown[rtl ? 'left' : 'right'] = focusNextLevelMenu, _onMenuKeyDown[rtl ? 'right' : 'left'] = focusPrevLevelMenu, _onMenuKeyDown));
338
- }, [focusNextLevelMenu, focusNextMenuItem, focusPrevLevelMenu, focusPrevMenuItem, rtl]);
339
- return {
340
- focusItemValue: focusItemValue,
341
- setFocusItemValue: setFocusItemValue,
342
- layer: layer,
343
- setLayer: setLayer,
344
- keys: keys,
345
- setKeys: setKeys,
346
- onKeyDown: handleKeyDown
347
- };
348
- };
349
- /**
350
- * A hook to control the toggle keyboard operation
351
- * @param props
352
- */
353
- export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
354
- var _props$toggle = props.toggle,
355
- toggle = _props$toggle === void 0 ? true : _props$toggle,
356
- triggerRef = props.triggerRef,
357
- targetRef = props.targetRef,
358
- overlayRef = props.overlayRef,
359
- searchInputRef = props.searchInputRef,
360
- active = props.active,
361
- readOnly = props.readOnly,
362
- disabled = props.disabled,
363
- loading = props.loading,
364
- onExit = props.onExit,
365
- onOpen = props.onOpen,
366
- onClose = props.onClose,
367
- onKeyDown = props.onKeyDown,
368
- onMenuKeyDown = props.onMenuKeyDown,
369
- onMenuPressEnter = props.onMenuPressEnter,
370
- onMenuPressBackspace = props.onMenuPressBackspace;
371
- var handleClose = useCallback(function () {
372
- var _triggerRef$current, _triggerRef$current$c, _targetRef$current, _targetRef$current$fo;
373
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$c = _triggerRef$current.close) === null || _triggerRef$current$c === void 0 ? void 0 : _triggerRef$current$c.call(_triggerRef$current);
374
-
375
- // The focus is on the trigger button after closing
376
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : (_targetRef$current$fo = _targetRef$current.focus) === null || _targetRef$current$fo === void 0 ? void 0 : _targetRef$current$fo.call(_targetRef$current);
377
- onClose === null || onClose === void 0 ? void 0 : onClose();
378
- }, [onClose, targetRef, triggerRef]);
379
- var handleOpen = useCallback(function () {
380
- var _triggerRef$current2, _triggerRef$current2$;
381
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.open) === null || _triggerRef$current2$ === void 0 ? void 0 : _triggerRef$current2$.call(_triggerRef$current2);
382
- onOpen === null || onOpen === void 0 ? void 0 : onOpen();
383
- }, [onOpen, triggerRef]);
384
- var handleToggleDropdown = useCallback(function () {
385
- if (active) {
386
- handleClose();
387
- return;
388
- }
389
- handleOpen();
390
- }, [active, handleOpen, handleClose]);
391
- var onToggle = useCallback(function (event) {
392
- // Keyboard events should not be processed when readOnly and disabled are set.
393
- if (readOnly || disabled || loading) {
394
- return;
395
- }
396
- if (event.target === (targetRef === null || targetRef === void 0 ? void 0 : targetRef.current)) {
397
- // enter
398
- if (toggle && event.key === KEY_VALUES.ENTER) {
399
- handleToggleDropdown();
400
- }
401
-
402
- // delete
403
- if (event.key === KEY_VALUES.BACKSPACE) {
404
- onExit === null || onExit === void 0 ? void 0 : onExit(event);
405
- }
406
- }
407
- if (overlayRef !== null && overlayRef !== void 0 && overlayRef.current) {
408
- // The keyboard operation callback on the menu.
409
- onMenuKeyDown === null || onMenuKeyDown === void 0 ? void 0 : onMenuKeyDown(event);
410
- if (event.key === KEY_VALUES.ENTER) {
411
- onMenuPressEnter === null || onMenuPressEnter === void 0 ? void 0 : onMenuPressEnter(event);
412
- }
413
-
414
- /**
415
- * There is no callback when typing the Backspace key in the search box.
416
- * The default is to remove search keywords
417
- */
418
- if (event.key === KEY_VALUES.BACKSPACE && event.target !== (searchInputRef === null || searchInputRef === void 0 ? void 0 : searchInputRef.current)) {
419
- onMenuPressBackspace === null || onMenuPressBackspace === void 0 ? void 0 : onMenuPressBackspace(event);
420
- }
421
-
422
- // The search box gets focus when typing characters and numbers.
423
- if (event.key.length === 1 && /\w/.test(event.key)) {
424
- var _event$target;
425
- // Exclude Input
426
- // eg: <SelectPicker renderExtraFooter={() => <Input />} />
427
- if (((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.tagName) !== 'INPUT') {
428
- var _searchInputRef$curre;
429
- searchInputRef === null || searchInputRef === void 0 ? void 0 : (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
430
- }
431
- }
432
- }
433
- if (event.key === KEY_VALUES.ESC || event.key === KEY_VALUES.TAB) {
434
- handleClose();
435
- }
436
-
437
- // Native event callback
438
- onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
439
- }, [readOnly, disabled, loading, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
440
- return onToggle;
441
- };
442
- /**
443
- * A hook that handles search filter options
444
- */
445
- export function useSearch(data, props) {
446
- var labelKey = props.labelKey,
447
- searchBy = props.searchBy,
448
- callback = props.callback; // Use search keywords to filter options.
449
- var _useState4 = useState(''),
450
- searchKeyword = _useState4[0],
451
- setSearchKeyword = _useState4[1];
452
- var resetSearch = useCallback(function () {
453
- setSearchKeyword('');
454
- }, []);
455
-
456
- /**
457
- * Index of keyword in `label`
458
- * @param {node} label
459
- */
460
- var checkShouldDisplay = useCallback(function (item, keyword) {
461
- var checkValue = typeof item === 'object' ? item === null || item === void 0 ? void 0 : item[labelKey] : String(item);
462
- var _keyword = isUndefined(keyword) ? searchKeyword : keyword;
463
- if (typeof searchBy === 'function') {
464
- return searchBy(_keyword, checkValue, item);
465
- }
466
- return shouldDisplay(checkValue, _keyword);
467
- }, [labelKey, searchBy, searchKeyword]);
468
- var filteredData = useMemo(function () {
469
- return data.filter(function (item) {
470
- return checkShouldDisplay(item, searchKeyword);
471
- });
472
- }, [checkShouldDisplay, data, searchKeyword]);
473
- var handleSearch = function handleSearch(searchKeyword, event) {
474
- var filteredData = data.filter(function (item) {
475
- return checkShouldDisplay(item, searchKeyword);
476
- });
477
- setSearchKeyword(searchKeyword);
478
- callback === null || callback === void 0 ? void 0 : callback(searchKeyword, filteredData, event);
479
- };
480
- return {
481
- searchKeyword: searchKeyword,
482
- filteredData: filteredData,
483
- checkShouldDisplay: checkShouldDisplay,
484
- handleSearch: handleSearch,
485
- resetSearch: resetSearch
486
- };
487
- }
488
- /**
489
- * A hook of the exposed method of Picker
490
- */
491
- export function usePublicMethods(ref, parmas) {
492
- var triggerRef = parmas.triggerRef,
493
- overlayRef = parmas.overlayRef,
494
- targetRef = parmas.targetRef,
495
- rootRef = parmas.rootRef,
496
- listRef = parmas.listRef,
497
- inline = parmas.inline;
498
- var handleOpen = useCallback(function () {
499
- var _triggerRef$current3;
500
- triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current3 = triggerRef.current) === null || _triggerRef$current3 === void 0 ? void 0 : _triggerRef$current3.open();
501
- }, [triggerRef]);
502
- var handleClose = useCallback(function () {
503
- var _triggerRef$current4;
504
- triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current4 = triggerRef.current) === null || _triggerRef$current4 === void 0 ? void 0 : _triggerRef$current4.close();
505
- }, [triggerRef]);
506
- var handleUpdatePosition = useCallback(function () {
507
- var _triggerRef$current5;
508
- triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current5 = triggerRef.current) === null || _triggerRef$current5 === void 0 ? void 0 : _triggerRef$current5.updatePosition();
509
- }, [triggerRef]);
510
- useImperativeHandle(ref, function () {
511
- // Tree and CheckTree
512
- if (inline) {
513
- return {
514
- get root() {
515
- var _triggerRef$current$r, _triggerRef$current6;
516
- return rootRef !== null && rootRef !== void 0 && rootRef.current ? rootRef === null || rootRef === void 0 ? void 0 : rootRef.current : (_triggerRef$current$r = triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current6 = triggerRef.current) === null || _triggerRef$current6 === void 0 ? void 0 : _triggerRef$current6.root) !== null && _triggerRef$current$r !== void 0 ? _triggerRef$current$r : null;
517
- },
518
- get list() {
519
- if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
520
- throw new Error('The list is not found, please set `virtualized` for the component.');
521
- }
522
- return listRef === null || listRef === void 0 ? void 0 : listRef.current;
523
- }
524
- };
525
- }
526
- return {
527
- get root() {
528
- var _ref, _triggerRef$current7;
529
- return (_ref = (rootRef === null || rootRef === void 0 ? void 0 : rootRef.current) || (triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current7 = triggerRef.current) === null || _triggerRef$current7 === void 0 ? void 0 : _triggerRef$current7.root)) !== null && _ref !== void 0 ? _ref : null;
530
- },
531
- get overlay() {
532
- var _overlayRef$current;
533
- if (!(overlayRef !== null && overlayRef !== void 0 && overlayRef.current)) {
534
- throw new Error('The overlay is not found. Please confirm whether the picker is open.');
535
- }
536
- return (_overlayRef$current = overlayRef === null || overlayRef === void 0 ? void 0 : overlayRef.current) !== null && _overlayRef$current !== void 0 ? _overlayRef$current : null;
537
- },
538
- get target() {
539
- var _targetRef$current2;
540
- return (_targetRef$current2 = targetRef === null || targetRef === void 0 ? void 0 : targetRef.current) !== null && _targetRef$current2 !== void 0 ? _targetRef$current2 : null;
541
- },
542
- get list() {
543
- if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
544
- throw new Error("\n The list is not found.\n 1.Please set virtualized for the component.\n 2.Please confirm whether the picker is open.\n ");
545
- }
546
- return listRef === null || listRef === void 0 ? void 0 : listRef.current;
547
- },
548
- updatePosition: handleUpdatePosition,
549
- open: handleOpen,
550
- close: handleClose
551
- };
552
- });
553
88
  }
@@ -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 { ListProps } from '../Windowing';
@@ -49,7 +49,7 @@ export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, Pic
49
49
  }
50
50
  export interface SelectPickerComponent {
51
51
  <T>(props: SelectPickerProps<T> & {
52
- ref?: Ref<PickerHandle>;
52
+ ref?: React.Ref<PickerHandle>;
53
53
  }): JSX.Element | null;
54
54
  displayName?: string;
55
55
  propTypes?: React.WeakValidationMap<SelectPickerProps<any>>;