rsuite 6.0.1 → 6.1.1

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 (278) hide show
  1. package/Accordion/styles/index.scss +3 -0
  2. package/Animation/styles/_animation.scss +95 -0
  3. package/Animation/styles/_bounce.scss +36 -0
  4. package/Animation/styles/_collapse.scss +23 -0
  5. package/Animation/styles/_fade.scss +10 -0
  6. package/Animation/styles/_mixin.scss +15 -0
  7. package/Animation/styles/_slide.scss +34 -0
  8. package/Animation/styles/_variables.scss +4 -0
  9. package/Animation/styles/index.scss +8 -0
  10. package/AutoComplete/styles/index.scss +43 -0
  11. package/Avatar/styles/index.scss +48 -0
  12. package/AvatarGroup/styles/index.scss +27 -0
  13. package/Badge/styles/_variables.scss +48 -0
  14. package/Badge/styles/index.scss +111 -0
  15. package/Box/styles/index.scss +1 -0
  16. package/Breadcrumb/styles/index.scss +50 -0
  17. package/Button/styles/_mixin.scss +83 -0
  18. package/Button/styles/_variables.scss +38 -0
  19. package/Button/styles/index.scss +374 -0
  20. package/ButtonGroup/styles/index.scss +96 -0
  21. package/ButtonToolbar/styles/index.scss +9 -0
  22. package/CHANGELOG.md +31 -0
  23. package/Calendar/styles/_variables.scss +16 -0
  24. package/Calendar/styles/index.scss +673 -0
  25. package/Card/styles/index.scss +63 -0
  26. package/CardGroup/styles/index.scss +10 -0
  27. package/Carousel/styles/index.scss +204 -0
  28. package/CascadeTree/styles/_search.scss +39 -0
  29. package/CascadeTree/styles/index.scss +83 -0
  30. package/Cascader/styles/index.scss +5 -0
  31. package/Center/styles/index.scss +11 -0
  32. package/CheckPicker/styles/index.scss +23 -0
  33. package/CheckTree/styles/_variables.scss +5 -0
  34. package/CheckTree/styles/index.scss +121 -0
  35. package/CheckTreePicker/styles/index.scss +20 -0
  36. package/Checkbox/styles/_mixin.scss +5 -0
  37. package/Checkbox/styles/_variables.scss +4 -0
  38. package/Checkbox/styles/index.scss +158 -0
  39. package/CheckboxGroup/styles/index.scss +14 -0
  40. package/Col/styles/index.scss +2 -0
  41. package/Container/stories/styles.scss +23 -0
  42. package/Container/styles/index.scss +16 -0
  43. package/Content/styles/index.scss +6 -0
  44. package/DateInput/styles/index.scss +1 -0
  45. package/DatePicker/styles/_mixin.scss +10 -0
  46. package/DatePicker/styles/index.scss +171 -0
  47. package/DateRangeInput/styles/index.scss +1 -0
  48. package/DateRangePicker/styles/index.scss +151 -0
  49. package/Divider/styles/index.scss +85 -0
  50. package/Drawer/styles/_mixin.scss +23 -0
  51. package/Drawer/styles/_variables.scss +18 -0
  52. package/Drawer/styles/index.scss +244 -0
  53. package/Dropdown/styles/_mixin.scss +4 -0
  54. package/Dropdown/styles/_variables.scss +12 -0
  55. package/Dropdown/styles/index.scss +334 -0
  56. package/FlexboxGrid/styles/index.scss +82 -0
  57. package/Footer/styles/index.scss +5 -0
  58. package/Form/styles/index.scss +3 -0
  59. package/FormControl/styles/_variables.scss +4 -0
  60. package/FormControl/styles/index.scss +82 -0
  61. package/FormControlLabel/styles/index.scss +7 -0
  62. package/FormErrorMessage/styles/_animation.scss +43 -0
  63. package/FormErrorMessage/styles/_variables.scss +7 -0
  64. package/FormErrorMessage/styles/index.scss +146 -0
  65. package/FormGroup/styles/index.scss +75 -0
  66. package/FormHelpText/styles/index.scss +21 -0
  67. package/FormStack/styles/index.scss +15 -0
  68. package/Grid/styles/_columns.scss +23 -0
  69. package/Grid/styles/_mixin.scss +110 -0
  70. package/Grid/styles/_row.scss +44 -0
  71. package/Grid/styles/_variables.scss +6 -0
  72. package/Grid/styles/index.scss +115 -0
  73. package/Header/styles/index.scss +5 -0
  74. package/Heading/styles/_variables.scss +19 -0
  75. package/Heading/styles/index.scss +42 -0
  76. package/HeadingGroup/styles/index.scss +5 -0
  77. package/Highlight/styles/index.scss +9 -0
  78. package/IconButton/styles/index.scss +90 -0
  79. package/Image/styles/index.scss +36 -0
  80. package/InlineEdit/styles/index.scss +51 -0
  81. package/Input/styles/_mixin.scss +39 -0
  82. package/Input/styles/_variables.scss +27 -0
  83. package/Input/styles/index.scss +23 -0
  84. package/InputGroup/styles/index.scss +264 -0
  85. package/InputNumber/styles/index.scss +1 -0
  86. package/InputPicker/styles/_mixin.scss +7 -0
  87. package/InputPicker/styles/index.scss +64 -0
  88. package/Kbd/styles/_mixin.scss +24 -0
  89. package/Kbd/styles/_variables.scss +13 -0
  90. package/Kbd/styles/index.scss +21 -0
  91. package/Link/styles/index.scss +41 -0
  92. package/List/styles/index.scss +111 -0
  93. package/Loader/styles/_mixin.scss +37 -0
  94. package/Loader/styles/_variables.scss +19 -0
  95. package/Loader/styles/index.scss +120 -0
  96. package/Menu/styles/index.scss +109 -0
  97. package/Message/styles/index.scss +189 -0
  98. package/Modal/styles/_animation.scss +15 -0
  99. package/Modal/styles/_variables.scss +16 -0
  100. package/Modal/styles/index.scss +186 -0
  101. package/MultiCascadeTree/styles/index.scss +35 -0
  102. package/MultiCascader/styles/index.scss +3 -0
  103. package/Nav/styles/index.scss +383 -0
  104. package/Navbar/styles/index.scss +253 -0
  105. package/Notification/styles/index.scss +116 -0
  106. package/NumberInput/styles/_mixin.scss +11 -0
  107. package/NumberInput/styles/index.scss +78 -0
  108. package/Pagination/styles/_pagination-group.scss +52 -0
  109. package/Pagination/styles/index.scss +77 -0
  110. package/Panel/styles/index.scss +122 -0
  111. package/PanelGroup/styles/index.scss +34 -0
  112. package/PasswordInput/styles/index.scss +3 -0
  113. package/PasswordStrengthMeter/styles/index.scss +41 -0
  114. package/PinInput/styles/index.scss +93 -0
  115. package/Placeholder/styles/_mixin.scss +9 -0
  116. package/Placeholder/styles/index.scss +155 -0
  117. package/Popover/styles/index.scss +224 -0
  118. package/Popover/styles/mixins.scss +54 -0
  119. package/Progress/styles/_animation.scss +69 -0
  120. package/Progress/styles/_mixins.scss +6 -0
  121. package/Progress/styles/_progress-line.scss +343 -0
  122. package/Progress/styles/index.scss +3 -0
  123. package/ProgressCircle/styles/index.scss +2 -0
  124. package/ProgressCircle/styles/progress-circle.scss +49 -0
  125. package/Radio/styles/_mixin.scss +5 -0
  126. package/Radio/styles/_variables.scss +5 -0
  127. package/Radio/styles/index.scss +147 -0
  128. package/RadioGroup/styles/_variables.scss +10 -0
  129. package/RadioGroup/styles/index.scss +83 -0
  130. package/RadioTile/styles/index.scss +80 -0
  131. package/RadioTileGroup/styles/index.scss +1 -0
  132. package/RangeSlider/styles/index.scss +4 -0
  133. package/Rate/styles/index.scss +141 -0
  134. package/Row/styles/index.scss +2 -0
  135. package/SegmentedControl/styles/_mixin.scss +7 -0
  136. package/SegmentedControl/styles/_variables.scss +43 -0
  137. package/SegmentedControl/styles/index.scss +147 -0
  138. package/SelectPicker/styles/index.scss +44 -0
  139. package/Sidebar/styles/index.scss +17 -0
  140. package/Sidenav/styles/index.scss +635 -0
  141. package/Sidenav/styles/mixin.scss +23 -0
  142. package/Slider/styles/index.scss +298 -0
  143. package/Stack/styles/_variables.scss +11 -0
  144. package/Stack/styles/index.scss +79 -0
  145. package/Stat/styles/index.scss +126 -0
  146. package/StatGroup/styles/index.scss +10 -0
  147. package/Steps/styles/index.scss +222 -0
  148. package/Table/styles/index.scss +473 -0
  149. package/Table/styles/mixin.scss +8 -0
  150. package/Tabs/styles/index.scss +24 -0
  151. package/Tag/styles/_variables.scss +13 -0
  152. package/Tag/styles/index.scss +62 -0
  153. package/TagGroup/styles/index.scss +14 -0
  154. package/TagInput/styles/index.scss +5 -0
  155. package/TagPicker/styles/index.scss +141 -0
  156. package/Text/styles/index.scss +142 -0
  157. package/Text/styles/variables.scss +9 -0
  158. package/Textarea/styles/index.scss +9 -0
  159. package/TimePicker/styles/index.scss +1 -0
  160. package/TimeRangePicker/styles/index.scss +1 -0
  161. package/Timeline/stories/styles.scss +29 -0
  162. package/Timeline/styles/_mixin.scss +13 -0
  163. package/Timeline/styles/index.scss +187 -0
  164. package/Toggle/styles/index.scss +284 -0
  165. package/Tooltip/styles/index.scss +160 -0
  166. package/Tooltip/styles/mixins.scss +56 -0
  167. package/Tree/styles/_indent-line.scss +8 -0
  168. package/Tree/styles/_toggle.scss +32 -0
  169. package/Tree/styles/_variables.scss +8 -0
  170. package/Tree/styles/index.scss +184 -0
  171. package/TreePicker/styles/index.scss +16 -0
  172. package/Uploader/styles/_mixin.scss +11 -0
  173. package/Uploader/styles/index.scss +491 -0
  174. package/VisuallyHidden/styles/index.scss +11 -0
  175. package/cjs/Breadcrumb/BreadcrumbItem.js +12 -7
  176. package/cjs/CheckTree/CheckTree.js +3 -0
  177. package/cjs/CheckTree/CheckTreeView.js +7 -3
  178. package/cjs/CheckTree/hooks/useTreeCheckState.d.ts +1 -0
  179. package/cjs/CheckTree/hooks/useTreeCheckState.js +54 -3
  180. package/cjs/CheckTree/utils.d.ts +9 -2
  181. package/cjs/CheckTree/utils.js +70 -11
  182. package/cjs/CheckTreePicker/CheckTreePicker.js +1 -0
  183. package/cjs/Checkbox/Checkbox.js +2 -1
  184. package/cjs/Checkbox/hooks/useIndeterminateCheckbox.d.ts +19 -0
  185. package/cjs/Checkbox/hooks/useIndeterminateCheckbox.js +32 -0
  186. package/cjs/DateInput/DateInput.js +24 -0
  187. package/cjs/DateInput/hooks/useKeyboardInputEvent.d.ts +2 -1
  188. package/cjs/DateInput/hooks/useKeyboardInputEvent.js +14 -0
  189. package/cjs/DateRangeInput/DateRangeInput.js +24 -0
  190. package/cjs/DateRangePicker/DateRangePicker.js +6 -0
  191. package/cjs/Form/Form.js +5 -1
  192. package/cjs/Rate/Rate.d.ts +8 -0
  193. package/cjs/Rate/Rate.js +3 -1
  194. package/cjs/Tree/hooks/useFlattenTree.d.ts +4 -0
  195. package/cjs/Tree/hooks/useFlattenTree.js +22 -1
  196. package/cjs/Tree/hooks/useFocusTree.js +19 -1
  197. package/cjs/Tree/hooks/useVirtualizedTreeData.d.ts +1 -0
  198. package/cjs/Tree/hooks/useVirtualizedTreeData.js +5 -2
  199. package/cjs/Tree/utils/focusableTree.d.ts +8 -0
  200. package/cjs/Tree/utils/focusableTree.js +40 -2
  201. package/cjs/Tree/utils/index.d.ts +1 -1
  202. package/cjs/Tree/utils/index.js +3 -1
  203. package/cjs/internals/Picker/utils.d.ts +2 -0
  204. package/cjs/internals/Picker/utils.js +13 -1
  205. package/cjs/internals/StyledBox/StyledBox.d.ts +1 -1
  206. package/cjs/internals/StyledBox/StyledBox.js +2 -2
  207. package/dist/rsuite.js +52 -74
  208. package/dist/rsuite.js.map +1 -1
  209. package/dist/rsuite.min.js +1 -1
  210. package/dist/rsuite.min.js.LICENSE.txt +0 -20
  211. package/dist/rsuite.min.js.map +1 -1
  212. package/esm/Breadcrumb/BreadcrumbItem.js +10 -5
  213. package/esm/CheckTree/CheckTree.js +3 -0
  214. package/esm/CheckTree/CheckTreeView.js +7 -3
  215. package/esm/CheckTree/hooks/useTreeCheckState.d.ts +1 -0
  216. package/esm/CheckTree/hooks/useTreeCheckState.js +55 -4
  217. package/esm/CheckTree/utils.d.ts +9 -2
  218. package/esm/CheckTree/utils.js +71 -12
  219. package/esm/CheckTreePicker/CheckTreePicker.js +1 -0
  220. package/esm/Checkbox/Checkbox.js +3 -2
  221. package/esm/Checkbox/hooks/useIndeterminateCheckbox.d.ts +19 -0
  222. package/esm/Checkbox/hooks/useIndeterminateCheckbox.js +29 -0
  223. package/esm/DateInput/DateInput.js +24 -0
  224. package/esm/DateInput/hooks/useKeyboardInputEvent.d.ts +2 -1
  225. package/esm/DateInput/hooks/useKeyboardInputEvent.js +14 -0
  226. package/esm/DateRangeInput/DateRangeInput.js +24 -0
  227. package/esm/DateRangePicker/DateRangePicker.js +6 -0
  228. package/esm/Form/Form.js +5 -1
  229. package/esm/Rate/Rate.d.ts +8 -0
  230. package/esm/Rate/Rate.js +3 -1
  231. package/esm/Tree/hooks/useFlattenTree.d.ts +4 -0
  232. package/esm/Tree/hooks/useFlattenTree.js +22 -1
  233. package/esm/Tree/hooks/useFocusTree.js +20 -2
  234. package/esm/Tree/hooks/useVirtualizedTreeData.d.ts +1 -0
  235. package/esm/Tree/hooks/useVirtualizedTreeData.js +5 -2
  236. package/esm/Tree/utils/focusableTree.d.ts +8 -0
  237. package/esm/Tree/utils/focusableTree.js +36 -0
  238. package/esm/Tree/utils/index.d.ts +1 -1
  239. package/esm/Tree/utils/index.js +1 -1
  240. package/esm/internals/Picker/utils.d.ts +2 -0
  241. package/esm/internals/Picker/utils.js +13 -1
  242. package/esm/internals/StyledBox/StyledBox.d.ts +1 -1
  243. package/esm/internals/StyledBox/StyledBox.js +2 -2
  244. package/internals/Box/styles/index.scss +31 -0
  245. package/internals/Burger/styles/index.scss +72 -0
  246. package/internals/CloseButton/styles/index.scss +14 -0
  247. package/internals/Picker/styles/_mixin.scss +219 -0
  248. package/internals/Picker/styles/_variables.scss +9 -0
  249. package/internals/Picker/styles/index.scss +476 -0
  250. package/internals/Ripple/styles/_mixins.scss +10 -0
  251. package/internals/Ripple/styles/index.scss +40 -0
  252. package/internals/ScrollView/styles/index.scss +77 -0
  253. package/internals/SearchBox/styles/index.scss +7 -0
  254. package/package.json +4 -4
  255. package/styles/_base.scss +37 -0
  256. package/styles/_css-reset.scss +345 -0
  257. package/styles/_themes.scss +132 -0
  258. package/styles/_variables.scss +48 -0
  259. package/styles/color-modes/_dark.scss +458 -0
  260. package/styles/color-modes/_high-contrast.scss +469 -0
  261. package/styles/color-modes/_light.scss +475 -0
  262. package/styles/colors/_colors-base.scss +39 -0
  263. package/styles/colors/_dark.scss +114 -0
  264. package/styles/colors/_high-contrast.scss +114 -0
  265. package/styles/colors/_light.scss +115 -0
  266. package/styles/colors/_palette.scss +413 -0
  267. package/styles/components.scss +114 -0
  268. package/styles/index.scss +2 -0
  269. package/styles/mixins/_color-modes.scss +20 -0
  270. package/styles/mixins/_combobox.scss +6 -0
  271. package/styles/mixins/_hacks.scss +33 -0
  272. package/styles/mixins/_input.scss +30 -0
  273. package/styles/mixins/_listbox.scss +70 -0
  274. package/styles/mixins/_menu.scss +12 -0
  275. package/styles/mixins/_utilities.scss +130 -0
  276. package/toaster/styles/animation.scss +54 -0
  277. package/toaster/styles/index.scss +109 -0
  278. package/useToaster/styles/index.scss +1 -0
