rsuite 6.0.0 → 6.1.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 (299) 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/Cascader/Cascader.js +1 -1
  177. package/cjs/CheckPicker/CheckPicker.js +1 -1
  178. package/cjs/CheckTree/CheckTree.js +3 -0
  179. package/cjs/CheckTree/CheckTreeView.js +7 -3
  180. package/cjs/CheckTree/hooks/useTreeCheckState.d.ts +1 -0
  181. package/cjs/CheckTree/hooks/useTreeCheckState.js +54 -3
  182. package/cjs/CheckTree/utils.d.ts +9 -2
  183. package/cjs/CheckTree/utils.js +70 -11
  184. package/cjs/CheckTreePicker/CheckTreePicker.js +2 -1
  185. package/cjs/Checkbox/Checkbox.js +2 -1
  186. package/cjs/Checkbox/hooks/useIndeterminateCheckbox.d.ts +19 -0
  187. package/cjs/Checkbox/hooks/useIndeterminateCheckbox.js +32 -0
  188. package/cjs/DateInput/DateInput.js +24 -0
  189. package/cjs/DateInput/hooks/useKeyboardInputEvent.d.ts +2 -1
  190. package/cjs/DateInput/hooks/useKeyboardInputEvent.js +14 -0
  191. package/cjs/DatePicker/DatePicker.js +1 -1
  192. package/cjs/DateRangeInput/DateRangeInput.js +24 -0
  193. package/cjs/DateRangePicker/DateRangePicker.js +1 -1
  194. package/cjs/Form/Form.js +5 -1
  195. package/cjs/InputPicker/InputPicker.js +1 -1
  196. package/cjs/MultiCascader/MultiCascader.js +1 -1
  197. package/cjs/Panel/PanelHeader.d.ts +1 -1
  198. package/cjs/Panel/PanelHeader.js +4 -5
  199. package/cjs/Rate/Rate.d.ts +8 -0
  200. package/cjs/Rate/Rate.js +3 -1
  201. package/cjs/SelectPicker/SelectPicker.js +1 -1
  202. package/cjs/Tree/hooks/useFlattenTree.d.ts +4 -0
  203. package/cjs/Tree/hooks/useFlattenTree.js +22 -1
  204. package/cjs/Tree/hooks/useFocusTree.js +19 -1
  205. package/cjs/Tree/hooks/useVirtualizedTreeData.d.ts +1 -0
  206. package/cjs/Tree/hooks/useVirtualizedTreeData.js +5 -2
  207. package/cjs/Tree/utils/focusableTree.d.ts +8 -0
  208. package/cjs/Tree/utils/focusableTree.js +40 -2
  209. package/cjs/Tree/utils/index.d.ts +1 -1
  210. package/cjs/Tree/utils/index.js +3 -1
  211. package/cjs/TreePicker/TreePicker.js +1 -1
  212. package/cjs/internals/Picker/PickerToggleTrigger.d.ts +2 -0
  213. package/cjs/internals/Picker/PickerToggleTrigger.js +3 -1
  214. package/cjs/internals/Picker/utils.d.ts +2 -0
  215. package/cjs/internals/Picker/utils.js +13 -1
  216. package/cjs/internals/StyledBox/StyledBox.d.ts +1 -1
  217. package/cjs/internals/StyledBox/StyledBox.js +2 -2
  218. package/dist/rsuite.js +40 -29
  219. package/dist/rsuite.js.map +1 -1
  220. package/dist/rsuite.min.js +1 -1
  221. package/dist/rsuite.min.js.map +1 -1
  222. package/esm/Breadcrumb/BreadcrumbItem.js +10 -5
  223. package/esm/Cascader/Cascader.js +1 -1
  224. package/esm/CheckPicker/CheckPicker.js +1 -1
  225. package/esm/CheckTree/CheckTree.js +3 -0
  226. package/esm/CheckTree/CheckTreeView.js +7 -3
  227. package/esm/CheckTree/hooks/useTreeCheckState.d.ts +1 -0
  228. package/esm/CheckTree/hooks/useTreeCheckState.js +55 -4
  229. package/esm/CheckTree/utils.d.ts +9 -2
  230. package/esm/CheckTree/utils.js +71 -12
  231. package/esm/CheckTreePicker/CheckTreePicker.js +2 -1
  232. package/esm/Checkbox/Checkbox.js +3 -2
  233. package/esm/Checkbox/hooks/useIndeterminateCheckbox.d.ts +19 -0
  234. package/esm/Checkbox/hooks/useIndeterminateCheckbox.js +29 -0
  235. package/esm/DateInput/DateInput.js +24 -0
  236. package/esm/DateInput/hooks/useKeyboardInputEvent.d.ts +2 -1
  237. package/esm/DateInput/hooks/useKeyboardInputEvent.js +14 -0
  238. package/esm/DatePicker/DatePicker.js +1 -1
  239. package/esm/DateRangeInput/DateRangeInput.js +24 -0
  240. package/esm/DateRangePicker/DateRangePicker.js +1 -1
  241. package/esm/Form/Form.js +5 -1
  242. package/esm/InputPicker/InputPicker.js +1 -1
  243. package/esm/MultiCascader/MultiCascader.js +1 -1
  244. package/esm/Panel/PanelHeader.d.ts +1 -1
  245. package/esm/Panel/PanelHeader.js +4 -5
  246. package/esm/Rate/Rate.d.ts +8 -0
  247. package/esm/Rate/Rate.js +3 -1
  248. package/esm/SelectPicker/SelectPicker.js +1 -1
  249. package/esm/Tree/hooks/useFlattenTree.d.ts +4 -0
  250. package/esm/Tree/hooks/useFlattenTree.js +22 -1
  251. package/esm/Tree/hooks/useFocusTree.js +20 -2
  252. package/esm/Tree/hooks/useVirtualizedTreeData.d.ts +1 -0
  253. package/esm/Tree/hooks/useVirtualizedTreeData.js +5 -2
  254. package/esm/Tree/utils/focusableTree.d.ts +8 -0
  255. package/esm/Tree/utils/focusableTree.js +36 -0
  256. package/esm/Tree/utils/index.d.ts +1 -1
  257. package/esm/Tree/utils/index.js +1 -1
  258. package/esm/TreePicker/TreePicker.js +1 -1
  259. package/esm/internals/Picker/PickerToggleTrigger.d.ts +2 -0
  260. package/esm/internals/Picker/PickerToggleTrigger.js +3 -1
  261. package/esm/internals/Picker/utils.d.ts +2 -0
  262. package/esm/internals/Picker/utils.js +13 -1
  263. package/esm/internals/StyledBox/StyledBox.d.ts +1 -1
  264. package/esm/internals/StyledBox/StyledBox.js +2 -2
  265. package/internals/Box/styles/index.scss +31 -0
  266. package/internals/Burger/styles/index.scss +72 -0
  267. package/internals/CloseButton/styles/index.scss +14 -0
  268. package/internals/Picker/styles/_mixin.scss +219 -0
  269. package/internals/Picker/styles/_variables.scss +9 -0
  270. package/internals/Picker/styles/index.scss +476 -0
  271. package/internals/Ripple/styles/_mixins.scss +10 -0
  272. package/internals/Ripple/styles/index.scss +40 -0
  273. package/internals/ScrollView/styles/index.scss +77 -0
  274. package/internals/SearchBox/styles/index.scss +7 -0
  275. package/package.json +4 -4
  276. package/styles/_base.scss +37 -0
  277. package/styles/_css-reset.scss +345 -0
  278. package/styles/_themes.scss +132 -0
  279. package/styles/_variables.scss +48 -0
  280. package/styles/color-modes/_dark.scss +458 -0
  281. package/styles/color-modes/_high-contrast.scss +469 -0
  282. package/styles/color-modes/_light.scss +475 -0
  283. package/styles/colors/_colors-base.scss +39 -0
  284. package/styles/colors/_dark.scss +114 -0
  285. package/styles/colors/_high-contrast.scss +114 -0
  286. package/styles/colors/_light.scss +115 -0
  287. package/styles/colors/_palette.scss +413 -0
  288. package/styles/components.scss +114 -0
  289. package/styles/index.scss +2 -0
  290. package/styles/mixins/_color-modes.scss +20 -0
  291. package/styles/mixins/_combobox.scss +6 -0
  292. package/styles/mixins/_hacks.scss +33 -0
  293. package/styles/mixins/_input.scss +30 -0
  294. package/styles/mixins/_listbox.scss +70 -0
  295. package/styles/mixins/_menu.scss +12 -0
  296. package/styles/mixins/_utilities.scss +130 -0
  297. package/toaster/styles/animation.scss +54 -0
  298. package/toaster/styles/index.scss +109 -0
  299. package/useToaster/styles/index.scss +1 -0
