@itwin/presentation-hierarchies-react 2.0.0-alpha.53 → 2.0.0-alpha.55
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/CHANGELOG.md +58 -0
- package/README.md +23 -61
- package/lib/presentation-hierarchies-react/Renderers.d.ts +92 -0
- package/lib/presentation-hierarchies-react/Renderers.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/TreeNode.d.ts +33 -29
- package/lib/presentation-hierarchies-react/TreeNode.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseIModelTree.d.ts +28 -17
- package/lib/presentation-hierarchies-react/UseIModelTree.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/UseIModelTree.js +184 -0
- package/lib/presentation-hierarchies-react/UseIModelTree.js.map +1 -0
- package/lib/presentation-hierarchies-react/UseNodeHighlighting.d.ts +30 -0
- package/lib/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/UseNodeHighlighting.js +58 -0
- package/lib/presentation-hierarchies-react/UseNodeHighlighting.js.map +1 -0
- package/lib/presentation-hierarchies-react/UseSelectionHandler.d.ts +25 -0
- package/lib/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/UseSelectionHandler.js +125 -0
- package/lib/presentation-hierarchies-react/UseSelectionHandler.js.map +1 -0
- package/lib/presentation-hierarchies-react/UseTree.d.ts +112 -0
- package/lib/presentation-hierarchies-react/UseTree.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/UseTree.js +294 -0
- package/lib/presentation-hierarchies-react/UseTree.js.map +1 -0
- package/lib/presentation-hierarchies-react/Utils.js +56 -0
- package/lib/presentation-hierarchies-react/Utils.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/DisposePolyfill.js +10 -0
- package/lib/presentation-hierarchies-react/internal/DisposePolyfill.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.d.ts +9 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.js +12 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/TreeActions.js +295 -0
- package/lib/presentation-hierarchies-react/internal/TreeActions.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/TreeLoader.js +99 -0
- package/lib/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/TreeModel.d.ts +3 -0
- package/lib/presentation-hierarchies-react/internal/TreeModel.js +120 -0
- package/lib/presentation-hierarchies-react/internal/TreeModel.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +37 -0
- package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.js +142 -0
- package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/Utils.js +43 -0
- package/lib/presentation-hierarchies-react/internal/Utils.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts +38 -0
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +381 -0
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/FlatTreeNode.d.ts +16 -15
- package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.js +91 -0
- package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +24 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.js +41 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts +27 -0
- package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js +186 -0
- package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts +49 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js +89 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts +38 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js +64 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts +29 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js +92 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts +33 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js +156 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +18 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +535 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts +75 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js +418 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react.d.ts +18 -0
- package/lib/presentation-hierarchies-react.js +16 -0
- package/lib/public/locales/en/PresentationHierarchies_1.0.json +26 -0
- package/package.json +27 -21
- package/lib/esm/presentation-hierarchies-react/Renderers.d.ts +0 -85
- package/lib/esm/presentation-hierarchies-react/Renderers.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/Renderers.js +0 -6
- package/lib/esm/presentation-hierarchies-react/Renderers.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/TreeNode.js +0 -6
- package/lib/esm/presentation-hierarchies-react/TreeNode.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseIModelTree.js +0 -62
- package/lib/esm/presentation-hierarchies-react/UseIModelTree.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts +0 -24
- package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js +0 -53
- package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts +0 -48
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js +0 -83
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseTree.d.ts +0 -94
- package/lib/esm/presentation-hierarchies-react/UseTree.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseTree.js +0 -241
- package/lib/esm/presentation-hierarchies-react/UseTree.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/Utils.d.ts +0 -8
- package/lib/esm/presentation-hierarchies-react/Utils.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/Utils.js +0 -39
- package/lib/esm/presentation-hierarchies-react/Utils.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.d.ts +0 -2
- package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js +0 -11
- package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts +0 -53
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js +0 -322
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts +0 -62
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js +0 -90
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts +0 -47
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js +0 -157
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +0 -42
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js +0 -115
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts +0 -23
- package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/Utils.js +0 -58
- package/lib/esm/presentation-hierarchies-react/internal/Utils.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts +0 -27
- package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +0 -74
- package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js +0 -73
- package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +0 -138
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js +0 -47
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts +0 -16
- package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js +0 -42
- package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts +0 -45
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js +0 -36
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts +0 -30
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js +0 -30
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts +0 -20
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js +0 -29
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts +0 -57
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js +0 -71
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +0 -46
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +0 -133
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts +0 -75
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js +0 -193
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react.d.ts +0 -17
- package/lib/esm/presentation-hierarchies-react.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react.js +0 -18
- package/lib/esm/presentation-hierarchies-react.js.map +0 -1
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenderer.css +0 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import { useEvent, useMergedRefs } from "../Utils.js";
|
|
2
|
+
import { TreeNodeRenameContextProvider, useTreeNodeRenameContextValue } from "./TreeNodeRenameAction.js";
|
|
3
|
+
import { useSelectionHandler } from "../UseSelectionHandler.js";
|
|
4
|
+
import { isPlaceholderItem, useErrorNodes, useFlatTreeItems } from "./FlatTreeNode.js";
|
|
5
|
+
import { TreeErrorRenderer } from "./TreeErrorRenderer.js";
|
|
6
|
+
import { PlaceholderNode, StrataKitTreeNodeRenderer } from "./TreeNodeRenderer.js";
|
|
7
|
+
import { c } from "react-compiler-runtime";
|
|
8
|
+
import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from "react";
|
|
9
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { Tree } from "@stratakit/structures";
|
|
11
|
+
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
12
|
+
|
|
13
|
+
//#region src/presentation-hierarchies-react/stratakit/TreeRenderer.tsx
|
|
14
|
+
/**
|
|
15
|
+
* A component that renders a tree using the `Tree` component from `@stratakit/structures`.
|
|
16
|
+
*
|
|
17
|
+
* @alpha
|
|
18
|
+
*/
|
|
19
|
+
const StrataKitTreeRenderer = forwardRef(function StrataKitTreeRenderer(props, forwardedRef) {
|
|
20
|
+
const { id, rootNodes, selectNodes, selectionMode, expandNode, treeLabel, getHierarchyLevelDetails, filterHierarchyLevel, reloadTree, isNodeSelected, errorRenderer, treeRootProps, getContextMenuActions, getEditingProps, getInlineActions, getMenuActions, getTreeItemProps } = props;
|
|
21
|
+
const { handleNodeSelect } = useSelectionHandler({
|
|
22
|
+
rootNodes,
|
|
23
|
+
selectNodes,
|
|
24
|
+
selectionMode: selectionMode ?? "single"
|
|
25
|
+
});
|
|
26
|
+
const flatItems = useFlatTreeItems(rootNodes);
|
|
27
|
+
const errorNodes = useErrorNodes(rootNodes);
|
|
28
|
+
const parentRef = useRef(null);
|
|
29
|
+
const virtualizer = useVirtualizer({
|
|
30
|
+
count: flatItems.length,
|
|
31
|
+
getScrollElement: () => parentRef.current,
|
|
32
|
+
getItemKey: useCallback((index) => flatItems[index].id, [flatItems]),
|
|
33
|
+
estimateSize: () => 28,
|
|
34
|
+
overscan: 10
|
|
35
|
+
});
|
|
36
|
+
const items = virtualizer.getVirtualItems();
|
|
37
|
+
const expandAndScrollToNode = useExpandAndScrollToNode({
|
|
38
|
+
rootNodes,
|
|
39
|
+
flatItems,
|
|
40
|
+
expandNode,
|
|
41
|
+
virtualizer
|
|
42
|
+
});
|
|
43
|
+
const renameContext = useTreeNodeRenameContextValue({ getEditingProps });
|
|
44
|
+
useImperativeHandle(forwardedRef, () => ({ renameNode: (nodePredicate) => expandAndScrollToNode({
|
|
45
|
+
nodePredicate,
|
|
46
|
+
onComplete: (targetNode) => {
|
|
47
|
+
requestAnimationFrame(() => renameContext.startRename(targetNode));
|
|
48
|
+
}
|
|
49
|
+
}) }));
|
|
50
|
+
const cancelRename = renameContext.cancelRename;
|
|
51
|
+
const isScrolling = virtualizer.isScrolling;
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (isScrolling) cancelRename();
|
|
54
|
+
}, [isScrolling, cancelRename]);
|
|
55
|
+
const errorRendererProps = {
|
|
56
|
+
treeLabel,
|
|
57
|
+
errorNodes,
|
|
58
|
+
scrollToNode: (node) => expandAndScrollToNode({ nodePredicate: (n) => n.id === node.id }),
|
|
59
|
+
getHierarchyLevelDetails,
|
|
60
|
+
filterHierarchyLevel,
|
|
61
|
+
reloadTree: useCallback(({ parentNodeId }) => reloadTree({
|
|
62
|
+
parentNodeId,
|
|
63
|
+
state: "reset"
|
|
64
|
+
}), [reloadTree])
|
|
65
|
+
};
|
|
66
|
+
const getSelectedNodes = useMemo(() => {
|
|
67
|
+
let calculatedSelectedNodes;
|
|
68
|
+
return () => {
|
|
69
|
+
if (calculatedSelectedNodes === void 0) calculatedSelectedNodes = flatItems.filter((item) => !isPlaceholderItem(item) && isNodeSelected(item.id)).map((item_0) => item_0.node);
|
|
70
|
+
return calculatedSelectedNodes;
|
|
71
|
+
};
|
|
72
|
+
}, [flatItems, isNodeSelected]);
|
|
73
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [errorRenderer ? errorRenderer(errorRendererProps) : /* @__PURE__ */ jsx(TreeErrorRenderer, { ...errorRendererProps }), /* @__PURE__ */ jsx("div", {
|
|
74
|
+
id,
|
|
75
|
+
style: {
|
|
76
|
+
height: "100%",
|
|
77
|
+
width: "100%",
|
|
78
|
+
overflowY: "auto"
|
|
79
|
+
},
|
|
80
|
+
ref: parentRef,
|
|
81
|
+
children: /* @__PURE__ */ jsx(Tree.Root, {
|
|
82
|
+
...treeRootProps,
|
|
83
|
+
style: {
|
|
84
|
+
height: virtualizer.getTotalSize(),
|
|
85
|
+
minHeight: "100%",
|
|
86
|
+
width: "100%",
|
|
87
|
+
position: "relative",
|
|
88
|
+
overflow: "hidden"
|
|
89
|
+
},
|
|
90
|
+
children: /* @__PURE__ */ jsx(TreeNodeRenameContextProvider, {
|
|
91
|
+
value: renameContext,
|
|
92
|
+
children: items.map((virtualizedItem) => {
|
|
93
|
+
const item_1 = flatItems[virtualizedItem.index];
|
|
94
|
+
const selected = isNodeSelected(item_1.id);
|
|
95
|
+
return /* @__PURE__ */ jsx(VirtualTreeItem, {
|
|
96
|
+
ref: virtualizer.measureElement,
|
|
97
|
+
"data-index": virtualizedItem.index,
|
|
98
|
+
start: virtualizedItem.start,
|
|
99
|
+
item: item_1,
|
|
100
|
+
selected,
|
|
101
|
+
expandNode,
|
|
102
|
+
reloadTree,
|
|
103
|
+
handleNodeSelect,
|
|
104
|
+
getSelectedNodes,
|
|
105
|
+
getContextMenuActions,
|
|
106
|
+
getInlineActions,
|
|
107
|
+
getMenuActions,
|
|
108
|
+
getTreeItemProps
|
|
109
|
+
}, virtualizedItem.key);
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
})] });
|
|
114
|
+
});
|
|
115
|
+
function useExpandAndScrollToNode(t0) {
|
|
116
|
+
const $ = c(11);
|
|
117
|
+
const { rootNodes, flatItems, expandNode, virtualizer } = t0;
|
|
118
|
+
let t1;
|
|
119
|
+
if ($[0] !== expandNode || $[1] !== rootNodes) {
|
|
120
|
+
t1 = (nodePredicate) => {
|
|
121
|
+
const pathToNode = findPathToNode(rootNodes, nodePredicate);
|
|
122
|
+
if (!pathToNode) return;
|
|
123
|
+
const targetNode = pathToNode.pop();
|
|
124
|
+
const collapsedNodes = pathToNode.filter(_temp);
|
|
125
|
+
collapsedNodes.forEach((node) => expandNode(node.id, true));
|
|
126
|
+
return {
|
|
127
|
+
targetNode,
|
|
128
|
+
didExpand: collapsedNodes.length > 0
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
$[0] = expandNode;
|
|
132
|
+
$[1] = rootNodes;
|
|
133
|
+
$[2] = t1;
|
|
134
|
+
} else t1 = $[2];
|
|
135
|
+
const expandToNode = t1;
|
|
136
|
+
const scrollToNode = useRef(void 0);
|
|
137
|
+
let t2;
|
|
138
|
+
let t3;
|
|
139
|
+
if ($[3] !== flatItems || $[4] !== virtualizer) {
|
|
140
|
+
t2 = () => {
|
|
141
|
+
if (scrollToNode.current === void 0) return;
|
|
142
|
+
const targetNodeId = scrollToNode.current.id;
|
|
143
|
+
const index = flatItems.findIndex((flatItem) => flatItem.id === targetNodeId);
|
|
144
|
+
if (index === -1) return;
|
|
145
|
+
virtualizer.scrollToIndex(index, { align: "auto" });
|
|
146
|
+
scrollToNode.current.onScrollComplete?.();
|
|
147
|
+
scrollToNode.current = void 0;
|
|
148
|
+
};
|
|
149
|
+
t3 = [flatItems, virtualizer];
|
|
150
|
+
$[3] = flatItems;
|
|
151
|
+
$[4] = virtualizer;
|
|
152
|
+
$[5] = t2;
|
|
153
|
+
$[6] = t3;
|
|
154
|
+
} else {
|
|
155
|
+
t2 = $[5];
|
|
156
|
+
t3 = $[6];
|
|
157
|
+
}
|
|
158
|
+
useEffect(t2, t3);
|
|
159
|
+
let t4;
|
|
160
|
+
if ($[7] !== expandToNode || $[8] !== flatItems || $[9] !== virtualizer) {
|
|
161
|
+
t4 = (t5) => {
|
|
162
|
+
const { nodePredicate: nodePredicate_0, onComplete } = t5;
|
|
163
|
+
const expandResult = expandToNode(nodePredicate_0);
|
|
164
|
+
if (!expandResult) return "node-not-found";
|
|
165
|
+
const { targetNode: targetNode_0, didExpand } = expandResult;
|
|
166
|
+
if (didExpand) scrollToNode.current = {
|
|
167
|
+
id: targetNode_0.id,
|
|
168
|
+
onScrollComplete: onComplete ? () => onComplete(targetNode_0) : void 0
|
|
169
|
+
};
|
|
170
|
+
else {
|
|
171
|
+
const index_0 = flatItems.findIndex((flatItem_0) => flatItem_0.id === targetNode_0.id);
|
|
172
|
+
virtualizer.scrollToIndex(index_0, { align: "auto" });
|
|
173
|
+
onComplete?.(targetNode_0);
|
|
174
|
+
}
|
|
175
|
+
return "success";
|
|
176
|
+
};
|
|
177
|
+
$[7] = expandToNode;
|
|
178
|
+
$[8] = flatItems;
|
|
179
|
+
$[9] = virtualizer;
|
|
180
|
+
$[10] = t4;
|
|
181
|
+
} else t4 = $[10];
|
|
182
|
+
return t4;
|
|
183
|
+
}
|
|
184
|
+
function _temp(pathNode) {
|
|
185
|
+
return !pathNode.isExpanded;
|
|
186
|
+
}
|
|
187
|
+
function findPathToNode(rootNodes, nodePredicate) {
|
|
188
|
+
for (const parent of rootNodes) {
|
|
189
|
+
if (nodePredicate(parent)) return [parent];
|
|
190
|
+
if (parent.children !== true) {
|
|
191
|
+
const childPath = findPathToNode(parent.children, nodePredicate);
|
|
192
|
+
if (childPath) return [parent, ...childPath];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const VirtualTreeItem = memo(forwardRef(function VirtualTreeItem(t0, forwardedRef) {
|
|
197
|
+
const $ = c(16);
|
|
198
|
+
let item;
|
|
199
|
+
let props;
|
|
200
|
+
let start;
|
|
201
|
+
if ($[0] !== t0) {
|
|
202
|
+
({start, item, ...props} = t0);
|
|
203
|
+
$[0] = t0;
|
|
204
|
+
$[1] = item;
|
|
205
|
+
$[2] = props;
|
|
206
|
+
$[3] = start;
|
|
207
|
+
} else {
|
|
208
|
+
item = $[1];
|
|
209
|
+
props = $[2];
|
|
210
|
+
start = $[3];
|
|
211
|
+
}
|
|
212
|
+
const t1 = `translateY(${start}px)`;
|
|
213
|
+
let t2;
|
|
214
|
+
if ($[4] !== t1) {
|
|
215
|
+
t2 = {
|
|
216
|
+
position: "absolute",
|
|
217
|
+
top: 0,
|
|
218
|
+
left: 0,
|
|
219
|
+
width: "100%",
|
|
220
|
+
transform: t1,
|
|
221
|
+
willChange: "transform"
|
|
222
|
+
};
|
|
223
|
+
$[4] = t1;
|
|
224
|
+
$[5] = t2;
|
|
225
|
+
} else t2 = $[5];
|
|
226
|
+
const style = t2;
|
|
227
|
+
if (isPlaceholderItem(item)) {
|
|
228
|
+
const t3 = props["data-index"];
|
|
229
|
+
let t4;
|
|
230
|
+
if ($[6] !== forwardedRef || $[7] !== item.level || $[8] !== style || $[9] !== t3) {
|
|
231
|
+
t4 = /* @__PURE__ */ jsx(PlaceholderNode, {
|
|
232
|
+
ref: forwardedRef,
|
|
233
|
+
"data-index": t3,
|
|
234
|
+
style,
|
|
235
|
+
"aria-level": item.level,
|
|
236
|
+
"aria-posinset": 1,
|
|
237
|
+
"aria-setsize": 1
|
|
238
|
+
});
|
|
239
|
+
$[6] = forwardedRef;
|
|
240
|
+
$[7] = item.level;
|
|
241
|
+
$[8] = style;
|
|
242
|
+
$[9] = t3;
|
|
243
|
+
$[10] = t4;
|
|
244
|
+
} else t4 = $[10];
|
|
245
|
+
return t4;
|
|
246
|
+
}
|
|
247
|
+
let t3;
|
|
248
|
+
if ($[11] !== forwardedRef || $[12] !== item || $[13] !== props || $[14] !== style) {
|
|
249
|
+
t3 = /* @__PURE__ */ jsx(HierarchyNodeItem, {
|
|
250
|
+
...props,
|
|
251
|
+
ref: forwardedRef,
|
|
252
|
+
style,
|
|
253
|
+
item
|
|
254
|
+
});
|
|
255
|
+
$[11] = forwardedRef;
|
|
256
|
+
$[12] = item;
|
|
257
|
+
$[13] = props;
|
|
258
|
+
$[14] = style;
|
|
259
|
+
$[15] = t3;
|
|
260
|
+
} else t3 = $[15];
|
|
261
|
+
return t3;
|
|
262
|
+
}));
|
|
263
|
+
const HierarchyNodeItem = memo(forwardRef(function HierarchyNodeItem(t0, forwardedRef) {
|
|
264
|
+
const $ = c(49);
|
|
265
|
+
let getContextMenuActions;
|
|
266
|
+
let getInlineActions;
|
|
267
|
+
let getMenuActions;
|
|
268
|
+
let getSelectedNodes;
|
|
269
|
+
let getTreeItemProps;
|
|
270
|
+
let handleNodeSelect;
|
|
271
|
+
let item;
|
|
272
|
+
let rest;
|
|
273
|
+
let selected;
|
|
274
|
+
if ($[0] !== t0) {
|
|
275
|
+
({item, selected, getTreeItemProps, handleNodeSelect, getSelectedNodes, getMenuActions, getInlineActions, getContextMenuActions, ...rest} = t0);
|
|
276
|
+
$[0] = t0;
|
|
277
|
+
$[1] = getContextMenuActions;
|
|
278
|
+
$[2] = getInlineActions;
|
|
279
|
+
$[3] = getMenuActions;
|
|
280
|
+
$[4] = getSelectedNodes;
|
|
281
|
+
$[5] = getTreeItemProps;
|
|
282
|
+
$[6] = handleNodeSelect;
|
|
283
|
+
$[7] = item;
|
|
284
|
+
$[8] = rest;
|
|
285
|
+
$[9] = selected;
|
|
286
|
+
} else {
|
|
287
|
+
getContextMenuActions = $[1];
|
|
288
|
+
getInlineActions = $[2];
|
|
289
|
+
getMenuActions = $[3];
|
|
290
|
+
getSelectedNodes = $[4];
|
|
291
|
+
getTreeItemProps = $[5];
|
|
292
|
+
handleNodeSelect = $[6];
|
|
293
|
+
item = $[7];
|
|
294
|
+
rest = $[8];
|
|
295
|
+
selected = $[9];
|
|
296
|
+
}
|
|
297
|
+
const nodeRef = useRef(null);
|
|
298
|
+
const node = item.node;
|
|
299
|
+
let t1;
|
|
300
|
+
if ($[10] !== getTreeItemProps || $[11] !== node) {
|
|
301
|
+
t1 = getTreeItemProps?.(node);
|
|
302
|
+
$[10] = getTreeItemProps;
|
|
303
|
+
$[11] = node;
|
|
304
|
+
$[12] = t1;
|
|
305
|
+
} else t1 = $[12];
|
|
306
|
+
const treeItemProps = t1;
|
|
307
|
+
const isDisabled = treeItemProps?.["aria-disabled"] === true;
|
|
308
|
+
let t2;
|
|
309
|
+
if ($[13] !== getMenuActions || $[14] !== getSelectedNodes || $[15] !== node) {
|
|
310
|
+
t2 = getMenuActions ? getMenuActions({
|
|
311
|
+
targetNode: node,
|
|
312
|
+
selectedNodes: getSelectedNodes()
|
|
313
|
+
}) : void 0;
|
|
314
|
+
$[13] = getMenuActions;
|
|
315
|
+
$[14] = getSelectedNodes;
|
|
316
|
+
$[15] = node;
|
|
317
|
+
$[16] = t2;
|
|
318
|
+
} else t2 = $[16];
|
|
319
|
+
let t3;
|
|
320
|
+
if ($[17] !== getInlineActions || $[18] !== getSelectedNodes || $[19] !== node) {
|
|
321
|
+
t3 = getInlineActions ? getInlineActions({
|
|
322
|
+
targetNode: node,
|
|
323
|
+
selectedNodes: getSelectedNodes()
|
|
324
|
+
}) : void 0;
|
|
325
|
+
$[17] = getInlineActions;
|
|
326
|
+
$[18] = getSelectedNodes;
|
|
327
|
+
$[19] = node;
|
|
328
|
+
$[20] = t3;
|
|
329
|
+
} else t3 = $[20];
|
|
330
|
+
let t4;
|
|
331
|
+
if ($[21] !== getContextMenuActions || $[22] !== getSelectedNodes || $[23] !== node) {
|
|
332
|
+
t4 = getContextMenuActions ? getContextMenuActions({
|
|
333
|
+
targetNode: node,
|
|
334
|
+
selectedNodes: getSelectedNodes()
|
|
335
|
+
}) : void 0;
|
|
336
|
+
$[21] = getContextMenuActions;
|
|
337
|
+
$[22] = getSelectedNodes;
|
|
338
|
+
$[23] = node;
|
|
339
|
+
$[24] = t4;
|
|
340
|
+
} else t4 = $[24];
|
|
341
|
+
let t5;
|
|
342
|
+
if ($[25] !== t2 || $[26] !== t3 || $[27] !== t4) {
|
|
343
|
+
t5 = {
|
|
344
|
+
menuActions: t2,
|
|
345
|
+
inlineActions: t3,
|
|
346
|
+
contextMenuActions: t4
|
|
347
|
+
};
|
|
348
|
+
$[25] = t2;
|
|
349
|
+
$[26] = t3;
|
|
350
|
+
$[27] = t4;
|
|
351
|
+
$[28] = t5;
|
|
352
|
+
} else t5 = $[28];
|
|
353
|
+
const nodeActions = t5;
|
|
354
|
+
let t6;
|
|
355
|
+
if ($[29] !== handleNodeSelect || $[30] !== isDisabled || $[31] !== node || $[32] !== selected || $[33] !== treeItemProps) {
|
|
356
|
+
t6 = (e) => {
|
|
357
|
+
if (treeItemProps?.onClick) treeItemProps.onClick(e);
|
|
358
|
+
if (isDisabled || e.detail > 1) return;
|
|
359
|
+
handleNodeSelect({
|
|
360
|
+
nodeId: node.id,
|
|
361
|
+
isSelected: selected ?? false,
|
|
362
|
+
shiftDown: e.shiftKey,
|
|
363
|
+
ctrlDown: e.ctrlKey
|
|
364
|
+
});
|
|
365
|
+
};
|
|
366
|
+
$[29] = handleNodeSelect;
|
|
367
|
+
$[30] = isDisabled;
|
|
368
|
+
$[31] = node;
|
|
369
|
+
$[32] = selected;
|
|
370
|
+
$[33] = treeItemProps;
|
|
371
|
+
$[34] = t6;
|
|
372
|
+
} else t6 = $[34];
|
|
373
|
+
const onClick = useEvent(t6);
|
|
374
|
+
let t7;
|
|
375
|
+
if ($[35] !== treeItemProps) {
|
|
376
|
+
t7 = (e_0) => {
|
|
377
|
+
if (treeItemProps?.onMouseDown) treeItemProps.onMouseDown(e_0);
|
|
378
|
+
if (e_0.shiftKey) e_0.preventDefault();
|
|
379
|
+
};
|
|
380
|
+
$[35] = treeItemProps;
|
|
381
|
+
$[36] = t7;
|
|
382
|
+
} else t7 = $[36];
|
|
383
|
+
const onMouseDown = useEvent(t7);
|
|
384
|
+
const ref = useMergedRefs(forwardedRef, nodeRef);
|
|
385
|
+
let t8;
|
|
386
|
+
if ($[37] !== item.level || $[38] !== item.levelSize || $[39] !== item.node || $[40] !== item.posInLevel || $[41] !== nodeActions || $[42] !== onClick || $[43] !== onMouseDown || $[44] !== ref || $[45] !== rest || $[46] !== selected || $[47] !== treeItemProps) {
|
|
387
|
+
t8 = /* @__PURE__ */ jsx(StrataKitTreeNodeRenderer, {
|
|
388
|
+
...treeItemProps,
|
|
389
|
+
...rest,
|
|
390
|
+
...nodeActions,
|
|
391
|
+
ref,
|
|
392
|
+
"aria-level": item.level,
|
|
393
|
+
"aria-posinset": item.posInLevel,
|
|
394
|
+
"aria-setsize": item.levelSize,
|
|
395
|
+
node: item.node,
|
|
396
|
+
selected,
|
|
397
|
+
onClick,
|
|
398
|
+
onMouseDown
|
|
399
|
+
});
|
|
400
|
+
$[37] = item.level;
|
|
401
|
+
$[38] = item.levelSize;
|
|
402
|
+
$[39] = item.node;
|
|
403
|
+
$[40] = item.posInLevel;
|
|
404
|
+
$[41] = nodeActions;
|
|
405
|
+
$[42] = onClick;
|
|
406
|
+
$[43] = onMouseDown;
|
|
407
|
+
$[44] = ref;
|
|
408
|
+
$[45] = rest;
|
|
409
|
+
$[46] = selected;
|
|
410
|
+
$[47] = treeItemProps;
|
|
411
|
+
$[48] = t8;
|
|
412
|
+
} else t8 = $[48];
|
|
413
|
+
return t8;
|
|
414
|
+
}));
|
|
415
|
+
|
|
416
|
+
//#endregion
|
|
417
|
+
export { StrataKitTreeRenderer };
|
|
418
|
+
//# sourceMappingURL=TreeRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeRenderer.js","names":["forwardRef","memo","useCallback","useEffect","useImperativeHandle","useMemo","useRef","Tree","useVirtualizer","useSelectionHandler","useEvent","useMergedRefs","isPlaceholderItem","useErrorNodes","useFlatTreeItems","TreeErrorRenderer","TreeNodeRenameContextProvider","useTreeNodeRenameContextValue","PlaceholderNode","StrataKitTreeNodeRenderer","ComponentProps","CSSProperties","FC","PropsWithoutRef","ReactElement","ReactNode","RefAttributes","TreeRendererProps","TreeNode","SelectionMode","FlatTreeItem","FlatTreeNodeItem","TreeErrorRendererProps","TreeNodeEditingProps","StrataKitTreeItemProps","TreeNodeRendererProps","TreeRendererOwnProps","id","treeLabel","selectionMode","errorRenderer","props","getEditingProps","node","treeRootProps","Partial","Omit","Root","getTreeItemProps","getMenuActions","targetNode","selectedNodes","getInlineActions","getContextMenuActions","StrataKitTreeRendererAttributes","renameNode","nodePredicate","StrataKitTreeRendererProps","Pick","StrataKitTreeRenderer","forwardedRef","rootNodes","selectNodes","expandNode","getHierarchyLevelDetails","filterHierarchyLevel","reloadTree","isNodeSelected","handleNodeSelect","flatItems","errorNodes","parentRef","HTMLDivElement","virtualizer","count","length","getScrollElement","current","getItemKey","index","estimateSize","overscan","items","getVirtualItems","expandAndScrollToNode","useExpandAndScrollToNode","renameContext","onComplete","requestAnimationFrame","startRename","cancelRename","isScrolling","errorRendererProps","scrollToNode","n","parentNodeId","state","getSelectedNodes","calculatedSelectedNodes","undefined","filter","item","map","height","width","overflowY","getTotalSize","minHeight","position","overflow","virtualizedItem","selected","measureElement","key","start","t0","$","_c","t1","pathToNode","findPathToNode","pop","collapsedNodes","_temp","forEach","didExpand","expandToNode","t2","t3","targetNodeId","findIndex","flatItem","scrollToIndex","align","onScrollComplete","t4","t5","nodePredicate_0","expandResult","targetNode_0","index_0","flatItem_0","pathNode","isExpanded","parent","children","childPath","VirtualTreeItemProps","HierarchyNodeItemProps","VirtualTreeItem","HTMLElement","top","left","transform","willChange","style","level","ReturnType","HierarchyNodeItem","rest","nodeRef","treeItemProps","isDisabled","menuActions","inlineActions","contextMenuActions","nodeActions","t6","e","onClick","detail","nodeId","isSelected","shiftDown","shiftKey","ctrlDown","ctrlKey","t7","e_0","onMouseDown","preventDefault","ref","t8","levelSize","posInLevel"],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeRenderer.tsx"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from \"react\";\nimport { Tree } from \"@stratakit/structures\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useSelectionHandler } from \"../UseSelectionHandler.js\";\nimport { useEvent, useMergedRefs } from \"../Utils.js\";\nimport { isPlaceholderItem, useErrorNodes, useFlatTreeItems } from \"./FlatTreeNode.js\";\nimport { TreeErrorRenderer } from \"./TreeErrorRenderer.js\";\nimport { TreeNodeRenameContextProvider, useTreeNodeRenameContextValue } from \"./TreeNodeRenameAction.js\";\nimport { PlaceholderNode, StrataKitTreeNodeRenderer } from \"./TreeNodeRenderer.js\";\n\nimport type { ComponentProps, CSSProperties, FC, PropsWithoutRef, ReactElement, ReactNode, RefAttributes } from \"react\";\nimport type { TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { SelectionMode } from \"../UseSelectionHandler.js\";\nimport type { FlatTreeItem, FlatTreeNodeItem } from \"./FlatTreeNode.js\";\nimport type { TreeErrorRendererProps } from \"./TreeErrorRenderer.js\";\nimport type { TreeNodeEditingProps } from \"./TreeNodeRenameAction.js\";\nimport type { StrataKitTreeItemProps, TreeNodeRendererProps } from \"./TreeNodeRenderer.js\";\n\n/** @alpha */\ninterface TreeRendererOwnProps {\n id?: string;\n /**\n * A user friendly display label of the tree. Should be unique within the consuming application,\n * as it's used for accessibility purposes.\n */\n treeLabel: string;\n /** Active selection mode used by the tree. Defaults to `\"single\"`. */\n selectionMode?: SelectionMode;\n /** A render function for errors' display component. Defaults to `<TreeErrorRenderer />`. */\n errorRenderer?: (props: TreeErrorRendererProps) => ReactElement;\n /** Props that defines if current node supports editing. */\n getEditingProps?: (node: TreeNode) => TreeNodeEditingProps | undefined;\n\n /** Custom props for the root Tree component. */\n treeRootProps?: Partial<Omit<ComponentProps<typeof Tree.Root>, \"style\">>;\n\n /** A callback that returns tree item props for specific node. */\n getTreeItemProps?: (node: TreeNode) => Partial<Omit<StrataKitTreeItemProps, \"selected\" | \"aria-level\" | \"aria-posinset\" | \"aria-setsize\">>;\n\n /**\n * Callback that returns menu actions for tree item.\n * Must return an array of `<TreeActionBase />` or `<Divider />` elements.\n */\n getMenuActions?: (props: { targetNode: TreeNode; selectedNodes: TreeNode[] }) => ReactNode[];\n /**\n * Callback that returns inline actions for tree item.\n * Must return an array of `<TreeActionBase />` elements.\n * Max 2 items.\n */\n getInlineActions?: (props: { targetNode: TreeNode; selectedNodes: TreeNode[] }) => ReactNode[];\n /**\n * Callback that returns actions for tree item context menu.\n * Must return an array of `<TreeActionBase />` or `<Divider />` elements.\n */\n getContextMenuActions?: (props: { targetNode: TreeNode; selectedNodes: TreeNode[] }) => ReactNode[];\n}\n\n/** @alpha */\nexport interface StrataKitTreeRendererAttributes {\n /**\n * Opens rename mode for the first node that matches the given predicate. Node must be already loaded in the tree.\n * If the node is not visible (because its parent is collapsed), all parents will be expanded to make it visible and node will be scrolled into view.\n *\n * Returns \"node-not-found\" if no node matches the predicate, \"success\" if rename was initiated.\n */\n renameNode: (nodePredicate: (node: TreeNode) => boolean) => \"node-not-found\" | \"success\";\n}\n\n/** @alpha */\ntype StrataKitTreeRendererProps = TreeRendererProps & Pick<TreeErrorRendererProps, \"filterHierarchyLevel\"> & TreeRendererOwnProps;\n\n/**\n * A component that renders a tree using the `Tree` component from `@stratakit/structures`.\n *\n * @alpha\n */\nexport const StrataKitTreeRenderer: FC<PropsWithoutRef<StrataKitTreeRendererProps> & RefAttributes<StrataKitTreeRendererAttributes>> = forwardRef<\n StrataKitTreeRendererAttributes,\n StrataKitTreeRendererProps\n>(function StrataKitTreeRenderer(props, forwardedRef) {\n const {\n id,\n rootNodes,\n selectNodes,\n selectionMode,\n expandNode,\n treeLabel,\n getHierarchyLevelDetails,\n filterHierarchyLevel,\n reloadTree,\n isNodeSelected,\n errorRenderer,\n treeRootProps,\n getContextMenuActions,\n getEditingProps,\n getInlineActions,\n getMenuActions,\n getTreeItemProps,\n } = props;\n const { handleNodeSelect } = useSelectionHandler({\n rootNodes,\n selectNodes,\n selectionMode: selectionMode ?? \"single\",\n });\n const flatItems = useFlatTreeItems(rootNodes);\n const errorNodes = useErrorNodes(rootNodes);\n\n const parentRef = useRef<HTMLDivElement>(null);\n\n // eslint-disable-next-line react-hooks/incompatible-library\n const virtualizer = useVirtualizer({\n count: flatItems.length,\n getScrollElement: () => parentRef.current,\n getItemKey: useCallback((index: number) => flatItems[index].id, [flatItems]),\n estimateSize: () => 28,\n overscan: 10,\n });\n const items = virtualizer.getVirtualItems();\n const expandAndScrollToNode = useExpandAndScrollToNode({ rootNodes, flatItems, expandNode, virtualizer });\n\n const renameContext = useTreeNodeRenameContextValue({\n getEditingProps,\n });\n useImperativeHandle(forwardedRef, () => ({\n renameNode: (nodePredicate) =>\n expandAndScrollToNode({\n nodePredicate,\n onComplete: (targetNode) => {\n // give time to scroll node into view before starting rename\n requestAnimationFrame(() => renameContext.startRename(targetNode));\n },\n }),\n }));\n\n const cancelRename = renameContext.cancelRename;\n const isScrolling = virtualizer.isScrolling;\n useEffect(() => {\n if (isScrolling) {\n // cancel rename when scroll is initiated\n cancelRename();\n }\n }, [isScrolling, cancelRename]);\n\n const errorRendererProps: TreeErrorRendererProps = {\n treeLabel,\n errorNodes,\n scrollToNode: (node) => expandAndScrollToNode({ nodePredicate: (n) => n.id === node.id }),\n getHierarchyLevelDetails,\n filterHierarchyLevel,\n reloadTree: useCallback<TreeErrorRendererProps[\"reloadTree\"]>(({ parentNodeId }) => reloadTree({ parentNodeId, state: \"reset\" }), [reloadTree]),\n };\n\n const getSelectedNodes = useMemo(() => {\n let calculatedSelectedNodes: TreeNode[] | undefined;\n return () => {\n if (calculatedSelectedNodes === undefined) {\n calculatedSelectedNodes = flatItems\n .filter((item): item is FlatTreeNodeItem => !isPlaceholderItem(item) && isNodeSelected(item.id))\n .map((item) => item.node);\n }\n return calculatedSelectedNodes;\n };\n }, [flatItems, isNodeSelected]);\n\n return (\n <>\n {errorRenderer ? errorRenderer(errorRendererProps) : <TreeErrorRenderer {...errorRendererProps} />}\n <div id={id} style={{ height: \"100%\", width: \"100%\", overflowY: \"auto\" }} ref={parentRef}>\n <Tree.Root\n {...treeRootProps}\n style={{ height: virtualizer.getTotalSize(), minHeight: \"100%\", width: \"100%\", position: \"relative\", overflow: \"hidden\" }}\n >\n <TreeNodeRenameContextProvider value={renameContext}>\n {items.map((virtualizedItem) => {\n const item = flatItems[virtualizedItem.index];\n const selected = isNodeSelected(item.id);\n return (\n <VirtualTreeItem\n ref={virtualizer.measureElement}\n key={virtualizedItem.key}\n data-index={virtualizedItem.index}\n start={virtualizedItem.start}\n item={item}\n selected={selected}\n expandNode={expandNode}\n reloadTree={reloadTree}\n handleNodeSelect={handleNodeSelect}\n getSelectedNodes={getSelectedNodes}\n getContextMenuActions={getContextMenuActions}\n getInlineActions={getInlineActions}\n getMenuActions={getMenuActions}\n getTreeItemProps={getTreeItemProps}\n />\n );\n })}\n </TreeNodeRenameContextProvider>\n </Tree.Root>\n </div>\n </>\n );\n});\n\nfunction useExpandAndScrollToNode({\n rootNodes,\n flatItems,\n expandNode,\n virtualizer,\n}: Pick<StrataKitTreeRendererProps, \"rootNodes\" | \"expandNode\"> & {\n flatItems: ReturnType<typeof useFlatTreeItems>;\n virtualizer: Pick<ReturnType<typeof useVirtualizer>, \"scrollToIndex\">;\n}) {\n const expandToNode = (nodePredicate: (node: TreeNode) => boolean) => {\n const pathToNode = findPathToNode(rootNodes, nodePredicate);\n if (!pathToNode) {\n return undefined;\n }\n const targetNode = pathToNode.pop()!;\n const collapsedNodes = pathToNode.filter((pathNode) => !pathNode.isExpanded);\n collapsedNodes.forEach((node) => expandNode(node.id, true));\n return { targetNode, didExpand: collapsedNodes.length > 0 };\n };\n\n const scrollToNode = useRef<{ id: string; onScrollComplete?: () => void } | undefined>(undefined);\n useEffect(() => {\n if (scrollToNode.current === undefined) {\n return;\n }\n const targetNodeId = scrollToNode.current.id;\n const index = flatItems.findIndex((flatItem) => flatItem.id === targetNodeId);\n if (index === -1) {\n return;\n }\n virtualizer.scrollToIndex(index, { align: \"auto\" });\n scrollToNode.current.onScrollComplete?.();\n scrollToNode.current = undefined;\n }, [flatItems, virtualizer]);\n\n return ({ nodePredicate, onComplete }: { nodePredicate: (node: TreeNode) => boolean; onComplete?: (targetNode: TreeNode) => void }) => {\n const expandResult = expandToNode(nodePredicate);\n if (!expandResult) {\n return \"node-not-found\";\n }\n\n const { targetNode, didExpand } = expandResult;\n if (didExpand) {\n scrollToNode.current = {\n id: targetNode.id,\n onScrollComplete: onComplete ? () => onComplete(targetNode) : undefined,\n };\n } else {\n const index = flatItems.findIndex((flatItem) => flatItem.id === targetNode.id);\n virtualizer.scrollToIndex(index, { align: \"auto\" });\n onComplete?.(targetNode);\n }\n return \"success\";\n };\n}\n\nfunction findPathToNode(rootNodes: TreeNode[], nodePredicate: (node: TreeNode) => boolean): TreeNode[] | undefined {\n for (const parent of rootNodes) {\n if (nodePredicate(parent)) {\n return [parent];\n }\n if (parent.children !== true) {\n const childPath = findPathToNode(parent.children, nodePredicate);\n if (childPath) {\n return [parent, ...childPath];\n }\n }\n }\n return undefined;\n}\n\ntype VirtualTreeItemProps = Omit<HierarchyNodeItemProps, \"item\"> & {\n start: number;\n \"data-index\": number;\n item: FlatTreeItem;\n};\n\nconst VirtualTreeItem = memo(\n forwardRef<HTMLElement, VirtualTreeItemProps>(function VirtualTreeItem({ start, item, ...props }, forwardedRef) {\n const style: CSSProperties = useMemo(\n () => ({\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${start}px)`,\n willChange: \"transform\",\n }),\n [start],\n );\n\n if (isPlaceholderItem(item)) {\n return <PlaceholderNode ref={forwardedRef} data-index={props[\"data-index\"]} style={style} aria-level={item.level} aria-posinset={1} aria-setsize={1} />;\n }\n\n return <HierarchyNodeItem {...props} ref={forwardedRef} style={style} item={item} />;\n }),\n);\n\ntype HierarchyNodeItemProps = {\n item: FlatTreeNodeItem;\n style?: CSSProperties;\n getSelectedNodes: () => TreeNode[];\n} & Pick<TreeNodeRendererProps, \"expandNode\" | \"reloadTree\" | \"selected\"> &\n Pick<TreeRendererOwnProps, \"getContextMenuActions\" | \"getInlineActions\" | \"getMenuActions\" | \"getTreeItemProps\"> &\n Pick<ReturnType<typeof useSelectionHandler>, \"handleNodeSelect\">;\n\nconst HierarchyNodeItem = memo(\n forwardRef<HTMLElement, HierarchyNodeItemProps>(function HierarchyNodeItem(\n { item, selected, getTreeItemProps, handleNodeSelect, getSelectedNodes, getMenuActions, getInlineActions, getContextMenuActions, ...rest },\n forwardedRef,\n ) {\n const nodeRef = useRef<HTMLElement>(null);\n const node = item.node;\n const treeItemProps = getTreeItemProps?.(node);\n\n const isDisabled = treeItemProps?.[\"aria-disabled\"] === true;\n const nodeActions = useMemo(\n () => ({\n menuActions: getMenuActions ? getMenuActions({ targetNode: node, selectedNodes: getSelectedNodes() }) : undefined,\n inlineActions: getInlineActions ? getInlineActions({ targetNode: node, selectedNodes: getSelectedNodes() }) : undefined,\n contextMenuActions: getContextMenuActions ? getContextMenuActions({ targetNode: node, selectedNodes: getSelectedNodes() }) : undefined,\n }),\n [node, getMenuActions, getInlineActions, getContextMenuActions, getSelectedNodes],\n );\n\n const onClick = useEvent<Required<TreeNodeRendererProps>[\"onClick\"]>((e) => {\n if (treeItemProps?.onClick) {\n treeItemProps.onClick(e);\n }\n // ignore if this is double click\n if (isDisabled || e.detail > 1) {\n return;\n }\n handleNodeSelect({ nodeId: node.id, isSelected: selected ?? false, shiftDown: e.shiftKey, ctrlDown: e.ctrlKey });\n });\n\n const onMouseDown = useEvent<Required<TreeNodeRendererProps>[\"onMouseDown\"]>((e) => {\n if (treeItemProps?.onMouseDown) {\n treeItemProps.onMouseDown(e);\n }\n // prevent text selection on shift+click\n if (e.shiftKey) {\n e.preventDefault();\n }\n });\n\n const ref = useMergedRefs(forwardedRef, nodeRef);\n return (\n <StrataKitTreeNodeRenderer\n {...treeItemProps}\n {...rest}\n {...nodeActions}\n ref={ref}\n aria-level={item.level}\n aria-posinset={item.posInLevel}\n aria-setsize={item.levelSize}\n node={item.node}\n selected={selected}\n onClick={onClick}\n onMouseDown={onMouseDown}\n />\n );\n }),\n);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ErrorInfo, GenericErrorInfo, ResultSetTooLargeErrorInfo, TreeNode } from "./presentation-hierarchies-react/TreeNode.js";
|
|
2
|
+
import { HierarchyLevelDetails, TreeRendererProps } from "./presentation-hierarchies-react/Renderers.js";
|
|
3
|
+
import { useTree, useUnifiedSelectionTree } from "./presentation-hierarchies-react/UseTree.js";
|
|
4
|
+
import { useNodeHighlighting } from "./presentation-hierarchies-react/UseNodeHighlighting.js";
|
|
5
|
+
import { useIModelTree, useIModelUnifiedSelectionTree } from "./presentation-hierarchies-react/UseIModelTree.js";
|
|
6
|
+
import { TreeActionBase, TreeActionBaseAttributes } from "./presentation-hierarchies-react/stratakit/TreeAction.js";
|
|
7
|
+
import { TreeNodeFilterAction } from "./presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js";
|
|
8
|
+
import { TreeNodeRenameAction } from "./presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js";
|
|
9
|
+
import { FlatTreeItem, useErrorNodes, useFlatTreeItems } from "./presentation-hierarchies-react/stratakit/FlatTreeNode.js";
|
|
10
|
+
import { ErrorItemRenderer } from "./presentation-hierarchies-react/stratakit/ErrorItemRenderer.js";
|
|
11
|
+
import { TreeErrorRenderer } from "./presentation-hierarchies-react/stratakit/TreeErrorRenderer.js";
|
|
12
|
+
import { StrataKitTreeRenderer, StrataKitTreeRendererAttributes } from "./presentation-hierarchies-react/stratakit/TreeRenderer.js";
|
|
13
|
+
import { StrataKitRootErrorRenderer } from "./presentation-hierarchies-react/stratakit/RootErrorRenderer.js";
|
|
14
|
+
import { LOCALIZATION_NAMESPACES } from "./presentation-hierarchies-react/internal/LocalizedStrings.js";
|
|
15
|
+
import { LocalizationContextProvider } from "./presentation-hierarchies-react/stratakit/LocalizationContext.js";
|
|
16
|
+
import { GenericInstanceFilter, HierarchyNode, HierarchyProvider, getLogger, setLogger } from "@itwin/presentation-hierarchies";
|
|
17
|
+
import { SelectionStorage } from "@itwin/unified-selection";
|
|
18
|
+
export { type ErrorInfo, ErrorItemRenderer, type FlatTreeItem, type GenericErrorInfo, GenericInstanceFilter, type HierarchyLevelDetails, HierarchyNode, type HierarchyProvider, LOCALIZATION_NAMESPACES, LocalizationContextProvider, type ResultSetTooLargeErrorInfo, type SelectionStorage, StrataKitRootErrorRenderer, StrataKitTreeRenderer, type StrataKitTreeRendererAttributes, TreeActionBase, type TreeActionBaseAttributes, TreeErrorRenderer, type TreeNode, TreeNodeFilterAction, TreeNodeRenameAction, type TreeRendererProps, getLogger, setLogger, useErrorNodes, useFlatTreeItems, useIModelTree, useIModelUnifiedSelectionTree, useNodeHighlighting, useTree, useUnifiedSelectionTree };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useTree, useUnifiedSelectionTree } from "./presentation-hierarchies-react/UseTree.js";
|
|
2
|
+
import { useNodeHighlighting } from "./presentation-hierarchies-react/UseNodeHighlighting.js";
|
|
3
|
+
import { LOCALIZATION_NAMESPACES } from "./presentation-hierarchies-react/internal/LocalizedStrings.js";
|
|
4
|
+
import { LocalizationContextProvider } from "./presentation-hierarchies-react/stratakit/LocalizationContext.js";
|
|
5
|
+
import { useIModelTree, useIModelUnifiedSelectionTree } from "./presentation-hierarchies-react/UseIModelTree.js";
|
|
6
|
+
import { TreeActionBase } from "./presentation-hierarchies-react/stratakit/TreeAction.js";
|
|
7
|
+
import { TreeNodeFilterAction } from "./presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js";
|
|
8
|
+
import { TreeNodeRenameAction } from "./presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js";
|
|
9
|
+
import { useErrorNodes, useFlatTreeItems } from "./presentation-hierarchies-react/stratakit/FlatTreeNode.js";
|
|
10
|
+
import { ErrorItemRenderer } from "./presentation-hierarchies-react/stratakit/ErrorItemRenderer.js";
|
|
11
|
+
import { TreeErrorRenderer } from "./presentation-hierarchies-react/stratakit/TreeErrorRenderer.js";
|
|
12
|
+
import { StrataKitTreeRenderer } from "./presentation-hierarchies-react/stratakit/TreeRenderer.js";
|
|
13
|
+
import { StrataKitRootErrorRenderer } from "./presentation-hierarchies-react/stratakit/RootErrorRenderer.js";
|
|
14
|
+
import { GenericInstanceFilter, HierarchyNode, getLogger, setLogger } from "@itwin/presentation-hierarchies";
|
|
15
|
+
|
|
16
|
+
export { ErrorItemRenderer, GenericInstanceFilter, HierarchyNode, LOCALIZATION_NAMESPACES, LocalizationContextProvider, StrataKitRootErrorRenderer, StrataKitTreeRenderer, TreeActionBase, TreeErrorRenderer, TreeNodeFilterAction, TreeNodeRenameAction, getLogger, setLogger, useErrorNodes, useFlatTreeItems, useIModelTree, useIModelUnifiedSelectionTree, useNodeHighlighting, useTree, useUnifiedSelectionTree };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"loading": "Loading...",
|
|
3
|
+
"filterHierarchyLevel": "Apply filter",
|
|
4
|
+
"filterHierarchyLevelActiveDescription": "Filter is applied",
|
|
5
|
+
"clearHierarchyLevelFilter": "Clear active filter",
|
|
6
|
+
"noFilteredChildren": "No matches for current filter for {{node}}.",
|
|
7
|
+
"noFilteredChildrenChangeFilter": "Change filter",
|
|
8
|
+
"failedToCreateHierarchy": "Failed to create hierarchy for {{node}}.",
|
|
9
|
+
"failedToCreateRootHierarchy": "Failed to load tree.",
|
|
10
|
+
"resultLimitExceeded": "The hierarchy for {{node}} contains {{limit}}+ items. Try using filters or increase the limit.",
|
|
11
|
+
"rootResultLimitExceeded": "The root item hierarchy contains {{limit}}+ items. Try increasing the limit.",
|
|
12
|
+
"issuesForTree": "Issues for {{tree_label}}.",
|
|
13
|
+
"issuesFound": "{{number_of_issues}} issue(s) found.",
|
|
14
|
+
"noIssuesFound": "No issues found.",
|
|
15
|
+
"increaseHierarchyLimit": "Increase limit to {{limit}}",
|
|
16
|
+
"increaseHierarchyLimitToUnlimited": "Remove limit",
|
|
17
|
+
"increaseHierarchyLimitWithFiltering": "Add Filter",
|
|
18
|
+
"retry": "Retry",
|
|
19
|
+
"rename": "Rename",
|
|
20
|
+
"more": "More",
|
|
21
|
+
"confirm": "Confirm",
|
|
22
|
+
"cancel": "Cancel",
|
|
23
|
+
"newLabel": "New label",
|
|
24
|
+
"other": "Other",
|
|
25
|
+
"unspecified": "Unspecified"
|
|
26
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/presentation-hierarchies-react",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.55",
|
|
4
4
|
"description": "React components based on `@itwin/presentation-hierarchies`",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -28,24 +28,24 @@
|
|
|
28
28
|
"Tree"
|
|
29
29
|
],
|
|
30
30
|
"type": "module",
|
|
31
|
-
"types": "lib/
|
|
32
|
-
"module": "lib/esm/presentation-hierarchies-react.js",
|
|
31
|
+
"types": "lib/presentation-hierarchies-react.d.ts",
|
|
33
32
|
"exports": {
|
|
34
33
|
".": {
|
|
35
|
-
"import": "./lib/
|
|
34
|
+
"import": "./lib/presentation-hierarchies-react.js"
|
|
36
35
|
},
|
|
37
36
|
"./package.json": "./package.json"
|
|
38
37
|
},
|
|
39
38
|
"dependencies": {
|
|
40
|
-
"@itwin/core-bentley": "^5.
|
|
39
|
+
"@itwin/core-bentley": "^5.6.2",
|
|
41
40
|
"@tanstack/react-virtual": "^3.13.13",
|
|
42
41
|
"classnames": "^2.5.1",
|
|
43
42
|
"immer": "^10.2.0",
|
|
43
|
+
"react-compiler-runtime": "^1.0.0",
|
|
44
44
|
"react-error-boundary": "^4.1.2",
|
|
45
45
|
"rxjs": "^7.8.2",
|
|
46
|
-
"@itwin/presentation-hierarchies": "^2.0.0-alpha.
|
|
47
|
-
"@itwin/
|
|
48
|
-
"@itwin/
|
|
46
|
+
"@itwin/presentation-hierarchies": "^2.0.0-alpha.12",
|
|
47
|
+
"@itwin/presentation-shared": "^2.0.0-alpha.8",
|
|
48
|
+
"@itwin/unified-selection": "^1.6.8-alpha.0"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"@stratakit/bricks": "^0.5.4",
|
|
@@ -70,53 +70,59 @@
|
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"@itwin/build-tools": "^5.
|
|
73
|
+
"@itwin/build-tools": "^5.6.2",
|
|
74
74
|
"@itwin/eslint-plugin": "5.1.0",
|
|
75
|
+
"@rollup/plugin-babel": "^6.1.0",
|
|
75
76
|
"@stratakit/bricks": "^0.5.4",
|
|
76
77
|
"@stratakit/foundations": "^0.4.5",
|
|
77
78
|
"@stratakit/icons": "^0.2.2",
|
|
78
79
|
"@stratakit/structures": "^0.5.4",
|
|
79
80
|
"@testing-library/dom": "^10.4.1",
|
|
80
|
-
"@testing-library/react": "^16.3.
|
|
81
|
+
"@testing-library/react": "^16.3.2",
|
|
81
82
|
"@testing-library/user-event": "^14.6.1",
|
|
82
83
|
"@types/chai": "^5.2.3",
|
|
83
84
|
"@types/chai-as-promised": "^8.0.2",
|
|
84
85
|
"@types/jsdom": "^21.1.7",
|
|
85
86
|
"@types/mocha": "^10.0.10",
|
|
86
|
-
"@types/node": "^22.19.
|
|
87
|
-
"@types/react": "^18.3.
|
|
87
|
+
"@types/node": "^22.19.13",
|
|
88
|
+
"@types/react": "^18.3.28",
|
|
88
89
|
"@types/react-dom": "^18.3.7",
|
|
89
90
|
"@types/sinon": "^17.0.4",
|
|
90
91
|
"@types/sinon-chai": "^4.0.0",
|
|
91
|
-
"
|
|
92
|
+
"babel-plugin-react-compiler": "^1.0.0",
|
|
92
93
|
"chai": "^5.3.3",
|
|
93
94
|
"chai-as-promised": "^8.0.2",
|
|
94
95
|
"cpx2": "^7.0.2",
|
|
95
96
|
"cross-env": "^7.0.3",
|
|
96
|
-
"eslint": "^9.39.
|
|
97
|
+
"eslint": "^9.39.3",
|
|
97
98
|
"eslint-plugin-react": "^7.37.5",
|
|
99
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
98
100
|
"global-jsdom": "^26.0.0",
|
|
99
101
|
"ignore-styles": "^5.0.1",
|
|
100
102
|
"jsdom": "^26.1.0",
|
|
101
103
|
"mocha": "^11.7.5",
|
|
102
104
|
"react": "^18.3.1",
|
|
103
105
|
"react-dom": "^18.3.1",
|
|
104
|
-
"rimraf": "^6.1.
|
|
106
|
+
"rimraf": "^6.1.3",
|
|
105
107
|
"sinon": "^19.0.5",
|
|
106
108
|
"sinon-chai": "^4.0.1",
|
|
109
|
+
"tsdown": "^0.20.1",
|
|
107
110
|
"typescript": "~5.7.3",
|
|
108
111
|
"presentation-test-utilities": "^0.0.1"
|
|
109
112
|
},
|
|
110
113
|
"scripts": {
|
|
111
|
-
"build": "npm run -s build:
|
|
112
|
-
"build:
|
|
113
|
-
"copy
|
|
114
|
+
"build": "tsdown && npm run -s build:locale && npm run -s copy && npm run -s build:test",
|
|
115
|
+
"build:locale": "tsc -p tsconfig.utils.json && node ./lib/build/utils/BuildLocale.js",
|
|
116
|
+
"copy": "npm run -s copy:css && npm run -s copy:assets",
|
|
117
|
+
"copy:css": "cpx \"./src/**/*.css\" \"./lib\"",
|
|
118
|
+
"copy:assets": "cpx \"./src/public/**/*\" \"./lib/public\"",
|
|
119
|
+
"build:test": "tsdown --config tsdown.test.config.ts",
|
|
114
120
|
"clean": "rimraf lib build",
|
|
115
|
-
"cover": "
|
|
116
|
-
"lint": "eslint ./src/**/*.{ts,tsx}",
|
|
121
|
+
"cover": "npm -s test",
|
|
122
|
+
"lint": "eslint \"./src/**/*.{ts,tsx}\"",
|
|
117
123
|
"test:dev": "node --experimental-test-module-mocks --enable-source-maps --import presentation-test-utilities/node-hooks/ignore-styles ./node_modules/mocha/bin/mocha.js --config ./.mocharc.json",
|
|
118
124
|
"test": "npm run test:dev -- --parallel --jobs=4",
|
|
119
|
-
"extract-api": "betools extract-api --entry=lib/
|
|
125
|
+
"extract-api": "betools extract-api --entry=lib/presentation-hierarchies-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api --includeUnexportedApis",
|
|
120
126
|
"check-internal": "node ../../scripts/checkInternal.js --apiSummary ./api/presentation-hierarchies-react.api.md",
|
|
121
127
|
"update-extractions": "node ../../scripts/updateExtractions.js --targets=./README.md",
|
|
122
128
|
"check-extractions": "node ../../scripts/updateExtractions.js --targets=./README.md --check",
|