@@ -8,15 +8,16 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _SafeAnchor = _interopRequireDefault(require("../internals/SafeAnchor"));
10
10
  var _Box = _interopRequireDefault(require("../internals/Box"));
11
- var _utils = require("../internals/utils");
11
+ var _utils = require("../internals/Box/utils");
12
+ var _utils2 = require("../internals/utils");
12
13
  var _hooks = require("../internals/hooks");
13
14
  /**
14
15
  * The `<Breadcrumb.Item>` component is used to specify each section of the Breadcrumb.
15
16
  * @see https://rsuitejs.com/components/breadcrumb
16
17
  */
17
- const BreadcrumbItem = (0, _utils.forwardRef)((props, ref) => {
18
+ const BreadcrumbItem = (0, _utils2.forwardRef)((props, ref) => {
18
19
  const {
19
- wrapperAs = 'li',
20
+ wrapperAs: Wrapper = 'li',
20
21
  href,
21
22
  as: Component = href ? _SafeAnchor.default : 'span',
22
23
  classPrefix = 'breadcrumb-item',
@@ -35,17 +36,21 @@ const BreadcrumbItem = (0, _utils.forwardRef)((props, ref) => {
35
36
  withPrefix
36
37
  } = (0, _hooks.useStyles)(classPrefix);
37
38
  const classes = merge(className, withPrefix());
39
+
40
+ // Separate BoxProps for wrapper and other props for inner component
41
+ const boxProps = (0, _utils.extractBoxProps)(rest);
42
+ const componentProps = (0, _utils.omitBoxProps)(rest);
38
43
  return /*#__PURE__*/_react.default.createElement(_Box.default, (0, _extends2.default)({
39
- as: wrapperAs,
44
+ as: Wrapper,
40
45
  style: style,
41
46
  className: classes,
42
- ref: ref,
43
47
  "data-active": active
44
- }, rest), icon, active ? /*#__PURE__*/_react.default.createElement("span", null, children) : /*#__PURE__*/_react.default.createElement(Component, {
48
+ }, boxProps), icon, active ? /*#__PURE__*/_react.default.createElement("span", null, children) : /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
49
+ ref: ref,
45
50
  href: href,
46
51
  title: title,
47
52
  target: target
48
- }, children), separator);
53
+ }, componentProps), children), separator);
49
54
  });
