@elliemae/ds-treeview 2.2.0-next.4 → 2.3.0-alpha.2
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/cjs/TreeView.js +49 -27
- package/cjs/TreeView.js.map +7 -0
- package/cjs/TreeViewContext.js +61 -37
- package/cjs/TreeViewContext.js.map +7 -0
- package/cjs/config/cssClassesConstants.js +41 -13
- package/cjs/config/cssClassesConstants.js.map +7 -0
- package/cjs/config/useTreeview.js +116 -78
- package/cjs/config/useTreeview.js.map +7 -0
- package/cjs/index.js +37 -26
- package/cjs/index.js.map +7 -0
- package/cjs/parts/CheckboxSelectable.js +70 -59
- package/cjs/parts/CheckboxSelectable.js.map +7 -0
- package/cjs/parts/ChildrenCountDisplayer.js +45 -28
- package/cjs/parts/ChildrenCountDisplayer.js.map +7 -0
- package/cjs/parts/ExpandCaret.js +85 -83
- package/cjs/parts/ExpandCaret.js.map +7 -0
- package/cjs/parts/Icon.js +46 -31
- package/cjs/parts/Icon.js.map +7 -0
- package/cjs/parts/NestingSpace.js +43 -35
- package/cjs/parts/NestingSpace.js.map +7 -0
- package/cjs/parts/RadioSelectable.js +52 -37
- package/cjs/parts/RadioSelectable.js.map +7 -0
- package/cjs/parts/TreeItem.js +147 -141
- package/cjs/parts/TreeItem.js.map +7 -0
- package/cjs/parts/TreeItemText.js +88 -95
- package/cjs/parts/TreeItemText.js.map +7 -0
- package/cjs/parts/TreeList.js +119 -130
- package/cjs/parts/TreeList.js.map +7 -0
- package/cjs/plugins/dnd/TreeDndPlugin.js +59 -7
- package/cjs/plugins/dnd/TreeDndPlugin.js.map +7 -0
- package/cjs/plugins/dnd/index.js +28 -9
- package/cjs/plugins/dnd/index.js.map +7 -0
- package/cjs/plugins/index.js +34 -21
- package/cjs/plugins/index.js.map +7 -0
- package/cjs/plugins/roving/TreeRovingPlugin.js +35 -7
- package/cjs/plugins/roving/TreeRovingPlugin.js.map +7 -0
- package/cjs/plugins/roving/index.js +28 -9
- package/cjs/plugins/roving/index.js.map +7 -0
- package/cjs/plugins/searchable/SearchableTreePlugin.js +35 -7
- package/cjs/plugins/searchable/SearchableTreePlugin.js.map +7 -0
- package/cjs/plugins/searchable/index.js +28 -9
- package/cjs/plugins/searchable/index.js.map +7 -0
- package/cjs/plugins/selectable/SelectablePluginTree.js +35 -7
- package/cjs/plugins/selectable/SelectablePluginTree.js.map +7 -0
- package/cjs/plugins/selectable/index.js +28 -9
- package/cjs/plugins/selectable/index.js.map +7 -0
- package/cjs/plugins/toolbar/TreeToolbarPlugin.js +35 -7
- package/cjs/plugins/toolbar/TreeToolbarPlugin.js.map +7 -0
- package/cjs/plugins/toolbar/index.js +28 -9
- package/cjs/plugins/toolbar/index.js.map +7 -0
- package/cjs/plugins/tree/TreeDataPlugin.js +35 -7
- package/cjs/plugins/tree/TreeDataPlugin.js.map +7 -0
- package/cjs/plugins/tree/index.js +28 -9
- package/cjs/plugins/tree/index.js.map +7 -0
- package/cjs/plugins/virtualization/TreeVirtualizationPlugin.js +35 -7
- package/cjs/plugins/virtualization/TreeVirtualizationPlugin.js.map +7 -0
- package/cjs/plugins/virtualization/index.js +28 -9
- package/cjs/plugins/virtualization/index.js.map +7 -0
- package/cjs/react-desc-prop-types.js +82 -54
- package/cjs/react-desc-prop-types.js.map +7 -0
- package/cjs/related-components/TreeViewSearchBar.js +42 -40
- package/cjs/related-components/TreeViewSearchBar.js.map +7 -0
- package/cjs/sharedTypes.js +27 -2
- package/cjs/sharedTypes.js.map +7 -0
- package/cjs/utils/array-helpers.js +35 -11
- package/cjs/utils/array-helpers.js.map +7 -0
- package/cjs/utils/dnd-helpers.js +146 -0
- package/cjs/utils/dnd-helpers.js.map +7 -0
- package/cjs/utils/group-expands-helpers.js +86 -59
- package/cjs/utils/group-expands-helpers.js.map +7 -0
- package/cjs/utils/keyboard-helpers.js +85 -90
- package/cjs/utils/keyboard-helpers.js.map +7 -0
- package/cjs/utils/object-helpers.js +43 -36
- package/cjs/utils/object-helpers.js.map +7 -0
- package/cjs/utils/refs-helpers.js +43 -22
- package/cjs/utils/refs-helpers.js.map +7 -0
- package/cjs/utils/selectable-helper.js +61 -53
- package/cjs/utils/selectable-helper.js.map +7 -0
- package/cjs/utils/string-helpers.js +35 -7
- package/cjs/utils/string-helpers.js.map +7 -0
- package/cjs/utils/tree-helpers.js +105 -161
- package/cjs/utils/tree-helpers.js.map +7 -0
- package/cjs/utils/useDnDHelpers.js +199 -0
- package/cjs/utils/useDnDHelpers.js.map +7 -0
- package/cjs/utils/useInstanceRefActions.js +54 -43
- package/cjs/utils/useInstanceRefActions.js.map +7 -0
- package/cjs/utils/useTree.js +76 -80
- package/cjs/utils/useTree.js.map +7 -0
- package/esm/TreeView.js +18 -16
- package/esm/TreeView.js.map +7 -0
- package/esm/TreeViewContext.js +32 -31
- package/esm/TreeViewContext.js.map +7 -0
- package/esm/config/cssClassesConstants.js +12 -6
- package/esm/config/cssClassesConstants.js.map +7 -0
- package/esm/config/useTreeview.js +73 -56
- package/esm/config/useTreeview.js.map +7 -0
- package/esm/index.js +8 -9
- package/esm/index.js.map +7 -0
- package/esm/parts/CheckboxSelectable.js +36 -46
- package/esm/parts/CheckboxSelectable.js.map +7 -0
- package/esm/parts/ChildrenCountDisplayer.js +16 -20
- package/esm/parts/ChildrenCountDisplayer.js.map +7 -0
- package/esm/parts/ExpandCaret.js +54 -72
- package/esm/parts/ExpandCaret.js.map +7 -0
- package/esm/parts/Icon.js +16 -22
- package/esm/parts/Icon.js.map +7 -0
- package/esm/parts/NestingSpace.js +14 -27
- package/esm/parts/NestingSpace.js.map +7 -0
- package/esm/parts/RadioSelectable.js +20 -28
- package/esm/parts/RadioSelectable.js.map +7 -0
- package/esm/parts/TreeItem.js +114 -125
- package/esm/parts/TreeItem.js.map +7 -0
- package/esm/parts/TreeItemText.js +58 -85
- package/esm/parts/TreeItemText.js.map +7 -0
- package/esm/parts/TreeList.js +91 -119
- package/esm/parts/TreeList.js.map +7 -0
- package/esm/plugins/dnd/TreeDndPlugin.js +30 -3
- package/esm/plugins/dnd/TreeDndPlugin.js.map +7 -0
- package/esm/plugins/dnd/index.js +3 -1
- package/esm/plugins/dnd/index.js.map +7 -0
- package/esm/plugins/index.js +9 -7
- package/esm/plugins/index.js.map +7 -0
- package/esm/plugins/roving/TreeRovingPlugin.js +6 -3
- package/esm/plugins/roving/TreeRovingPlugin.js.map +7 -0
- package/esm/plugins/roving/index.js +3 -1
- package/esm/plugins/roving/index.js.map +7 -0
- package/esm/plugins/searchable/SearchableTreePlugin.js +6 -3
- package/esm/plugins/searchable/SearchableTreePlugin.js.map +7 -0
- package/esm/plugins/searchable/index.js +3 -1
- package/esm/plugins/searchable/index.js.map +7 -0
- package/esm/plugins/selectable/SelectablePluginTree.js +6 -3
- package/esm/plugins/selectable/SelectablePluginTree.js.map +7 -0
- package/esm/plugins/selectable/index.js +3 -1
- package/esm/plugins/selectable/index.js.map +7 -0
- package/esm/plugins/toolbar/TreeToolbarPlugin.js +6 -3
- package/esm/plugins/toolbar/TreeToolbarPlugin.js.map +7 -0
- package/esm/plugins/toolbar/index.js +3 -1
- package/esm/plugins/toolbar/index.js.map +7 -0
- package/esm/plugins/tree/TreeDataPlugin.js +6 -3
- package/esm/plugins/tree/TreeDataPlugin.js.map +7 -0
- package/esm/plugins/tree/index.js +3 -1
- package/esm/plugins/tree/index.js.map +7 -0
- package/esm/plugins/virtualization/TreeVirtualizationPlugin.js +6 -3
- package/esm/plugins/virtualization/TreeVirtualizationPlugin.js.map +7 -0
- package/esm/plugins/virtualization/index.js +3 -1
- package/esm/plugins/virtualization/index.js.map +7 -0
- package/esm/react-desc-prop-types.js +47 -44
- package/esm/react-desc-prop-types.js.map +7 -0
- package/esm/related-components/TreeViewSearchBar.js +13 -32
- package/esm/related-components/TreeViewSearchBar.js.map +7 -0
- package/esm/sharedTypes.js +2 -1
- package/esm/sharedTypes.js.map +7 -0
- package/esm/utils/array-helpers.js +6 -6
- package/esm/utils/array-helpers.js.map +7 -0
- package/esm/utils/dnd-helpers.js +117 -0
- package/esm/utils/dnd-helpers.js.map +7 -0
- package/esm/utils/group-expands-helpers.js +56 -46
- package/esm/utils/group-expands-helpers.js.map +7 -0
- package/esm/utils/keyboard-helpers.js +46 -74
- package/esm/utils/keyboard-helpers.js.map +7 -0
- package/esm/utils/object-helpers.js +14 -31
- package/esm/utils/object-helpers.js.map +7 -0
- package/esm/utils/refs-helpers.js +15 -19
- package/esm/utils/refs-helpers.js.map +7 -0
- package/esm/utils/selectable-helper.js +32 -43
- package/esm/utils/selectable-helper.js.map +7 -0
- package/esm/utils/string-helpers.js +6 -3
- package/esm/utils/string-helpers.js.map +7 -0
- package/esm/utils/tree-helpers.js +73 -143
- package/esm/utils/tree-helpers.js.map +7 -0
- package/esm/utils/useDnDHelpers.js +170 -0
- package/esm/utils/useDnDHelpers.js.map +7 -0
- package/esm/utils/useInstanceRefActions.js +21 -35
- package/esm/utils/useInstanceRefActions.js.map +7 -0
- package/esm/utils/useTree.js +35 -59
- package/esm/utils/useTree.js.map +7 -0
- package/package.json +19 -35
- package/types/TreeView.d.ts +1 -1
- package/types/parts/TreeItem.d.ts +11 -4
- package/types/parts/TreeList.d.ts +4 -0
- package/types/plugins/dnd/TreeDndPlugin.d.ts +2 -0
- package/types/react-desc-prop-types.d.ts +3 -17
- package/types/sharedTypes.d.ts +8 -1
- package/types/utils/dnd-helpers.d.ts +39 -0
- package/types/utils/keyboard-helpers.d.ts +1 -2
- package/types/utils/refs-helpers.d.ts +1 -1
- package/types/utils/tree-helpers.d.ts +1 -4
- package/types/utils/useDnDHelpers.d.ts +26 -0
- package/types/utils/useTree.d.ts +0 -1
- package/cjs/hoc/DnDTreeContext.js +0 -18
- package/cjs/hoc/SortableItemContext.js +0 -21
- package/cjs/hoc/WithConditionalDnDContext.js +0 -138
- package/cjs/hoc/WithDnDSortableItemContext.js +0 -70
- package/cjs/parts/DnDHandle.js +0 -46
- package/cjs/parts/DropIndicator.js +0 -75
- package/esm/hoc/DnDTreeContext.js +0 -14
- package/esm/hoc/SortableItemContext.js +0 -17
- package/esm/hoc/WithConditionalDnDContext.js +0 -128
- package/esm/hoc/WithDnDSortableItemContext.js +0 -61
- package/esm/parts/DnDHandle.js +0 -38
- package/esm/parts/DropIndicator.js +0 -68
- package/types/hoc/DnDTreeContext.d.ts +0 -14
- package/types/hoc/SortableItemContext.d.ts +0 -19
- package/types/hoc/WithConditionalDnDContext.d.ts +0 -4
- package/types/hoc/WithDnDSortableItemContext.d.ts +0 -4
- package/types/parts/DnDHandle.d.ts +0 -6
- package/types/parts/DropIndicator.d.ts +0 -10
package/esm/parts/TreeItem.js
CHANGED
|
@@ -1,133 +1,123 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { treeItemBlockName, DSTreeViewPrefix } from '../config/cssClassesConstants.js';
|
|
20
|
-
import { DnDHandle } from './DnDHandle.js';
|
|
21
|
-
import { withDnDSortableItemContext } from '../hoc/WithDnDSortableItemContext.js';
|
|
22
|
-
import { SortableItemContext, DropIndicatorPosition } from '../hoc/SortableItemContext.js';
|
|
23
|
-
import DropIndicator from './DropIndicator.js';
|
|
24
|
-
import { jsxs } from 'react/jsx-runtime';
|
|
25
|
-
|
|
26
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
27
|
-
|
|
28
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
29
|
-
const TreeListItem = aggregatedClasses('li', {
|
|
30
|
-
'data-testid': treeItemBlockName,
|
|
31
|
-
role: 'treeitem' // temp fix untill we move to styled components
|
|
32
|
-
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import React2, { useContext, useState, useMemo, useRef, useCallback } from "react";
|
|
3
|
+
import { SortableElement, SortableHandle } from "@elliemae/react-sortable-hoc";
|
|
4
|
+
import { aggregatedClasses } from "@elliemae/ds-classnames";
|
|
5
|
+
import { GripperVertical } from "@elliemae/ds-icons";
|
|
6
|
+
import RadioSelectable from "./RadioSelectable";
|
|
7
|
+
import CheckboxSelectable from "./CheckboxSelectable";
|
|
8
|
+
import TreeViewContext from "../TreeViewContext";
|
|
9
|
+
import { setMultipleRefs } from "../utils/refs-helpers";
|
|
10
|
+
import { useOnItemKeyDown } from "../utils/keyboard-helpers";
|
|
11
|
+
import { NestingSpace } from "./NestingSpace";
|
|
12
|
+
import { Icon } from "./Icon";
|
|
13
|
+
import { ExpandCaret } from "./ExpandCaret";
|
|
14
|
+
import { TreeItemText } from "./TreeItemText";
|
|
15
|
+
import { DSTreeViewPrefix, treeItemBlockName } from "../config/cssClassesConstants";
|
|
16
|
+
const TreeListItem = aggregatedClasses("li", {
|
|
17
|
+
"data-testid": treeItemBlockName,
|
|
18
|
+
role: "treeitem"
|
|
33
19
|
})(treeItemBlockName);
|
|
34
|
-
const TreeListItemAddonsWrapper = aggregatedClasses(
|
|
35
|
-
)
|
|
36
|
-
|
|
20
|
+
const TreeListItemAddonsWrapper = aggregatedClasses("div")(treeItemBlockName, "addons");
|
|
21
|
+
const DnDHandle = SortableHandle(({ id }) => /* @__PURE__ */ React2.createElement(GripperVertical, {
|
|
22
|
+
"data-testid": "drag-handle",
|
|
23
|
+
key: `${id}-drag-handle`,
|
|
24
|
+
className: "drag-handle",
|
|
25
|
+
size: "s",
|
|
26
|
+
onMouseDown: (e) => {
|
|
27
|
+
if (e) {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
tabIndex: "0"
|
|
32
|
+
}));
|
|
33
|
+
const TreeItem = (props) => {
|
|
37
34
|
const {
|
|
38
35
|
item,
|
|
39
36
|
itemIndex,
|
|
40
37
|
itemWrapperStyle = {},
|
|
41
38
|
virtualItemRef,
|
|
42
39
|
spaceForNestingLevel = 1.5,
|
|
43
|
-
|
|
40
|
+
onMouseDragOverItem
|
|
44
41
|
} = props;
|
|
45
|
-
const {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
nodeItemRef
|
|
51
|
-
} = node.model;
|
|
52
|
-
const {
|
|
53
|
-
draggableProps
|
|
54
|
-
} = useContext(SortableItemContext);
|
|
55
|
-
const onItemKeyDown = useOnItemKeyDown(item, draggableProps);
|
|
42
|
+
const { id, node } = item;
|
|
43
|
+
const { nodeItemRef } = node.model;
|
|
44
|
+
const openFolderOnHoverTimeout = useRef(null);
|
|
45
|
+
const [isDraggingOverThis, setIsDraggingOverThis] = useState(false);
|
|
46
|
+
const onItemKeyDown = useOnItemKeyDown(item);
|
|
56
47
|
const ctx = useContext(TreeViewContext);
|
|
57
48
|
const {
|
|
58
|
-
props: {
|
|
59
|
-
|
|
60
|
-
rightAddons,
|
|
61
|
-
onItemClick,
|
|
62
|
-
onItemFocus,
|
|
63
|
-
rowSize,
|
|
64
|
-
labelOverflow
|
|
65
|
-
},
|
|
49
|
+
props: { disableIcons, rightAddons, onItemClick, onItemFocus, rowSize, labelOverflow },
|
|
50
|
+
relativeMouseCord,
|
|
66
51
|
withRadioChecks,
|
|
67
52
|
withCheckboxChecks,
|
|
68
53
|
withDragAndDrop,
|
|
69
54
|
selectedItem,
|
|
70
55
|
selectedCheckboxes,
|
|
71
56
|
hoverItem,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
},
|
|
57
|
+
isDragging,
|
|
58
|
+
virtualListHelpers: { scrollToIndex },
|
|
75
59
|
setHoverItem,
|
|
76
60
|
setSelectedItem,
|
|
77
61
|
setFocusedItem
|
|
78
|
-
} = ctx;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// - the drag and drop node reference
|
|
82
|
-
|
|
83
|
-
const setItemRefs = ref => {
|
|
84
|
-
setMultipleRefs(virtualItemRef, !isDragOverlay && nodeItemRef, !isDragOverlay && draggableProps && draggableProps.setNodeRef)(ref);
|
|
62
|
+
} = ctx;
|
|
63
|
+
const setItemRefs = (ref) => {
|
|
64
|
+
setMultipleRefs(virtualItemRef, nodeItemRef)(ref);
|
|
85
65
|
};
|
|
86
|
-
|
|
87
|
-
const dropIndicatorPosition = draggableProps && draggableProps.shouldShowDropIndicatorPosition && draggableProps.dropIndicatorPosition;
|
|
88
|
-
const isDropIndicatorPositionInside = dropIndicatorPosition === DropIndicatorPosition.Inside;
|
|
89
|
-
const isDragging = draggableProps && draggableProps.isDragging;
|
|
90
|
-
const isDropValid = draggableProps && draggableProps.isDropValid;
|
|
91
66
|
const dropPreviewClassName = useMemo(() => {
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
67
|
+
if (!withDragAndDrop || !relativeMouseCord || !isDraggingOverThis)
|
|
68
|
+
return "";
|
|
69
|
+
const { isBefore, isAfter, isValid } = relativeMouseCord;
|
|
70
|
+
let className = `${DSTreeViewPrefix}-${treeItemBlockName}${isValid ? "--valid" : "--invalid"}`;
|
|
71
|
+
if (isBefore)
|
|
72
|
+
className += "-drop-before";
|
|
73
|
+
else if (isAfter)
|
|
74
|
+
className += "-drop-after";
|
|
75
|
+
else
|
|
76
|
+
className += "-drop-in";
|
|
77
|
+
return className;
|
|
78
|
+
}, [withDragAndDrop, relativeMouseCord, isDraggingOverThis]);
|
|
79
|
+
const selectedClassName = useMemo(() => selectedItem?.id === item.id ? "selected" : "", [item.id, selectedItem?.id]);
|
|
80
|
+
const hoverClassName = useMemo(() => hoverItem?.id !== item.id || withDragAndDrop && isDragging ? "" : "hover", [hoverItem?.id, item.id, withDragAndDrop, isDragging]);
|
|
102
81
|
const fixedHeightClassname = useMemo(() => {
|
|
103
|
-
if (labelOverflow ===
|
|
104
|
-
if (rowSize ===
|
|
105
|
-
|
|
82
|
+
if (labelOverflow === "truncate") {
|
|
83
|
+
if (rowSize === "compact")
|
|
84
|
+
return `${DSTreeViewPrefix}-${treeItemBlockName}--fixed-height-compact`;
|
|
85
|
+
return `${DSTreeViewPrefix}-${treeItemBlockName}--fixed-height`;
|
|
106
86
|
}
|
|
107
|
-
|
|
108
|
-
return '';
|
|
87
|
+
return "";
|
|
109
88
|
}, [labelOverflow, rowSize]);
|
|
110
|
-
const finalClassName = useMemo(() =>
|
|
111
|
-
const handleItemClick = useCallback(e => {
|
|
89
|
+
const finalClassName = useMemo(() => `${dropPreviewClassName} ${fixedHeightClassname} ${selectedClassName} ${hoverClassName}`, [dropPreviewClassName, selectedClassName, hoverClassName, fixedHeightClassname]);
|
|
90
|
+
const handleItemClick = useCallback((e) => {
|
|
112
91
|
onItemClick(item, e);
|
|
113
92
|
setFocusedItem(item);
|
|
114
93
|
setSelectedItem(item);
|
|
115
|
-
const itemVirtualIndex = typeof item.virtualIndex ===
|
|
94
|
+
const itemVirtualIndex = typeof item.virtualIndex === "number" ? item.virtualIndex : -1;
|
|
116
95
|
onItemFocus({
|
|
117
96
|
itemIndex: itemVirtualIndex,
|
|
118
|
-
scrollToItem:
|
|
119
|
-
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
120
|
-
align: 'start'
|
|
121
|
-
};
|
|
122
|
-
return scrollToIndex(itemVirtualIndex, opts);
|
|
123
|
-
},
|
|
97
|
+
scrollToItem: (opts = { align: "start" }) => scrollToIndex(itemVirtualIndex, opts),
|
|
124
98
|
item
|
|
125
99
|
});
|
|
126
100
|
}, [item, scrollToIndex, onItemClick, onItemFocus, setSelectedItem, setFocusedItem]);
|
|
127
|
-
return
|
|
101
|
+
return /* @__PURE__ */ React2.createElement(TreeListItem, {
|
|
128
102
|
tabIndex: 0,
|
|
103
|
+
onMouseMove: (event) => {
|
|
104
|
+
if (withDragAndDrop && onMouseDragOverItem) {
|
|
105
|
+
onMouseDragOverItem({
|
|
106
|
+
event,
|
|
107
|
+
item,
|
|
108
|
+
itemIndex,
|
|
109
|
+
setIsDraggingOverThis,
|
|
110
|
+
openFolderOnHoverTimeout
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
},
|
|
129
114
|
onMouseLeave: () => {
|
|
130
|
-
if (
|
|
115
|
+
if (withDragAndDrop) {
|
|
116
|
+
setIsDraggingOverThis(false);
|
|
117
|
+
if (openFolderOnHoverTimeout?.current)
|
|
118
|
+
clearTimeout(openFolderOnHoverTimeout.current);
|
|
119
|
+
}
|
|
120
|
+
if (hoverItem?.id === item.id) {
|
|
131
121
|
setHoverItem(null);
|
|
132
122
|
}
|
|
133
123
|
},
|
|
@@ -135,39 +125,38 @@ const TreeItem = props => {
|
|
|
135
125
|
setHoverItem(item);
|
|
136
126
|
},
|
|
137
127
|
onClick: handleItemClick,
|
|
138
|
-
onBlur: () => setFocusedItem(null),
|
|
139
128
|
ref: setItemRefs,
|
|
140
|
-
style:
|
|
129
|
+
style: { ...itemWrapperStyle },
|
|
141
130
|
className: finalClassName,
|
|
142
131
|
"aria-expanded": !!item.isExpanded,
|
|
143
132
|
"aria-selected": !!selectedCheckboxes[item.id],
|
|
144
133
|
"data-id": item.id,
|
|
145
134
|
"data-index": item.virtualIndex,
|
|
146
|
-
onKeyDown: onItemKeyDown
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
135
|
+
onKeyDown: onItemKeyDown
|
|
136
|
+
}, /* @__PURE__ */ React2.createElement(TreeListItemAddonsWrapper, null, withDragAndDrop ? /* @__PURE__ */ React2.createElement(DnDHandle, {
|
|
137
|
+
id
|
|
138
|
+
}) : null, withRadioChecks ? /* @__PURE__ */ React2.createElement(RadioSelectable, {
|
|
139
|
+
item,
|
|
140
|
+
itemIndex
|
|
141
|
+
}) : null, withCheckboxChecks ? /* @__PURE__ */ React2.createElement(CheckboxSelectable, {
|
|
142
|
+
item,
|
|
143
|
+
itemIndex
|
|
144
|
+
}) : null, /* @__PURE__ */ React2.createElement(NestingSpace, {
|
|
145
|
+
item,
|
|
146
|
+
spaceForNestingLevel
|
|
147
|
+
}), /* @__PURE__ */ React2.createElement(ExpandCaret, {
|
|
148
|
+
item
|
|
149
|
+
}), !disableIcons ? /* @__PURE__ */ React2.createElement(Icon, {
|
|
150
|
+
item
|
|
151
|
+
}) : null), /* @__PURE__ */ React2.createElement(TreeItemText, {
|
|
152
|
+
item
|
|
153
|
+
}), rightAddons && /* @__PURE__ */ React2.createElement(TreeListItemAddonsWrapper, null, typeof rightAddons === "function" ? rightAddons(item) : rightAddons));
|
|
154
|
+
};
|
|
155
|
+
const DragAndDropTreeItem = SortableElement(TreeItem);
|
|
156
|
+
export {
|
|
157
|
+
DragAndDropTreeItem,
|
|
158
|
+
TreeItem,
|
|
159
|
+
TreeListItem,
|
|
160
|
+
TreeListItemAddonsWrapper
|
|
170
161
|
};
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
export { TreeItem, TreeListItem, TreeListItemAddonsWrapper, TreeItem$1 as default };
|
|
162
|
+
//# sourceMappingURL=TreeItem.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/TreeItem.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useContext, useState, useMemo, useRef, useCallback } from 'react';\nimport { SortableElement, SortableHandle } from '@elliemae/react-sortable-hoc';\n\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\nimport { GripperVertical } from '@elliemae/ds-icons';\n\nimport RadioSelectable from './RadioSelectable';\nimport CheckboxSelectable from './CheckboxSelectable';\nimport TreeViewContext from '../TreeViewContext';\nimport { setMultipleRefs } from '../utils/refs-helpers';\nimport { useOnItemKeyDown } from '../utils/keyboard-helpers';\nimport { NestingSpace } from './NestingSpace';\nimport { Icon } from './Icon';\nimport { ExpandCaret } from './ExpandCaret';\nimport { TreeItemText } from './TreeItemText';\nimport { DSTreeViewPrefix, treeItemBlockName } from '../config/cssClassesConstants';\nimport type { DSTreeviewT } from '../react-desc-prop-types';\n\nexport const TreeListItem = aggregatedClasses('li', {\n 'data-testid': treeItemBlockName,\n role: 'treeitem',\n // temp fix untill we move to styled components\n})(treeItemBlockName) as unknown as React.ComponentType<React.ComponentProps<'li'>>;\n\nexport const TreeListItemAddonsWrapper = aggregatedClasses('div')(\n treeItemBlockName,\n 'addons',\n // temp fix untill we move to styled components\n) as unknown as React.ComponentType;\n\nconst DnDHandle = SortableHandle(({ id }: { id: DSTreeviewT.StringOrNum }) => (\n <GripperVertical\n data-testid=\"drag-handle\"\n key={`${id}-drag-handle`}\n className=\"drag-handle\"\n size=\"s\"\n onMouseDown={(e: React.MouseEvent) => {\n // prevent focusing the drag-handle to avoid borders\n if (e) {\n e.preventDefault();\n }\n }}\n tabIndex=\"0\"\n />\n));\ninterface PropsT {\n item: DSTreeviewT.Item;\n itemIndex: number;\n virtualItemRef: React.RefObject<HTMLLIElement>;\n itemWrapperStyle?: { [key: string]: unknown };\n spaceForNestingLevel?: number;\n onMouseDragOverItem?: (opts: {\n event: React.MouseEvent<HTMLLIElement>;\n item: DSTreeviewT.Item;\n itemIndex: number;\n setIsDraggingOverThis: React.Dispatch<React.SetStateAction<boolean>>;\n openFolderOnHoverTimeout: React.MutableRefObject<NodeJS.Timeout | null>;\n }) => void;\n}\nexport const TreeItem = (props: PropsT): JSX.Element => {\n const {\n item,\n itemIndex,\n itemWrapperStyle = {},\n virtualItemRef,\n spaceForNestingLevel = 1.5,\n onMouseDragOverItem,\n } = props;\n const { id, node } = item;\n const { nodeItemRef } = node.model;\n const openFolderOnHoverTimeout = useRef<NodeJS.Timeout | null>(null);\n\n const [isDraggingOverThis, setIsDraggingOverThis] = useState(false);\n const onItemKeyDown = useOnItemKeyDown(item);\n\n const ctx = useContext(TreeViewContext);\n const {\n props: { disableIcons, rightAddons, onItemClick, onItemFocus, rowSize, labelOverflow },\n relativeMouseCord,\n withRadioChecks,\n withCheckboxChecks,\n withDragAndDrop,\n selectedItem,\n selectedCheckboxes,\n hoverItem,\n isDragging,\n virtualListHelpers: { scrollToIndex },\n setHoverItem,\n setSelectedItem,\n setFocusedItem,\n } = ctx;\n\n // Sortable Items needs to update\n // - the virtual list ref (for react-virtual requirement)\n // - nodeItemRef which is a prop avaiable in the TreeModel nodes\n const setItemRefs: React.LegacyRef<HTMLLIElement> | undefined = (ref: HTMLLIElement) => {\n setMultipleRefs(virtualItemRef, nodeItemRef)(ref);\n };\n\n const dropPreviewClassName = useMemo(() => {\n if (!withDragAndDrop || !relativeMouseCord || !isDraggingOverThis) return '';\n const { isBefore, isAfter, isValid } = relativeMouseCord;\n let className = `${DSTreeViewPrefix}-${treeItemBlockName}${isValid ? '--valid' : '--invalid'}`;\n\n if (isBefore) className += '-drop-before';\n else if (isAfter) className += '-drop-after';\n else className += '-drop-in';\n return className;\n }, [withDragAndDrop, relativeMouseCord, isDraggingOverThis]);\n\n const selectedClassName = useMemo(\n () => (selectedItem?.id === item.id ? 'selected' : ''),\n [item.id, selectedItem?.id],\n );\n const hoverClassName = useMemo(\n () => (hoverItem?.id !== item.id || (withDragAndDrop && isDragging) ? '' : 'hover'),\n [hoverItem?.id, item.id, withDragAndDrop, isDragging],\n );\n const fixedHeightClassname = useMemo(() => {\n if (labelOverflow === 'truncate') {\n if (rowSize === 'compact') return `${DSTreeViewPrefix}-${treeItemBlockName}--fixed-height-compact`;\n return `${DSTreeViewPrefix}-${treeItemBlockName}--fixed-height`;\n }\n return '';\n }, [labelOverflow, rowSize]);\n\n const finalClassName = useMemo(\n () => `${dropPreviewClassName} ${fixedHeightClassname} ${selectedClassName} ${hoverClassName}`,\n [dropPreviewClassName, selectedClassName, hoverClassName, fixedHeightClassname],\n );\n\n const handleItemClick = useCallback(\n (e: React.MouseEvent<HTMLLIElement>) => {\n onItemClick(item, e);\n setFocusedItem(item);\n setSelectedItem(item);\n const itemVirtualIndex = typeof item.virtualIndex === 'number' ? item.virtualIndex : -1;\n onItemFocus({\n itemIndex: itemVirtualIndex,\n scrollToItem: (opts = { align: 'start' }) => scrollToIndex(itemVirtualIndex, opts),\n item,\n });\n },\n [item, scrollToIndex, onItemClick, onItemFocus, setSelectedItem, setFocusedItem],\n );\n\n return (\n <TreeListItem\n tabIndex={0}\n onMouseMove={(event) => {\n if (withDragAndDrop && onMouseDragOverItem) {\n onMouseDragOverItem({\n event,\n item,\n itemIndex,\n setIsDraggingOverThis,\n openFolderOnHoverTimeout,\n });\n }\n }}\n onMouseLeave={() => {\n if (withDragAndDrop) {\n setIsDraggingOverThis(false);\n if (openFolderOnHoverTimeout?.current) clearTimeout(openFolderOnHoverTimeout.current);\n }\n if (hoverItem?.id === item.id) {\n setHoverItem(null);\n }\n }}\n onMouseEnter={() => {\n setHoverItem(item);\n }}\n onClick={handleItemClick}\n ref={setItemRefs}\n style={{ ...itemWrapperStyle }}\n className={finalClassName}\n aria-expanded={!!item.isExpanded}\n aria-selected={!!selectedCheckboxes[item.id]}\n data-id={item.id}\n data-index={item.virtualIndex}\n onKeyDown={onItemKeyDown}\n >\n <TreeListItemAddonsWrapper>\n {withDragAndDrop ? <DnDHandle id={id} /> : null}\n {withRadioChecks ? <RadioSelectable item={item} itemIndex={itemIndex} /> : null}\n {withCheckboxChecks ? <CheckboxSelectable item={item} itemIndex={itemIndex} /> : null}\n <NestingSpace item={item} spaceForNestingLevel={spaceForNestingLevel} />\n <ExpandCaret item={item} />\n {!disableIcons ? <Icon item={item} /> : null}\n </TreeListItemAddonsWrapper>\n <TreeItemText item={item} />\n {rightAddons && (\n <TreeListItemAddonsWrapper>\n {typeof rightAddons === 'function' ? rightAddons(item) : rightAddons}\n </TreeListItemAddonsWrapper>\n )}\n </TreeListItem>\n );\n};\n\nexport const DragAndDropTreeItem = SortableElement(TreeItem);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,99 +1,72 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import Highlighter from
|
|
4
|
-
import { SimpleTruncatedTooltipText } from
|
|
5
|
-
import { aggregatedClasses } from
|
|
6
|
-
import { ChildrenCountDisplayer } from
|
|
7
|
-
import {
|
|
8
|
-
import TreeViewContext from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const CustomHighlight = _ref => {
|
|
18
|
-
let {
|
|
19
|
-
children
|
|
20
|
-
} = _ref;
|
|
21
|
-
return /*#__PURE__*/_jsx("mark", {
|
|
22
|
-
className: "tree-text-highlight",
|
|
23
|
-
"data-testid": "tree-text-highlight"
|
|
24
|
-
}, void 0, children);
|
|
25
|
-
};
|
|
26
|
-
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import React2, { useMemo, useContext } from "react";
|
|
3
|
+
import Highlighter from "react-highlight-words";
|
|
4
|
+
import { SimpleTruncatedTooltipText } from "@elliemae/ds-truncated-tooltip-text";
|
|
5
|
+
import { aggregatedClasses } from "@elliemae/ds-classnames";
|
|
6
|
+
import { ChildrenCountDisplayer } from "./ChildrenCountDisplayer";
|
|
7
|
+
import { DSTreeViewPrefix, treeItemBlockName } from "../config/cssClassesConstants";
|
|
8
|
+
import TreeViewContext from "../TreeViewContext";
|
|
9
|
+
const ItemContent = aggregatedClasses("div")(`${treeItemBlockName}-content`);
|
|
10
|
+
const ItemValue = aggregatedClasses("span")(treeItemBlockName, "value");
|
|
11
|
+
const classNameModifierWrapAll = `${DSTreeViewPrefix}-${treeItemBlockName}__value--wrap-all`;
|
|
12
|
+
const classNameModifierTruncate = `${DSTreeViewPrefix}-${treeItemBlockName}__value--truncate`;
|
|
13
|
+
const CustomHighlight = ({ children }) => /* @__PURE__ */ React2.createElement("mark", {
|
|
14
|
+
className: "tree-text-highlight",
|
|
15
|
+
"data-testid": "tree-text-highlight"
|
|
16
|
+
}, children);
|
|
27
17
|
function TreeItemText(props) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const {
|
|
31
|
-
item
|
|
32
|
-
} = props;
|
|
18
|
+
const { item } = props;
|
|
33
19
|
const ctx = useContext(TreeViewContext);
|
|
34
20
|
const {
|
|
35
|
-
props: {
|
|
36
|
-
searchQuery,
|
|
37
|
-
showChildrenAmount,
|
|
38
|
-
labelOverflow,
|
|
39
|
-
nameKey
|
|
40
|
-
}
|
|
21
|
+
props: { searchQuery, showChildrenAmount, labelOverflow, nameKey }
|
|
41
22
|
} = ctx;
|
|
42
23
|
const Text = useMemo(() => {
|
|
43
24
|
const itemLabelText = item[nameKey];
|
|
44
|
-
|
|
45
25
|
if (searchQuery) {
|
|
46
|
-
if (labelOverflow ===
|
|
47
|
-
return
|
|
48
|
-
value:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
})) : null]
|
|
57
|
-
})
|
|
26
|
+
if (labelOverflow === "truncate") {
|
|
27
|
+
return /* @__PURE__ */ React2.createElement(SimpleTruncatedTooltipText, {
|
|
28
|
+
value: /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Highlighter, {
|
|
29
|
+
autoEscape: true,
|
|
30
|
+
highlightTag: CustomHighlight,
|
|
31
|
+
searchWords: [searchQuery],
|
|
32
|
+
textToHighlight: itemLabelText
|
|
33
|
+
}), showChildrenAmount ? /* @__PURE__ */ React2.createElement(ChildrenCountDisplayer, {
|
|
34
|
+
item
|
|
35
|
+
}) : null)
|
|
58
36
|
});
|
|
59
37
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
item: item
|
|
69
|
-
})) : null]
|
|
70
|
-
});
|
|
38
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Highlighter, {
|
|
39
|
+
autoEscape: true,
|
|
40
|
+
highlightTag: CustomHighlight,
|
|
41
|
+
searchWords: [searchQuery],
|
|
42
|
+
textToHighlight: itemLabelText
|
|
43
|
+
}), showChildrenAmount ? /* @__PURE__ */ React2.createElement(ChildrenCountDisplayer, {
|
|
44
|
+
item
|
|
45
|
+
}) : null);
|
|
71
46
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
item: item
|
|
78
|
-
})) : null]
|
|
79
|
-
})
|
|
47
|
+
if (labelOverflow === "truncate") {
|
|
48
|
+
return /* @__PURE__ */ React2.createElement(SimpleTruncatedTooltipText, {
|
|
49
|
+
value: /* @__PURE__ */ React2.createElement(React2.Fragment, null, itemLabelText, showChildrenAmount ? /* @__PURE__ */ React2.createElement(ChildrenCountDisplayer, {
|
|
50
|
+
item
|
|
51
|
+
}) : null)
|
|
80
52
|
});
|
|
81
53
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
item: item
|
|
86
|
-
})) : null]
|
|
87
|
-
});
|
|
54
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, itemLabelText, showChildrenAmount ? /* @__PURE__ */ React2.createElement(ChildrenCountDisplayer, {
|
|
55
|
+
item
|
|
56
|
+
}) : null);
|
|
88
57
|
}, [item, searchQuery, nameKey, showChildrenAmount, labelOverflow]);
|
|
89
|
-
let className =
|
|
90
|
-
if (labelOverflow ===
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
},
|
|
58
|
+
let className = "";
|
|
59
|
+
if (labelOverflow === "wrap-all")
|
|
60
|
+
className += `${classNameModifierWrapAll} `;
|
|
61
|
+
if (labelOverflow === "truncate")
|
|
62
|
+
className += `${classNameModifierTruncate} `;
|
|
63
|
+
return /* @__PURE__ */ React2.createElement(ItemContent, {
|
|
64
|
+
"data-testid": `${treeItemBlockName}-content`
|
|
65
|
+
}, /* @__PURE__ */ React2.createElement(ItemValue, {
|
|
66
|
+
className
|
|
67
|
+
}, Text));
|
|
97
68
|
}
|
|
98
|
-
|
|
99
|
-
|
|
69
|
+
export {
|
|
70
|
+
TreeItemText
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=TreeItemText.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/TreeItemText.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useMemo, useContext } from 'react';\nimport Highlighter from 'react-highlight-words';\nimport { SimpleTruncatedTooltipText } from '@elliemae/ds-truncated-tooltip-text';\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\n\nimport { ChildrenCountDisplayer } from './ChildrenCountDisplayer';\nimport { DSTreeViewPrefix, treeItemBlockName } from '../config/cssClassesConstants';\n\nimport TreeViewContext from '../TreeViewContext';\nimport type { DSTreeviewT } from '../react-desc-prop-types';\n\nconst ItemContent = aggregatedClasses('div')(`${treeItemBlockName}-content`) as unknown as React.ComponentType<\n React.ComponentProps<'div'>\n>;\nconst ItemValue = aggregatedClasses('span')(treeItemBlockName, 'value') as unknown as React.ComponentType<\n React.ComponentProps<'span'>\n>;\n\n// const wrapperClassName = `${DSTreeViewPrefix}-${treeItemBlockName}-content`;\nconst classNameModifierWrapAll = `${DSTreeViewPrefix}-${treeItemBlockName}__value--wrap-all`;\nconst classNameModifierTruncate = `${DSTreeViewPrefix}-${treeItemBlockName}__value--truncate`;\n\n// eslint-disable-next-line react/prop-types\nconst CustomHighlight = ({ children }: { children: React.ReactNode }) => (\n <mark className=\"tree-text-highlight\" data-testid=\"tree-text-highlight\">\n {children}\n </mark>\n);\ninterface PropsT {\n item: DSTreeviewT.Item;\n}\nexport function TreeItemText(props: PropsT): JSX.Element {\n const { item } = props;\n const ctx = useContext(TreeViewContext);\n const {\n props: { searchQuery, showChildrenAmount, labelOverflow, nameKey },\n } = ctx;\n\n const Text = useMemo(() => {\n const itemLabelText = item[nameKey] as DSTreeviewT.Item['name'];\n if (searchQuery) {\n if (labelOverflow === 'truncate') {\n return (\n <SimpleTruncatedTooltipText\n value={\n <>\n <Highlighter\n autoEscape\n highlightTag={CustomHighlight}\n searchWords={[searchQuery]}\n textToHighlight={itemLabelText}\n />\n {showChildrenAmount ? <ChildrenCountDisplayer item={item} /> : null}\n </>\n }\n />\n );\n }\n return (\n <>\n <Highlighter\n autoEscape\n highlightTag={CustomHighlight}\n searchWords={[searchQuery]}\n textToHighlight={itemLabelText}\n />\n {showChildrenAmount ? <ChildrenCountDisplayer item={item} /> : null}\n </>\n );\n }\n if (labelOverflow === 'truncate') {\n return (\n <SimpleTruncatedTooltipText\n value={\n <>\n {itemLabelText}\n {showChildrenAmount ? <ChildrenCountDisplayer item={item} /> : null}\n </>\n }\n />\n );\n }\n return (\n <>\n {itemLabelText}\n {showChildrenAmount ? <ChildrenCountDisplayer item={item} /> : null}\n </>\n );\n }, [item, searchQuery, nameKey, showChildrenAmount, labelOverflow]);\n\n let className = '';\n if (labelOverflow === 'wrap-all') className += `${classNameModifierWrapAll} `;\n if (labelOverflow === 'truncate') className += `${classNameModifierTruncate} `;\n\n return (\n <ItemContent data-testid={`${treeItemBlockName}-content`}>\n <ItemValue className={className}>{Text}</ItemValue>\n </ItemContent>\n );\n}\n"],
|
|
5
|
+
"mappings": "AAAA;ACCA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA,MAAM,cAAc,kBAAkB,OAAO,GAAG;AAGhD,MAAM,YAAY,kBAAkB,QAAQ,mBAAmB;AAK/D,MAAM,2BAA2B,GAAG,oBAAoB;AACxD,MAAM,4BAA4B,GAAG,oBAAoB;AAGzD,MAAM,kBAAkB,CAAC,EAAE,eACzB,qCAAC,QAAD;AAAA,EAAM,WAAU;AAAA,EAAsB,eAAY;AAAA,GAC/C;AAME,sBAAsB,OAA4B;AACvD,QAAM,EAAE,SAAS;AACjB,QAAM,MAAM,WAAW;AACvB,QAAM;AAAA,IACJ,OAAO,EAAE,aAAa,oBAAoB,eAAe;AAAA,MACvD;AAEJ,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,gBAAgB,KAAK;AAC3B,QAAI,aAAa;AACf,UAAI,kBAAkB,YAAY;AAChC,eACE,qCAAC,4BAAD;AAAA,UACE,OACE,4DACE,qCAAC,aAAD;AAAA,YACE,YAAU;AAAA,YACV,cAAc;AAAA,YACd,aAAa,CAAC;AAAA,YACd,iBAAiB;AAAA,cAElB,qBAAqB,qCAAC,wBAAD;AAAA,YAAwB;AAAA,eAAiB;AAAA;AAAA;AAMzE,aACE,4DACE,qCAAC,aAAD;AAAA,QACE,YAAU;AAAA,QACV,cAAc;AAAA,QACd,aAAa,CAAC;AAAA,QACd,iBAAiB;AAAA,UAElB,qBAAqB,qCAAC,wBAAD;AAAA,QAAwB;AAAA,WAAiB;AAAA;AAIrE,QAAI,kBAAkB,YAAY;AAChC,aACE,qCAAC,4BAAD;AAAA,QACE,OACE,4DACG,eACA,qBAAqB,qCAAC,wBAAD;AAAA,UAAwB;AAAA,aAAiB;AAAA;AAAA;AAMzE,WACE,4DACG,eACA,qBAAqB,qCAAC,wBAAD;AAAA,MAAwB;AAAA,SAAiB;AAAA,KAGlE,CAAC,MAAM,aAAa,SAAS,oBAAoB;AAEpD,MAAI,YAAY;AAChB,MAAI,kBAAkB;AAAY,iBAAa,GAAG;AAClD,MAAI,kBAAkB;AAAY,iBAAa,GAAG;AAElD,SACE,qCAAC,aAAD;AAAA,IAAa,eAAa,GAAG;AAAA,KAC3B,qCAAC,WAAD;AAAA,IAAW;AAAA,KAAuB;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|