package/esm/Form/Form.js CHANGED
@@ -105,7 +105,11 @@ const Form = forwardRef((props, ref) => {
105
105
  });
106
106
  const reset = useEventCallback(event => {
107
107
  resetErrors();
108
- onReset === null || onReset === void 0 || onReset(resetFormValue(), event);
108
+ const resetValue = resetFormValue();
109
+ if (resetValue) {
110
+ onChange === null || onChange === void 0 || onChange(resetValue);
111
+ }
112
+ onReset === null || onReset === void 0 || onReset(resetValue, event);
109
113
  });
110
114
  const handleSubmit = useEventCallback(event => {
111
115
  var _event$preventDefault, _event$stopPropagatio;
@@ -590,7 +590,7 @@ const InputPicker = forwardRef((props, ref) => {
590
590
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, _extends({
591
591
  id: id,
592
592
  multiple: multi,
593
- name: multi ? 'tag' : 'input',
593
+ pickerType: multi ? 'tag' : 'input',
594
594
  block: block,
595
595
  disabled: disabled,
596
596
  appearance: appearance,
@@ -295,7 +295,7 @@ const MultiCascader = forwardRef((props, ref) => {
295
295
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
296
296
  as: as,
297
297
  id: id,
298
- name: "multi-cascader",
298
+ pickerType: "multi-cascader",
299
299
  block: block,
300
300
  disabled: disabled,
301
301
  appearance: appearance,
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { BoxProps } from '../internals/Box';
3
- export interface PanelHeaderProps extends BoxProps, Omit<React.HTMLAttributes<HTMLHeadingElement>, 'color'> {
3
+ export interface PanelHeaderProps extends BoxProps, Omit<React.HTMLAttributes<HTMLDivElement | HTMLHeadingElement>, 'color'> {
4
4
  caretAs?: React.ElementType;
5
5
  collapsible?: boolean;
6
6
  disabled?: boolean;
@@ -2,13 +2,13 @@
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import React, { isValidElement, cloneElement } from 'react';
4
4
  import get from 'lodash/get';
5
- import Heading from "../Heading/index.js";
6
5
  import AccordionButton from "./AccordionButton.js";
7
6
  import Box from "../internals/Box/index.js";
8
7
  import { useStyles } from "../internals/hooks/index.js";
8
+ import { isFragment } from "../internals/utils/index.js";
9
9
  const PanelHeader = props => {
10
10
  const {
11
- as = Heading,
11
+ as = 'div',
12
12
  classPrefix = 'panel',
13
13
  className,
14
14
  children,
@@ -27,8 +27,8 @@ const PanelHeader = props => {
27
27
  prefix
28
28
  } = useStyles(classPrefix);
29
29
  let headerElement;
30
- if (! /*#__PURE__*/isValidElement(children) || Array.isArray(children)) {
31
- headerElement = /*#__PURE__*/React.createElement("span", {
30
+ if (! /*#__PURE__*/isValidElement(children) || Array.isArray(children) || isFragment(children)) {
31
+ headerElement = /*#__PURE__*/React.createElement("div", {
32
32
  className: prefix('title')
33
33
  }, children);
34
34
  } else {
@@ -39,7 +39,6 @@ const PanelHeader = props => {
39
39
  }
40
40
  return /*#__PURE__*/React.createElement(Box, _extends({
41
41
  as: as,
42
- level: 2,
43
42
  className: merge(className, prefix('header'))
44
43
  }, rest), collapsible ? /*#__PURE__*/React.createElement(AccordionButton, {
45
44
  id: buttonId,
@@ -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 */
package/esm/Rate/Rate.js CHANGED
@@ -26,6 +26,7 @@ const Rate = forwardRef((props, ref) => {
26
26
  classPrefix = 'rate',
27
27
  disabled,
28
28
  max = 5,
29
+ name,
29
30
  readOnly,
30
31
  vertical,
31
32
  size,
@@ -128,7 +129,8 @@ const Rate = forwardRef((props, ref) => {
128
129
  style: mergedStyle,
129
130
  onMouseLeave: handleMouseLeave,
130
131
  "data-disabled": disabled,
131
- "data-readonly": readOnly
132
+ "data-readonly": readOnly,
133
+ "data-name": name
132
134
  }, rest), starStates.map((status, index) => /*#__PURE__*/React.createElement(Character, {
133
135
  role: "radio",
134
136
  "aria-posinset": index + 1,
@@ -244,7 +244,7 @@ const SelectPicker = forwardRef((props, ref) => {
244
244
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
245
245
  as: as,
246
246
  id: id,
247
- name: "select",
247
+ pickerType: "select",
248
248
  block: block,
249
249
  disabled: disabled,
250
250
  appearance: appearance,
@@ -28,6 +28,10 @@ interface UseFlattenTreeOptions {
28
28
  * An array of item values that should not be selectable.
29
29
  */
30
30
  uncheckableItemValues?: any[];
31
+ /**
32
+ * An array of item values that should be disabled.
33
+ */
34
+ disabledItemValues?: any[];
31
35
  /**
32
36
  * A callback function that will be called when the tree nodes change.
33
37
  * It receives a map of the tree nodes.
@@ -16,6 +16,7 @@ function useFlattenTree(data, options) {
16
16
  valueKey,
17
17
  childrenKey,
18
18
  uncheckableItemValues = [],
19
+ disabledItemValues = [],
19
20
  cascade,
20
21
  multiple,
21
22
  callback
@@ -27,6 +28,26 @@ function useFlattenTree(data, options) {
27
28
  // Reset values to false
28
29
  Object.keys(flattenedNodes.current).forEach(refKey => {
29
30
  const node = flattenedNodes.current[refKey];
31
+
32
+ // Check if this node or any of its parents is disabled
33
+ const isNodeDisabled = disabledItemValues.some(disabledValue => shallowEqual(node[valueKey], disabledValue));
34
+ let hasDisabledParent = false;
35
+ let currentNode = node;
36
+ while (currentNode.parent && !hasDisabledParent) {
37
+ const parentRefKey = currentNode.parent.refKey;
38
+ if (parentRefKey && flattenedNodes.current[parentRefKey]) {
39
+ const parentValue = flattenedNodes.current[parentRefKey][valueKey];
40
+ if (disabledItemValues.some(disabledValue => shallowEqual(parentValue, disabledValue))) {
41
+ hasDisabledParent = true;
42
+ }
43
+ }
44
+ currentNode = currentNode.parent;
45
+ }
46
+
47
+ // Skip disabled nodes - they should not be affected by cascade or value changes
48
+ if (isNodeDisabled || hasDisabledParent) {
49
+ return;
50
+ }
30
51
  if (cascade && !isNil(node.parent) && !isNil(node.parent.refKey)) {
31
52
  node.check = flattenedNodes.current[node.parent.refKey].check;
32
53
  } else {
@@ -38,7 +59,7 @@ function useFlattenTree(data, options) {
38
59
  }
39
60
  });
40
61
  });
41
- }, [cascade, uncheckableItemValues, valueKey]);
62
+ }, [cascade, uncheckableItemValues, disabledItemValues, valueKey]);
42
63
  const flattenTreeData = useCallback((treeData, parent, layer = 1) => {
43
64
  if (!Array.isArray(treeData) || treeData.length === 0) {
44
65
  return [];
@@ -5,7 +5,7 @@ import { KEY_VALUES } from "../../internals/constants/index.js";
5
5
  import { useEventCallback, useCustom } from "../../internals/hooks/index.js";
6
6
  import { onMenuKeyDown } from "../../internals/Picker/index.js";
7
7
  import { useItemDataKeys, useRegisterTreeMethods } from "../../internals/Tree/TreeProvider.js";
8
- import { isSearching, focusNextItem, getFocusableItems, getActiveItem, focusPreviousItem, focusCurrentItem, focusTreeNode, handleLeftArrow, handleRightArrow } from "../utils/index.js";
8
+ import { isSearching, focusNextItem, getFocusableItems, getActiveItem, focusPreviousItem, focusFirstItem, focusLastItem, focusCurrentItem, focusTreeNode, handleLeftArrow, handleRightArrow } from "../utils/index.js";
9
9
  import useTreeNodeRefs from "./useTreeNodeRefs.js";
10
10
  /**
11
11
  * Custom hook that manages the focus behavior of a tree component.
@@ -99,12 +99,30 @@ function useFocusTree(props) {
99
99
  onFocusItem
100
100
  });
101
101
  });
102
+ const handleHomeKey = useEventCallback(() => {
103
+ const focusProps = getFocusProps();
104
+ const focusedValue = focusFirstItem(focusProps);
105
+ if (focusedValue) {
106
+ setFocusItemValue(focusedValue);
107
+ onFocused === null || onFocused === void 0 || onFocused(focusedValue);
108
+ }
109
+ });
110
+ const handleEndKey = useEventCallback(() => {
111
+ const focusProps = getFocusProps();
112
+ const focusedValue = focusLastItem(focusProps);
113
+ if (focusedValue) {
114
+ setFocusItemValue(focusedValue);
115
+ onFocused === null || onFocused === void 0 || onFocused(focusedValue);
116
+ }
117
+ });
102
118
  const onTreeKeydown = useEventCallback(event => {
103
119
  onMenuKeyDown(event, {
104
120
  down: () => handleFocusItem(KEY_VALUES.DOWN),
105
121
  up: () => handleFocusItem(KEY_VALUES.UP),
106
122
  left: rtl ? handleRightArrowEvent : handleLeftArrowEvent,
107
- right: rtl ? handleLeftArrowEvent : handleRightArrowEvent
123
+ right: rtl ? handleLeftArrowEvent : handleRightArrowEvent,
124
+ home: handleHomeKey,
125
+ end: handleEndKey
108
126
  });
109
127
  });
110
128
  const focusTreeFirstNode = useEventCallback(() => {
@@ -3,5 +3,6 @@ declare function useVirtualizedTreeData(nodes: TreeNodeMap, data: TreeNode[], op
3
3
  expandItemValues: (string | number)[];
4
4
  cascade?: boolean;
5
5
  searchKeyword?: string;
6
+ disabledItemValues?: (string | number)[];
6
7
  }): () => TreeNode[];
7
8
  export default useVirtualizedTreeData;
@@ -30,7 +30,8 @@ function useVirtualizedTreeData(nodes, data, options) {
30
30
  const {
31
31
  cascade,
32
32
  searchKeyword,
33
- expandItemValues
33
+ expandItemValues,
34
+ disabledItemValues = []
34
35
  } = options;
35
36
  return UNSAFE_flattenTree(data, childrenKey, node => {
36
37
  let formatted = {};
@@ -54,7 +55,9 @@ function useVirtualizedTreeData(nodes, data, options) {
54
55
  const checkState = !isUndefined(cascade) ? getNodeCheckState(curNode, {
55
56
  cascade,
56
57
  nodes,
57
- childrenKey
58
+ childrenKey,
59
+ disabledItemValues,
60
+ valueKey
58
61
  }) : undefined;
59
62
  formatted = {
60
63
  ...node,
@@ -35,6 +35,14 @@ export declare const focusNextItem: (props: FocusItemProps) => any;
35
35
  * Focuses on the previous item in a tree.
36
36
  */
37
37
  export declare const focusPreviousItem: (props: FocusItemProps) => any;
38
+ /**
39
+ * Focuses on the first item in a tree.
40
+ */
41
+ export declare const focusFirstItem: (props: FocusItemProps) => any;
42
+ /**
43
+ * Focuses on the last item in a tree.
44
+ */
45
+ export declare const focusLastItem: (props: FocusItemProps) => any;
38
46
  interface ScrollToActiveTreeNodeProps {
39
47
  value: any;
40
48
  valueKey: string;
@@ -108,6 +108,42 @@ export const focusPreviousItem = props => {
108
108
  return value;
109
109
  };
110
110
 
111
+ /**
112
+ * Focuses on the first item in a tree.
113
+ */
114
+ export const focusFirstItem = props => {
115
+ const {
116
+ focusableItems,
117
+ treeNodesRefs,
118
+ valueKey
119
+ } = props;
120
+ if (focusableItems.length === 0) {
121
+ return;
122
+ }
123
+ const firstItem = focusableItems[0];
124
+ const value = firstItem[valueKey];
125
+ focusTreeNode(firstItem.refKey, treeNodesRefs);
126
+ return value;
127
+ };
128
+
129
+ /**
130
+ * Focuses on the last item in a tree.
131
+ */
132
+ export const focusLastItem = props => {
133
+ const {
134
+ focusableItems,
135
+ treeNodesRefs,
136
+ valueKey
137
+ } = props;
138
+ if (focusableItems.length === 0) {
139
+ return;
140
+ }
141
+ const lastItem = focusableItems[focusableItems.length - 1];
142
+ const value = lastItem[valueKey];
143
+ focusTreeNode(lastItem.refKey, treeNodesRefs);
144
+ return value;
145
+ };
146
+
111
147
  /**
112
148
  * Returns the index of the first visible node in the tree that matches the given value.
113
149
  */
@@ -7,5 +7,5 @@ export { formatNodeRefKey } from './formatNodeRefKey';
7
7
  export { indentTreeNode } from './indentTreeNode';
8
8
  export { isSearching } from './isSearching';
9
9
  export { isExpand } from './isExpand';
10
- export { getFocusableItems, getActiveItem, focusNextItem, focusPreviousItem, focusTreeNode, focusCurrentItem } from './focusableTree';
10
+ export { getFocusableItems, getActiveItem, focusNextItem, focusPreviousItem, focusFirstItem, focusLastItem, focusTreeNode, focusCurrentItem } from './focusableTree';
11
11
  export { handleLeftArrow, handleRightArrow } from './treeKeyboardInteractions';
@@ -10,5 +10,5 @@ export { isSearching } from "./isSearching.js";
10
10
  export { isExpand } from "./isExpand.js";
11
11
 
12
12
  // Utility functions for managing focusable items in a tree.
13
- export { getFocusableItems, getActiveItem, focusNextItem, focusPreviousItem, focusTreeNode, focusCurrentItem } from "./focusableTree.js";
13
+ export { getFocusableItems, getActiveItem, focusNextItem, focusPreviousItem, focusFirstItem, focusLastItem, focusTreeNode, focusCurrentItem } from "./focusableTree.js";
14
14
  export { handleLeftArrow, handleRightArrow } from "./treeKeyboardInteractions.js";
@@ -255,7 +255,7 @@ const TreePicker = forwardRef((props, ref) => {
255
255
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
256
256
  as: as,
257
257
  id: id,
258
- name: "tree",
258
+ pickerType: "tree",
259
259
  block: block,
260
260
  disabled: disabled,
261
261
  appearance: appearance,
@@ -29,6 +29,8 @@ export interface PickerToggleTriggerProps
29
29
  name?: string;
30
30
  /** Controls the open state of the picker */
31
31
  open?: boolean;
32
+ /** Picker type identifier for data-picker attribute */
33
+ pickerType?: string;
32
34
  /** Additional properties for the picker */
33
35
  triggerProps: any;
34
36
  /** Placement of the component */
@@ -27,6 +27,7 @@ export const PickerToggleTrigger = /*#__PURE__*/React.forwardRef((props, ref) =>
27
27
  id,
28
28
  multiple,
29
29
  name,
30
+ pickerType,
30
31
  triggerProps,
31
32
  placement,
32
33
  popupType = 'listbox',
@@ -76,7 +77,8 @@ export const PickerToggleTrigger = /*#__PURE__*/React.forwardRef((props, ref) =>
76
77
  className: classes,
77
78
  style: style,
78
79
  ref: rootRef,
79
- "data-picker": name,
80
+ name: name,
81
+ "data-picker": pickerType,
80
82
  "data-appearance": appearance,
81
83
  "data-size": size,
82
84
  "data-disabled": disabled || undefined,
@@ -13,6 +13,8 @@ export interface KeyboardEvents {
13
13
  esc?: React.KeyboardEventHandler;
14
14
  right?: React.KeyboardEventHandler;
15
15
  left?: React.KeyboardEventHandler;
16
+ home?: React.KeyboardEventHandler;
17
+ end?: React.KeyboardEventHandler;
16
18
  }
17
19
  /**
18
20
  * Handling keyboard events...
@@ -47,7 +47,9 @@ export function onMenuKeyDown(event, events) {
47
47
  del,
48
48
  esc,
49
49
  right,
50
- left
50
+ left,
51
+ home,
52
+ end
51
53
  } = events;
52
54
  switch (event.key) {
53
55
  // down
@@ -82,6 +84,16 @@ export function onMenuKeyDown(event, events) {
82
84
  case KEY_VALUES.RIGHT:
83
85
  right === null || right === void 0 || right(event);
84
86
  break;
87
+ // home
88
+ case KEY_VALUES.HOME:
89
+ home === null || home === void 0 || home(event);
90
+ event.preventDefault();
91
+ break;
92
+ // end
93
+ case KEY_VALUES.END:
94
+ end === null || end === void 0 || end(event);
95
+ event.preventDefault();
96
+ break;
85
97
  default:
86
98
  }
87
99
  }
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { BoxProps } from '../Box';
3
3
  import type { Size, Color } from '../types';
4
4
  export interface StyledBoxProps extends BoxProps {
5
- /** Name of the Box */
5
+ /** Component identifier for CSS variable generation */
6
6
  name: string;
7
7
  /** Size of the Box */
8
8
  size?: Size | number | string;
@@ -7,12 +7,12 @@ const StyledBox = forwardRef((props, ref) => {
7
7
  const {
8
8
  as,
9
9
  color,
10
- name,
10
+ name: componentName,
11
11
  style,
12
12
  size,
13
13
  ...rest
14
14
  } = props;
15
- const boxStyle = mergeStyles(style, getSizeStyle(size, name), getColorStyle(color, name));
15
+ const boxStyle = mergeStyles(style, getSizeStyle(size, componentName), getColorStyle(color, componentName));
16
16
  return /*#__PURE__*/React.createElement(Box, _extends({
17
17
  as: as,
18
18
  ref: ref,
@@ -0,0 +1,31 @@
1
+ @use '../../../styles/base' as base;
2
+ @use '../../../styles/themes' as themes;
3
+ @use '../../../styles/variables' as vars;
4
+
5
+ // Define breakpoints map
6
+ $breakpoints: (
7
+ xs: vars.$screen-sm,
8
+ sm: vars.$screen-md,
9
+ md: vars.$screen-lg,
10
+ lg: vars.$screen-xl,
11
+ xl: vars.$screen-xxl
12
+ );
13
+
14
+ // Generate responsive visibility styles
15
+ @each $key, $value in $breakpoints {
16
+ $bp: calc(#{$value} - 1px);
17
+
18
+ // Visible from breakpoint
19
+ @media (max-width: $bp) {
20
+ [data-visible-from='#{$key}'] {
21
+ display: none !important;
22
+ }
23
+ }
24
+
25
+ // Hidden from breakpoint
26
+ @media (min-width: #{$value}) {
27
+ [data-hidden-from='#{$key}'] {
28
+ display: none !important;
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,72 @@
1
+ @use '../../Box/styles/index' as box;
2
+
3
+ .rs-burger {
4
+ --rs-burger-size: 36px;
5
+ --rs-burger-thickness: 2px;
6
+ --rs-burger-color: currentColor;
7
+ --rs-burger-spacing: calc(var(--rs-spacing) * 1.5);
8
+ --rs-burger-line-size: calc(var(--rs-burger-size) - var(--rs-burger-spacing) * 2);
9
+
10
+ border: none;
11
+ background: transparent;
12
+ cursor: pointer;
13
+ outline: none;
14
+ transition: background 0.2s;
15
+ box-sizing: border-box;
16
+ width: var(--rs-burger-size);
17
+ height: var(--rs-burger-size);
18
+ padding: var(--rs-burger-spacing);
19
+
20
+ // The burger line (middle)
21
+ &-line {
22
+ position: relative;
23
+ display: block;
24
+ width: var(--rs-burger-line-size);
25
+ height: var(--rs-burger-thickness);
26
+ background: var(--rs-burger-color);
27
+ border-radius: var(--rs-burger-thickness);
28
+ transition-property: background, transform;
29
+ transition-duration: 0.2s, 0.3s;
30
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
31
+ pointer-events: none;
32
+
33
+ // Top and bottom lines
34
+ &::before,
35
+ &::after {
36
+ content: '';
37
+ position: absolute;
38
+ display: block;
39
+ inset-inline-start: 0;
40
+ width: 100%;
41
+ height: var(--rs-burger-thickness);
42
+ background: var(--rs-burger-color);
43
+ border-radius: var(--rs-burger-thickness);
44
+ transition-property: transform;
45
+ transition-duration: 0.3s;
46
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
47
+ }
48
+
49
+ &::before {
50
+ top: calc(var(--rs-burger-line-size) / -3);
51
+ }
52
+
53
+ &::after {
54
+ top: calc(var(--rs-burger-line-size) / 3);
55
+ }
56
+ }
57
+
58
+ // Opened state animation
59
+ &:where([data-opened='true']) {
60
+ .rs-burger-line {
61
+ background: transparent;
62
+
63
+ &::before {
64
+ transform: translateY(calc(var(--rs-burger-line-size) / 3)) rotate(45deg);
65
+ }
66
+
67
+ &::after {
68
+ transform: translateY(calc(var(--rs-burger-line-size) / -3)) rotate(-45deg);
69
+ }
70
+ }
71
+ }
72
+ }
@@ -0,0 +1,14 @@
1
+ @use '../../../IconButton/styles/index' as icon-button;
2
+
3
+ // Close button
4
+ .rs-btn-close {
5
+ border: none;
6
+ outline: none !important;
7
+ background: transparent;
8
+ line-height: 1;
9
+ cursor: pointer;
10
+
11
+ .rs-icon {
12
+ vertical-align: bottom;
13
+ }
14
+ }