@itwin/presentation-hierarchies-react 2.0.0-alpha.65 → 2.0.0-alpha.67
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 +54 -0
- package/README.md +2 -8
- package/lib/presentation-hierarchies-react/UseIModelTree.js.map +1 -1
- package/lib/presentation-hierarchies-react/UseTree.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/{TreeNodeRenderer.css → LabelEditor.css} +3 -3
- package/lib/presentation-hierarchies-react/stratakit/LabelEditor.js +300 -0
- package/lib/presentation-hierarchies-react/stratakit/LabelEditor.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js +0 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeContextMenu.js +97 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeContextMenu.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +0 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +43 -351
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js +34 -5
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -1
- package/package.json +31 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRenderer.js","names":["forwardRef","memo","useCallback","useEffect","useImperativeHandle","useMemo","useRef","Tree","useVirtualizer","isPlaceholderItem","useErrorNodes","useFlatTreeItems","useSelectionHandler","useEvent","useMergedRefs","TreeErrorRenderer","TreeNodeRenameContextProvider","useTreeNodeRenameContextValue","PlaceholderNode","StrataKitTreeNodeRenderer","ComponentProps","CSSProperties","FC","PropsWithoutRef","ReactElement","ReactNode","RefAttributes","FlatTreeItem","FlatTreeNodeItem","TreeRendererProps","TreeNode","SelectionMode","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 { isPlaceholderItem, useErrorNodes, useFlatTreeItems } from \"../FlatTreeNode.js\";\nimport { useSelectionHandler } from \"../UseSelectionHandler.js\";\nimport { useEvent, useMergedRefs } from \"../Utils.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 { FlatTreeItem, FlatTreeNodeItem } from \"../FlatTreeNode.js\";\nimport type { TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { SelectionMode } from \"../UseSelectionHandler.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?: (\n node: TreeNode,\n ) => 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 &\n Pick<TreeErrorRendererProps, \"filterHierarchyLevel\"> &\n 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<\n PropsWithoutRef<StrataKitTreeRendererProps> & RefAttributes<StrataKitTreeRendererAttributes>\n> = forwardRef<StrataKitTreeRendererAttributes, 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({ getEditingProps });\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\"]>(\n ({ parentNodeId }) => reloadTree({ parentNodeId, state: \"reset\" }),\n [reloadTree],\n ),\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={{\n height: virtualizer.getTotalSize(),\n minHeight: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\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);\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 ({\n nodePredicate,\n onComplete,\n }: {\n nodePredicate: (node: TreeNode) => boolean;\n onComplete?: (targetNode: TreeNode) => void;\n }) => {\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 (\n <PlaceholderNode\n ref={forwardedRef}\n data-index={props[\"data-index\"]}\n style={style}\n aria-level={item.level}\n aria-posinset={1}\n aria-setsize={1}\n />\n );\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 {\n item,\n selected,\n getTreeItemProps,\n handleNodeSelect,\n getSelectedNodes,\n getMenuActions,\n getInlineActions,\n getContextMenuActions,\n ...rest\n },\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\n ? getMenuActions({ targetNode: node, selectedNodes: getSelectedNodes() })\n : undefined,\n inlineActions: getInlineActions\n ? getInlineActions({ targetNode: node, selectedNodes: getSelectedNodes() })\n : undefined,\n contextMenuActions: getContextMenuActions\n ? getContextMenuActions({ targetNode: node, selectedNodes: getSelectedNodes() })\n : 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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"}
|
|
1
|
+
{"version":3,"file":"TreeRenderer.js","names":["forwardRef","memo","useCallback","useEffect","useImperativeHandle","useMemo","useRef","Tree","useVirtualizer","isPlaceholderItem","useErrorNodes","useFlatTreeItems","useSelectionHandler","useEvent","useMergedRefs","TreeNodeLabelEditorOverlay","TreeContextMenuProvider","TreeErrorRenderer","TreeNodeRenameContextProvider","useTreeNodeRenameContextValue","PlaceholderNode","StrataKitTreeNodeRenderer","ComponentProps","CSSProperties","FC","PropsWithoutRef","ReactElement","ReactNode","RefAttributes","VirtualItem","FlatTreeItem","FlatTreeNodeItem","TreeRendererProps","TreeNode","SelectionMode","TreeErrorRendererProps","RenameParameters","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","renameOverlayTarget","getRenameOverlayTarget","renameParameters","height","width","overflowY","position","getTotalSize","minHeight","overflow","virtualizedItem","selected","measureElement","key","start","style","virtualItem","find","nodeId","levelPadding","level","expanderWidth","top","left","transform","size","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","willChange","ReturnType","HierarchyNodeItem","rest","nodeRef","treeItemProps","isDisabled","menuActions","inlineActions","contextMenuActions","nodeActions","t6","e","onClick","detail","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 { isPlaceholderItem, useErrorNodes, useFlatTreeItems } from \"../FlatTreeNode.js\";\nimport { useSelectionHandler } from \"../UseSelectionHandler.js\";\nimport { useEvent, useMergedRefs } from \"../Utils.js\";\nimport { TreeNodeLabelEditorOverlay } from \"./LabelEditor.js\";\nimport { TreeContextMenuProvider } from \"./TreeContextMenu.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 { VirtualItem } from \"@tanstack/react-virtual\";\nimport type { FlatTreeItem, FlatTreeNodeItem } from \"../FlatTreeNode.js\";\nimport type { TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { SelectionMode } from \"../UseSelectionHandler.js\";\nimport type { TreeErrorRendererProps } from \"./TreeErrorRenderer.js\";\nimport type { RenameParameters, 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?: (\n node: TreeNode,\n ) => 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 &\n Pick<TreeErrorRendererProps, \"filterHierarchyLevel\"> &\n 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<\n PropsWithoutRef<StrataKitTreeRendererProps> & RefAttributes<StrataKitTreeRendererAttributes>\n> = forwardRef<StrataKitTreeRendererAttributes, StrataKitTreeRendererProps>(\n // eslint-disable-next-line @typescript-eslint/no-shadow\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({ getEditingProps });\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\"]>(\n ({ parentNodeId }) => reloadTree({ parentNodeId, state: \"reset\" }),\n [reloadTree],\n ),\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 const renameOverlayTarget = getRenameOverlayTarget({\n renameParameters: renameContext.renameParameters,\n items,\n flatItems,\n });\n\n return (\n <TreeContextMenuProvider>\n {errorRenderer ? errorRenderer(errorRendererProps) : <TreeErrorRenderer {...errorRendererProps} />}\n <div id={id} style={{ height: \"100%\", width: \"100%\", overflowY: \"auto\", position: \"relative\" }} ref={parentRef}>\n <Tree.Root\n {...treeRootProps}\n style={{\n height: virtualizer.getTotalSize(),\n minHeight: \"100%\",\n width: \"100%\",\n position: \"relative\",\n overflow: \"hidden\",\n }}\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 {renameContext.renameParameters && renameOverlayTarget ? (\n <TreeNodeLabelEditorOverlay\n node={renameOverlayTarget.node}\n renameParameters={renameContext.renameParameters}\n onCancel={cancelRename}\n style={renameOverlayTarget.style}\n />\n ) : null}\n </div>\n </TreeContextMenuProvider>\n );\n },\n);\n\nfunction getRenameOverlayTarget({\n renameParameters,\n items,\n flatItems,\n}: {\n renameParameters: RenameParameters | undefined;\n items: VirtualItem[];\n flatItems: FlatTreeItem[];\n}) {\n if (!renameParameters) {\n return undefined;\n }\n const virtualItem = items.find((virtualizedItem) => flatItems[virtualizedItem.index].id === renameParameters.nodeId);\n const item = virtualItem ? flatItems[virtualItem.index] : undefined;\n if (!virtualItem || !item || isPlaceholderItem(item)) {\n return undefined;\n }\n\n const levelPadding = `var(--stratakit-space-x2) + (var(--stratakit-space-x1) + var(--stratakit-space-x05)) * ${item.level - 1}`;\n const expanderWidth = `1.5rem + var(--stratakit-space-x1)`;\n return {\n node: item.node,\n style: {\n position: \"absolute\",\n top: 0,\n left: `calc(${levelPadding} + ${expanderWidth})`,\n transform: `translateY(${virtualItem.start + virtualItem.size}px)`,\n } satisfies CSSProperties,\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 ({\n nodePredicate,\n onComplete,\n }: {\n nodePredicate: (node: TreeNode) => boolean;\n onComplete?: (targetNode: TreeNode) => void;\n }) => {\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 // eslint-disable-next-line @typescript-eslint/no-shadow\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 (\n <PlaceholderNode\n ref={forwardedRef}\n data-index={props[\"data-index\"]}\n style={style}\n aria-level={item.level}\n aria-posinset={1}\n aria-setsize={1}\n />\n );\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n forwardRef<HTMLElement, HierarchyNodeItemProps>(function HierarchyNodeItem(\n {\n item,\n selected,\n getTreeItemProps,\n handleNodeSelect,\n getSelectedNodes,\n getMenuActions,\n getInlineActions,\n getContextMenuActions,\n ...rest\n },\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\n ? getMenuActions({ targetNode: node, selectedNodes: getSelectedNodes() })\n : undefined,\n inlineActions: getInlineActions\n ? getInlineActions({ targetNode: node, selectedNodes: getSelectedNodes() })\n : undefined,\n contextMenuActions: getContextMenuActions\n ? getContextMenuActions({ targetNode: node, selectedNodes: getSelectedNodes() })\n : 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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"}
|
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.67",
|
|
4
4
|
"description": "React components based on `@itwin/presentation-hierarchies`",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -41,62 +41,67 @@
|
|
|
41
41
|
"./package.json": "./package.json"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@itwin/core-bentley": "^5.
|
|
45
|
-
"@stratakit/icons": "^0.4.
|
|
46
|
-
"@stratakit/structures": "^0.
|
|
44
|
+
"@itwin/core-bentley": "^5.13.1",
|
|
45
|
+
"@stratakit/icons": "^0.4.3",
|
|
46
|
+
"@stratakit/structures": "^0.6.0",
|
|
47
47
|
"@tanstack/react-virtual": "^3.13.24",
|
|
48
48
|
"classnames": "^2.5.1",
|
|
49
49
|
"immer": "^10.2.0",
|
|
50
50
|
"react-compiler-runtime": "^1.0.0",
|
|
51
51
|
"react-error-boundary": "^4.1.2",
|
|
52
52
|
"rxjs": "^7.8.2",
|
|
53
|
-
"@itwin/presentation-hierarchies": "2.0.0-alpha.
|
|
54
|
-
"@itwin/
|
|
55
|
-
"@itwin/
|
|
53
|
+
"@itwin/presentation-hierarchies": "2.0.0-alpha.19",
|
|
54
|
+
"@itwin/presentation-shared": "2.0.0-alpha.14",
|
|
55
|
+
"@itwin/unified-selection": "^2.0.0-alpha.2"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
|
-
"@mui/material": "^9.
|
|
59
|
-
"@stratakit/
|
|
60
|
-
"
|
|
61
|
-
"react
|
|
58
|
+
"@mui/material": "^9.4.0",
|
|
59
|
+
"@stratakit/foundations": "^1.0.0",
|
|
60
|
+
"@stratakit/mui": "^1.0.0",
|
|
61
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
62
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
62
63
|
},
|
|
63
64
|
"peerDependenciesMeta": {
|
|
64
65
|
"@mui/material": {
|
|
65
66
|
"optional": true
|
|
66
67
|
},
|
|
68
|
+
"@stratakit/foundations": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
67
71
|
"@stratakit/mui": {
|
|
68
72
|
"optional": true
|
|
69
73
|
}
|
|
70
74
|
},
|
|
71
75
|
"devDependencies": {
|
|
72
|
-
"@itwin/build-tools": "^5.
|
|
76
|
+
"@itwin/build-tools": "^5.13.1",
|
|
73
77
|
"@itwin/eslint-plugin": "^6.1.0",
|
|
74
|
-
"@mui/material": "^9.
|
|
78
|
+
"@mui/material": "^9.4.0",
|
|
75
79
|
"@rolldown/plugin-babel": "^0.2.3",
|
|
76
|
-
"@stratakit/
|
|
80
|
+
"@stratakit/foundations": "^1.0.0",
|
|
81
|
+
"@stratakit/mui": "^1.0.0",
|
|
77
82
|
"@testing-library/dom": "^10.4.1",
|
|
78
|
-
"@testing-library/react": "^16.3.
|
|
79
|
-
"@testing-library/user-event": "^14.6.
|
|
80
|
-
"@types/node": "^24.13.
|
|
81
|
-
"@types/react": "^19.
|
|
82
|
-
"@types/react-dom": "^19.
|
|
83
|
-
"@vitejs/plugin-react": "^6.
|
|
83
|
+
"@testing-library/react": "^16.3.3",
|
|
84
|
+
"@testing-library/user-event": "^14.6.7",
|
|
85
|
+
"@types/node": "^24.13.4",
|
|
86
|
+
"@types/react": "^19.3.0",
|
|
87
|
+
"@types/react-dom": "^19.3.0",
|
|
88
|
+
"@vitejs/plugin-react": "^6.1.1",
|
|
84
89
|
"@vitest/browser-playwright": "^4.1.10",
|
|
85
|
-
"@
|
|
90
|
+
"@typescript/native": "npm:typescript@~7.0.2",
|
|
91
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
86
92
|
"axe-core": "^4.11.4",
|
|
87
93
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
88
94
|
"eslint": "^9.39.5",
|
|
89
95
|
"eslint-plugin-react": "^7.37.5",
|
|
90
96
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
91
|
-
"happy-dom": "^20.
|
|
97
|
+
"happy-dom": "^20.14.5",
|
|
92
98
|
"playwright": "^1.59.1",
|
|
93
|
-
"react": "^19.
|
|
94
|
-
"react-dom": "^19.
|
|
99
|
+
"react": "^19.3.0",
|
|
100
|
+
"react-dom": "^19.3.0",
|
|
95
101
|
"rimraf": "^6.1.3",
|
|
96
102
|
"tsdown": "^0.22.13",
|
|
97
|
-
"@typescript/native": "npm:typescript@~7.0.2",
|
|
98
103
|
"typescript": "npm:@typescript/typescript6@~6.0.2",
|
|
99
|
-
"vitest": "^4.1.
|
|
104
|
+
"vitest": "^4.1.11",
|
|
100
105
|
"vitest-browser-react": "^2.2.0",
|
|
101
106
|
"presentation-test-utilities": "0.0.1"
|
|
102
107
|
},
|