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.
- package/Accordion/styles/index.scss +3 -0
- package/Animation/styles/_animation.scss +95 -0
- package/Animation/styles/_bounce.scss +36 -0
- package/Animation/styles/_collapse.scss +23 -0
- package/Animation/styles/_fade.scss +10 -0
- package/Animation/styles/_mixin.scss +15 -0
- package/Animation/styles/_slide.scss +34 -0
- package/Animation/styles/_variables.scss +4 -0
- package/Animation/styles/index.scss +8 -0
- package/AutoComplete/styles/index.scss +43 -0
- package/Avatar/styles/index.scss +48 -0
- package/AvatarGroup/styles/index.scss +27 -0
- package/Badge/styles/_variables.scss +48 -0
- package/Badge/styles/index.scss +111 -0
- package/Box/styles/index.scss +1 -0
- package/Breadcrumb/styles/index.scss +50 -0
- package/Button/styles/_mixin.scss +83 -0
- package/Button/styles/_variables.scss +38 -0
- package/Button/styles/index.scss +374 -0
- package/ButtonGroup/styles/index.scss +96 -0
- package/ButtonToolbar/styles/index.scss +9 -0
- package/CHANGELOG.md +31 -0
- package/Calendar/styles/_variables.scss +16 -0
- package/Calendar/styles/index.scss +673 -0
- package/Card/styles/index.scss +63 -0
- package/CardGroup/styles/index.scss +10 -0
- package/Carousel/styles/index.scss +204 -0
- package/CascadeTree/styles/_search.scss +39 -0
- package/CascadeTree/styles/index.scss +83 -0
- package/Cascader/styles/index.scss +5 -0
- package/Center/styles/index.scss +11 -0
- package/CheckPicker/styles/index.scss +23 -0
- package/CheckTree/styles/_variables.scss +5 -0
- package/CheckTree/styles/index.scss +121 -0
- package/CheckTreePicker/styles/index.scss +20 -0
- package/Checkbox/styles/_mixin.scss +5 -0
- package/Checkbox/styles/_variables.scss +4 -0
- package/Checkbox/styles/index.scss +158 -0
- package/CheckboxGroup/styles/index.scss +14 -0
- package/Col/styles/index.scss +2 -0
- package/Container/stories/styles.scss +23 -0
- package/Container/styles/index.scss +16 -0
- package/Content/styles/index.scss +6 -0
- package/DateInput/styles/index.scss +1 -0
- package/DatePicker/styles/_mixin.scss +10 -0
- package/DatePicker/styles/index.scss +171 -0
- package/DateRangeInput/styles/index.scss +1 -0
- package/DateRangePicker/styles/index.scss +151 -0
- package/Divider/styles/index.scss +85 -0
- package/Drawer/styles/_mixin.scss +23 -0
- package/Drawer/styles/_variables.scss +18 -0
- package/Drawer/styles/index.scss +244 -0
- package/Dropdown/styles/_mixin.scss +4 -0
- package/Dropdown/styles/_variables.scss +12 -0
- package/Dropdown/styles/index.scss +334 -0
- package/FlexboxGrid/styles/index.scss +82 -0
- package/Footer/styles/index.scss +5 -0
- package/Form/styles/index.scss +3 -0
- package/FormControl/styles/_variables.scss +4 -0
- package/FormControl/styles/index.scss +82 -0
- package/FormControlLabel/styles/index.scss +7 -0
- package/FormErrorMessage/styles/_animation.scss +43 -0
- package/FormErrorMessage/styles/_variables.scss +7 -0
- package/FormErrorMessage/styles/index.scss +146 -0
- package/FormGroup/styles/index.scss +75 -0
- package/FormHelpText/styles/index.scss +21 -0
- package/FormStack/styles/index.scss +15 -0
- package/Grid/styles/_columns.scss +23 -0
- package/Grid/styles/_mixin.scss +110 -0
- package/Grid/styles/_row.scss +44 -0
- package/Grid/styles/_variables.scss +6 -0
- package/Grid/styles/index.scss +115 -0
- package/Header/styles/index.scss +5 -0
- package/Heading/styles/_variables.scss +19 -0
- package/Heading/styles/index.scss +42 -0
- package/HeadingGroup/styles/index.scss +5 -0
- package/Highlight/styles/index.scss +9 -0
- package/IconButton/styles/index.scss +90 -0
- package/Image/styles/index.scss +36 -0
- package/InlineEdit/styles/index.scss +51 -0
- package/Input/styles/_mixin.scss +39 -0
- package/Input/styles/_variables.scss +27 -0
- package/Input/styles/index.scss +23 -0
- package/InputGroup/styles/index.scss +264 -0
- package/InputNumber/styles/index.scss +1 -0
- package/InputPicker/styles/_mixin.scss +7 -0
- package/InputPicker/styles/index.scss +64 -0
- package/Kbd/styles/_mixin.scss +24 -0
- package/Kbd/styles/_variables.scss +13 -0
- package/Kbd/styles/index.scss +21 -0
- package/Link/styles/index.scss +41 -0
- package/List/styles/index.scss +111 -0
- package/Loader/styles/_mixin.scss +37 -0
- package/Loader/styles/_variables.scss +19 -0
- package/Loader/styles/index.scss +120 -0
- package/Menu/styles/index.scss +109 -0
- package/Message/styles/index.scss +189 -0
- package/Modal/styles/_animation.scss +15 -0
- package/Modal/styles/_variables.scss +16 -0
- package/Modal/styles/index.scss +186 -0
- package/MultiCascadeTree/styles/index.scss +35 -0
- package/MultiCascader/styles/index.scss +3 -0
- package/Nav/styles/index.scss +383 -0
- package/Navbar/styles/index.scss +253 -0
- package/Notification/styles/index.scss +116 -0
- package/NumberInput/styles/_mixin.scss +11 -0
- package/NumberInput/styles/index.scss +78 -0
- package/Pagination/styles/_pagination-group.scss +52 -0
- package/Pagination/styles/index.scss +77 -0
- package/Panel/styles/index.scss +122 -0
- package/PanelGroup/styles/index.scss +34 -0
- package/PasswordInput/styles/index.scss +3 -0
- package/PasswordStrengthMeter/styles/index.scss +41 -0
- package/PinInput/styles/index.scss +93 -0
- package/Placeholder/styles/_mixin.scss +9 -0
- package/Placeholder/styles/index.scss +155 -0
- package/Popover/styles/index.scss +224 -0
- package/Popover/styles/mixins.scss +54 -0
- package/Progress/styles/_animation.scss +69 -0
- package/Progress/styles/_mixins.scss +6 -0
- package/Progress/styles/_progress-line.scss +343 -0
- package/Progress/styles/index.scss +3 -0
- package/ProgressCircle/styles/index.scss +2 -0
- package/ProgressCircle/styles/progress-circle.scss +49 -0
- package/Radio/styles/_mixin.scss +5 -0
- package/Radio/styles/_variables.scss +5 -0
- package/Radio/styles/index.scss +147 -0
- package/RadioGroup/styles/_variables.scss +10 -0
- package/RadioGroup/styles/index.scss +83 -0
- package/RadioTile/styles/index.scss +80 -0
- package/RadioTileGroup/styles/index.scss +1 -0
- package/RangeSlider/styles/index.scss +4 -0
- package/Rate/styles/index.scss +141 -0
- package/Row/styles/index.scss +2 -0
- package/SegmentedControl/styles/_mixin.scss +7 -0
- package/SegmentedControl/styles/_variables.scss +43 -0
- package/SegmentedControl/styles/index.scss +147 -0
- package/SelectPicker/styles/index.scss +44 -0
- package/Sidebar/styles/index.scss +17 -0
- package/Sidenav/styles/index.scss +635 -0
- package/Sidenav/styles/mixin.scss +23 -0
- package/Slider/styles/index.scss +298 -0
- package/Stack/styles/_variables.scss +11 -0
- package/Stack/styles/index.scss +79 -0
- package/Stat/styles/index.scss +126 -0
- package/StatGroup/styles/index.scss +10 -0
- package/Steps/styles/index.scss +222 -0
- package/Table/styles/index.scss +473 -0
- package/Table/styles/mixin.scss +8 -0
- package/Tabs/styles/index.scss +24 -0
- package/Tag/styles/_variables.scss +13 -0
- package/Tag/styles/index.scss +62 -0
- package/TagGroup/styles/index.scss +14 -0
- package/TagInput/styles/index.scss +5 -0
- package/TagPicker/styles/index.scss +141 -0
- package/Text/styles/index.scss +142 -0
- package/Text/styles/variables.scss +9 -0
- package/Textarea/styles/index.scss +9 -0
- package/TimePicker/styles/index.scss +1 -0
- package/TimeRangePicker/styles/index.scss +1 -0
- package/Timeline/stories/styles.scss +29 -0
- package/Timeline/styles/_mixin.scss +13 -0
- package/Timeline/styles/index.scss +187 -0
- package/Toggle/styles/index.scss +284 -0
- package/Tooltip/styles/index.scss +160 -0
- package/Tooltip/styles/mixins.scss +56 -0
- package/Tree/styles/_indent-line.scss +8 -0
- package/Tree/styles/_toggle.scss +32 -0
- package/Tree/styles/_variables.scss +8 -0
- package/Tree/styles/index.scss +184 -0
- package/TreePicker/styles/index.scss +16 -0
- package/Uploader/styles/_mixin.scss +11 -0
- package/Uploader/styles/index.scss +491 -0
- package/VisuallyHidden/styles/index.scss +11 -0
- package/cjs/Breadcrumb/BreadcrumbItem.js +12 -7
- package/cjs/Cascader/Cascader.js +1 -1
- package/cjs/CheckPicker/CheckPicker.js +1 -1
- package/cjs/CheckTree/CheckTree.js +3 -0
- package/cjs/CheckTree/CheckTreeView.js +7 -3
- package/cjs/CheckTree/hooks/useTreeCheckState.d.ts +1 -0
- package/cjs/CheckTree/hooks/useTreeCheckState.js +54 -3
- package/cjs/CheckTree/utils.d.ts +9 -2
- package/cjs/CheckTree/utils.js +70 -11
- package/cjs/CheckTreePicker/CheckTreePicker.js +2 -1
- package/cjs/Checkbox/Checkbox.js +2 -1
- package/cjs/Checkbox/hooks/useIndeterminateCheckbox.d.ts +19 -0
- package/cjs/Checkbox/hooks/useIndeterminateCheckbox.js +32 -0
- package/cjs/DateInput/DateInput.js +24 -0
- package/cjs/DateInput/hooks/useKeyboardInputEvent.d.ts +2 -1
- package/cjs/DateInput/hooks/useKeyboardInputEvent.js +14 -0
- package/cjs/DatePicker/DatePicker.js +1 -1
- package/cjs/DateRangeInput/DateRangeInput.js +24 -0
- package/cjs/DateRangePicker/DateRangePicker.js +1 -1
- package/cjs/Form/Form.js +5 -1
- package/cjs/InputPicker/InputPicker.js +1 -1
- package/cjs/MultiCascader/MultiCascader.js +1 -1
- package/cjs/Panel/PanelHeader.d.ts +1 -1
- package/cjs/Panel/PanelHeader.js +4 -5
- package/cjs/Rate/Rate.d.ts +8 -0
- package/cjs/Rate/Rate.js +3 -1
- package/cjs/SelectPicker/SelectPicker.js +1 -1
- package/cjs/Tree/hooks/useFlattenTree.d.ts +4 -0
- package/cjs/Tree/hooks/useFlattenTree.js +22 -1
- package/cjs/Tree/hooks/useFocusTree.js +19 -1
- package/cjs/Tree/hooks/useVirtualizedTreeData.d.ts +1 -0
- package/cjs/Tree/hooks/useVirtualizedTreeData.js +5 -2
- package/cjs/Tree/utils/focusableTree.d.ts +8 -0
- package/cjs/Tree/utils/focusableTree.js +40 -2
- package/cjs/Tree/utils/index.d.ts +1 -1
- package/cjs/Tree/utils/index.js +3 -1
- package/cjs/TreePicker/TreePicker.js +1 -1
- package/cjs/internals/Picker/PickerToggleTrigger.d.ts +2 -0
- package/cjs/internals/Picker/PickerToggleTrigger.js +3 -1
- package/cjs/internals/Picker/utils.d.ts +2 -0
- package/cjs/internals/Picker/utils.js +13 -1
- package/cjs/internals/StyledBox/StyledBox.d.ts +1 -1
- package/cjs/internals/StyledBox/StyledBox.js +2 -2
- package/dist/rsuite.js +40 -29
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Breadcrumb/BreadcrumbItem.js +10 -5
- package/esm/Cascader/Cascader.js +1 -1
- package/esm/CheckPicker/CheckPicker.js +1 -1
- package/esm/CheckTree/CheckTree.js +3 -0
- package/esm/CheckTree/CheckTreeView.js +7 -3
- package/esm/CheckTree/hooks/useTreeCheckState.d.ts +1 -0
- package/esm/CheckTree/hooks/useTreeCheckState.js +55 -4
- package/esm/CheckTree/utils.d.ts +9 -2
- package/esm/CheckTree/utils.js +71 -12
- package/esm/CheckTreePicker/CheckTreePicker.js +2 -1
- package/esm/Checkbox/Checkbox.js +3 -2
- package/esm/Checkbox/hooks/useIndeterminateCheckbox.d.ts +19 -0
- package/esm/Checkbox/hooks/useIndeterminateCheckbox.js +29 -0
- package/esm/DateInput/DateInput.js +24 -0
- package/esm/DateInput/hooks/useKeyboardInputEvent.d.ts +2 -1
- package/esm/DateInput/hooks/useKeyboardInputEvent.js +14 -0
- package/esm/DatePicker/DatePicker.js +1 -1
- package/esm/DateRangeInput/DateRangeInput.js +24 -0
- package/esm/DateRangePicker/DateRangePicker.js +1 -1
- package/esm/Form/Form.js +5 -1
- package/esm/InputPicker/InputPicker.js +1 -1
- package/esm/MultiCascader/MultiCascader.js +1 -1
- package/esm/Panel/PanelHeader.d.ts +1 -1
- package/esm/Panel/PanelHeader.js +4 -5
- package/esm/Rate/Rate.d.ts +8 -0
- package/esm/Rate/Rate.js +3 -1
- package/esm/SelectPicker/SelectPicker.js +1 -1
- package/esm/Tree/hooks/useFlattenTree.d.ts +4 -0
- package/esm/Tree/hooks/useFlattenTree.js +22 -1
- package/esm/Tree/hooks/useFocusTree.js +20 -2
- package/esm/Tree/hooks/useVirtualizedTreeData.d.ts +1 -0
- package/esm/Tree/hooks/useVirtualizedTreeData.js +5 -2
- package/esm/Tree/utils/focusableTree.d.ts +8 -0
- package/esm/Tree/utils/focusableTree.js +36 -0
- package/esm/Tree/utils/index.d.ts +1 -1
- package/esm/Tree/utils/index.js +1 -1
- package/esm/TreePicker/TreePicker.js +1 -1
- package/esm/internals/Picker/PickerToggleTrigger.d.ts +2 -0
- package/esm/internals/Picker/PickerToggleTrigger.js +3 -1
- package/esm/internals/Picker/utils.d.ts +2 -0
- package/esm/internals/Picker/utils.js +13 -1
- package/esm/internals/StyledBox/StyledBox.d.ts +1 -1
- package/esm/internals/StyledBox/StyledBox.js +2 -2
- package/internals/Box/styles/index.scss +31 -0
- package/internals/Burger/styles/index.scss +72 -0
- package/internals/CloseButton/styles/index.scss +14 -0
- package/internals/Picker/styles/_mixin.scss +219 -0
- package/internals/Picker/styles/_variables.scss +9 -0
- package/internals/Picker/styles/index.scss +476 -0
- package/internals/Ripple/styles/_mixins.scss +10 -0
- package/internals/Ripple/styles/index.scss +40 -0
- package/internals/ScrollView/styles/index.scss +77 -0
- package/internals/SearchBox/styles/index.scss +7 -0
- package/package.json +4 -4
- package/styles/_base.scss +37 -0
- package/styles/_css-reset.scss +345 -0
- package/styles/_themes.scss +132 -0
- package/styles/_variables.scss +48 -0
- package/styles/color-modes/_dark.scss +458 -0
- package/styles/color-modes/_high-contrast.scss +469 -0
- package/styles/color-modes/_light.scss +475 -0
- package/styles/colors/_colors-base.scss +39 -0
- package/styles/colors/_dark.scss +114 -0
- package/styles/colors/_high-contrast.scss +114 -0
- package/styles/colors/_light.scss +115 -0
- package/styles/colors/_palette.scss +413 -0
- package/styles/components.scss +114 -0
- package/styles/index.scss +2 -0
- package/styles/mixins/_color-modes.scss +20 -0
- package/styles/mixins/_combobox.scss +6 -0
- package/styles/mixins/_hacks.scss +33 -0
- package/styles/mixins/_input.scss +30 -0
- package/styles/mixins/_listbox.scss +70 -0
- package/styles/mixins/_menu.scss +12 -0
- package/styles/mixins/_utilities.scss +130 -0
- package/toaster/styles/animation.scss +54 -0
- package/toaster/styles/index.scss +109 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
package/esm/Panel/PanelHeader.js
CHANGED
|
@@ -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 =
|
|
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("
|
|
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,
|
package/esm/Rate/Rate.d.ts
CHANGED
|
@@ -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
|
-
|
|
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';
|
package/esm/Tree/utils/index.js
CHANGED
|
@@ -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";
|
|
@@ -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
|
-
|
|
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
|
-
/**
|
|
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,
|
|
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
|
+
}
|