50
55
  BreadcrumbItem.displayName = 'BreadcrumbItem';
51
56
  var _default = exports.default = BreadcrumbItem;
@@ -30,6 +30,7 @@ const CheckTree = (0, _utils.forwardRef)((props, ref) => {
30
30
  defaultExpandAll = false,
31
31
  defaultExpandItemValues = [],
32
32
  uncheckableItemValues,
33
+ disabledItemValues,
33
34
  expandItemValues: controlledExpandItemValues,
34
35
  childrenKey = 'children',
35
36
  labelKey = 'label',
@@ -73,6 +74,7 @@ const CheckTree = (0, _utils.forwardRef)((props, ref) => {
73
74
  const flattenedNodes = (0, _useFlattenTree.default)(treeData, {
74
75
  ...itemDataKeys,
75
76
  uncheckableItemValues,
77
+ disabledItemValues,
76
78
  multiple: true,
77
79
  cascade,
78
80
  value
@@ -102,6 +104,7 @@ const CheckTree = (0, _utils.forwardRef)((props, ref) => {
102
104
  loadingNodeValues: loadingNodeValues,
103
105
  flattenedNodes: flattenedNodes,
104
106
  uncheckableItemValues: uncheckableItemValues,
107
+ disabledItemValues: disabledItemValues,
105
108
  expandItemValues: expandItemValues,
106
109
  onChange: handleChange,
107
110
  onExpand: handleExpandTreeNode
@@ -84,7 +84,8 @@ const CheckTreeView = (0, _utils.forwardRef)((props, ref) => {
84
84
  } = (0, _useTreeCheckState.default)({
85
85
  cascade,
86
86
  flattenedNodes,
87
- uncheckableItemValues
87
+ uncheckableItemValues,
88
+ disabledItemValues
88
89
  });
89
90
  const handleSearchCallback = (value, _data, event) => {
90
91
  onSearch === null || onSearch === void 0 || onSearch(value, event);
@@ -117,7 +118,8 @@ const CheckTreeView = (0, _utils.forwardRef)((props, ref) => {
117
118
  const transformation = (0, _useVirtualizedTreeData.default)(flattenedNodes, filteredData, {
118
119
  cascade,
119
120
  expandItemValues,
120
- searchKeyword: keyword
121
+ searchKeyword: keyword,
122
+ disabledItemValues
121
123
  });
122
124
 
123
125
  /**
@@ -130,7 +132,9 @@ const CheckTreeView = (0, _utils.forwardRef)((props, ref) => {
130
132
  }
131
133
  return (0, _utils3.getFormattedTree)(flattenedNodes, filteredData, {
132
134
  childrenKey,
133
- cascade
135
+ cascade,
136
+ disabledItemValues,
137
+ valueKey
134
138
  }).map(node => render === null || render === void 0 ? void 0 : render(node, 1)).filter(item => item);
135
139
  };
136
140
  const getTreeNodeProps = (0, _useTreeNodeProps.default)({
@@ -3,6 +3,7 @@ interface Props {
3
3
  cascade?: boolean;
4
4
  flattenedNodes: TreeNodeMap;
5
5
  uncheckableItemValues: (string | number)[];
6
+ disabledItemValues?: (string | number)[];
6
7
  }
7
8
  declare function useTreeCheckState(props: Props): {
8
9
  getCheckedValues: (...args: any[]) => any;
@@ -14,7 +14,8 @@ function useTreeCheckState(props) {
14
14
  const {
15
15
  cascade,
16
16
  flattenedNodes,
17
- uncheckableItemValues
17
+ uncheckableItemValues,
18
+ disabledItemValues = []
18
19
  } = props;
19
20
  const {
20
21
  valueKey,
@@ -29,7 +30,9 @@ function useTreeCheckState(props) {
29
30
  } else {
30
31
  if ((0, _utils.isEveryChildChecked)(currentNode, {
31
32
  nodes,
32
- childrenKey
33
+ childrenKey,
34
+ disabledItemValues,
35
+ valueKey
33
36
  })) {
34
37
  currentNode.check = true;
35
38
  currentNode.checkAll = true;
@@ -43,16 +46,57 @@ function useTreeCheckState(props) {
43
46
  }
44
47
  }
45
48
  });
49
+
50
+ /**
51
+ * Recursively checks if a node has any disabled descendants.
52
+ * This is used to determine if a parent node's checkAll state should be true.
53
+ * If any descendant is disabled, checkAll must be false because not all descendants can be checked.
54
+ * @param nodes - The flattened tree node map
55
+ * @param node - The node to check for disabled descendants
56
+ * @returns true if any descendant (at any depth) is disabled, false otherwise
57
+ */
58
+ const hasDisabledDescendant = (0, _hooks.useEventCallback)((nodes, node) => {
59
+ if (!node[childrenKey] || !node[childrenKey].length) {
60
+ return false;
61
+ }
62
+ return node[childrenKey].some(child => {
63
+ const isChildDisabled = (0, _utils.getDisabledState)(nodes, child, {
64
+ disabledItemValues,
65
+ valueKey
66
+ });
67
+ if (isChildDisabled) {
68
+ return true;
69
+ }
70
+ // Recursively check descendants
71
+ return hasDisabledDescendant(nodes, child);
72
+ });
73
+ });
46
74
  const checkChildNode = (0, _hooks.useEventCallback)((nodes, node, isChecked) => {
47
75
  const currentNode = node.refKey ? nodes[node.refKey] : null;
48
76
  if (!currentNode) {
49
77
  return;
50
78
  }
79
+
80
+ // Check if the current node is disabled
81
+ const isDisabled = (0, _utils.getDisabledState)(nodes, node, {
82
+ disabledItemValues,
83
+ valueKey
84
+ });
85
+
86
+ // Skip checking disabled nodes
87
+ if (isDisabled) {
88
+ return;
89
+ }
51
90
  currentNode.check = isChecked;
52
91
  if (!currentNode[childrenKey] || !currentNode[childrenKey].length || !cascade) {
53
92
  currentNode.checkAll = false;
54
93
  } else {
55
- currentNode.checkAll = isChecked;
94
+ // Check if any descendant (not just direct children) is disabled
95
+ const hasDisabledDesc = hasDisabledDescendant(nodes, currentNode);
96
+
97
+ // Only set checkAll to true if all descendants will be checked
98
+ // If there are any disabled descendants, checkAll should be false
99
+ currentNode.checkAll = isChecked && !hasDisabledDesc;
56
100
  currentNode[childrenKey].forEach(child => {
57
101
  checkChildNode(nodes, child, isChecked);
58
102
  });
@@ -65,6 +109,13 @@ function useTreeCheckState(props) {
65
109
  if (!(0, _isNil.default)(currentNode.parent) && !(0, _isNil.default)(currentNode.parent.refKey)) {
66
110
  const parentNode = nodes[currentNode.parent.refKey];
67
111
  if (currentNode.check) {
112
+ // Optimization: When a parent node is checked with checkAll=true, it represents
113
+ // the entire checked subtree. If the current node also has checkAll=true and its
114
+ // parent is checked, skip adding this node's value to avoid redundant representation.
115
+ // The parent's value already implies all descendants are checked.
116
+ if (currentNode.checkAll && parentNode.check) {
117
+ continue;
118
+ }
68
119
  if (!(parentNode !== null && parentNode !== void 0 && parentNode.checkAll)) {
69
120
  values.push(currentNode[valueKey]);
70
121
  } else if (parentNode !== null && parentNode !== void 0 && parentNode.uncheckable) {
@@ -3,15 +3,19 @@ import { CheckStateType } from '../internals/constants';
3
3
  import { TreeNode, TreeNodeMap } from '../internals/Tree/types';
4
4
  /**
5
5
  * Checks if every child of a given parent node is checked.
6
+ * Disabled children are ignored in this check.
6
7
  */
7
8
  export declare function isEveryChildChecked(parent: TreeNode, options: {
8
9
  nodes: TreeNodeMap;
9
10
  childrenKey: string;
11
+ disabledItemValues?: any[];
12
+ valueKey?: string;
10
13
  }): boolean;
11
14
  /**
12
15
  * Checks if any child node is checked.
16
+ * Disabled children are ignored in this check.
13
17
  */
14
- export declare function isSomeChildChecked(nodes: TreeNodeMap, parent: TreeNode, childrenKey: string): boolean;
18
+ export declare function isSomeChildChecked(nodes: TreeNodeMap, parent: TreeNode, childrenKey: string, disabledItemValues?: any[], valueKey?: string): boolean;
15
19
  /**
16
20
  * Checks if any node in the data has a grandchild.
17
21
  */
@@ -28,9 +32,10 @@ export declare function isEveryFirstLevelNodeUncheckable(nodes: TreeNodeMap, unc
28
32
  * Checks if a node is uncheckable.
29
33
  */
30
34
  export declare function isNodeUncheckable(node: any, props: Required<Pick<CheckTreeProps, 'uncheckableItemValues' | 'valueKey'>>): boolean;
31
- export declare function getFormattedTree(nodes: TreeNodeMap, data: any[], props: Required<Pick<CheckTreeProps, 'childrenKey' | 'cascade'>>): any[];
35
+ export declare function getFormattedTree(nodes: TreeNodeMap, data: any[], props: Required<Pick<CheckTreeProps, 'childrenKey' | 'cascade' | 'disabledItemValues' | 'valueKey'>>): any[];
32
36
  /**
33
37
  * Determines the disabled state of a tree node.
38
+ * If a parent node is disabled, all its children should also be disabled.
34
39
  */
35
40
  export declare function getDisabledState(nodes: TreeNodeMap, node: TreeNode, props: Required<Pick<CheckTreeProps, 'disabledItemValues' | 'valueKey'>>): boolean;
36
41
  /**
@@ -45,6 +50,8 @@ interface NodeCheckStateOptions {
45
50
  nodes: TreeNodeMap;
46
51
  cascade: boolean;
47
52
  childrenKey: string;
53
+ disabledItemValues?: any[];
54
+ valueKey?: string;
48
55
  }
49
56
  /**
50
57
  * Calculates the check state of a node in a check tree.
@@ -21,6 +21,8 @@ var _utils = require("../internals/utils");
21
21
  var _utils2 = require("../Tree/utils");
22
22
  /**
23
23
  * Retrieves the children of a given parent node from a flattened node map.
24
+ * Filters out uncheckable children.
25
+ * Note: Does NOT filter disabled children - disabled children are still considered in check state calculations
24
26
  */
25
27
  function getChildrenByFlattenNodes(nodes, parent) {
26
28
  if (!(0, _isNil2.default)(parent.refKey) && (0, _isNil2.default)(nodes[parent.refKey])) {
@@ -34,11 +36,14 @@ function getChildrenByFlattenNodes(nodes, parent) {
34
36
 
35
37
  /**
36
38
  * Checks if every child of a given parent node is checked.
39
+ * Disabled children are ignored in this check.
37
40
  */
38
41
  function isEveryChildChecked(parent, options) {
39
42
  const {
40
43
  nodes,
41
- childrenKey
44
+ childrenKey,
45
+ disabledItemValues = [],
46
+ valueKey = 'value'
42
47
  } = options;
43
48
  if ((0, _isNil2.default)(parent.refKey) || (0, _isNil2.default)(nodes[parent.refKey])) {
44
49
  return false;
@@ -48,13 +53,32 @@ function isEveryChildChecked(parent, options) {
48
53
  var _nodes$parent$refKey$;
49
54
  return (_nodes$parent$refKey$ = nodes[parent.refKey].check) !== null && _nodes$parent$refKey$ !== void 0 ? _nodes$parent$refKey$ : false;
50
55
  }
51
- return children.every(child => {
56
+
57
+ // Filter out disabled children
58
+ const enabledChildren = children.filter(child => {
59
+ const isDisabled = getDisabledState(nodes, child, {
60
+ disabledItemValues,
61
+ valueKey
62
+ });
63
+ return !isDisabled;
64
+ });
65
+
66
+ // If all children are disabled, return the parent's own check state
67
+ if (enabledChildren.length === 0) {
68
+ var _nodes$parent$refKey$2;
69
+ return (_nodes$parent$refKey$2 = nodes[parent.refKey].check) !== null && _nodes$parent$refKey$2 !== void 0 ? _nodes$parent$refKey$2 : false;
70
+ }
71
+
72
+ // Check if all enabled children are checked
73
+ return enabledChildren.every(child => {
52
74
  var _child$childrenKey;
53
75
  if ((child === null || child === void 0 || (_child$childrenKey = child[childrenKey]) === null || _child$childrenKey === void 0 ? void 0 : _child$childrenKey.length) > 0) {
54
76
  // fix: #3559
55
77
  return isEveryChildChecked(child, {
56
78
  nodes,
57
- childrenKey
79
+ childrenKey,
80
+ disabledItemValues,
81
+ valueKey
58
82
  });
59
83
  }
60
84
  return !(0, _isNil2.default)(child.refKey) && nodes[child.refKey].check;
@@ -63,16 +87,25 @@ function isEveryChildChecked(parent, options) {
63
87
 
64
88
  /**
65
89
  * Checks if any child node is checked.
90
+ * Disabled children are ignored in this check.
66
91
  */
67
- function isSomeChildChecked(nodes, parent, childrenKey) {
92
+ function isSomeChildChecked(nodes, parent, childrenKey, disabledItemValues = [], valueKey = 'value') {
68
93
  if (!(0, _isNil2.default)(parent.refKey) && (0, _isNil2.default)(nodes[parent.refKey])) {
69
94
  return false;
70
95
  }
71
96
  const children = getChildrenByFlattenNodes(nodes, parent);
72
97
  return children.some(child => {
73
98
  var _child$childrenKey2;
99
+ // Skip disabled children
100
+ const isDisabled = getDisabledState(nodes, child, {
101
+ disabledItemValues,
102
+ valueKey
103
+ });
104
+ if (isDisabled) {
105
+ return false; // Disabled children don't count as "some checked"
106
+ }
74
107
  if ((child === null || child === void 0 || (_child$childrenKey2 = child[childrenKey]) === null || _child$childrenKey2 === void 0 ? void 0 : _child$childrenKey2.length) > 0) {
75
- return isSomeChildChecked(nodes, child, childrenKey);
108
+ return isSomeChildChecked(nodes, child, childrenKey, disabledItemValues, valueKey);
76
109
  }
77
110
  return !(0, _isNil2.default)(child.refKey) && nodes[child.refKey].check;
78
111
  });
@@ -136,7 +169,9 @@ function isNodeUncheckable(node, props) {
136
169
  function getFormattedTree(nodes, data, props) {
137
170
  const {
138
171
  childrenKey,
139
- cascade
172
+ cascade,
173
+ disabledItemValues,
174
+ valueKey
140
175
  } = props;
141
176
  return data.map(node => {
142
177
  const formatted = {
@@ -148,7 +183,9 @@ function getFormattedTree(nodes, data, props) {
148
183
  const checkState = !(0, _isUndefined2.default)(cascade) ? getNodeCheckState(curNode, {
149
184
  cascade,
150
185
  nodes,
151
- childrenKey
186
+ childrenKey,
187
+ disabledItemValues,
188
+ valueKey
152
189
  }) : undefined;
153
190
  formatted.check = curNode.check;
154
191
  formatted.uncheckable = curNode.uncheckable;
@@ -164,6 +201,7 @@ function getFormattedTree(nodes, data, props) {
164
201
 
165
202
  /**
166
203
  * Determines the disabled state of a tree node.
204
+ * If a parent node is disabled, all its children should also be disabled.
167
205
  */
168
206
  function getDisabledState(nodes, node, props) {
169
207
  const {
@@ -173,7 +211,24 @@ function getDisabledState(nodes, node, props) {
173
211
  if (!(0, _isNil2.default)(node.refKey) && (0, _isNil2.default)(nodes[node.refKey])) {
174
212
  return false;
175
213
  }
176
- return disabledItemValues.some(value => node.refKey && nodes[node.refKey][valueKey] === value);
214
+
215
+ // Check if the current node is disabled
216
+ const isCurrentNodeDisabled = disabledItemValues.some(value => node.refKey && (0, _utils.shallowEqual)(nodes[node.refKey][valueKey], value));
217
+ if (isCurrentNodeDisabled) {
218
+ return true;
219
+ }
220
+
221
+ // Check if any parent node is disabled
222
+ let currentNode = node;
223
+ while (currentNode.parent) {
224
+ const parentNode = currentNode.parent;
225
+ const parentRefKey = parentNode.refKey;
226
+ if (!(0, _isNil2.default)(parentRefKey) && !(0, _isNil2.default)(nodes[parentRefKey]) && disabledItemValues.some(value => (0, _utils.shallowEqual)(nodes[parentRefKey][valueKey], value))) {
227
+ return true;
228
+ }
229
+ currentNode = parentNode;
230
+ }
231
+ return false;
177
232
  }
178
233
 
179
234
  /**
@@ -207,7 +262,9 @@ function getNodeCheckState(node, options) {
207
262
  const {
208
263
  nodes,
209
264
  cascade,
210
- childrenKey
265
+ childrenKey,
266
+ disabledItemValues = [],
267
+ valueKey = 'value'
211
268
  } = options;
212
269
  if (node.refKey === undefined) {
213
270
  return _constants.CHECK_STATE.UNCHECK;
@@ -221,13 +278,15 @@ function getNodeCheckState(node, options) {
221
278
  }
222
279
  if (isEveryChildChecked(node, {
223
280
  nodes,
224
- childrenKey
281
+ childrenKey,
282
+ disabledItemValues,
283
+ valueKey
225
284
  })) {
226
285
  nodes[node.refKey].checkAll = true;
227
286
  nodes[node.refKey].check = true;
228
287
  return _constants.CHECK_STATE.CHECK;
229
288
  }
230
- if (isSomeChildChecked(nodes, node, childrenKey)) {
289
+ if (isSomeChildChecked(nodes, node, childrenKey, disabledItemValues, valueKey)) {
231
290
  nodes[node.refKey].checkAll = false;
232
291
  return _constants.CHECK_STATE.INDETERMINATE;
233
292
  }
@@ -128,6 +128,7 @@ const CheckTreePicker = (0, _utils.forwardRef)((props, ref) => {
128
128
  const flattenedNodes = (0, _useFlattenTree.default)(treeData, {
129
129
  ...itemDataKeys,
130
130
  uncheckableItemValues,
131
+ disabledItemValues,
131
132
  multiple: true,
132
133
  cascade,
133
134
  value
@@ -9,6 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _Box = _interopRequireDefault(require("../internals/Box"));
10
10
  var _hooks = require("../internals/hooks");
11
11
  var _utils = require("../internals/utils");
12
+ var _useIndeterminateCheckbox = require("./hooks/useIndeterminateCheckbox");
12
13
  var _CheckboxGroup = require("../CheckboxGroup");
13
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
15
  /**
@@ -81,7 +82,7 @@ const Checkbox = (0, _utils.forwardRef)((props, ref) => {
81
82
  // In uncontrolled situations, use defaultChecked instead of checked
82
83
  htmlInputProps[controlled ? 'checked' : 'defaultChecked'] = checked;
83
84
  }
84
- const checkboxRef = (0, _react.useRef)(null);
85
+ const checkboxRef = (0, _useIndeterminateCheckbox.useIndeterminateCheckbox)(indeterminate);
85
86
  const handleChange = (0, _hooks.useEventCallback)(event => {
86
87
  const nextChecked = event.target.checked;
87
88
  if (disabled || readOnly) {
@@ -0,0 +1,19 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * A hook that manages the indeterminate state of a checkbox input element.
4
+ *
5
+ * The indeterminate state is a visual and accessibility state that cannot be set via HTML attributes.
6
+ * It must be set via JavaScript on the DOM element itself. This is required for proper
7
+ * screen reader support, as assistive technologies rely on the native DOM property
8
+ * rather than ARIA attributes for native checkboxes.
9
+ *
10
+ * @param indeterminate - Whether the checkbox should be in an indeterminate state
11
+ * @returns A ref object to be attached to the checkbox input element
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const checkboxRef = useIndeterminateCheckbox(isIndeterminate);
16
+ * return <input type="checkbox" ref={checkboxRef} />;
17
+ * ```
18
+ */
19
+ export declare function useIndeterminateCheckbox(indeterminate?: boolean): React.MutableRefObject<HTMLInputElement | null>;
@@ -0,0 +1,32 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ exports.__esModule = true;
5
+ exports.useIndeterminateCheckbox = useIndeterminateCheckbox;
6
+ var _react = require("react");
7
+ /**
8
+ * A hook that manages the indeterminate state of a checkbox input element.
9
+ *
10
+ * The indeterminate state is a visual and accessibility state that cannot be set via HTML attributes.
11
+ * It must be set via JavaScript on the DOM element itself. This is required for proper
12
+ * screen reader support, as assistive technologies rely on the native DOM property
13
+ * rather than ARIA attributes for native checkboxes.
14
+ *
15
+ * @param indeterminate - Whether the checkbox should be in an indeterminate state
16
+ * @returns A ref object to be attached to the checkbox input element
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * const checkboxRef = useIndeterminateCheckbox(isIndeterminate);
21
+ * return <input type="checkbox" ref={checkboxRef} />;
22
+ * ```
23
+ */
24
+ function useIndeterminateCheckbox(indeterminate) {
25
+ const ref = (0, _react.useRef)(null);
26
+ (0, _react.useLayoutEffect)(() => {
27
+ if (ref.current) {
28
+ ref.current.indeterminate = indeterminate !== null && indeterminate !== void 0 ? indeterminate : false;
29
+ }
30
+ }, [indeterminate]);
31
+ return ref;
32
+ }
@@ -175,6 +175,29 @@ const DateInput = (0, _utils.forwardRef)((props, ref) => {
175
175
  reset();
176
176
  }
177
177
  });
178
+ const onAmPmToggle = (0, _hooks.useEventCallback)(event => {
179
+ const input = event.target;
180
+ const key = event.key.toLowerCase();
181
+
182
+ // Only handle 'a' or 'p' keys when the selected pattern is 'a' (AM/PM)
183
+ if (selectedState.selectedPattern === 'a' && (key === 'a' || key === 'p')) {
184
+ const currentHour = dateField.hour || 0;
185
+ const isAM = currentHour < 12;
186
+ const isPM = currentHour >= 12;
187
+
188
+ // Toggle AM/PM based on the key pressed
189
+ // 'a' key -> set to AM, 'p' key -> set to PM
190
+ if (key === 'a' && isPM || key === 'p' && isAM) {
191
+ const state = (0, _utils2.getInputSelectedState)({
192
+ ...keyPressOptions,
193
+ input
194
+ });
195
+ setSelectedState(state);
196
+ setDateOffset('a', 1, date => handleChange(date, event));
197
+ setSelectionRange(state.selectionStart, state.selectionEnd);
198
+ }
199
+ }
200
+ });
178
201
  const handleClick = (0, _hooks.useEventCallback)(event => {
179
202
  const input = event.target;
180
203
  const state = (0, _utils2.getInputSelectedState)({
@@ -203,6 +226,7 @@ const DateInput = (0, _utils.forwardRef)((props, ref) => {
203
226
  onSegmentValueChange,
204
227
  onSegmentValueChangeWithNumericKeys,
205
228
  onSegmentValueRemove,
229
+ onAmPmToggle,
206
230
  onKeyDown
207
231
  });
208
232
  const [focused, focusEventProps] = (0, _useIsFocused.default)({
@@ -4,7 +4,8 @@ interface KeyboardEventOptions {
4
4
  onSegmentValueChange?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
5
5
  onSegmentValueChangeWithNumericKeys?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
6
6
  onSegmentValueRemove?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
7
+ onAmPmToggle?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
7
8
  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
8
9
  }
9
- export declare function useKeyboardInputEvent({ onSegmentChange, onSegmentValueChange, onSegmentValueChangeWithNumericKeys, onSegmentValueRemove, onKeyDown }: KeyboardEventOptions): (event: React.KeyboardEvent<HTMLInputElement>) => void;
10
+ export declare function useKeyboardInputEvent({ onSegmentChange, onSegmentValueChange, onSegmentValueChangeWithNumericKeys, onSegmentValueRemove, onAmPmToggle, onKeyDown }: KeyboardEventOptions): (event: React.KeyboardEvent<HTMLInputElement>) => void;
10
11
  export default useKeyboardInputEvent;
@@ -9,6 +9,7 @@ function useKeyboardInputEvent({
9
9
  onSegmentValueChange,
10
10
  onSegmentValueChangeWithNumericKeys,
11
11
  onSegmentValueRemove,
12
+ onAmPmToggle,
12
13
  onKeyDown
13
14
  }) {
14
15
  return event => {
@@ -34,6 +35,19 @@ function useKeyboardInputEvent({
34
35
  onSegmentValueChangeWithNumericKeys === null || onSegmentValueChangeWithNumericKeys === void 0 || onSegmentValueChangeWithNumericKeys(event);
35
36
  event.preventDefault();
36
37
  break;
38
+ case 'a':
39
+ case 'p':
40
+ case 'A':
41
+ case 'P':
42
+ // Determine whether the Ctrl or Command key is pressed, does not affect user copy and paste
43
+ if (event.ctrlKey || event.metaKey) {
44
+ break;
45
+ }
46
+
47
+ // Handle AM/PM toggle with 'a' or 'p' keys
48
+ onAmPmToggle === null || onAmPmToggle === void 0 || onAmPmToggle(event);
49
+ event.preventDefault();
50
+ break;
37
51
  case (_key$match2 = key.match(/[a-z]/)) === null || _key$match2 === void 0 ? void 0 : _key$match2[0]:
38
52
  // Determine whether the Ctrl or Command key is pressed, does not affect user copy and paste
39
53
  if (event.ctrlKey || event.metaKey) {
@@ -209,6 +209,29 @@ const DateRangeInput = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
209
209
  reset();
210
210
  }
211
211
  });
212
+ const onAmPmToggle = (0, _hooks.useEventCallback)(event => {
213
+ const input = event.target;
214
+ const key = event.key.toLowerCase();
215
+
216
+ // Only handle 'a' or 'p' keys when the selected pattern is 'a' (AM/PM)
217
+ if (selectedState.selectedPattern === 'a' && (key === 'a' || key === 'p')) {
218
+ const currentHour = getActiveState().dateField.hour || 0;
219
+ const isAM = currentHour < 12;
220
+ const isPM = currentHour >= 12;
221
+
222
+ // Toggle AM/PM based on the key pressed
223
+ // 'a' key -> set to AM, 'p' key -> set to PM
224
+ if (key === 'a' && isPM || key === 'p' && isAM) {
225
+ const state = (0, _utils2.getInputSelectedState)({
226
+ ...keyPressOptions,
227
+ input
228
+ });
229
+ setSelectedState(state);
230
+ getActiveState().setDateOffset('a', 1, date => handleChange(date, event));
231
+ setSelectionRange(state.selectionStart, state.selectionEnd);
232
+ }
233
+ }
234
+ });
212
235
  const handleClick = (0, _hooks.useEventCallback)(event => {
213
236
  const input = event.target;
214
237
  if (input.selectionStart === null) {
@@ -248,6 +271,7 @@ const DateRangeInput = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
248
271
  onSegmentValueChange,
249
272
  onSegmentValueChangeWithNumericKeys,
250
273
  onSegmentValueRemove,
274
+ onAmPmToggle,
251
275
  onKeyDown
252
276
  });
253
277
  return /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({
@@ -387,6 +387,12 @@ const DateRangePicker = (0, _utils3.forwardRef)((props, ref) => {
387
387
  const calendarKey = index === 0 ? 'start' : 'end';
388
388
  const nextCalendarDate = Array.from(calendarDateRange);
389
389
  nextCalendarDate[index] = date;
390
+
391
+ // If allowSameMonth is true, the start and end dates should be the same
392
+ if (allowSameMonth) {
393
+ nextCalendarDate[0] = date;
394
+ nextCalendarDate[1] = date;
395
+ }
390
396
  setCalendarDateRange({
391
397
  dateRange: nextCalendarDate,
392
398
  calendarKey,
package/cjs/Form/Form.js CHANGED
@@ -111,7 +111,11 @@ const Form = (0, _utils.forwardRef)((props, ref) => {
111
111
  });
112
112
  const reset = (0, _hooks.useEventCallback)(event => {
113
113
  resetErrors();
114
- onReset === null || onReset === void 0 || onReset(resetFormValue(), event);
114
+ const resetValue = resetFormValue();
115
+ if (resetValue) {
116
+ onChange === null || onChange === void 0 || onChange(resetValue);
117
+ }
118
+ onReset === null || onReset === void 0 || onReset(resetValue, event);
115
119
  });
116
120
  const handleSubmit = (0, _hooks.useEventCallback)(event => {
117
121
  var _event$preventDefault, _event$stopPropagatio;
@@ -2,6 +2,8 @@ import React from 'react';
2
2
  import { StyledBoxProps } from '../internals/StyledBox';
3
3
  import type { Color, FormControlBaseProps, Size } from '../internals/types';
4
4
  export interface RateProps<T = number> extends Omit<StyledBoxProps, 'name'>, FormControlBaseProps<T> {
5
+ /** Element type to render as */
6
+ as?: React.ElementType;
5
7
  /** Whether to allow semi selection */
6
8
  allowHalf?: boolean;
7
9
  /** Custom character of rate */
@@ -16,6 +18,12 @@ export interface RateProps<T = number> extends Omit<StyledBoxProps, 'name'>, For
16
18
  color?: Color | React.CSSProperties['color'];
17
19
  /** Maximum rate */
18
20
  max?: number;
21
+ /**
22
+ * The name of the form control.
23
+ * Used for form integration and does not affect the internal component styling.
24
+ * @private Internal use only - extracted from props to prevent conflicts with StyledBox
25
+ */
26
+ name?: string;
19
27
  /** Vertical Rate half */
20
28
  vertical?: boolean;
21
29
  /** Render custom character */