rsuite 6.0.1 → 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 +20 -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/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 +1 -0
- 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/DateRangeInput/DateRangeInput.js +24 -0
- package/cjs/Form/Form.js +5 -1
- package/cjs/Rate/Rate.d.ts +8 -0
- package/cjs/Rate/Rate.js +3 -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/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 +34 -23
- 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/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 +1 -0
- 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/DateRangeInput/DateRangeInput.js +24 -0
- package/esm/Form/Form.js +5 -1
- package/esm/Rate/Rate.d.ts +8 -0
- package/esm/Rate/Rate.js +3 -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/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/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,
|
|
@@ -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";
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use '../../../styles/mixins/color-modes';
|
|
3
|
+
@use '../../../Dropdown/styles/mixin' as dropdown;
|
|
4
|
+
|
|
5
|
+
// Picker Menu items common styles
|
|
6
|
+
@mixin picker-listbox-reset {
|
|
7
|
+
overflow-y: auto;
|
|
8
|
+
|
|
9
|
+
ul {
|
|
10
|
+
list-style: none;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Picker Menu group common styles
|
|
17
|
+
@mixin picker-menu-group-common($prefix) {
|
|
18
|
+
// Set border & padding to menu group if it isn't the first.
|
|
19
|
+
.rs-#{$prefix}-menu-group:not(:first-child) {
|
|
20
|
+
margin-top: var(--rs-picker-group-select-menu-gap);
|
|
21
|
+
border-top: 1px solid var(--rs-divider-border);
|
|
22
|
+
padding-top: var(--rs-picker-group-select-menu-gap);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Group title common styles
|
|
27
|
+
@mixin picker-menu-group-title($prefix) {
|
|
28
|
+
.rs-#{$prefix}-menu-group-title {
|
|
29
|
+
padding-block: var(--rs-picker-item-content-padding-vertical);
|
|
30
|
+
padding-inline: var(--rs-picker-item-content-padding-horizontal);
|
|
31
|
+
padding-inline-end: calc(var(--rs-padding-inline-md) + 20px);
|
|
32
|
+
position: relative;
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
color: var(--rs-text-heading);
|
|
35
|
+
|
|
36
|
+
.rs-#{$prefix}-menu-group-caret {
|
|
37
|
+
display: inline-block;
|
|
38
|
+
margin-inline-start: 2px;
|
|
39
|
+
position: absolute;
|
|
40
|
+
top: var(--rs-padding-block-md);
|
|
41
|
+
inset-inline-end: var(--rs-padding-inline-md);
|
|
42
|
+
color: var(--rs-text-secondary);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Group closed common styles
|
|
48
|
+
@mixin picker-menu-group-closed($prefix) {
|
|
49
|
+
.rs-#{$prefix}-menu-group.folded {
|
|
50
|
+
.rs-#{$prefix}-menu-group-caret {
|
|
51
|
+
transform: rotate(90deg);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@mixin picker-item-hover {
|
|
57
|
+
color: var(--rs-text-primary);
|
|
58
|
+
background-color: var(--rs-state-hover-bg);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@mixin picker-item-active {
|
|
62
|
+
font-weight: var(--rs-picker-select-menu-item-selected-font-weight);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@mixin picker-calendar-cell-content {
|
|
66
|
+
display: inline-block;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
font-size: var(--rs-calendar-cell-font-size);
|
|
69
|
+
line-height: var(--rs-calendar-cell-line-height);
|
|
70
|
+
padding: var(--rs-calendar-cell-padding);
|
|
71
|
+
border-radius: var(--rs-calendar-border-radius);
|
|
72
|
+
|
|
73
|
+
&:hover {
|
|
74
|
+
background-color: var(--rs-state-hover-bg);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@mixin picker-calendar-cell-content-selected {
|
|
79
|
+
color: var(--rs-calendar-date-selected-text);
|
|
80
|
+
background-color: var(--rs-bg-active);
|
|
81
|
+
box-shadow: none;
|
|
82
|
+
|
|
83
|
+
@include color-modes.high-contrast-mode {
|
|
84
|
+
text-decoration: underline;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@mixin picker-calendar-title-show {
|
|
89
|
+
color: var(--rs-text-active);
|
|
90
|
+
background: transparent;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Default picker toggle
|
|
94
|
+
@mixin picker-default-toggle {
|
|
95
|
+
[data-appearance='default'] & {
|
|
96
|
+
color: var(--rs-text-primary);
|
|
97
|
+
border-width: var(--rs-picker-toggle-border-width);
|
|
98
|
+
border-color: var(--rs-picker-toggle-border-color);
|
|
99
|
+
border-style: solid;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[data-disabled='true'] & {
|
|
103
|
+
cursor: var(--rs-cursor-disabled);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
[data-appearance='default']:not([data-disabled='true']) {
|
|
107
|
+
&:focus {
|
|
108
|
+
border-color: var(--rs-input-focus-border);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Subtle picker toggle
|
|
114
|
+
@mixin picker-subtle-toggle {
|
|
115
|
+
.rs-picker[data-appearance='subtle'] & {
|
|
116
|
+
--rs-picker-toggle-border-width: 0px;
|
|
117
|
+
@include dropdown.dropdown-toggle;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.rs-picker[data-appearance='subtle'][data-disabled='true'] & {
|
|
121
|
+
cursor: var(--rs-cursor-disabled);
|
|
122
|
+
|
|
123
|
+
&:focus,
|
|
124
|
+
&:active {
|
|
125
|
+
background: none;
|
|
126
|
+
|
|
127
|
+
&::after {
|
|
128
|
+
display: none;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Group closed common styles
|
|
135
|
+
@mixin picker-menu-group-closed($prefix) {
|
|
136
|
+
.rs-#{$prefix}-menu-group.folded {
|
|
137
|
+
.rs-#{$prefix}-menu-group-caret {
|
|
138
|
+
transform: rotate(90deg);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@mixin picker-item-hover {
|
|
144
|
+
color: var(--rs-text-primary);
|
|
145
|
+
background-color: var(--rs-state-hover-bg);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@mixin picker-item-active {
|
|
149
|
+
font-weight: var(--rs-picker-select-menu-item-selected-font-weight);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@mixin picker-calendar-cell-content {
|
|
153
|
+
display: inline-block;
|
|
154
|
+
cursor: pointer;
|
|
155
|
+
font-size: var(--rs-calendar-cell-font-size);
|
|
156
|
+
line-height: var(--rs-calendar-cell-line-height);
|
|
157
|
+
padding: var(--rs-calendar-cell-padding);
|
|
158
|
+
border-radius: var(--rs-calendar-border-radius);
|
|
159
|
+
|
|
160
|
+
&:hover {
|
|
161
|
+
background-color: var(--rs-state-hover-bg);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@mixin picker-calendar-cell-content-selected {
|
|
166
|
+
color: var(--rs-calendar-date-selected-text);
|
|
167
|
+
background-color: var(--rs-bg-active);
|
|
168
|
+
box-shadow: none;
|
|
169
|
+
|
|
170
|
+
@include color-modes.high-contrast-mode {
|
|
171
|
+
text-decoration: underline;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@mixin picker-calendar-title-show {
|
|
176
|
+
color: var(--rs-text-active);
|
|
177
|
+
background: transparent;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Default picker toggle
|
|
181
|
+
@mixin picker-default-toggle {
|
|
182
|
+
[data-appearance='default'] & {
|
|
183
|
+
color: var(--rs-text-primary);
|
|
184
|
+
border-width: var(--rs-picker-toggle-border-width);
|
|
185
|
+
border-color: var(--rs-picker-toggle-border-color);
|
|
186
|
+
border-style: solid;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
[data-disabled='true'] & {
|
|
190
|
+
cursor: var(--rs-cursor-disabled);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
[data-appearance='default']:not([data-disabled='true']) {
|
|
194
|
+
&:focus {
|
|
195
|
+
border-color: var(--rs-input-focus-border);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Subtle picker toggle
|
|
201
|
+
@mixin picker-subtle-toggle {
|
|
202
|
+
.rs-picker[data-appearance='subtle'] & {
|
|
203
|
+
--rs-picker-toggle-border-width: 0px;
|
|
204
|
+
@include dropdown.dropdown-toggle;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.rs-picker[data-appearance='subtle'][data-disabled='true'] & {
|
|
208
|
+
cursor: var(--rs-cursor-disabled);
|
|
209
|
+
|
|
210
|
+
&:focus,
|
|
211
|
+
&:active {
|
|
212
|
+
background: none;
|
|
213
|
+
|
|
214
|
+
&::after {
|
|
215
|
+
display: none;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Picker variables
|
|
2
|
+
:root {
|
|
3
|
+
--rs-picker-transition: var(--rs-input-transition);
|
|
4
|
+
--rs-picker-select-menu-item-selected-font-weight: bold;
|
|
5
|
+
--rs-picker-group-select-menu-gap: 6px;
|
|
6
|
+
--rs-picker-menu-padding: 12px;
|
|
7
|
+
--rs-picker-item-content-padding-vertical: 8px;
|
|
8
|
+
--rs-picker-item-content-padding-horizontal: var(--rs-picker-menu-padding);
|
|
9
|
+
}
|