@pstdio/ui 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/dist/{MermaidComponent-DBJsTOmj.js → MermaidComponent-BCMQqPqu.js} +11 -11
  2. package/dist/{MermaidComponent-DBJsTOmj.js.map → MermaidComponent-BCMQqPqu.js.map} +1 -1
  3. package/dist/browser-storage-BinyFNJX.js +40 -0
  4. package/dist/browser-storage-BinyFNJX.js.map +1 -0
  5. package/dist/chat-ui.js +1188 -1147
  6. package/dist/chat-ui.js.map +1 -1
  7. package/dist/checkbox-D5AzFRlb.js +70 -0
  8. package/dist/checkbox-D5AzFRlb.js.map +1 -0
  9. package/dist/components/chat-ui/components/ai-conversation.d.ts +1 -1
  10. package/dist/components/chat-ui/components/ai-message.d.ts +1 -1
  11. package/dist/components/chat-ui/components/ai-response.d.ts +0 -1
  12. package/dist/components/chat-ui/components/attachment-list.d.ts +1 -1
  13. package/dist/components/chat-ui/components/auto-scroll.d.ts +27 -0
  14. package/dist/components/chat-ui/components/chat-message-animation.d.ts +22 -0
  15. package/dist/components/chat-ui/components/timeline.d.ts +0 -2
  16. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +0 -1
  17. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -12
  18. package/dist/components/chat-ui/tool-rendering/shared.d.ts +1 -1
  19. package/dist/components/chat-ui/tool-rendering/types.d.ts +1 -2
  20. package/dist/components/command-palette/index.d.ts +4 -0
  21. package/dist/components/data-renderer/data-renderer-board.d.ts +1 -1
  22. package/dist/components/data-renderer/data-renderer-card.d.ts +1 -1
  23. package/dist/components/data-renderer/data-renderer-list.d.ts +1 -1
  24. package/dist/components/data-renderer/data-renderer.d.ts +1 -1
  25. package/dist/components/data-renderer/index.d.ts +18 -0
  26. package/dist/components/data-renderer/types.d.ts +0 -6
  27. package/dist/components/diff-viewer/diff-card.d.ts +1 -0
  28. package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +0 -19
  29. package/dist/components/diff-viewer/diff-drawer.d.ts +1 -0
  30. package/dist/components/diff-viewer/index.d.ts +2 -0
  31. package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +7 -3
  32. package/dist/components/internal/style-guide.d.ts +14 -0
  33. package/dist/components/internal/token-editor-controls.d.ts +8 -0
  34. package/dist/components/internal/token-editor-data.d.ts +40 -0
  35. package/dist/components/internal/token-editor-state.d.ts +22 -0
  36. package/dist/components/layout/index.d.ts +6 -0
  37. package/dist/components/list-row/list-row.types.d.ts +1 -1
  38. package/dist/components/overlays/index.d.ts +12 -0
  39. package/dist/components/{search-modal-content.d.ts → overlays/search-modal-content.d.ts} +1 -1
  40. package/dist/components/{searchable-menu.d.ts → overlays/searchable-menu.d.ts} +1 -1
  41. package/dist/components/param-editor/index.d.ts +23 -0
  42. package/dist/components/param-editor/inputs/action-input.d.ts +13 -0
  43. package/dist/components/param-editor/inputs/anchor-grid-input.d.ts +12 -0
  44. package/dist/components/param-editor/inputs/anchor-grid.d.ts +4 -0
  45. package/dist/components/param-editor/inputs/file-accept.d.ts +22 -0
  46. package/dist/components/param-editor/inputs/file-drop-input.d.ts +14 -0
  47. package/dist/components/param-editor/inputs/numeric-value.d.ts +6 -0
  48. package/dist/components/param-editor/inputs/range-input.d.ts +17 -0
  49. package/dist/components/param-editor/inputs/range-value.d.ts +5 -0
  50. package/dist/components/param-editor/inputs/resource-input-chips.d.ts +15 -0
  51. package/dist/components/param-editor/inputs/resource-input.d.ts +18 -0
  52. package/dist/components/param-editor/inputs/segmented-input.d.ts +14 -0
  53. package/dist/components/param-editor/inputs/slider-marks.d.ts +5 -0
  54. package/dist/components/param-editor/inputs/vector-input.d.ts +17 -0
  55. package/dist/components/param-editor/inputs/vector-value.d.ts +7 -0
  56. package/dist/components/param-editor/param-editor-control-item.d.ts +15 -0
  57. package/dist/components/param-editor/param-editor-control-list.d.ts +5 -0
  58. package/dist/components/param-editor/param-editor-field-label.d.ts +1 -0
  59. package/dist/components/param-editor/param-editor-field.d.ts +11 -0
  60. package/dist/components/param-editor/param-editor-inline-group.d.ts +5 -0
  61. package/dist/components/param-editor/param-editor-section.d.ts +16 -0
  62. package/dist/components/param-editor/param-editor.d.ts +2 -1
  63. package/dist/components/param-editor/param-editor.types.d.ts +101 -19
  64. package/dist/components/{breadcrumb.d.ts → primitives/breadcrumb.d.ts} +1 -1
  65. package/dist/components/primitives/index.d.ts +28 -0
  66. package/dist/components/{number-input.d.ts → primitives/number-input.d.ts} +0 -2
  67. package/dist/components/{session-indicator.d.ts → primitives/session-indicator.d.ts} +2 -1
  68. package/dist/components/{tooltip.d.ts → primitives/tooltip.d.ts} +0 -1
  69. package/dist/components/rich-text/prompt-input/commands.d.ts +0 -17
  70. package/dist/components/rich-text/prompt-input/events.d.ts +0 -13
  71. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.d.ts +1 -2
  72. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +1 -2
  73. package/dist/components/rich-text/prompt-input/utils.d.ts +1 -2
  74. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +0 -1
  75. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  76. package/dist/components/sidebar/sidebar.types.d.ts +1 -1
  77. package/dist/components/tab-strip/tab-visibility-filter.d.ts +1 -1
  78. package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
  79. package/dist/components/tag-editor/tag-editor.types.d.ts +1 -1
  80. package/dist/components/terminal/bind-session.d.ts +33 -0
  81. package/dist/components/terminal/index.d.ts +6 -0
  82. package/dist/components/terminal/scripted-bridge.d.ts +35 -0
  83. package/dist/components/terminal/terminal-contract.d.ts +22 -0
  84. package/dist/components/terminal/terminal-theme.d.ts +12 -0
  85. package/dist/components/terminal/terminal.d.ts +45 -0
  86. package/dist/components/terminal/types.d.ts +35 -0
  87. package/dist/components/terminal/use-terminal-session.d.ts +21 -0
  88. package/dist/components/tree-list/tree-list-order-filter.d.ts +1 -2
  89. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +1 -1
  90. package/dist/components/tree-list/tree-list.d.ts +1 -1
  91. package/dist/data-renderer.js +1669 -0
  92. package/dist/data-renderer.js.map +1 -0
  93. package/dist/diff-editor-BnfV8cYB.js +182 -0
  94. package/dist/diff-editor-BnfV8cYB.js.map +1 -0
  95. package/dist/diff.js +1313 -0
  96. package/dist/diff.js.map +1 -0
  97. package/dist/empty-state-Bo4HVrgr.js +34 -0
  98. package/dist/empty-state-Bo4HVrgr.js.map +1 -0
  99. package/dist/foundations/gallery/gallery-frame.d.ts +21 -0
  100. package/dist/foundations/gallery/sections/badges-section.d.ts +1 -0
  101. package/dist/foundations/gallery/sections/buttons-section.d.ts +1 -0
  102. package/dist/foundations/gallery/sections/composite-chat-section.d.ts +1 -0
  103. package/dist/foundations/gallery/sections/composites-section.d.ts +1 -0
  104. package/dist/foundations/gallery/sections/feedback-section.d.ts +1 -0
  105. package/dist/foundations/gallery/sections/input-authoring-card.d.ts +1 -0
  106. package/dist/foundations/gallery/sections/inputs-section.d.ts +1 -0
  107. package/dist/foundations/gallery/sections/layout-section.d.ts +1 -0
  108. package/dist/foundations/gallery/sections/navigation-identity-section.d.ts +1 -0
  109. package/dist/foundations/gallery/sections/overlays-section.d.ts +1 -0
  110. package/dist/foundations/gallery/sections/panels-section.d.ts +1 -0
  111. package/dist/foundations/gallery/sections/param-editor-composite-card.d.ts +1 -0
  112. package/dist/foundations/gallery/sections/settings-composite-cards.d.ts +1 -0
  113. package/dist/index.d.ts +11 -84
  114. package/dist/index.js +3570 -7569
  115. package/dist/index.js.map +1 -1
  116. package/dist/list-row-mi3Hn-Um.js +740 -0
  117. package/dist/list-row-mi3Hn-Um.js.map +1 -0
  118. package/dist/mermaid-renderer-DZo3qj6D.js +425 -0
  119. package/dist/mermaid-renderer-DZo3qj6D.js.map +1 -0
  120. package/dist/mermaid.js +5 -0
  121. package/dist/mermaid.js.map +1 -0
  122. package/dist/radio-cLMEBBZk.js +76 -0
  123. package/dist/radio-cLMEBBZk.js.map +1 -0
  124. package/dist/resource-badge-qCWHP-wQ.js +99 -0
  125. package/dist/resource-badge-qCWHP-wQ.js.map +1 -0
  126. package/dist/{rich-message-DNSEhxXh.js → rich-message-DBf_5YlW.js} +462 -481
  127. package/dist/rich-message-DBf_5YlW.js.map +1 -0
  128. package/dist/rich-text.js +300 -299
  129. package/dist/rich-text.js.map +1 -1
  130. package/dist/scroll-area-BMbg1WcD.js +91 -0
  131. package/dist/scroll-area-BMbg1WcD.js.map +1 -0
  132. package/dist/style.css +1 -1
  133. package/dist/terminal.js +339 -0
  134. package/dist/terminal.js.map +1 -0
  135. package/dist/theme/global.d.ts +3 -0
  136. package/dist/theme/recipes/badge.d.ts +50 -0
  137. package/dist/theme/recipes/button.d.ts +24 -19
  138. package/dist/theme/recipes/color-picker.d.ts +1 -0
  139. package/dist/theme/recipes/dialog.d.ts +1 -1
  140. package/dist/theme/recipes/drawer.d.ts +1 -1
  141. package/dist/theme/recipes/input.d.ts +55 -0
  142. package/dist/theme/recipes/number-input.d.ts +98 -0
  143. package/dist/theme/recipes/tabs.d.ts +49 -28
  144. package/dist/theme/recipes/textarea.d.ts +62 -1
  145. package/dist/theme/recipes/timeline.d.ts +74 -0
  146. package/dist/theme/tokens/borders.d.ts +0 -3
  147. package/dist/theme/tokens/colors.d.ts +100 -70
  148. package/dist/{theme-25P7ij4C.js → theme-CJBYBJaA.js} +1194 -315
  149. package/dist/theme-CJBYBJaA.js.map +1 -0
  150. package/dist/theme-preference-DOzHx64J.js +123 -0
  151. package/dist/theme-preference-DOzHx64J.js.map +1 -0
  152. package/dist/theme.js +1 -1
  153. package/dist/tree-list-CcuZMLS5.js +930 -0
  154. package/dist/tree-list-CcuZMLS5.js.map +1 -0
  155. package/dist/workspace-badge-Fuo-1zPj.js +314 -0
  156. package/dist/workspace-badge-Fuo-1zPj.js.map +1 -0
  157. package/package.json +23 -3
  158. package/dist/components/file-tree-helpers.d.ts +0 -8
  159. package/dist/components/open-source-notices-screen.d.ts +0 -20
  160. package/dist/components/param-editor/input-group.d.ts +0 -10
  161. package/dist/components/rich-text/shared/plugins/MermaidPlugin/index.d.ts +0 -1
  162. package/dist/components/rich-text/shared/plugins/TableActionMenuPlugin/TableActionMenuPlugin.d.ts +0 -5
  163. package/dist/components/rich-text/shared/plugins/TableCellResizerPlugin/TableCellResizerPlugin.d.ts +0 -2
  164. package/dist/components/rich-text/theme/report-theme.d.ts +0 -3
  165. package/dist/components/style-guide-data.d.ts +0 -40
  166. package/dist/components/style-guide.d.ts +0 -1
  167. package/dist/mermaid-renderer-CPGj6vsb.js +0 -570
  168. package/dist/mermaid-renderer-CPGj6vsb.js.map +0 -1
  169. package/dist/radio-DJtQY9po.js +0 -286
  170. package/dist/radio-DJtQY9po.js.map +0 -1
  171. package/dist/resource-badge-CeJTOn8F.js +0 -188
  172. package/dist/resource-badge-CeJTOn8F.js.map +0 -1
  173. package/dist/rich-message-DNSEhxXh.js.map +0 -1
  174. package/dist/theme-25P7ij4C.js.map +0 -1
  175. package/dist/utils/formats.d.ts +0 -7
  176. /package/dist/components/{palette-filter.d.ts → command-palette/palette-filter.d.ts} +0 -0
  177. /package/dist/components/{palette-list.d.ts → command-palette/palette-list.d.ts} +0 -0
  178. /package/dist/components/{palette-shortcut.d.ts → command-palette/palette-shortcut.d.ts} +0 -0
  179. /package/dist/components/{palette.d.ts → command-palette/palette.d.ts} +0 -0
  180. /package/dist/components/{code-editor.d.ts → diff-viewer/code-editor.d.ts} +0 -0
  181. /package/dist/components/{column-file-browser.d.ts → file-browser/column-file-browser.d.ts} +0 -0
  182. /package/dist/components/{performance-panel.d.ts → internal/performance-panel.d.ts} +0 -0
  183. /package/dist/components/{header.d.ts → layout/header.d.ts} +0 -0
  184. /package/dist/components/{horizontal-menu-stack.d.ts → layout/horizontal-menu-stack.d.ts} +0 -0
  185. /package/dist/components/{item-section.d.ts → layout/item-section.d.ts} +0 -0
  186. /package/dist/components/{panel-header.constants.d.ts → layout/panel-header.constants.d.ts} +0 -0
  187. /package/dist/components/{resizable-split-layout.d.ts → layout/resizable-split-layout.d.ts} +0 -0
  188. /package/dist/components/{resizable-split-layout.handle.d.ts → layout/resizable-split-layout.handle.d.ts} +0 -0
  189. /package/dist/components/{attached-panel.d.ts → overlays/attached-panel.d.ts} +0 -0
  190. /package/dist/components/{bubble-button.d.ts → overlays/bubble-button.d.ts} +0 -0
  191. /package/dist/components/{bubble-panel.d.ts → overlays/bubble-panel.d.ts} +0 -0
  192. /package/dist/components/{delete-confirmation-modal.d.ts → overlays/delete-confirmation-modal.d.ts} +0 -0
  193. /package/dist/components/{repo-picker-dialog.d.ts → overlays/repo-picker-dialog.d.ts} +0 -0
  194. /package/dist/components/{resource-context-menu.d.ts → overlays/resource-context-menu.d.ts} +0 -0
  195. /package/dist/components/param-editor/{color-input.d.ts → inputs/color-input.d.ts} +0 -0
  196. /package/dist/components/param-editor/{date-input.d.ts → inputs/date-input.d.ts} +0 -0
  197. /package/dist/components/param-editor/{horizontal-text-input.d.ts → inputs/horizontal-text-input.d.ts} +0 -0
  198. /package/dist/components/param-editor/{number-input.d.ts → inputs/number-input.d.ts} +0 -0
  199. /package/dist/components/param-editor/{selection-input.d.ts → inputs/selection-input.d.ts} +0 -0
  200. /package/dist/components/param-editor/{text-input.d.ts → inputs/text-input.d.ts} +0 -0
  201. /package/dist/components/{alert.d.ts → primitives/alert.d.ts} +0 -0
  202. /package/dist/components/{checkbox.d.ts → primitives/checkbox.d.ts} +0 -0
  203. /package/dist/components/{content-placeholder.d.ts → primitives/content-placeholder.d.ts} +0 -0
  204. /package/dist/components/{empty-state.d.ts → primitives/empty-state.d.ts} +0 -0
  205. /package/dist/components/{error-boundary.d.ts → primitives/error-boundary.d.ts} +0 -0
  206. /package/dist/components/{icon-color-picker.d.ts → primitives/icon-color-picker.d.ts} +0 -0
  207. /package/dist/components/{info-card.d.ts → primitives/info-card.d.ts} +0 -0
  208. /package/dist/components/{integration-card.d.ts → primitives/integration-card.d.ts} +0 -0
  209. /package/dist/components/{radio.d.ts → primitives/radio.d.ts} +0 -0
  210. /package/dist/components/{resource-badge.d.ts → primitives/resource-badge.d.ts} +0 -0
  211. /package/dist/components/{scroll-area.d.ts → primitives/scroll-area.d.ts} +0 -0
  212. /package/dist/components/{simple-card.d.ts → primitives/simple-card.d.ts} +0 -0
  213. /package/dist/components/{slider.d.ts → primitives/slider.d.ts} +0 -0
  214. /package/dist/components/{switch.d.ts → primitives/switch.d.ts} +0 -0
  215. /package/dist/components/{toaster.d.ts → primitives/toaster.d.ts} +0 -0
  216. /package/dist/components/{workspace-badge.d.ts → primitives/workspace-badge.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-list-CcuZMLS5.js","sources":["../src/components/layout/resizable-split-layout.handle.tsx","../src/components/layout/resizable-split-layout.tsx","../src/components/tree-list/tree-list-model.ts","../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":["import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\n\nexport type ResizableSplitSide = \"left\" | \"right\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.emphasized\" } };\nconst RESIZE_HANDLE_WIDTH = \"12px\";\n\ninterface ResizeHandleProps {\n bounds: { minSize: number; maxSize: number };\n contentPanelId: string;\n resizablePanelId: string;\n resizeLabel: string;\n resolvedPanelWidth: 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 bounds,\n contentPanelId,\n resizablePanelId,\n resizeLabel,\n resolvedPanelWidth,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n return (\n <Box\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation=\"vertical\"\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={0}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelWidth)}\n tabIndex={0}\n position=\"relative\"\n zIndex=\"1\"\n flex={`0 0 ${RESIZE_HANDLE_WIDTH}`}\n w={RESIZE_HANDLE_WIDTH}\n mx=\"-6px\"\n cursor=\"col-resize\"\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={{\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border.subtle\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n w: \"2px\",\n },\n }}\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 { type ResizableSplitSide, ResizeHandle } from \"@/components/layout/resizable-split-layout.handle\";\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 showResizeSeparator?: boolean;\n onSizeChange?: (width: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_WIDTH = 1200;\nconst KEYBOARD_RESIZE_STEP = 24;\nconst MIN_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_COLLAPSE_THRESHOLD_PX = 160;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveRootWidth = (rootWidth: number) => (rootWidth > 0 ? rootWidth : FALLBACK_ROOT_WIDTH);\n\nconst resolveCollapseThreshold = (minSizePx: number) =>\n clamp(minSizePx / 2, MIN_COLLAPSE_THRESHOLD_PX, MAX_COLLAPSE_THRESHOLD_PX);\n\nconst resolveResizableBoundsPx = (input: {\n rootWidth: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n}) => {\n const rootWidth = resolveRootWidth(input.rootWidth);\n const maxFromContent = Math.max(0, rootWidth - input.contentMinSizePx);\n const configuredMax = input.maxSizePx ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSizePx, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst getElementWidth = (element: HTMLDivElement | null) => element?.getBoundingClientRect().width ?? 0;\n\nconst applyPanelWidthToElement = (panel: HTMLDivElement | null, width: number) => {\n if (!panel) return;\n\n panel.style.width = `${width}px`;\n panel.style.flexBasis = `${width}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = width > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\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 showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\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 lastWidthRef = useRef(defaultSizePx);\n const [panelWidth, setPanelWidth] = useState(defaultSizePx);\n const [rootWidth, setRootWidth] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const collapseThresholdPx = resolveCollapseThreshold(minSizePx);\n const resolvedPanelWidth = collapsed ? 0 : clamp(panelWidth, 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 updateRootWidth = () => {\n setRootWidth(element.getBoundingClientRect().width);\n };\n\n updateRootWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootWidth);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n lastWidthRef.current = defaultSizePx;\n setPanelWidth(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelWidth = (width: number) => {\n applyPanelWidthToElement(resizablePanelRef.current, width);\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 applyPanelWidthToElement(resizablePanelRef.current, resolvedPanelWidth);\n }, [resolvedPanelWidth]);\n\n const commitPanelWidth = (width: number) => {\n const rootWidth = getElementWidth(rootRef.current);\n const nextBounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const nextWidth = clamp(width, nextBounds.minSize, nextBounds.maxSize);\n\n lastWidthRef.current = nextWidth;\n setPanelWidth(nextWidth);\n applyPanelWidth(nextWidth);\n onSizeChange?.(nextWidth);\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 rootWidth = getElementWidth(rootRef.current);\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const startX = event.clientX;\n const startWidth = collapsed ? 0 : getElementWidth(resizablePanelRef.current) || lastWidthRef.current;\n const direction = resizableSide === \"left\" ? 1 : -1;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextWidth = startWidth === 0 ? 0 : clamp(startWidth, 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 schedulePanelWidth = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelWidth(nextWidth);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const rawWidth = startWidth + (moveEvent.clientX - startX) * direction;\n nextCollapsed = collapsible && rawWidth <= collapseThresholdPx;\n nextWidth = nextCollapsed ? 0 : clamp(rawWidth, bounds.minSize, bounds.maxSize);\n if (!nextCollapsed) lastWidthRef.current = nextWidth;\n schedulePanelWidth();\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 applyPanelWidth(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelWidth(nextWidth);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = \"col-resize\";\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 direction = resizableSide === \"left\" ? 1 : -1;\n const width = lastWidthRef.current;\n\n if (collapsed && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelWidth(width);\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n commitPanelWidth(width - KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n commitPanelWidth(width + KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelWidth(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelWidth(bounds.maxSize);\n }\n };\n\n const resizablePanelNode = (\n <Flex\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelWidth}px`}\n w={`${resolvedPanelWidth}px`}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\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 = collapsed ? null : (\n <ResizeHandle\n bounds={bounds}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeLabel={resizeLabel}\n resolvedPanelWidth={resolvedPanelWidth}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n );\n\n return (\n <Flex ref={rootRef} direction=\"row\" h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n {resizableSide === \"left\" ? (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n ) : (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n )}\n </Flex>\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","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\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}\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 } = props;\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 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 { 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 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 gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\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 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 (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 children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n attributes: ReturnType<typeof useSortable>[\"attributes\"];\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 });\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 attributes: sortable.attributes,\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)}>\n {({ setNodeRef, attributes, 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 {...attributes} {...listeners}>\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}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\" {...attributes} {...listeners}>\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, ReactNode, RefObject } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\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 sidebars. */\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 // 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}\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 } = 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 />\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 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 })}\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 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 })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\ninterface TreeListBackgroundProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n}\n\n// Renders the right-click target as a layer behind the rows so empty back-area\n// clicks open the menu while item rows (painted above) keep their own handling.\n// `flex` lets the layer grow to fill a flex-column host (e.g. a scroll area);\n// `minH=full` covers definite-height hosts. Either way the absolute child fills\n// the wrapper, so the whole back area is right-clickable, not just the rows.\nconst 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\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 = (\n <Box px=\"xs\" w=\"full\" minW=\"0\" maxW=\"full\">\n {content}\n </Box>\n );\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":["RESIZE_SEPARATOR_HOVER_STYLE","_before","bg","RESIZE_HANDLE_WIDTH","ResizeHandle","props","$","_c","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","t0","t1","maxSize","Math","round","t2","t3","t4","content","position","top","bottom","insetInlineStart","w","transform","t5","undefined","t6","Symbol","for","t7","jsx","Box","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","value","min","max","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","input","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","element","getBoundingClientRect","width","applyPanelWidthToElement","panel","style","flexBasis","flexGrow","flexShrink","display","clearPanelInlineStyles","ResizableSplitLayout","contentPanel","controlledCollapsed","onCollapsedChange","onSizeChange","resizablePanel","rest","resizableSide","defaultSizePx","collapsed","collapsible","id","useId","rootRef","useRef","resizablePanelRef","contentPanelRef","cleanupDragRef","_temp","lastWidthRef","panelWidth","setPanelWidth","useState","setRootWidth","internalCollapsed","setInternalCollapsed","collapseThresholdPx","t8","t9","current","updateRootWidth","ResizeObserver","observer","observe","disconnect","useEffect","t10","t11","t12","t13","t14","applyPanelWidth","t15","t16","t17","width_0","rootWidth_0","nextBounds","nextWidth","commitPanelWidth","t18","nextCollapsed","setCollapsed","t19","event","button","preventDefault","resizeHandle","currentTarget","rootWidth_1","bounds_0","startX","clientX","startWidth","direction","previousCursor","document","body","cursor","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","pointerEvents","schedulePanelWidth","window","requestAnimationFrame","handlePointerMove","moveEvent","rawWidth","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","_temp2","setPointerCapture","addEventListener","once","handleResizeStart","t20","event_0","direction_0","width_1","key","handleResizeKeyDown","t21","t22","t23","t24","t25","Flex","resizablePanelNode","t26","contentPanelNode","t27","resizeTrigger","t28","jsxs","Fragment","t29","isInList","values","includes","isActiveNode","activeNodeId","Array","isArray","isNavigableNode","node","isNavigable","navigationIntent","getNodeChildren","children","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","TreeListNodeRow","rowVariant","nodeGap","linkComponent","LinkComponent","tabIndex","onFocus","onNavigate","onToggleNode","hasChildren","isActive","isDisabled","canLink","Boolean","href","intent","onActivate","handleActivate","actions","action","onAction","context","listRowItem","nodeRowVariant","rowItem","depth","variant","isSelected","isExpanded","showExpandToggle","onToggleExpand","rowProps","ListRow","Stack","TreeListSectionActions","opacity","menuItems","SearchableActionMenu","Menu","IconButton","icon","stopPropagation","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","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","sortable","useSortable","attributes","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","_temp3","_temp4","topLevelNodeIds","_temp5","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","bb0","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","result","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","focus","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","height","getTotalSize","getVirtualItems","virtualItem","measureElement","start","StackTreeList","virtualize","TreeListBackground","ResourceContextMenu","TreeList","draggable","paddedContent","backgroundContextActions"],"mappings":"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"}
