@pstdio/ui 0.43.0 → 0.43.1

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 (74) hide show
  1. package/README.md +11 -0
  2. package/dist/{MermaidComponent-X7N-8w2S.js → MermaidComponent-_cmVeKKR.js} +3 -3
  3. package/dist/{MermaidComponent-X7N-8w2S.js.map → MermaidComponent-_cmVeKKR.js.map} +1 -1
  4. package/dist/chat-ui.d.ts +85 -57
  5. package/dist/chat-ui.js +1168 -1183
  6. package/dist/chat-ui.js.map +1 -1
  7. package/dist/{collection-view-fields-CajuwtKF.d.ts → collection-view-fields-B3fhsgn7.d.ts} +2 -0
  8. package/dist/{collection-view-grouping-DnuJ1U4R.js → collection-view-grouping-jIqOrBG8.js} +2 -2
  9. package/dist/{collection-view-grouping-DnuJ1U4R.js.map → collection-view-grouping-jIqOrBG8.js.map} +1 -1
  10. package/dist/{collection-view-search-D_7Qvz7p.js → collection-view-search-KbQpKHdn.js} +767 -630
  11. package/dist/collection-view-search-KbQpKHdn.js.map +1 -0
  12. package/dist/collection-view.d.ts +1 -1
  13. package/dist/collection-view.js +2 -2
  14. package/dist/{data-table-stats-row-C8CtvdDt.js → data-table-stats-row-83mX8b1B.js} +2 -2
  15. package/dist/{data-table-stats-row-C8CtvdDt.js.map → data-table-stats-row-83mX8b1B.js.map} +1 -1
  16. package/dist/data-table.d.ts +2 -2
  17. package/dist/data-table.js +8 -8
  18. package/dist/{diff-drawer-BGQhxyOh.js → diff-drawer-BMl0zobj.js} +2 -2
  19. package/dist/{diff-drawer-BGQhxyOh.js.map → diff-drawer-BMl0zobj.js.map} +1 -1
  20. package/dist/{diff-viewer-DYcswG6O.js → diff-viewer-C5KXwq7E.js} +5 -5
  21. package/dist/{diff-viewer-DYcswG6O.js.map → diff-viewer-C5KXwq7E.js.map} +1 -1
  22. package/dist/diff.js +2 -2
  23. package/dist/{display-sort-control-n3L5WvkJ.js → display-sort-control-BCkgKET1.js} +194 -183
  24. package/dist/display-sort-control-BCkgKET1.js.map +1 -0
  25. package/dist/{edit-mode-data-table-BclZ-pWe.js → edit-mode-data-table-ScVJJT9F.js} +8 -8
  26. package/dist/{edit-mode-data-table-BclZ-pWe.js.map → edit-mode-data-table-ScVJJT9F.js.map} +1 -1
  27. package/dist/{index-5Lw7YMKy.d.ts → index-Bc2BsdD1.d.ts} +6 -0
  28. package/dist/{index-DjZsR4Ey.d.ts → index-DXpADqIg.d.ts} +8 -4
  29. package/dist/index.d.ts +49 -49
  30. package/dist/index.js +453 -455
  31. package/dist/index.js.map +1 -1
  32. package/dist/kanban-renderer.d.ts +3 -3
  33. package/dist/kanban-renderer.js +935 -745
  34. package/dist/kanban-renderer.js.map +1 -1
  35. package/dist/{list-row-CmFG_jCC.js → list-row-F8kBQGB-.js} +394 -384
  36. package/dist/list-row-F8kBQGB-.js.map +1 -0
  37. package/dist/{markdown-editor-CN4qOKky.js → markdown-editor-Dm4Fi3sX.js} +6 -6
  38. package/dist/{markdown-editor-CN4qOKky.js.map → markdown-editor-Dm4Fi3sX.js.map} +1 -1
  39. package/dist/{mermaid-renderer-DybQ_2Cp.js → mermaid-renderer-BtW_13Sz.js} +2 -2
  40. package/dist/{mermaid-renderer-DybQ_2Cp.js.map → mermaid-renderer-BtW_13Sz.js.map} +1 -1
  41. package/dist/mermaid.js +1 -1
  42. package/dist/{number-input-CyrMrDxB.js → number-input-QDqWYzTR.js} +2 -2
  43. package/dist/{number-input-CyrMrDxB.js.map → number-input-QDqWYzTR.js.map} +1 -1
  44. package/dist/{param-editor-28dBRSV4.js → param-editor-B9ASM5Lv.js} +2 -2
  45. package/dist/{param-editor-28dBRSV4.js.map → param-editor-B9ASM5Lv.js.map} +1 -1
  46. package/dist/{param-editor-field-GxhFb86w.js → param-editor-field-BmNUziwI.js} +7 -5
  47. package/dist/param-editor-field-BmNUziwI.js.map +1 -0
  48. package/dist/param-editor.js +3 -3
  49. package/dist/{prism-CnkSh-ZG.js → prism-EZSmZh-a.js} +2 -2
  50. package/dist/{prism-CnkSh-ZG.js.map → prism-EZSmZh-a.js.map} +1 -1
  51. package/dist/{rich-text-DOK4dDeb.js → rich-text-Dx5F8Zm1.js} +384 -363
  52. package/dist/rich-text-Dx5F8Zm1.js.map +1 -0
  53. package/dist/rich-text.d.ts +1 -1
  54. package/dist/rich-text.js +3 -3
  55. package/dist/{scroll-area-crJfiiuF.js → scroll-area-IeoRS73V.js} +3 -5
  56. package/dist/scroll-area-IeoRS73V.js.map +1 -0
  57. package/dist/terminal.js +1 -1
  58. package/dist/{theme-Bd_a7sU8.js → theme-CWDvF5Yn.js} +185 -73
  59. package/dist/theme-CWDvF5Yn.js.map +1 -0
  60. package/dist/theme.js +1 -1
  61. package/dist/{tree-list-B_qqiIoM.js → tree-list-Ces1hpRd.js} +2 -2
  62. package/dist/{tree-list-B_qqiIoM.js.map → tree-list-Ces1hpRd.js.map} +1 -1
  63. package/dist/{workspace-badge-oFp29Gbe.d.ts → workspace-badge-De6OQjb5.d.ts} +2 -1
  64. package/dist/{workspace-badge-BfSkiGP_.js → workspace-badge-DqQKSUJw.js} +12 -12
  65. package/dist/workspace-badge-DqQKSUJw.js.map +1 -0
  66. package/package.json +2 -2
  67. package/dist/collection-view-search-D_7Qvz7p.js.map +0 -1
  68. package/dist/display-sort-control-n3L5WvkJ.js.map +0 -1
  69. package/dist/list-row-CmFG_jCC.js.map +0 -1
  70. package/dist/param-editor-field-GxhFb86w.js.map +0 -1
  71. package/dist/rich-text-DOK4dDeb.js.map +0 -1
  72. package/dist/scroll-area-crJfiiuF.js.map +0 -1
  73. package/dist/theme-Bd_a7sU8.js.map +0 -1
  74. package/dist/workspace-badge-BfSkiGP_.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tree-list-B_qqiIoM.js","names":["ResizableSplitSide","FALLBACK_ROOT_SIZE","width","height","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","separatorSize","maxFromContent","configuredMax","resolveCollapseThreshold","resolveDraggedPanelSize","startSize","pointerDelta","collapsible","axis","rawSize","collapsed","size","clamp","Box","Flex","SystemStyleObject","KeyboardEvent","ReactKeyboardEvent","PointerEvent","ReactPointerEvent","RefObject","useEffect","useRef","useState","getResizableSplitAxis","ResizableSplitSeparator","HOVER_DELAY_MS","GRIP_DOTS","resolveHandleLayout","vertical","hitArea","top","bottom","insetInlineStart","insetInlineEnd","gripDirection","const","bar","w","transform","insetInline","h","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","separatorRef","HTMLDivElement","onCollapse","onResizeKeyDown","event","onResizeStart","ResizeHandle","line","separatorOrientation","hovered","setHovered","hoverTimerRef","tabIndex","visibility","t4","window","clearTimeout","current","t5","setTimeout","handlePointerEnter","t6","handlePointerLeave","t7","t8","t9","Math","round","t10","t11","t12","undefined","t13","content","position","t14","opacity","t15","t16","t17","t18","cursor","dot","_c","_temp","Box","SystemStyleObject","KeyboardEvent","ReactKeyboardEvent","ReactNode","PointerEvent","ReactPointerEvent","RefObject","getResizableSplitAxis","ResizableSplitSeparator","ResizeHandle","SplitPanelMotionContext","ResizableSplitPanelsProps","styles","Record","axis","ReturnType","bounds","minSize","maxSize","collapsed","collapsible","contentPanel","contentPanelId","contentPanelRef","HTMLDivElement","resizablePanel","resizablePanelId","resizablePanelRef","rootRef","dragging","resizeLabel","resolvedPanelSize","separator","separatorRef","onCollapse","onResizeKeyDown","event","onResizeStart","ResizableSplitPanels","props","$","_c","t0","undefined","t1","t2","panelContent","t3","resizablePanelNode","t4","contentPanelNode","t5","resizeTrigger","panelFirst","t6","_c","_Fragment","RefObject","useEffect","useState","PanelDimension","useResizableSplitRootSize","rootRef","separatorRef","dimension","$","_c","t0","Symbol","for","rootSize","separatorSize","size","setSize","t1","t2","element","current","updateRootSize","getBoundingClientRect","ResizeObserver","observer","observe","disconnect","_c","PointerEvent","ReactPointerEvent","RefObject","flushSync","FALLBACK_ROOT_SIZE","getResizableSplitAxis","ResizableSplitSide","resolveDraggedPanelSize","resolveResizableBounds","ResizeStartHandlerInput","axis","ReturnType","resizableSide","collapsed","collapsible","resolvedPanelSize","minSizePx","maxSizePx","contentMinSizePx","rootRef","HTMLDivElement","resizablePanelRef","contentPanelRef","separatorRef","cleanupDragRef","lastSizeRef","applyPanelSize","size","commitPanelSize","setCollapsed","setDragging","dragging","clamp","value","min","max","Math","getElementSize","element","dimension","getBoundingClientRect","createResizeStartHandler","input","event","button","preventDefault","current","resizeHandle","currentTarget","bounds","rootSize","fallbackRootSize","minSize","maxSize","contentMinSize","separatorSize","startPointer","pointerCoordinate","startSize","previousCursor","document","body","style","cursor","previousUserSelect","userSelect","nextSize","nextCollapsed","animationFrame","moved","setDraggingPanelState","pointerEvents","schedulePanelSize","window","requestAnimationFrame","handlePointerMove","moveEvent","result","side","pointerDelta","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","undefined","setPointerCapture","setProperty","addEventListener","once","clamp","getElementSize","KeyboardEvent","ResizeKeyboardOptions","dimension","deltaDirection","collapsed","collapsible","minSize","maxSize","getSize","setCollapsed","commitSize","size","createResizeKeyDownHandler","options","event","HTMLDivElement","negativeKey","positiveKey","key","preventDefault","ConditionalValue","Flex","FlexProps","useSlotRecipe","ReactNode","useEffect","useId","useRef","useState","FALLBACK_ROOT_SIZE","getResizableSplitAxis","ResizableSplitSide","resolveResizableBounds","ResizableSplitSeparator","ResizableSplitPanels","PanelDimension","useResizableSplitRootSize","createResizeStartHandler","createResizeKeyDownHandler","ResizableSplitLayoutProps","Omit","resizablePanel","contentPanel","resizableSide","defaultSizePx","minSizePx","maxSizePx","contentMinSizePx","collapsed","collapsible","resizeLabel","separator","layout","onSizeChange","size","onCollapsedChange","clamp","value","min","max","Math","getElementSize","element","HTMLDivElement","dimension","getBoundingClientRect","ResizableSplitLayout","props","controlledCollapsed","rest","axis","orientation","styles","key","id","rootRef","resizablePanelRef","contentPanelRef","separatorRef","cleanupDragRef","undefined","rootSize","separatorSize","lastSizeRef","panelSize","setPanelSize","internalCollapsed","setInternalCollapsed","dragging","setDragging","bounds","fallbackRootSize","minSize","maxSize","contentMinSize","resolvedPanelSize","contentPanelId","resizablePanelId","sizeStyle","style","current","applyPanelSize","setProperty","commitPanelSize","nextBounds","nextSize","setCollapsed","nextCollapsed","handleResizeStart","handleCollapse","handleResizeKeyDown","deltaDirection","getSize","commitSize","root","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","flat","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","position","TreeListMoveSurface","props","$","_c","t0","event","preventDefault","dataTransfer","dropEffect","handleDragOver","t1","event_0","undefined","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","useState","ListRow","DropIndicator","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","position","TreeListNodeRow","props","$","_c","LinkComponent","dropPosition","setDropPosition","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","event_0","bounds","currentTarget","getBoundingClientRect","clientY","top","height","positionAt","t7","canDrop","event_1","stopPropagation","preventDefault","dropEffect","handleDragOver","t8","event_2","handleDrop","t9","actions","map","action","onAction","context","undefined","listRowItem","nodeRowVariant","rowItem","_inlineInput","t10","t11","t12","t13","t14","depth","variant","isSelected","isExpanded","showExpandToggle","onToggleExpand","rowProps","t15","row","t16","t17","canDrag","t18","t19","t20","t21","Symbol","for","event_3","relatedTarget","Node","contains","t22","transform","bottom","t23","_c","Box","useRecipe","ReactNode","TreeListReveal","props","$","_c","open","children","t0","Symbol","for","key","recipe","t1","t2","t3","t4","t5","_c","MeasuringStrategy","Modifier","TreeListSection","SECTION_PREFIX","toSectionDragId","sectionId","isSectionDragId","id","startsWith","fromSectionDragId","slice","length","GAP_PREFIX","toGapDragId","isGapDragId","fromGapDragId","targetSectionId","overId","undefined","TreeListMoveEndpoint","kind","moveScope","TreeListMove","source","destination","TreeListMovePolicy","move","findNodeLocation","sections","nodeId","section","index","nodes","findIndex","node","permitsMove","canMove","canDropOnTreeListTarget","activeId","overSectionId","find","canReorder","destinationSection","destinationNode","lockToVerticalAxis","transform","x","verticalTreeDrag","modifiers","autoScroll","threshold","y","measuring","droppable","strategy","Always","Box","StackProps","useDroppable","useSortable","ReactNode","DropIndicator","TreeListDropIndicator","toGapDragId","edgePosition","before","top","transform","after","bottom","middle","const","DropLine","props","$","_c","edge","t0","t1","SortableHostProps","id","disabled","indicator","handle","liftedBg","highlighted","children","listeners","ReturnType","SortableHost","sortable","lineId","undefined","lifted","isDragging","setNodeRef","event","onPointerDown","SectionGapProps","sectionId","nextSectionId","gap","SectionGap","droppable","data","_c","Box","Stack","ComponentProps","TreeListNode","TreeListDropIndicator","getNodeChildren","TreeListNodeRow","TreeListReveal","DropLine","SortableHost","TreeListNodesProps","Omit","nodes","level","focusRowId","onRowFocus","id","sortable","indicator","TreeListNodeBranch","props","$","_c","node","rowProps","t0","t1","t2","_nodes","t3","t4","t5","t6","t7","t8","undefined","children","tabIndex","row","length","expandedNodeIds","includes","nodeGap","descendants","canReorder","edge","listeners","event","onPointerDown","t9","t10","lineId","t11","TreeListNodes","map","_c","Box","HStack","IconButton","Text","useRecipe","ChevronRight","FocusEventHandler","MouseEvent","ReactMouseEvent","createResourceContextActions","SearchableActionMenu","ResourceActionMenu","ResourceContextMenu","TreeListAction","TreeListSection","TreeListInlineInputRow","TreeListSectionActionsProps","sectionId","actions","TreeListSectionActions","props","$","_c","t0","Symbol","for","key","accessory","length","t1","visibility","t2","t3","action","menuItems","id","label","icon","event_0","event","stopPropagation","onAction","map","_temp","TreeListSectionHeaderProps","section","collapsible","expanded","focusId","tabIndex","onFocus","HTMLElement","onToggle","onContextMenu","TreeListSectionHeader","chevron","inlineInput","contextMenuItems","contextActions","t4","undefined","t5","t6","t7","bg","t8","t9","t10","t11","preventDefault","t12","t13","t14","t15","t16","t17","t18","_c","_temp","TreeListSection","canDropOnTreeListTarget","findNodeLocation","fromGapDragId","fromSectionDragId","isGapDragId","isSectionDragId","TreeListMovePolicy","toGapDragId","toSectionDragId","TreeListDropEdge","TreeListDropTarget","kind","id","edge","nextSectionId","TreeListDropResult","nextSectionIds","orders","Record","looseSection","afterSectionId","resolveDropTarget","activeId","overId","pointerAbove","dropSectionOn","sections","target","canMove","activeSectionId","ids","map","section","next","filter","splice","indexOf","every","index","rowDestination","location","sectionId","find","candidate","label","nodes","length","joinsNext","canReorder","undefined","computeDropResult","looseSectionId","source","node","destination","sourceIds","destinationIds","CollisionDetection","closestCenter","DragEndEvent","Over","pointerWithin","TreeListSection","computeDropResult","resolveDropTarget","canDropOnTreeListTarget","fromSectionDragId","isGapDragId","isSectionDragId","TreeListMovePolicy","targetRank","id","treeListCollisionDetection","sections","canMove","args","activeId","String","active","valid","collision","pointerCoordinates","x","collisionRect","left","width","y","within","filter","length","sort","right","dragPointerY","activatorEvent","Event","deltaY","MouseEvent","clientY","dropTargetFor","over","pointerY","rect","top","height","data","current","nextSectionId","createLooseSectionId","crypto","randomUUID","TreeListDropHandlerInput","onReorderSections","nextSectionIds","sourceSectionId","destinationSectionId","onReorderNodes","sectionId","nextNodeIds","createTreeListDropHandler","input","event","target","delta","result","kind","loose","looseSection","afterSectionId","Object","entries","orders","DndContext","PointerSensor","useSensor","useSensors","createContext","ReactNode","TreeListSection","createTreeListDropHandler","treeListCollisionDetection","TreeListMovePolicy","verticalTreeDrag","SharedTreeListDragContext","TreeListDragProviderProps","sections","canMove","onReorderSections","nextSectionIds","sourceSectionId","destinationSectionId","onReorderNodes","sectionId","nextNodeIds","children","TreeListDragProvider","props","$","_c","t0","Symbol","for","activationConstraint","distance","sensors","t1","collisionDetection","t2","handleDragEnd","t3","t4","_c","TreeListNode","TreeListSection","TreeListDropTarget","findNodeLocation","toGapDragId","toSectionDragId","TreeListDropIndicator","lineId","edge","groupId","groupOf","section","label","id","undefined","treeListDropIndicator","sections","target","expandedNodeIds","lastVisible","node","children","last","includes","at","kind","location","find","candidate","nodes","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","DndContext","PointerSensor","useDndContext","useDndMonitor","useSensor","useSensors","SortableContext","verticalListSortingStrategy","Fragment","MouseEvent","ReactMouseEvent","useContext","useState","TreeListLinkComponent","TreeListNavigateEvent","TreeListSection","createTreeListDropHandler","dragPointerY","dropTargetFor","treeListCollisionDetection","SharedTreeListDragContext","TreeListDropIndicator","treeListDropIndicator","buildVirtualRows","VirtualRow","TreeListNodes","TreeListMovePolicy","toSectionDragId","verticalTreeDrag","TreeListReveal","TreeListSectionHeader","SectionGap","SortableHost","useTreeListKeyboardNavigation","TreeListRowVariant","SortableSectionGroupProps","section","sectionRows","expandedNodeIds","activeNodeId","rowVariant","nodeGap","linkComponent","onNavigate","event","onToggleSection","sectionId","onToggleNode","nodeId","onMoveNode","sourceNodeId","targetNodeId","position","onSectionContextMenu","HTMLElement","indicator","dragging","focusRowId","onRowFocus","id","SortableSectionGroup","props","$","_c","t0","find","_temp","headerRow","t1","filter","_temp2","nodeRows","t2","nodes","map","_temp3","topLevelNodeIds","t3","t4","canReorder","t5","groupId","t6","emptyState","listeners","kind","onPointerDown","collapsible","expanded","key","length","t7","SortableSectionsProps","Omit","TreeListSortableProps","expandedSectionIds","SortableSections","sections","sectionGap","rest","active","over","pointerY","setPointerY","onDragMove","activatorEvent","delta","y","onDragEnd","onDragCancel","target","String","rows","keyboard","rootRef","handleKeyDown","index","row","Boolean","onReorderSections","nextSectionIds","onReorderNodes","nextNodeIds","canMove","TreeListSortable","undefined","Symbol","for","activationConstraint","distance","sensors","usesSharedDragContext","t8","collisionDetection","t9","t10","handleDragEnd","t11","content","t12","row_0","node","_c","_Fragment","Fragment","Box","Stack","StackProps","MouseEvent","ReactMouseEvent","RefObject","ResourceContextAction","useVirtualizer","TreeListLinkComponent","TreeListNavigateEvent","TreeListSection","TreeListBackground","buildVirtualRows","VirtualRow","TreeListMoveSurface","TreeListNodeRow","TreeListNodes","TreeListMovePolicy","TreeListReveal","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","position","backgroundContextActions","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","TreeListRowProps","row","focusRowId","onRowFocus","rowId","TreeListRow","props","$","_c","kind","t0","key","t1","t2","t3","collapsible","expanded","section","emptyState","node","id","level","VirtualTreeListProps","rows","VirtualTreeList","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","label","undefined","includes","nodes","TreeList","content","paddedContent","_c","createResourceContextActions","ResourceActionMenu","ListRow","ResourceContextMenu","useVirtualizer","SplitPanelMotionContext","DropIndicator","Fragment$1","FALLBACK_ROOT_SIZE","MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX","MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX","VERTICAL_COLLAPSE_THRESHOLD_PX","clamp$2","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","ResizeHandleGrip","$","c","props","t0","layout","t1","t2","_temp$2","t3","Flex","ResizeHandleBar","Box","ResizeHandle","line","separator","hovered","setHovered","useState","hoverTimerRef","useRef","active","dragging","visibility","t4","useEffect","t5","handlePointerEnter","t6","handlePointerLeave","t7","t8","resizablePanelId","contentPanelId","t9","bounds","collapsible","t10","t11","resolvedPanelSize","t12","t13","t14","t15","onCollapse","t16","t17","t18","css","onResizeKeyDown","onResizeStart","resizeLabel","separatorRef","dot","ResizableSplitPanels","resizablePanel","rootRef","styles","resizablePanelRef","resizablePanelNode","contentPanel","contentPanelRef","contentPanelNode","resizeTrigger","Fragment","useResizableSplitRootSize","size","setSize","dimension","element","updateRootSize","observer","clamp$1","getElementSize$1","createResizeStartHandler","event","cleanupDragRef","resizeHandle","minSizePx","maxSizePx","contentMinSizePx","startPointer","startSize","lastSizeRef","previousCursor","previousUserSelect","nextSize","nextCollapsed","animationFrame","moved","setDraggingPanelState","schedulePanelSize","applyPanelSize","handlePointerMove","moveEvent","result","resizableSide","cleanup","flushSync","setDragging","setCollapsed","commitPanelSize","createResizeKeyDownHandler","options","negativeKey","positiveKey","getSize","commitSize","deltaDirection","clamp","getElementSize","ResizableSplitLayout","controlledCollapsed","rest","orientation","useSlotRecipe","id","useId","defaultSizePx","panelSize","setPanelSize","internalCollapsed","setInternalCollapsed","sizeStyle","nextBounds","size_0","onSizeChange","onCollapsedChange","handleResizeStart","handleCollapse","handleResizeKeyDown","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","event_0","handleDrop","paddingLeft","TreeListInlineInputRow","setValue","error","setError","inputRef","submittingRef","commit","cause","icon","Input","event_1","TreeListNodeRow","LinkComponent","dropPosition","setDropPosition","hasChildren","isActive","isDisabled","isNavigable","canLink","onNavigate","onToggleNode","handleActivate","handleDragStart","positionAt","event_2","action","context","listRowItem","nodeRowVariant","_inlineInput","rowVariant","onFocus","tabIndex","rowProps","t19","t20","t21","event_3","t22","t23","nodeGap","Stack","TreeListReveal","recipe","useRecipe","open","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","GAP_PREFIX","toGapDragId","isGapDragId","fromGapDragId","targetSectionId","overId","findNodeLocation","permitsMove","canMove","move","canDropOnTreeListTarget","overSectionId","source","destination","destinationSection","destinationNode","verticalTreeDrag","transform","MeasuringStrategy","edgePosition","DropLine","edge","SortableHost","sortable","useSortable","indicator","lifted","liftedBg","highlighted","handle","SectionGap","droppable","useDroppable","nextSectionId","gap","TreeListNodeBranch","focusRowId","onRowFocus","_nodes","TreeListNodes","descendants","listeners","TreeListSectionActions","accessory","SearchableActionMenu","IconButton","HStack","_temp$1","TreeListSectionHeader","chevron","contextActions","focusId","onToggle","onContextMenu","Text","ChevronRight","resolveDropTarget","pointerAbove","dropSectionOn","activeSectionId","target","ids","next","rowDestination","location","candidate","computeDropResult","sourceIds","looseSectionId","nextSectionIds","destinationIds","targetRank","treeListCollisionDetection","args","valid","collision","pointerCoordinates","within","pointerWithin","closestCenter","left","right","dragPointerY","activatorEvent","deltaY","dropTargetFor","over","pointerY","createLooseSectionId","createTreeListDropHandler","loose","nextNodeIds","SharedTreeListDragContext","createContext","TreeListDragProvider","sensors","useSensors","useSensor","PointerSensor","collisionDetection","onReorderNodes","onReorderSections","handleDragEnd","DndContext","groupOf","treeListDropIndicator","lastVisible","last","findRowElement","root","findFocusedRowId","isTextEditingTarget","getRowIndex","useTreeListKeyboardNavigation","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusableRowIds","frame","scrollToRow","rowId","element_0","rowIndex","focusRow","onToggleSection","navigation","handleKeyDown","rowId_0","SortableSectionGroup","sectionRows","_temp","headerRow","_temp2","nodeRows","_temp3","topLevelNodeIds","linkComponent","onSectionContextMenu","SortableContext","verticalListSortingStrategy","SortableSections","useDndContext","setPointerY","keyboard","section_0","sectionGap","TreeListSortable","usesSharedDragContext","useContext","content","row_0","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","TreeListRow","VirtualTreeList","virtualizer","scrollRef","index_0","virtualItem","StackTreeList","virtualize","row_1","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.drag.ts","../src/components/layout/resizable-split-layout.keyboard.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-reveal.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable-host.tsx","../src/components/tree-list/tree-list-nodes.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-drop.ts","../src/components/tree-list/tree-list-drag-handling.ts","../src/components/tree-list/tree-list-drag-provider.tsx","../src/components/tree-list/tree-list-drop-indicator.ts","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/tree-list.tsx"],"sourcesContent":["export type ResizableSplitSide = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport const FALLBACK_ROOT_SIZE = { width: 1200, height: 720 };\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 separatorSize: number;\n}) => {\n const rootSize = input.rootSize > 0 ? input.rootSize : input.fallbackRootSize;\n const maxFromContent = Math.max(0, rootSize - input.separatorSize - 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 type RefObject,\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) => {\n if (vertical) {\n return {\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 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 separatorRef: RefObject<HTMLDivElement | null>;\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 separatorRef,\n onCollapse,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const line = separator === \"line\";\n const layout = resolveHandleLayout(axis.separatorOrientation === \"vertical\");\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 ref={separatorRef}\n data-collapsed={collapsed}\n inert={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 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\";\nimport { SplitPanelMotionContext } from \"./split-panel-motion-context\";\n\ninterface ResizableSplitPanelsProps {\n styles: Record<\"resizablePanel\" | \"panelContent\" | \"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 rootRef: RefObject<HTMLDivElement | null>;\n dragging: boolean;\n resizeLabel: string;\n resolvedPanelSize: number;\n separator: ResizableSplitSeparator;\n separatorRef: RefObject<HTMLDivElement | null>;\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 rootRef,\n dragging,\n resizeLabel,\n resolvedPanelSize,\n separator,\n separatorRef,\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 inert={collapsed}\n >\n <Box css={styles.panelContent} data-split-panel-content=\"\">\n <SplitPanelMotionContext value={rootRef}>{resizablePanel}</SplitPanelMotionContext>\n </Box>\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 separatorRef={separatorRef}\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 = (\n rootRef: RefObject<HTMLDivElement | null>,\n separatorRef: RefObject<HTMLDivElement | null>,\n dimension: PanelDimension,\n) => {\n const [size, setSize] = useState({ rootSize: 0, separatorSize: 0 });\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootSize = () => {\n setSize({\n rootSize: element.getBoundingClientRect()[dimension],\n separatorSize: separatorRef.current?.getBoundingClientRect()[dimension] ?? 0,\n });\n };\n\n updateRootSize();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootSize);\n observer.observe(element);\n if (separatorRef.current) observer.observe(separatorRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [rootRef, separatorRef, dimension]);\n\n return size;\n};\n","import type { PointerEvent as ReactPointerEvent, RefObject } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport {\n FALLBACK_ROOT_SIZE,\n type getResizableSplitAxis,\n type ResizableSplitSide,\n resolveDraggedPanelSize,\n resolveResizableBounds,\n} from \"./resizable-split-layout.geometry\";\n\ninterface ResizeStartHandlerInput {\n axis: ReturnType<typeof getResizableSplitAxis>;\n resizableSide: ResizableSplitSide;\n collapsed: boolean;\n collapsible: boolean;\n resolvedPanelSize: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n rootRef: RefObject<HTMLDivElement | null>;\n resizablePanelRef: RefObject<HTMLDivElement | null>;\n contentPanelRef: RefObject<HTMLDivElement | null>;\n separatorRef: RefObject<HTMLDivElement | null>;\n cleanupDragRef: RefObject<() => void>;\n lastSizeRef: RefObject<number>;\n applyPanelSize(size: number): void;\n commitPanelSize(size: number): void;\n setCollapsed(collapsed: boolean): void;\n setDragging(dragging: boolean): void;\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\nconst getElementSize = (element: HTMLDivElement | null, dimension: \"width\" | \"height\") =>\n element?.getBoundingClientRect()[dimension] ?? 0;\n\nexport const createResizeStartHandler = (input: ResizeStartHandlerInput) => {\n const {\n axis,\n resizableSide,\n collapsed,\n collapsible,\n resolvedPanelSize,\n minSizePx,\n maxSizePx,\n contentMinSizePx,\n rootRef,\n resizablePanelRef,\n contentPanelRef,\n separatorRef,\n cleanupDragRef,\n lastSizeRef,\n applyPanelSize,\n commitPanelSize,\n setCollapsed,\n setDragging,\n } = input;\n return (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 separatorSize: getElementSize(separatorRef.current, axis.dimension),\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 let moved = false;\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 moved ||= moveEvent[axis.pointerCoordinate] !== startPointer;\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 if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (!moved) {\n // Resume opening without committing an intermediate size from a divider press.\n flushSync(() => setDragging(false));\n rootRef.current?.getBoundingClientRect();\n applyPanelSize(resolvedPanelSize);\n return;\n }\n if (nextCollapsed) {\n // Settle the final drag geometry before restoring programmatic transitions.\n applyPanelSize(0);\n flushSync(() => setCollapsed(true));\n resizablePanelRef.current?.getBoundingClientRect();\n } else {\n setCollapsed(false);\n commitPanelSize(nextSize);\n }\n setDragging(false);\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 // Disabling the transition must keep its current size and the saved target.\n rootRef.current?.style.setProperty(\"--split-size\", `${startSize}px`);\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","import type { KeyboardEvent } from \"react\";\n\ninterface ResizeKeyboardOptions {\n dimension: \"width\" | \"height\";\n deltaDirection: number;\n collapsed: boolean;\n collapsible: boolean;\n minSize: number;\n maxSize: number;\n getSize: () => number;\n setCollapsed: (collapsed: boolean) => void;\n commitSize: (size: number) => void;\n}\n\nexport const createResizeKeyDownHandler =\n (options: ResizeKeyboardOptions) => (event: KeyboardEvent<HTMLDivElement>) => {\n const { dimension, deltaDirection, collapsed, collapsible, minSize, maxSize, getSize, setCollapsed, commitSize } =\n options;\n const negativeKey = dimension === \"width\" ? \"ArrowLeft\" : \"ArrowUp\";\n const positiveKey = dimension === \"width\" ? \"ArrowRight\" : \"ArrowDown\";\n const size = getSize();\n if (collapsed && (event.key === negativeKey || event.key === positiveKey || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitSize(size);\n } else if (event.key === negativeKey) {\n event.preventDefault();\n commitSize(size - 24 * deltaDirection);\n } else if (event.key === positiveKey) {\n event.preventDefault();\n commitSize(size + 24 * deltaDirection);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitSize(minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitSize(maxSize);\n }\n };\n","import { type ConditionalValue, Flex, type FlexProps, useSlotRecipe } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useId, useRef, useState } from \"react\";\nimport {\n FALLBACK_ROOT_SIZE,\n getResizableSplitAxis,\n type ResizableSplitSide,\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\";\nimport { createResizeStartHandler } from \"./resizable-split-layout.drag\";\nimport { createResizeKeyDownHandler } from \"./resizable-split-layout.keyboard\";\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 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 orientation = axis.dimension === \"width\" ? \"horizontal\" : \"vertical\";\n const styles = useSlotRecipe({ key: \"resizableSplitLayout\" })({ orientation, layout, separator });\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const separatorRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const { rootSize, separatorSize } = useResizableSplitRootSize(rootRef, separatorRef, 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 separatorSize,\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 = {\n ...rest.style,\n \"--split-size\": `${resolvedPanelSize}px`,\n \"--split-stored-size\": `${clamp(panelSize, bounds.minSize, bounds.maxSize)}px`,\n };\n\n useEffect(() => {\n lastSizeRef.current = defaultSizePx;\n setPanelSize(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelSize = (size: number) => {\n // Keep the retained size owned by React so dragging closed cannot overwrite it.\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 separatorSize: getElementSize(separatorRef.current, axis.dimension),\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 = createResizeStartHandler({\n axis,\n resizableSide,\n collapsed,\n collapsible,\n resolvedPanelSize,\n minSizePx,\n maxSizePx,\n contentMinSizePx,\n rootRef,\n resizablePanelRef,\n contentPanelRef,\n separatorRef,\n cleanupDragRef,\n lastSizeRef,\n applyPanelSize,\n commitPanelSize,\n setCollapsed,\n setDragging,\n });\n\n const handleCollapse = () => {\n if (collapsible) setCollapsed(true);\n };\n\n const handleResizeKeyDown = createResizeKeyDownHandler({\n dimension: axis.dimension,\n deltaDirection: axis.deltaDirection,\n collapsed,\n collapsible,\n minSize: bounds.minSize,\n maxSize: bounds.maxSize,\n getSize: () => lastSizeRef.current,\n setCollapsed,\n commitSize: commitPanelSize,\n });\n\n return (\n <Flex\n ref={rootRef}\n css={styles.root}\n {...rest}\n style={sizeStyle}\n data-collapsed={collapsed}\n data-dragging={dragging}\n >\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 rootRef={rootRef}\n dragging={dragging}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n separator={separator}\n separatorRef={separatorRef}\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 = activeNodeId ? [activeNodeId].flat() : [];\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, position?: \"before\" | \"after\" | \"inside\") => 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, undefined, \"inside\");\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, type DragEvent as ReactDragEvent, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { DropIndicator } from \"../primitives/drop-indicator\";\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, position?: \"before\" | \"after\" | \"inside\") => 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 const [dropPosition, setDropPosition] = useState<\"before\" | \"after\" | \"inside\" | null>(null);\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 positionAt = (event: ReactDragEvent<HTMLElement>) => {\n if (hasChildren) return \"inside\";\n const bounds = event.currentTarget.getBoundingClientRect();\n return event.clientY < bounds.top + bounds.height / 2 ? \"before\" : \"after\";\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 setDropPosition(positionAt(event));\n };\n\n const handleDrop = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.stopPropagation();\n if (!node.canDrop) return;\n event.preventDefault();\n setDropPosition(null);\n const sourceNodeId = readDraggedTreeNodeId(event.dataTransfer);\n if (sourceNodeId && sourceNodeId !== node.id) onMoveNode(sourceNodeId, node.id, positionAt(event));\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 position=\"relative\"\n bg={dropPosition === \"inside\" ? \"bg.accent-subtle\" : undefined}\n draggable={Boolean(onMoveNode && node.canDrag)}\n onDragStart={node.canDrag ? handleDragStart : undefined}\n onDragOver={onMoveNode ? handleDragOver : undefined}\n onDrop={onMoveNode ? handleDrop : undefined}\n onDragLeave={(event) => {\n if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget))\n setDropPosition(null);\n }}\n >\n {row}\n {dropPosition === \"before\" || dropPosition === \"after\" ? (\n <DropIndicator\n data-tree-list-drop-indicator={dropPosition}\n {...(dropPosition === \"before\"\n ? { top: \"0\", transform: \"translateY(-50%)\" }\n : { bottom: \"0\", transform: \"translateY(50%)\" })}\n />\n ) : null}\n </Stack>\n );\n};\n","import { Box, useRecipe } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport const TreeListReveal = (props: { open: boolean; children: ReactNode }) => {\n const { open, children } = props;\n const recipe = useRecipe({ key: \"treeReveal\" });\n return (\n <Box css={recipe()} data-tree-reveal=\"\" data-open={open} inert={!open} aria-hidden={!open}>\n <Box>{children}</Box>\n </Box>\n );\n};\n","import { MeasuringStrategy, type Modifier } from \"@dnd-kit/core\";\nimport 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\n// The space after a section is its own drop zone: dropping there places an item behind the section.\nconst GAP_PREFIX = \"after-section:\";\n\nexport const toGapDragId = (sectionId: string) => `${GAP_PREFIX}${sectionId}`;\nexport const isGapDragId = (id: string) => id.startsWith(GAP_PREFIX);\nexport const fromGapDragId = (id: string) => id.slice(GAP_PREFIX.length);\nconst targetSectionId = (overId: string) => {\n if (isSectionDragId(overId)) return fromSectionDragId(overId);\n if (isGapDragId(overId)) return fromGapDragId(overId);\n return undefined;\n};\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\nexport const 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 const overSectionId = targetSectionId(overId);\n if (isSectionDragId(activeId)) {\n if (overSectionId === undefined) return false;\n const source = sections.find((section) => section.id === fromSectionDragId(activeId));\n const destination = sections.find((section) => section.id === overSectionId);\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 =\n overSectionId === undefined ? undefined : sections.find((section) => section.id === overSectionId);\n const destinationNode = overSectionId === undefined ? findNodeLocation(sections, overId) : undefined;\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 lockToVerticalAxis: Modifier = ({ transform }) => ({ ...transform, x: 0 });\n\n// Tree lists are vertical: sideways pointer movement neither picks drop targets nor scrolls containers.\n// Drop zones for empty sections appear once a drag starts, so they are measured while dragging.\nexport const verticalTreeDrag = {\n modifiers: [lockToVerticalAxis],\n autoScroll: { threshold: { x: 0, y: 0.2 } },\n measuring: { droppable: { strategy: MeasuringStrategy.Always } },\n};\n","import { Box, type StackProps } from \"@chakra-ui/react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport { DropIndicator } from \"../primitives/drop-indicator\";\nimport type { TreeListDropIndicator } from \"./tree-list-drop-indicator\";\nimport { toGapDragId } from \"./tree-list-reorder\";\n\nconst edgePosition = {\n before: { top: \"0\", transform: \"translateY(-50%)\" },\n after: { bottom: \"0\", transform: \"translateY(50%)\" },\n middle: { top: \"50%\", transform: \"translateY(-50%)\" },\n} as const;\n\n// The accent line marks the drop slot on the target's edge without shifting the rows.\nexport const DropLine = (props: { edge: TreeListDropIndicator[\"edge\"] }) => {\n const { edge } = props;\n return <DropIndicator data-tree-list-drop-indicator={edge} {...edgePosition[edge]} />;\n};\n\ninterface SortableHostProps {\n id: string;\n disabled?: boolean;\n indicator: TreeListDropIndicator | null;\n // Rows are their own drag handle; a section is dragged by its header only.\n handle: \"self\" | \"child\";\n liftedBg?: string;\n // A group the dragged row drops into.\n highlighted?: boolean;\n children: (listeners: ReturnType<typeof useSortable>[\"listeners\"]) => ReactNode;\n}\n\n// No grip glyph: the row or section header is the handle. Clicks pass through because the pointer sensor\n// activates only after the cursor moves 4px (configured by the tree list). Items stay in place while dragging;\n// the lifted item fades and the drop line shows where it lands.\nexport const SortableHost = (props: SortableHostProps) => {\n const { id, disabled, indicator, handle, liftedBg, highlighted, children } = props;\n const sortable = useSortable({ id, disabled });\n const edge = indicator?.lineId === id ? indicator.edge : undefined;\n const lifted = sortable.isDragging ? liftedBg : undefined;\n return (\n <Box\n ref={sortable.setNodeRef}\n position=\"relative\"\n w=\"full\"\n minW=\"0\"\n borderRadius=\"xs\"\n opacity={sortable.isDragging ? 0.5 : 1}\n bg={highlighted ? \"bg.accent-subtle\" : lifted}\n data-tree-list-drop-group={highlighted ? \"\" : undefined}\n onPointerDownCapture={handle === \"self\" ? (event) => sortable.listeners?.onPointerDown?.(event) : undefined}\n >\n {children(sortable.listeners)}\n {edge ? <DropLine edge={edge} /> : null}\n </Box>\n );\n};\n\ninterface SectionGapProps {\n sectionId: string;\n nextSectionId?: string;\n gap: StackProps[\"gap\"];\n indicator: TreeListDropIndicator | null;\n}\n\n// The last drop zone uses the tree's existing padding instead of adding a section gap.\nexport const SectionGap = (props: SectionGapProps) => {\n const { sectionId, nextSectionId, gap, indicator } = props;\n const id = toGapDragId(sectionId);\n const droppable = useDroppable({ id, data: { nextSectionId } });\n return (\n <Box\n ref={droppable.setNodeRef}\n position={nextSectionId ? \"relative\" : \"absolute\"}\n top={nextSectionId ? undefined : \"100%\"}\n w=\"full\"\n pt={nextSectionId ? gap : \"xs\"}\n flexShrink={0}\n >\n {indicator?.lineId === id ? <DropLine edge=\"middle\" /> : null}\n </Box>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport type { ComponentProps } from \"react\";\nimport type { TreeListNode } from \"./tree-list.types\";\nimport type { TreeListDropIndicator } from \"./tree-list-drop-indicator\";\nimport { getNodeChildren } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListReveal } from \"./tree-list-reveal\";\nimport { DropLine, SortableHost } from \"./tree-list-sortable-host\";\n\ninterface TreeListNodesProps\n extends Omit<ComponentProps<typeof TreeListNodeRow>, \"node\" | \"level\" | \"onFocus\" | \"tabIndex\"> {\n nodes: TreeListNode[];\n level?: number;\n focusRowId?: string;\n onRowFocus?: (id: string) => void;\n sortable?: boolean;\n indicator?: TreeListDropIndicator | null;\n}\n\nconst TreeListNodeBranch = (props: TreeListNodesProps & { node: TreeListNode }) => {\n const { node, nodes: _nodes, level = 0, focusRowId, onRowFocus, sortable, indicator = null, ...rowProps } = props;\n const children = getNodeChildren(node);\n let tabIndex: number | undefined;\n if (focusRowId !== undefined) tabIndex = node.id === focusRowId ? 0 : -1;\n const row = (\n <TreeListNodeRow\n {...rowProps}\n node={node}\n level={level}\n tabIndex={tabIndex}\n onFocus={() => onRowFocus?.(node.id)}\n />\n );\n const descendants = children.length ? (\n <TreeListReveal open={rowProps.expandedNodeIds.includes(node.id)}>\n <Box pt={rowProps.nodeGap}>\n <TreeListNodes {...props} nodes={children} level={level + 1} />\n </Box>\n </TreeListReveal>\n ) : null;\n\n if (sortable && level === 0) {\n return (\n <Box position=\"relative\" minW=\"0\">\n <SortableHost\n id={node.id}\n disabled={node.canReorder === false}\n indicator={indicator?.edge === \"after\" ? null : indicator}\n handle=\"child\"\n liftedBg=\"bg.hover\"\n >\n {(listeners) => <Box onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}>{row}</Box>}\n </SortableHost>\n {descendants}\n {indicator?.lineId === node.id && indicator.edge === \"after\" ? <DropLine edge=\"after\" /> : null}\n </Box>\n );\n }\n return (\n <Box position=\"relative\" minW=\"0\">\n {row}\n {descendants}\n {indicator?.lineId === node.id ? <DropLine edge={indicator.edge} /> : null}\n </Box>\n );\n};\n\nexport const TreeListNodes = (props: TreeListNodesProps) => {\n const { nodes, nodeGap } = props;\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodes.map((node) => (\n <TreeListNodeBranch key={node.id} {...props} node={node} />\n ))}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Text, useRecipe } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { createResourceContextActions } from \"../list-row/list-row-chrome\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport { ResourceActionMenu, ResourceContextMenu } from \"../overlays/resource-context-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\nimport { TreeListInlineInputRow } from \"./tree-list-inline-input\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n const accessory = useRecipe({ key: \"listRowAccessory\" });\n if (actions.length === 0) return null;\n\n return (\n <HStack gap=\"0\" css={accessory({ visibility: \"hover\" })} onClick={(event) => event.stopPropagation()}>\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 <ResourceActionMenu key={action.id} actions={createResourceContextActions(action.menuItems)}>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </ResourceActionMenu>\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 const chevron = useRecipe({ key: \"treeChevron\" });\n\n if (section.inlineInput) {\n return <TreeListInlineInputRow input={section.inlineInput} level={0} />;\n }\n\n const contextActions = createResourceContextActions(section.contextMenuItems ?? []);\n\n return (\n <ResourceContextMenu actions={contextActions}>\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 <Box asChild css={chevron()} data-open={expanded}>\n <ChevronRight size={14} />\n </Box>\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n </ResourceContextMenu>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\nimport {\n canDropOnTreeListTarget,\n findNodeLocation,\n fromGapDragId,\n fromSectionDragId,\n isGapDragId,\n isSectionDragId,\n type TreeListMovePolicy,\n toGapDragId,\n toSectionDragId,\n} from \"./tree-list-reorder\";\n\nexport type TreeListDropEdge = \"before\" | \"after\";\n\n// Where a dragged item lands: next to a row, or before, after (\"behind\") or inside a section.\nexport type TreeListDropTarget =\n | { kind: \"node\"; id: string; edge: TreeListDropEdge }\n | { kind: \"section\"; id: string; edge: TreeListDropEdge | \"inside\"; nextSectionId?: string };\n\nexport type TreeListDropResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | {\n kind: \"node\";\n orders: Record<string, string[]>;\n // A row dropped behind a group with no bare run after it starts a new bare run there.\n looseSection?: { id: string; afterSectionId: string; nextSectionIds: string[] };\n };\n\n// The pointer's half of the hovered item picks the edge. A section's gap means \"behind it\"; a row dropped on a\n// section's own area (its header or empty state) joins it.\nexport const resolveDropTarget = (\n activeId: string,\n overId: string,\n pointerAbove: boolean,\n nextSectionId?: string,\n): TreeListDropTarget | null => {\n if (activeId === overId) return null;\n const edge = pointerAbove ? \"before\" : \"after\";\n if (isGapDragId(overId)) return { kind: \"section\", id: fromGapDragId(overId), edge: \"after\", nextSectionId };\n if (isSectionDragId(overId))\n return { kind: \"section\", id: fromSectionDragId(overId), edge: isSectionDragId(activeId) ? edge : \"inside\" };\n if (isSectionDragId(activeId)) return null;\n return { kind: \"node\", id: overId, edge };\n};\n\nconst dropSectionOn = (\n sections: TreeListSection[],\n activeId: string,\n target: TreeListDropTarget,\n canMove?: TreeListMovePolicy,\n): TreeListDropResult | null => {\n const activeSectionId = fromSectionDragId(activeId);\n if (target.kind !== \"section\" || target.edge === \"inside\" || target.id === activeSectionId) return null;\n if (!canDropOnTreeListTarget(sections, activeId, toSectionDragId(target.id), canMove)) return null;\n const ids = sections.map((section) => section.id);\n const next = ids.filter((id) => id !== activeSectionId);\n next.splice(next.indexOf(target.id) + (target.edge === \"after\" ? 1 : 0), 0, activeSectionId);\n return next.every((id, index) => id === ids[index]) ? null : { kind: \"section\", nextSectionIds: next };\n};\n\n// Resolves the section and index a row lands at, or undefined when it needs a new bare run behind a group.\nconst rowDestination = (\n sections: TreeListSection[],\n activeId: string,\n target: TreeListDropTarget,\n canMove?: TreeListMovePolicy,\n) => {\n if (target.kind === \"node\") {\n const location = findNodeLocation(sections, target.id);\n if (!location) return null;\n return { sectionId: location.section.id, index: location.index + (target.edge === \"after\" ? 1 : 0) };\n }\n const section = sections.find((candidate) => candidate.id === target.id);\n if (!section) return null;\n // Behind a bare run of rows is its own end.\n if (target.edge === \"inside\" || !section.label) return { sectionId: section.id, index: section.nodes.length };\n const next = sections.find((candidate) => candidate.id === target.nextSectionId);\n const joinsNext =\n next &&\n !next.label &&\n next.canReorder !== false &&\n canDropOnTreeListTarget(sections, activeId, toSectionDragId(next.id), canMove);\n return joinsNext ? { sectionId: next.id, index: 0 } : undefined;\n};\n\nexport const computeDropResult = (\n sections: TreeListSection[],\n activeId: string,\n target: TreeListDropTarget,\n canMove?: TreeListMovePolicy,\n looseSectionId?: string,\n): TreeListDropResult | null => {\n if (isSectionDragId(activeId)) return dropSectionOn(sections, activeId, target, canMove);\n const source = findNodeLocation(sections, activeId);\n if (!source || source.node.canReorder === false) return null;\n const overId = target.kind === \"node\" ? target.id : toGapDragId(target.id);\n if (!canDropOnTreeListTarget(sections, activeId, overId, canMove)) return null;\n const destination = rowDestination(sections, activeId, target, canMove);\n if (destination === null) return null;\n\n const sourceIds = source.section.nodes.map((node) => node.id).filter((id) => id !== activeId);\n if (!destination) {\n if (!looseSectionId || target.kind !== \"section\") return null;\n const nextSectionIds = sections.map((section) => section.id);\n nextSectionIds.splice(nextSectionIds.indexOf(target.id) + 1, 0, looseSectionId);\n return {\n kind: \"node\",\n orders: { [source.section.id]: sourceIds, [looseSectionId]: [activeId] },\n looseSection: { id: looseSectionId, afterSectionId: target.id, nextSectionIds },\n };\n }\n\n if (destination.sectionId === source.section.id) {\n const index = destination.index - (source.index < destination.index ? 1 : 0);\n if (index === source.index) return null;\n sourceIds.splice(index, 0, activeId);\n return { kind: \"node\", orders: { [source.section.id]: sourceIds } };\n }\n const destinationIds =\n sections.find((section) => section.id === destination.sectionId)?.nodes.map((node) => node.id) ?? [];\n destinationIds.splice(destination.index, 0, activeId);\n return { kind: \"node\", orders: { [source.section.id]: sourceIds, [destination.sectionId]: destinationIds } };\n};\n","import { type CollisionDetection, closestCenter, type DragEndEvent, type Over, pointerWithin } from \"@dnd-kit/core\";\nimport type { TreeListSection } from \"./tree-list.types\";\nimport { computeDropResult, resolveDropTarget } from \"./tree-list-drop\";\nimport {\n canDropOnTreeListTarget,\n fromSectionDragId,\n isGapDragId,\n isSectionDragId,\n type TreeListMovePolicy,\n} from \"./tree-list-reorder\";\n\n// Rows win over section gaps, and gaps over the section boxes that contain them.\nconst targetRank = (id: string) => {\n if (isSectionDragId(id)) return 2;\n if (isGapDragId(id)) return 1;\n return 0;\n};\n\nexport const treeListCollisionDetection =\n (sections: TreeListSection[], canMove?: TreeListMovePolicy): CollisionDetection =>\n (args) => {\n const activeId = String(args.active.id);\n const valid = (collision: { id: string | number }) =>\n canDropOnTreeListTarget(sections, activeId, String(collision.id), canMove);\n // The pointer's x is pinned to the dragged item's column, so only vertical movement picks a target.\n const pointerCoordinates = args.pointerCoordinates && {\n x: args.collisionRect.left + args.collisionRect.width / 2,\n y: args.pointerCoordinates.y,\n };\n const within = pointerCoordinates ? pointerWithin({ ...args, pointerCoordinates }).filter(valid) : [];\n if (within.length === 0) return closestCenter(args).filter(valid);\n return within.sort((left, right) => targetRank(String(left.id)) - targetRank(String(right.id)));\n };\n\n// The live pointer is where the drag started plus how far it moved.\nexport const dragPointerY = (activatorEvent: Event | null, deltaY: number) =>\n (activatorEvent instanceof MouseEvent ? activatorEvent.clientY : 0) + deltaY;\n\nexport const dropTargetFor = (activeId: string, over: Over | null, pointerY: number) =>\n over\n ? resolveDropTarget(\n activeId,\n String(over.id),\n pointerY < over.rect.top + over.rect.height / 2,\n over.data.current?.nextSectionId as string | undefined,\n )\n : null;\n\nconst createLooseSectionId = () => `tree-list-loose:${crypto.randomUUID()}`;\n\ninterface TreeListDropHandlerInput {\n sections: TreeListSection[];\n canMove?: TreeListMovePolicy;\n onReorderSections?: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const createTreeListDropHandler = (input: TreeListDropHandlerInput) => (event: DragEndEvent) => {\n const activeId = String(event.active.id);\n const target = dropTargetFor(activeId, event.over, dragPointerY(event.activatorEvent, event.delta.y));\n if (!target) return;\n const result = computeDropResult(input.sections, activeId, target, input.canMove, createLooseSectionId());\n if (!result) return;\n if (result.kind === \"section\") {\n input.onReorderSections?.(result.nextSectionIds, fromSectionDragId(activeId), target.id);\n return;\n }\n // A new bare run takes the slot of the group it sits behind.\n const loose = result.looseSection;\n if (loose) input.onReorderSections?.(loose.nextSectionIds, loose.id, loose.afterSectionId);\n for (const [sectionId, nextNodeIds] of Object.entries(result.orders)) input.onReorderNodes?.(sectionId, nextNodeIds);\n};\n","import { DndContext, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { createContext, type ReactNode } from \"react\";\nimport type { TreeListSection } from \"./tree-list.types\";\nimport { createTreeListDropHandler, treeListCollisionDetection } from \"./tree-list-drag-handling\";\nimport { type TreeListMovePolicy, verticalTreeDrag } 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 = treeListCollisionDetection(sections, canMove);\n const handleDragEnd = createTreeListDropHandler({ sections, canMove, onReorderSections, onReorderNodes });\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n onDragEnd={handleDragEnd}\n {...verticalTreeDrag}\n >\n <SharedTreeListDragContext.Provider value>{children}</SharedTreeListDragContext.Provider>\n </DndContext>\n );\n};\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { TreeListDropTarget } from \"./tree-list-drop\";\nimport { findNodeLocation, toGapDragId, toSectionDragId } from \"./tree-list-reorder\";\n\nexport interface TreeListDropIndicator {\n // Drag id of the row, section, or section gap that draws the line.\n lineId: string;\n edge: \"before\" | \"after\" | \"middle\";\n // A labeled section the item drops into; it is highlighted so \"into\" reads differently from \"behind\".\n groupId?: string;\n}\n\nconst groupOf = (section: TreeListSection | undefined) => (section?.label ? section.id : undefined);\n\n// Only targets inside this tree's sections draw here; a shared drag context lets each tree draw its own part.\nexport const treeListDropIndicator = (\n sections: TreeListSection[],\n target: TreeListDropTarget | null,\n expandedNodeIds: string[] = [],\n): TreeListDropIndicator | null => {\n if (!target) return null;\n const lastVisible = (node: TreeListNode): TreeListNode => {\n const children: TreeListNode[] | undefined = node.children;\n const last = expandedNodeIds.includes(node.id) ? children?.at(-1) : undefined;\n return last ? lastVisible(last) : node;\n };\n if (target.kind === \"node\") {\n const location = findNodeLocation(sections, target.id);\n if (!location) return null;\n const lineId = target.edge === \"after\" ? lastVisible(location.node).id : target.id;\n return { lineId, edge: target.edge, groupId: groupOf(location.section) };\n }\n const section = sections.find((candidate) => candidate.id === target.id);\n if (!section) return null;\n if (target.edge === \"inside\") {\n const last = section.nodes.at(-1);\n return {\n lineId: last ? lastVisible(last).id : toSectionDragId(section.id),\n edge: \"after\",\n groupId: groupOf(section),\n };\n }\n if (target.edge === \"after\") return { lineId: toGapDragId(section.id), edge: \"middle\" };\n return { lineId: toSectionDragId(section.id), edge: \"before\" };\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 { DndContext, PointerSensor, useDndContext, useDndMonitor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Fragment, type MouseEvent as ReactMouseEvent, useContext, useState } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport {\n createTreeListDropHandler,\n dragPointerY,\n dropTargetFor,\n treeListCollisionDetection,\n} from \"./tree-list-drag-handling\";\nimport { SharedTreeListDragContext } from \"./tree-list-drag-provider\";\nimport { type TreeListDropIndicator, treeListDropIndicator } from \"./tree-list-drop-indicator\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodes } from \"./tree-list-nodes\";\nimport { type TreeListMovePolicy, toSectionDragId, verticalTreeDrag } from \"./tree-list-reorder\";\nimport { TreeListReveal } from \"./tree-list-reveal\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { SectionGap, SortableHost } from \"./tree-list-sortable-host\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\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 onMoveNode?: (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n indicator: TreeListDropIndicator | null;\n dragging: boolean;\n focusRowId?: string;\n onRowFocus: (id: 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 onMoveNode,\n onSectionContextMenu,\n indicator,\n dragging,\n focusRowId,\n onRowFocus,\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 = section.nodes.map((node) => node.id);\n\n return (\n <SortableHost\n id={toSectionDragId(section.id)}\n disabled={section.canReorder === false}\n indicator={indicator}\n handle=\"child\"\n highlighted={indicator?.groupId === section.id}\n >\n {(listeners) => (\n <>\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={headerRow.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(headerRow.key)}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n {/* An empty bare section is invisible until a drag starts; then it offers a row-sized drop zone. */}\n {dragging && !headerRow && nodeRows.length === 0 ? (\n <Box h=\"tree-empty-drop-zone\" data-tree-list-empty-drop-zone=\"\" />\n ) : null}\n <TreeListReveal open={!headerRow || (headerRow.kind === \"section-header\" && headerRow.expanded)}>\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <TreeListNodes\n sectionId={section.id}\n nodes={section.nodes}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n sortable\n indicator={indicator}\n focusRowId={focusRowId}\n onRowFocus={onRowFocus}\n />\n {section.nodes.length === 0 ? section.emptyState : null}\n </SortableContext>\n </TreeListReveal>\n </>\n )}\n </SortableHost>\n );\n};\n\ntype SortableSectionsProps = Omit<\n TreeListSortableProps,\n \"onReorderSections\" | \"onReorderNodes\" | \"canMove\" | \"expandedSectionIds\" | \"expandedNodeIds\"\n> & {\n expandedSectionIds: string[];\n expandedNodeIds: string[];\n};\n\n// Reads the drag state from the enclosing DndContext, which may be shared by several trees.\nconst SortableSections = (props: SortableSectionsProps) => {\n const { sections, expandedSectionIds, expandedNodeIds, sectionGap, ...rest } = props;\n const { active, over } = useDndContext();\n const [pointerY, setPointerY] = useState<number | null>(null);\n useDndMonitor({\n onDragMove: (event) => setPointerY(dragPointerY(event.activatorEvent, event.delta.y)),\n onDragEnd: () => setPointerY(null),\n onDragCancel: () => setPointerY(null),\n });\n const target = active && pointerY !== null ? dropTargetFor(String(active.id), over, pointerY) : null;\n const indicator = treeListDropIndicator(sections, target, expandedNodeIds);\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId: rest.activeNodeId,\n expandedNodeIds,\n onToggleNode: rest.onToggleNode,\n onToggleSection: rest.onToggleSection,\n });\n return (\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n onKeyDown={keyboard.handleKeyDown}\n gap=\"0\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n >\n {sections.map((section, index) => (\n <Fragment key={section.id}>\n <SortableSectionGroup\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n rowVariant={rest.rowVariant ?? \"tree\"}\n nodeGap={rest.nodeGap}\n activeNodeId={rest.activeNodeId}\n linkComponent={rest.linkComponent}\n onNavigate={rest.onNavigate}\n onToggleSection={rest.onToggleSection}\n onToggleNode={rest.onToggleNode}\n onMoveNode={rest.onMoveNode}\n onSectionContextMenu={rest.onSectionContextMenu}\n indicator={indicator}\n dragging={Boolean(active)}\n focusRowId={keyboard.focusRowId}\n onRowFocus={keyboard.onRowFocus}\n />\n <SectionGap\n sectionId={section.id}\n nextSectionId={sections[index + 1]?.id}\n gap={sectionGap}\n indicator={indicator}\n />\n </Fragment>\n ))}\n </Stack>\n </SortableContext>\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 onMoveNode?: (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => 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 onMoveNode,\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 = treeListCollisionDetection(sections, canMove);\n const handleDragEnd = createTreeListDropHandler({\n sections,\n canMove,\n onReorderSections: (nextSectionIds) => onReorderSections?.(nextSectionIds),\n onReorderNodes,\n });\n\n const content = (\n <SortableSections\n sections={sections}\n expandedSectionIds={expandedSectionIds}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n sectionGap={sectionGap}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n );\n if (usesSharedDragContext) return content;\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n onDragEnd={handleDragEnd}\n {...verticalTreeDrag}\n >\n {content}\n </DndContext>\n );\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport type { MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { useVirtualizer } from \"@/utils/use-virtualizer\";\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 { TreeListNodes } from \"./tree-list-nodes\";\nimport type { TreeListMovePolicy } from \"./tree-list-reorder\";\nimport { TreeListReveal } from \"./tree-list-reveal\";\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 // Customizable trees bypass virtualization. Hosts persist their 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 before/after a leaf, into a container, or into the background when the target is omitted. */\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => void;\n // Background actions sit behind item rows, which keep their own context menu.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface TreeListRowProps {\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, position?: \"before\" | \"after\" | \"inside\") => void;\n}\n\nconst TreeListRow = (props: TreeListRowProps) => {\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 } = props;\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 data-tree-list-virtual=\"\"\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 <TreeListRow\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n focusRowId={keyboard.focusRowId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onRowFocus={keyboard.onRowFocus}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n onMoveNode={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\n .filter((row) => row.kind === \"section-header\")\n .map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n <TreeListRow\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n focusRowId={keyboard.focusRowId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onRowFocus={keyboard.onRowFocus}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n onMoveNode={onMoveNode}\n />\n </Box>\n ))}\n <TreeListReveal\n open={\n section.collapsible === false || section.label === undefined || expandedSectionIds.includes(section.id)\n }\n >\n <TreeListNodes\n sectionId={section.id}\n nodes={section.nodes}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n focusRowId={keyboard.focusRowId}\n onRowFocus={keyboard.onRowFocus}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n />\n {section.nodes.length === 0 ? section.emptyState : null}\n </TreeListReveal>\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 onMoveNode={props.onMoveNode}\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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"}
1
+ {"version":3,"file":"tree-list-Ces1hpRd.js","names":["ResizableSplitSide","FALLBACK_ROOT_SIZE","width","height","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","separatorSize","maxFromContent","configuredMax","resolveCollapseThreshold","resolveDraggedPanelSize","startSize","pointerDelta","collapsible","axis","rawSize","collapsed","size","clamp","Box","Flex","SystemStyleObject","KeyboardEvent","ReactKeyboardEvent","PointerEvent","ReactPointerEvent","RefObject","useEffect","useRef","useState","getResizableSplitAxis","ResizableSplitSeparator","HOVER_DELAY_MS","GRIP_DOTS","resolveHandleLayout","vertical","hitArea","top","bottom","insetInlineStart","insetInlineEnd","gripDirection","const","bar","w","transform","insetInline","h","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","separatorRef","HTMLDivElement","onCollapse","onResizeKeyDown","event","onResizeStart","ResizeHandle","line","separatorOrientation","hovered","setHovered","hoverTimerRef","tabIndex","visibility","t4","window","clearTimeout","current","t5","setTimeout","handlePointerEnter","t6","handlePointerLeave","t7","t8","t9","Math","round","t10","t11","t12","undefined","t13","content","position","t14","opacity","t15","t16","t17","t18","cursor","dot","_c","_temp","Box","SystemStyleObject","KeyboardEvent","ReactKeyboardEvent","ReactNode","PointerEvent","ReactPointerEvent","RefObject","getResizableSplitAxis","ResizableSplitSeparator","ResizeHandle","SplitPanelMotionContext","ResizableSplitPanelsProps","styles","Record","axis","ReturnType","bounds","minSize","maxSize","collapsed","collapsible","contentPanel","contentPanelId","contentPanelRef","HTMLDivElement","resizablePanel","resizablePanelId","resizablePanelRef","rootRef","dragging","resizeLabel","resolvedPanelSize","separator","separatorRef","onCollapse","onResizeKeyDown","event","onResizeStart","ResizableSplitPanels","props","$","_c","t0","undefined","t1","t2","panelContent","t3","resizablePanelNode","t4","contentPanelNode","t5","resizeTrigger","panelFirst","t6","_c","_Fragment","RefObject","useEffect","useState","PanelDimension","useResizableSplitRootSize","rootRef","separatorRef","dimension","$","_c","t0","Symbol","for","rootSize","separatorSize","size","setSize","t1","t2","element","current","updateRootSize","getBoundingClientRect","ResizeObserver","observer","observe","disconnect","_c","PointerEvent","ReactPointerEvent","RefObject","flushSync","FALLBACK_ROOT_SIZE","getResizableSplitAxis","ResizableSplitSide","resolveDraggedPanelSize","resolveResizableBounds","ResizeStartHandlerInput","axis","ReturnType","resizableSide","collapsed","collapsible","resolvedPanelSize","minSizePx","maxSizePx","contentMinSizePx","rootRef","HTMLDivElement","resizablePanelRef","contentPanelRef","separatorRef","cleanupDragRef","lastSizeRef","applyPanelSize","size","commitPanelSize","setCollapsed","setDragging","dragging","clamp","value","min","max","Math","getElementSize","element","dimension","getBoundingClientRect","createResizeStartHandler","input","event","button","preventDefault","current","resizeHandle","currentTarget","bounds","rootSize","fallbackRootSize","minSize","maxSize","contentMinSize","separatorSize","startPointer","pointerCoordinate","startSize","previousCursor","document","body","style","cursor","previousUserSelect","userSelect","nextSize","nextCollapsed","animationFrame","moved","setDraggingPanelState","pointerEvents","schedulePanelSize","window","requestAnimationFrame","handlePointerMove","moveEvent","result","side","pointerDelta","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","undefined","setPointerCapture","setProperty","addEventListener","once","clamp","getElementSize","KeyboardEvent","ResizeKeyboardOptions","dimension","deltaDirection","collapsed","collapsible","minSize","maxSize","getSize","setCollapsed","commitSize","size","createResizeKeyDownHandler","options","event","HTMLDivElement","negativeKey","positiveKey","key","preventDefault","ConditionalValue","Flex","FlexProps","useSlotRecipe","ReactNode","useEffect","useId","useRef","useState","FALLBACK_ROOT_SIZE","getResizableSplitAxis","ResizableSplitSide","resolveResizableBounds","ResizableSplitSeparator","ResizableSplitPanels","PanelDimension","useResizableSplitRootSize","createResizeStartHandler","createResizeKeyDownHandler","ResizableSplitLayoutProps","Omit","resizablePanel","contentPanel","resizableSide","defaultSizePx","minSizePx","maxSizePx","contentMinSizePx","collapsed","collapsible","resizeLabel","separator","layout","onSizeChange","size","onCollapsedChange","clamp","value","min","max","Math","getElementSize","element","HTMLDivElement","dimension","getBoundingClientRect","ResizableSplitLayout","props","controlledCollapsed","rest","axis","orientation","styles","key","id","rootRef","resizablePanelRef","contentPanelRef","separatorRef","cleanupDragRef","undefined","rootSize","separatorSize","lastSizeRef","panelSize","setPanelSize","internalCollapsed","setInternalCollapsed","dragging","setDragging","bounds","fallbackRootSize","minSize","maxSize","contentMinSize","resolvedPanelSize","contentPanelId","resizablePanelId","sizeStyle","style","current","applyPanelSize","setProperty","commitPanelSize","nextBounds","nextSize","setCollapsed","nextCollapsed","handleResizeStart","handleCollapse","handleResizeKeyDown","deltaDirection","getSize","commitSize","root","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","flat","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","position","TreeListMoveSurface","props","$","_c","t0","event","preventDefault","dataTransfer","dropEffect","handleDragOver","t1","event_0","undefined","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","useState","ListRow","DropIndicator","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","position","TreeListNodeRow","props","$","_c","LinkComponent","dropPosition","setDropPosition","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","event_0","bounds","currentTarget","getBoundingClientRect","clientY","top","height","positionAt","t7","canDrop","event_1","stopPropagation","preventDefault","dropEffect","handleDragOver","t8","event_2","handleDrop","t9","actions","map","action","onAction","context","undefined","listRowItem","nodeRowVariant","rowItem","_inlineInput","t10","t11","t12","t13","t14","depth","variant","isSelected","isExpanded","showExpandToggle","onToggleExpand","rowProps","t15","row","t16","t17","canDrag","t18","t19","t20","t21","Symbol","for","event_3","relatedTarget","Node","contains","t22","transform","bottom","t23","_c","Box","useRecipe","ReactNode","TreeListReveal","props","$","_c","open","children","t0","Symbol","for","key","recipe","t1","t2","t3","t4","t5","_c","MeasuringStrategy","Modifier","TreeListSection","SECTION_PREFIX","toSectionDragId","sectionId","isSectionDragId","id","startsWith","fromSectionDragId","slice","length","GAP_PREFIX","toGapDragId","isGapDragId","fromGapDragId","targetSectionId","overId","undefined","TreeListMoveEndpoint","kind","moveScope","TreeListMove","source","destination","TreeListMovePolicy","move","findNodeLocation","sections","nodeId","section","index","nodes","findIndex","node","permitsMove","canMove","canDropOnTreeListTarget","activeId","overSectionId","find","canReorder","destinationSection","destinationNode","lockToVerticalAxis","transform","x","verticalTreeDrag","modifiers","autoScroll","threshold","y","measuring","droppable","strategy","Always","Box","StackProps","useDroppable","useSortable","ReactNode","DropIndicator","TreeListDropIndicator","toGapDragId","edgePosition","before","top","transform","after","bottom","middle","const","DropLine","props","$","_c","edge","t0","t1","SortableHostProps","id","disabled","indicator","handle","liftedBg","highlighted","children","listeners","ReturnType","SortableHost","sortable","lineId","undefined","lifted","isDragging","setNodeRef","event","onPointerDown","SectionGapProps","sectionId","nextSectionId","gap","SectionGap","droppable","data","_c","Box","Stack","ComponentProps","TreeListNode","TreeListDropIndicator","getNodeChildren","TreeListNodeRow","TreeListReveal","DropLine","SortableHost","TreeListNodesProps","Omit","nodes","level","focusRowId","onRowFocus","id","sortable","indicator","TreeListNodeBranch","props","$","_c","node","rowProps","t0","t1","t2","_nodes","t3","t4","t5","t6","t7","t8","undefined","children","tabIndex","row","length","expandedNodeIds","includes","nodeGap","descendants","canReorder","edge","listeners","event","onPointerDown","t9","t10","lineId","t11","TreeListNodes","map","_c","Box","HStack","IconButton","Text","useRecipe","ChevronRight","FocusEventHandler","MouseEvent","ReactMouseEvent","createResourceContextActions","SearchableActionMenu","ResourceActionMenu","ResourceContextMenu","TreeListAction","TreeListSection","TreeListInlineInputRow","TreeListSectionActionsProps","sectionId","actions","TreeListSectionActions","props","$","_c","t0","Symbol","for","key","accessory","length","t1","visibility","t2","t3","action","menuItems","id","label","icon","event_0","event","stopPropagation","onAction","map","_temp","TreeListSectionHeaderProps","section","collapsible","expanded","focusId","tabIndex","onFocus","HTMLElement","onToggle","onContextMenu","TreeListSectionHeader","chevron","inlineInput","contextMenuItems","contextActions","t4","undefined","t5","t6","t7","bg","t8","t9","t10","t11","preventDefault","t12","t13","t14","t15","t16","t17","t18","_c","_temp","TreeListSection","canDropOnTreeListTarget","findNodeLocation","fromGapDragId","fromSectionDragId","isGapDragId","isSectionDragId","TreeListMovePolicy","toGapDragId","toSectionDragId","TreeListDropEdge","TreeListDropTarget","kind","id","edge","nextSectionId","TreeListDropResult","nextSectionIds","orders","Record","looseSection","afterSectionId","resolveDropTarget","activeId","overId","pointerAbove","dropSectionOn","sections","target","canMove","activeSectionId","ids","map","section","next","filter","splice","indexOf","every","index","rowDestination","location","sectionId","find","candidate","label","nodes","length","joinsNext","canReorder","undefined","computeDropResult","looseSectionId","source","node","destination","sourceIds","destinationIds","CollisionDetection","closestCenter","DragEndEvent","Over","pointerWithin","TreeListSection","computeDropResult","resolveDropTarget","canDropOnTreeListTarget","fromSectionDragId","isGapDragId","isSectionDragId","TreeListMovePolicy","targetRank","id","treeListCollisionDetection","sections","canMove","args","activeId","String","active","valid","collision","pointerCoordinates","x","collisionRect","left","width","y","within","filter","length","sort","right","dragPointerY","activatorEvent","Event","deltaY","MouseEvent","clientY","dropTargetFor","over","pointerY","rect","top","height","data","current","nextSectionId","createLooseSectionId","crypto","randomUUID","TreeListDropHandlerInput","onReorderSections","nextSectionIds","sourceSectionId","destinationSectionId","onReorderNodes","sectionId","nextNodeIds","createTreeListDropHandler","input","event","target","delta","result","kind","loose","looseSection","afterSectionId","Object","entries","orders","DndContext","PointerSensor","useSensor","useSensors","createContext","ReactNode","TreeListSection","createTreeListDropHandler","treeListCollisionDetection","TreeListMovePolicy","verticalTreeDrag","SharedTreeListDragContext","TreeListDragProviderProps","sections","canMove","onReorderSections","nextSectionIds","sourceSectionId","destinationSectionId","onReorderNodes","sectionId","nextNodeIds","children","TreeListDragProvider","props","$","_c","t0","Symbol","for","activationConstraint","distance","sensors","t1","collisionDetection","t2","handleDragEnd","t3","t4","_c","TreeListNode","TreeListSection","TreeListDropTarget","findNodeLocation","toGapDragId","toSectionDragId","TreeListDropIndicator","lineId","edge","groupId","groupOf","section","label","id","undefined","treeListDropIndicator","sections","target","expandedNodeIds","lastVisible","node","children","last","includes","at","kind","location","find","candidate","nodes","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","DndContext","PointerSensor","useDndContext","useDndMonitor","useSensor","useSensors","SortableContext","verticalListSortingStrategy","Fragment","MouseEvent","ReactMouseEvent","useContext","useState","TreeListLinkComponent","TreeListNavigateEvent","TreeListSection","createTreeListDropHandler","dragPointerY","dropTargetFor","treeListCollisionDetection","SharedTreeListDragContext","TreeListDropIndicator","treeListDropIndicator","buildVirtualRows","VirtualRow","TreeListNodes","TreeListMovePolicy","toSectionDragId","verticalTreeDrag","TreeListReveal","TreeListSectionHeader","SectionGap","SortableHost","useTreeListKeyboardNavigation","TreeListRowVariant","SortableSectionGroupProps","section","sectionRows","expandedNodeIds","activeNodeId","rowVariant","nodeGap","linkComponent","onNavigate","event","onToggleSection","sectionId","onToggleNode","nodeId","onMoveNode","sourceNodeId","targetNodeId","position","onSectionContextMenu","HTMLElement","indicator","dragging","focusRowId","onRowFocus","id","SortableSectionGroup","props","$","_c","t0","find","_temp","headerRow","t1","filter","_temp2","nodeRows","t2","nodes","map","_temp3","topLevelNodeIds","t3","t4","canReorder","t5","groupId","t6","emptyState","listeners","kind","onPointerDown","collapsible","expanded","key","length","t7","SortableSectionsProps","Omit","TreeListSortableProps","expandedSectionIds","SortableSections","sections","sectionGap","rest","active","over","pointerY","setPointerY","onDragMove","activatorEvent","delta","y","onDragEnd","onDragCancel","target","String","rows","keyboard","rootRef","handleKeyDown","index","row","Boolean","onReorderSections","nextSectionIds","onReorderNodes","nextNodeIds","canMove","TreeListSortable","undefined","Symbol","for","activationConstraint","distance","sensors","usesSharedDragContext","t8","collisionDetection","t9","t10","handleDragEnd","t11","content","t12","row_0","node","_c","_Fragment","Fragment","Box","Stack","StackProps","MouseEvent","ReactMouseEvent","RefObject","ResourceContextAction","useVirtualizer","TreeListLinkComponent","TreeListNavigateEvent","TreeListSection","TreeListBackground","buildVirtualRows","VirtualRow","TreeListMoveSurface","TreeListNodeRow","TreeListNodes","TreeListMovePolicy","TreeListReveal","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","position","backgroundContextActions","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","TreeListRowProps","row","focusRowId","onRowFocus","rowId","TreeListRow","props","$","_c","kind","t0","key","t1","t2","t3","collapsible","expanded","section","emptyState","node","id","level","VirtualTreeListProps","rows","VirtualTreeList","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","label","undefined","includes","nodes","TreeList","content","paddedContent","_c","createResourceContextActions","ResourceActionMenu","ListRow","ResourceContextMenu","useVirtualizer","SplitPanelMotionContext","DropIndicator","Fragment$1","FALLBACK_ROOT_SIZE","MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX","MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX","VERTICAL_COLLAPSE_THRESHOLD_PX","clamp$2","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","ResizeHandleGrip","$","c","props","t0","layout","t1","t2","_temp$2","t3","Flex","ResizeHandleBar","Box","ResizeHandle","line","separator","hovered","setHovered","useState","hoverTimerRef","useRef","active","dragging","visibility","t4","useEffect","t5","handlePointerEnter","t6","handlePointerLeave","t7","t8","resizablePanelId","contentPanelId","t9","bounds","collapsible","t10","t11","resolvedPanelSize","t12","t13","t14","t15","onCollapse","t16","t17","t18","css","onResizeKeyDown","onResizeStart","resizeLabel","separatorRef","dot","ResizableSplitPanels","resizablePanel","rootRef","styles","resizablePanelRef","resizablePanelNode","contentPanel","contentPanelRef","contentPanelNode","resizeTrigger","Fragment","useResizableSplitRootSize","size","setSize","dimension","element","updateRootSize","observer","clamp$1","getElementSize$1","createResizeStartHandler","event","cleanupDragRef","resizeHandle","minSizePx","maxSizePx","contentMinSizePx","startPointer","startSize","lastSizeRef","previousCursor","previousUserSelect","nextSize","nextCollapsed","animationFrame","moved","setDraggingPanelState","schedulePanelSize","applyPanelSize","handlePointerMove","moveEvent","result","resizableSide","cleanup","flushSync","setDragging","setCollapsed","commitPanelSize","createResizeKeyDownHandler","options","negativeKey","positiveKey","getSize","commitSize","deltaDirection","clamp","getElementSize","ResizableSplitLayout","controlledCollapsed","rest","orientation","useSlotRecipe","id","useId","defaultSizePx","panelSize","setPanelSize","internalCollapsed","setInternalCollapsed","sizeStyle","nextBounds","size_0","onSizeChange","onCollapsedChange","handleResizeStart","handleCollapse","handleResizeKeyDown","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","event_0","handleDrop","paddingLeft","TreeListInlineInputRow","setValue","error","setError","inputRef","submittingRef","commit","cause","icon","Input","event_1","TreeListNodeRow","LinkComponent","dropPosition","setDropPosition","hasChildren","isActive","isDisabled","isNavigable","canLink","onNavigate","onToggleNode","handleActivate","handleDragStart","positionAt","event_2","action","context","listRowItem","nodeRowVariant","_inlineInput","rowVariant","onFocus","tabIndex","rowProps","t19","t20","t21","event_3","t22","t23","nodeGap","Stack","TreeListReveal","recipe","useRecipe","open","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","GAP_PREFIX","toGapDragId","isGapDragId","fromGapDragId","targetSectionId","overId","findNodeLocation","permitsMove","canMove","move","canDropOnTreeListTarget","overSectionId","source","destination","destinationSection","destinationNode","verticalTreeDrag","transform","MeasuringStrategy","edgePosition","DropLine","edge","SortableHost","sortable","useSortable","indicator","lifted","liftedBg","highlighted","handle","SectionGap","droppable","useDroppable","nextSectionId","gap","TreeListNodeBranch","focusRowId","onRowFocus","_nodes","TreeListNodes","descendants","listeners","TreeListSectionActions","accessory","SearchableActionMenu","IconButton","HStack","_temp$1","TreeListSectionHeader","chevron","contextActions","focusId","onToggle","onContextMenu","Text","ChevronRight","resolveDropTarget","pointerAbove","dropSectionOn","activeSectionId","target","ids","next","rowDestination","location","candidate","computeDropResult","sourceIds","looseSectionId","nextSectionIds","destinationIds","targetRank","treeListCollisionDetection","args","valid","collision","pointerCoordinates","within","pointerWithin","closestCenter","left","right","dragPointerY","activatorEvent","deltaY","dropTargetFor","over","pointerY","createLooseSectionId","createTreeListDropHandler","loose","nextNodeIds","SharedTreeListDragContext","createContext","TreeListDragProvider","sensors","useSensors","useSensor","PointerSensor","collisionDetection","onReorderNodes","onReorderSections","handleDragEnd","DndContext","groupOf","treeListDropIndicator","lastVisible","last","findRowElement","root","findFocusedRowId","isTextEditingTarget","getRowIndex","useTreeListKeyboardNavigation","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusableRowIds","frame","scrollToRow","rowId","element_0","rowIndex","focusRow","onToggleSection","navigation","handleKeyDown","rowId_0","SortableSectionGroup","sectionRows","_temp","headerRow","_temp2","nodeRows","_temp3","topLevelNodeIds","linkComponent","onSectionContextMenu","SortableContext","verticalListSortingStrategy","SortableSections","useDndContext","setPointerY","keyboard","section_0","sectionGap","TreeListSortable","usesSharedDragContext","useContext","content","row_0","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","TreeListRow","VirtualTreeList","virtualizer","scrollRef","index_0","virtualItem","StackTreeList","virtualize","row_1","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.drag.ts","../src/components/layout/resizable-split-layout.keyboard.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-reveal.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable-host.tsx","../src/components/tree-list/tree-list-nodes.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-drop.ts","../src/components/tree-list/tree-list-drag-handling.ts","../src/components/tree-list/tree-list-drag-provider.tsx","../src/components/tree-list/tree-list-drop-indicator.ts","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/tree-list.tsx"],"sourcesContent":["export type ResizableSplitSide = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport const FALLBACK_ROOT_SIZE = { width: 1200, height: 720 };\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 separatorSize: number;\n}) => {\n const rootSize = input.rootSize > 0 ? input.rootSize : input.fallbackRootSize;\n const maxFromContent = Math.max(0, rootSize - input.separatorSize - 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 type RefObject,\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) => {\n if (vertical) {\n return {\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 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 separatorRef: RefObject<HTMLDivElement | null>;\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 separatorRef,\n onCollapse,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const line = separator === \"line\";\n const layout = resolveHandleLayout(axis.separatorOrientation === \"vertical\");\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 ref={separatorRef}\n data-collapsed={collapsed}\n inert={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 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\";\nimport { SplitPanelMotionContext } from \"./split-panel-motion-context\";\n\ninterface ResizableSplitPanelsProps {\n styles: Record<\"resizablePanel\" | \"panelContent\" | \"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 rootRef: RefObject<HTMLDivElement | null>;\n dragging: boolean;\n resizeLabel: string;\n resolvedPanelSize: number;\n separator: ResizableSplitSeparator;\n separatorRef: RefObject<HTMLDivElement | null>;\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 rootRef,\n dragging,\n resizeLabel,\n resolvedPanelSize,\n separator,\n separatorRef,\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 inert={collapsed}\n >\n <Box css={styles.panelContent} data-split-panel-content=\"\">\n <SplitPanelMotionContext value={rootRef}>{resizablePanel}</SplitPanelMotionContext>\n </Box>\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 separatorRef={separatorRef}\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 = (\n rootRef: RefObject<HTMLDivElement | null>,\n separatorRef: RefObject<HTMLDivElement | null>,\n dimension: PanelDimension,\n) => {\n const [size, setSize] = useState({ rootSize: 0, separatorSize: 0 });\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootSize = () => {\n setSize({\n rootSize: element.getBoundingClientRect()[dimension],\n separatorSize: separatorRef.current?.getBoundingClientRect()[dimension] ?? 0,\n });\n };\n\n updateRootSize();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootSize);\n observer.observe(element);\n if (separatorRef.current) observer.observe(separatorRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [rootRef, separatorRef, dimension]);\n\n return size;\n};\n","import type { PointerEvent as ReactPointerEvent, RefObject } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport {\n FALLBACK_ROOT_SIZE,\n type getResizableSplitAxis,\n type ResizableSplitSide,\n resolveDraggedPanelSize,\n resolveResizableBounds,\n} from \"./resizable-split-layout.geometry\";\n\ninterface ResizeStartHandlerInput {\n axis: ReturnType<typeof getResizableSplitAxis>;\n resizableSide: ResizableSplitSide;\n collapsed: boolean;\n collapsible: boolean;\n resolvedPanelSize: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n rootRef: RefObject<HTMLDivElement | null>;\n resizablePanelRef: RefObject<HTMLDivElement | null>;\n contentPanelRef: RefObject<HTMLDivElement | null>;\n separatorRef: RefObject<HTMLDivElement | null>;\n cleanupDragRef: RefObject<() => void>;\n lastSizeRef: RefObject<number>;\n applyPanelSize(size: number): void;\n commitPanelSize(size: number): void;\n setCollapsed(collapsed: boolean): void;\n setDragging(dragging: boolean): void;\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\nconst getElementSize = (element: HTMLDivElement | null, dimension: \"width\" | \"height\") =>\n element?.getBoundingClientRect()[dimension] ?? 0;\n\nexport const createResizeStartHandler = (input: ResizeStartHandlerInput) => {\n const {\n axis,\n resizableSide,\n collapsed,\n collapsible,\n resolvedPanelSize,\n minSizePx,\n maxSizePx,\n contentMinSizePx,\n rootRef,\n resizablePanelRef,\n contentPanelRef,\n separatorRef,\n cleanupDragRef,\n lastSizeRef,\n applyPanelSize,\n commitPanelSize,\n setCollapsed,\n setDragging,\n } = input;\n return (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 separatorSize: getElementSize(separatorRef.current, axis.dimension),\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 let moved = false;\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 moved ||= moveEvent[axis.pointerCoordinate] !== startPointer;\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 if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (!moved) {\n // Resume opening without committing an intermediate size from a divider press.\n flushSync(() => setDragging(false));\n rootRef.current?.getBoundingClientRect();\n applyPanelSize(resolvedPanelSize);\n return;\n }\n if (nextCollapsed) {\n // Settle the final drag geometry before restoring programmatic transitions.\n applyPanelSize(0);\n flushSync(() => setCollapsed(true));\n resizablePanelRef.current?.getBoundingClientRect();\n } else {\n setCollapsed(false);\n commitPanelSize(nextSize);\n }\n setDragging(false);\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 // Disabling the transition must keep its current size and the saved target.\n rootRef.current?.style.setProperty(\"--split-size\", `${startSize}px`);\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","import type { KeyboardEvent } from \"react\";\n\ninterface ResizeKeyboardOptions {\n dimension: \"width\" | \"height\";\n deltaDirection: number;\n collapsed: boolean;\n collapsible: boolean;\n minSize: number;\n maxSize: number;\n getSize: () => number;\n setCollapsed: (collapsed: boolean) => void;\n commitSize: (size: number) => void;\n}\n\nexport const createResizeKeyDownHandler =\n (options: ResizeKeyboardOptions) => (event: KeyboardEvent<HTMLDivElement>) => {\n const { dimension, deltaDirection, collapsed, collapsible, minSize, maxSize, getSize, setCollapsed, commitSize } =\n options;\n const negativeKey = dimension === \"width\" ? \"ArrowLeft\" : \"ArrowUp\";\n const positiveKey = dimension === \"width\" ? \"ArrowRight\" : \"ArrowDown\";\n const size = getSize();\n if (collapsed && (event.key === negativeKey || event.key === positiveKey || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitSize(size);\n } else if (event.key === negativeKey) {\n event.preventDefault();\n commitSize(size - 24 * deltaDirection);\n } else if (event.key === positiveKey) {\n event.preventDefault();\n commitSize(size + 24 * deltaDirection);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitSize(minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitSize(maxSize);\n }\n };\n","import { type ConditionalValue, Flex, type FlexProps, useSlotRecipe } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useId, useRef, useState } from \"react\";\nimport {\n FALLBACK_ROOT_SIZE,\n getResizableSplitAxis,\n type ResizableSplitSide,\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\";\nimport { createResizeStartHandler } from \"./resizable-split-layout.drag\";\nimport { createResizeKeyDownHandler } from \"./resizable-split-layout.keyboard\";\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 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 orientation = axis.dimension === \"width\" ? \"horizontal\" : \"vertical\";\n const styles = useSlotRecipe({ key: \"resizableSplitLayout\" })({ orientation, layout, separator });\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const separatorRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const { rootSize, separatorSize } = useResizableSplitRootSize(rootRef, separatorRef, 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 separatorSize,\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 = {\n ...rest.style,\n \"--split-size\": `${resolvedPanelSize}px`,\n \"--split-stored-size\": `${clamp(panelSize, bounds.minSize, bounds.maxSize)}px`,\n };\n\n useEffect(() => {\n lastSizeRef.current = defaultSizePx;\n setPanelSize(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelSize = (size: number) => {\n // Keep the retained size owned by React so dragging closed cannot overwrite it.\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 separatorSize: getElementSize(separatorRef.current, axis.dimension),\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 = createResizeStartHandler({\n axis,\n resizableSide,\n collapsed,\n collapsible,\n resolvedPanelSize,\n minSizePx,\n maxSizePx,\n contentMinSizePx,\n rootRef,\n resizablePanelRef,\n contentPanelRef,\n separatorRef,\n cleanupDragRef,\n lastSizeRef,\n applyPanelSize,\n commitPanelSize,\n setCollapsed,\n setDragging,\n });\n\n const handleCollapse = () => {\n if (collapsible) setCollapsed(true);\n };\n\n const handleResizeKeyDown = createResizeKeyDownHandler({\n dimension: axis.dimension,\n deltaDirection: axis.deltaDirection,\n collapsed,\n collapsible,\n minSize: bounds.minSize,\n maxSize: bounds.maxSize,\n getSize: () => lastSizeRef.current,\n setCollapsed,\n commitSize: commitPanelSize,\n });\n\n return (\n <Flex\n ref={rootRef}\n css={styles.root}\n {...rest}\n style={sizeStyle}\n data-collapsed={collapsed}\n data-dragging={dragging}\n >\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 rootRef={rootRef}\n dragging={dragging}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n separator={separator}\n separatorRef={separatorRef}\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 = activeNodeId ? [activeNodeId].flat() : [];\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, position?: \"before\" | \"after\" | \"inside\") => 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, undefined, \"inside\");\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, type DragEvent as ReactDragEvent, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { DropIndicator } from \"../primitives/drop-indicator\";\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, position?: \"before\" | \"after\" | \"inside\") => 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 const [dropPosition, setDropPosition] = useState<\"before\" | \"after\" | \"inside\" | null>(null);\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 positionAt = (event: ReactDragEvent<HTMLElement>) => {\n if (hasChildren) return \"inside\";\n const bounds = event.currentTarget.getBoundingClientRect();\n return event.clientY < bounds.top + bounds.height / 2 ? \"before\" : \"after\";\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 setDropPosition(positionAt(event));\n };\n\n const handleDrop = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.stopPropagation();\n if (!node.canDrop) return;\n event.preventDefault();\n setDropPosition(null);\n const sourceNodeId = readDraggedTreeNodeId(event.dataTransfer);\n if (sourceNodeId && sourceNodeId !== node.id) onMoveNode(sourceNodeId, node.id, positionAt(event));\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 position=\"relative\"\n bg={dropPosition === \"inside\" ? \"bg.accent-subtle\" : undefined}\n draggable={Boolean(onMoveNode && node.canDrag)}\n onDragStart={node.canDrag ? handleDragStart : undefined}\n onDragOver={onMoveNode ? handleDragOver : undefined}\n onDrop={onMoveNode ? handleDrop : undefined}\n onDragLeave={(event) => {\n if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget))\n setDropPosition(null);\n }}\n >\n {row}\n {dropPosition === \"before\" || dropPosition === \"after\" ? (\n <DropIndicator\n data-tree-list-drop-indicator={dropPosition}\n {...(dropPosition === \"before\"\n ? { top: \"0\", transform: \"translateY(-50%)\" }\n : { bottom: \"0\", transform: \"translateY(50%)\" })}\n />\n ) : null}\n </Stack>\n );\n};\n","import { Box, useRecipe } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport const TreeListReveal = (props: { open: boolean; children: ReactNode }) => {\n const { open, children } = props;\n const recipe = useRecipe({ key: \"treeReveal\" });\n return (\n <Box css={recipe()} data-tree-reveal=\"\" data-open={open} inert={!open} aria-hidden={!open}>\n <Box>{children}</Box>\n </Box>\n );\n};\n","import { MeasuringStrategy, type Modifier } from \"@dnd-kit/core\";\nimport 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\n// The space after a section is its own drop zone: dropping there places an item behind the section.\nconst GAP_PREFIX = \"after-section:\";\n\nexport const toGapDragId = (sectionId: string) => `${GAP_PREFIX}${sectionId}`;\nexport const isGapDragId = (id: string) => id.startsWith(GAP_PREFIX);\nexport const fromGapDragId = (id: string) => id.slice(GAP_PREFIX.length);\nconst targetSectionId = (overId: string) => {\n if (isSectionDragId(overId)) return fromSectionDragId(overId);\n if (isGapDragId(overId)) return fromGapDragId(overId);\n return undefined;\n};\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\nexport const 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 const overSectionId = targetSectionId(overId);\n if (isSectionDragId(activeId)) {\n if (overSectionId === undefined) return false;\n const source = sections.find((section) => section.id === fromSectionDragId(activeId));\n const destination = sections.find((section) => section.id === overSectionId);\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 =\n overSectionId === undefined ? undefined : sections.find((section) => section.id === overSectionId);\n const destinationNode = overSectionId === undefined ? findNodeLocation(sections, overId) : undefined;\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 lockToVerticalAxis: Modifier = ({ transform }) => ({ ...transform, x: 0 });\n\n// Tree lists are vertical: sideways pointer movement neither picks drop targets nor scrolls containers.\n// Drop zones for empty sections appear once a drag starts, so they are measured while dragging.\nexport const verticalTreeDrag = {\n modifiers: [lockToVerticalAxis],\n autoScroll: { threshold: { x: 0, y: 0.2 } },\n measuring: { droppable: { strategy: MeasuringStrategy.Always } },\n};\n","import { Box, type StackProps } from \"@chakra-ui/react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport { DropIndicator } from \"../primitives/drop-indicator\";\nimport type { TreeListDropIndicator } from \"./tree-list-drop-indicator\";\nimport { toGapDragId } from \"./tree-list-reorder\";\n\nconst edgePosition = {\n before: { top: \"0\", transform: \"translateY(-50%)\" },\n after: { bottom: \"0\", transform: \"translateY(50%)\" },\n middle: { top: \"50%\", transform: \"translateY(-50%)\" },\n} as const;\n\n// The accent line marks the drop slot on the target's edge without shifting the rows.\nexport const DropLine = (props: { edge: TreeListDropIndicator[\"edge\"] }) => {\n const { edge } = props;\n return <DropIndicator data-tree-list-drop-indicator={edge} {...edgePosition[edge]} />;\n};\n\ninterface SortableHostProps {\n id: string;\n disabled?: boolean;\n indicator: TreeListDropIndicator | null;\n // Rows are their own drag handle; a section is dragged by its header only.\n handle: \"self\" | \"child\";\n liftedBg?: string;\n // A group the dragged row drops into.\n highlighted?: boolean;\n children: (listeners: ReturnType<typeof useSortable>[\"listeners\"]) => ReactNode;\n}\n\n// No grip glyph: the row or section header is the handle. Clicks pass through because the pointer sensor\n// activates only after the cursor moves 4px (configured by the tree list). Items stay in place while dragging;\n// the lifted item fades and the drop line shows where it lands.\nexport const SortableHost = (props: SortableHostProps) => {\n const { id, disabled, indicator, handle, liftedBg, highlighted, children } = props;\n const sortable = useSortable({ id, disabled });\n const edge = indicator?.lineId === id ? indicator.edge : undefined;\n const lifted = sortable.isDragging ? liftedBg : undefined;\n return (\n <Box\n ref={sortable.setNodeRef}\n position=\"relative\"\n w=\"full\"\n minW=\"0\"\n borderRadius=\"xs\"\n opacity={sortable.isDragging ? 0.5 : 1}\n bg={highlighted ? \"bg.accent-subtle\" : lifted}\n data-tree-list-drop-group={highlighted ? \"\" : undefined}\n onPointerDownCapture={handle === \"self\" ? (event) => sortable.listeners?.onPointerDown?.(event) : undefined}\n >\n {children(sortable.listeners)}\n {edge ? <DropLine edge={edge} /> : null}\n </Box>\n );\n};\n\ninterface SectionGapProps {\n sectionId: string;\n nextSectionId?: string;\n gap: StackProps[\"gap\"];\n indicator: TreeListDropIndicator | null;\n}\n\n// The last drop zone uses the tree's existing padding instead of adding a section gap.\nexport const SectionGap = (props: SectionGapProps) => {\n const { sectionId, nextSectionId, gap, indicator } = props;\n const id = toGapDragId(sectionId);\n const droppable = useDroppable({ id, data: { nextSectionId } });\n return (\n <Box\n ref={droppable.setNodeRef}\n position={nextSectionId ? \"relative\" : \"absolute\"}\n top={nextSectionId ? undefined : \"100%\"}\n w=\"full\"\n pt={nextSectionId ? gap : \"xs\"}\n flexShrink={0}\n >\n {indicator?.lineId === id ? <DropLine edge=\"middle\" /> : null}\n </Box>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport type { ComponentProps } from \"react\";\nimport type { TreeListNode } from \"./tree-list.types\";\nimport type { TreeListDropIndicator } from \"./tree-list-drop-indicator\";\nimport { getNodeChildren } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListReveal } from \"./tree-list-reveal\";\nimport { DropLine, SortableHost } from \"./tree-list-sortable-host\";\n\ninterface TreeListNodesProps\n extends Omit<ComponentProps<typeof TreeListNodeRow>, \"node\" | \"level\" | \"onFocus\" | \"tabIndex\"> {\n nodes: TreeListNode[];\n level?: number;\n focusRowId?: string;\n onRowFocus?: (id: string) => void;\n sortable?: boolean;\n indicator?: TreeListDropIndicator | null;\n}\n\nconst TreeListNodeBranch = (props: TreeListNodesProps & { node: TreeListNode }) => {\n const { node, nodes: _nodes, level = 0, focusRowId, onRowFocus, sortable, indicator = null, ...rowProps } = props;\n const children = getNodeChildren(node);\n let tabIndex: number | undefined;\n if (focusRowId !== undefined) tabIndex = node.id === focusRowId ? 0 : -1;\n const row = (\n <TreeListNodeRow\n {...rowProps}\n node={node}\n level={level}\n tabIndex={tabIndex}\n onFocus={() => onRowFocus?.(node.id)}\n />\n );\n const descendants = children.length ? (\n <TreeListReveal open={rowProps.expandedNodeIds.includes(node.id)}>\n <Box pt={rowProps.nodeGap}>\n <TreeListNodes {...props} nodes={children} level={level + 1} />\n </Box>\n </TreeListReveal>\n ) : null;\n\n if (sortable && level === 0) {\n return (\n <Box position=\"relative\" minW=\"0\">\n <SortableHost\n id={node.id}\n disabled={node.canReorder === false}\n indicator={indicator?.edge === \"after\" ? null : indicator}\n handle=\"child\"\n liftedBg=\"bg.hover\"\n >\n {(listeners) => <Box onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}>{row}</Box>}\n </SortableHost>\n {descendants}\n {indicator?.lineId === node.id && indicator.edge === \"after\" ? <DropLine edge=\"after\" /> : null}\n </Box>\n );\n }\n return (\n <Box position=\"relative\" minW=\"0\">\n {row}\n {descendants}\n {indicator?.lineId === node.id ? <DropLine edge={indicator.edge} /> : null}\n </Box>\n );\n};\n\nexport const TreeListNodes = (props: TreeListNodesProps) => {\n const { nodes, nodeGap } = props;\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodes.map((node) => (\n <TreeListNodeBranch key={node.id} {...props} node={node} />\n ))}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Text, useRecipe } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { createResourceContextActions } from \"../list-row/list-row-chrome\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport { ResourceActionMenu, ResourceContextMenu } from \"../overlays/resource-context-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\nimport { TreeListInlineInputRow } from \"./tree-list-inline-input\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n const accessory = useRecipe({ key: \"listRowAccessory\" });\n if (actions.length === 0) return null;\n\n return (\n <HStack gap=\"0\" css={accessory({ visibility: \"hover\" })} onClick={(event) => event.stopPropagation()}>\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 <ResourceActionMenu key={action.id} actions={createResourceContextActions(action.menuItems)}>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </ResourceActionMenu>\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 const chevron = useRecipe({ key: \"treeChevron\" });\n\n if (section.inlineInput) {\n return <TreeListInlineInputRow input={section.inlineInput} level={0} />;\n }\n\n const contextActions = createResourceContextActions(section.contextMenuItems ?? []);\n\n return (\n <ResourceContextMenu actions={contextActions}>\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 <Box asChild css={chevron()} data-open={expanded}>\n <ChevronRight size={14} />\n </Box>\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n </ResourceContextMenu>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\nimport {\n canDropOnTreeListTarget,\n findNodeLocation,\n fromGapDragId,\n fromSectionDragId,\n isGapDragId,\n isSectionDragId,\n type TreeListMovePolicy,\n toGapDragId,\n toSectionDragId,\n} from \"./tree-list-reorder\";\n\nexport type TreeListDropEdge = \"before\" | \"after\";\n\n// Where a dragged item lands: next to a row, or before, after (\"behind\") or inside a section.\nexport type TreeListDropTarget =\n | { kind: \"node\"; id: string; edge: TreeListDropEdge }\n | { kind: \"section\"; id: string; edge: TreeListDropEdge | \"inside\"; nextSectionId?: string };\n\nexport type TreeListDropResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | {\n kind: \"node\";\n orders: Record<string, string[]>;\n // A row dropped behind a group with no bare run after it starts a new bare run there.\n looseSection?: { id: string; afterSectionId: string; nextSectionIds: string[] };\n };\n\n// The pointer's half of the hovered item picks the edge. A section's gap means \"behind it\"; a row dropped on a\n// section's own area (its header or empty state) joins it.\nexport const resolveDropTarget = (\n activeId: string,\n overId: string,\n pointerAbove: boolean,\n nextSectionId?: string,\n): TreeListDropTarget | null => {\n if (activeId === overId) return null;\n const edge = pointerAbove ? \"before\" : \"after\";\n if (isGapDragId(overId)) return { kind: \"section\", id: fromGapDragId(overId), edge: \"after\", nextSectionId };\n if (isSectionDragId(overId))\n return { kind: \"section\", id: fromSectionDragId(overId), edge: isSectionDragId(activeId) ? edge : \"inside\" };\n if (isSectionDragId(activeId)) return null;\n return { kind: \"node\", id: overId, edge };\n};\n\nconst dropSectionOn = (\n sections: TreeListSection[],\n activeId: string,\n target: TreeListDropTarget,\n canMove?: TreeListMovePolicy,\n): TreeListDropResult | null => {\n const activeSectionId = fromSectionDragId(activeId);\n if (target.kind !== \"section\" || target.edge === \"inside\" || target.id === activeSectionId) return null;\n if (!canDropOnTreeListTarget(sections, activeId, toSectionDragId(target.id), canMove)) return null;\n const ids = sections.map((section) => section.id);\n const next = ids.filter((id) => id !== activeSectionId);\n next.splice(next.indexOf(target.id) + (target.edge === \"after\" ? 1 : 0), 0, activeSectionId);\n return next.every((id, index) => id === ids[index]) ? null : { kind: \"section\", nextSectionIds: next };\n};\n\n// Resolves the section and index a row lands at, or undefined when it needs a new bare run behind a group.\nconst rowDestination = (\n sections: TreeListSection[],\n activeId: string,\n target: TreeListDropTarget,\n canMove?: TreeListMovePolicy,\n) => {\n if (target.kind === \"node\") {\n const location = findNodeLocation(sections, target.id);\n if (!location) return null;\n return { sectionId: location.section.id, index: location.index + (target.edge === \"after\" ? 1 : 0) };\n }\n const section = sections.find((candidate) => candidate.id === target.id);\n if (!section) return null;\n // Behind a bare run of rows is its own end.\n if (target.edge === \"inside\" || !section.label) return { sectionId: section.id, index: section.nodes.length };\n const next = sections.find((candidate) => candidate.id === target.nextSectionId);\n const joinsNext =\n next &&\n !next.label &&\n next.canReorder !== false &&\n canDropOnTreeListTarget(sections, activeId, toSectionDragId(next.id), canMove);\n return joinsNext ? { sectionId: next.id, index: 0 } : undefined;\n};\n\nexport const computeDropResult = (\n sections: TreeListSection[],\n activeId: string,\n target: TreeListDropTarget,\n canMove?: TreeListMovePolicy,\n looseSectionId?: string,\n): TreeListDropResult | null => {\n if (isSectionDragId(activeId)) return dropSectionOn(sections, activeId, target, canMove);\n const source = findNodeLocation(sections, activeId);\n if (!source || source.node.canReorder === false) return null;\n const overId = target.kind === \"node\" ? target.id : toGapDragId(target.id);\n if (!canDropOnTreeListTarget(sections, activeId, overId, canMove)) return null;\n const destination = rowDestination(sections, activeId, target, canMove);\n if (destination === null) return null;\n\n const sourceIds = source.section.nodes.map((node) => node.id).filter((id) => id !== activeId);\n if (!destination) {\n if (!looseSectionId || target.kind !== \"section\") return null;\n const nextSectionIds = sections.map((section) => section.id);\n nextSectionIds.splice(nextSectionIds.indexOf(target.id) + 1, 0, looseSectionId);\n return {\n kind: \"node\",\n orders: { [source.section.id]: sourceIds, [looseSectionId]: [activeId] },\n looseSection: { id: looseSectionId, afterSectionId: target.id, nextSectionIds },\n };\n }\n\n if (destination.sectionId === source.section.id) {\n const index = destination.index - (source.index < destination.index ? 1 : 0);\n if (index === source.index) return null;\n sourceIds.splice(index, 0, activeId);\n return { kind: \"node\", orders: { [source.section.id]: sourceIds } };\n }\n const destinationIds =\n sections.find((section) => section.id === destination.sectionId)?.nodes.map((node) => node.id) ?? [];\n destinationIds.splice(destination.index, 0, activeId);\n return { kind: \"node\", orders: { [source.section.id]: sourceIds, [destination.sectionId]: destinationIds } };\n};\n","import { type CollisionDetection, closestCenter, type DragEndEvent, type Over, pointerWithin } from \"@dnd-kit/core\";\nimport type { TreeListSection } from \"./tree-list.types\";\nimport { computeDropResult, resolveDropTarget } from \"./tree-list-drop\";\nimport {\n canDropOnTreeListTarget,\n fromSectionDragId,\n isGapDragId,\n isSectionDragId,\n type TreeListMovePolicy,\n} from \"./tree-list-reorder\";\n\n// Rows win over section gaps, and gaps over the section boxes that contain them.\nconst targetRank = (id: string) => {\n if (isSectionDragId(id)) return 2;\n if (isGapDragId(id)) return 1;\n return 0;\n};\n\nexport const treeListCollisionDetection =\n (sections: TreeListSection[], canMove?: TreeListMovePolicy): CollisionDetection =>\n (args) => {\n const activeId = String(args.active.id);\n const valid = (collision: { id: string | number }) =>\n canDropOnTreeListTarget(sections, activeId, String(collision.id), canMove);\n // The pointer's x is pinned to the dragged item's column, so only vertical movement picks a target.\n const pointerCoordinates = args.pointerCoordinates && {\n x: args.collisionRect.left + args.collisionRect.width / 2,\n y: args.pointerCoordinates.y,\n };\n const within = pointerCoordinates ? pointerWithin({ ...args, pointerCoordinates }).filter(valid) : [];\n if (within.length === 0) return closestCenter(args).filter(valid);\n return within.sort((left, right) => targetRank(String(left.id)) - targetRank(String(right.id)));\n };\n\n// The live pointer is where the drag started plus how far it moved.\nexport const dragPointerY = (activatorEvent: Event | null, deltaY: number) =>\n (activatorEvent instanceof MouseEvent ? activatorEvent.clientY : 0) + deltaY;\n\nexport const dropTargetFor = (activeId: string, over: Over | null, pointerY: number) =>\n over\n ? resolveDropTarget(\n activeId,\n String(over.id),\n pointerY < over.rect.top + over.rect.height / 2,\n over.data.current?.nextSectionId as string | undefined,\n )\n : null;\n\nconst createLooseSectionId = () => `tree-list-loose:${crypto.randomUUID()}`;\n\ninterface TreeListDropHandlerInput {\n sections: TreeListSection[];\n canMove?: TreeListMovePolicy;\n onReorderSections?: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const createTreeListDropHandler = (input: TreeListDropHandlerInput) => (event: DragEndEvent) => {\n const activeId = String(event.active.id);\n const target = dropTargetFor(activeId, event.over, dragPointerY(event.activatorEvent, event.delta.y));\n if (!target) return;\n const result = computeDropResult(input.sections, activeId, target, input.canMove, createLooseSectionId());\n if (!result) return;\n if (result.kind === \"section\") {\n input.onReorderSections?.(result.nextSectionIds, fromSectionDragId(activeId), target.id);\n return;\n }\n // A new bare run takes the slot of the group it sits behind.\n const loose = result.looseSection;\n if (loose) input.onReorderSections?.(loose.nextSectionIds, loose.id, loose.afterSectionId);\n for (const [sectionId, nextNodeIds] of Object.entries(result.orders)) input.onReorderNodes?.(sectionId, nextNodeIds);\n};\n","import { DndContext, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { createContext, type ReactNode } from \"react\";\nimport type { TreeListSection } from \"./tree-list.types\";\nimport { createTreeListDropHandler, treeListCollisionDetection } from \"./tree-list-drag-handling\";\nimport { type TreeListMovePolicy, verticalTreeDrag } 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 = treeListCollisionDetection(sections, canMove);\n const handleDragEnd = createTreeListDropHandler({ sections, canMove, onReorderSections, onReorderNodes });\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n onDragEnd={handleDragEnd}\n {...verticalTreeDrag}\n >\n <SharedTreeListDragContext.Provider value>{children}</SharedTreeListDragContext.Provider>\n </DndContext>\n );\n};\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { TreeListDropTarget } from \"./tree-list-drop\";\nimport { findNodeLocation, toGapDragId, toSectionDragId } from \"./tree-list-reorder\";\n\nexport interface TreeListDropIndicator {\n // Drag id of the row, section, or section gap that draws the line.\n lineId: string;\n edge: \"before\" | \"after\" | \"middle\";\n // A labeled section the item drops into; it is highlighted so \"into\" reads differently from \"behind\".\n groupId?: string;\n}\n\nconst groupOf = (section: TreeListSection | undefined) => (section?.label ? section.id : undefined);\n\n// Only targets inside this tree's sections draw here; a shared drag context lets each tree draw its own part.\nexport const treeListDropIndicator = (\n sections: TreeListSection[],\n target: TreeListDropTarget | null,\n expandedNodeIds: string[] = [],\n): TreeListDropIndicator | null => {\n if (!target) return null;\n const lastVisible = (node: TreeListNode): TreeListNode => {\n const children: TreeListNode[] | undefined = node.children;\n const last = expandedNodeIds.includes(node.id) ? children?.at(-1) : undefined;\n return last ? lastVisible(last) : node;\n };\n if (target.kind === \"node\") {\n const location = findNodeLocation(sections, target.id);\n if (!location) return null;\n const lineId = target.edge === \"after\" ? lastVisible(location.node).id : target.id;\n return { lineId, edge: target.edge, groupId: groupOf(location.section) };\n }\n const section = sections.find((candidate) => candidate.id === target.id);\n if (!section) return null;\n if (target.edge === \"inside\") {\n const last = section.nodes.at(-1);\n return {\n lineId: last ? lastVisible(last).id : toSectionDragId(section.id),\n edge: \"after\",\n groupId: groupOf(section),\n };\n }\n if (target.edge === \"after\") return { lineId: toGapDragId(section.id), edge: \"middle\" };\n return { lineId: toSectionDragId(section.id), edge: \"before\" };\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 { DndContext, PointerSensor, useDndContext, useDndMonitor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Fragment, type MouseEvent as ReactMouseEvent, useContext, useState } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport {\n createTreeListDropHandler,\n dragPointerY,\n dropTargetFor,\n treeListCollisionDetection,\n} from \"./tree-list-drag-handling\";\nimport { SharedTreeListDragContext } from \"./tree-list-drag-provider\";\nimport { type TreeListDropIndicator, treeListDropIndicator } from \"./tree-list-drop-indicator\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodes } from \"./tree-list-nodes\";\nimport { type TreeListMovePolicy, toSectionDragId, verticalTreeDrag } from \"./tree-list-reorder\";\nimport { TreeListReveal } from \"./tree-list-reveal\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { SectionGap, SortableHost } from \"./tree-list-sortable-host\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\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 onMoveNode?: (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n indicator: TreeListDropIndicator | null;\n dragging: boolean;\n focusRowId?: string;\n onRowFocus: (id: 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 onMoveNode,\n onSectionContextMenu,\n indicator,\n dragging,\n focusRowId,\n onRowFocus,\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 = section.nodes.map((node) => node.id);\n\n return (\n <SortableHost\n id={toSectionDragId(section.id)}\n disabled={section.canReorder === false}\n indicator={indicator}\n handle=\"child\"\n highlighted={indicator?.groupId === section.id}\n >\n {(listeners) => (\n <>\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={headerRow.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(headerRow.key)}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n {/* An empty bare section is invisible until a drag starts; then it offers a row-sized drop zone. */}\n {dragging && !headerRow && nodeRows.length === 0 ? (\n <Box h=\"tree-empty-drop-zone\" data-tree-list-empty-drop-zone=\"\" />\n ) : null}\n <TreeListReveal open={!headerRow || (headerRow.kind === \"section-header\" && headerRow.expanded)}>\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <TreeListNodes\n sectionId={section.id}\n nodes={section.nodes}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n sortable\n indicator={indicator}\n focusRowId={focusRowId}\n onRowFocus={onRowFocus}\n />\n {section.nodes.length === 0 ? section.emptyState : null}\n </SortableContext>\n </TreeListReveal>\n </>\n )}\n </SortableHost>\n );\n};\n\ntype SortableSectionsProps = Omit<\n TreeListSortableProps,\n \"onReorderSections\" | \"onReorderNodes\" | \"canMove\" | \"expandedSectionIds\" | \"expandedNodeIds\"\n> & {\n expandedSectionIds: string[];\n expandedNodeIds: string[];\n};\n\n// Reads the drag state from the enclosing DndContext, which may be shared by several trees.\nconst SortableSections = (props: SortableSectionsProps) => {\n const { sections, expandedSectionIds, expandedNodeIds, sectionGap, ...rest } = props;\n const { active, over } = useDndContext();\n const [pointerY, setPointerY] = useState<number | null>(null);\n useDndMonitor({\n onDragMove: (event) => setPointerY(dragPointerY(event.activatorEvent, event.delta.y)),\n onDragEnd: () => setPointerY(null),\n onDragCancel: () => setPointerY(null),\n });\n const target = active && pointerY !== null ? dropTargetFor(String(active.id), over, pointerY) : null;\n const indicator = treeListDropIndicator(sections, target, expandedNodeIds);\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId: rest.activeNodeId,\n expandedNodeIds,\n onToggleNode: rest.onToggleNode,\n onToggleSection: rest.onToggleSection,\n });\n return (\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n onKeyDown={keyboard.handleKeyDown}\n gap=\"0\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n >\n {sections.map((section, index) => (\n <Fragment key={section.id}>\n <SortableSectionGroup\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n rowVariant={rest.rowVariant ?? \"tree\"}\n nodeGap={rest.nodeGap}\n activeNodeId={rest.activeNodeId}\n linkComponent={rest.linkComponent}\n onNavigate={rest.onNavigate}\n onToggleSection={rest.onToggleSection}\n onToggleNode={rest.onToggleNode}\n onMoveNode={rest.onMoveNode}\n onSectionContextMenu={rest.onSectionContextMenu}\n indicator={indicator}\n dragging={Boolean(active)}\n focusRowId={keyboard.focusRowId}\n onRowFocus={keyboard.onRowFocus}\n />\n <SectionGap\n sectionId={section.id}\n nextSectionId={sections[index + 1]?.id}\n gap={sectionGap}\n indicator={indicator}\n />\n </Fragment>\n ))}\n </Stack>\n </SortableContext>\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 onMoveNode?: (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => 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 onMoveNode,\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 = treeListCollisionDetection(sections, canMove);\n const handleDragEnd = createTreeListDropHandler({\n sections,\n canMove,\n onReorderSections: (nextSectionIds) => onReorderSections?.(nextSectionIds),\n onReorderNodes,\n });\n\n const content = (\n <SortableSections\n sections={sections}\n expandedSectionIds={expandedSectionIds}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n sectionGap={sectionGap}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n );\n if (usesSharedDragContext) return content;\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n onDragEnd={handleDragEnd}\n {...verticalTreeDrag}\n >\n {content}\n </DndContext>\n );\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport type { MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { useVirtualizer } from \"@/utils/use-virtualizer\";\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 { TreeListNodes } from \"./tree-list-nodes\";\nimport type { TreeListMovePolicy } from \"./tree-list-reorder\";\nimport { TreeListReveal } from \"./tree-list-reveal\";\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 // Customizable trees bypass virtualization. Hosts persist their 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 before/after a leaf, into a container, or into the background when the target is omitted. */\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string, position?: \"before\" | \"after\" | \"inside\") => void;\n // Background actions sit behind item rows, which keep their own context menu.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface TreeListRowProps {\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, position?: \"before\" | \"after\" | \"inside\") => void;\n}\n\nconst TreeListRow = (props: TreeListRowProps) => {\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 } = props;\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 data-tree-list-virtual=\"\"\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 <TreeListRow\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n focusRowId={keyboard.focusRowId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onRowFocus={keyboard.onRowFocus}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n onMoveNode={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\n .filter((row) => row.kind === \"section-header\")\n .map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n <TreeListRow\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n focusRowId={keyboard.focusRowId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onRowFocus={keyboard.onRowFocus}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n onMoveNode={onMoveNode}\n />\n </Box>\n ))}\n <TreeListReveal\n open={\n section.collapsible === false || section.label === undefined || expandedSectionIds.includes(section.id)\n }\n >\n <TreeListNodes\n sectionId={section.id}\n nodes={section.nodes}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n focusRowId={keyboard.focusRowId}\n onRowFocus={keyboard.onRowFocus}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n />\n {section.nodes.length === 0 ? section.emptyState : null}\n </TreeListReveal>\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 onMoveNode={props.onMoveNode}\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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"}