rsuite 5.60.2 → 5.61.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.css +4 -4
- package/AutoComplete/styles/index.css +58 -22
- package/Button/styles/index.css +12 -8
- package/Button/styles/mixin.less +1 -1
- package/CHANGELOG.md +25 -0
- package/Calendar/styles/index.css +16 -15
- package/CascadeTree/styles/index.css +11 -9
- package/CascadeTree/styles/index.less +7 -0
- package/CascadeTree/styles/search.less +0 -10
- package/Cascader/styles/index.css +60 -31
- package/CheckPicker/styles/index.css +59 -27
- package/CheckPicker/styles/index.less +3 -3
- package/CheckTree/styles/index.css +160 -134
- package/CheckTree/styles/index.less +141 -1
- package/CheckTreePicker/styles/index.css +170 -126
- package/CheckTreePicker/styles/index.less +8 -181
- package/Checkbox/styles/index.css +7 -8
- package/Checkbox/styles/index.less +1 -5
- package/DateInput/styles/index.css +4 -4
- package/DatePicker/styles/index.css +62 -26
- package/DateRangeInput/styles/index.css +4 -4
- package/DateRangePicker/styles/index.css +67 -26
- package/DateRangePicker/styles/index.less +2 -0
- package/Dropdown/styles/index.css +14 -13
- package/Highlight/package.json +7 -0
- package/Highlight/styles/index.css +8 -0
- package/Highlight/styles/index.less +6 -0
- package/IconButton/styles/index.css +11 -10
- package/Input/styles/index.css +4 -4
- package/InputGroup/styles/index.css +18 -17
- package/InputGroup/styles/index.less +1 -1
- package/InputNumber/styles/index.css +19 -18
- package/InputPicker/styles/index.css +58 -22
- package/MultiCascadeTree/styles/index.css +61 -36
- package/MultiCascadeTree/styles/index.less +1 -1
- package/MultiCascader/styles/index.css +704 -679
- package/MultiCascader/styles/index.less +0 -1
- package/Nav/styles/index.css +15 -14
- package/Navbar/styles/index.css +14 -13
- package/Pagination/styles/index.css +62 -26
- package/Panel/styles/index.css +4 -4
- package/Placeholder/styles/index.css +2 -3
- package/Placeholder/styles/index.less +2 -3
- package/README.md +21 -39
- package/Radio/styles/index.css +7 -7
- package/Radio/styles/index.less +1 -5
- package/RangeSlider/styles/index.css +1 -1
- package/Rate/styles/index.css +1 -1
- package/Rate/styles/index.less +1 -1
- package/SelectPicker/styles/index.css +58 -22
- package/Slider/styles/index.css +1 -1
- package/Slider/styles/index.less +1 -1
- package/Steps/styles/index.css +6 -1
- package/Steps/styles/index.less +2 -1
- package/Tabs/styles/index.css +15 -14
- package/TagInput/styles/index.css +59 -27
- package/TagPicker/styles/index.css +59 -27
- package/Toggle/styles/index.css +10 -7
- package/Tree/styles/indent-line.less +8 -0
- package/Tree/styles/index.css +140 -141
- package/Tree/styles/index.less +188 -1
- package/Tree/styles/toggle.less +36 -0
- package/TreePicker/styles/index.css +142 -134
- package/TreePicker/styles/index.less +4 -234
- package/Uploader/styles/index.css +12 -11
- package/cjs/@types/common.d.ts +41 -4
- package/cjs/AutoComplete/AutoComplete.js +2 -1
- package/cjs/CascadeTree/CascadeTree.js +8 -7
- package/cjs/CascadeTree/SearchView.js +7 -14
- package/cjs/CascadeTree/hooks/usePaths.js +4 -4
- package/cjs/CascadeTree/hooks/useSearch.js +2 -1
- package/cjs/CascadeTree/utils.d.ts +0 -11
- package/cjs/CascadeTree/utils.js +0 -23
- package/cjs/Cascader/Cascader.js +17 -16
- package/cjs/CheckPicker/CheckPicker.js +26 -29
- package/cjs/CheckTree/CheckTree.d.ts +16 -0
- package/cjs/CheckTree/CheckTree.js +112 -0
- package/cjs/CheckTree/CheckTreeNode.d.ts +72 -0
- package/cjs/CheckTree/CheckTreeNode.js +117 -0
- package/cjs/CheckTree/CheckTreeView.d.ts +70 -0
- package/cjs/CheckTree/CheckTreeView.js +310 -0
- package/cjs/CheckTree/hooks/useTreeCheckState.d.ts +10 -0
- package/cjs/CheckTree/hooks/useTreeCheckState.js +93 -0
- package/cjs/CheckTree/hooks/useTreeNodeProps.d.ts +22 -0
- package/cjs/CheckTree/hooks/useTreeNodeProps.js +59 -0
- package/cjs/CheckTree/hooks/useTreeValue.d.ts +5 -0
- package/cjs/CheckTree/hooks/useTreeValue.js +21 -0
- package/cjs/CheckTree/index.d.ts +2 -14
- package/cjs/CheckTree/index.js +2 -23
- package/cjs/CheckTree/utils.d.ts +53 -0
- package/cjs/{CheckTreePicker → CheckTree}/utils.js +76 -26
- package/cjs/CheckTreePicker/CheckTreePicker.d.ts +30 -12
- package/cjs/CheckTreePicker/CheckTreePicker.js +153 -603
- package/cjs/CheckTreePicker/hooks/useFocusState.d.ts +16 -0
- package/cjs/CheckTreePicker/hooks/useFocusState.js +42 -0
- package/cjs/DatePicker/DatePicker.d.ts +4 -0
- package/cjs/DatePicker/DatePicker.js +20 -5
- package/cjs/DatePicker/types.d.ts +0 -4
- package/cjs/DateRangePicker/DateRangePicker.d.ts +51 -23
- package/cjs/DateRangePicker/DateRangePicker.js +71 -51
- package/cjs/DateRangePicker/hooks/useDateDisabled.d.ts +16 -0
- package/cjs/DateRangePicker/hooks/useDateDisabled.js +31 -0
- package/cjs/DateRangePicker/types.d.ts +1 -0
- package/cjs/Highlight/Highlight.d.ts +14 -0
- package/cjs/Highlight/Highlight.js +58 -0
- package/cjs/Highlight/index.d.ts +3 -0
- package/cjs/Highlight/index.js +9 -0
- package/cjs/Highlight/utils/highlightText.d.ts +5 -0
- package/cjs/Highlight/utils/highlightText.js +29 -0
- package/cjs/InputPicker/InputPicker.js +37 -41
- package/cjs/MultiCascadeTree/SearchView.js +6 -14
- package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +15 -1
- package/cjs/MultiCascadeTree/hooks/useColumnData.js +2 -2
- package/cjs/MultiCascadeTree/hooks/useFlattenData.js +3 -3
- package/cjs/MultiCascadeTree/hooks/useSearch.js +2 -1
- package/cjs/MultiCascadeTree/utils.d.ts +4 -4
- package/cjs/MultiCascadeTree/utils.js +20 -11
- package/cjs/MultiCascader/MultiCascader.js +12 -12
- package/cjs/SelectPicker/SelectPicker.js +2 -6
- package/cjs/Tree/IndentLine.d.ts +3 -0
- package/cjs/Tree/IndentLine.js +18 -0
- package/cjs/Tree/Tree.d.ts +4 -92
- package/cjs/Tree/Tree.js +79 -20
- package/cjs/Tree/TreeNode.d.ts +101 -0
- package/cjs/Tree/TreeNode.js +147 -0
- package/cjs/Tree/TreeNodeToggle.d.ts +9 -0
- package/cjs/Tree/TreeNodeToggle.js +56 -0
- package/cjs/Tree/TreeProvider.d.ts +52 -0
- package/cjs/Tree/TreeProvider.js +84 -0
- package/cjs/Tree/TreeView.d.ts +68 -0
- package/cjs/Tree/TreeView.js +305 -0
- package/cjs/Tree/hooks/useExpandTree.d.ts +60 -0
- package/cjs/Tree/hooks/useExpandTree.js +77 -0
- package/cjs/Tree/hooks/useFlattenTree.d.ts +42 -0
- package/cjs/Tree/hooks/useFlattenTree.js +98 -0
- package/cjs/Tree/hooks/useFocusTree.d.ts +24 -0
- package/cjs/Tree/hooks/useFocusTree.js +158 -0
- package/cjs/Tree/hooks/useForceUpdate.d.ts +2 -0
- package/cjs/Tree/hooks/useForceUpdate.js +16 -0
- package/cjs/Tree/hooks/useTreeDrag.d.ts +32 -0
- package/cjs/Tree/hooks/useTreeDrag.js +268 -0
- package/cjs/Tree/hooks/useTreeNodeProps.d.ts +29 -0
- package/cjs/Tree/hooks/useTreeNodeProps.js +83 -0
- package/cjs/Tree/hooks/useTreeNodeRefs.d.ts +6 -0
- package/cjs/Tree/hooks/useTreeNodeRefs.js +22 -0
- package/cjs/Tree/hooks/useTreeSearch.d.ts +18 -0
- package/cjs/Tree/hooks/useTreeSearch.js +74 -0
- package/cjs/Tree/hooks/useTreeWithChildren.d.ts +14 -0
- package/cjs/Tree/hooks/useTreeWithChildren.js +64 -0
- package/cjs/Tree/hooks/useVirtualizedTreeData.d.ts +7 -0
- package/cjs/Tree/hooks/useVirtualizedTreeData.js +82 -0
- package/cjs/Tree/types.d.ts +257 -0
- package/cjs/Tree/types.js +33 -0
- package/cjs/Tree/utils/flattenTree.d.ts +25 -0
- package/cjs/Tree/utils/flattenTree.js +95 -0
- package/cjs/Tree/utils/focusableTree.d.ts +55 -0
- package/cjs/Tree/utils/focusableTree.js +157 -0
- package/cjs/Tree/utils/formatNodeRefKey.d.ts +4 -0
- package/cjs/Tree/utils/formatNodeRefKey.js +11 -0
- package/cjs/Tree/utils/getExpandItemValues.d.ts +11 -0
- package/cjs/Tree/utils/getExpandItemValues.js +21 -0
- package/cjs/Tree/utils/getNodeParentKeys.d.ts +5 -0
- package/cjs/Tree/utils/getNodeParentKeys.js +21 -0
- package/cjs/Tree/utils/getTreeActiveNode.d.ts +5 -0
- package/cjs/Tree/utils/getTreeActiveNode.js +21 -0
- package/cjs/Tree/utils/hasVisibleChildren.d.ts +5 -0
- package/cjs/Tree/utils/hasVisibleChildren.js +16 -0
- package/cjs/Tree/utils/indentTreeNode.d.ts +3 -0
- package/cjs/Tree/utils/indentTreeNode.js +18 -0
- package/cjs/Tree/utils/index.d.ts +11 -0
- package/cjs/Tree/utils/index.js +35 -0
- package/cjs/Tree/utils/isExpand.d.ts +6 -0
- package/cjs/Tree/utils/isExpand.js +14 -0
- package/cjs/Tree/utils/isSearching.d.ts +1 -0
- package/cjs/Tree/utils/isSearching.js +10 -0
- package/cjs/Tree/utils/treeKeyboardInteractions.d.ts +21 -0
- package/cjs/Tree/utils/treeKeyboardInteractions.js +49 -0
- package/cjs/TreePicker/TreePicker.d.ts +27 -21
- package/cjs/TreePicker/TreePicker.js +155 -575
- package/cjs/TreePicker/hooks/useFocusState.d.ts +20 -0
- package/cjs/TreePicker/hooks/useFocusState.js +53 -0
- package/cjs/index.d.ts +2 -0
- package/cjs/index.js +3 -1
- package/cjs/internals/Picker/Listbox.d.ts +40 -10
- package/cjs/internals/Picker/Listbox.js +21 -16
- package/cjs/internals/Picker/PickerIndicator.d.ts +2 -1
- package/cjs/internals/Picker/PickerIndicator.js +7 -3
- package/cjs/internals/Picker/hooks/useFocusItemValue.js +4 -4
- package/cjs/internals/Picker/hooks/usePickerRef.d.ts +1 -4
- package/cjs/internals/Picker/hooks/usePickerRef.js +3 -20
- package/cjs/internals/Picker/index.d.ts +0 -1
- package/cjs/internals/Picker/index.js +1 -4
- package/cjs/internals/Picker/utils.js +12 -12
- package/cjs/internals/{Picker → Tree}/TreeView.js +1 -1
- package/cjs/internals/Tree/index.d.ts +1 -0
- package/cjs/internals/Tree/index.js +8 -0
- package/cjs/internals/Tree/utils/filterNodesOfTree.d.ts +5 -0
- package/cjs/internals/Tree/utils/filterNodesOfTree.js +31 -0
- package/cjs/internals/Tree/utils/findNodeOfTree.d.ts +1 -0
- package/cjs/internals/Tree/utils/findNodeOfTree.js +26 -0
- package/cjs/internals/Tree/utils/getParentMap.d.ts +15 -0
- package/cjs/internals/Tree/utils/getParentMap.js +52 -0
- package/cjs/internals/Tree/utils/getPathTowardsItem.d.ts +4 -0
- package/cjs/internals/Tree/utils/getPathTowardsItem.js +16 -0
- package/cjs/internals/Tree/utils/index.d.ts +4 -0
- package/cjs/internals/Tree/utils/index.js +14 -0
- package/cjs/internals/Windowing/List.d.ts +1 -0
- package/cjs/internals/Windowing/List.js +5 -1
- package/cjs/internals/Windowing/index.d.ts +1 -1
- package/cjs/internals/Windowing/index.js +4 -2
- package/cjs/internals/hooks/index.d.ts +1 -0
- package/cjs/internals/hooks/index.js +8 -0
- package/cjs/internals/hooks/useFoucsVirtualListItem.d.ts +7 -0
- package/cjs/internals/hooks/useFoucsVirtualListItem.js +26 -0
- package/cjs/{utils → internals/utils}/getSafeRegExpString.d.ts +1 -1
- package/cjs/{utils → internals/utils}/getSafeRegExpString.js +1 -1
- package/cjs/internals/utils/index.d.ts +2 -0
- package/cjs/internals/utils/index.js +9 -0
- package/cjs/internals/utils/stringifyReactNode.d.ts +2 -0
- package/cjs/internals/utils/stringifyReactNode.js +17 -0
- package/cjs/utils/constants.d.ts +0 -2
- package/cjs/utils/constants.js +1 -6
- package/cjs/utils/getDataGroupBy.js +3 -3
- package/cjs/utils/index.d.ts +0 -3
- package/cjs/utils/index.js +1 -10
- package/cjs/utils/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/rsuite-no-reset-rtl.css +292 -300
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +294 -304
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +293 -301
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +295 -305
- package/dist/rsuite.js +611 -116
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/@types/common.d.ts +41 -4
- package/esm/AutoComplete/AutoComplete.js +2 -1
- package/esm/CascadeTree/CascadeTree.js +2 -1
- package/esm/CascadeTree/SearchView.js +6 -13
- package/esm/CascadeTree/hooks/usePaths.js +1 -1
- package/esm/CascadeTree/hooks/useSearch.js +2 -1
- package/esm/CascadeTree/utils.d.ts +0 -11
- package/esm/CascadeTree/utils.js +0 -22
- package/esm/Cascader/Cascader.js +2 -1
- package/esm/CheckPicker/CheckPicker.js +4 -7
- package/esm/CheckTree/CheckTree.d.ts +16 -0
- package/esm/CheckTree/CheckTree.js +105 -0
- package/esm/CheckTree/CheckTreeNode.d.ts +72 -0
- package/esm/CheckTree/CheckTreeNode.js +110 -0
- package/esm/CheckTree/CheckTreeView.d.ts +70 -0
- package/esm/CheckTree/CheckTreeView.js +304 -0
- package/esm/CheckTree/hooks/useTreeCheckState.d.ts +10 -0
- package/esm/CheckTree/hooks/useTreeCheckState.js +87 -0
- package/esm/CheckTree/hooks/useTreeNodeProps.d.ts +22 -0
- package/esm/CheckTree/hooks/useTreeNodeProps.js +52 -0
- package/esm/CheckTree/hooks/useTreeValue.d.ts +5 -0
- package/esm/CheckTree/hooks/useTreeValue.js +16 -0
- package/esm/CheckTree/index.d.ts +2 -14
- package/esm/CheckTree/index.js +1 -21
- package/esm/CheckTree/utils.d.ts +53 -0
- package/esm/{CheckTreePicker → CheckTree}/utils.js +72 -22
- package/esm/CheckTreePicker/CheckTreePicker.d.ts +30 -12
- package/esm/CheckTreePicker/CheckTreePicker.js +156 -607
- package/esm/CheckTreePicker/hooks/useFocusState.d.ts +16 -0
- package/esm/CheckTreePicker/hooks/useFocusState.js +37 -0
- package/esm/DatePicker/DatePicker.d.ts +4 -0
- package/esm/DatePicker/DatePicker.js +20 -5
- package/esm/DatePicker/types.d.ts +0 -4
- package/esm/DateRangePicker/DateRangePicker.d.ts +51 -23
- package/esm/DateRangePicker/DateRangePicker.js +71 -51
- package/esm/DateRangePicker/hooks/useDateDisabled.d.ts +16 -0
- package/esm/DateRangePicker/hooks/useDateDisabled.js +26 -0
- package/esm/DateRangePicker/types.d.ts +1 -0
- package/esm/Highlight/Highlight.d.ts +14 -0
- package/esm/Highlight/Highlight.js +52 -0
- package/esm/Highlight/index.d.ts +3 -0
- package/esm/Highlight/index.js +3 -0
- package/esm/Highlight/utils/highlightText.d.ts +5 -0
- package/esm/Highlight/utils/highlightText.js +25 -0
- package/esm/InputPicker/InputPicker.js +3 -7
- package/esm/MultiCascadeTree/SearchView.js +6 -14
- package/esm/MultiCascadeTree/hooks/useCascadeValue.js +15 -1
- package/esm/MultiCascadeTree/hooks/useColumnData.js +1 -1
- package/esm/MultiCascadeTree/hooks/useFlattenData.js +1 -1
- package/esm/MultiCascadeTree/hooks/useSearch.js +2 -1
- package/esm/MultiCascadeTree/utils.d.ts +4 -4
- package/esm/MultiCascadeTree/utils.js +18 -9
- package/esm/MultiCascader/MultiCascader.js +1 -1
- package/esm/SelectPicker/SelectPicker.js +2 -6
- package/esm/Tree/IndentLine.d.ts +3 -0
- package/esm/Tree/IndentLine.js +12 -0
- package/esm/Tree/Tree.d.ts +4 -92
- package/esm/Tree/Tree.js +78 -18
- package/esm/Tree/TreeNode.d.ts +101 -0
- package/esm/Tree/TreeNode.js +141 -0
- package/esm/Tree/TreeNodeToggle.d.ts +9 -0
- package/esm/Tree/TreeNodeToggle.js +50 -0
- package/esm/Tree/TreeProvider.d.ts +52 -0
- package/esm/Tree/TreeProvider.js +74 -0
- package/esm/Tree/TreeView.d.ts +68 -0
- package/esm/Tree/TreeView.js +299 -0
- package/esm/Tree/hooks/useExpandTree.d.ts +60 -0
- package/esm/Tree/hooks/useExpandTree.js +70 -0
- package/esm/Tree/hooks/useFlattenTree.d.ts +42 -0
- package/esm/Tree/hooks/useFlattenTree.js +92 -0
- package/esm/Tree/hooks/useFocusTree.d.ts +24 -0
- package/esm/Tree/hooks/useFocusTree.js +153 -0
- package/esm/Tree/hooks/useForceUpdate.d.ts +2 -0
- package/esm/Tree/hooks/useForceUpdate.js +11 -0
- package/esm/Tree/hooks/useTreeDrag.d.ts +32 -0
- package/esm/Tree/hooks/useTreeDrag.js +264 -0
- package/esm/Tree/hooks/useTreeNodeProps.d.ts +29 -0
- package/esm/Tree/hooks/useTreeNodeProps.js +76 -0
- package/esm/Tree/hooks/useTreeNodeRefs.d.ts +6 -0
- package/esm/Tree/hooks/useTreeNodeRefs.js +18 -0
- package/esm/Tree/hooks/useTreeSearch.d.ts +18 -0
- package/esm/Tree/hooks/useTreeSearch.js +69 -0
- package/esm/Tree/hooks/useTreeWithChildren.d.ts +14 -0
- package/esm/Tree/hooks/useTreeWithChildren.js +59 -0
- package/esm/Tree/hooks/useVirtualizedTreeData.d.ts +7 -0
- package/esm/Tree/hooks/useVirtualizedTreeData.js +77 -0
- package/esm/Tree/types.d.ts +257 -0
- package/esm/Tree/types.js +30 -0
- package/esm/Tree/utils/flattenTree.d.ts +25 -0
- package/esm/Tree/utils/flattenTree.js +88 -0
- package/esm/Tree/utils/focusableTree.d.ts +55 -0
- package/esm/Tree/utils/focusableTree.js +146 -0
- package/esm/Tree/utils/formatNodeRefKey.d.ts +4 -0
- package/esm/Tree/utils/formatNodeRefKey.js +7 -0
- package/esm/Tree/utils/getExpandItemValues.d.ts +11 -0
- package/esm/Tree/utils/getExpandItemValues.js +17 -0
- package/esm/Tree/utils/getNodeParentKeys.d.ts +5 -0
- package/esm/Tree/utils/getNodeParentKeys.js +17 -0
- package/esm/Tree/utils/getTreeActiveNode.d.ts +5 -0
- package/esm/Tree/utils/getTreeActiveNode.js +16 -0
- package/esm/Tree/utils/hasVisibleChildren.d.ts +5 -0
- package/esm/Tree/utils/hasVisibleChildren.js +12 -0
- package/esm/Tree/utils/indentTreeNode.d.ts +3 -0
- package/esm/Tree/utils/indentTreeNode.js +14 -0
- package/esm/Tree/utils/index.d.ts +11 -0
- package/esm/Tree/utils/index.js +14 -0
- package/esm/Tree/utils/isExpand.d.ts +6 -0
- package/esm/Tree/utils/isExpand.js +11 -0
- package/esm/Tree/utils/isSearching.d.ts +1 -0
- package/esm/Tree/utils/isSearching.js +5 -0
- package/esm/Tree/utils/treeKeyboardInteractions.d.ts +21 -0
- package/esm/Tree/utils/treeKeyboardInteractions.js +43 -0
- package/esm/TreePicker/TreePicker.d.ts +27 -21
- package/esm/TreePicker/TreePicker.js +158 -579
- package/esm/TreePicker/hooks/useFocusState.d.ts +20 -0
- package/esm/TreePicker/hooks/useFocusState.js +48 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.js +1 -0
- package/esm/internals/Picker/Listbox.d.ts +40 -10
- package/esm/internals/Picker/Listbox.js +22 -16
- package/esm/internals/Picker/PickerIndicator.d.ts +2 -1
- package/esm/internals/Picker/PickerIndicator.js +7 -3
- package/esm/internals/Picker/hooks/useFocusItemValue.js +1 -1
- package/esm/internals/Picker/hooks/usePickerRef.d.ts +1 -4
- package/esm/internals/Picker/hooks/usePickerRef.js +3 -20
- package/esm/internals/Picker/index.d.ts +0 -1
- package/esm/internals/Picker/index.js +0 -1
- package/esm/internals/Picker/utils.js +1 -1
- package/esm/internals/{Picker → Tree}/TreeView.js +1 -1
- package/esm/internals/Tree/index.d.ts +1 -0
- package/esm/internals/Tree/index.js +2 -0
- package/esm/internals/Tree/utils/filterNodesOfTree.d.ts +5 -0
- package/esm/internals/Tree/utils/filterNodesOfTree.js +26 -0
- package/esm/internals/Tree/utils/findNodeOfTree.d.ts +1 -0
- package/esm/internals/Tree/utils/findNodeOfTree.js +22 -0
- package/esm/internals/Tree/utils/getParentMap.d.ts +15 -0
- package/esm/internals/Tree/utils/getParentMap.js +47 -0
- package/esm/internals/Tree/utils/getPathTowardsItem.d.ts +4 -0
- package/esm/internals/Tree/utils/getPathTowardsItem.js +12 -0
- package/esm/internals/Tree/utils/index.d.ts +4 -0
- package/esm/internals/Tree/utils/index.js +5 -0
- package/esm/internals/Windowing/List.d.ts +1 -0
- package/esm/internals/Windowing/List.js +3 -0
- package/esm/internals/Windowing/index.d.ts +1 -1
- package/esm/internals/Windowing/index.js +1 -1
- package/esm/internals/hooks/index.d.ts +1 -0
- package/esm/internals/hooks/index.js +2 -0
- package/esm/internals/hooks/useFoucsVirtualListItem.d.ts +7 -0
- package/esm/internals/hooks/useFoucsVirtualListItem.js +22 -0
- package/esm/{utils → internals/utils}/getSafeRegExpString.d.ts +1 -1
- package/esm/{utils → internals/utils}/getSafeRegExpString.js +1 -1
- package/esm/internals/utils/index.d.ts +2 -0
- package/esm/internals/utils/index.js +3 -0
- package/esm/internals/utils/stringifyReactNode.d.ts +2 -0
- package/esm/internals/utils/stringifyReactNode.js +12 -0
- package/esm/utils/constants.d.ts +0 -2
- package/esm/utils/constants.js +0 -3
- package/esm/utils/getDataGroupBy.js +1 -1
- package/esm/utils/index.d.ts +0 -3
- package/esm/utils/index.js +0 -3
- package/esm/utils/useIsomorphicLayoutEffect.d.ts +2 -2
- package/internals/Picker/styles/index.less +27 -1
- package/package.json +1 -1
- package/styles/color-modes/dark.less +5 -1
- package/styles/color-modes/high-contrast.less +8 -2
- package/styles/color-modes/light.less +10 -5
- package/styles/index.less +1 -0
- package/TreePicker/styles/mixin.less +0 -7
- package/cjs/CheckTreePicker/CheckTreeNode.d.ts +0 -28
- package/cjs/CheckTreePicker/CheckTreeNode.js +0 -140
- package/cjs/CheckTreePicker/utils.d.ts +0 -44
- package/cjs/Tree/TreeContext.d.ts +0 -6
- package/cjs/Tree/TreeContext.js +0 -10
- package/cjs/TreePicker/TreeNode.d.ts +0 -36
- package/cjs/TreePicker/TreeNode.js +0 -174
- package/cjs/utils/appendTooltip.d.ts +0 -10
- package/cjs/utils/appendTooltip.js +0 -20
- package/cjs/utils/stringToObject.d.ts +0 -2
- package/cjs/utils/stringToObject.js +0 -19
- package/cjs/utils/treeUtils.d.ts +0 -304
- package/cjs/utils/treeUtils.js +0 -1095
- package/esm/CheckTreePicker/CheckTreeNode.d.ts +0 -28
- package/esm/CheckTreePicker/CheckTreeNode.js +0 -133
- package/esm/CheckTreePicker/utils.d.ts +0 -44
- package/esm/Tree/TreeContext.d.ts +0 -6
- package/esm/Tree/TreeContext.js +0 -4
- package/esm/TreePicker/TreeNode.d.ts +0 -36
- package/esm/TreePicker/TreeNode.js +0 -167
- package/esm/utils/appendTooltip.d.ts +0 -10
- package/esm/utils/appendTooltip.js +0 -15
- package/esm/utils/stringToObject.d.ts +0 -2
- package/esm/utils/stringToObject.js +0 -14
- package/esm/utils/treeUtils.d.ts +0 -304
- package/esm/utils/treeUtils.js +0 -1043
- /package/cjs/internals/{Picker → Tree}/TreeView.d.ts +0 -0
- /package/esm/internals/{Picker → Tree}/TreeView.d.ts +0 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import isNil from 'lodash/isNil';
|
|
4
|
+
import { KEY_VALUES } from '../../utils/constants';
|
|
5
|
+
import { useEventCallback, useCustom } from '../../utils';
|
|
6
|
+
import { onMenuKeyDown } from '../../internals/Picker';
|
|
7
|
+
import { useItemDataKeys } from '../TreeProvider';
|
|
8
|
+
import { isSearching, focusNextItem, getFocusableItems, getActiveItem, focusPreviousItem, focusCurrentItem, focusTreeNode, handleLeftArrow, handleRightArrow } from '../utils';
|
|
9
|
+
import useTreeNodeRefs from './useTreeNodeRefs';
|
|
10
|
+
import { useRegisterTreeMethods } from '../TreeProvider';
|
|
11
|
+
/**
|
|
12
|
+
* Custom hook that manages the focus behavior of a tree component.
|
|
13
|
+
*/
|
|
14
|
+
function useFocusTree(props) {
|
|
15
|
+
var filteredData = props.filteredData,
|
|
16
|
+
searchKeyword = props.searchKeyword,
|
|
17
|
+
flattenedNodes = props.flattenedNodes,
|
|
18
|
+
expandItemValues = props.expandItemValues,
|
|
19
|
+
disabledItemValues = props.disabledItemValues,
|
|
20
|
+
onExpand = props.onExpand,
|
|
21
|
+
onFocused = props.onFocused;
|
|
22
|
+
var _useCustom = useCustom(),
|
|
23
|
+
rtl = _useCustom.rtl;
|
|
24
|
+
var _useItemDataKeys = useItemDataKeys(),
|
|
25
|
+
valueKey = _useItemDataKeys.valueKey,
|
|
26
|
+
childrenKey = _useItemDataKeys.childrenKey;
|
|
27
|
+
var _useTreeNodeRefs = useTreeNodeRefs(),
|
|
28
|
+
treeNodesRefs = _useTreeNodeRefs.treeNodesRefs,
|
|
29
|
+
saveTreeNodeRef = _useTreeNodeRefs.saveTreeNodeRef;
|
|
30
|
+
var treeViewRef = useRef(null);
|
|
31
|
+
var _useState = useState(null),
|
|
32
|
+
focusItemValue = _useState[0],
|
|
33
|
+
setFocusItemValue = _useState[1];
|
|
34
|
+
var register = useRegisterTreeMethods();
|
|
35
|
+
var flattenedNodesRef = useRef(flattenedNodes);
|
|
36
|
+
var getFocusProps = function getFocusProps(value) {
|
|
37
|
+
var options = {
|
|
38
|
+
disabledItemValues: disabledItemValues,
|
|
39
|
+
valueKey: valueKey,
|
|
40
|
+
childrenKey: childrenKey,
|
|
41
|
+
expandItemValues: expandItemValues
|
|
42
|
+
};
|
|
43
|
+
var focusableItems = getFocusableItems(filteredData, options, isSearching(searchKeyword));
|
|
44
|
+
return {
|
|
45
|
+
focusItemValue: value || focusItemValue,
|
|
46
|
+
valueKey: valueKey,
|
|
47
|
+
focusableItems: focusableItems,
|
|
48
|
+
treeNodesRefs: treeNodesRefs
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
var handleFocusItem = useEventCallback(function (key) {
|
|
52
|
+
var focusProps = getFocusProps();
|
|
53
|
+
var focusedValue = null;
|
|
54
|
+
if (key === KEY_VALUES.DOWN) {
|
|
55
|
+
focusedValue = focusNextItem(focusProps);
|
|
56
|
+
} else if (key === KEY_VALUES.UP) {
|
|
57
|
+
focusedValue = focusPreviousItem(focusProps);
|
|
58
|
+
}
|
|
59
|
+
if (focusedValue) {
|
|
60
|
+
setFocusItemValue(focusedValue);
|
|
61
|
+
onFocused === null || onFocused === void 0 ? void 0 : onFocused(focusedValue);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
var handleLeftArrowEvent = useEventCallback(function () {
|
|
65
|
+
if (isNil(focusItemValue)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
var focusItem = getActiveItem(focusItemValue, flattenedNodes, valueKey);
|
|
69
|
+
var expand = expandItemValues.includes(focusItem === null || focusItem === void 0 ? void 0 : focusItem[valueKey]);
|
|
70
|
+
var onFocusItem = function onFocusItem() {
|
|
71
|
+
var _focusItem$parent, _focusItem$parent2;
|
|
72
|
+
var focusedValue = focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent = focusItem.parent) === null || _focusItem$parent === void 0 ? void 0 : _focusItem$parent[valueKey];
|
|
73
|
+
setFocusItemValue(focusedValue);
|
|
74
|
+
onFocused === null || onFocused === void 0 ? void 0 : onFocused(focusedValue);
|
|
75
|
+
focusTreeNode(focusItem === null || focusItem === void 0 ? void 0 : (_focusItem$parent2 = focusItem.parent) === null || _focusItem$parent2 === void 0 ? void 0 : _focusItem$parent2.refKey, treeNodesRefs);
|
|
76
|
+
};
|
|
77
|
+
handleLeftArrow({
|
|
78
|
+
focusItem: focusItem,
|
|
79
|
+
expand: expand,
|
|
80
|
+
onExpand: onExpand,
|
|
81
|
+
childrenKey: childrenKey,
|
|
82
|
+
onFocusItem: onFocusItem
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
var handleRightArrowEvent = useEventCallback(function () {
|
|
86
|
+
if (isNil(focusItemValue)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
var focusItem = getActiveItem(focusItemValue, flattenedNodes, valueKey);
|
|
90
|
+
var expand = expandItemValues.includes(focusItem === null || focusItem === void 0 ? void 0 : focusItem[valueKey]);
|
|
91
|
+
var onFocusItem = function onFocusItem() {
|
|
92
|
+
return handleFocusItem(KEY_VALUES.DOWN);
|
|
93
|
+
};
|
|
94
|
+
handleRightArrow({
|
|
95
|
+
focusItem: focusItem,
|
|
96
|
+
expand: expand,
|
|
97
|
+
childrenKey: childrenKey,
|
|
98
|
+
onExpand: onExpand,
|
|
99
|
+
onFocusItem: onFocusItem
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
var onTreeKeydown = useEventCallback(function (event) {
|
|
103
|
+
onMenuKeyDown(event, {
|
|
104
|
+
down: function down() {
|
|
105
|
+
return handleFocusItem(KEY_VALUES.DOWN);
|
|
106
|
+
},
|
|
107
|
+
up: function up() {
|
|
108
|
+
return handleFocusItem(KEY_VALUES.UP);
|
|
109
|
+
},
|
|
110
|
+
left: rtl ? handleRightArrowEvent : handleLeftArrowEvent,
|
|
111
|
+
right: rtl ? handleLeftArrowEvent : handleRightArrowEvent
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
var focusTreeFirstNode = useEventCallback(function () {
|
|
115
|
+
handleFocusItem(KEY_VALUES.DOWN);
|
|
116
|
+
});
|
|
117
|
+
var focusTreeActiveNode = useCallback(function () {
|
|
118
|
+
var refKey = focusCurrentItem({
|
|
119
|
+
container: treeViewRef.current
|
|
120
|
+
});
|
|
121
|
+
if (refKey) {
|
|
122
|
+
var _flattenedNodesRef$cu;
|
|
123
|
+
var node = (_flattenedNodesRef$cu = flattenedNodesRef.current) === null || _flattenedNodesRef$cu === void 0 ? void 0 : _flattenedNodesRef$cu[refKey];
|
|
124
|
+
if (node) {
|
|
125
|
+
setFocusItemValue(node[valueKey]);
|
|
126
|
+
onFocused === null || onFocused === void 0 ? void 0 : onFocused(node[valueKey]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}, [onFocused, valueKey]);
|
|
130
|
+
useEffect(function () {
|
|
131
|
+
var unregister = register === null || register === void 0 ? void 0 : register({
|
|
132
|
+
focusTreeFirstNode: focusTreeFirstNode,
|
|
133
|
+
focusTreeActiveNode: focusTreeActiveNode
|
|
134
|
+
});
|
|
135
|
+
return function () {
|
|
136
|
+
unregister === null || unregister === void 0 ? void 0 : unregister();
|
|
137
|
+
};
|
|
138
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
139
|
+
}, []);
|
|
140
|
+
useEffect(function () {
|
|
141
|
+
flattenedNodesRef.current = flattenedNodes;
|
|
142
|
+
}, [flattenedNodes]);
|
|
143
|
+
return {
|
|
144
|
+
treeViewRef: treeViewRef,
|
|
145
|
+
focusTreeFirstNode: focusTreeFirstNode,
|
|
146
|
+
focusItemValue: focusItemValue,
|
|
147
|
+
treeNodesRefs: treeNodesRefs,
|
|
148
|
+
saveTreeNodeRef: saveTreeNodeRef,
|
|
149
|
+
setFocusItemValue: setFocusItemValue,
|
|
150
|
+
onTreeKeydown: onTreeKeydown
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export default useFocusTree;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
function useForceUpdate() {
|
|
4
|
+
var _useState = useState(Object.create(null)),
|
|
5
|
+
dispatch = _useState[1];
|
|
6
|
+
var forceUpdate = useCallback(function () {
|
|
7
|
+
dispatch(Object.create(null));
|
|
8
|
+
}, [dispatch]);
|
|
9
|
+
return forceUpdate;
|
|
10
|
+
}
|
|
11
|
+
export default useForceUpdate;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { TREE_NODE_DROP_POSITION } from '../../utils';
|
|
3
|
+
import type { DropData } from '../types';
|
|
4
|
+
interface TreeDragProps {
|
|
5
|
+
draggable?: boolean;
|
|
6
|
+
flattenedNodes: Record<string, any>;
|
|
7
|
+
treeNodesRefs: Record<string, any>;
|
|
8
|
+
prefix: (className: string) => string;
|
|
9
|
+
onDragStart?: (nodeData: any, event: React.DragEvent) => void;
|
|
10
|
+
onDragEnter?: (nodeData: any, event: React.DragEvent) => void;
|
|
11
|
+
onDragOver?: (nodeData: any, event: React.DragEvent) => void;
|
|
12
|
+
onDragLeave?: (nodeData: any, event: React.DragEvent) => void;
|
|
13
|
+
onDragEnd?: (nodeData: any, event: React.DragEvent) => void;
|
|
14
|
+
onDrop?: (dropData: DropData<Record<string, any>>, event: React.DragEvent) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Custom hook for handling tree node dragging.
|
|
18
|
+
*/
|
|
19
|
+
export default function useTreeDrag<T>(props: TreeDragProps): {
|
|
20
|
+
dragNode: T | null;
|
|
21
|
+
dragOverNodeKey: null;
|
|
22
|
+
dropNodePosition: -1 | TREE_NODE_DROP_POSITION | null;
|
|
23
|
+
dragEvents: {
|
|
24
|
+
onDragStart: (...args: any[]) => any;
|
|
25
|
+
onDragEnter: (...args: any[]) => any;
|
|
26
|
+
onDragOver: (...args: any[]) => any;
|
|
27
|
+
onDragLeave: (...args: any[]) => any;
|
|
28
|
+
onDragEnd: (...args: any[]) => any;
|
|
29
|
+
onDrop: (...args: any[]) => any;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import { useState, useRef, useCallback } from 'react';
|
|
4
|
+
import isNil from 'lodash/isNil';
|
|
5
|
+
import { TREE_NODE_DROP_POSITION, shallowEqual } from '../../utils';
|
|
6
|
+
import { useEventCallback, shallowEqual as equal } from '../../utils';
|
|
7
|
+
import { stringifyReactNode } from '../../internals/utils';
|
|
8
|
+
import { useItemDataKeys } from '../TreeProvider';
|
|
9
|
+
/**
|
|
10
|
+
* The gap between tree nodes.
|
|
11
|
+
*/
|
|
12
|
+
var TREE_NODE_GAP = 4;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Calculates the drop position of a tree node based on the clientY coordinate of a drag event
|
|
16
|
+
* and the bounding rectangle of the tree node element.
|
|
17
|
+
*
|
|
18
|
+
* @param event - The drag event.
|
|
19
|
+
* @param treeNodeElement - The element representing the tree node.
|
|
20
|
+
* @returns The drop position of the tree node.
|
|
21
|
+
*/
|
|
22
|
+
function calDropNodePosition(event, treeNodeElement) {
|
|
23
|
+
var clientY = event.clientY;
|
|
24
|
+
var _treeNodeElement$getB = treeNodeElement.getBoundingClientRect(),
|
|
25
|
+
top = _treeNodeElement$getB.top,
|
|
26
|
+
bottom = _treeNodeElement$getB.bottom;
|
|
27
|
+
var gap = TREE_NODE_GAP;
|
|
28
|
+
|
|
29
|
+
// bottom of node
|
|
30
|
+
if (clientY >= bottom - gap && clientY <= bottom) {
|
|
31
|
+
return TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// top of node
|
|
35
|
+
if (clientY <= top + gap && clientY >= top) {
|
|
36
|
+
return TREE_NODE_DROP_POSITION.DRAG_OVER_TOP;
|
|
37
|
+
}
|
|
38
|
+
if (clientY >= top + gap && clientY <= bottom - gap) {
|
|
39
|
+
return TREE_NODE_DROP_POSITION.DRAG_OVER;
|
|
40
|
+
}
|
|
41
|
+
return -1;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Creates a drag preview element for tree nodes.
|
|
46
|
+
*/
|
|
47
|
+
function createDragPreview(name, className) {
|
|
48
|
+
var dragPreview = document.createElement('div');
|
|
49
|
+
dragPreview.id = 'rs-tree-drag-preview';
|
|
50
|
+
dragPreview.dataset.testid = 'drag-preview';
|
|
51
|
+
dragPreview.innerHTML = name;
|
|
52
|
+
dragPreview.classList.add(className);
|
|
53
|
+
document.body.appendChild(dragPreview);
|
|
54
|
+
return dragPreview;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Removes the drag preview element from the DOM.
|
|
59
|
+
*/
|
|
60
|
+
function removeDragPreview() {
|
|
61
|
+
var _dragPreview$parentNo, _dragPreview$parentNo2;
|
|
62
|
+
var dragPreview = document.getElementById('rs-tree-drag-preview');
|
|
63
|
+
dragPreview === null || dragPreview === void 0 ? void 0 : (_dragPreview$parentNo = dragPreview.parentNode) === null || _dragPreview$parentNo === void 0 ? void 0 : (_dragPreview$parentNo2 = _dragPreview$parentNo.removeChild) === null || _dragPreview$parentNo2 === void 0 ? void 0 : _dragPreview$parentNo2.call(_dragPreview$parentNo, dragPreview);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Custom hook for handling tree node dragging.
|
|
67
|
+
*/
|
|
68
|
+
export default function useTreeDrag(props) {
|
|
69
|
+
var _useItemDataKeys = useItemDataKeys(),
|
|
70
|
+
childrenKey = _useItemDataKeys.childrenKey,
|
|
71
|
+
valueKey = _useItemDataKeys.valueKey,
|
|
72
|
+
labelKey = _useItemDataKeys.labelKey;
|
|
73
|
+
var draggable = props.draggable,
|
|
74
|
+
flattenedNodes = props.flattenedNodes,
|
|
75
|
+
treeNodesRefs = props.treeNodesRefs,
|
|
76
|
+
onDragStart = props.onDragStart,
|
|
77
|
+
onDragEnter = props.onDragEnter,
|
|
78
|
+
onDragOver = props.onDragOver,
|
|
79
|
+
onDragLeave = props.onDragLeave,
|
|
80
|
+
onDragEnd = props.onDragEnd,
|
|
81
|
+
onDrop = props.onDrop,
|
|
82
|
+
prefix = props.prefix; // current dragging node
|
|
83
|
+
var dragNode = useRef(null);
|
|
84
|
+
var _useState = useState(null),
|
|
85
|
+
dragOverNodeKey = _useState[0],
|
|
86
|
+
setDragOverNodeKey = _useState[1]; // drag node and it's children nodes key
|
|
87
|
+
var _useState2 = useState([]),
|
|
88
|
+
dragNodeKeys = _useState2[0],
|
|
89
|
+
setDragNodeKeys = _useState2[1];
|
|
90
|
+
var _useState3 = useState(null),
|
|
91
|
+
dropNodePosition = _useState3[0],
|
|
92
|
+
setDropNodePosition = _useState3[1];
|
|
93
|
+
var setDragNode = useCallback(function (node) {
|
|
94
|
+
dragNode.current = node;
|
|
95
|
+
}, []);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Retrieves an array of keys for the nodes in a tree starting from the specified drag node.
|
|
99
|
+
*/
|
|
100
|
+
var getDragNodeKeys = useCallback(function (dragNode) {
|
|
101
|
+
var dragNodeKeys = [dragNode[valueKey]];
|
|
102
|
+
var traverse = function traverse(data) {
|
|
103
|
+
if ((data === null || data === void 0 ? void 0 : data.length) > 0) {
|
|
104
|
+
data.forEach(function (node) {
|
|
105
|
+
dragNodeKeys = dragNodeKeys.concat([node[valueKey]]);
|
|
106
|
+
if (node[childrenKey]) {
|
|
107
|
+
traverse(node[childrenKey]);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
traverse(dragNode[childrenKey]);
|
|
113
|
+
return dragNodeKeys;
|
|
114
|
+
}, [childrenKey, valueKey]);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Removes the drag node from the data array.
|
|
118
|
+
*
|
|
119
|
+
*/
|
|
120
|
+
var removeDragNode = useCallback(function (data, params) {
|
|
121
|
+
var dragNode = params.dragNode;
|
|
122
|
+
var traverse = function traverse(items, parent) {
|
|
123
|
+
for (var index = 0; index < items.length; index += 1) {
|
|
124
|
+
var item = items[index];
|
|
125
|
+
if (shallowEqual(item[valueKey], dragNode[valueKey])) {
|
|
126
|
+
items.splice(index, 1);
|
|
127
|
+
// when children is empty, delete children prop for hidden anchor
|
|
128
|
+
if (items.length === 0 && parent) {
|
|
129
|
+
delete parent.children;
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (Array.isArray(item[childrenKey])) {
|
|
134
|
+
traverse(item[childrenKey], item);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
traverse(data);
|
|
139
|
+
}, [childrenKey, valueKey]);
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Creates a function that modifies a tree data structure based on drag and drop parameters.
|
|
143
|
+
*/
|
|
144
|
+
var createDragTreeDataFunction = useCallback(function (params) {
|
|
145
|
+
return function (tree) {
|
|
146
|
+
var data = [].concat(tree);
|
|
147
|
+
var dragNode = params.dragNode,
|
|
148
|
+
dropNode = params.dropNode,
|
|
149
|
+
dropNodePosition = params.dropNodePosition;
|
|
150
|
+
var cloneDragNode = _extends({}, dragNode);
|
|
151
|
+
removeDragNode(data, params);
|
|
152
|
+
var updateTree = function updateTree(items) {
|
|
153
|
+
for (var index = 0; index < items.length; index += 1) {
|
|
154
|
+
var item = items[index];
|
|
155
|
+
if (shallowEqual(item[valueKey], dropNode[valueKey])) {
|
|
156
|
+
// drag to node inside
|
|
157
|
+
if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER) {
|
|
158
|
+
item[childrenKey] = isNil(item[childrenKey]) ? [] : item[childrenKey];
|
|
159
|
+
item[childrenKey].push(cloneDragNode);
|
|
160
|
+
break;
|
|
161
|
+
} else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_TOP) {
|
|
162
|
+
// drag to top of node
|
|
163
|
+
items.splice(index, 0, cloneDragNode);
|
|
164
|
+
break;
|
|
165
|
+
} else if (dropNodePosition === TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM) {
|
|
166
|
+
// drag to bottom of node
|
|
167
|
+
items.splice(index + 1, 0, cloneDragNode);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (Array.isArray(item[childrenKey]) && item[childrenKey].length > 0) {
|
|
172
|
+
updateTree(item[childrenKey]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
updateTree(data);
|
|
177
|
+
return [].concat(data);
|
|
178
|
+
};
|
|
179
|
+
}, [childrenKey, removeDragNode, valueKey]);
|
|
180
|
+
var getDropData = useCallback(function (nodeData) {
|
|
181
|
+
var dragParams = {
|
|
182
|
+
dragNode: dragNode.current,
|
|
183
|
+
dropNode: nodeData,
|
|
184
|
+
dropNodePosition: dropNodePosition
|
|
185
|
+
};
|
|
186
|
+
return _extends({}, dragParams, {
|
|
187
|
+
createUpdateDataFunction: createDragTreeDataFunction(dragParams)
|
|
188
|
+
});
|
|
189
|
+
}, [createDragTreeDataFunction, dropNodePosition]);
|
|
190
|
+
var handleDragStart = useEventCallback(function (nodeData, event) {
|
|
191
|
+
if (draggable) {
|
|
192
|
+
var _event$dataTransfer;
|
|
193
|
+
var dragMoverNode = createDragPreview(stringifyReactNode(nodeData[labelKey]), prefix('drag-preview'));
|
|
194
|
+
(_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.setDragImage(dragMoverNode, 0, 0);
|
|
195
|
+
setDragNodeKeys(getDragNodeKeys(nodeData));
|
|
196
|
+
setDragNode(flattenedNodes[nodeData.refKey]);
|
|
197
|
+
onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(nodeData, event);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
var handleDragEnter = useEventCallback(function (nodeData, event) {
|
|
201
|
+
if (dragNodeKeys.some(function (d) {
|
|
202
|
+
return equal(d, nodeData[valueKey]);
|
|
203
|
+
})) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (dragNode.current) {
|
|
207
|
+
setDragOverNodeKey(nodeData[valueKey]);
|
|
208
|
+
setDropNodePosition(calDropNodePosition(event, treeNodesRefs[nodeData.refKey]));
|
|
209
|
+
}
|
|
210
|
+
onDragEnter === null || onDragEnter === void 0 ? void 0 : onDragEnter(nodeData, event);
|
|
211
|
+
});
|
|
212
|
+
var handleDragOver = useEventCallback(function (nodeData, event) {
|
|
213
|
+
if (dragNodeKeys.some(function (d) {
|
|
214
|
+
return equal(d, nodeData[valueKey]);
|
|
215
|
+
})) {
|
|
216
|
+
event.dataTransfer.dropEffect = 'none';
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (dragNode.current && equal(nodeData[valueKey], dragOverNodeKey)) {
|
|
220
|
+
var lastDropNodePosition = calDropNodePosition(event, treeNodesRefs[nodeData.refKey]);
|
|
221
|
+
if (lastDropNodePosition === dropNodePosition) return;
|
|
222
|
+
setDropNodePosition(lastDropNodePosition);
|
|
223
|
+
}
|
|
224
|
+
onDragOver === null || onDragOver === void 0 ? void 0 : onDragOver(nodeData, event);
|
|
225
|
+
});
|
|
226
|
+
var handleDragLeave = useEventCallback(function (nodeData, event) {
|
|
227
|
+
onDragLeave === null || onDragLeave === void 0 ? void 0 : onDragLeave(nodeData, event);
|
|
228
|
+
});
|
|
229
|
+
var handleDragEnd = useEventCallback(function (nodeData, event) {
|
|
230
|
+
removeDragPreview();
|
|
231
|
+
setDragNode(null);
|
|
232
|
+
setDragNodeKeys([]);
|
|
233
|
+
setDragOverNodeKey(null);
|
|
234
|
+
onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(nodeData, event);
|
|
235
|
+
});
|
|
236
|
+
var handleDrop = useEventCallback(function (nodeData, event) {
|
|
237
|
+
if (dragNodeKeys.some(function (d) {
|
|
238
|
+
return equal(d, nodeData[valueKey]);
|
|
239
|
+
})) {
|
|
240
|
+
console.error('Cannot drag a node to itself and its children');
|
|
241
|
+
} else {
|
|
242
|
+
var _dropData = getDropData(nodeData);
|
|
243
|
+
onDrop === null || onDrop === void 0 ? void 0 : onDrop(_dropData, event);
|
|
244
|
+
}
|
|
245
|
+
removeDragPreview();
|
|
246
|
+
setDragNode(null);
|
|
247
|
+
setDragNodeKeys([]);
|
|
248
|
+
setDragOverNodeKey(null);
|
|
249
|
+
});
|
|
250
|
+
var dragEvents = {
|
|
251
|
+
onDragStart: handleDragStart,
|
|
252
|
+
onDragEnter: handleDragEnter,
|
|
253
|
+
onDragOver: handleDragOver,
|
|
254
|
+
onDragLeave: handleDragLeave,
|
|
255
|
+
onDragEnd: handleDragEnd,
|
|
256
|
+
onDrop: handleDrop
|
|
257
|
+
};
|
|
258
|
+
return {
|
|
259
|
+
dragNode: dragNode === null || dragNode === void 0 ? void 0 : dragNode.current,
|
|
260
|
+
dragOverNodeKey: dragOverNodeKey,
|
|
261
|
+
dropNodePosition: dropNodePosition,
|
|
262
|
+
dragEvents: dragEvents
|
|
263
|
+
};
|
|
264
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TREE_NODE_DROP_POSITION } from '../../utils';
|
|
2
|
+
import { DragStatus } from '../TreeNode';
|
|
3
|
+
interface Props {
|
|
4
|
+
value: any;
|
|
5
|
+
disabledItemValues: any[];
|
|
6
|
+
loadingNodeValues: any[];
|
|
7
|
+
focusItemValue: any;
|
|
8
|
+
keyword: string;
|
|
9
|
+
dragNode: any;
|
|
10
|
+
dragOverNodeKey: any;
|
|
11
|
+
dropNodePosition: TREE_NODE_DROP_POSITION | -1 | null;
|
|
12
|
+
}
|
|
13
|
+
declare function useTreeNodeProps(props: Props): (nodeData: any, layer: number, index?: number) => {
|
|
14
|
+
id: string | undefined;
|
|
15
|
+
value: any;
|
|
16
|
+
label: any;
|
|
17
|
+
index: number | undefined;
|
|
18
|
+
layer: number;
|
|
19
|
+
loading: boolean;
|
|
20
|
+
active: boolean;
|
|
21
|
+
focus: boolean;
|
|
22
|
+
visible: any;
|
|
23
|
+
children: any;
|
|
24
|
+
nodeData: any;
|
|
25
|
+
disabled: boolean;
|
|
26
|
+
dragging: boolean;
|
|
27
|
+
dragStatus: DragStatus | undefined;
|
|
28
|
+
};
|
|
29
|
+
export default useTreeNodeProps;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React, { useCallback } from 'react';
|
|
3
|
+
import { TREE_NODE_DROP_POSITION, shallowEqual as equal } from '../../utils';
|
|
4
|
+
import { useCombobox } from '../../internals/Picker/hooks';
|
|
5
|
+
import { useItemDataKeys } from '../TreeProvider';
|
|
6
|
+
import Highlight from '../../Highlight';
|
|
7
|
+
function useTreeNodeProps(props) {
|
|
8
|
+
var _useItemDataKeys = useItemDataKeys(),
|
|
9
|
+
valueKey = _useItemDataKeys.valueKey,
|
|
10
|
+
labelKey = _useItemDataKeys.labelKey,
|
|
11
|
+
childrenKey = _useItemDataKeys.childrenKey;
|
|
12
|
+
var _useCombobox = useCombobox(),
|
|
13
|
+
id = _useCombobox.id;
|
|
14
|
+
var value = props.value,
|
|
15
|
+
disabledItemValues = props.disabledItemValues,
|
|
16
|
+
loadingNodeValues = props.loadingNodeValues,
|
|
17
|
+
focusItemValue = props.focusItemValue,
|
|
18
|
+
keyword = props.keyword,
|
|
19
|
+
dragNode = props.dragNode,
|
|
20
|
+
dragOverNodeKey = props.dragOverNodeKey,
|
|
21
|
+
dropNodePosition = props.dropNodePosition;
|
|
22
|
+
return useCallback(function (nodeData, layer, index) {
|
|
23
|
+
var DRAG_OVER = TREE_NODE_DROP_POSITION.DRAG_OVER,
|
|
24
|
+
DRAG_OVER_TOP = TREE_NODE_DROP_POSITION.DRAG_OVER_TOP,
|
|
25
|
+
DRAG_OVER_BOTTOM = TREE_NODE_DROP_POSITION.DRAG_OVER_BOTTOM;
|
|
26
|
+
var visible = nodeData.visible;
|
|
27
|
+
var draggingNode = dragNode !== null && dragNode !== void 0 ? dragNode : {};
|
|
28
|
+
var nodeValue = nodeData[valueKey];
|
|
29
|
+
var nodeLabel = nodeData[labelKey];
|
|
30
|
+
var children = nodeData[childrenKey];
|
|
31
|
+
var label = keyword ? /*#__PURE__*/React.createElement(Highlight, {
|
|
32
|
+
as: "span",
|
|
33
|
+
query: keyword
|
|
34
|
+
}, nodeLabel) : nodeLabel;
|
|
35
|
+
var dragging = equal(nodeValue, draggingNode[valueKey]);
|
|
36
|
+
var dragStatus;
|
|
37
|
+
if (equal(nodeValue, dragOverNodeKey)) {
|
|
38
|
+
switch (dropNodePosition) {
|
|
39
|
+
case DRAG_OVER:
|
|
40
|
+
dragStatus = 'drag-over';
|
|
41
|
+
break;
|
|
42
|
+
case DRAG_OVER_TOP:
|
|
43
|
+
dragStatus = 'drag-over-top';
|
|
44
|
+
break;
|
|
45
|
+
case DRAG_OVER_BOTTOM:
|
|
46
|
+
dragStatus = 'drag-over-bottom';
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
var disabled = disabledItemValues.some(function (disabledItem) {
|
|
51
|
+
return equal(disabledItem, nodeValue);
|
|
52
|
+
});
|
|
53
|
+
var loading = loadingNodeValues.some(function (item) {
|
|
54
|
+
return equal(item, nodeValue);
|
|
55
|
+
});
|
|
56
|
+
var active = equal(nodeValue, value);
|
|
57
|
+
var focus = equal(nodeValue, focusItemValue);
|
|
58
|
+
return {
|
|
59
|
+
id: id ? id + "-opt-" + nodeValue : undefined,
|
|
60
|
+
value: nodeValue,
|
|
61
|
+
label: label,
|
|
62
|
+
index: index,
|
|
63
|
+
layer: layer,
|
|
64
|
+
loading: loading,
|
|
65
|
+
active: active,
|
|
66
|
+
focus: focus,
|
|
67
|
+
visible: visible,
|
|
68
|
+
children: children,
|
|
69
|
+
nodeData: nodeData,
|
|
70
|
+
disabled: disabled,
|
|
71
|
+
dragging: dragging,
|
|
72
|
+
dragStatus: dragStatus
|
|
73
|
+
};
|
|
74
|
+
}, [childrenKey, disabledItemValues, dragNode, dragOverNodeKey, dropNodePosition, focusItemValue, id, keyword, labelKey, loadingNodeValues, value, valueKey]);
|
|
75
|
+
}
|
|
76
|
+
export default useTreeNodeProps;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import isNil from 'lodash/isNil';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Custom hook that manages references to tree nodes. */
|
|
7
|
+
export default function useTreeNodeRefs() {
|
|
8
|
+
var treeNodeRefs = useRef({});
|
|
9
|
+
var saveTreeNodeRef = function saveTreeNodeRef(ref, refKey) {
|
|
10
|
+
if (!isNil(refKey)) {
|
|
11
|
+
treeNodeRefs.current[refKey] = ref;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
treeNodesRefs: treeNodeRefs.current,
|
|
16
|
+
saveTreeNodeRef: saveTreeNodeRef
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface TreeSearchProps<T> {
|
|
3
|
+
searchKeyword?: string;
|
|
4
|
+
data: T[];
|
|
5
|
+
searchBy?: (keyword: any, label: any, item: any) => boolean;
|
|
6
|
+
callback?: (keyword: string, data: T[], event: React.SyntheticEvent) => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Custom hook for searching and filtering data in a tree structure.
|
|
10
|
+
*/
|
|
11
|
+
export default function useTreeSearch<T>(props: TreeSearchProps<T>): {
|
|
12
|
+
keyword: string;
|
|
13
|
+
filteredData: T[];
|
|
14
|
+
setFilteredData: (data: T[], searchKeyword: string) => void;
|
|
15
|
+
setSearchKeyword: React.Dispatch<React.SetStateAction<string>>;
|
|
16
|
+
handleSearch: (searchKeyword: string, event?: React.ChangeEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import isArray from 'lodash/isArray';
|
|
4
|
+
import { shouldDisplay } from '../../internals/Picker';
|
|
5
|
+
import { useItemDataKeys } from '../TreeProvider';
|
|
6
|
+
/**
|
|
7
|
+
* Custom hook for searching and filtering data in a tree structure.
|
|
8
|
+
*/
|
|
9
|
+
export default function useTreeSearch(props) {
|
|
10
|
+
var _useItemDataKeys = useItemDataKeys(),
|
|
11
|
+
labelKey = _useItemDataKeys.labelKey,
|
|
12
|
+
childrenKey = _useItemDataKeys.childrenKey;
|
|
13
|
+
var searchKeyword = props.searchKeyword,
|
|
14
|
+
data = props.data,
|
|
15
|
+
searchBy = props.searchBy,
|
|
16
|
+
callback = props.callback;
|
|
17
|
+
var filterVisibleData = useCallback(function (data, searchKeyword) {
|
|
18
|
+
var setVisible = function setVisible(nodes) {
|
|
19
|
+
return nodes.forEach(function (item) {
|
|
20
|
+
item.visible = searchBy ? searchBy(searchKeyword, item[labelKey], item) : shouldDisplay(item[labelKey], searchKeyword);
|
|
21
|
+
if (isArray(item[childrenKey])) {
|
|
22
|
+
filterVisibleData(item[childrenKey], searchKeyword);
|
|
23
|
+
item[childrenKey].forEach(function (child) {
|
|
24
|
+
if (child.visible) {
|
|
25
|
+
item.visible = child.visible;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
setVisible(data);
|
|
32
|
+
return data;
|
|
33
|
+
}, [childrenKey, labelKey, searchBy]);
|
|
34
|
+
|
|
35
|
+
// Use search keywords to filter options.
|
|
36
|
+
var _useState = useState(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : ''),
|
|
37
|
+
keyword = _useState[0],
|
|
38
|
+
setSearchKeyword = _useState[1];
|
|
39
|
+
var _useState2 = useState(function () {
|
|
40
|
+
return filterVisibleData(data, keyword);
|
|
41
|
+
}),
|
|
42
|
+
filteredData = _useState2[0],
|
|
43
|
+
setFilteredData = _useState2[1];
|
|
44
|
+
var handleSearch = function handleSearch(searchKeyword, event) {
|
|
45
|
+
var filteredData = filterVisibleData(data, searchKeyword);
|
|
46
|
+
setFilteredData(filteredData);
|
|
47
|
+
setSearchKeyword(searchKeyword);
|
|
48
|
+
if (event) {
|
|
49
|
+
callback === null || callback === void 0 ? void 0 : callback(searchKeyword, filteredData, event);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
useEffect(function () {
|
|
53
|
+
handleSearch(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : '');
|
|
54
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
55
|
+
}, [searchKeyword]);
|
|
56
|
+
useEffect(function () {
|
|
57
|
+
setSearchKeyword(searchKeyword !== null && searchKeyword !== void 0 ? searchKeyword : '');
|
|
58
|
+
}, [searchKeyword, setSearchKeyword]);
|
|
59
|
+
var setVisibleData = useCallback(function (data, searchKeyword) {
|
|
60
|
+
setFilteredData(filterVisibleData(data, searchKeyword));
|
|
61
|
+
}, [filterVisibleData]);
|
|
62
|
+
return {
|
|
63
|
+
keyword: keyword,
|
|
64
|
+
filteredData: filteredData,
|
|
65
|
+
setFilteredData: setVisibleData,
|
|
66
|
+
setSearchKeyword: setSearchKeyword,
|
|
67
|
+
handleSearch: handleSearch
|
|
68
|
+
};
|
|
69
|
+
}
|