@@ -0,0 +1,314 @@
1
+ import { jsx as a, jsxs as W, Fragment as Q } from "react/jsx-runtime";
2
+ import { c as T } from "react/compiler-runtime";
3
+ import { Popover as G, IconButton as R, Text as D, Grid as q, GridItem as F, Icon as B, Badge as U, Spinner as J, HStack as X, Box as N } from "@chakra-ui/react";
4
+ import { Circle as M, Bug as V, Sparkles as Y, BookOpen as Z, Wrench as ee, Gauge as le, Feather as te, Scale as ne, Layers as oe, AlertTriangle as ie, Star as re, Flag as ae, Flame as se, Lightbulb as ce, Shield as ue, Eye as de, Clock as fe, CheckCircle as pe, Tag as ge, Code as be, ChartColumnIncreasing as he, CircleQuestionMark as me, ShieldAlert as ke, LoaderCircle as ve, CircleCheck as Se, CircleAlert as xe, CircleStop as Ce, CirclePause as Ie, ClockAlert as we, CircleDot as ye, CircleDashed as We, ChevronDown as Te, GitCommitIcon as Ae, GitBranchIcon as _e } from "lucide-react";
5
+ import { T as j } from "./scroll-area-BMbg1WcD.js";
6
+ const ze = ["gray", "red", "orange", "yellow", "green", "teal", "blue", "cyan", "purple", "pink"], H = [{
7
+ value: "circle",
8
+ label: "circle",
9
+ icon: M
10
+ }, {
11
+ value: "bug",
12
+ label: "bug",
13
+ icon: V
14
+ }, {
15
+ value: "sparkles",
16
+ label: "sparkles",
17
+ icon: Y
18
+ }, {
19
+ value: "book-open",
20
+ label: "book open",
21
+ icon: Z
22
+ }, {
23
+ value: "wrench",
24
+ label: "wrench",
25
+ icon: ee
26
+ }, {
27
+ value: "gauge",
28
+ label: "gauge",
29
+ icon: le
30
+ }, {
31
+ value: "feather",
32
+ label: "feather",
33
+ icon: te
34
+ }, {
35
+ value: "scale",
36
+ label: "scale",
37
+ icon: ne
38
+ }, {
39
+ value: "layers",
40
+ label: "layers",
41
+ icon: oe
42
+ }, {
43
+ value: "alert-triangle",
44
+ label: "alert triangle",
45
+ icon: ie
46
+ }, {
47
+ value: "star",
48
+ label: "star",
49
+ icon: re
50
+ }, {
51
+ value: "flag",
52
+ label: "flag",
53
+ icon: ae
54
+ }, {
55
+ value: "flame",
56
+ label: "flame",
57
+ icon: se
58
+ }, {
59
+ value: "lightbulb",
60
+ label: "lightbulb",
61
+ icon: ce
62
+ }, {
63
+ value: "shield",
64
+ label: "shield",
65
+ icon: ue
66
+ }, {
67
+ value: "eye",
68
+ label: "eye",
69
+ icon: de
70
+ }, {
71
+ value: "clock",
72
+ label: "clock",
73
+ icon: fe
74
+ }, {
75
+ value: "check-circle",
76
+ label: "check circle",
77
+ icon: pe
78
+ }, {
79
+ value: "tag",
80
+ label: "tag",
81
+ icon: ge
82
+ }, {
83
+ value: "code",
84
+ label: "code",
85
+ icon: be
86
+ }, {
87
+ value: "chart-column-increasing",
88
+ label: "chart column increasing",
89
+ icon: he
90
+ }, {
91
+ value: "circle-question-mark",
92
+ label: "circle question mark",
93
+ icon: me
94
+ }, {
95
+ value: "shield-alert",
96
+ label: "shield alert",
97
+ icon: ke
98
+ }], Le = (l, e = H) => e.find((o) => o.value === (l ?? "circle"))?.icon ?? M, Ye = (l) => {
99
+ const e = T(36), {
100
+ color: t,
101
+ colorOptions: o,
102
+ icon: i,
103
+ iconOptions: r,
104
+ onColorChange: n,
105
+ onIconChange: s,
106
+ disabled: p,
107
+ showIcons: g,
108
+ "aria-label": c
109
+ } = l, f = o === void 0 ? ze : o, d = r === void 0 ? H : r, u = g === void 0 ? !0 : g, A = c === void 0 ? "Pick color and icon" : c;
110
+ let C;
111
+ e[0] !== i || e[1] !== d || e[2] !== u ? (C = u ? Le(i, d) : M, e[0] = i, e[1] = d, e[2] = u, e[3] = C) : C = e[3];
112
+ const _ = C, I = i ?? "circle", z = `${t}.500`, k = u ? void 0 : `${t}.500`;
113
+ let b;
114
+ e[4] !== _ || e[5] !== z || e[6] !== k ? (b = /* @__PURE__ */ a(B, { as: _, boxSize: "14px", color: z, fill: k }), e[4] = _, e[5] = z, e[6] = k, e[7] = b) : b = e[7];
115
+ let h;
116
+ e[8] !== A || e[9] !== p || e[10] !== b ? (h = /* @__PURE__ */ a(G.Trigger, { asChild: !0, children: /* @__PURE__ */ a(R, { size: "2xs", variant: "ghost", disabled: p, "aria-label": A, children: b }) }), e[8] = A, e[9] = p, e[10] = b, e[11] = h) : h = e[11];
117
+ const v = u ? "320px" : "220px";
118
+ let m;
119
+ e[12] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (m = /* @__PURE__ */ a(D, { textStyle: "label/S", mb: "xs", children: "Color" }), e[12] = m) : m = e[12];
120
+ const S = u ? "repeat(10, 1fr)" : "repeat(5, 1fr)", w = u ? "md" : "0";
121
+ let y;
122
+ if (e[13] !== t || e[14] !== f || e[15] !== n) {
123
+ let x;
124
+ e[17] !== t || e[18] !== n ? (x = (L) => /* @__PURE__ */ a(F, { children: /* @__PURE__ */ a(R, { size: "2xs", variant: L === t ? "outline" : "ghost", colorPalette: L, onClick: () => n(L), "aria-label": L, children: /* @__PURE__ */ a(B, { as: M, boxSize: "14px", fill: `${L}.500`, color: `${L}.500` }) }) }, L), e[17] = t, e[18] = n, e[19] = x) : x = e[19], y = f.map(x), e[13] = t, e[14] = f, e[15] = n, e[16] = y;
125
+ } else
126
+ y = e[16];
127
+ let $;
128
+ e[20] !== S || e[21] !== w || e[22] !== y ? ($ = /* @__PURE__ */ a(q, { templateColumns: S, gap: "2xs", mb: w, children: y }), e[20] = S, e[21] = w, e[22] = y, e[23] = $) : $ = e[23];
129
+ let P;
130
+ e[24] !== d || e[25] !== s || e[26] !== I || e[27] !== u ? (P = u ? /* @__PURE__ */ W(Q, { children: [
131
+ /* @__PURE__ */ a(D, { textStyle: "label/S", mb: "xs", children: "Icon" }),
132
+ /* @__PURE__ */ a(q, { templateColumns: "repeat(5, 1fr)", gap: "2xs", children: d.map((x) => /* @__PURE__ */ a(F, { children: /* @__PURE__ */ a(R, { size: "2xs", variant: x.value === I ? "outline" : "ghost", onClick: () => s?.(x.value), "aria-label": x.label, children: /* @__PURE__ */ a(B, { as: x.icon, boxSize: "14px" }) }) }, x.value ?? "none")) })
133
+ ] }) : null, e[24] = d, e[25] = s, e[26] = I, e[27] = u, e[28] = P) : P = e[28];
134
+ let O;
135
+ e[29] !== $ || e[30] !== P || e[31] !== v ? (O = /* @__PURE__ */ a(G.Positioner, { children: /* @__PURE__ */ W(G.Content, { w: v, p: "sm", bg: "bg", children: [
136
+ m,
137
+ $,
138
+ P
139
+ ] }) }), e[29] = $, e[30] = P, e[31] = v, e[32] = O) : O = e[32];
140
+ let E;
141
+ return e[33] !== O || e[34] !== h ? (E = /* @__PURE__ */ W(G.Root, { children: [
142
+ h,
143
+ O
144
+ ] }), e[33] = O, e[34] = h, e[35] = E) : E = e[35], E;
145
+ }, $e = (l) => l === "in_progress" ? ve : l === "completed" ? Se : l === "failed" ? xe : l === "cancelled" ? Ce : l === "disconnected" ? Ie : l === "queued" ? we : l === "awaiting_input" ? ye : We, Pe = (l) => l === "in_progress" ? "fg.info" : l === "completed" ? "fg.success" : l === "failed" ? "fg.error" : l === "cancelled" || l === "disconnected" ? "fg.warning" : l === "queued" ? "fg.info" : l === "awaiting_input" ? "fg.warning" : "fg.muted", Oe = (l) => {
146
+ const e = T(11), {
147
+ status: t,
148
+ boxSize: o,
149
+ ariaLabel: i,
150
+ cursor: r,
151
+ onClick: n
152
+ } = l, s = o === void 0 ? "14px" : o, p = i === void 0 ? "Session status" : i;
153
+ let g;
154
+ e[0] !== t ? (g = $e(t), e[0] = t, e[1] = g) : g = e[1];
155
+ let c;
156
+ e[2] !== t ? (c = Pe(t), e[2] = t, e[3] = c) : c = e[3];
157
+ let f;
158
+ return e[4] !== p || e[5] !== s || e[6] !== r || e[7] !== n || e[8] !== g || e[9] !== c ? (f = /* @__PURE__ */ a(B, { as: g, boxSize: s, color: c, "aria-label": p, cursor: r, onClick: n }), e[4] = p, e[5] = s, e[6] = r, e[7] = n, e[8] = g, e[9] = c, e[10] = f) : f = e[10], f;
159
+ }, Be = {
160
+ amber: "yellow"
161
+ }, De = /* @__PURE__ */ new Set(["gray", "red", "orange", "yellow", "green", "teal", "blue", "cyan", "purple", "pink"]), Ee = {
162
+ bg: {
163
+ _light: "bg.muted",
164
+ _dark: "bg.subtle"
165
+ },
166
+ color: "fg.muted",
167
+ _hover: {
168
+ bg: {
169
+ _light: "bg.subtle",
170
+ _dark: "bg.hover"
171
+ }
172
+ }
173
+ }, Ge = (l) => l === "current_branch" ? Ae : _e, Me = (l) => {
174
+ if (l.startsWith("#") || l.startsWith("rgb") || l.startsWith("hsl") || l.startsWith("var("))
175
+ return l;
176
+ const e = Be[l] ?? l;
177
+ return De.has(e) ? `var(--chakra-colors-${e}-500)` : e;
178
+ }, Re = (l) => l ? l.description ? `${l.name}: ${l.description}` : l.name : null, K = (l, e) => {
179
+ l.stopPropagation(), e?.();
180
+ }, qe = (l, e) => {
181
+ l.stopPropagation(), e?.();
182
+ }, Fe = (l) => {
183
+ const e = T(9), {
184
+ sessionStatus: t,
185
+ onSessionIndicatorClick: o
186
+ } = l;
187
+ if (!t)
188
+ return null;
189
+ const i = o ? "Open latest session" : "Latest session status";
190
+ let r;
191
+ e[0] !== o ? (r = o ? (p) => K(p, o) : void 0, e[0] = o, e[1] = r) : r = e[1];
192
+ let n;
193
+ e[2] !== t || e[3] !== i || e[4] !== r ? (n = /* @__PURE__ */ a(Oe, { status: t, boxSize: "12px", ariaLabel: i, cursor: "pointer", onClick: r }), e[2] = t, e[3] = i, e[4] = r, e[5] = n) : n = e[5];
194
+ let s;
195
+ return e[6] !== i || e[7] !== n ? (s = /* @__PURE__ */ a(j, { content: i, children: n }), e[6] = i, e[7] = n, e[8] = s) : s = e[8], s;
196
+ }, Xe = (l) => {
197
+ const e = T(13), {
198
+ workspaceType: t,
199
+ initializing: o,
200
+ label: i,
201
+ shorthand: r
202
+ } = l;
203
+ let n;
204
+ e[0] !== t ? (n = Ge(t), e[0] = t, e[1] = n) : n = e[1];
205
+ const s = n, p = i ?? r, g = t === "worktree" ? "Worktree" : "Current branch";
206
+ let c;
207
+ e[2] !== s || e[3] !== g ? (c = /* @__PURE__ */ a(B, { as: s, boxSize: "3.5", flexShrink: 0, "aria-label": g }), e[2] = s, e[3] = g, e[4] = c) : c = e[4];
208
+ let f;
209
+ e[5] !== o ? (f = o ? /* @__PURE__ */ a(J, { size: "xs", color: "fg.muted" }) : null, e[5] = o, e[6] = f) : f = e[6];
210
+ let d;
211
+ e[7] !== p ? (d = p ? /* @__PURE__ */ a(D, { as: "span", textStyle: "label/XS/medium", color: "fg.muted", minW: "0", maxW: "10rem", truncate: !0, children: p }) : null, e[7] = p, e[8] = d) : d = e[8];
212
+ let u;
213
+ return e[9] !== c || e[10] !== f || e[11] !== d ? (u = /* @__PURE__ */ W(X, { as: "span", gap: "2xs", alignItems: "center", color: "fg.muted", minW: "0", children: [
214
+ c,
215
+ f,
216
+ d
217
+ ] }), e[9] = c, e[10] = f, e[11] = d, e[12] = u) : u = e[12], u;
218
+ }, je = (l) => {
219
+ const e = T(10), {
220
+ attemptStatus: t
221
+ } = l;
222
+ if (!t)
223
+ return null;
224
+ let o;
225
+ e[0] !== t ? (o = Re(t), e[0] = t, e[1] = o) : o = e[1];
226
+ let i;
227
+ e[2] !== t.color ? (i = Me(t.color), e[2] = t.color, e[3] = i) : i = e[3];
228
+ const r = `Attempt status ${t.name}`;
229
+ let n;
230
+ e[4] !== i || e[5] !== r ? (n = /* @__PURE__ */ a(N, { as: "span", boxSize: "8px", borderRadius: "full", backgroundColor: i, flexShrink: 0, "aria-label": r, "data-testid": "workspace-attempt-status" }), e[4] = i, e[5] = r, e[6] = n) : n = e[6];
231
+ let s;
232
+ return e[7] !== o || e[8] !== n ? (s = /* @__PURE__ */ a(j, { content: o, children: n }), e[7] = o, e[8] = n, e[9] = s) : s = e[9], s;
233
+ }, He = (l) => {
234
+ const e = T(7), {
235
+ diffAdditions: t,
236
+ diffDeletions: o
237
+ } = l;
238
+ if (typeof t != "number" || typeof o != "number")
239
+ return null;
240
+ let i;
241
+ e[0] !== t ? (i = /* @__PURE__ */ W(D, { as: "span", textStyle: "label/XS/medium", color: "fg.success", children: [
242
+ "+",
243
+ t
244
+ ] }), e[0] = t, e[1] = i) : i = e[1];
245
+ let r;
246
+ e[2] !== o ? (r = /* @__PURE__ */ W(D, { as: "span", textStyle: "label/XS/medium", color: "fg.error", children: [
247
+ "-",
248
+ o
249
+ ] }), e[2] = o, e[3] = r) : r = e[3];
250
+ let n;
251
+ return e[4] !== i || e[5] !== r ? (n = /* @__PURE__ */ W(X, { as: "span", gap: "3xs", flexShrink: 0, children: [
252
+ i,
253
+ r
254
+ ] }), e[4] = i, e[5] = r, e[6] = n) : n = e[6], n;
255
+ }, Ke = (l) => {
256
+ const e = T(5), {
257
+ hasMultipleWorkspaces: t,
258
+ onDropdownClick: o
259
+ } = l;
260
+ if (!t)
261
+ return null;
262
+ const i = o ? "pointer" : "default";
263
+ let r;
264
+ e[0] !== o ? (r = o ? (s) => K(s, o) : void 0, e[0] = o, e[1] = r) : r = e[1];
265
+ let n;
266
+ return e[2] !== i || e[3] !== r ? (n = /* @__PURE__ */ a(B, { as: Te, boxSize: "12px", color: "fg.muted", cursor: i, "aria-label": "Workspace selector", onClick: r }), e[2] = i, e[3] = r, e[4] = n) : n = e[4], n;
267
+ }, Ze = (l) => {
268
+ const e = T(27), {
269
+ workspaceType: t,
270
+ initializing: o,
271
+ label: i,
272
+ shorthand: r,
273
+ attemptStatus: n,
274
+ sessionStatus: s,
275
+ showLeadingSessionIndicator: p,
276
+ diffAdditions: g,
277
+ diffDeletions: c,
278
+ hasMultipleWorkspaces: f,
279
+ onClick: d,
280
+ onDropdownClick: u,
281
+ onSessionIndicatorClick: A
282
+ } = l, C = o === void 0 ? !1 : o, _ = p === void 0 ? !0 : p, I = f === void 0 ? !1 : f, z = d || u || I ? "pointer" : "default";
283
+ let k;
284
+ e[0] !== d ? (k = d ? (y) => qe(y, d) : void 0, e[0] = d, e[1] = k) : k = e[1];
285
+ let b;
286
+ e[2] !== A || e[3] !== s || e[4] !== _ ? (b = _ ? /* @__PURE__ */ a(Fe, { sessionStatus: s, onSessionIndicatorClick: A }) : null, e[2] = A, e[3] = s, e[4] = _, e[5] = b) : b = e[5];
287
+ let h;
288
+ e[6] !== C || e[7] !== i || e[8] !== r || e[9] !== t ? (h = /* @__PURE__ */ a(Xe, { workspaceType: t, initializing: C, label: i, shorthand: r }), e[6] = C, e[7] = i, e[8] = r, e[9] = t, e[10] = h) : h = e[10];
289
+ let v;
290
+ e[11] !== n ? (v = /* @__PURE__ */ a(je, { attemptStatus: n }), e[11] = n, e[12] = v) : v = e[12];
291
+ let m;
292
+ e[13] !== g || e[14] !== c ? (m = /* @__PURE__ */ a(He, { diffAdditions: g, diffDeletions: c }), e[13] = g, e[14] = c, e[15] = m) : m = e[15];
293
+ let S;
294
+ e[16] !== I || e[17] !== u ? (S = /* @__PURE__ */ a(Ke, { hasMultipleWorkspaces: I, onDropdownClick: u }), e[16] = I, e[17] = u, e[18] = S) : S = e[18];
295
+ let w;
296
+ return e[19] !== z || e[20] !== k || e[21] !== b || e[22] !== h || e[23] !== v || e[24] !== m || e[25] !== S ? (w = /* @__PURE__ */ W(U, { as: "span", display: "inline-flex", gap: "2xs", alignItems: "center", minW: "0", maxW: "100%", variant: "subtle", ...Ee, textStyle: "label/XS/medium", cursor: z, transition: "background-color 0.2s ease-in-out", onClick: k, "data-testid": "workspace-badge", children: [
297
+ b,
298
+ h,
299
+ v,
300
+ m,
301
+ S
302
+ ] }), e[19] = z, e[20] = k, e[21] = b, e[22] = h, e[23] = v, e[24] = m, e[25] = S, e[26] = w) : w = e[26], w;
303
+ };
304
+ export {
305
+ Ye as I,
306
+ Oe as S,
307
+ Ze as W,
308
+ H as a,
309
+ $e as b,
310
+ Le as g,
311
+ ze as o,
312
+ Pe as r
313
+ };
314
+ //# sourceMappingURL=workspace-badge-Fuo-1zPj.js.map