@pstdio/ui 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/{MermaidComponent-BLMDb5XE.js → MermaidComponent-81jr28u4.js} +2 -2
  2. package/dist/{MermaidComponent-BLMDb5XE.js.map → MermaidComponent-81jr28u4.js.map} +1 -1
  3. package/dist/chat-ui.d.ts +13 -11
  4. package/dist/chat-ui.js +1029 -915
  5. package/dist/chat-ui.js.map +1 -1
  6. package/dist/{data-table-stats-row-BrpOFzgn.js → data-table-stats-row-CpRe_xK2.js} +2 -2
  7. package/dist/{data-table-stats-row-BrpOFzgn.js.map → data-table-stats-row-CpRe_xK2.js.map} +1 -1
  8. package/dist/data-table.d.ts +3 -1
  9. package/dist/data-table.js +7 -10
  10. package/dist/data-table.js.map +1 -1
  11. package/dist/{diff-viewer-hGkaF_zW.js → diff-viewer-BP_mI6Wx.js} +3 -3
  12. package/dist/{diff-viewer-hGkaF_zW.js.map → diff-viewer-BP_mI6Wx.js.map} +1 -1
  13. package/dist/diff.js +1 -1
  14. package/dist/{index-BfFLdci8.d.ts → index-Bfddrlz8.d.ts} +1 -1
  15. package/dist/{index-DlmvvQ6x.d.ts → index-CbtbcvKm.d.ts} +1 -1
  16. package/dist/index.d.ts +11 -9
  17. package/dist/index.js +111 -99
  18. package/dist/index.js.map +1 -1
  19. package/dist/kanban-renderer.d.ts +9 -21
  20. package/dist/kanban-renderer.js +276 -274
  21. package/dist/kanban-renderer.js.map +1 -1
  22. package/dist/{list-row-De9R2zKU.js → list-row-uqD-q4gv.js} +20 -10
  23. package/dist/list-row-uqD-q4gv.js.map +1 -0
  24. package/dist/{param-editor-BsyIOdrP.js → param-editor-BQd4AOUP.js} +2 -2
  25. package/dist/{param-editor-BsyIOdrP.js.map → param-editor-BQd4AOUP.js.map} +1 -1
  26. package/dist/{param-editor-field-qEWoluWT.js → param-editor-field-BJ_rLUnV.js} +728 -722
  27. package/dist/param-editor-field-BJ_rLUnV.js.map +1 -0
  28. package/dist/param-editor.d.ts +1 -0
  29. package/dist/param-editor.js +2 -2
  30. package/dist/{rich-text-CQAntEuA.js → rich-text-VYAmEigU.js} +1142 -1184
  31. package/dist/rich-text-VYAmEigU.js.map +1 -0
  32. package/dist/rich-text.d.ts +1 -1
  33. package/dist/rich-text.js +1 -1
  34. package/dist/style.css +1 -1
  35. package/dist/{theme-BH-rGipZ.js → theme-CbmSEbRF.js} +37 -6
  36. package/dist/theme-CbmSEbRF.js.map +1 -0
  37. package/dist/theme.js +1 -1
  38. package/dist/tree-list-BNZwjQZA.js +1616 -0
  39. package/dist/tree-list-BNZwjQZA.js.map +1 -0
  40. package/dist/{types-yjKBk07w.d.ts → types-DWA3enV6.d.ts} +22 -1
  41. package/package.json +2 -2
  42. package/dist/list-row-De9R2zKU.js.map +0 -1
  43. package/dist/param-editor-field-qEWoluWT.js.map +0 -1
  44. package/dist/rich-text-CQAntEuA.js.map +0 -1
  45. package/dist/theme-BH-rGipZ.js.map +0 -1
  46. package/dist/tree-list-BUfDQz3v.js +0 -1449
  47. package/dist/tree-list-BUfDQz3v.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-list-BUfDQz3v.js","names":["ResizableSplitSide","MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX","MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX","VERTICAL_COLLAPSE_THRESHOLD_PX","clamp","value","min","max","Math","axes","left","rootDirection","dimension","separatorOrientation","cursor","pointerCoordinate","deltaDirection","panelFirst","right","top","bottom","const","getResizableSplitAxis","side","resolveResizableBounds","input","rootSize","fallbackRootSize","minSize","maxSize","contentMinSize","maxFromContent","configuredMax","resolveCollapseThreshold","resolveDraggedPanelSize","startSize","pointerDelta","collapsible","axis","rawSize","collapsed","size","clamp","Box","Flex","SystemStyleObject","KeyboardEvent","ReactKeyboardEvent","PointerEvent","ReactPointerEvent","useEffect","useRef","useState","getResizableSplitAxis","ResizableSplitSeparator","HOVER_DELAY_MS","GRIP_DOTS","resolveHandleLayout","vertical","thickness","w","h","hitArea","top","bottom","insetInlineStart","insetInlineEnd","gripDirection","const","bar","transform","insetInline","HandleLayout","ReturnType","HandlePartProps","active","layout","ResizeHandleGrip","props","$","_c","t0","t1","t2","Symbol","for","map","_temp","t3","ResizeHandleBar","ResizeHandleProps","css","axis","bounds","minSize","maxSize","collapsed","collapsible","contentPanelId","dragging","resizablePanelId","resizeLabel","resolvedPanelSize","separator","onCollapse","onResizeKeyDown","event","HTMLDivElement","onResizeStart","ResizeHandle","line","separatorOrientation","hovered","setHovered","hoverTimerRef","tabIndex","visibility","t4","t5","window","clearTimeout","current","t6","setTimeout","handlePointerEnter","t7","handlePointerLeave","t8","t9","t10","Math","round","t11","t12","t13","undefined","t14","content","position","t15","opacity","t16","t17","t18","t19","cursor","dot","_c","_temp","Box","SystemStyleObject","KeyboardEvent","ReactKeyboardEvent","ReactNode","PointerEvent","ReactPointerEvent","RefObject","getResizableSplitAxis","ResizableSplitSeparator","ResizeHandle","ResizableSplitPanelsProps","styles","Record","axis","ReturnType","bounds","minSize","maxSize","collapsed","collapsible","contentPanel","contentPanelId","contentPanelRef","HTMLDivElement","resizablePanel","resizablePanelId","resizablePanelRef","dragging","resizeLabel","resolvedPanelSize","separator","onCollapse","onResizeKeyDown","event","onResizeStart","ResizableSplitPanels","props","$","_c","t0","undefined","t1","resizablePanelNode","t2","contentPanelNode","t3","resizeTrigger","panelFirst","t4","_c","_Fragment","RefObject","useEffect","useState","PanelDimension","useResizableSplitRootSize","rootRef","dimension","$","_c","rootSize","setRootSize","t0","t1","element","current","updateRootSize","getBoundingClientRect","ResizeObserver","observer","observe","disconnect","_c","ConditionalValue","Flex","FlexProps","useSlotRecipe","KeyboardEvent","ReactKeyboardEvent","ReactNode","PointerEvent","ReactPointerEvent","useEffect","useId","useRef","useState","getResizableSplitAxis","ResizableSplitSide","resolveDraggedPanelSize","resolveResizableBounds","ResizableSplitSeparator","ResizableSplitPanels","PanelDimension","useResizableSplitRootSize","ResizableSplitLayoutProps","Omit","resizablePanel","contentPanel","resizableSide","defaultSizePx","minSizePx","maxSizePx","contentMinSizePx","collapsed","collapsible","resizeLabel","separator","layout","onSizeChange","size","onCollapsedChange","FALLBACK_ROOT_SIZE","width","height","KEYBOARD_RESIZE_STEP","clamp","value","min","max","Math","getElementSize","element","HTMLDivElement","dimension","getBoundingClientRect","ResizableSplitLayout","props","$","_c","controlledCollapsed","rest","t0","t1","t2","t3","t4","t5","t6","t7","undefined","t8","axis","t9","Symbol","for","key","t10","t11","t12","orientation","styles","id","rootRef","resizablePanelRef","contentPanelRef","cleanupDragRef","_temp","rootSize","lastSizeRef","panelSize","setPanelSize","internalCollapsed","setInternalCollapsed","dragging","setDragging","bounds","t13","fallbackRootSize","minSize","maxSize","contentMinSize","resolvedPanelSize","contentPanelId","resizablePanelId","t14","t15","style","sizeStyle","t16","t17","current","t18","t19","t20","setProperty","applyPanelSize","t21","size_0","nextBounds","nextSize","commitPanelSize","t22","nextCollapsed","setCollapsed","t23","cursor","pointerCoordinate","event","button","preventDefault","resizeHandle","currentTarget","bounds_0","startPointer","startSize","previousCursor","document","body","previousUserSelect","userSelect","nextSize_0","nextCollapsed_0","animationFrame","setDraggingPanelState","pointerEvents","schedulePanelSize","window","requestAnimationFrame","handlePointerMove","moveEvent","result","side","pointerDelta","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","_temp2","setPointerCapture","addEventListener","once","handleResizeStart","t24","handleCollapse","t25","deltaDirection","event_0","negativeDirectionKey","positiveDirectionKey","size_1","handleResizeKeyDown","t26","t27","root","_c","_temp","_temp2","Box","ReactNode","ResourceContextAction","ResourceContextMenu","TreeListBackgroundProps","actions","children","TreeListBackground","props","$","_c","t0","Symbol","for","t1","t2","t3","_c","TreeListNode","TreeListSection","isInList","id","values","includes","isActiveNode","activeNodeId","Array","isArray","isNavigableNode","node","isNavigable","navigationIntent","undefined","getNodeChildren","children","hasExpandableChildren","length","isContainer","VirtualRow","kind","key","sectionId","section","collapsible","expanded","level","parentNodeId","emptyState","VirtualNodeRow","Extract","VirtualSectionHeaderRow","FocusableRow","appendVisibleNodeRows","input","rows","nodes","expandedNodeIds","push","buildVirtualRows","sections","expandedSectionIds","label","getRowFocusId","row","isFocusableRow","disabled","getFocusableRows","filter","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","Set","map","has","activeIds","activeId","find","firstRow","resolveSectionHeaderNavigation","currentIndex","type","const","nextRow","rowId","resolveNodeNavigation","expandable","nodeId","resolveTreeListKeyboardNavigation","resolvedFocusRowId","Math","max","findIndex","currentRow","focusByIndex","index","clamped","min","TREE_NODE_DATA_TYPE","TreeNodeDataTransfer","getData","type","setData","value","writeDraggedTreeNodeId","dataTransfer","nodeId","readDraggedTreeNodeId","undefined","Box","DragEvent","ReactDragEvent","ReactNode","readDraggedTreeNodeId","TreeListMoveSurfaceProps","children","onMoveNode","sourceNodeId","targetNodeId","TreeListMoveSurface","props","$","_c","t0","event","preventDefault","dataTransfer","dropEffect","handleDragOver","t1","event_0","handleDrop","t2","_c","Box","Flex","Input","ReactNode","useRef","useState","TreeListInlineInput","TreeListInlineInputRowProps","input","icon","level","paddingLeft","TreeListInlineInputRow","props","value","setValue","defaultValue","error","setError","inputRef","HTMLInputElement","submittingRef","commit","current","undefined","onCommit","trim","cause","Error","message","queueMicrotask","focus","event","stopPropagation","width","height","ariaLabel","Boolean","placeholder","currentTarget","onCancel","key","preventDefault","StackProps","Stack","FocusEventHandler","DragEvent","ReactDragEvent","ListRow","TreeListLinkComponent","TreeListNavigateEvent","TreeListNode","readDraggedTreeNodeId","writeDraggedTreeNodeId","TreeListInlineInputRow","hasExpandableChildren","isActiveNode","isInList","isNavigableNode","TreeListRowVariant","TreeListNodeRowProps","sectionId","node","level","expandedNodeIds","activeNodeId","rowVariant","nodeGap","linkComponent","tabIndex","onFocus","HTMLElement","onNavigate","event","onToggleNode","nodeId","onMoveNode","sourceNodeId","targetNodeId","TreeListNodeRow","props","$","_c","LinkComponent","inlineInput","t0","icon","hasChildren","t1","id","expanded","t2","isActive","isDisabled","disabled","t3","isNavigable","canLink","Boolean","href","t4","intent","navigationIntent","onActivate","handleActivate","t5","dataTransfer","effectAllowed","handleDragStart","t6","canDrop","event_0","stopPropagation","preventDefault","dropEffect","handleDragOver","t7","event_1","handleDrop","t8","actions","map","action","onAction","context","undefined","listRowItem","nodeRowVariant","rowItem","_inlineInput","t9","t10","t11","t12","t13","depth","variant","isSelected","isExpanded","showExpandToggle","onToggleExpand","rowProps","t14","row","t15","canDrag","t16","t17","t18","t19","_c","Box","HStack","IconButton","Menu","Text","ChevronRight","FocusEventHandler","MouseEvent","ReactMouseEvent","SearchableActionMenu","TreeListAction","TreeListSection","TreeListSectionActionsProps","sectionId","actions","TreeListSectionActions","props","$","_c","length","t0","t1","Symbol","for","opacity","pointerEvents","t2","t3","action","menuItems","id","label","icon","map","_temp2","event_0","event","stopPropagation","onAction","_temp","TreeListSectionHeaderProps","section","collapsible","expanded","focusId","tabIndex","onFocus","HTMLElement","onToggle","onContextMenu","TreeListSectionHeader","undefined","t4","bg","t5","t6","t7","t8","preventDefault","t9","t10","transform","transition","t11","t12","t13","t14","item","disabled","_c","_temp2","_temp","TreeListSection","SECTION_PREFIX","toSectionDragId","sectionId","isSectionDragId","id","startsWith","fromSectionDragId","slice","length","arrayMoveInPlace","items","T","from","to","next","removed","splice","ReorderResult","kind","nextSectionIds","orders","Record","TreeListMoveEndpoint","moveScope","TreeListMove","source","destination","TreeListMovePolicy","move","findNodeLocation","sections","nodeId","section","index","nodes","findIndex","node","undefined","permitsMove","canMove","canDropOnTreeListTarget","activeId","overId","find","canReorder","destinationSection","destinationNode","computeSectionReorder","activeSection","overSection","orderedIds","map","oldIndex","indexOf","newIndex","computeNodeReorder","overNode","sourceIds","destinationIds","insertionIndex","filter","computeReorderResult","CollisionDetection","closestCenter","DndContext","DragEndEvent","PointerSensor","useSensor","useSensors","createContext","ReactNode","TreeListSection","TreeListMovePolicy","canDropOnTreeListTarget","computeReorderResult","fromSectionDragId","SharedTreeListDragContext","TreeListDragProviderProps","sections","canMove","onReorderSections","nextSectionIds","sourceSectionId","destinationSectionId","onReorderNodes","sectionId","nextNodeIds","children","TreeListDragProvider","props","$","_c","t0","Symbol","for","activationConstraint","distance","sensors","t1","input","filter","collision","String","active","id","collisionDetection","t2","event","over","activeId","overId","result","kind","Object","entries","orders","handleDragEnd","t3","t4","_c","Box","Stack","StackProps","CollisionDetection","closestCenter","DndContext","DragEndEvent","PointerSensor","useSensor","useSensors","SortableContext","useSortable","verticalListSortingStrategy","CSS","MouseEvent","ReactMouseEvent","useContext","TreeListLinkComponent","TreeListNavigateEvent","TreeListNode","TreeListSection","SharedTreeListDragContext","buildVirtualRows","VirtualRow","TreeListNodeRow","canDropOnTreeListTarget","computeReorderResult","TreeListMovePolicy","toSectionDragId","TreeListSectionHeader","TreeListRowVariant","SortableHostProps","id","disabled","children","input","setNodeRef","element","HTMLElement","listeners","ReturnType","style","transform","transition","opacity","React","ReactNode","SortableHost","props","$","_c","t0","sortable","t1","isDragging","Transform","toString","t2","SortableSectionGroupProps","section","sectionRows","expandedNodeIds","activeNodeId","rowVariant","nodeGap","linkComponent","onNavigate","event","onToggleSection","sectionId","onToggleNode","nodeId","onSectionContextMenu","SortableSectionGroup","find","_temp","headerRow","nodeRows","filter","_temp2","_temp3","map","_temp4","topLevelNodeIds","t3","canReorder","t4","t5","kind","onPointerDown","collapsible","expanded","key","_temp5","row_3","row","SortableOrPlainNodeRowProps","Extract","renderNodeRow","node","level","SortableOrPlainNodeRow","rest","Symbol","for","bb0","TreeListSortableProps","sections","expandedSectionIds","sectionGap","onReorderSections","nextSectionIds","onReorderNodes","nextNodeIds","canMove","TreeListSortable","undefined","activationConstraint","distance","sensors","usesSharedDragContext","t6","collision","String","active","collisionDetection","t7","over","result","Object","entries","orders","handleDragEnd","rows","T0","t8","_temp6","T1","t10","t11","t12","t13","section_0","t14","t15","t9","content","t16","row_0","row_1","row_2","_c","_Fragment","KeyboardEvent","useEffect","useRef","useState","getFocusableRows","getRowFocusId","isFocusableRow","resolveTreeListFocusRowId","resolveTreeListKeyboardNavigation","VirtualRow","findRowElement","root","HTMLElement","focusId","elements","querySelectorAll","find","element","dataset","treeListFocusId","findFocusedRowId","target","EventTarget","contains","undefined","closest","isTextEditingTarget","isContentEditable","includes","tagName","getRowIndex","rows","findIndex","row","useTreeListKeyboardNavigation","input","$","_c","activeNodeId","expandedNodeIds","onToggleNode","onToggleSection","scrollToRow","rootRef","focusedRowId","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","t0","focusRowId","t1","map","join","focusableRowIds","t2","t3","split","t4","t5","frame","requestAnimationFrame","current","focus","cancelAnimationFrame","t6","rowId","element_0","rowIndex","focusRow","t7","event","altKey","ctrlKey","metaKey","shiftKey","navigation","key","preventDefault","type","nodeId","sectionId","handleKeyDown","t8","Symbol","for","rowId_0","t9","onRowFocus","_c","Box","Stack","StackProps","useVirtualizer","MouseEvent","ReactMouseEvent","RefObject","ResourceContextAction","TreeListLinkComponent","TreeListNavigateEvent","TreeListSection","TreeListBackground","buildVirtualRows","VirtualRow","TreeListMoveSurface","TreeListNodeRow","TreeListMovePolicy","TreeListSectionHeader","TreeListSortable","useTreeListKeyboardNavigation","TreeListRowVariant","TreeListProps","sections","expandedSectionIds","expandedNodeIds","activeNodeId","rowVariant","sectionGap","nodeGap","linkComponent","onNavigate","event","onToggleSection","sectionId","onToggleNode","nodeId","onSectionContextMenu","HTMLElement","virtualize","scrollRef","HTMLDivElement","draggable","onReorderSections","nextSectionIds","onReorderNodes","nextNodeIds","canMove","onMoveNode","sourceNodeId","targetNodeId","backgroundContextActions","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","RenderVirtualRowInput","row","focusRowId","onRowFocus","rowId","renderVirtualRow","input","kind","section","collapsible","expanded","key","emptyState","node","level","id","VirtualTreeListProps","rows","VirtualTreeList","props","virtualizer","count","length","getScrollElement","current","estimateSize","overscan","getItemKey","index","keyboard","scrollToRow","scrollToIndex","align","rootRef","height","getTotalSize","handleKeyDown","getVirtualItems","map","virtualItem","measureElement","transform","start","StackTreeList","sectionRows","filter","TreeList","$","_c","t0","content","t1","paddedContent","t2","_c","SearchableActionMenu","ResourceContextMenu","ListRow","MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX","MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX","VERTICAL_COLLAPSE_THRESHOLD_PX","clamp$1","value","min","max","axes","getResizableSplitAxis","side","resolveResizableBounds","rootSize","input","maxFromContent","configuredMax","maxSize","resolveCollapseThreshold","minSize","resolveDraggedPanelSize","axis","rawSize","collapsed","HOVER_DELAY_MS","GRIP_DOTS","resolveHandleLayout","vertical","thickness","ResizeHandleGrip","$","c","props","t0","layout","t1","t2","_temp$3","t3","Flex","ResizeHandleBar","Box","ResizeHandle","line","separator","hovered","setHovered","useState","hoverTimerRef","useRef","active","dragging","visibility","t4","t5","useEffect","t6","handlePointerEnter","t7","handlePointerLeave","t8","t9","resizablePanelId","contentPanelId","t10","bounds","collapsible","t11","t12","resolvedPanelSize","t13","t14","t15","t16","onCollapse","t17","t18","t19","css","onResizeKeyDown","onResizeStart","resizeLabel","dot","ResizableSplitPanels","resizablePanel","resizablePanelRef","styles","resizablePanelNode","contentPanel","contentPanelRef","contentPanelNode","resizeTrigger","Fragment","useResizableSplitRootSize","setRootSize","dimension","rootRef","element","updateRootSize","observer","FALLBACK_ROOT_SIZE","KEYBOARD_RESIZE_STEP","clamp","getElementSize","ResizableSplitLayout","controlledCollapsed","maxSizePx","onCollapsedChange","onSizeChange","rest","resizableSide","defaultSizePx","minSizePx","contentMinSizePx","useSlotRecipe","id","useId","cleanupDragRef","_temp$2","lastSizeRef","panelSize","setPanelSize","internalCollapsed","setInternalCollapsed","setDragging","sizeStyle","t20","size","applyPanelSize","t21","nextBounds","nextSize","size_0","commitPanelSize","t22","nextCollapsed","setCollapsed","t23","event","resizeHandle","bounds_0","startPointer","startSize","previousCursor","previousUserSelect","nextSize_0","nextCollapsed_0","animationFrame","setDraggingPanelState","schedulePanelSize","handlePointerMove","result","moveEvent","cleanup","_temp2$2","handleResizeStart","t24","handleCollapse","t25","negativeDirectionKey","positiveDirectionKey","size_1","event_0","handleResizeKeyDown","t26","t27","TreeListBackground","actions","children","isInList","values","isActiveNode","activeNodeId","isNavigableNode","node","getNodeChildren","hasExpandableChildren","appendVisibleNodeRows","nodes","sectionId","expandedNodeIds","level","buildVirtualRows","rows","section","sections","expanded","expandedSectionIds","getRowFocusId","row","isFocusableRow","getFocusableRows","resolveTreeListFocusRowId","focusableRows","focusableIds","focusedRowId","activeId","firstRow","resolveSectionHeaderNavigation","key","nextRow","currentIndex","resolveNodeNavigation","expandable","resolveTreeListKeyboardNavigation","resolvedFocusRowId","currentRow","focusByIndex","clamped","index","TREE_NODE_DATA_TYPE","writeDraggedTreeNodeId","nodeId","readDraggedTreeNodeId","dataTransfer","TreeListMoveSurface","onMoveNode","handleDragOver","sourceNodeId","handleDrop","paddingLeft","TreeListInlineInputRow","setValue","error","setError","inputRef","submittingRef","commit","cause","icon","Input","event_1","TreeListNodeRow","LinkComponent","hasChildren","isActive","isDisabled","isNavigable","canLink","onNavigate","onToggleNode","handleActivate","handleDragStart","action","context","listRowItem","nodeRowVariant","_inlineInput","rowVariant","onFocus","tabIndex","rowProps","nodeGap","Stack","TreeListSectionActions","Menu","IconButton","_temp2$1","HStack","_temp$1","TreeListSectionHeader","focusId","onToggle","onContextMenu","Text","ChevronRight","item","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","arrayMoveInPlace","next","items","removed","from","to","findNodeLocation","permitsMove","canMove","move","canDropOnTreeListTarget","overId","source","destination","destinationSection","destinationNode","computeSectionReorder","activeSection","overSection","orderedIds","oldIndex","newIndex","computeNodeReorder","overNode","sourceIds","destinationIds","insertionIndex","computeReorderResult","SharedTreeListDragContext","createContext","TreeListDragProvider","sensors","useSensors","useSensor","PointerSensor","closestCenter","collision","collisionDetection","onReorderNodes","onReorderSections","nextNodeIds","handleDragEnd","DndContext","SortableHost","sortable","useSortable","style","CSS","SortableSectionGroup","sectionRows","_temp","headerRow","nodeRows","_temp2","_temp3","_temp4","topLevelNodeIds","linkComponent","onSectionContextMenu","onToggleSection","setNodeRef","listeners","_temp5","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","TreeListSortable","sectionGap","usesSharedDragContext","useContext","T0","_temp6","T1","section_0","content","row_0","row_1","row_2","findRowElement","root","findFocusedRowId","target","isTextEditingTarget","getRowIndex","useTreeListKeyboardNavigation","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","focusableRowIds","frame","scrollToRow","rowId","element_0","rowIndex","focusRow","navigation","handleKeyDown","rowId_0","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","onRowFocus","VirtualTreeList","virtualizer","useVirtualizer","scrollRef","keyboard","index_0","virtualItem","StackTreeList","virtualize","TreeList","paddedContent"],"sources":["../src/components/layout/resizable-split-layout.geometry.ts","../src/components/layout/resizable-split-layout.handle.tsx","../src/components/layout/resizable-split-layout.panels.tsx","../src/components/layout/resizable-split-layout.root-size.ts","../src/components/layout/resizable-split-layout.tsx","../src/components/tree-list/tree-list-background.tsx","../src/components/tree-list/tree-list-model.ts","../src/components/tree-list/tree-list-drag.ts","../src/components/tree-list/tree-list-move-surface.tsx","../src/components/tree-list/tree-list-inline-input.tsx","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-drag-provider.tsx","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list.tsx"],"sourcesContent":["export type ResizableSplitSide = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nconst MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX = 160;\nconst VERTICAL_COLLAPSE_THRESHOLD_PX = 72;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst axes = {\n left: {\n rootDirection: \"row\",\n dimension: \"width\",\n separatorOrientation: \"vertical\",\n cursor: \"col-resize\",\n pointerCoordinate: \"clientX\",\n deltaDirection: 1,\n panelFirst: true,\n },\n right: {\n rootDirection: \"row\",\n dimension: \"width\",\n separatorOrientation: \"vertical\",\n cursor: \"col-resize\",\n pointerCoordinate: \"clientX\",\n deltaDirection: -1,\n panelFirst: false,\n },\n top: {\n rootDirection: \"column\",\n dimension: \"height\",\n separatorOrientation: \"horizontal\",\n cursor: \"row-resize\",\n pointerCoordinate: \"clientY\",\n deltaDirection: 1,\n panelFirst: true,\n },\n bottom: {\n rootDirection: \"column\",\n dimension: \"height\",\n separatorOrientation: \"horizontal\",\n cursor: \"row-resize\",\n pointerCoordinate: \"clientY\",\n deltaDirection: -1,\n panelFirst: false,\n },\n} as const;\n\nexport const getResizableSplitAxis = (side: ResizableSplitSide) => axes[side];\n\nexport const resolveResizableBounds = (input: {\n rootSize: number;\n fallbackRootSize: number;\n minSize: number;\n maxSize?: number;\n contentMinSize: number;\n}) => {\n const rootSize = input.rootSize > 0 ? input.rootSize : input.fallbackRootSize;\n const maxFromContent = Math.max(0, rootSize - input.contentMinSize);\n const configuredMax = input.maxSize ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSize, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst resolveCollapseThreshold = (side: ResizableSplitSide, minSize: number) => {\n if (side === \"top\" || side === \"bottom\") return VERTICAL_COLLAPSE_THRESHOLD_PX;\n return clamp(minSize / 2, MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX, MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX);\n};\n\nexport const resolveDraggedPanelSize = (input: {\n side: ResizableSplitSide;\n startSize: number;\n pointerDelta: number;\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n}) => {\n const axis = getResizableSplitAxis(input.side);\n const rawSize = input.startSize + input.pointerDelta * axis.deltaDirection;\n const collapsed = input.collapsible && rawSize <= resolveCollapseThreshold(input.side, input.minSize);\n\n return {\n rawSize,\n size: collapsed ? 0 : clamp(rawSize, input.minSize, input.maxSize),\n collapsed,\n };\n};\n","import { Box, Flex, type SystemStyleObject } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { getResizableSplitAxis } from \"@/components/layout/resizable-split-layout.geometry\";\n\n// Two separators share one behaviour. The \"gap\" separator sits between panel\n// cards: it is as wide as the panel gap and shows a grip of three dots. The\n// \"line\" separator divides content inside a panel: it is a 1px border line.\n// Both become a full-length bar after a short hover delay, while dragging, or\n// on keyboard focus, and both have an invisible hit area wider than themselves.\n\nexport type ResizableSplitSeparator = \"gap\" | \"line\";\n\nconst HOVER_DELAY_MS = 250;\nconst GRIP_DOTS = [0, 1, 2];\n\nconst resolveHandleLayout = (vertical: boolean, thickness: string) => {\n if (vertical) {\n return {\n w: thickness,\n h: \"full\",\n hitArea: { top: 0, bottom: 0, insetInlineStart: \"-1\", insetInlineEnd: \"-1\" },\n gripDirection: \"column\" as const,\n bar: { top: \"0\", bottom: \"0\", insetInlineStart: \"50%\", w: \"0.5\", transform: \"translateX(-50%)\" },\n };\n }\n\n return {\n w: \"full\",\n h: thickness,\n hitArea: { insetInline: 0, top: \"-1\", bottom: \"-1\" },\n gripDirection: \"row\" as const,\n bar: { top: \"50%\", insetInline: \"0\", h: \"0.5\", transform: \"translateY(-50%)\" },\n };\n};\n\ntype HandleLayout = ReturnType<typeof resolveHandleLayout>;\n\ninterface HandlePartProps {\n active: boolean;\n layout: HandleLayout;\n}\n\nconst ResizeHandleGrip = (props: HandlePartProps) => {\n const { active, layout } = props;\n\n return (\n <Flex\n data-part=\"grip\"\n direction={layout.gripDirection}\n gap=\"3xs\"\n opacity={active ? 0 : 1}\n transition=\"opacity 120ms ease\"\n >\n {GRIP_DOTS.map((dot) => (\n <Box key={dot} boxSize=\"0.5\" borderRadius=\"full\" bg=\"border\" />\n ))}\n </Flex>\n );\n};\n\nconst ResizeHandleBar = (props: HandlePartProps) => {\n const { active, layout } = props;\n\n return (\n <Box\n data-part=\"bar\"\n position=\"absolute\"\n borderRadius=\"xs\"\n bg=\"fg.info\"\n opacity={active ? 1 : 0}\n transition=\"opacity 120ms ease\"\n pointerEvents=\"none\"\n {...layout.bar}\n />\n );\n};\n\ninterface ResizeHandleProps {\n css: SystemStyleObject;\n axis: ReturnType<typeof getResizableSplitAxis>;\n bounds: { minSize: number; maxSize: number };\n collapsed: boolean;\n collapsible: boolean;\n contentPanelId: string;\n dragging: boolean;\n resizablePanelId: string;\n resizeLabel: string;\n resolvedPanelSize: number;\n separator: ResizableSplitSeparator;\n onCollapse: () => void;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n css,\n axis,\n bounds,\n collapsed,\n collapsible,\n contentPanelId,\n dragging,\n resizablePanelId,\n resizeLabel,\n resolvedPanelSize,\n separator,\n onCollapse,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const line = separator === \"line\";\n const layout = resolveHandleLayout(axis.separatorOrientation === \"vertical\", line ? \"1px\" : \"panel-gap\");\n const [hovered, setHovered] = useState(false);\n const hoverTimerRef = useRef(0);\n const active = hovered || dragging;\n // A collapsed panel hides its separator; the nav chrome owns reopening.\n const visibility = collapsed ? { \"aria-hidden\": true, tabIndex: -1 } : { tabIndex: 0 };\n\n useEffect(() => () => window.clearTimeout(hoverTimerRef.current), []);\n\n const handlePointerEnter = () => {\n hoverTimerRef.current = window.setTimeout(() => setHovered(true), HOVER_DELAY_MS);\n };\n\n const handlePointerLeave = () => {\n window.clearTimeout(hoverTimerRef.current);\n setHovered(false);\n };\n\n return (\n <Box\n css={css}\n data-collapsed={collapsed}\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation={axis.separatorOrientation}\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={collapsible ? 0 : Math.round(bounds.minSize)}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelSize)}\n {...visibility}\n position=\"relative\"\n zIndex=\"docked\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n w={layout.w}\n h={layout.h}\n bg={line ? \"border.subtle\" : undefined}\n cursor={axis.cursor}\n touchAction=\"none\"\n outline=\"none\"\n _before={{ content: '\"\"', position: \"absolute\", ...layout.hitArea }}\n _focusVisible={{ \"& [data-part=bar]\": { opacity: 1 }, \"& [data-part=grip]\": { opacity: 0 } }}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onPointerDown={onResizeStart}\n onDoubleClick={collapsible ? onCollapse : undefined}\n onKeyDown={onResizeKeyDown}\n >\n {line ? null : <ResizeHandleGrip active={active} layout={layout} />}\n <ResizeHandleBar active={active} layout={layout} />\n </Box>\n );\n};\n","import { Box, type SystemStyleObject } from \"@chakra-ui/react\";\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n PointerEvent as ReactPointerEvent,\n RefObject,\n} from \"react\";\nimport type { getResizableSplitAxis } from \"@/components/layout/resizable-split-layout.geometry\";\nimport { type ResizableSplitSeparator, ResizeHandle } from \"@/components/layout/resizable-split-layout.handle\";\n\ninterface ResizableSplitPanelsProps {\n styles: Record<\"resizablePanel\" | \"contentPanel\" | \"separator\", SystemStyleObject>;\n axis: ReturnType<typeof getResizableSplitAxis>;\n bounds: { minSize: number; maxSize: number };\n collapsed: boolean;\n collapsible: boolean;\n contentPanel: ReactNode;\n contentPanelId: string;\n contentPanelRef: RefObject<HTMLDivElement | null>;\n resizablePanel: ReactNode;\n resizablePanelId: string;\n resizablePanelRef: RefObject<HTMLDivElement | null>;\n dragging: boolean;\n resizeLabel: string;\n resolvedPanelSize: number;\n separator: ResizableSplitSeparator;\n onCollapse: () => void;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizableSplitPanels = (props: ResizableSplitPanelsProps) => {\n const {\n styles,\n axis,\n bounds,\n collapsed,\n collapsible,\n contentPanel,\n contentPanelId,\n contentPanelRef,\n resizablePanel,\n resizablePanelId,\n resizablePanelRef,\n dragging,\n resizeLabel,\n resolvedPanelSize,\n separator,\n onCollapse,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const resizablePanelNode = (\n <Box\n key=\"resizable-panel\"\n id={resizablePanelId}\n ref={resizablePanelRef}\n css={styles.resizablePanel}\n data-collapsed={collapsed}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Box>\n );\n const contentPanelNode = (\n <Box key=\"content-panel\" id={contentPanelId} ref={contentPanelRef} css={styles.contentPanel}>\n {contentPanel}\n </Box>\n );\n const resizeTrigger = (\n <ResizeHandle\n css={styles.separator}\n key=\"resize-handle\"\n axis={axis}\n bounds={bounds}\n collapsed={collapsed}\n collapsible={collapsible}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n dragging={dragging}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n separator={separator}\n onCollapse={onCollapse}\n onResizeKeyDown={onResizeKeyDown}\n onResizeStart={onResizeStart}\n />\n );\n\n if (axis.panelFirst) {\n return (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n );\n }\n\n return (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n );\n};\n","import { type RefObject, useEffect, useState } from \"react\";\n\nexport type PanelDimension = \"width\" | \"height\";\n\n// Tracks the root element's size along the split axis so the panel bounds\n// follow window and container resizes.\nexport const useResizableSplitRootSize = (rootRef: RefObject<HTMLDivElement | null>, dimension: PanelDimension) => {\n const [rootSize, setRootSize] = useState(0);\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootSize = () => {\n setRootSize(element.getBoundingClientRect()[dimension]);\n };\n\n updateRootSize();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootSize);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [rootRef, dimension]);\n\n return rootSize;\n};\n","import { type ConditionalValue, Flex, type FlexProps, useSlotRecipe } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n getResizableSplitAxis,\n type ResizableSplitSide,\n resolveDraggedPanelSize,\n resolveResizableBounds,\n} from \"@/components/layout/resizable-split-layout.geometry\";\nimport type { ResizableSplitSeparator } from \"@/components/layout/resizable-split-layout.handle\";\nimport { ResizableSplitPanels } from \"@/components/layout/resizable-split-layout.panels\";\nimport { type PanelDimension, useResizableSplitRootSize } from \"@/components/layout/resizable-split-layout.root-size\";\n\ninterface ResizableSplitLayoutProps extends Omit<FlexProps, \"children\" | \"onResize\"> {\n resizablePanel: ReactNode;\n contentPanel: ReactNode;\n resizableSide?: ResizableSplitSide;\n defaultSizePx?: number;\n minSizePx?: number;\n maxSizePx?: number;\n contentMinSizePx?: number;\n collapsed?: boolean;\n collapsible?: boolean;\n resizeLabel?: string;\n separator?: ResizableSplitSeparator;\n layout?: ConditionalValue<\"split\" | \"stacked\" | \"stacked-reverse\" | \"content\">;\n onSizeChange?: (size: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_SIZE = { width: 1200, height: 720 };\nconst KEYBOARD_RESIZE_STEP = 24;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst getElementSize = (element: HTMLDivElement | null, dimension: PanelDimension) =>\n element?.getBoundingClientRect()[dimension] ?? 0;\n\nexport const ResizableSplitLayout = (props: ResizableSplitLayoutProps) => {\n const {\n resizablePanel,\n contentPanel,\n resizableSide = \"left\",\n defaultSizePx = 240,\n minSizePx = 200,\n maxSizePx,\n contentMinSizePx = 0,\n collapsed: controlledCollapsed,\n collapsible = true,\n resizeLabel = \"Resize panel\",\n separator = \"gap\",\n layout = \"split\",\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const axis = getResizableSplitAxis(resizableSide);\n const styles = useSlotRecipe({ key: \"resizableSplitLayout\" })({\n orientation: axis.dimension === \"width\" ? \"horizontal\" : \"vertical\",\n layout,\n });\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const rootSize = useResizableSplitRootSize(rootRef, axis.dimension);\n const lastSizeRef = useRef(defaultSizePx);\n const [panelSize, setPanelSize] = useState(defaultSizePx);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const [dragging, setDragging] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBounds({\n rootSize,\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const resolvedPanelSize = collapsed ? 0 : clamp(panelSize, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n const sizeStyle = { ...rest.style, \"--split-size\": `${resolvedPanelSize}px` };\n\n useEffect(() => {\n lastSizeRef.current = defaultSizePx;\n setPanelSize(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelSize = (size: number) => {\n rootRef.current?.style.setProperty(\"--split-size\", `${size}px`);\n };\n\n const commitPanelSize = (size: number) => {\n const nextBounds = resolveResizableBounds({\n rootSize: getElementSize(rootRef.current, axis.dimension),\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const nextSize = clamp(size, nextBounds.minSize, nextBounds.maxSize);\n\n lastSizeRef.current = nextSize;\n setPanelSize(nextSize);\n applyPanelSize(nextSize);\n onSizeChange?.(nextSize);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const bounds = resolveResizableBounds({\n rootSize: getElementSize(rootRef.current, axis.dimension),\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const startPointer = event[axis.pointerCoordinate];\n const startSize = collapsed ? 0 : getElementSize(resizablePanelRef.current, axis.dimension) || lastSizeRef.current;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextSize = startSize === 0 ? 0 : clamp(startSize, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelSize = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelSize(nextSize);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const result = resolveDraggedPanelSize({\n side: resizableSide,\n startSize,\n pointerDelta: moveEvent[axis.pointerCoordinate] - startPointer,\n minSize: bounds.minSize,\n maxSize: bounds.maxSize,\n collapsible,\n });\n nextCollapsed = result.collapsed;\n nextSize = result.size;\n schedulePanelSize();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n setDragging(false);\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelSize(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelSize(nextSize);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = axis.cursor;\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n setDragging(true);\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleCollapse = () => {\n if (collapsible) setCollapsed(true);\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const negativeDirectionKey = axis.dimension === \"width\" ? \"ArrowLeft\" : \"ArrowUp\";\n const positiveDirectionKey = axis.dimension === \"width\" ? \"ArrowRight\" : \"ArrowDown\";\n const size = lastSizeRef.current;\n\n if (\n collapsed &&\n (event.key === negativeDirectionKey || event.key === positiveDirectionKey || event.key === \"End\")\n ) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelSize(size);\n } else if (event.key === negativeDirectionKey) {\n event.preventDefault();\n commitPanelSize(size - KEYBOARD_RESIZE_STEP * axis.deltaDirection);\n } else if (event.key === positiveDirectionKey) {\n event.preventDefault();\n commitPanelSize(size + KEYBOARD_RESIZE_STEP * axis.deltaDirection);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelSize(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelSize(bounds.maxSize);\n }\n };\n\n return (\n <Flex ref={rootRef} css={styles.root} {...rest} style={sizeStyle}>\n <ResizableSplitPanels\n styles={styles}\n axis={axis}\n bounds={bounds}\n collapsed={collapsed}\n collapsible={collapsible}\n contentPanel={contentPanel}\n contentPanelId={contentPanelId}\n contentPanelRef={contentPanelRef}\n resizablePanel={resizablePanel}\n resizablePanelId={resizablePanelId}\n resizablePanelRef={resizablePanelRef}\n dragging={dragging}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n separator={separator}\n onCollapse={handleCollapse}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n </Flex>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\n\ninterface TreeListBackgroundProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n}\n\n// The menu target stays behind the rows so item context menus keep priority.\nexport const TreeListBackground = (props: TreeListBackgroundProps) => {\n const { actions, children } = props;\n\n return (\n <Box position=\"relative\" flex=\"1 0 auto\" minH=\"full\" w=\"full\" minW=\"0\" maxW=\"full\">\n <ResourceContextMenu actions={actions} closeOnSelect={false}>\n <Box position=\"absolute\" inset=\"0\" zIndex={0} aria-hidden data-tree-list-background=\"true\" />\n </ResourceContextMenu>\n <Box position=\"relative\" zIndex={1} w=\"full\" minW=\"0\" maxW=\"full\">\n {children}\n </Box>\n </Box>\n );\n};\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","const TREE_NODE_DATA_TYPE = \"application/x-pstdio-tree-node\";\n\ninterface TreeNodeDataTransfer {\n getData(type: string): string;\n setData(type: string, value: string): void;\n}\n\nexport const writeDraggedTreeNodeId = (dataTransfer: TreeNodeDataTransfer, nodeId: string) => {\n dataTransfer.setData(TREE_NODE_DATA_TYPE, nodeId);\n};\n\nexport const readDraggedTreeNodeId = (dataTransfer: TreeNodeDataTransfer) =>\n dataTransfer.getData(TREE_NODE_DATA_TYPE) || undefined;\n","import { Box } from \"@chakra-ui/react\";\nimport type { DragEvent as ReactDragEvent, ReactNode } from \"react\";\nimport { readDraggedTreeNodeId } from \"./tree-list-drag\";\n\ninterface TreeListMoveSurfaceProps {\n children: ReactNode;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n}\n\nexport const TreeListMoveSurface = (props: TreeListMoveSurfaceProps) => {\n const { children, onMoveNode } = props;\n\n const handleDragOver = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n };\n\n const handleDrop = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.preventDefault();\n const sourceNodeId = readDraggedTreeNodeId(event.dataTransfer);\n if (sourceNodeId) onMoveNode(sourceNodeId);\n };\n\n return (\n <Box\n p=\"xs\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n minH=\"full\"\n flex=\"1 0 auto\"\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {children}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { type ReactNode, useRef, useState } from \"react\";\nimport type { TreeListInlineInput } from \"./tree-list.types\";\n\ninterface TreeListInlineInputRowProps {\n input: TreeListInlineInput;\n icon?: ReactNode;\n level: number;\n}\n\nconst paddingLeft = (level: number) => {\n if (level <= 0) return \"sm\";\n return `calc(var(--chakra-spacing-1) + ${level} * 12px)`;\n};\n\nexport const TreeListInlineInputRow = (props: TreeListInlineInputRowProps) => {\n const { input, icon, level } = props;\n const [value, setValue] = useState(input.defaultValue ?? \"\");\n const [error, setError] = useState<string>();\n const inputRef = useRef<HTMLInputElement>(null);\n const submittingRef = useRef(false);\n\n const commit = async () => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n setError(undefined);\n try {\n await input.onCommit(value.trim());\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not create file.\");\n queueMicrotask(() => inputRef.current?.focus());\n } finally {\n submittingRef.current = false;\n }\n };\n\n return (\n <Flex\n h=\"1.75rem\"\n w=\"full\"\n minW=\"0\"\n alignItems=\"center\"\n gap=\"1\"\n pr=\"sm\"\n pl={paddingLeft(level)}\n onMouseDown={(event) => event.stopPropagation()}\n >\n {icon ? (\n <Box\n boxSize=\"16px\"\n color=\"fg.muted\"\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n css={{ \"& > svg\": { width: \"16px\", height: \"16px\" } }}\n >\n {icon}\n </Box>\n ) : null}\n <Input\n ref={inputRef}\n autoFocus\n size=\"xs\"\n value={value}\n aria-label={input.ariaLabel}\n aria-invalid={Boolean(error) || undefined}\n placeholder={input.placeholder}\n title={error}\n onChange={(event) => setValue(event.currentTarget.value)}\n onBlur={() => {\n if (!submittingRef.current) input.onCancel?.();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === \"Enter\") {\n event.preventDefault();\n void commit();\n }\n if (event.key === \"Escape\" && !submittingRef.current) {\n event.preventDefault();\n input.onCancel?.();\n }\n }}\n />\n </Flex>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler, DragEvent as ReactDragEvent } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { readDraggedTreeNodeId, writeDraggedTreeNodeId } from \"./tree-list-drag\";\nimport { TreeListInlineInputRow } from \"./tree-list-inline-input\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n onMoveNode,\n } = props;\n\n if (node.inlineInput) {\n return <TreeListInlineInputRow input={node.inlineInput} icon={node.icon} level={level} />;\n }\n\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const handleDragStart = (event: ReactDragEvent<HTMLElement>) => {\n writeDraggedTreeNodeId(event.dataTransfer, node.id);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragOver = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.stopPropagation();\n if (!node.canDrop) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n };\n\n const handleDrop = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.stopPropagation();\n if (!node.canDrop) return;\n event.preventDefault();\n const sourceNodeId = readDraggedTreeNodeId(event.dataTransfer);\n if (sourceNodeId && sourceNodeId !== node.id) onMoveNode(sourceNodeId, node.id);\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n const { inlineInput: _inlineInput, rowVariant: nodeRowVariant, ...listRowItem } = rowItem;\n\n const rowProps = {\n ...listRowItem,\n depth: level,\n variant: nodeRowVariant ?? rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n \"data-tree-list-node-id\": node.id,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n draggable={Boolean(onMoveNode && node.canDrag)}\n onDragStart={node.canDrag ? handleDragStart : undefined}\n onDragOver={onMoveNode ? handleDragOver : undefined}\n onDrop={onMoveNode ? handleDrop : undefined}\n >\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; orders: Record<string, string[]> };\n\nexport interface TreeListMoveEndpoint {\n kind: \"section\" | \"node\";\n sectionId: string;\n id: string;\n moveScope?: string;\n}\n\nexport interface TreeListMove {\n source: TreeListMoveEndpoint;\n destination: TreeListMoveEndpoint;\n}\n\nexport type TreeListMovePolicy = (move: TreeListMove) => boolean;\n\nconst findNodeLocation = (sections: TreeListSection[], nodeId: string) => {\n for (const section of sections) {\n const index = section.nodes.findIndex((node) => node.id === nodeId);\n if (index >= 0) return { section, index, node: section.nodes[index]! };\n }\n return undefined;\n};\n\nconst permitsMove = (move: TreeListMove, canMove: TreeListMovePolicy | undefined) => canMove?.(move) ?? true;\n\nexport const canDropOnTreeListTarget = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n canMove?: TreeListMovePolicy,\n) => {\n if (activeId === overId) return true;\n if (isSectionDragId(activeId)) {\n if (!isSectionDragId(overId)) return false;\n const source = sections.find((section) => section.id === fromSectionDragId(activeId));\n const destination = sections.find((section) => section.id === fromSectionDragId(overId));\n if (!source || !destination || source.canReorder === false || destination.canReorder === false) return false;\n return permitsMove(\n {\n source: { kind: \"section\", sectionId: source.id, id: source.id, moveScope: source.moveScope },\n destination: {\n kind: \"section\",\n sectionId: destination.id,\n id: destination.id,\n moveScope: destination.moveScope,\n },\n },\n canMove,\n );\n }\n\n const source = findNodeLocation(sections, activeId);\n if (!source || source.node.canReorder === false) return false;\n const destinationSection = isSectionDragId(overId)\n ? sections.find((section) => section.id === fromSectionDragId(overId))\n : undefined;\n const destinationNode = destinationSection ? undefined : findNodeLocation(sections, overId);\n const section = destinationSection ?? destinationNode?.section;\n if (!section || section.canReorder === false || destinationNode?.node.canReorder === false) return false;\n return permitsMove(\n {\n source: {\n kind: \"node\",\n sectionId: source.section.id,\n id: source.node.id,\n moveScope: source.node.moveScope ?? source.section.moveScope,\n },\n destination: destinationNode\n ? {\n kind: \"node\",\n sectionId: section.id,\n id: destinationNode.node.id,\n moveScope: destinationNode.node.moveScope ?? section.moveScope,\n }\n : { kind: \"section\", sectionId: section.id, id: section.id, moveScope: section.moveScope },\n },\n canMove,\n );\n};\n\nconst computeSectionReorder = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n canMove?: TreeListMovePolicy,\n): ReorderResult | null => {\n const activeSection = sections.find((section) => section.id === fromSectionDragId(activeId));\n const overSection = sections.find((section) => section.id === fromSectionDragId(overId));\n if (!activeSection || !overSection) return null;\n if (activeSection.canReorder === false || overSection.canReorder === false) return null;\n if (\n !permitsMove(\n {\n source: {\n kind: \"section\",\n sectionId: activeSection.id,\n id: activeSection.id,\n moveScope: activeSection.moveScope,\n },\n destination: {\n kind: \"section\",\n sectionId: overSection.id,\n id: overSection.id,\n moveScope: overSection.moveScope,\n },\n },\n canMove,\n )\n ) {\n return null;\n }\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(activeSection.id);\n const newIndex = orderedIds.indexOf(overSection.id);\n if (oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n};\n\nconst computeNodeReorder = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n canMove?: TreeListMovePolicy,\n): ReorderResult | null => {\n const source = findNodeLocation(sections, activeId);\n if (!source || source.node.canReorder === false) return null;\n const overSection = isSectionDragId(overId)\n ? sections.find((section) => section.id === fromSectionDragId(overId))\n : undefined;\n const overNode = overSection ? undefined : findNodeLocation(sections, overId);\n const destinationSection = overSection ?? overNode?.section;\n if (!destinationSection || destinationSection.canReorder === false || overNode?.node.canReorder === false)\n return null;\n\n const destination: TreeListMoveEndpoint = overNode\n ? {\n kind: \"node\",\n sectionId: destinationSection.id,\n id: overNode.node.id,\n moveScope: overNode.node.moveScope ?? destinationSection.moveScope,\n }\n : {\n kind: \"section\",\n sectionId: destinationSection.id,\n id: destinationSection.id,\n moveScope: destinationSection.moveScope,\n };\n if (\n !permitsMove(\n {\n source: {\n kind: \"node\",\n sectionId: source.section.id,\n id: source.node.id,\n moveScope: source.node.moveScope ?? source.section.moveScope,\n },\n destination,\n },\n canMove,\n )\n ) {\n return null;\n }\n\n const sourceIds = source.section.nodes.map((node) => node.id);\n if (source.section.id === destinationSection.id) {\n const newIndex = overNode ? overNode.index : sourceIds.length - 1;\n if (source.index === newIndex) return null;\n return { kind: \"node\", orders: { [source.section.id]: arrayMoveInPlace(sourceIds, source.index, newIndex) } };\n }\n\n const destinationIds = destinationSection.nodes.map((node) => node.id);\n const insertionIndex = overNode ? overNode.index : destinationIds.length;\n destinationIds.splice(insertionIndex, 0, source.node.id);\n return {\n kind: \"node\",\n orders: {\n [source.section.id]: sourceIds.filter((id) => id !== source.node.id),\n [destinationSection.id]: destinationIds,\n },\n };\n};\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n canMove?: TreeListMovePolicy,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n if (isSectionDragId(activeId)) {\n return isSectionDragId(overId) ? computeSectionReorder(sections, activeId, overId, canMove) : null;\n }\n return computeNodeReorder(sections, activeId, overId, canMove);\n};\n","import {\n type CollisionDetection,\n closestCenter,\n DndContext,\n type DragEndEvent,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { createContext, type ReactNode } from \"react\";\nimport type { TreeListSection } from \"./tree-list.types\";\nimport type { TreeListMovePolicy } from \"./tree-list-reorder\";\nimport { canDropOnTreeListTarget, computeReorderResult, fromSectionDragId } from \"./tree-list-reorder\";\n\nexport const SharedTreeListDragContext = createContext(false);\n\ninterface TreeListDragProviderProps {\n sections: TreeListSection[];\n canMove?: TreeListMovePolicy;\n onReorderSections?: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n children: ReactNode;\n}\n\nexport const TreeListDragProvider = (props: TreeListDragProviderProps) => {\n const { sections, canMove, onReorderSections, onReorderNodes, children } = props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n const collisionDetection: CollisionDetection = (input) =>\n closestCenter(input).filter((collision) =>\n canDropOnTreeListTarget(sections, String(input.active.id), String(collision.id), canMove),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const activeId = String(event.active.id);\n const overId = String(event.over.id);\n const result = computeReorderResult(sections, activeId, overId, canMove);\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds, fromSectionDragId(activeId), fromSectionDragId(overId));\n return;\n }\n for (const [sectionId, nextNodeIds] of Object.entries(result.orders)) {\n onReorderNodes?.(sectionId, nextNodeIds);\n }\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={collisionDetection} onDragEnd={handleDragEnd}>\n <SharedTreeListDragContext.Provider value>{children}</SharedTreeListDragContext.Provider>\n </DndContext>\n );\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport {\n type CollisionDetection,\n closestCenter,\n DndContext,\n type DragEndEvent,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { type MouseEvent as ReactMouseEvent, useContext } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { SharedTreeListDragContext } from \"./tree-list-drag-provider\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport {\n canDropOnTreeListTarget,\n computeReorderResult,\n type TreeListMovePolicy,\n toSectionDragId,\n} from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n disabled?: boolean;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id, disabled: props.disabled });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)} disabled={section.canReorder === false}>\n {({ setNodeRef, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext and can move\n// between sections. Nested rows inherit position from their parent and render plain.\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id} disabled={row.node.canReorder === false}>\n {({ setNodeRef, listeners, style }) => (\n <Box\n ref={setNodeRef}\n style={style}\n w=\"full\"\n minW=\"0\"\n onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}\n >\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n canMove?: TreeListMovePolicy;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n canMove,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n const usesSharedDragContext = useContext(SharedTreeListDragContext);\n const collisionDetection: CollisionDetection = (input) =>\n closestCenter(input).filter((collision) =>\n canDropOnTreeListTarget(sections, String(input.active.id), String(collision.id), canMove),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id), canMove);\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n for (const [sectionId, nextNodeIds] of Object.entries(result.orders)) {\n onReorderNodes?.(sectionId, nextNodeIds);\n }\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n const content = (\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n );\n if (usesSharedDragContext) return content;\n return (\n <DndContext sensors={sensors} collisionDetection={collisionDetection} onDragEnd={handleDragEnd}>\n {content}\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { TreeListBackground } from \"./tree-list-background\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListMoveSurface } from \"./tree-list-move-surface\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport type { TreeListMovePolicy } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\n/** Sectioned hierarchical list for files, resources, navigation, and customizable sidenavs. */\ninterface TreeListProps {\n /** Ordered sections to render, each containing nested tree nodes. */\n sections: TreeListSection[];\n /** Controlled section ids that are currently expanded. */\n expandedSectionIds?: string[];\n /** Controlled node ids that are currently expanded. */\n expandedNodeIds?: string[];\n /** Active node id, or ids, used for selection styling. */\n activeNodeId?: string | string[] | null;\n /** Compact rows suit app navigation; tree rows suit file/resource hierarchies. */\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n /** Link renderer used when nodes provide `href`. */\n linkComponent?: TreeListLinkComponent;\n /** Called when a navigable node is activated. */\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n /** Render large trees with virtual rows. Disable when using drag ordering. */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n /** Decide whether a proposed customization move is valid. */\n canMove?: TreeListMovePolicy;\n /** Move a node onto another node, or onto the tree root when the target is omitted. */\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n // When set, right-clicking the empty back area of the tree (everything not\n // covered by an item row) opens this menu. Item rows keep their own\n // right-click behaviour — the menu lives on a layer behind them.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n scrollRef,\n } = props;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n pb={virtualItem.index === rows.length - 1 ? \"0\" : nodeGap}\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const content = props.draggable ? (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n canMove={props.canMove}\n />\n ) : (\n <StackTreeList {...props} />\n );\n const paddedContent = <TreeListMoveSurface onMoveNode={props.onMoveNode}>{content}</TreeListMoveSurface>;\n\n if (!props.backgroundContextActions || props.backgroundContextActions.length === 0) {\n return paddedContent;\n }\n\n return <TreeListBackground actions={props.backgroundContextActions}>{paddedContent}</TreeListBackground>;\n};\n"],"mappings":"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"}