@pstdio/ui 0.20.0 → 0.20.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.
- package/dist/{MermaidComponent-AmAjWLPm.js → MermaidComponent-BVMyKttu.js} +2 -2
- package/dist/{MermaidComponent-AmAjWLPm.js.map → MermaidComponent-BVMyKttu.js.map} +1 -1
- package/dist/chat-ui.js +1 -1
- package/dist/components/diff-viewer/code-editor.d.ts +2 -0
- package/dist/components/diff-viewer/file-change-badge.d.ts +3 -0
- package/dist/components/diff-viewer/file-list-panel.d.ts +0 -1
- package/dist/components/diff-viewer/index.d.ts +1 -0
- package/dist/components/param-editor/param-editor.types.d.ts +2 -0
- package/dist/components/tree-list/tree-list-background.d.ts +8 -0
- package/dist/components/tree-list/tree-list-drag.d.ts +7 -0
- package/dist/components/tree-list/tree-list-inline-creation-story.d.ts +3 -0
- package/dist/components/tree-list/tree-list-inline-input.d.ts +9 -0
- package/dist/components/tree-list/tree-list-move-surface.d.ts +7 -0
- package/dist/components/tree-list/tree-list-node-row.d.ts +1 -0
- package/dist/components/tree-list/tree-list.d.ts +2 -0
- package/dist/components/tree-list/tree-list.types.d.ts +13 -0
- package/dist/data-table.js +5 -5
- package/dist/diff.js +796 -815
- package/dist/diff.js.map +1 -1
- package/dist/{edit-mode-data-table-4GMiDy75.js → edit-mode-data-table-D6NeiDJx.js} +3 -3
- package/dist/{edit-mode-data-table-4GMiDy75.js.map → edit-mode-data-table-D6NeiDJx.js.map} +1 -1
- package/dist/{editor-config-Dyh8n5A2.js → editor-config-D9OksZ93.js} +3 -3
- package/dist/{editor-config-Dyh8n5A2.js.map → editor-config-D9OksZ93.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +324 -349
- package/dist/index.js.map +1 -1
- package/dist/{kanban-renderer-toolbar-BcUZvGyY.js → kanban-renderer-toolbar-CpegGbwq.js} +2 -2
- package/dist/{kanban-renderer-toolbar-BcUZvGyY.js.map → kanban-renderer-toolbar-CpegGbwq.js.map} +1 -1
- package/dist/kanban-renderer.js +5 -5
- package/dist/{lazy-markdown-editor-CWSREEhf.js → lazy-markdown-editor-B7uP2ALS.js} +2 -2
- package/dist/{lazy-markdown-editor-CWSREEhf.js.map → lazy-markdown-editor-B7uP2ALS.js.map} +1 -1
- package/dist/{list-row-B8L4TGsh.js → list-row-9oxy-F0v.js} +228 -253
- package/dist/list-row-9oxy-F0v.js.map +1 -0
- package/dist/{param-editor-w3xH-t8A.js → param-editor-B8Ff9Nm8.js} +2 -2
- package/dist/{param-editor-w3xH-t8A.js.map → param-editor-B8Ff9Nm8.js.map} +1 -1
- package/dist/{param-editor-field-C8zRDStn.js → param-editor-field-Cu4pto_a.js} +3 -3
- package/dist/{param-editor-field-C8zRDStn.js.map → param-editor-field-Cu4pto_a.js.map} +1 -1
- package/dist/{rich-message-jZ2oPQhU.js → rich-message-DdFYRzTo.js} +2 -2
- package/dist/{rich-message-jZ2oPQhU.js.map → rich-message-DdFYRzTo.js.map} +1 -1
- package/dist/rich-text.js +4 -4
- package/dist/theme/recipes/input.d.ts +32 -0
- package/dist/{theme-J8K8KbZi.js → theme-BH4fSst9.js} +33 -1
- package/dist/theme-BH4fSst9.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/tree-list-uV4UFj0x.js +1116 -0
- package/dist/tree-list-uV4UFj0x.js.map +1 -0
- package/package.json +1 -1
- package/dist/list-row-B8L4TGsh.js.map +0 -1
- package/dist/theme-J8K8KbZi.js.map +0 -1
- package/dist/tree-list-CC13pOYi.js +0 -1033
- package/dist/tree-list-CC13pOYi.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-list-uV4UFj0x.js","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.tsx","../src/components/tree-list/tree-list-background.tsx","../src/components/tree-list/tree-list-model.ts","../src/components/tree-list/tree-list-drag.ts","../src/components/tree-list/tree-list-move-surface.tsx","../src/components/tree-list/tree-list-inline-input.tsx","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list.tsx"],"sourcesContent":["export type ResizableSplitSide = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nconst MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX = 160;\nconst VERTICAL_COLLAPSE_THRESHOLD_PX = 72;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst axes = {\n left: {\n rootDirection: \"row\",\n dimension: \"width\",\n separatorOrientation: \"vertical\",\n cursor: \"col-resize\",\n pointerCoordinate: \"clientX\",\n deltaDirection: 1,\n panelFirst: true,\n },\n right: {\n rootDirection: \"row\",\n dimension: \"width\",\n separatorOrientation: \"vertical\",\n cursor: \"col-resize\",\n pointerCoordinate: \"clientX\",\n deltaDirection: -1,\n panelFirst: false,\n },\n top: {\n rootDirection: \"column\",\n dimension: \"height\",\n separatorOrientation: \"horizontal\",\n cursor: \"row-resize\",\n pointerCoordinate: \"clientY\",\n deltaDirection: 1,\n panelFirst: true,\n },\n bottom: {\n rootDirection: \"column\",\n dimension: \"height\",\n separatorOrientation: \"horizontal\",\n cursor: \"row-resize\",\n pointerCoordinate: \"clientY\",\n deltaDirection: -1,\n panelFirst: false,\n },\n} as const;\n\nexport const getResizableSplitAxis = (side: ResizableSplitSide) => axes[side];\n\nexport const resolveResizableBounds = (input: {\n rootSize: number;\n fallbackRootSize: number;\n minSize: number;\n maxSize?: number;\n contentMinSize: number;\n}) => {\n const rootSize = input.rootSize > 0 ? input.rootSize : input.fallbackRootSize;\n const maxFromContent = Math.max(0, rootSize - input.contentMinSize);\n const configuredMax = input.maxSize ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSize, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst resolveCollapseThreshold = (side: ResizableSplitSide, minSize: number) => {\n if (side === \"top\" || side === \"bottom\") return VERTICAL_COLLAPSE_THRESHOLD_PX;\n return clamp(minSize / 2, MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX, MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX);\n};\n\nexport const resolveDraggedPanelSize = (input: {\n side: ResizableSplitSide;\n startSize: number;\n pointerDelta: number;\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n}) => {\n const axis = getResizableSplitAxis(input.side);\n const rawSize = input.startSize + input.pointerDelta * axis.deltaDirection;\n const collapsed = input.collapsible && rawSize <= resolveCollapseThreshold(input.side, input.minSize);\n\n return {\n rawSize,\n size: collapsed ? 0 : clamp(rawSize, input.minSize, input.maxSize),\n collapsed,\n };\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\nimport type { getResizableSplitAxis } from \"@/components/layout/resizable-split-layout.geometry\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.inverted\" } };\n\ninterface ResizeHandleProps {\n axis: ReturnType<typeof getResizableSplitAxis>;\n bounds: { minSize: number; maxSize: number };\n collapsed: boolean;\n collapsible: boolean;\n contentPanelId: string;\n resizablePanelId: string;\n resizeHandleSizePx: number;\n resizeLabel: string;\n resolvedPanelSize: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n axis,\n bounds,\n collapsed,\n collapsible,\n contentPanelId,\n resizablePanelId,\n resizeHandleSizePx,\n resizeLabel,\n resolvedPanelSize,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const verticalSeparator = axis.separatorOrientation === \"vertical\";\n const resizeHandleSize = `${resizeHandleSizePx}px`;\n const resizeHandleOffset = `${resizeHandleSizePx / -2}px`;\n const separatorStyle = verticalSeparator\n ? {\n content: '\"\"',\n position: \"absolute\" as const,\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }\n : {\n content: '\"\"',\n position: \"absolute\" as const,\n insetInline: 0,\n top: \"50%\",\n h: \"1px\",\n bg: showResizeSeparator ? \"border\" : \"transparent\",\n transform: \"translateY(-50%)\",\n };\n return (\n <Box\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 aria-hidden={collapsed ? true : undefined}\n tabIndex={collapsed ? -1 : 0}\n display={collapsed ? \"none\" : undefined}\n position=\"relative\"\n zIndex=\"docked\"\n flex={`0 0 ${resizeHandleSize}`}\n h={verticalSeparator ? \"full\" : resizeHandleSize}\n w={verticalSeparator ? resizeHandleSize : \"full\"}\n mx={verticalSeparator ? resizeHandleOffset : undefined}\n my={verticalSeparator ? undefined : resizeHandleOffset}\n cursor={axis.cursor}\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={separatorStyle}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n h: verticalSeparator ? undefined : \"2px\",\n w: verticalSeparator ? \"2px\" : undefined,\n },\n }}\n />\n );\n};\n","import { Flex } 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 { ResizeHandle } from \"@/components/layout/resizable-split-layout.handle\";\n\ninterface ResizableSplitPanelsProps {\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 resizeHandleSizePx: number;\n resizeLabel: string;\n resolvedPanelSize: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizableSplitPanels = (props: ResizableSplitPanelsProps) => {\n const {\n axis,\n bounds,\n collapsed,\n collapsible,\n contentPanel,\n contentPanelId,\n contentPanelRef,\n resizablePanel,\n resizablePanelId,\n resizablePanelRef,\n resizeHandleSizePx,\n resizeLabel,\n resolvedPanelSize,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const resizablePanelNode = (\n <Flex\n key=\"resizable-panel\"\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h={axis.dimension === \"height\" ? `${resolvedPanelSize}px` : \"full\"}\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelSize}px`}\n w={axis.dimension === \"width\" ? `${resolvedPanelSize}px` : \"full\"}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\n key=\"content-panel\"\n id={contentPanelId}\n ref={contentPanelRef}\n display=\"flex\"\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex=\"1\"\n >\n {contentPanel}\n </Flex>\n );\n const resizeTrigger = (\n <ResizeHandle\n key=\"resize-handle\"\n axis={axis}\n bounds={bounds}\n collapsed={collapsed}\n collapsible={collapsible}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeHandleSizePx={resizeHandleSizePx}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n showResizeSeparator={showResizeSeparator}\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 { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n getResizableSplitAxis,\n type ResizableSplitSide,\n resolveDraggedPanelSize,\n resolveResizableBounds,\n} from \"@/components/layout/resizable-split-layout.geometry\";\nimport { ResizableSplitPanels } from \"@/components/layout/resizable-split-layout.panels\";\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 resizeHandleSizePx?: number;\n showResizeSeparator?: boolean;\n onSizeChange?: (size: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_SIZE = { width: 1200, height: 720 };\nconst KEYBOARD_RESIZE_STEP = 24;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\ntype PanelDimension = \"width\" | \"height\";\n\nconst getElementSize = (element: HTMLDivElement | null, dimension: PanelDimension) =>\n element?.getBoundingClientRect()[dimension] ?? 0;\n\nconst applyPanelSizeToElement = (panel: HTMLDivElement | null, size: number, dimension: PanelDimension) => {\n if (!panel) return;\n\n panel.style[dimension] = `${size}px`;\n panel.style.flexBasis = `${size}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = size > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\n panel.style.height = \"\";\n panel.style.flexBasis = \"\";\n panel.style.flexGrow = \"\";\n panel.style.flexShrink = \"\";\n panel.style.display = \"\";\n};\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 resizeHandleSizePx = 12,\n showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const axis = getResizableSplitAxis(resizableSide);\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const lastSizeRef = useRef(defaultSizePx);\n const [panelSize, setPanelSize] = useState(defaultSizePx);\n const [rootSize, setRootSize] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBounds({\n rootSize,\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const resolvedPanelSize = collapsed ? 0 : clamp(panelSize, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootSize = () => {\n setRootSize(element.getBoundingClientRect()[axis.dimension]);\n };\n\n updateRootSize();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootSize);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [axis.dimension]);\n\n useEffect(() => {\n lastSizeRef.current = defaultSizePx;\n setPanelSize(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelSize = (size: number) => {\n applyPanelSizeToElement(resizablePanelRef.current, size, axis.dimension);\n };\n\n useEffect(() => {\n // React may reuse the same DOM element across renders when this component swaps roles\n // (e.g., a wrapping ResizableSplitLayout disappears, leaving the inner one in its place).\n // Clear any inline styles on the content panel that leaked from a prior render where\n // the same DOM element was the resizable panel; otherwise stale `flex: 0 0 Xpx` pins\n // the content's width.\n clearPanelInlineStyles(contentPanelRef.current);\n clearPanelInlineStyles(resizablePanelRef.current);\n applyPanelSizeToElement(resizablePanelRef.current, resolvedPanelSize, axis.dimension);\n }, [axis.dimension, resolvedPanelSize]);\n\n const commitPanelSize = (size: number) => {\n const nextBounds = resolveResizableBounds({\n rootSize: getElementSize(rootRef.current, axis.dimension),\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const nextSize = clamp(size, nextBounds.minSize, nextBounds.maxSize);\n\n lastSizeRef.current = nextSize;\n setPanelSize(nextSize);\n applyPanelSize(nextSize);\n onSizeChange?.(nextSize);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const bounds = resolveResizableBounds({\n rootSize: getElementSize(rootRef.current, axis.dimension),\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const startPointer = event[axis.pointerCoordinate];\n const startSize = collapsed ? 0 : getElementSize(resizablePanelRef.current, axis.dimension) || lastSizeRef.current;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextSize = startSize === 0 ? 0 : clamp(startSize, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelSize = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelSize(nextSize);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const result = resolveDraggedPanelSize({\n side: resizableSide,\n startSize,\n pointerDelta: moveEvent[axis.pointerCoordinate] - startPointer,\n minSize: bounds.minSize,\n maxSize: bounds.maxSize,\n collapsible,\n });\n nextCollapsed = result.collapsed;\n nextSize = result.size;\n schedulePanelSize();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelSize(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelSize(nextSize);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = axis.cursor;\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const negativeDirectionKey = axis.dimension === \"width\" ? \"ArrowLeft\" : \"ArrowUp\";\n const positiveDirectionKey = axis.dimension === \"width\" ? \"ArrowRight\" : \"ArrowDown\";\n const size = lastSizeRef.current;\n\n if (\n collapsed &&\n (event.key === negativeDirectionKey || event.key === positiveDirectionKey || event.key === \"End\")\n ) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelSize(size);\n } else if (event.key === negativeDirectionKey) {\n event.preventDefault();\n commitPanelSize(size - KEYBOARD_RESIZE_STEP * axis.deltaDirection);\n } else if (event.key === positiveDirectionKey) {\n event.preventDefault();\n commitPanelSize(size + KEYBOARD_RESIZE_STEP * axis.deltaDirection);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelSize(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelSize(bounds.maxSize);\n }\n };\n\n return (\n <Flex ref={rootRef} direction={axis.rootDirection} h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n <ResizableSplitPanels\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 resizeHandleSizePx={resizeHandleSizePx}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n </Flex>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\n\ninterface TreeListBackgroundProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n}\n\n// The menu target stays behind the rows so item context menus keep priority.\nexport const TreeListBackground = (props: TreeListBackgroundProps) => {\n const { actions, children } = props;\n\n return (\n <Box position=\"relative\" flex=\"1 0 auto\" minH=\"full\" w=\"full\" minW=\"0\" maxW=\"full\">\n <ResourceContextMenu actions={actions} closeOnSelect={false}>\n <Box position=\"absolute\" inset=\"0\" zIndex={0} aria-hidden data-tree-list-background=\"true\" />\n </ResourceContextMenu>\n <Box position=\"relative\" zIndex={1} w=\"full\" minW=\"0\" maxW=\"full\">\n {children}\n </Box>\n </Box>\n );\n};\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","const TREE_NODE_DATA_TYPE = \"application/x-pstdio-tree-node\";\n\ninterface TreeNodeDataTransfer {\n getData(type: string): string;\n setData(type: string, value: string): void;\n}\n\nexport const writeDraggedTreeNodeId = (dataTransfer: TreeNodeDataTransfer, nodeId: string) => {\n dataTransfer.setData(TREE_NODE_DATA_TYPE, nodeId);\n};\n\nexport const readDraggedTreeNodeId = (dataTransfer: TreeNodeDataTransfer) =>\n dataTransfer.getData(TREE_NODE_DATA_TYPE) || undefined;\n","import { Box } from \"@chakra-ui/react\";\nimport type { DragEvent as ReactDragEvent, ReactNode } from \"react\";\nimport { readDraggedTreeNodeId } from \"./tree-list-drag\";\n\ninterface TreeListMoveSurfaceProps {\n children: ReactNode;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n}\n\nexport const TreeListMoveSurface = (props: TreeListMoveSurfaceProps) => {\n const { children, onMoveNode } = props;\n\n const handleDragOver = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n };\n\n const handleDrop = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.preventDefault();\n const sourceNodeId = readDraggedTreeNodeId(event.dataTransfer);\n if (sourceNodeId) onMoveNode(sourceNodeId);\n };\n\n return (\n <Box\n p=\"xs\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n minH=\"full\"\n flex=\"1 0 auto\"\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {children}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { type ReactNode, useRef, useState } from \"react\";\nimport type { TreeListInlineInput } from \"./tree-list.types\";\n\ninterface TreeListInlineInputRowProps {\n input: TreeListInlineInput;\n icon?: ReactNode;\n level: number;\n}\n\nconst paddingLeft = (level: number) => {\n if (level <= 0) return \"sm\";\n return `calc(var(--chakra-spacing-1) + ${level} * 12px)`;\n};\n\nexport const TreeListInlineInputRow = (props: TreeListInlineInputRowProps) => {\n const { input, icon, level } = props;\n const [value, setValue] = useState(input.defaultValue ?? \"\");\n const [error, setError] = useState<string>();\n const inputRef = useRef<HTMLInputElement>(null);\n const submittingRef = useRef(false);\n\n const commit = async () => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n setError(undefined);\n try {\n await input.onCommit(value.trim());\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not create file.\");\n queueMicrotask(() => inputRef.current?.focus());\n } finally {\n submittingRef.current = false;\n }\n };\n\n return (\n <Flex\n h=\"1.75rem\"\n w=\"full\"\n minW=\"0\"\n alignItems=\"center\"\n gap=\"1\"\n pr=\"sm\"\n pl={paddingLeft(level)}\n onMouseDown={(event) => event.stopPropagation()}\n >\n {icon ? (\n <Box\n boxSize=\"16px\"\n color=\"fg.muted\"\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n css={{ \"& > svg\": { width: \"16px\", height: \"16px\" } }}\n >\n {icon}\n </Box>\n ) : null}\n <Input\n ref={inputRef}\n autoFocus\n size=\"xs\"\n value={value}\n aria-label={input.ariaLabel}\n aria-invalid={Boolean(error) || undefined}\n placeholder={input.placeholder}\n title={error}\n onChange={(event) => setValue(event.currentTarget.value)}\n onBlur={() => {\n if (!submittingRef.current) input.onCancel?.();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === \"Enter\") {\n event.preventDefault();\n void commit();\n }\n if (event.key === \"Escape\" && !submittingRef.current) {\n event.preventDefault();\n input.onCancel?.();\n }\n }}\n />\n </Flex>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler, DragEvent as ReactDragEvent } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { readDraggedTreeNodeId, writeDraggedTreeNodeId } from \"./tree-list-drag\";\nimport { TreeListInlineInputRow } from \"./tree-list-inline-input\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n onMoveNode,\n } = props;\n\n if (node.inlineInput) {\n return <TreeListInlineInputRow input={node.inlineInput} icon={node.icon} level={level} />;\n }\n\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const handleDragStart = (event: ReactDragEvent<HTMLElement>) => {\n writeDraggedTreeNodeId(event.dataTransfer, node.id);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragOver = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.stopPropagation();\n if (!node.canDrop) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n };\n\n const handleDrop = (event: ReactDragEvent<HTMLElement>) => {\n if (!onMoveNode) return;\n event.stopPropagation();\n if (!node.canDrop) return;\n event.preventDefault();\n const sourceNodeId = readDraggedTreeNodeId(event.dataTransfer);\n if (sourceNodeId && sourceNodeId !== node.id) onMoveNode(sourceNodeId, node.id);\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n const { inlineInput: _inlineInput, rowVariant: nodeRowVariant, ...listRowItem } = rowItem;\n\n const rowProps = {\n ...listRowItem,\n depth: level,\n variant: nodeRowVariant ?? rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n \"data-tree-list-node-id\": node.id,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n draggable={Boolean(onMoveNode && node.canDrag)}\n onDragStart={node.canDrag ? handleDragStart : undefined}\n onDragOver={onMoveNode ? handleDragOver : undefined}\n onDrop={onMoveNode ? handleDrop : undefined}\n >\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; sectionId: string; nextNodeIds: string[] };\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n\n if (isSectionDragId(activeId) && isSectionDragId(overId)) {\n const activeSection = sections.find((section) => section.id === fromSectionDragId(activeId));\n const overSection = sections.find((section) => section.id === fromSectionDragId(overId));\n if (activeSection?.canReorder === false || overSection?.canReorder === false) return null;\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(fromSectionDragId(activeId));\n const newIndex = orderedIds.indexOf(fromSectionDragId(overId));\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n }\n\n for (const section of sections) {\n const nodeIds = section.nodes.map((node) => node.id);\n const oldIndex = nodeIds.indexOf(activeId);\n const newIndex = nodeIds.indexOf(overId);\n if (oldIndex < 0 || newIndex < 0) continue;\n if (section.nodes[oldIndex]?.canReorder === false || section.nodes[newIndex]?.canReorder === false) return null;\n if (oldIndex === newIndex) return null;\n return {\n kind: \"node\",\n sectionId: section.id,\n nextNodeIds: arrayMoveInPlace(nodeIds, oldIndex, newIndex),\n };\n }\n\n return null;\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { computeReorderResult, toSectionDragId } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n disabled?: boolean;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id, disabled: props.disabled });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)} disabled={section.canReorder === false}>\n {({ setNodeRef, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext; nested rows\n// inherit position from their parent and render plain (cross-section moves are\n// out of scope per the ADR).\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id} disabled={row.node.canReorder === false}>\n {({ setNodeRef, listeners, style }) => (\n <Box\n ref={setNodeRef}\n style={style}\n w=\"full\"\n minW=\"0\"\n onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}\n >\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id));\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n onReorderNodes?.(result.sectionId, result.nextNodeIds);\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, RefObject } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { TreeListBackground } from \"./tree-list-background\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListMoveSurface } from \"./tree-list-move-surface\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\n/** Sectioned hierarchical list for files, resources, navigation, and customizable sidenavs. */\ninterface TreeListProps {\n /** Ordered sections to render, each containing nested tree nodes. */\n sections: TreeListSection[];\n /** Controlled section ids that are currently expanded. */\n expandedSectionIds?: string[];\n /** Controlled node ids that are currently expanded. */\n expandedNodeIds?: string[];\n /** Active node id, or ids, used for selection styling. */\n activeNodeId?: string | string[] | null;\n /** Compact rows suit app navigation; tree rows suit file/resource hierarchies. */\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n /** Link renderer used when nodes provide `href`. */\n linkComponent?: TreeListLinkComponent;\n /** Called when a navigable node is activated. */\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n /** Render large trees with virtual rows. Disable when using drag ordering. */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n /** Move a node onto another node, or onto the tree root when the target is omitted. */\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n // When set, right-clicking the empty back area of the tree (everything not\n // covered by an item row) opens this menu. Item rows keep their own\n // right-click behaviour — the menu lives on a layer behind them.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n onMoveNode={onMoveNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n scrollRef,\n } = props;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n pb={virtualItem.index === rows.length - 1 ? \"0\" : nodeGap}\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onMoveNode,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const content = props.draggable ? (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n />\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"],"names":["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","getResizableSplitAxis","side","resolveResizableBounds","input","rootSize","fallbackRootSize","maxFromContent","contentMinSize","configuredMax","maxSize","minSize","resolveCollapseThreshold","resolveDraggedPanelSize","axis","rawSize","startSize","pointerDelta","collapsed","collapsible","size","RESIZE_SEPARATOR_HOVER_STYLE","_before","bg","ResizeHandle","props","$","_c","bounds","contentPanelId","resizablePanelId","resizeHandleSizePx","resizeLabel","resolvedPanelSize","showResizeSeparator","onResizeKeyDown","onResizeStart","verticalSeparator","resizeHandleSize","resizeHandleOffset","t0","content","position","insetInlineStart","w","transform","insetInline","h","separatorStyle","t1","t2","t3","round","t4","t5","t6","undefined","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","jsx","Box","ResizableSplitPanels","contentPanel","contentPanelRef","resizablePanel","resizablePanelRef","Flex","resizablePanelNode","contentPanelNode","resizeTrigger","FALLBACK_ROOT_SIZE","width","height","KEYBOARD_RESIZE_STEP","getElementSize","element","getBoundingClientRect","applyPanelSizeToElement","panel","style","flexBasis","flexGrow","flexShrink","display","clearPanelInlineStyles","ResizableSplitLayout","controlledCollapsed","maxSizePx","onCollapsedChange","onSizeChange","rest","resizableSide","defaultSizePx","minSizePx","contentMinSizePx","id","useId","rootRef","useRef","cleanupDragRef","_temp","lastSizeRef","panelSize","setPanelSize","useState","setRootSize","internalCollapsed","setInternalCollapsed","current","updateRootSize","ResizeObserver","observer","observe","disconnect","useEffect","Symbol","for","applyPanelSize","t19","size_0","nextBounds","nextSize","commitPanelSize","t20","nextCollapsed","setCollapsed","t21","event","button","preventDefault","resizeHandle","currentTarget","bounds_0","startPointer","previousCursor","document","body","previousUserSelect","userSelect","nextSize_0","nextCollapsed_0","animationFrame","setDraggingPanelState","pointerEvents","schedulePanelSize","window","requestAnimationFrame","handlePointerMove","moveEvent","result","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","_temp2","setPointerCapture","addEventListener","once","handleResizeStart","t22","event_0","negativeDirectionKey","positiveDirectionKey","size_1","key","handleResizeKeyDown","t23","t24","TreeListBackground","actions","children","ResourceContextMenu","jsxs","isInList","values","includes","isActiveNode","activeNodeId","Array","isArray","isNavigableNode","node","isNavigable","navigationIntent","getNodeChildren","hasExpandableChildren","length","isContainer","appendVisibleNodeRows","rows","sectionId","nodes","expandedNodeIds","level","parentNodeId","push","kind","buildVirtualRows","sections","expandedSectionIds","section","label","expanded","emptyState","getRowFocusId","row","isFocusableRow","disabled","getFocusableRows","filter","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","Set","map","has","activeId","find","firstRow","resolveSectionHeaderNavigation","currentIndex","type","nextRow","rowId","resolveNodeNavigation","expandable","nodeId","resolveTreeListKeyboardNavigation","resolvedFocusRowId","findIndex","currentRow","focusByIndex","index","clamped","TREE_NODE_DATA_TYPE","writeDraggedTreeNodeId","dataTransfer","setData","readDraggedTreeNodeId","getData","TreeListMoveSurface","onMoveNode","dropEffect","handleDragOver","sourceNodeId","handleDrop","paddingLeft","TreeListInlineInputRow","icon","setValue","defaultValue","error","setError","inputRef","submittingRef","commit","onCommit","trim","cause","Error","message","queueMicrotask","focus","stopPropagation","Input","ariaLabel","Boolean","placeholder","onCancel","TreeListNodeRow","rowVariant","nodeGap","linkComponent","LinkComponent","tabIndex","onFocus","onNavigate","onToggleNode","inlineInput","hasChildren","isActive","isDisabled","canLink","href","intent","onActivate","handleActivate","effectAllowed","handleDragStart","canDrop","event_1","action","onAction","context","listRowItem","nodeRowVariant","rowItem","_inlineInput","depth","variant","isSelected","isExpanded","showExpandToggle","onToggleExpand","rowProps","ListRow","canDrag","Stack","TreeListSectionActions","opacity","menuItems","SearchableActionMenu","Menu","IconButton","HStack","TreeListSectionHeader","focusId","onToggle","onContextMenu","Text","ChevronRight","transition","item","SECTION_PREFIX","toSectionDragId","isSectionDragId","startsWith","fromSectionDragId","slice","arrayMoveInPlace","items","from","to","next","removed","splice","computeReorderResult","overId","activeSection","overSection","canReorder","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","sortable","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","_temp3","_temp4","topLevelNodeIds","onPointerDown","_temp5","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","bb0","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","String","active","handleDragEnd","T0","DndContext","T1","_temp6","T2","section_0","row_0","row_1","row_2","findRowElement","root","querySelectorAll","dataset","treeListFocusId","findFocusedRowId","target","HTMLElement","contains","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","join","focusableRowIds","split","frame","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","handleKeyDown","rowId_0","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","scrollRef","virtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","getItemKey","keyboard","scrollToIndex","align","getTotalSize","getVirtualItems","virtualItem","measureElement","start","StackTreeList","virtualize","TreeList","draggable","paddedContent","backgroundContextActions"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-row-B8L4TGsh.js","sources":["../src/components/overlays/resource-context-menu.tsx","../src/components/list-row/list-row-menu.tsx","../src/components/list-row/list-row-chrome.tsx","../src/components/layout/header.tsx","../src/components/overlays/searchable-menu-input.tsx","../src/components/overlays/searchable-menu.tsx","../src/components/list-row/searchable-action-menu.tsx","../src/components/list-row/list-row-actions.tsx","../src/components/list-row/list-row-content.tsx","../src/components/list-row/list-row.tsx"],"sourcesContent":["import { Menu, Portal } from \"@chakra-ui/react\";\nimport { type ComponentProps, Fragment, type ReactElement, type ReactNode } from \"react\";\nimport { ListRow } from \"@/components/list-row/list-row\";\n\ntype MenuRootProps = ComponentProps<typeof Menu.Root>;\n\nexport interface ResourceContextAction {\n key: string;\n label: string;\n commandId?: string;\n onClick: () => Promise<void> | void;\n isDisabled?: boolean;\n icon?: ReactNode;\n endContent?: ReactNode;\n separatorBefore?: boolean;\n}\n\ninterface ResourceContextMenuProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n contentMinWidth?: string;\n contentBackground?: string;\n positioning?: MenuRootProps[\"positioning\"];\n /** Keep the menu open after selecting an item — useful for menus that toggle several entries in one pass. */\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n /** Preserve the trigger tree while actions load or change. */\n keepMountedWhenEmpty?: boolean;\n}\n\nexport interface ResourceActionMenuProps {\n actions: ResourceContextAction[];\n children: ReactElement;\n contentMinWidth?: string;\n contentBackground?: string;\n positioning?: MenuRootProps[\"positioning\"];\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n}\n\nconst ResourceMenuContent = (props: {\n actions: ResourceContextAction[];\n contentMinWidth: string;\n contentBackground: string;\n}) => {\n const { actions, contentBackground, contentMinWidth } = props;\n\n return (\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW={contentMinWidth} bg={contentBackground}>\n {actions.map((action) => (\n <Fragment key={action.key}>\n {action.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item value={action.key} disabled={action.isDisabled} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n );\n};\n\nexport const ResourceActionMenu = (props: ResourceActionMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"17.5rem\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n closeOnSelect,\n } = props;\n\n if (actions.length === 0) return children;\n\n return (\n <Menu.Root positioning={positioning} closeOnSelect={closeOnSelect}>\n <Menu.Trigger asChild>{children}</Menu.Trigger>\n <ResourceMenuContent actions={actions} contentMinWidth={contentMinWidth} contentBackground={contentBackground} />\n </Menu.Root>\n );\n};\n\nexport const ResourceContextMenu = (props: ResourceContextMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"17.5rem\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n closeOnSelect,\n keepMountedWhenEmpty = false,\n } = props;\n\n if (actions.length === 0 && !keepMountedWhenEmpty) {\n return <>{children}</>;\n }\n\n return (\n <Menu.Root positioning={positioning} closeOnSelect={closeOnSelect}>\n <Menu.ContextTrigger asChild>{children}</Menu.ContextTrigger>\n {actions.length > 0 ? (\n <ResourceMenuContent\n actions={actions}\n contentMinWidth={contentMinWidth}\n contentBackground={contentBackground}\n />\n ) : null}\n </Menu.Root>\n );\n};\n","import { Box, HStack, Icon, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport type { ListRowActionMenuItem, ListRowMenuPlacement } from \"./list-row.types\";\n\ninterface ListRowMenuProps {\n items: ListRowActionMenuItem[];\n open: boolean;\n placement?: ListRowMenuPlacement;\n children: ReactElement;\n onOpenChange: (open: boolean) => void;\n onSelect: (item: ListRowActionMenuItem) => void;\n}\n\nconst ListRowMenuItemIcon = (props: { item: ListRowActionMenuItem }) => {\n const { item } = props;\n if (!item.icon) return null;\n\n return (\n <Box color=\"fg.muted\" flexShrink={0} display=\"inline-flex\">\n {typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"14px\" /> : item.icon}\n </Box>\n );\n};\n\nexport const ListRowMenu = (props: ListRowMenuProps) => {\n const { children, items, onOpenChange, onSelect, open, placement = \"right-start\" } = props;\n\n return (\n <Menu.Root\n open={open}\n positioning={{ placement, offset: { mainAxis: 4 } }}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Menu.Trigger asChild>{children}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"200px\" bg=\"bg\">\n {items.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item\n value={item.id}\n disabled={item.disabled || item.readOnly}\n _disabled={item.readOnly ? { opacity: 1, cursor: \"default\" } : undefined}\n onClick={() => {\n if (!item.readOnly) onSelect(item);\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\" alignItems=\"center\">\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" alignItems={item.description ? \"flex-start\" : \"center\"}>\n <ListRowMenuItemIcon item={item} />\n <Stack gap=\"0\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n {item.description ? (\n <Text textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" truncate>\n {item.description}\n </Text>\n ) : null}\n </Stack>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport type { ReactElement } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { ListRowItem } from \"./list-row.types\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst createResourceContextActions = (items: NonNullable<ListRowItem[\"contextMenuItems\"]>): ResourceContextAction[] =>\n items.map((entry) => ({\n key: entry.id,\n label: entry.label,\n icon: typeof entry.icon === \"function\" ? <Icon as={entry.icon} boxSize=\"16px\" /> : entry.icon,\n endContent: entry.endContent,\n isDisabled: entry.disabled,\n separatorBefore: entry.separatorBefore,\n onClick: () => entry.onAction?.(),\n }));\n\ninterface ListRowChromeProps {\n item: ListRowItem;\n menuOpen: boolean;\n children: ReactElement;\n onMenuOpenChange: (open: boolean) => void;\n onMenuSelect: (item: NonNullable<ListRowItem[\"menuItems\"]>[number]) => void;\n}\n\nexport const ListRowChrome = (props: ListRowChromeProps) => {\n const { children, item, menuOpen, onMenuOpenChange, onMenuSelect } = props;\n\n if (item.menuItems && item.menuItems.length > 0) {\n return (\n <ListRowMenu\n items={item.menuItems}\n open={menuOpen}\n placement={item.menuPlacement}\n onOpenChange={onMenuOpenChange}\n onSelect={onMenuSelect}\n >\n {children}\n </ListRowMenu>\n );\n }\n\n const row = item.tooltip ? <Tooltip content={item.tooltip}>{children}</Tooltip> : children;\n if (!item.contextMenuItems || item.contextMenuItems.length === 0) return row;\n\n return <ResourceContextMenu actions={createResourceContextActions(item.contextMenuItems)}>{row}</ResourceContextMenu>;\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport type HeaderVariant = \"main\" | \"narrow\" | \"input\";\n\ninterface HeaderVariantStyles {\n h: string;\n px: string;\n}\n\nconst headerVariantStyles: Record<HeaderVariant, HeaderVariantStyles> = {\n main: {\n h: \"2.5rem\",\n px: \"xs\",\n },\n narrow: {\n h: \"2rem\",\n px: \"xs\",\n },\n input: {\n h: \"3rem\",\n px: \"0\",\n },\n};\n\nexport interface HeaderProps extends Omit<StackProps, \"variant\"> {\n variant?: HeaderVariant;\n}\n\nexport const Header = React.forwardRef<HTMLDivElement, HeaderProps>(function Header(props, ref) {\n const { variant = \"main\", children, ...rest } = props;\n\n return (\n <HStack ref={ref} as=\"header\" alignItems=\"center\" borderWidth=\"0\" {...headerVariantStyles[variant]} {...rest}>\n {children}\n </HStack>\n );\n});\n","import { Input, InputGroup } from \"@chakra-ui/react\";\nimport { Search } from \"lucide-react\";\nimport type { Ref } from \"react\";\nimport { Header } from \"@/components/layout/header\";\n\ninterface SearchableMenuInputProps {\n inputRef?: Ref<HTMLInputElement>;\n value: string;\n placeholder: string;\n onValueChange: (value: string) => void;\n}\n\nconst searchInputChromeProps = {\n bg: \"transparent\",\n border: \"0\",\n borderColor: \"transparent\",\n borderRadius: \"0\",\n boxShadow: \"none\",\n transition: \"none\",\n _hover: { bg: \"transparent\", borderColor: \"transparent\" },\n _active: { bg: \"transparent\", borderColor: \"transparent\" },\n _focus: { borderColor: \"transparent\", outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { borderColor: \"transparent\", outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nexport const SearchableMenuInput = (props: SearchableMenuInputProps) => {\n const { inputRef, value, placeholder, onValueChange } = props;\n\n return (\n <Header variant=\"input\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" flexShrink={0}>\n <InputGroup startElement={<Search size={14} />} width=\"full\">\n <Input\n ref={inputRef}\n mx=\"xs\"\n value={value}\n placeholder={placeholder}\n aria-label={placeholder}\n autoComplete=\"off\"\n {...searchInputChromeProps}\n onChange={(event) => onValueChange(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n />\n </InputGroup>\n </Header>\n );\n};\n","import { Box, Icon, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { type ElementType, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport type { ListRowItem } from \"@/components/list-row/list-row.types\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { SearchableMenuInput } from \"./searchable-menu-input\";\n\ntype MenuRootProps = React.ComponentProps<typeof Menu.Root>;\ntype MenuContentProps = React.ComponentProps<typeof Menu.Content>;\n\nexport interface SearchableMenuItem {\n id: string;\n label: string;\n searchText?: string;\n secondaryLabel?: string;\n tooltipLabel?: ReactNode;\n icon?: ElementType;\n variant?: \"default\" | \"compact\" | \"full-width\";\n isDisabled?: boolean;\n isSelected?: boolean;\n onSelect?: () => void;\n}\n\nexport interface SearchableMenuParentList<T extends SearchableMenuItem> {\n items: T[];\n selectedLabel: string;\n selectedIcon?: ElementType;\n ariaLabel?: string;\n disabled?: boolean;\n emptyState?: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n searchPlaceholder?: string;\n showSearch?: boolean;\n contentTestId?: string;\n onSelect?: (item: T) => void;\n}\n\ninterface ListConfig<T extends SearchableMenuItem> {\n items: T[];\n filterItems: (items: T[], query: string) => T[];\n showSearch: boolean;\n searchPlaceholder: string;\n emptyState: ReactNode;\n contentTestId?: string;\n closeOnSelect: boolean;\n listId: string;\n}\n\ninterface SearchableMenuProps<T extends SearchableMenuItem> {\n trigger: ReactNode;\n items: T[];\n searchPlaceholder: string;\n emptyState: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n listId?: string;\n header?: ReactNode;\n width?: MenuContentProps[\"width\"];\n maxListHeight?: string;\n showSearch?: boolean;\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n lazyMount?: MenuRootProps[\"lazyMount\"];\n open?: MenuRootProps[\"open\"];\n positioning?: MenuRootProps[\"positioning\"];\n onOpenChange?: MenuRootProps[\"onOpenChange\"];\n onFocusOutside?: MenuRootProps[\"onFocusOutside\"];\n contentTestId?: string;\n portalled?: boolean;\n parentList?: SearchableMenuParentList<T>;\n}\n\nexport const filterSearchableMenuItems = <T extends SearchableMenuItem>(items: T[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return items;\n }\n\n return items.filter((item) => {\n const content = [item.label, item.searchText].filter(Boolean).join(\" \").toLowerCase();\n return content.includes(normalizedQuery);\n });\n};\n\nexport const shouldResetSearchableMenuQuery = (currentListId?: string, nextListId?: string) => {\n if (!currentListId || !nextListId) {\n return false;\n }\n\n return currentListId !== nextListId;\n};\n\nexport const resolveActiveListConfig = <T extends SearchableMenuItem>(\n isShowingParent: boolean,\n parentList: SearchableMenuParentList<T> | undefined,\n childConfig: ListConfig<T>,\n): ListConfig<T> => {\n if (!isShowingParent || !parentList) {\n return childConfig;\n }\n\n return {\n items: parentList.items,\n filterItems: parentList.filterItems ?? childConfig.filterItems,\n showSearch: parentList.showSearch ?? childConfig.showSearch,\n searchPlaceholder: parentList.searchPlaceholder ?? childConfig.searchPlaceholder,\n emptyState: parentList.emptyState ?? childConfig.emptyState,\n contentTestId: parentList.contentTestId ?? childConfig.contentTestId,\n closeOnSelect: false,\n listId: \"parent\",\n };\n};\n\nexport const SearchableMenu = <T extends SearchableMenuItem>(props: SearchableMenuProps<T>) => {\n const {\n trigger,\n items,\n searchPlaceholder,\n emptyState,\n filterItems = filterSearchableMenuItems,\n listId,\n header,\n width = \"260px\",\n maxListHeight = \"18rem\",\n showSearch = true,\n closeOnSelect = true,\n lazyMount = false,\n open,\n positioning,\n onOpenChange,\n onFocusOutside,\n contentTestId,\n portalled = true,\n parentList,\n } = props;\n const hasParentList = Boolean(parentList);\n const [internalOpen, setInternalOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeList, setActiveList] = useState<\"child\" | \"parent\">(\"child\");\n const inputRef = useRef<HTMLInputElement>(null);\n const isOpen = open ?? internalOpen;\n const isShowingParent = hasParentList && activeList === \"parent\";\n\n const childConfig: ListConfig<T> = {\n items,\n filterItems,\n showSearch,\n searchPlaceholder,\n emptyState,\n contentTestId,\n closeOnSelect,\n listId: hasParentList ? \"child\" : (listId ?? \"\"),\n };\n\n const config = resolveActiveListConfig(isShowingParent, parentList, childConfig);\n const filteredItems = config.filterItems(config.items, query);\n const previousListIdRef = useRef(config.listId);\n\n useEffect(() => {\n if (!isOpen) {\n previousListIdRef.current = config.listId;\n return;\n }\n\n if (shouldResetSearchableMenuQuery(previousListIdRef.current, config.listId)) {\n setQuery(\"\");\n }\n\n previousListIdRef.current = config.listId;\n }, [isOpen, config.listId]);\n\n useEffect(() => {\n if (!isOpen || !config.showSearch) {\n return;\n }\n\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [isOpen, config.showSearch]);\n\n const handleOpenChange: NonNullable<MenuRootProps[\"onOpenChange\"]> = (details) => {\n if (open === undefined) {\n setInternalOpen(details.open);\n }\n\n setQuery(\"\");\n\n if (details.open && hasParentList) {\n setActiveList(\"child\");\n }\n\n onOpenChange?.(details);\n };\n\n const handleMenuItemSelect = (details: { value: string }) => {\n if (!isShowingParent || !parentList) return;\n\n const item = parentList.items.find((i) => i.id === details.value);\n if (!item) return;\n\n parentList.onSelect?.(item);\n setActiveList(\"child\");\n };\n\n const renderIcon = (icon: ElementType | undefined) => (icon ? <Icon as={icon} boxSize=\"14px\" /> : undefined);\n\n const buildRowItem = (item: T): ListRowItem => ({\n id: item.id,\n label: item.label,\n description: item.secondaryLabel,\n icon: renderIcon(item.icon),\n disabled: item.isDisabled,\n tooltip: item.tooltipLabel,\n });\n\n const parentListHeader = parentList ? (\n <Header\n as=\"div\"\n role=\"menuitem\"\n aria-label={parentList.ariaLabel}\n aria-disabled={parentList.disabled || undefined}\n tabIndex={parentList.disabled ? -1 : 0}\n variant=\"narrow\"\n px=\"0\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n onPointerDownCapture={(event) => event.stopPropagation()}\n onClickCapture={(event) => {\n event.stopPropagation();\n if (parentList.disabled) return;\n setActiveList((current) => (current === \"child\" ? \"parent\" : \"child\"));\n }}\n >\n <ListRow\n asChild\n role=\"presentation\"\n variant=\"full-width\"\n id=\"__parent-toggle\"\n label={parentList.selectedLabel}\n icon={renderIcon(parentList.selectedIcon)}\n disabled={parentList.disabled}\n endContent={parentList.disabled ? undefined : <Icon as={ChevronDown} boxSize=\"14px\" />}\n />\n </Header>\n ) : null;\n\n const resolvedHeader = parentList ? parentListHeader : header;\n const shouldShowSeparator = Boolean(resolvedHeader) && !config.showSearch;\n\n const searchInput = config.showSearch ? (\n <SearchableMenuInput\n inputRef={inputRef}\n value={query}\n placeholder={config.searchPlaceholder}\n onValueChange={setQuery}\n />\n ) : null;\n\n const menuPositioner = (\n <Menu.Positioner>\n <Menu.Content w={width} bg=\"bg\" gap=\"0\" p=\"0\">\n {resolvedHeader}\n {searchInput}\n {shouldShowSeparator ? <Menu.Separator margin=\"0\" /> : null}\n <ScrollArea\n maxH={maxListHeight}\n data-testid={config.contentTestId}\n viewportProps={{ overscrollBehavior: \"contain\" }}\n p=\"0\"\n gap=\"0\"\n >\n {filteredItems.length > 0\n ? filteredItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.isDisabled} onClick={item.onSelect} asChild>\n <Box\n bg=\"transparent\"\n h=\"auto\"\n p=\"0\"\n _hover={{ bg: \"transparent\" }}\n _focus={{ bg: \"transparent\" }}\n _active={{ bg: \"transparent\" }}\n >\n <ListRow\n asChild\n {...buildRowItem(item)}\n role=\"presentation\"\n variant={item.variant ?? \"full-width\"}\n isSelected={item.isSelected}\n />\n </Box>\n </Menu.Item>\n ))\n : config.emptyState}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n );\n\n return (\n <Menu.Root\n lazyMount={lazyMount}\n closeOnSelect={config.closeOnSelect}\n open={open}\n positioning={positioning}\n onOpenChange={handleOpenChange}\n onFocusOutside={onFocusOutside}\n onSelect={hasParentList ? handleMenuItemSelect : undefined}\n >\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal disabled={!portalled}>{menuPositioner}</Portal>\n </Menu.Root>\n );\n};\n","import { IconButton, Menu } from \"@chakra-ui/react\";\nimport { SearchableMenu } from \"@/components/overlays/searchable-menu\";\nimport { ListRow } from \"./list-row\";\nimport type { ListRowAction } from \"./list-row.types\";\n\ninterface SearchableActionMenuProps {\n action: ListRowAction;\n}\n\nexport const SearchableActionMenu = (props: SearchableActionMenuProps) => {\n const { action } = props;\n const items = (action.menuItems ?? []).map((item) => ({\n id: item.id,\n label: item.label,\n searchText: [item.label, item.description].filter(Boolean).join(\" \"),\n tooltipLabel: item.description,\n variant: \"full-width\" as const,\n onSelect: () => item.onAction?.(),\n }));\n\n return (\n <SearchableMenu\n trigger={\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n }\n items={items}\n searchPlaceholder={action.searchPlaceholder ?? \"Search...\"}\n emptyState={\n <Menu.Item value=\"empty\" asChild>\n <ListRow asChild variant=\"full-width\" label={action.emptyMenuLabel ?? \"No results found\"} disabled />\n </Menu.Item>\n }\n onFocusOutside={(event) => event.preventDefault()}\n />\n );\n};\n","import { Box, HStack, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { ListRowAction } from \"./list-row.types\";\nimport { SearchableActionMenu } from \"./searchable-action-menu\";\n\ninterface RowActionsProps {\n actions: ListRowAction[];\n context: { sectionId?: string; nodeId?: string };\n alwaysVisible?: boolean;\n}\n\nconst keyedTooltip = (action: ListRowAction, child: ReactElement) => {\n if (action.tooltip) {\n return (\n <Tooltip key={action.id} content={action.tooltip} openDelay={300}>\n {child}\n </Tooltip>\n );\n }\n return <Fragment key={action.id}>{child}</Fragment>;\n};\n\nexport const RowActions = (props: RowActionsProps) => {\n const { actions, alwaysVisible = false, context } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity={alwaysVisible ? \"1\" : \"0\"}\n pointerEvents={alwaysVisible ? \"auto\" : \"none\"}\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n\n if (action.menuItems && action.menuItems.length > 0) {\n return keyedTooltip(\n action,\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Tooltip content={item.description} disabled={!item.description} openDelay={300}>\n <Menu.Item\n value={item.id}\n disabled={item.disabled || item.readOnly}\n onClick={() => {\n if (!item.readOnly) item.onAction?.();\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n {item.icon ? <Box>{item.icon as never}</Box> : null}\n <Box minW=\"0\">{item.label}</Box>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Tooltip>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>,\n );\n }\n\n return keyedTooltip(\n action,\n <IconButton\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.(context);\n }}\n >\n {action.icon}\n </IconButton>,\n );\n })}\n </HStack>\n );\n};\n","import { Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\n\nexport const createResourceRowActions = (item: ListRowItem, showContextMenuTrigger = true) => {\n const contextMenuItems = item.contextMenuItems ?? [];\n if (contextMenuItems.length === 0 || !showContextMenuTrigger) return item.actions ?? [];\n\n const inlineMenuItems =\n item.actions?.flatMap((action) =>\n action.menuItems?.length\n ? action.menuItems\n : [\n {\n id: action.id,\n label: action.label,\n icon: action.icon,\n onAction: () => action.onAction?.({ nodeId: item.id }),\n },\n ],\n ) ?? [];\n const inlineIds = new Set(inlineMenuItems.map((menuItem) => menuItem.id));\n const resourceMenuItems = contextMenuItems\n .filter((menuItem) => !inlineIds.has(menuItem.id))\n .map((menuItem, index) => ({\n ...menuItem,\n separatorBefore: menuItem.separatorBefore || (index === 0 && inlineMenuItems.length > 0),\n }));\n\n return [\n {\n id: \"resource-actions\",\n label: \"Resource actions\",\n icon: <Icon as={ChevronDown} boxSize=\"14px\" />,\n menuItems: [...inlineMenuItems, ...resourceMenuItems],\n },\n ];\n};\n\nconst resolveLabelColor = (input: {\n isEmptyStateVariant: boolean;\n isDisabled: boolean;\n tone: ListRowProps[\"tone\"];\n}) => {\n if (input.isEmptyStateVariant) return \"fg.menu-item.secondary\";\n if (input.isDisabled) return \"fg.muted\";\n if (input.tone === \"danger\") return \"red.500\";\n return \"fg\";\n};\n\nconst RowLabel = (props: { label: ListRowItem[\"label\"]; textStyle: string; color: string }) => {\n const { label, textStyle, color } = props;\n\n if (typeof label === \"string\") {\n return (\n <Text textStyle={textStyle} color={color} truncate>\n {label}\n </Text>\n );\n }\n\n return (\n <Box minW=\"0\" maxW=\"full\" overflow=\"hidden\" color={color}>\n {label}\n </Box>\n );\n};\n\nconst RowDescription = (props: {\n description: ListRowItem[\"description\"];\n textStyle: string;\n color: string;\n marginLeft: string;\n}) => {\n const { description, textStyle, color, marginLeft } = props;\n if (!description) return null;\n\n if (typeof description === \"string\") {\n return (\n <Text ml={marginLeft} textStyle={textStyle} color={color} truncate>\n {description}\n </Text>\n );\n }\n\n return (\n <Box ml={marginLeft} minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {description}\n </Box>\n );\n};\n\nconst RowContent = (props: RowContentProps) => {\n const { item, isExpanded, showChevron, isDisabled, variant, tone } = props;\n const isEmptyStateVariant = variant === \"empty-state\";\n const isDenseVariant =\n variant === \"compact\" ||\n variant === \"collection\" ||\n variant === \"full-width\" ||\n variant === \"tree\" ||\n isEmptyStateVariant;\n const labelTextStyle = isDenseVariant ? \"label/S/regular\" : \"label/M/regular\";\n const descriptionTextStyle = isDenseVariant ? \"label/XS\" : \"label/S/regular\";\n const descriptionMarginLeft = isDenseVariant ? \"0\" : \"2px\";\n const iconPx = variant === \"tree\" || variant === \"collection\" ? \"16px\" : \"14px\";\n const iconLabelGap = variant === \"collection\" ? \"compact\" : variant === \"tree\" ? \"1\" : \"2\";\n\n const labelColor = resolveLabelColor({\n isEmptyStateVariant,\n isDisabled,\n tone,\n });\n const iconColor = item.iconColor ?? (tone === \"danger\" ? \"red.500\" : \"fg.muted\");\n const descriptionColor = tone === \"danger\" ? \"red.400\" : \"fg.menu-item.secondary\";\n\n return (\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" overflow=\"hidden\" alignItems=\"center\">\n {showChevron ? (\n <Box color=\"fg.muted\" flexShrink={0} display=\"flex\" alignItems=\"center\">\n <Icon\n as={ChevronRight}\n boxSize=\"12px\"\n transform={isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Box>\n ) : null}\n <Stack gap=\"0\" minW=\"0\" flex=\"1\">\n <HStack gap={iconLabelGap} minW=\"0\" alignItems=\"center\">\n {item.icon ? (\n <Box\n color={iconColor}\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n boxSize={iconPx}\n fontSize={iconPx}\n lineHeight=\"1\"\n css={{ \"& > svg\": { width: iconPx, height: iconPx } }}\n >\n {item.icon}\n </Box>\n ) : null}\n {item.indicator ? (\n <Tooltip content={item.indicator.tooltip} disabled={!item.indicator.tooltip} openDelay={300}>\n <Box color={item.indicator.color ?? \"fg.muted\"} flexShrink={0}>\n {item.indicator.icon}\n </Box>\n </Tooltip>\n ) : null}\n <RowLabel label={item.label} textStyle={labelTextStyle} color={labelColor} />\n </HStack>\n <RowDescription\n description={item.description}\n textStyle={descriptionTextStyle}\n color={descriptionColor}\n marginLeft={descriptionMarginLeft}\n />\n </Stack>\n </HStack>\n );\n};\n\nexport const ListRowContent = (props: {\n item: ListRowItem;\n isExpanded: boolean;\n showChevron: boolean;\n isDisabled: boolean;\n tone: ListRowProps[\"tone\"];\n variant: ListRowProps[\"variant\"];\n showContextMenuTrigger: boolean;\n}) => {\n const {\n item,\n isDisabled,\n isExpanded,\n showChevron,\n tone = \"default\",\n variant = \"default\",\n showContextMenuTrigger,\n } = props;\n const actions = createResourceRowActions(item, showContextMenuTrigger);\n\n return (\n <>\n <RowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n {item.endContent ? (\n <Box flexShrink={0} color=\"fg.muted\" display=\"flex\" alignItems=\"center\">\n {item.endContent}\n </Box>\n ) : null}\n {actions.length > 0 ? (\n <RowActions\n actions={actions}\n context={{ nodeId: item.id }}\n alwaysVisible={showContextMenuTrigger && (item.contextMenuItems?.length ?? 0) > 0}\n />\n ) : null}\n </>\n );\n};\n","import { chakra } from \"@chakra-ui/react\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactElement,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n useState,\n} from \"react\";\nimport type { ListRowItem, ListRowProps } from \"./list-row.types\";\nimport { ListRowChrome } from \"./list-row-chrome\";\nimport { ListRowContent } from \"./list-row-content\";\n\ntype ListRowRootProps = ComponentPropsWithoutRef<typeof chakra.div>;\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\n};\n\nconst isFixedHeightDenseVariant = (variant: ListRowProps[\"variant\"]) =>\n variant === \"compact\" || variant === \"full-width\" || variant === \"empty-state\";\n\nconst resolveListRowSizing = (variant: ListRowProps[\"variant\"], hasDescription: boolean) => {\n if (variant === \"collection\" && !hasDescription) {\n return { rowHeight: \"collection-row\", minHeight: undefined };\n }\n\n if (isFixedHeightDenseVariant(variant) && !hasDescription) {\n return { rowHeight: \"1.75rem\", minHeight: undefined };\n }\n\n return {\n rowHeight: \"auto\",\n minHeight: variant === \"default\" ? \"2.25rem\" : \"1.75rem\",\n };\n};\n\nconst createRowBackgroundProps = (input: {\n isSelected: boolean;\n selectedBg: ListRowProps[\"selectedBg\"];\n hoverBg: ListRowProps[\"hoverBg\"];\n tone: NonNullable<ListRowProps[\"tone\"]>;\n variant: ListRowProps[\"variant\"];\n}) => ({\n bg: input.isSelected ? input.selectedBg : \"transparent\",\n _hover: (() => {\n if (input.variant === \"empty-state\") return { bg: \"transparent\" };\n if (input.isSelected) return { bg: input.selectedBg };\n if (input.tone === \"danger\")\n return {\n outline: \"1px solid\",\n outlineColor: \"red.500\",\n outlineOffset: \"-1px\",\n };\n return { bg: input.hoverBg };\n })(),\n _active: input.variant === \"empty-state\" ? { bg: \"transparent\" } : { bg: input.selectedBg },\n});\n\nconst createListRowRootProps = (input: {\n rootProps: ListRowRootProps;\n rowRole: ListRowRootProps[\"role\"];\n className?: string;\n isSelected: boolean;\n isExpanded: boolean;\n showChevron: boolean;\n rowHeight: ListRowRootProps[\"height\"];\n minHeight: ListRowRootProps[\"minHeight\"];\n verticalPadding: ListRowRootProps[\"py\"];\n paddingLeft: ListRowRootProps[\"pl\"];\n selectedBg: ListRowProps[\"selectedBg\"];\n hoverBg: ListRowProps[\"hoverBg\"];\n tone: NonNullable<ListRowProps[\"tone\"]>;\n isDisabled: boolean;\n variant: ListRowProps[\"variant\"];\n}) => ({\n ...input.rootProps,\n role: input.rowRole,\n \"aria-selected\": input.rootProps[\"aria-selected\"] ?? (input.rowRole === \"option\" ? input.isSelected : undefined),\n \"aria-expanded\": input.showChevron ? input.isExpanded : undefined,\n className: input.className ? `group ${input.className}` : \"group\",\n width: \"full\",\n minWidth: \"0\",\n maxWidth: \"full\",\n height: input.rowHeight,\n minHeight: input.minHeight,\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"space-between\" as const,\n gap: \"xs\" as const,\n px: \"sm\",\n py: input.verticalPadding,\n pl: input.paddingLeft,\n borderRadius: input.variant === \"full-width\" || input.variant === \"collection\" ? \"0\" : (\"xs\" as const),\n ...createRowBackgroundProps({ ...input }),\n cursor:\n input.variant === \"empty-state\"\n ? (\"default\" as const)\n : input.isDisabled\n ? (\"not-allowed\" as const)\n : (\"pointer\" as const),\n overflow: \"hidden\" as const,\n textAlign: \"left\" as const,\n color: \"inherit\",\n textDecoration: \"none\",\n});\n\nexport const ListRow = forwardRef<HTMLElement, ListRowProps>((props, ref) => {\n const {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n depth = 0,\n isSelected = false,\n isExpanded = false,\n showExpandToggle = false,\n showContextMenuTrigger = true,\n variant = \"default\",\n tone = \"default\",\n selectedBg = \"bg.active\",\n hoverBg = \"bg.hover\",\n asChild = false,\n className,\n role: roleProp,\n onToggleExpand,\n onPointerMove,\n draggable,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n onClick,\n onKeyDown,\n ...rootProps\n } = props;\n const [menuOpen, setMenuOpen] = useState(false);\n\n const item: ListRowItem = {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n };\n\n const dragProps = { draggable, onDragStart, onDragOver, onDragEnd, onDrop };\n\n const hasChildren = (item.children?.length ?? 0) > 0 || item.isContainer === true;\n const hasMenuItems = (item.menuItems?.length ?? 0) > 0;\n const hasActions = (item.actions?.length ?? 0) > 0 || (item.contextMenuItems?.length ?? 0) > 0;\n const showChevron = showExpandToggle && hasChildren;\n const isDisabled = item.disabled === true;\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasMenuItems) return;\n if (showChevron) {\n onToggleExpand?.();\n return;\n }\n if (onActivate) {\n onActivate();\n return;\n }\n item.onActivate?.();\n };\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n handleActivate();\n };\n\n const handleMenuClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n setMenuOpen((current) => !current);\n };\n\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n\n event.preventDefault();\n if (isDisabled) return;\n if (hasMenuItems) {\n setMenuOpen((current) => !current);\n return;\n }\n\n handleActivate();\n };\n\n const hasDescription = item.description !== undefined;\n const paddingLeft = computePaddingLeft(depth);\n const verticalPadding = variant === \"default\" || hasDescription ? \"xs\" : \"2xs\";\n const activationProps = hasMenuItems ? { onClick: handleMenuClick } : { onClick: handleClick };\n const { rowHeight, minHeight } = resolveListRowSizing(variant, hasDescription);\n const rowRole = roleProp ?? (hasMenuItems ? \"button\" : \"option\");\n\n const rowProps = createListRowRootProps({\n rootProps,\n rowRole,\n className,\n isSelected,\n isExpanded,\n showChevron,\n rowHeight,\n minHeight,\n verticalPadding,\n paddingLeft,\n selectedBg,\n hoverBg,\n tone,\n isDisabled,\n variant,\n });\n\n const content = (\n <ListRowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n showContextMenuTrigger={showContextMenuTrigger}\n />\n );\n\n const wrap = (children: ReactElement) => (\n <ListRowChrome\n item={item}\n menuOpen={menuOpen}\n onMenuOpenChange={setMenuOpen}\n onMenuSelect={(menuItem) => {\n setMenuOpen(false);\n menuItem.onAction?.();\n }}\n >\n {children}\n </ListRowChrome>\n );\n\n if (asChild) {\n return wrap(\n <chakra.div ref={ref} {...rowProps} {...dragProps} {...activationProps} onPointerMove={onPointerMove}>\n {content}\n </chakra.div>,\n );\n }\n if (item.href && !showChevron && !isDisabled && !hasMenuItems) {\n return wrap(\n <chakra.a\n ref={ref}\n href={item.href}\n {...(rowProps as object)}\n {...dragProps}\n onClick={handleClick}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.a>,\n );\n }\n\n if (hasActions) {\n return wrap(\n <chakra.div\n ref={ref}\n aria-disabled={isDisabled || undefined}\n {...rowProps}\n {...dragProps}\n {...activationProps}\n tabIndex={rootProps.tabIndex ?? 0}\n onKeyDown={handleKeyDown}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.div>,\n );\n }\n\n return wrap(\n <chakra.button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...(rowProps as object)}\n {...dragProps}\n {...activationProps}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.button>,\n );\n});\n"],"names":["ResourceMenuContent","props","$","_c","actions","contentBackground","contentMinWidth","t0","map","_temp","t1","Portal","jsx","Menu","ResourceActionMenu","children","positioning","t2","closeOnSelect","undefined","t3","placement","length","t4","t5","t6","ResourceContextMenu","keepMountedWhenEmpty","t7","action","jsxs","Fragment","separatorBefore","key","isDisabled","ListRow","label","icon","endContent","onClick","ListRowMenuItemIcon","item","Icon","Box","ListRowMenu","items","onOpenChange","onSelect","open","Symbol","for","mainAxis","offset","details","id","disabled","readOnly","opacity","cursor","HStack","description","Stack","Text","createResourceContextActions","entry","onAction","ListRowChrome","menuOpen","onMenuOpenChange","onMenuSelect","menuItems","menuPlacement","tooltip","Tooltip","row","contextMenuItems","headerVariantStyles","main","h","px","narrow","input","Header","React","forwardRef","ref","rest","variant","searchInputChromeProps","bg","border","borderColor","borderRadius","boxShadow","transition","_hover","_active","_focus","outline","_focusVisible","SearchableMenuInput","inputRef","value","placeholder","onValueChange","Search","event","target","InputGroup","Input","event_0","stopPropagation","filterSearchableMenuItems","query","normalizedQuery","trim","toLowerCase","filter","searchText","Boolean","join","includes","shouldResetSearchableMenuQuery","currentListId","nextListId","resolveActiveListConfig","isShowingParent","parentList","childConfig","filterItems","showSearch","searchPlaceholder","emptyState","contentTestId","listId","SearchableMenu","trigger","header","width","maxListHeight","lazyMount","onFocusOutside","portalled","hasParentList","internalOpen","setInternalOpen","useState","setQuery","activeList","setActiveList","useRef","isOpen","config","filteredItems","previousListIdRef","useEffect","current","timeout","setTimeout","focus","clearTimeout","t8","handleOpenChange","t9","details_0","find","i","handleMenuItemSelect","renderIcon","t10","item_0","secondaryLabel","tooltipLabel","buildRowItem","t11","ariaLabel","_temp2","_temp3","selectedLabel","selectedIcon","ChevronDown","resolvedHeader","shouldShowSeparator","searchInput","t12","t13","t14","t15","t16","t17","T0","ScrollArea","t18","overscrollBehavior","t19","t20","t21","item_1","isSelected","t22","t23","Content","t24","Positioner","menuPositioner","t25","t26","t27","t28","t29","SearchableActionMenu","IconButton","emptyMenuLabel","preventDefault","keyedTooltip","child","RowActions","alwaysVisible","context","pointerEvents","createResourceRowActions","showContextMenuTrigger","inlineMenuItems","flatMap","nodeId","inlineIds","Set","menuItem","resourceMenuItems","has","index","resolveLabelColor","isEmptyStateVariant","tone","RowLabel","textStyle","color","RowDescription","marginLeft","RowContent","isExpanded","showChevron","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","iconPx","iconLabelGap","labelColor","iconColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","computePaddingLeft","depth","isFixedHeightDenseVariant","resolveListRowSizing","hasDescription","rowHeight","minHeight","createRowBackgroundProps","selectedBg","outlineColor","outlineOffset","hoverBg","createListRowRootProps","rootProps","role","rowRole","className","minWidth","maxWidth","display","alignItems","justifyContent","gap","py","verticalPadding","pl","paddingLeft","overflow","textAlign","textDecoration","isContainer","isNavigable","href","navigationIntent","onActivate","showExpandToggle","asChild","roleProp","onToggleExpand","onPointerMove","draggable","onDragStart","onDragOver","onDragEnd","onDrop","onKeyDown","setMenuOpen","dragProps","hasChildren","hasMenuItems","hasActions","handleActivate","defaultPrevented","handleClick","handleMenuClick","event_1","handleKeyDown","activationProps","rowProps","content","children_0","wrap","chakra","tabIndex","current_0"],"mappings":"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"}
|