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,299 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
+
import React, { useEffect, useMemo } from 'react';
|
|
5
|
+
import isNil from 'lodash/isNil';
|
|
6
|
+
import { List, AutoSizer, defaultItemSize } from '../internals/Windowing';
|
|
7
|
+
import TreeViewNode from './TreeNode';
|
|
8
|
+
import IndentLine from './IndentLine';
|
|
9
|
+
import { getPathTowardsItem, getKeyParentMap } from '../internals/Tree/utils';
|
|
10
|
+
import { useClassNames, useCustom, useEventCallback } from '../utils';
|
|
11
|
+
import { isExpand, hasVisibleChildren, getActiveItem } from './utils';
|
|
12
|
+
import { onMenuKeyDown } from '../internals/Picker';
|
|
13
|
+
import { TreeView as BaseTreeView } from '../internals/Tree';
|
|
14
|
+
import useTreeSearch from './hooks/useTreeSearch';
|
|
15
|
+
import useTreeDrag from './hooks/useTreeDrag';
|
|
16
|
+
import useFocusTree from './hooks/useFocusTree';
|
|
17
|
+
import useVirtualizedTreeData from './hooks/useVirtualizedTreeData';
|
|
18
|
+
import useTreeNodeProps from './hooks/useTreeNodeProps';
|
|
19
|
+
import SearchBox from '../internals/SearchBox';
|
|
20
|
+
import { useItemDataKeys } from './TreeProvider';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Props for the TreeViewInner component.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Represents the props for the TreeView component.
|
|
27
|
+
*/
|
|
28
|
+
var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
29
|
+
var _props$as = props.as,
|
|
30
|
+
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
31
|
+
_props$data = props.data,
|
|
32
|
+
data = _props$data === void 0 ? [] : _props$data,
|
|
33
|
+
style = props.style,
|
|
34
|
+
showIndentLine = props.showIndentLine,
|
|
35
|
+
valueProp = props.value,
|
|
36
|
+
overrideLocale = props.locale,
|
|
37
|
+
_props$height = props.height,
|
|
38
|
+
height = _props$height === void 0 ? 360 : _props$height,
|
|
39
|
+
className = props.className,
|
|
40
|
+
_props$searchable = props.searchable,
|
|
41
|
+
searchable = _props$searchable === void 0 ? false : _props$searchable,
|
|
42
|
+
_props$virtualized = props.virtualized,
|
|
43
|
+
virtualized = _props$virtualized === void 0 ? false : _props$virtualized,
|
|
44
|
+
_props$classPrefix = props.classPrefix,
|
|
45
|
+
classPrefix = _props$classPrefix === void 0 ? 'tree' : _props$classPrefix,
|
|
46
|
+
searchKeyword = props.searchKeyword,
|
|
47
|
+
searchBy = props.searchBy,
|
|
48
|
+
draggable = props.draggable,
|
|
49
|
+
_props$disabledItemVa = props.disabledItemValues,
|
|
50
|
+
disabledItemValues = _props$disabledItemVa === void 0 ? [] : _props$disabledItemVa,
|
|
51
|
+
_props$loadingNodeVal = props.loadingNodeValues,
|
|
52
|
+
loadingNodeValues = _props$loadingNodeVal === void 0 ? [] : _props$loadingNodeVal,
|
|
53
|
+
_props$flattenedNodes = props.flattenedNodes,
|
|
54
|
+
flattenedNodes = _props$flattenedNodes === void 0 ? {} : _props$flattenedNodes,
|
|
55
|
+
listProps = props.listProps,
|
|
56
|
+
listRef = props.listRef,
|
|
57
|
+
searchInputRef = props.searchInputRef,
|
|
58
|
+
_props$expandItemValu = props.expandItemValues,
|
|
59
|
+
expandItemValues = _props$expandItemValu === void 0 ? [] : _props$expandItemValu,
|
|
60
|
+
onSearch = props.onSearch,
|
|
61
|
+
onSelect = props.onSelect,
|
|
62
|
+
onSelectItem = props.onSelectItem,
|
|
63
|
+
onChange = props.onChange,
|
|
64
|
+
onDragEnd = props.onDragEnd,
|
|
65
|
+
onDragStart = props.onDragStart,
|
|
66
|
+
onDragEnter = props.onDragEnter,
|
|
67
|
+
onDragLeave = props.onDragLeave,
|
|
68
|
+
onDragOver = props.onDragOver,
|
|
69
|
+
onDrop = props.onDrop,
|
|
70
|
+
onExpand = props.onExpand,
|
|
71
|
+
onFocusItem = props.onFocusItem,
|
|
72
|
+
onScroll = props.onScroll,
|
|
73
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "data", "style", "showIndentLine", "value", "locale", "height", "className", "searchable", "virtualized", "classPrefix", "searchKeyword", "searchBy", "draggable", "disabledItemValues", "loadingNodeValues", "flattenedNodes", "listProps", "listRef", "searchInputRef", "expandItemValues", "onSearch", "onSelect", "onSelectItem", "onChange", "onDragEnd", "onDragStart", "onDragEnter", "onDragLeave", "onDragOver", "onDrop", "onExpand", "onFocusItem", "onScroll"]);
|
|
74
|
+
var _useCustom = useCustom('Picker', overrideLocale),
|
|
75
|
+
locale = _useCustom.locale;
|
|
76
|
+
var _useItemDataKeys = useItemDataKeys(),
|
|
77
|
+
valueKey = _useItemDataKeys.valueKey,
|
|
78
|
+
childrenKey = _useItemDataKeys.childrenKey;
|
|
79
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
80
|
+
prefix = _useClassNames.prefix,
|
|
81
|
+
merge = _useClassNames.merge,
|
|
82
|
+
withClassPrefix = _useClassNames.withClassPrefix;
|
|
83
|
+
var handleSearchCallback = useEventCallback(function (value, _data, event) {
|
|
84
|
+
onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
|
|
85
|
+
});
|
|
86
|
+
var _useTreeSearch = useTreeSearch({
|
|
87
|
+
callback: handleSearchCallback,
|
|
88
|
+
searchKeyword: searchKeyword,
|
|
89
|
+
data: data,
|
|
90
|
+
searchBy: searchBy
|
|
91
|
+
}),
|
|
92
|
+
filteredData = _useTreeSearch.filteredData,
|
|
93
|
+
keyword = _useTreeSearch.keyword,
|
|
94
|
+
setFilteredData = _useTreeSearch.setFilteredData,
|
|
95
|
+
handleSearch = _useTreeSearch.handleSearch;
|
|
96
|
+
var transformation = useVirtualizedTreeData(flattenedNodes, filteredData, {
|
|
97
|
+
expandItemValues: expandItemValues,
|
|
98
|
+
searchKeyword: keyword
|
|
99
|
+
});
|
|
100
|
+
var getFormattedNodes = function getFormattedNodes(render) {
|
|
101
|
+
if (virtualized) {
|
|
102
|
+
return transformation().filter(function (n) {
|
|
103
|
+
return n.visible;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return filteredData.map(function (dataItem, index) {
|
|
107
|
+
return render === null || render === void 0 ? void 0 : render(dataItem, index, 1);
|
|
108
|
+
}).filter(function (n) {
|
|
109
|
+
return n;
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
useEffect(function () {
|
|
113
|
+
setFilteredData(data, keyword);
|
|
114
|
+
}, [data, keyword, setFilteredData]);
|
|
115
|
+
|
|
116
|
+
// TODO-Doma
|
|
117
|
+
// Replace `getKeyParentMap` with `getParentMap`
|
|
118
|
+
var itemParentMap = useMemo(function () {
|
|
119
|
+
return getKeyParentMap(data, function (node) {
|
|
120
|
+
return node[valueKey];
|
|
121
|
+
}, function (node) {
|
|
122
|
+
return node[childrenKey];
|
|
123
|
+
});
|
|
124
|
+
}, [childrenKey, data, valueKey]);
|
|
125
|
+
var _useFocusTree = useFocusTree({
|
|
126
|
+
filteredData: filteredData,
|
|
127
|
+
disabledItemValues: disabledItemValues,
|
|
128
|
+
expandItemValues: expandItemValues,
|
|
129
|
+
searchKeyword: keyword,
|
|
130
|
+
flattenedNodes: flattenedNodes,
|
|
131
|
+
onFocused: onFocusItem,
|
|
132
|
+
onExpand: onExpand
|
|
133
|
+
}),
|
|
134
|
+
focusItemValue = _useFocusTree.focusItemValue,
|
|
135
|
+
setFocusItemValue = _useFocusTree.setFocusItemValue,
|
|
136
|
+
onTreeKeydown = _useFocusTree.onTreeKeydown,
|
|
137
|
+
treeNodesRefs = _useFocusTree.treeNodesRefs,
|
|
138
|
+
saveTreeNodeRef = _useFocusTree.saveTreeNodeRef,
|
|
139
|
+
treeViewRef = _useFocusTree.treeViewRef;
|
|
140
|
+
var _useTreeDrag = useTreeDrag({
|
|
141
|
+
flattenedNodes: flattenedNodes,
|
|
142
|
+
treeNodesRefs: treeNodesRefs,
|
|
143
|
+
draggable: draggable,
|
|
144
|
+
onDragStart: onDragStart,
|
|
145
|
+
onDragEnter: onDragEnter,
|
|
146
|
+
onDragOver: onDragOver,
|
|
147
|
+
onDragLeave: onDragLeave,
|
|
148
|
+
onDragEnd: onDragEnd,
|
|
149
|
+
onDrop: onDrop,
|
|
150
|
+
prefix: prefix
|
|
151
|
+
}),
|
|
152
|
+
dragNode = _useTreeDrag.dragNode,
|
|
153
|
+
dragOverNodeKey = _useTreeDrag.dragOverNodeKey,
|
|
154
|
+
dropNodePosition = _useTreeDrag.dropNodePosition,
|
|
155
|
+
dragEvents = _useTreeDrag.dragEvents;
|
|
156
|
+
var getTreeNodeProps = useTreeNodeProps({
|
|
157
|
+
value: valueProp,
|
|
158
|
+
disabledItemValues: disabledItemValues,
|
|
159
|
+
loadingNodeValues: loadingNodeValues,
|
|
160
|
+
focusItemValue: focusItemValue,
|
|
161
|
+
keyword: keyword,
|
|
162
|
+
dragNode: dragNode,
|
|
163
|
+
dragOverNodeKey: dragOverNodeKey,
|
|
164
|
+
dropNodePosition: dropNodePosition
|
|
165
|
+
});
|
|
166
|
+
var handleSelect = useEventCallback(function (nodeData, event) {
|
|
167
|
+
if (!nodeData) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
var nextValue = nodeData[valueKey];
|
|
171
|
+
var path = getPathTowardsItem(nodeData, function (item) {
|
|
172
|
+
return itemParentMap.get(item[valueKey]);
|
|
173
|
+
});
|
|
174
|
+
setFocusItemValue(nextValue);
|
|
175
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
176
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(nodeData, nextValue, event);
|
|
177
|
+
onSelectItem === null || onSelectItem === void 0 ? void 0 : onSelectItem(nodeData, path);
|
|
178
|
+
});
|
|
179
|
+
var selectActiveItem = useEventCallback(function (event) {
|
|
180
|
+
if (isNil(focusItemValue)) return;
|
|
181
|
+
var activeItem = getActiveItem(focusItemValue, flattenedNodes, valueKey);
|
|
182
|
+
handleSelect(activeItem, event);
|
|
183
|
+
});
|
|
184
|
+
var handleTreeKeyDown = useEventCallback(function (event) {
|
|
185
|
+
onTreeKeydown(event);
|
|
186
|
+
onMenuKeyDown(event, {
|
|
187
|
+
enter: selectActiveItem
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
var renderNode = function renderNode(node, index, layer) {
|
|
191
|
+
var visible = node.visible;
|
|
192
|
+
if (!visible) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
var children = node[childrenKey];
|
|
196
|
+
var expanded = isExpand(keyword, expandItemValues.includes(node[valueKey]));
|
|
197
|
+
var hasChildren = keyword ? hasVisibleChildren(node, childrenKey) : Boolean(children);
|
|
198
|
+
var nodeProps = _extends({}, getTreeNodeProps(node, layer, index), dragEvents, {
|
|
199
|
+
expanded: expanded,
|
|
200
|
+
draggable: draggable,
|
|
201
|
+
onExpand: onExpand,
|
|
202
|
+
onSelect: handleSelect,
|
|
203
|
+
hasChildren: hasChildren
|
|
204
|
+
});
|
|
205
|
+
if (hasChildren) {
|
|
206
|
+
var _merge;
|
|
207
|
+
layer += 1;
|
|
208
|
+
var childClassName = merge(prefix('node-children'), (_merge = {}, _merge[prefix('node-expanded')] = expanded, _merge));
|
|
209
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
210
|
+
className: childClassName,
|
|
211
|
+
key: node[valueKey]
|
|
212
|
+
}, /*#__PURE__*/React.createElement(TreeViewNode, _extends({}, nodeProps, {
|
|
213
|
+
ref: function ref(_ref) {
|
|
214
|
+
return saveTreeNodeRef(_ref, node.refKey);
|
|
215
|
+
}
|
|
216
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
217
|
+
className: prefix('group'),
|
|
218
|
+
role: "group"
|
|
219
|
+
}, children === null || children === void 0 ? void 0 : children.map(function (child, i) {
|
|
220
|
+
return renderNode(child, i, layer);
|
|
221
|
+
}), showIndentLine && /*#__PURE__*/React.createElement(IndentLine, null)));
|
|
222
|
+
}
|
|
223
|
+
return /*#__PURE__*/React.createElement(TreeViewNode, _extends({
|
|
224
|
+
ref: function ref(_ref2) {
|
|
225
|
+
return saveTreeNodeRef(_ref2, node.refKey);
|
|
226
|
+
},
|
|
227
|
+
key: node[valueKey]
|
|
228
|
+
}, nodeProps));
|
|
229
|
+
};
|
|
230
|
+
var renderVirtualListNode = function renderVirtualListNode(_ref3) {
|
|
231
|
+
var index = _ref3.index,
|
|
232
|
+
style = _ref3.style,
|
|
233
|
+
data = _ref3.data;
|
|
234
|
+
var node = data[index];
|
|
235
|
+
var layer = node.layer,
|
|
236
|
+
visible = node.visible,
|
|
237
|
+
hasChildren = node.hasChildren;
|
|
238
|
+
var expanded = isExpand(keyword, expandItemValues.includes(node[valueKey]));
|
|
239
|
+
if (!visible) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
var treeNodeProps = _extends({}, getTreeNodeProps(node, layer), dragEvents, {
|
|
243
|
+
expanded: expanded,
|
|
244
|
+
style: style,
|
|
245
|
+
onExpand: onExpand,
|
|
246
|
+
onSelect: handleSelect,
|
|
247
|
+
hasChildren: hasChildren
|
|
248
|
+
});
|
|
249
|
+
return visible && /*#__PURE__*/React.createElement(TreeViewNode, _extends({
|
|
250
|
+
ref: function ref(_ref4) {
|
|
251
|
+
return saveTreeNodeRef(_ref4, node.refKey);
|
|
252
|
+
}
|
|
253
|
+
}, treeNodeProps));
|
|
254
|
+
};
|
|
255
|
+
var classes = merge(withClassPrefix({
|
|
256
|
+
virtualized: virtualized
|
|
257
|
+
}), className);
|
|
258
|
+
var formattedNodes = getFormattedNodes(renderNode);
|
|
259
|
+
return /*#__PURE__*/React.createElement(Component, {
|
|
260
|
+
ref: ref,
|
|
261
|
+
className: classes,
|
|
262
|
+
style: style
|
|
263
|
+
}, searchable ? /*#__PURE__*/React.createElement(SearchBox, {
|
|
264
|
+
placeholder: locale.searchPlaceholder,
|
|
265
|
+
onChange: handleSearch,
|
|
266
|
+
value: keyword,
|
|
267
|
+
inputRef: searchInputRef
|
|
268
|
+
}) : null, keyword && formattedNodes.length === 0 ? /*#__PURE__*/React.createElement("div", {
|
|
269
|
+
className: prefix('empty')
|
|
270
|
+
}, locale.noResultsText) : null, /*#__PURE__*/React.createElement(BaseTreeView, _extends({}, rest, {
|
|
271
|
+
ref: treeViewRef,
|
|
272
|
+
treeRootClassName: prefix('root'),
|
|
273
|
+
onScroll: onScroll,
|
|
274
|
+
onKeyDown: handleTreeKeyDown,
|
|
275
|
+
className: prefix('view'),
|
|
276
|
+
style: virtualized ? undefined : {
|
|
277
|
+
height: height
|
|
278
|
+
}
|
|
279
|
+
}), virtualized ? /*#__PURE__*/React.createElement(AutoSizer, {
|
|
280
|
+
defaultHeight: height,
|
|
281
|
+
style: {
|
|
282
|
+
width: 'auto',
|
|
283
|
+
height: 'auto'
|
|
284
|
+
},
|
|
285
|
+
className: prefix('virt-auto-sizer')
|
|
286
|
+
}, function (_ref5) {
|
|
287
|
+
var height = _ref5.height;
|
|
288
|
+
return /*#__PURE__*/React.createElement(List, _extends({
|
|
289
|
+
ref: listRef,
|
|
290
|
+
height: height,
|
|
291
|
+
itemSize: defaultItemSize,
|
|
292
|
+
itemCount: formattedNodes.length,
|
|
293
|
+
itemData: formattedNodes,
|
|
294
|
+
className: prefix('virt-list')
|
|
295
|
+
}, listProps), renderVirtualListNode);
|
|
296
|
+
}) : formattedNodes));
|
|
297
|
+
});
|
|
298
|
+
TreeView.displayName = 'TreeView';
|
|
299
|
+
export default TreeView;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { TreeNode } from '../types';
|
|
2
|
+
interface DefaultExpandItemValuesOptions {
|
|
3
|
+
valueKey: string;
|
|
4
|
+
defaultExpandAll: boolean;
|
|
5
|
+
childrenKey: string;
|
|
6
|
+
defaultExpandItemValues?: any[];
|
|
7
|
+
}
|
|
8
|
+
export declare function getDefaultExpandItemValues<TItem>(data: TItem[], options: DefaultExpandItemValuesOptions): any[];
|
|
9
|
+
interface UseExpandTreeProps<T extends TreeNode> {
|
|
10
|
+
/**
|
|
11
|
+
* Specifies whether all tree nodes should be expanded by default.
|
|
12
|
+
*/
|
|
13
|
+
defaultExpandAll: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* The key used to access the value of a tree node.
|
|
16
|
+
*/
|
|
17
|
+
valueKey: string;
|
|
18
|
+
/**
|
|
19
|
+
* The key used to access the children of a tree node.
|
|
20
|
+
*/
|
|
21
|
+
childrenKey: string;
|
|
22
|
+
/**
|
|
23
|
+
* An array of values that should be expanded by default.
|
|
24
|
+
*/
|
|
25
|
+
defaultExpandItemValues: any[];
|
|
26
|
+
/**
|
|
27
|
+
* An optional array of values that control the expanded items.
|
|
28
|
+
*/
|
|
29
|
+
controlledExpandItemValues?: any[];
|
|
30
|
+
/**
|
|
31
|
+
* A callback function that is called when the tree is expanded.
|
|
32
|
+
*
|
|
33
|
+
* @param expandItemValues - The expanded item values.
|
|
34
|
+
* @param activeNode - The active tree node.
|
|
35
|
+
* @param concat - A function to concatenate the data and children of a tree node.
|
|
36
|
+
*/
|
|
37
|
+
onExpand?: (expandItemValues: T[], activeNode: T, concat: (data: T[], children: T[]) => T[]) => void;
|
|
38
|
+
/**
|
|
39
|
+
* A function that returns the children of a tree node.
|
|
40
|
+
*
|
|
41
|
+
* @param node - The tree node.
|
|
42
|
+
* @returns The children of the tree node.
|
|
43
|
+
*/
|
|
44
|
+
getChildren?: (node: T) => T[] | Promise<T[]>;
|
|
45
|
+
/**
|
|
46
|
+
* A function that appends a child to a tree node.
|
|
47
|
+
*
|
|
48
|
+
* @param node - The tree node.
|
|
49
|
+
* @param getChildren - A function that returns the children of a tree node.
|
|
50
|
+
*/
|
|
51
|
+
appendChild: (node: T, getChildren: (node: T) => T[] | Promise<T[]>) => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Custom hook for managing tree expansion state.
|
|
55
|
+
*/
|
|
56
|
+
declare function useExpandTree(data: TreeNode[], props: UseExpandTreeProps<TreeNode>): {
|
|
57
|
+
expandItemValues: any[];
|
|
58
|
+
handleExpandTreeNode: (...args: any[]) => any;
|
|
59
|
+
};
|
|
60
|
+
export default useExpandTree;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import isFunction from 'lodash/isFunction';
|
|
4
|
+
import { useControlled, useEventCallback } from '../../utils';
|
|
5
|
+
import { createConcatChildrenFunction } from '../../internals/Picker';
|
|
6
|
+
import { getExpandItemValues, flattenTree } from '../utils';
|
|
7
|
+
export function getDefaultExpandItemValues(data, options) {
|
|
8
|
+
var valueKey = options.valueKey,
|
|
9
|
+
defaultExpandAll = options.defaultExpandAll,
|
|
10
|
+
childrenKey = options.childrenKey,
|
|
11
|
+
_options$defaultExpan = options.defaultExpandItemValues,
|
|
12
|
+
defaultExpandItemValues = _options$defaultExpan === void 0 ? [] : _options$defaultExpan;
|
|
13
|
+
if (defaultExpandAll) {
|
|
14
|
+
return flattenTree(data, function (item) {
|
|
15
|
+
return item[childrenKey] || [];
|
|
16
|
+
}).filter(function (item) {
|
|
17
|
+
return Array.isArray(item[childrenKey]) && item[childrenKey].length > 0;
|
|
18
|
+
}).map(function (item) {
|
|
19
|
+
return item[valueKey];
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return defaultExpandItemValues;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Custom hook for managing tree expansion state.
|
|
26
|
+
*/
|
|
27
|
+
function useExpandTree(data, props) {
|
|
28
|
+
var defaultExpandAll = props.defaultExpandAll,
|
|
29
|
+
valueKey = props.valueKey,
|
|
30
|
+
childrenKey = props.childrenKey,
|
|
31
|
+
defaultExpandItemValues = props.defaultExpandItemValues,
|
|
32
|
+
controlledExpandItemValues = props.controlledExpandItemValues,
|
|
33
|
+
onExpand = props.onExpand,
|
|
34
|
+
getChildren = props.getChildren,
|
|
35
|
+
appendChild = props.appendChild;
|
|
36
|
+
var _useControlled = useControlled(controlledExpandItemValues, getDefaultExpandItemValues(data, {
|
|
37
|
+
defaultExpandAll: defaultExpandAll,
|
|
38
|
+
valueKey: valueKey,
|
|
39
|
+
childrenKey: childrenKey,
|
|
40
|
+
defaultExpandItemValues: defaultExpandItemValues
|
|
41
|
+
})),
|
|
42
|
+
expandItemValues = _useControlled[0],
|
|
43
|
+
setExpandItemValues = _useControlled[1];
|
|
44
|
+
useEffect(function () {
|
|
45
|
+
if (Array.isArray(controlledExpandItemValues)) {
|
|
46
|
+
setExpandItemValues(controlledExpandItemValues);
|
|
47
|
+
}
|
|
48
|
+
}, [controlledExpandItemValues, setExpandItemValues]);
|
|
49
|
+
var handleExpandTreeNode = useEventCallback(function (node, expanded) {
|
|
50
|
+
var nextExpandItemValues = getExpandItemValues({
|
|
51
|
+
node: node,
|
|
52
|
+
isExpand: !expanded,
|
|
53
|
+
expandItemValues: expandItemValues,
|
|
54
|
+
valueKey: valueKey
|
|
55
|
+
});
|
|
56
|
+
setExpandItemValues(nextExpandItemValues);
|
|
57
|
+
onExpand === null || onExpand === void 0 ? void 0 : onExpand(nextExpandItemValues, node, createConcatChildrenFunction(node, node[valueKey], {
|
|
58
|
+
valueKey: valueKey,
|
|
59
|
+
childrenKey: childrenKey
|
|
60
|
+
}));
|
|
61
|
+
if (isFunction(getChildren) && !node.expand && Array.isArray(node[childrenKey]) && node[childrenKey].length === 0) {
|
|
62
|
+
appendChild(node, getChildren);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
expandItemValues: expandItemValues,
|
|
67
|
+
handleExpandTreeNode: handleExpandTreeNode
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export default useExpandTree;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { TreeNode, TreeNodeMap } from '../types';
|
|
2
|
+
interface UseFlattenTreeOptions {
|
|
3
|
+
/**
|
|
4
|
+
* The value of the tree.
|
|
5
|
+
*/
|
|
6
|
+
value?: any;
|
|
7
|
+
/**
|
|
8
|
+
* Specifies whether the tree supports multiple selection.
|
|
9
|
+
*/
|
|
10
|
+
multiple?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* The key used to access the label property of each tree node.
|
|
13
|
+
*/
|
|
14
|
+
labelKey: string;
|
|
15
|
+
/**
|
|
16
|
+
* The key used to access the value property of each tree node.
|
|
17
|
+
*/
|
|
18
|
+
valueKey: string;
|
|
19
|
+
/**
|
|
20
|
+
* The key used to access the children property of each tree node.
|
|
21
|
+
*/
|
|
22
|
+
childrenKey: string;
|
|
23
|
+
/**
|
|
24
|
+
* Specifies whether the tree should cascade the selection to child nodes.
|
|
25
|
+
*/
|
|
26
|
+
cascade?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* An array of item values that should not be selectable.
|
|
29
|
+
*/
|
|
30
|
+
uncheckableItemValues?: any[];
|
|
31
|
+
/**
|
|
32
|
+
* A callback function that will be called when the tree nodes change.
|
|
33
|
+
* It receives a map of the tree nodes.
|
|
34
|
+
*/
|
|
35
|
+
callback?: (nodes: TreeNodeMap) => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Custom hook that flattens a tree data structure into a map of nodes.
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
declare function useFlattenTree(data: TreeNode[], options: UseFlattenTreeOptions): TreeNodeMap;
|
|
42
|
+
export default useFlattenTree;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import { useCallback, useRef, useEffect } from 'react';
|
|
4
|
+
import omit from 'lodash/omit';
|
|
5
|
+
import isNil from 'lodash/isNil';
|
|
6
|
+
import shallowEqual from '../../utils/shallowEqual';
|
|
7
|
+
import { formatNodeRefKey } from '../utils';
|
|
8
|
+
import useForceUpdate from './useForceUpdate';
|
|
9
|
+
/**
|
|
10
|
+
* Custom hook that flattens a tree data structure into a map of nodes.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
function useFlattenTree(data, options) {
|
|
14
|
+
var value = options.value,
|
|
15
|
+
labelKey = options.labelKey,
|
|
16
|
+
valueKey = options.valueKey,
|
|
17
|
+
childrenKey = options.childrenKey,
|
|
18
|
+
_options$uncheckableI = options.uncheckableItemValues,
|
|
19
|
+
uncheckableItemValues = _options$uncheckableI === void 0 ? [] : _options$uncheckableI,
|
|
20
|
+
cascade = options.cascade,
|
|
21
|
+
multiple = options.multiple,
|
|
22
|
+
callback = options.callback;
|
|
23
|
+
var forceUpdate = useForceUpdate();
|
|
24
|
+
var flattenedNodes = useRef({});
|
|
25
|
+
var updateTreeNodeCheckState = useCallback(function (value) {
|
|
26
|
+
if (value === void 0) {
|
|
27
|
+
value = [];
|
|
28
|
+
}
|
|
29
|
+
// Reset values to false
|
|
30
|
+
Object.keys(flattenedNodes.current).forEach(function (refKey) {
|
|
31
|
+
var node = flattenedNodes.current[refKey];
|
|
32
|
+
if (cascade && !isNil(node.parent) && !isNil(node.parent.refKey)) {
|
|
33
|
+
node.check = flattenedNodes.current[node.parent.refKey].check;
|
|
34
|
+
} else {
|
|
35
|
+
node.check = false;
|
|
36
|
+
}
|
|
37
|
+
value.forEach(function (nodeVal) {
|
|
38
|
+
if (shallowEqual(flattenedNodes.current[refKey][valueKey], nodeVal) && !uncheckableItemValues.some(function (uncheckableValue) {
|
|
39
|
+
return shallowEqual(nodeVal, uncheckableValue);
|
|
40
|
+
})) {
|
|
41
|
+
flattenedNodes.current[refKey].check = true;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}, [cascade, uncheckableItemValues, valueKey]);
|
|
46
|
+
var flattenTreeData = useCallback(function (treeData, parent, layer) {
|
|
47
|
+
if (layer === void 0) {
|
|
48
|
+
layer = 1;
|
|
49
|
+
}
|
|
50
|
+
if (!Array.isArray(treeData) || treeData.length === 0) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
treeData.map(function (node) {
|
|
54
|
+
var _extends2;
|
|
55
|
+
var value = node[valueKey];
|
|
56
|
+
/**
|
|
57
|
+
* because the value of the node's type is string or number,
|
|
58
|
+
* so it can used as the key of the object directly
|
|
59
|
+
* to avoid number value is converted to string. 1 and '1' will be convert to '1'
|
|
60
|
+
* we used `String_` or `Number_` prefix
|
|
61
|
+
*/
|
|
62
|
+
var refKey = formatNodeRefKey(value);
|
|
63
|
+
node.refKey = refKey;
|
|
64
|
+
flattenedNodes.current[refKey] = _extends((_extends2 = {
|
|
65
|
+
layer: layer
|
|
66
|
+
}, _extends2[labelKey] = node[labelKey], _extends2[valueKey] = node[valueKey], _extends2.uncheckable = uncheckableItemValues.some(function (value) {
|
|
67
|
+
return shallowEqual(node[valueKey], value);
|
|
68
|
+
}), _extends2), node);
|
|
69
|
+
if (parent) {
|
|
70
|
+
flattenedNodes.current[refKey].parent = omit(parent, 'parent', 'children');
|
|
71
|
+
}
|
|
72
|
+
flattenTreeData(node[childrenKey], node, layer + 1);
|
|
73
|
+
});
|
|
74
|
+
callback === null || callback === void 0 ? void 0 : callback(flattenedNodes.current);
|
|
75
|
+
forceUpdate();
|
|
76
|
+
}, [callback, forceUpdate, valueKey, labelKey, uncheckableItemValues, childrenKey]);
|
|
77
|
+
useEffect(function () {
|
|
78
|
+
// when data is changed, should clear the flattenedNodes, avoid duplicate keys
|
|
79
|
+
flattenedNodes.current = {};
|
|
80
|
+
flattenTreeData(data);
|
|
81
|
+
}, [data]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
82
|
+
|
|
83
|
+
useEffect(function () {
|
|
84
|
+
if (multiple) {
|
|
85
|
+
updateTreeNodeCheckState(value);
|
|
86
|
+
forceUpdate();
|
|
87
|
+
}
|
|
88
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89
|
+
}, [value]);
|
|
90
|
+
return flattenedNodes.current;
|
|
91
|
+
}
|
|
92
|
+
export default useFlattenTree;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { TreeNode } from '../types';
|
|
3
|
+
interface UseFocusTreeProps<T extends TreeNode> {
|
|
4
|
+
filteredData: T[];
|
|
5
|
+
disabledItemValues: any[];
|
|
6
|
+
expandItemValues: any[];
|
|
7
|
+
searchKeyword: string;
|
|
8
|
+
flattenedNodes: any;
|
|
9
|
+
onExpand?: (nodeData: T, expanded: boolean) => void;
|
|
10
|
+
onFocused?: (value: TreeNode['value']) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Custom hook that manages the focus behavior of a tree component.
|
|
14
|
+
*/
|
|
15
|
+
declare function useFocusTree(props: UseFocusTreeProps<TreeNode>): {
|
|
16
|
+
treeViewRef: import("react").RefObject<HTMLDivElement>;
|
|
17
|
+
focusTreeFirstNode: (...args: any[]) => any;
|
|
18
|
+
focusItemValue: string | number | null | undefined;
|
|
19
|
+
treeNodesRefs: {};
|
|
20
|
+
saveTreeNodeRef: (ref: import("react").Ref<any>, refKey?: string | undefined) => void;
|
|
21
|
+
setFocusItemValue: import("react").Dispatch<import("react").SetStateAction<string | number | null | undefined>>;
|
|
22
|
+
onTreeKeydown: (...args: any[]) => any;
|
|
23
|
+
};
|
|
24
|
+
export default useFocusTree;
|