@pstdio/ui 0.15.0 → 0.17.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 (304) 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 +1832 -1275
  6. package/dist/chat-ui.js.map +1 -1
  7. package/dist/checkbox-B2zYVemL.js +70 -0
  8. package/dist/checkbox-B2zYVemL.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-input-actions.d.ts +1 -0
  15. package/dist/components/chat-ui/components/chat-input.d.ts +8 -2
  16. package/dist/components/chat-ui/components/chat-message-animation.d.ts +22 -0
  17. package/dist/components/chat-ui/components/chat-panel.d.ts +11 -5
  18. package/dist/components/chat-ui/components/composer-constants.d.ts +1 -0
  19. package/dist/components/chat-ui/components/conversation-browse.d.ts +22 -0
  20. package/dist/components/chat-ui/components/message-types.d.ts +14 -0
  21. package/dist/components/chat-ui/components/queued-follow-up-list-state.d.ts +4 -0
  22. package/dist/components/chat-ui/components/queued-follow-up-list.d.ts +11 -0
  23. package/dist/components/chat-ui/components/timeline.d.ts +5 -2
  24. package/dist/components/chat-ui/components/working-indicator.d.ts +9 -0
  25. package/dist/components/chat-ui/components/workspace-hub.d.ts +8 -1
  26. package/dist/components/chat-ui/index.d.ts +4 -2
  27. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +0 -1
  28. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +4 -14
  29. package/dist/components/chat-ui/tool-rendering/question-prompt.d.ts +9 -0
  30. package/dist/components/chat-ui/tool-rendering/shared.d.ts +1 -1
  31. package/dist/components/chat-ui/tool-rendering/types.d.ts +1 -2
  32. package/dist/components/command-palette/index.d.ts +4 -0
  33. package/dist/components/data-table/build-columns.d.ts +13 -2
  34. package/dist/components/data-table/categorical-color-cell.d.ts +8 -0
  35. package/dist/components/data-table/color-cell-style.d.ts +13 -0
  36. package/dist/components/data-table/color-scale-cell.d.ts +7 -0
  37. package/dist/components/data-table/data-table-column-menu.d.ts +12 -0
  38. package/dist/components/data-table/data-table-header.d.ts +18 -0
  39. package/dist/components/data-table/data-table-stat-chart.d.ts +21 -0
  40. package/dist/components/data-table/data-table-state.d.ts +27 -0
  41. package/dist/components/data-table/data-table-stats-row.d.ts +11 -0
  42. package/dist/components/data-table/data-table-stats.d.ts +19 -0
  43. package/dist/components/data-table/data-table-table-parts.d.ts +21 -0
  44. package/dist/components/data-table/data-table.story-descriptions.d.ts +6 -0
  45. package/dist/components/data-table/data-table.story-fixtures.d.ts +6 -0
  46. package/dist/components/data-table/friendly-json-display.d.ts +31 -0
  47. package/dist/components/data-table/index.d.ts +3 -1
  48. package/dist/components/data-table/json-cell.d.ts +6 -0
  49. package/dist/components/data-table/pagination-footer.d.ts +4 -1
  50. package/dist/components/data-table/selection-toolbar.d.ts +3 -1
  51. package/dist/components/data-table/types.d.ts +72 -0
  52. package/dist/components/diff-viewer/diff-card.d.ts +1 -0
  53. package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +0 -19
  54. package/dist/components/diff-viewer/diff-drawer.d.ts +1 -0
  55. package/dist/components/diff-viewer/index.d.ts +2 -0
  56. package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +7 -3
  57. package/dist/components/internal/style-guide.d.ts +14 -0
  58. package/dist/components/internal/token-editor-controls.d.ts +8 -0
  59. package/dist/components/internal/token-editor-data.d.ts +40 -0
  60. package/dist/components/internal/token-editor-state.d.ts +22 -0
  61. package/dist/components/{data-renderer → kanban-renderer}/display-menu.d.ts +4 -4
  62. package/dist/components/{data-renderer → kanban-renderer}/filter-menu.d.ts +3 -3
  63. package/dist/components/kanban-renderer/index.d.ts +19 -0
  64. package/dist/components/kanban-renderer/kanban-renderer-attribute-badge.d.ts +7 -0
  65. package/dist/components/{data-renderer/data-renderer-board-column-header.d.ts → kanban-renderer/kanban-renderer-board-column-header.d.ts} +2 -2
  66. package/dist/components/{data-renderer/data-renderer-board-group-section.d.ts → kanban-renderer/kanban-renderer-board-group-section.d.ts} +2 -2
  67. package/dist/components/{data-renderer/data-renderer-board-move.d.ts → kanban-renderer/kanban-renderer-board-move.d.ts} +3 -3
  68. package/dist/components/{data-renderer/data-renderer-board.d.ts → kanban-renderer/kanban-renderer-board.d.ts} +16 -15
  69. package/dist/components/{data-renderer/data-renderer-card.d.ts → kanban-renderer/kanban-renderer-card.d.ts} +5 -4
  70. package/dist/components/{data-renderer/data-renderer-content.d.ts → kanban-renderer/kanban-renderer-content.d.ts} +8 -8
  71. package/dist/components/kanban-renderer/kanban-renderer-create-dialog.d.ts +12 -0
  72. package/dist/components/kanban-renderer/kanban-renderer-create-field.d.ts +10 -0
  73. package/dist/components/kanban-renderer/kanban-renderer-grouping.d.ts +23 -0
  74. package/dist/components/{data-renderer/data-renderer-helpers.d.ts → kanban-renderer/kanban-renderer-helpers.d.ts} +15 -15
  75. package/dist/components/kanban-renderer/kanban-renderer-list-items.d.ts +25 -0
  76. package/dist/components/kanban-renderer/kanban-renderer-list.d.ts +43 -0
  77. package/dist/components/{data-renderer/data-renderer-story-fixtures.d.ts → kanban-renderer/kanban-renderer-story-fixtures.d.ts} +3 -2
  78. package/dist/components/kanban-renderer/kanban-renderer-toolbar.d.ts +15 -0
  79. package/dist/components/kanban-renderer/kanban-renderer-view-bar.d.ts +14 -0
  80. package/dist/components/kanban-renderer/kanban-renderer-views.d.ts +12 -0
  81. package/dist/components/{data-renderer/data-renderer.d.ts → kanban-renderer/kanban-renderer.d.ts} +12 -9
  82. package/dist/components/{data-renderer → kanban-renderer}/types.d.ts +51 -14
  83. package/dist/components/kanban-renderer/use-kanban-renderer-store.d.ts +78 -0
  84. package/dist/components/layout/index.d.ts +7 -0
  85. package/dist/components/layout/panel-header.constants.d.ts +3 -0
  86. package/dist/components/{resizable-split-layout.d.ts → layout/resizable-split-layout.d.ts} +3 -2
  87. package/dist/components/layout/resizable-split-layout.geometry.d.ts +56 -0
  88. package/dist/components/{resizable-split-layout.handle.d.ts → layout/resizable-split-layout.handle.d.ts} +6 -2
  89. package/dist/components/layout/resizable-split-layout.panels.d.ts +25 -0
  90. package/dist/components/list-row/list-row-actions.d.ts +1 -0
  91. package/dist/components/list-row/list-row-content.d.ts +7 -0
  92. package/dist/components/list-row/list-row.types.d.ts +4 -1
  93. package/dist/components/overlays/attached-menu.d.ts +6 -0
  94. package/dist/components/overlays/attachment-chip.d.ts +13 -0
  95. package/dist/components/overlays/index.d.ts +16 -0
  96. package/dist/components/{resource-context-menu.d.ts → overlays/resource-context-menu.d.ts} +13 -1
  97. package/dist/components/{search-modal-content.d.ts → overlays/search-modal-content.d.ts} +1 -1
  98. package/dist/components/{searchable-menu.d.ts → overlays/searchable-menu.d.ts} +1 -1
  99. package/dist/components/param-editor/index.d.ts +24 -0
  100. package/dist/components/param-editor/inputs/action-input.d.ts +13 -0
  101. package/dist/components/param-editor/inputs/anchor-grid-input.d.ts +12 -0
  102. package/dist/components/param-editor/inputs/anchor-grid.d.ts +4 -0
  103. package/dist/components/param-editor/inputs/file-accept.d.ts +22 -0
  104. package/dist/components/param-editor/inputs/file-drop-input.d.ts +14 -0
  105. package/dist/components/param-editor/inputs/numeric-value.d.ts +6 -0
  106. package/dist/components/param-editor/inputs/range-input.d.ts +17 -0
  107. package/dist/components/param-editor/inputs/range-value.d.ts +5 -0
  108. package/dist/components/param-editor/inputs/resource-input-chips.d.ts +15 -0
  109. package/dist/components/param-editor/inputs/resource-input.d.ts +18 -0
  110. package/dist/components/param-editor/inputs/segmented-input.d.ts +14 -0
  111. package/dist/components/param-editor/{selection-input.d.ts → inputs/selection-input.d.ts} +6 -6
  112. package/dist/components/param-editor/inputs/selection-menu.d.ts +29 -0
  113. package/dist/components/param-editor/inputs/slider-marks.d.ts +5 -0
  114. package/dist/components/param-editor/inputs/vector-input.d.ts +17 -0
  115. package/dist/components/param-editor/inputs/vector-value.d.ts +7 -0
  116. package/dist/components/param-editor/param-editor-control-item.d.ts +15 -0
  117. package/dist/components/param-editor/param-editor-control-list.d.ts +5 -0
  118. package/dist/components/param-editor/param-editor-field-label.d.ts +1 -0
  119. package/dist/components/param-editor/param-editor-field.d.ts +11 -0
  120. package/dist/components/param-editor/param-editor-horizontal.d.ts +1 -0
  121. package/dist/components/param-editor/param-editor-inline-group.d.ts +5 -0
  122. package/dist/components/param-editor/param-editor-read-only-field.d.ts +9 -0
  123. package/dist/components/param-editor/param-editor-section.d.ts +17 -0
  124. package/dist/components/param-editor/param-editor.d.ts +3 -1
  125. package/dist/components/param-editor/param-editor.types.d.ts +135 -24
  126. package/dist/components/{breadcrumb.d.ts → primitives/breadcrumb.d.ts} +1 -1
  127. package/dist/components/primitives/index.d.ts +28 -0
  128. package/dist/components/{number-input.d.ts → primitives/number-input.d.ts} +0 -2
  129. package/dist/components/{session-indicator.d.ts → primitives/session-indicator.d.ts} +2 -1
  130. package/dist/components/{tooltip.d.ts → primitives/tooltip.d.ts} +0 -1
  131. package/dist/components/rich-text/prompt-input/commands.d.ts +0 -17
  132. package/dist/components/rich-text/prompt-input/events.d.ts +0 -13
  133. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.d.ts +1 -2
  134. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/ReferenceMenuPlugin.d.ts +2 -1
  135. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/hooks/useContextLookup.d.ts +2 -1
  136. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/ReferencePlugin.d.ts +2 -1
  137. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +1 -2
  138. package/dist/components/rich-text/prompt-input/prompt-input.d.ts +3 -2
  139. package/dist/components/rich-text/prompt-input/utils.d.ts +1 -2
  140. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +0 -1
  141. package/dist/components/rich-text/types.d.ts +1 -1
  142. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  143. package/dist/components/{sidebar/sidebar-footer.d.ts → sidenav/sidenav-footer.d.ts} +2 -2
  144. package/dist/components/{sidebar/sidebar-header.d.ts → sidenav/sidenav-header.d.ts} +2 -2
  145. package/dist/components/sidenav/sidenav.d.ts +2 -0
  146. package/dist/components/sidenav/sidenav.store.d.ts +49 -0
  147. package/dist/components/{sidebar/sidebar.types.d.ts → sidenav/sidenav.types.d.ts} +6 -6
  148. package/dist/components/tab-strip/tab-visibility-filter.d.ts +2 -1
  149. package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
  150. package/dist/components/tag-editor/tag-editor.types.d.ts +1 -1
  151. package/dist/components/terminal/bind-session.d.ts +33 -0
  152. package/dist/components/terminal/index.d.ts +6 -0
  153. package/dist/components/terminal/scripted-bridge.d.ts +35 -0
  154. package/dist/components/terminal/terminal-contract.d.ts +22 -0
  155. package/dist/components/terminal/terminal-theme.d.ts +12 -0
  156. package/dist/components/terminal/terminal.d.ts +56 -0
  157. package/dist/components/terminal/types.d.ts +35 -0
  158. package/dist/components/terminal/use-terminal-session.d.ts +21 -0
  159. package/dist/components/tree-list/tree-list-order-filter.d.ts +1 -2
  160. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +1 -2
  161. package/dist/components/tree-list/tree-list.d.ts +2 -2
  162. package/dist/components/tree-list/tree-list.types.d.ts +4 -0
  163. package/dist/data-table.js +1271 -0
  164. package/dist/data-table.js.map +1 -0
  165. package/dist/diff-editor-BnfV8cYB.js +182 -0
  166. package/dist/diff-editor-BnfV8cYB.js.map +1 -0
  167. package/dist/diff.js +1313 -0
  168. package/dist/diff.js.map +1 -0
  169. package/dist/empty-state-Bo4HVrgr.js +34 -0
  170. package/dist/empty-state-Bo4HVrgr.js.map +1 -0
  171. package/dist/foundations/gallery/gallery-frame.d.ts +21 -0
  172. package/dist/foundations/gallery/sections/badges-section.d.ts +1 -0
  173. package/dist/foundations/gallery/sections/buttons-section.d.ts +1 -0
  174. package/dist/foundations/gallery/sections/composite-chat-section.d.ts +1 -0
  175. package/dist/foundations/gallery/sections/composites-section.d.ts +1 -0
  176. package/dist/foundations/gallery/sections/feedback-section.d.ts +1 -0
  177. package/dist/foundations/gallery/sections/input-authoring-card.d.ts +1 -0
  178. package/dist/foundations/gallery/sections/inputs-section.d.ts +1 -0
  179. package/dist/foundations/gallery/sections/layout-section.d.ts +1 -0
  180. package/dist/foundations/gallery/sections/navigation-identity-section.d.ts +1 -0
  181. package/dist/foundations/gallery/sections/overlays-section.d.ts +1 -0
  182. package/dist/foundations/gallery/sections/panels-section.d.ts +1 -0
  183. package/dist/foundations/gallery/sections/param-editor-composite-card.d.ts +1 -0
  184. package/dist/foundations/gallery/sections/settings-composite-cards.d.ts +1 -0
  185. package/dist/index.d.ts +14 -87
  186. package/dist/index.js +2027 -7501
  187. package/dist/index.js.map +1 -1
  188. package/dist/kanban-renderer-toolbar-B9ro-9z1.js +1318 -0
  189. package/dist/kanban-renderer-toolbar-B9ro-9z1.js.map +1 -0
  190. package/dist/kanban-renderer.js +1087 -0
  191. package/dist/kanban-renderer.js.map +1 -0
  192. package/dist/list-row-YRUxEcy3.js +808 -0
  193. package/dist/list-row-YRUxEcy3.js.map +1 -0
  194. package/dist/mermaid-renderer-DZo3qj6D.js +425 -0
  195. package/dist/mermaid-renderer-DZo3qj6D.js.map +1 -0
  196. package/dist/mermaid.js +5 -0
  197. package/dist/mermaid.js.map +1 -0
  198. package/dist/param-editor-CYZJbmKu.js +933 -0
  199. package/dist/param-editor-CYZJbmKu.js.map +1 -0
  200. package/dist/param-editor-read-only-field-DgtLqcFa.js +925 -0
  201. package/dist/param-editor-read-only-field-DgtLqcFa.js.map +1 -0
  202. package/dist/prism-BXb57lxL.js +125 -0
  203. package/dist/prism-BXb57lxL.js.map +1 -0
  204. package/dist/radio-cLMEBBZk.js +76 -0
  205. package/dist/radio-cLMEBBZk.js.map +1 -0
  206. package/dist/resource-badge-qCWHP-wQ.js +99 -0
  207. package/dist/resource-badge-qCWHP-wQ.js.map +1 -0
  208. package/dist/{rich-message-DNSEhxXh.js → rich-message-DBf_5YlW.js} +462 -481
  209. package/dist/rich-message-DBf_5YlW.js.map +1 -0
  210. package/dist/rich-text.js +300 -299
  211. package/dist/rich-text.js.map +1 -1
  212. package/dist/scroll-area-BMbg1WcD.js +91 -0
  213. package/dist/scroll-area-BMbg1WcD.js.map +1 -0
  214. package/dist/style.css +1 -1
  215. package/dist/terminal.js +359 -0
  216. package/dist/terminal.js.map +1 -0
  217. package/dist/theme/global.d.ts +3 -0
  218. package/dist/theme/primitives/sizes.d.ts +23 -0
  219. package/dist/theme/recipes/badge.d.ts +50 -0
  220. package/dist/theme/recipes/button.d.ts +30 -19
  221. package/dist/theme/recipes/color-picker.d.ts +1 -0
  222. package/dist/theme/recipes/dialog.d.ts +1 -1
  223. package/dist/theme/recipes/drawer.d.ts +1 -1
  224. package/dist/theme/recipes/input.d.ts +55 -0
  225. package/dist/theme/recipes/number-input.d.ts +98 -0
  226. package/dist/theme/recipes/tabs.d.ts +49 -28
  227. package/dist/theme/recipes/textarea.d.ts +62 -1
  228. package/dist/theme/recipes/timeline.d.ts +74 -0
  229. package/dist/theme/tokens/borders.d.ts +0 -3
  230. package/dist/theme/tokens/colors.d.ts +118 -94
  231. package/dist/{theme-25P7ij4C.js → theme-CNhnbvcE.js} +1300 -375
  232. package/dist/theme-CNhnbvcE.js.map +1 -0
  233. package/dist/theme-preference-DOzHx64J.js +123 -0
  234. package/dist/theme-preference-DOzHx64J.js.map +1 -0
  235. package/dist/theme.js +1 -1
  236. package/dist/tree-list-CZHLAURU.js +1033 -0
  237. package/dist/tree-list-CZHLAURU.js.map +1 -0
  238. package/package.json +29 -3
  239. package/dist/components/data-renderer/card-interaction-guard.d.ts +0 -2
  240. package/dist/components/data-renderer/data-renderer-attribute-badge.d.ts +0 -7
  241. package/dist/components/data-renderer/data-renderer-grouping.d.ts +0 -23
  242. package/dist/components/data-renderer/data-renderer-list.d.ts +0 -39
  243. package/dist/components/data-renderer/data-renderer-toolbar.d.ts +0 -12
  244. package/dist/components/data-renderer/use-data-renderer-store.d.ts +0 -59
  245. package/dist/components/file-tree-helpers.d.ts +0 -8
  246. package/dist/components/open-source-notices-screen.d.ts +0 -20
  247. package/dist/components/panel-header.constants.d.ts +0 -1
  248. package/dist/components/param-editor/input-group.d.ts +0 -10
  249. package/dist/components/rich-text/shared/plugins/MermaidPlugin/index.d.ts +0 -1
  250. package/dist/components/rich-text/shared/plugins/TableActionMenuPlugin/TableActionMenuPlugin.d.ts +0 -5
  251. package/dist/components/rich-text/shared/plugins/TableCellResizerPlugin/TableCellResizerPlugin.d.ts +0 -2
  252. package/dist/components/rich-text/theme/report-theme.d.ts +0 -3
  253. package/dist/components/sidebar/sidebar.d.ts +0 -2
  254. package/dist/components/sidebar/sidebar.store.d.ts +0 -49
  255. package/dist/components/style-guide-data.d.ts +0 -40
  256. package/dist/components/style-guide.d.ts +0 -1
  257. package/dist/mermaid-renderer-CPGj6vsb.js +0 -570
  258. package/dist/mermaid-renderer-CPGj6vsb.js.map +0 -1
  259. package/dist/radio-DJtQY9po.js +0 -286
  260. package/dist/radio-DJtQY9po.js.map +0 -1
  261. package/dist/resource-badge-CeJTOn8F.js +0 -188
  262. package/dist/resource-badge-CeJTOn8F.js.map +0 -1
  263. package/dist/rich-message-DNSEhxXh.js.map +0 -1
  264. package/dist/theme-25P7ij4C.js.map +0 -1
  265. package/dist/utils/formats.d.ts +0 -7
  266. /package/dist/components/{palette-filter.d.ts → command-palette/palette-filter.d.ts} +0 -0
  267. /package/dist/components/{palette-list.d.ts → command-palette/palette-list.d.ts} +0 -0
  268. /package/dist/components/{palette-shortcut.d.ts → command-palette/palette-shortcut.d.ts} +0 -0
  269. /package/dist/components/{palette.d.ts → command-palette/palette.d.ts} +0 -0
  270. /package/dist/components/{code-editor.d.ts → diff-viewer/code-editor.d.ts} +0 -0
  271. /package/dist/components/{column-file-browser.d.ts → file-browser/column-file-browser.d.ts} +0 -0
  272. /package/dist/components/{performance-panel.d.ts → internal/performance-panel.d.ts} +0 -0
  273. /package/dist/components/{data-renderer/data-renderer-badge-helpers.d.ts → kanban-renderer/kanban-renderer-badge-helpers.d.ts} +0 -0
  274. /package/dist/components/{data-renderer/data-renderer-enum-helpers.d.ts → kanban-renderer/kanban-renderer-enum-helpers.d.ts} +0 -0
  275. /package/dist/components/{data-renderer → kanban-renderer}/use-resolved-attributes.d.ts +0 -0
  276. /package/dist/components/{header.d.ts → layout/header.d.ts} +0 -0
  277. /package/dist/components/{horizontal-menu-stack.d.ts → layout/horizontal-menu-stack.d.ts} +0 -0
  278. /package/dist/components/{item-section.d.ts → layout/item-section.d.ts} +0 -0
  279. /package/dist/components/{attached-panel.d.ts → overlays/attached-panel.d.ts} +0 -0
  280. /package/dist/components/{bubble-button.d.ts → overlays/bubble-button.d.ts} +0 -0
  281. /package/dist/components/{bubble-panel.d.ts → overlays/bubble-panel.d.ts} +0 -0
  282. /package/dist/components/{delete-confirmation-modal.d.ts → overlays/delete-confirmation-modal.d.ts} +0 -0
  283. /package/dist/components/{repo-picker-dialog.d.ts → overlays/repo-picker-dialog.d.ts} +0 -0
  284. /package/dist/components/param-editor/{color-input.d.ts → inputs/color-input.d.ts} +0 -0
  285. /package/dist/components/param-editor/{date-input.d.ts → inputs/date-input.d.ts} +0 -0
  286. /package/dist/components/param-editor/{horizontal-text-input.d.ts → inputs/horizontal-text-input.d.ts} +0 -0
  287. /package/dist/components/param-editor/{number-input.d.ts → inputs/number-input.d.ts} +0 -0
  288. /package/dist/components/param-editor/{text-input.d.ts → inputs/text-input.d.ts} +0 -0
  289. /package/dist/components/{alert.d.ts → primitives/alert.d.ts} +0 -0
  290. /package/dist/components/{checkbox.d.ts → primitives/checkbox.d.ts} +0 -0
  291. /package/dist/components/{content-placeholder.d.ts → primitives/content-placeholder.d.ts} +0 -0
  292. /package/dist/components/{empty-state.d.ts → primitives/empty-state.d.ts} +0 -0
  293. /package/dist/components/{error-boundary.d.ts → primitives/error-boundary.d.ts} +0 -0
  294. /package/dist/components/{icon-color-picker.d.ts → primitives/icon-color-picker.d.ts} +0 -0
  295. /package/dist/components/{info-card.d.ts → primitives/info-card.d.ts} +0 -0
  296. /package/dist/components/{integration-card.d.ts → primitives/integration-card.d.ts} +0 -0
  297. /package/dist/components/{radio.d.ts → primitives/radio.d.ts} +0 -0
  298. /package/dist/components/{resource-badge.d.ts → primitives/resource-badge.d.ts} +0 -0
  299. /package/dist/components/{scroll-area.d.ts → primitives/scroll-area.d.ts} +0 -0
  300. /package/dist/components/{simple-card.d.ts → primitives/simple-card.d.ts} +0 -0
  301. /package/dist/components/{slider.d.ts → primitives/slider.d.ts} +0 -0
  302. /package/dist/components/{switch.d.ts → primitives/switch.d.ts} +0 -0
  303. /package/dist/components/{toaster.d.ts → primitives/toaster.d.ts} +0 -0
  304. /package/dist/components/{workspace-badge.d.ts → primitives/workspace-badge.d.ts} +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/activity/activity-avatar.tsx","../src/components/activity/activity-comment.tsx","../src/components/activity/activity-composer.tsx","../src/components/activity/activity-event.tsx","../src/components/activity/activity-root.tsx","../src/components/activity/activity-timeline.tsx","../src/components/activity/index.ts","../src/components/attached-panel.tsx","../src/components/list-row/list-row-menu.tsx","../src/components/list-row/list-row-chrome.tsx","../src/components/header.tsx","../src/components/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","../src/components/resource-context-menu.tsx","../src/components/breadcrumb.tsx","../src/components/bubble-button.tsx","../src/components/bubble-panel.tsx","../src/components/code-editor.tsx","../src/components/content-placeholder.tsx","../src/components/data-renderer/types.ts","../src/components/data-renderer/data-renderer-board-move.ts","../src/components/data-renderer/data-renderer-board-column-header.tsx","../src/components/session-indicator.tsx","../src/components/workspace-badge.tsx","../src/components/data-renderer/card-interaction-guard.ts","../src/components/icon-color-picker.tsx","../src/components/data-renderer/data-renderer-attribute-badge.tsx","../src/components/data-renderer/data-renderer-card.tsx","../src/components/data-renderer/data-renderer-board-group-section.tsx","../src/components/data-renderer/data-renderer-board.tsx","../src/components/data-renderer/data-renderer-list.tsx","../src/components/data-renderer/data-renderer-content.tsx","../src/components/data-renderer/data-renderer-enum-helpers.ts","../src/components/data-renderer/data-renderer-badge-helpers.ts","../src/components/data-renderer/data-renderer-helpers.ts","../src/components/data-renderer/data-renderer-grouping.ts","../src/components/data-renderer/display-menu.tsx","../src/components/data-renderer/filter-menu.tsx","../src/components/data-renderer/use-data-renderer-store.ts","../src/components/data-renderer/use-resolved-attributes.ts","../src/components/data-renderer/data-renderer-toolbar.tsx","../src/components/data-renderer/data-renderer.tsx","../src/components/delete-confirmation-modal.tsx","../../pstdio-file-types/src/index.ts","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/resizable-split-layout.handle.tsx","../src/components/resizable-split-layout.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/diff-viewer/diff-viewer-options-menu.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","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx","../src/components/error-boundary.tsx","../src/components/horizontal-menu-stack.tsx","../src/components/simple-card.tsx","../src/components/integration-card.tsx","../src/components/item-section.tsx","../src/components/search-modal-content.tsx","../src/components/notification-center/notification-center.tsx","../src/components/open-source-notices-screen.tsx","../src/components/palette-filter.ts","../src/components/palette-list.tsx","../src/components/palette.tsx","../src/components/palette-shortcut.tsx","../src/components/param-editor/param-editor-label.tsx","../src/components/param-editor/param-editor-read-only-value.tsx","../src/components/param-editor/color-input.tsx","../src/components/param-editor/date-input.tsx","../src/components/number-input.tsx","../src/components/slider.tsx","../src/components/param-editor/number-input.tsx","../src/components/param-editor/selection-input.tsx","../src/components/param-editor/text-input.tsx","../src/components/param-editor/input-group.tsx","../src/components/param-editor/param-editor.tsx","../src/components/repo-picker-dialog.tsx","../src/components/sidebar/sidebar.store.ts","../src/components/sidebar/sidebar-footer.tsx","../src/components/panel-header.constants.ts","../src/components/sidebar/sidebar-header.tsx","../src/components/sidebar/sidebar.tsx","../src/components/switch.tsx","../src/components/tab-strip/tab-visibility.store.ts","../src/components/tree-list/tree-list-visibility-filter.ts","../src/components/tab-strip/tab-visibility-filter.ts","../src/components/tag-editor/tag-editor-row.tsx","../src/components/tag-editor/tag-editor.tsx","../src/components/tag-editor/tag-settings-panel.tsx","../src/components/toaster.tsx","../src/components/tree-list/tree-list-order.store.ts","../src/components/tree-list/tree-list-order-filter.ts","../src/components/tree-list/tree-list-visibility.store.ts","../src/utils/apply-file-icon-theme-preference.ts","../src/utils/file-icon-theme-preference.tsx","../src/utils/prism.ts","../src/utils/resolve-file-icon-element.tsx"],"sourcesContent":["import { Avatar, Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\n\nexport interface ActivityAvatarProps {\n actor?: ActivityActor;\n icon?: ReactNode;\n color?: string;\n background?: string;\n}\n\nexport const ActivityAvatar = (props: ActivityAvatarProps) => {\n const { actor, icon, color = \"fg.muted\", background = \"bg.muted\" } = props;\n\n if (icon) {\n return (\n <Box\n boxSize=\"18px\"\n borderRadius=\"full\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n color={color}\n background={background}\n >\n {icon}\n </Box>\n );\n }\n\n return (\n <Avatar.Root size=\"2xs\" flexShrink={0}>\n <Avatar.Image src={actor?.avatarSrc} alt={actor?.avatarAlt ?? actor?.name} />\n <Avatar.Fallback name={actor?.name} background={background} color={color} />\n </Avatar.Root>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { Children, type ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\ninterface ActivityCommentHeaderProps {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityCommentProps extends Omit<HTMLChakraProps<\"article\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n replies?: ReactNode;\n composer?: ReactNode;\n children: ReactNode;\n}\n\nexport interface ActivityReplyProps extends Omit<HTMLChakraProps<\"div\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n}\n\nconst TimestampSeparator = () => (\n <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />\n);\n\nconst ActivityCommentHeader = (props: ActivityCommentHeaderProps) => {\n const { actor, timestamp, actions } = props;\n\n return (\n <HStack gap=\"xs\" alignItems=\"center\" minW=\"0\">\n <ActivityAvatar actor={actor} />\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {actor.name}\n </Text>\n {timestamp ? (\n <>\n <TimestampSeparator />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n <Box marginLeft=\"auto\" flexShrink={0}>\n {actions}\n </Box>\n </HStack>\n );\n};\n\nexport const ActivityReply = (props: ActivityReplyProps) => {\n const { actor, timestamp, actions, children, ...rootProps } = props;\n\n return (\n <Box paddingX=\"md\" paddingY=\"sm\" {...rootProps}>\n <Stack gap=\"xs\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Box paddingLeft=\"32px\">\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\">\n {children}\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n};\n\nexport const ActivityComment = (props: ActivityCommentProps) => {\n const { actor, timestamp, actions, replies, composer, children, ...rootProps } = props;\n const hasReplies = Children.count(replies) > 0;\n\n return (\n <Box\n as=\"article\"\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"sm\"\n background=\"bg\"\n overflow=\"hidden\"\n {...rootProps}\n >\n <Stack gap=\"sm\" padding=\"md\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\" whiteSpace=\"pre-wrap\">\n {children}\n </Text>\n </Stack>\n {hasReplies ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {replies}\n </Box>\n ) : null}\n {composer ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {composer}\n </Box>\n ) : null}\n </Box>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, chakra, HStack, Icon, IconButton, Spacer, Textarea } from \"@chakra-ui/react\";\nimport { ArrowUp, Paperclip } from \"lucide-react\";\nimport type { FormEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { Tooltip } from \"../tooltip\";\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityComposerProps extends Omit<HTMLChakraProps<\"form\">, \"onChange\" | \"onSubmit\"> {\n actor?: ActivityActor;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n variant?: \"standalone\" | \"inline\";\n minRows?: number;\n attachLabel?: string;\n submitLabel?: string;\n actions?: ReactNode;\n onAttach?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n}\n\nexport const ActivityComposer = (props: ActivityComposerProps) => {\n const {\n actor,\n value,\n defaultValue = \"\",\n placeholder = \"Leave a comment...\",\n variant = \"standalone\",\n minRows = variant === \"standalone\" ? 3 : 1,\n attachLabel = \"Attach file\",\n submitLabel = \"Submit comment\",\n actions,\n onAttach,\n onChange,\n onSubmit,\n ...rootProps\n } = props;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value ?? internalValue;\n const isInline = variant === \"inline\";\n const canSubmit = currentValue.trim().length > 0;\n\n const handleChange = (nextValue: string) => {\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n\n onSubmit?.(currentValue.trim());\n\n if (value === undefined) {\n setInternalValue(\"\");\n }\n };\n\n return (\n <chakra.form\n width=\"full\"\n background=\"bg\"\n borderWidth={isInline ? \"0\" : \"1px\"}\n borderColor=\"border.muted\"\n borderRadius={isInline ? \"0\" : \"sm\"}\n transition=\"border-color 0.12s ease\"\n _focusWithin={isInline ? undefined : { borderColor: \"blue.border\" }}\n onSubmit={handleSubmit}\n {...rootProps}\n >\n <HStack alignItems=\"flex-start\" gap=\"xs\" padding={isInline ? \"sm\" : \"md\"}>\n {actor ? <ActivityAvatar actor={actor} /> : null}\n <Box flex=\"1\" minW=\"0\">\n <Textarea\n value={currentValue}\n rows={minRows}\n resize=\"none\"\n border=\"0\"\n padding=\"0\"\n minH={isInline ? \"1.5rem\" : \"4rem\"}\n background=\"transparent\"\n color=\"fg\"\n textStyle=\"label/S/regular\"\n placeholder={placeholder}\n _placeholder={{ color: \"fg.subtle\" }}\n _focus={{ borderColor: \"transparent\", outline: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", outline: \"none\" }}\n onChange={(event) => handleChange(event.currentTarget.value)}\n />\n <HStack gap=\"2xs\" marginTop={isInline ? \"0\" : \"sm\"}>\n {actions}\n <Spacer />\n <Tooltip content={attachLabel}>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={attachLabel} type=\"button\" onClick={onAttach}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={submitLabel}>\n <IconButton size=\"2xs\" variant=\"subtle\" aria-label={submitLabel} type=\"submit\" disabled={!canSubmit}>\n <Icon as={ArrowUp} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </HStack>\n </Box>\n </HStack>\n </chakra.form>\n );\n};\n","import type { TimelineItemProps } from \"@chakra-ui/react\";\nimport { Box, Text, Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityEventProps extends Omit<TimelineItemProps, \"title\"> {\n actor?: ActivityActor;\n icon?: ReactNode;\n iconColor?: string;\n iconBackground?: string;\n timestamp?: ReactNode;\n children: ReactNode;\n}\n\nconst EventSeparator = () => <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />;\n\nexport const ActivityEvent = (props: ActivityEventProps) => {\n const {\n actor,\n icon,\n iconColor = \"fg.muted\",\n iconBackground = \"transparent\",\n timestamp,\n children,\n ...rootProps\n } = props;\n\n return (\n <Timeline.Item gap=\"xs\" minH=\"24px\" paddingX=\"md\" {...rootProps}>\n <Timeline.Connector>\n <Timeline.Separator borderColor=\"border.muted\" />\n <Timeline.Indicator outline=\"none\" border=\"none\" background=\"transparent\">\n <ActivityAvatar actor={actor} icon={icon} color={iconColor} background={iconBackground} />\n </Timeline.Indicator>\n </Timeline.Connector>\n <Timeline.Content gap=\"0\" paddingBottom=\"xs\" minW=\"0\">\n <Timeline.Title\n marginTop=\"0\"\n gap=\"xs\"\n minW=\"0\"\n fontWeight=\"normal\"\n textStyle=\"label/S/regular\"\n color=\"fg.muted\"\n >\n {actor ? (\n <Text as=\"span\" color=\"fg\" fontWeight=\"500\" flexShrink={0}>\n {actor.name}\n </Text>\n ) : null}\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" gap=\"2xs\" minW=\"0\" flexWrap=\"wrap\">\n {children}\n </Box>\n {timestamp ? (\n <>\n <EventSeparator />\n <Text as=\"span\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n </Timeline.Title>\n </Timeline.Content>\n </Timeline.Item>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityRootProps extends StackProps {\n children: ReactNode;\n}\n\nexport interface ActivityHeaderProps extends Omit<StackProps, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityFeedProps extends StackProps {\n children: ReactNode;\n}\n\nexport const ActivityRoot = (props: ActivityRootProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack width=\"full\" gap=\"md\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n\nexport const ActivityHeader = (props: ActivityHeaderProps) => {\n const { title = \"Activity\", actions, ...rootProps } = props;\n\n return (\n <HStack alignItems=\"center\" justifyContent=\"space-between\" gap=\"md\" {...rootProps}>\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {title}\n </Text>\n {actions ? <HStack gap=\"xs\">{actions}</HStack> : null}\n </HStack>\n );\n};\n\nexport const ActivityFeed = (props: ActivityFeedProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack gap=\"md\" width=\"full\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n","import type { TimelineRootProps } from \"@chakra-ui/react\";\nimport { Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityTimelineProps extends TimelineRootProps {\n children: ReactNode;\n}\n\nexport const ActivityTimeline = (props: ActivityTimelineProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Timeline.Root size=\"sm\" variant=\"plain\" width=\"full\" css={{ \"--timeline-indicator-size\": \"18px\" }} {...rootProps}>\n {children}\n </Timeline.Root>\n );\n};\n","import { ActivityAvatar } from \"./activity-avatar\";\nimport { ActivityComment, ActivityReply } from \"./activity-comment\";\nimport { ActivityComposer } from \"./activity-composer\";\nimport { ActivityEvent } from \"./activity-event\";\nimport { ActivityFeed, ActivityHeader, ActivityRoot } from \"./activity-root\";\nimport { ActivityTimeline } from \"./activity-timeline\";\n\nexport type { ActivityActor } from \"./activity.types\";\nexport type { ActivityAvatarProps } from \"./activity-avatar\";\nexport type { ActivityCommentProps, ActivityReplyProps } from \"./activity-comment\";\nexport type { ActivityComposerProps } from \"./activity-composer\";\nexport type { ActivityEventProps } from \"./activity-event\";\nexport type { ActivityFeedProps, ActivityHeaderProps, ActivityRootProps } from \"./activity-root\";\nexport type { ActivityTimelineProps } from \"./activity-timeline\";\n\nexport {\n ActivityAvatar,\n ActivityComment,\n ActivityComposer,\n ActivityEvent,\n ActivityFeed,\n ActivityHeader,\n ActivityReply,\n ActivityRoot,\n ActivityTimeline,\n};\n\nexport const Activity = {\n Root: ActivityRoot,\n Header: ActivityHeader,\n Feed: ActivityFeed,\n Timeline: ActivityTimeline,\n Event: ActivityEvent,\n Comment: ActivityComment,\n Reply: ActivityReply,\n Composer: ActivityComposer,\n Avatar: ActivityAvatar,\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nconst DEFAULT_RESIZABLE_MIN_WIDTH = \"20rem\";\n\ninterface AttachedPanelProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n header?: ReactNode;\n resizable?: boolean;\n}\n\nexport const AttachedPanel = (props: AttachedPanelProps) => {\n const { children, header, width = \"28rem\", minWidth, resizable = false, ...rest } = props;\n const resolvedMinWidth = minWidth ?? (resizable ? DEFAULT_RESIZABLE_MIN_WIDTH : width);\n const resolvedWidth = resizable ? \"full\" : width;\n\n return (\n <Flex\n direction=\"column\"\n position=\"relative\"\n flexShrink={0}\n w={resolvedWidth}\n minW={resolvedMinWidth}\n h=\"100%\"\n borderLeftWidth=\"1px\"\n bg=\"bg\"\n overflow=\"hidden\"\n {...rest}\n >\n {header}\n <Flex flex=\"1\" minH={0} direction=\"column\">\n {children}\n </Flex>\n </Flex>\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 \"../resource-context-menu\";\nimport { Tooltip } from \"../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 (\n <ResourceContextMenu actions={createResourceContextActions(item.contextMenuItems)} contentMinWidth=\"180px\">\n {row}\n </ResourceContextMenu>\n );\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 { Box, Icon, Input, InputGroup, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown, Search } from \"lucide-react\";\nimport { type ElementType, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Header } from \"./header\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport { ScrollArea } from \"./scroll-area\";\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\";\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\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n outline: \"none\",\n} as const;\n\nconst portalledMenuLayerZIndex = \"calc(var(--chakra-z-index-popover) + 2)\";\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.muted\"\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=\"compact\"\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 <Header variant=\"input\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" flexShrink={0}>\n <InputGroup startElement={<Search size={14} />} width=\"full\">\n <Input\n ref={inputRef}\n borderWidth=\"0\"\n borderRadius=\"0\"\n height=\"full\"\n value={query}\n placeholder={config.searchPlaceholder}\n aria-label={config.searchPlaceholder}\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputBorderProps}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n />\n </InputGroup>\n </Header>\n ) : null;\n\n const menuPositioner = (\n <Menu.Positioner pointerEvents=\"auto\">\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 ?? \"compact\"}\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}>\n {portalled ? (\n <Box position=\"fixed\" inset=\"0\" pointerEvents=\"none\" zIndex={portalledMenuLayerZIndex}>\n {menuPositioner}\n </Box>\n ) : (\n menuPositioner\n )}\n </Portal>\n </Menu.Root>\n );\n};\n","import { IconButton, Menu } from \"@chakra-ui/react\";\nimport { SearchableMenu } from \"../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: \"compact\" 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=\"compact\" 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 } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { Tooltip } from \"../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}\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, context } = 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\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 <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Tooltip key={item.id} 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 ))}\n </Menu.Content>\n </Menu.Positioner>\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 { ChevronRight } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\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 = variant === \"compact\" || variant === \"tree\" || 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\" ? \"16px\" : \"14px\";\n const iconLabelGap = variant === \"tree\" ? \"1\" : \"2\";\n\n const labelColor = resolveLabelColor({ isEmptyStateVariant, isDisabled, tone });\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}) => {\n const { item, isDisabled, isExpanded, showChevron, tone = \"default\", variant = \"default\" } = props;\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 {item.actions && item.actions.length > 0 ? (\n <RowActions actions={item.actions} context={{ nodeId: item.id }} />\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 resolveListRowSizing = (variant: ListRowProps[\"variant\"], hasDescription: boolean) => {\n if ((variant === \"compact\" || variant === \"empty-state\") && !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.tone === \"danger\") return { outline: \"1px solid\", outlineColor: \"red.500\", outlineOffset: \"-1px\" };\n return { bg: input.hoverBg };\n })(),\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: \"0\" 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 variant = \"default\",\n tone = \"default\",\n selectedBg = \"bg.menu-item.selected\",\n hoverBg = \"bg.menu-item.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;\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 />\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","import { Menu, Portal } from \"@chakra-ui/react\";\nimport { type ComponentProps, Fragment, type ReactNode } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\n\ntype MenuRootProps = ComponentProps<typeof Menu.Root>;\n\nexport interface ResourceContextAction {\n key: string;\n label: 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}\n\nexport const ResourceContextMenu = (props: ResourceContextMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"220px\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n closeOnSelect,\n } = props;\n\n if (actions.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Menu.Root positioning={positioning} closeOnSelect={closeOnSelect}>\n <Menu.ContextTrigger asChild>{children}</Menu.ContextTrigger>\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=\"compact\"\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 </Menu.Root>\n );\n};\n","import { Breadcrumb as ChakraBreadcrumb, type SystemStyleObject } from \"@chakra-ui/react\";\nimport * as React from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"./resource-context-menu\";\n\nexport interface BreadcrumbItem {\n title: React.ReactNode;\n url?: string;\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface BreadcrumbLinkProps {\n to: string;\n children: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {\n separator?: React.ReactNode;\n separatorGap?: SystemStyleObject[\"gap\"];\n items: BreadcrumbItem[];\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\nconst linkProps = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"2xs\",\n minW: \"0\",\n maxW: \"100%\",\n overflow: \"hidden\",\n outline: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\" },\n _focus: { outline: \"none\" },\n _focusVisible: { outline: \"none\" },\n} as const;\n\nconst staticProps = {\n ...linkProps,\n color: \"fg\",\n cursor: \"default\",\n textDecoration: \"none\",\n _hover: { textDecoration: \"none\" },\n} as const;\n\ninterface BreadcrumbItemContentProps {\n item: BreadcrumbItem;\n isCurrent: boolean;\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\ninterface BreadcrumbSeparatorProps {\n separator?: React.ReactNode;\n}\n\nconst isInteractiveItem = (item: BreadcrumbItem) => Boolean(item.url || item.onClick);\n\nconst BreadcrumbItemLink = (props: BreadcrumbItemContentProps) => {\n const { item, isCurrent, linkComponent: LinkComponent } = props;\n\n if (isCurrent && !isInteractiveItem(item)) {\n return <ChakraBreadcrumb.CurrentLink {...staticProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n }\n\n if (item.url && LinkComponent) {\n return (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.url) {\n return (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.onClick) {\n return (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n return (\n <ChakraBreadcrumb.Link as=\"span\" {...staticProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n};\n\nconst BreadcrumbItemContent = (props: BreadcrumbItemContentProps) => {\n const { item } = props;\n const content = <BreadcrumbItemLink {...props} />;\n\n if (!item.contextMenuActions?.length) return content;\n\n return (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {content}\n </ResourceContextMenu>\n );\n};\n\nconst BreadcrumbSeparator = (props: BreadcrumbSeparatorProps) => {\n const { separator } = props;\n\n if (separator === undefined) {\n return <ChakraBreadcrumb.Separator flexShrink={0} />;\n }\n\n return <ChakraBreadcrumb.Separator flexShrink={0}>{separator}</ChakraBreadcrumb.Separator>;\n};\n\nexport const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(function BreadcrumbRoot(props, ref) {\n const { separator, separatorGap, items, linkComponent: LinkComponent, ...rest } = props;\n\n return (\n <ChakraBreadcrumb.Root ref={ref} {...rest}>\n <ChakraBreadcrumb.List gap={separatorGap} flexWrap=\"nowrap\" minW=\"0\" maxW=\"100%\" overflow=\"hidden\">\n {items.map((item, index) => {\n const isCurrent = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n <ChakraBreadcrumb.Item minW=\"0\" flexShrink={isCurrent ? 1 : 0} overflow=\"hidden\">\n <BreadcrumbItemContent item={item} isCurrent={isCurrent} linkComponent={LinkComponent} />\n </ChakraBreadcrumb.Item>\n {isCurrent ? null : <BreadcrumbSeparator separator={separator} />}\n </React.Fragment>\n );\n })}\n </ChakraBreadcrumb.List>\n </ChakraBreadcrumb.Root>\n );\n});\n","import { chakra, type HTMLChakraProps, IconButton, type IconButtonProps } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Tooltip } from \"./tooltip\";\n\ntype BubbleButtonStyleProps = \"transition\" | \"_hover\" | \"_active\" | \"borderColor\" | \"borderWidth\";\n\nexport interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {\n containerProps?: HTMLChakraProps<\"div\">;\n isOpen?: boolean;\n tooltip?: ReactNode;\n}\n\nexport const BubbleButton = forwardRef<HTMLButtonElement, BubbleButtonProps>(function BubbleButton(props, ref) {\n const { children, containerProps, isOpen = false, tooltip, ...rest } = props;\n const button = (\n <IconButton\n ref={ref}\n rounded=\"full\"\n size=\"lg\"\n borderWidth=\"1px\"\n borderColor={isOpen ? \"border.accent\" : \"border.subtle\"}\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n }}\n _active={{ borderColor: \"border.accent\" }}\n {...rest}\n >\n {children}\n </IconButton>\n );\n\n return (\n <chakra.div position=\"fixed\" bottom=\"6\" right=\"6\" zIndex=\"docked\" {...containerProps}>\n {tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button}\n </chakra.div>\n );\n});\n","import { Box, chakra, Flex, HStack, type HTMLChakraProps, IconButton, Portal, Spacer } from \"@chakra-ui/react\";\nimport { Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Header } from \"./header\";\nimport { Tooltip } from \"./tooltip\";\n\nexport interface BubblePanelProps {\n isOpen?: boolean;\n title?: string;\n menu?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n onPopOut?: (() => void) | null;\n popOutLabel?: string;\n width?: string;\n height?: string;\n containerProps?: HTMLChakraProps<\"section\">;\n testId?: string;\n \"aria-label\"?: string;\n children?: ReactNode;\n}\n\nexport const BubblePanel = forwardRef<HTMLDivElement, BubblePanelProps>(function BubblePanel(props, ref) {\n const {\n isOpen = false,\n title,\n menu,\n onClose,\n closeLabel,\n onPopOut,\n popOutLabel,\n width = \"28rem\",\n height = \"38rem\",\n containerProps,\n testId,\n \"aria-label\": ariaLabel,\n children,\n } = props;\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <chakra.section\n ref={ref}\n role=\"dialog\"\n data-testid={testId}\n aria-label={ariaLabel ?? title}\n position=\"fixed\"\n bottom=\"3\"\n right=\"3\"\n w={width}\n maxW=\"calc(100vw - 2rem)\"\n h={height}\n maxH=\"calc(100vh - 2rem)\"\n borderRadius=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n bg=\"bg\"\n overflow=\"hidden\"\n zIndex=\"dropdown\"\n {...containerProps}\n >\n <Flex direction=\"column\" h=\"full\">\n <Header variant=\"main\" gap=\"sm\" flexShrink={0}>\n <HStack gap=\"1\" minW=\"0\">\n {menu}\n </HStack>\n <Spacer />\n <HStack gap=\"1\">\n {onPopOut ? (\n <Tooltip content={popOutLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={popOutLabel} onClick={onPopOut}>\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {onClose ? (\n <Tooltip content={closeLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={closeLabel} onClick={onClose}>\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </HStack>\n </Header>\n <Box flex=\"1\" minH={0} display=\"flex\" flexDirection=\"column\" gap=\"sm\">\n {children}\n </Box>\n </Flex>\n </chakra.section>\n </Portal>\n );\n});\n","import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../theme\";\nimport { useThemePreference } from \"../utils/theme-preference\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","import { Box, type BoxProps, Text, type TextProps } from \"@chakra-ui/react\";\n\nexport interface ContentPlaceholderProps extends BoxProps {}\n\nexport const contentPlaceholderBackgroundImage = `url(\"data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%239C92AC' fill-opacity='0.2' fillRule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E\")`;\n\nexport const ContentPlaceholder = (props: ContentPlaceholderProps) => (\n <Box\n {...props}\n css={{\n backgroundClip: \"padding-box\",\n backgroundImage: contentPlaceholderBackgroundImage,\n display: \"flex\",\n width: \"100%\",\n }}\n />\n);\n\nexport const Label = (props: TextProps) => (\n <Box p=\"2\">\n <Text color=\"fg.muted\" fontWeight=\"medium\" textStyle=\"sm\" whiteSpace=\"nowrap\" {...props} />\n </Box>\n);\n","import type { ReactNode } from \"react\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport const NO_GROUPING = \"none\";\nexport const MANUAL_ORDERING = \"manual\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\nexport type AttributeDisplayDescriptor = { kind: \"workspace-badge\"; itemsAttributeId: string };\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n display?: AttributeDisplayDescriptor;\n render?: (value: unknown, row: DataRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * data-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface DataRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\nexport interface DataRendererOrdering {\n attributeId: string | typeof MANUAL_ORDERING;\n direction: SortDirection;\n}\n\nexport interface DataRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n ordering: DataRendererOrdering;\n displayProperties: string[];\n}\n\nexport type DataRendererFilterState = Record<string, string[]>;\n\nexport const DEFAULT_DATA_RENDERER_SETTINGS: DataRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n ordering: { attributeId: MANUAL_ORDERING, direction: \"asc\" },\n displayProperties: [],\n};\n\nexport const isEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum\" }> =>\n type.kind === \"enum\";\nexport const isMultiEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum-multi\" }> =>\n type.kind === \"enum-multi\";\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for sentinels (\"none\", \"manual\") or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING || id === MANUAL_ORDERING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n","import type { DataRendererSettings } from \"./types\";\nimport { MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\ninterface ApplyBoardMoveItemInput {\n settings: Pick<DataRendererSettings, \"columnGrouping\" | \"ordering\" | \"rowGrouping\">;\n rowId: string;\n targetColumnId: string;\n targetGroupKey?: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\ninterface ApplyBoardMoveToGroupInput {\n settings: Pick<DataRendererSettings, \"ordering\" | \"rowGrouping\">;\n rowId: string;\n targetGroupKey: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\nexport const applyBoardMoveItem = async (input: ApplyBoardMoveItemInput) => {\n const { settings, rowId, targetColumnId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n await onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n }\n if (settings.rowGrouping !== NO_GROUPING && targetGroupKey && onAttributeChange) {\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n }\n if (settings.ordering.attributeId === MANUAL_ORDERING) {\n await onReorder?.(rowId, beforeItemId);\n }\n};\n\nexport const applyBoardMoveToGroup = async (input: ApplyBoardMoveToGroupInput) => {\n const { settings, rowId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n if (settings.ordering.attributeId === MANUAL_ORDERING) {\n await onReorder?.(rowId, beforeItemId);\n }\n};\n","import { Badge, HStack, Icon, IconButton, Menu, Spacer, Text } from \"@chakra-ui/react\";\nimport { MoreHorizontal, Plus } from \"lucide-react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { Tooltip } from \"@/components/tooltip\";\nimport type { DataRendererBoardColumn } from \"./data-renderer-board\";\n\ninterface ColumnHeaderProps {\n column: DataRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack minH=\"2.5rem\" padding=\"xs\" gap=\"xs\" alignItems=\"center\">\n <Text textStyle=\"label/S/medium\">{column.label}</Text>\n\n <Badge\n variant=\"subtle\"\n {...(column.color ? { colorPalette: column.color } : { bg: \"bg.muted\", color: \"fg.muted\" })}\n >\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport { CircleAlert, CircleCheck, CircleDashed, CircleDot, CirclePause, CircleStop, ClockAlert } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\n\nexport type SessionCompletionStatus =\n | \"in_progress\"\n | \"awaiting_input\"\n | \"queued\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"disconnected\";\n\nexport const resolveSessionIndicatorIcon = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return CircleCheck;\n if (status === \"failed\") return CircleAlert;\n if (status === \"cancelled\") return CircleStop;\n if (status === \"disconnected\") return CirclePause;\n if (status === \"queued\") return ClockAlert;\n if (status === \"awaiting_input\") return CircleDot;\n return CircleDashed;\n};\n\nexport const resolveSessionIndicatorColor = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return \"fg.success\";\n if (status === \"failed\") return \"fg.error\";\n if (status === \"cancelled\") return \"fg.warning\";\n if (status === \"disconnected\") return \"fg.warning\";\n if (status === \"queued\") return \"fg.info\";\n return \"fg.muted\";\n};\n\ninterface SessionIndicatorProps {\n status?: SessionCompletionStatus;\n boxSize?: ComponentProps<typeof Icon>[\"boxSize\"];\n ariaLabel?: string;\n cursor?: ComponentProps<typeof Icon>[\"cursor\"];\n onClick?: ComponentProps<typeof Icon>[\"onClick\"];\n}\n\nexport const SessionIndicator = (props: SessionIndicatorProps) => {\n const { status, boxSize = \"14px\", ariaLabel = \"Session status\", cursor, onClick } = props;\n\n return (\n <Icon\n as={resolveSessionIndicatorIcon(status)}\n boxSize={boxSize}\n color={resolveSessionIndicatorColor(status)}\n aria-label={ariaLabel}\n cursor={cursor}\n onClick={onClick}\n />\n );\n};\n","import { Badge, Box, HStack, Icon, Spinner, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, GitBranchIcon, GitCommitIcon } from \"lucide-react\";\nimport type { MouseEvent } from \"react\";\nimport { type SessionCompletionStatus, SessionIndicator } from \"@/components/session-indicator\";\nimport { Tooltip } from \"@/components/tooltip\";\n\ninterface WorkspaceAttemptStatus {\n name: string;\n color: string;\n description?: string | null;\n}\n\nconst ATTEMPT_STATUS_COLOR_ALIASES: Record<string, string> = {\n amber: \"yellow\",\n};\n\nconst CHAKRA_COLOR_PALETTES = new Set([\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n]);\n\nconst workspaceBadgeSurfaceProps = {\n bg: { _light: \"bg.muted\", _dark: \"bg.subtle\" },\n color: \"fg.muted\",\n _hover: { bg: { _light: \"bg.subtle\", _dark: \"bg.hover\" } },\n} as const;\n\nexport interface WorkspaceBadgeProps {\n workspaceType: \"worktree\" | \"current_branch\";\n initializing?: boolean;\n label?: string;\n shorthand?: string;\n attemptStatus?: WorkspaceAttemptStatus;\n sessionStatus?: SessionCompletionStatus;\n showLeadingSessionIndicator?: boolean;\n diffAdditions?: number;\n diffDeletions?: number;\n hasMultipleWorkspaces?: boolean;\n onClick?: () => void;\n onDropdownClick?: () => void;\n onSessionIndicatorClick?: () => void;\n}\n\nconst resolveWorkspaceIcon = (workspaceType: WorkspaceBadgeProps[\"workspaceType\"]) => {\n if (workspaceType === \"current_branch\") {\n return GitCommitIcon;\n }\n\n return GitBranchIcon;\n};\n\nconst resolveAttemptStatusColor = (color: string) => {\n if (color.startsWith(\"#\") || color.startsWith(\"rgb\") || color.startsWith(\"hsl\") || color.startsWith(\"var(\")) {\n return color;\n }\n\n const resolvedColor = ATTEMPT_STATUS_COLOR_ALIASES[color] ?? color;\n if (CHAKRA_COLOR_PALETTES.has(resolvedColor)) {\n return `var(--chakra-colors-${resolvedColor}-500)`;\n }\n\n return resolvedColor;\n};\n\nconst buildAttemptStatusTooltip = (attemptStatus: WorkspaceAttemptStatus | undefined) => {\n if (!attemptStatus) return null;\n\n if (attemptStatus.description) {\n return `${attemptStatus.name}: ${attemptStatus.description}`;\n }\n\n return attemptStatus.name;\n};\n\nconst handleIconClick = (event: MouseEvent<SVGSVGElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst handleBadgeClick = (event: MouseEvent<HTMLSpanElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst LeadingSessionIndicator = (props: {\n sessionStatus?: SessionCompletionStatus;\n onSessionIndicatorClick?: () => void;\n}) => {\n const { sessionStatus, onSessionIndicatorClick } = props;\n\n if (!sessionStatus) {\n return null;\n }\n\n const sessionTooltip = onSessionIndicatorClick ? \"Open latest session\" : \"Latest session status\";\n\n return (\n <Tooltip content={sessionTooltip}>\n <SessionIndicator\n status={sessionStatus}\n boxSize=\"12px\"\n ariaLabel={sessionTooltip}\n cursor=\"pointer\"\n onClick={onSessionIndicatorClick ? (event) => handleIconClick(event, onSessionIndicatorClick) : undefined}\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceTypeIndicator = (props: {\n workspaceType: WorkspaceBadgeProps[\"workspaceType\"];\n initializing: boolean;\n label?: string;\n shorthand?: string;\n}) => {\n const { workspaceType, initializing, label, shorthand } = props;\n const WorkspaceTypeIcon = resolveWorkspaceIcon(workspaceType);\n const displayLabel = label ?? shorthand;\n\n return (\n <HStack as=\"span\" gap=\"2xs\" alignItems=\"center\" color=\"fg.muted\" minW=\"0\">\n <Icon\n as={WorkspaceTypeIcon}\n boxSize=\"3.5\"\n flexShrink={0}\n aria-label={workspaceType === \"worktree\" ? \"Worktree\" : \"Current branch\"}\n />\n {initializing ? <Spinner size=\"xs\" color=\"fg.muted\" /> : null}\n {displayLabel ? (\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.muted\" minW=\"0\" maxW=\"10rem\" truncate>\n {displayLabel}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst WorkspaceAttemptStatusIndicator = (props: { attemptStatus?: WorkspaceAttemptStatus }) => {\n const { attemptStatus } = props;\n\n if (!attemptStatus) {\n return null;\n }\n\n return (\n <Tooltip content={buildAttemptStatusTooltip(attemptStatus)}>\n <Box\n as=\"span\"\n boxSize=\"8px\"\n borderRadius=\"full\"\n backgroundColor={resolveAttemptStatusColor(attemptStatus.color)}\n flexShrink={0}\n aria-label={`Attempt status ${attemptStatus.name}`}\n data-testid=\"workspace-attempt-status\"\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceDiffTotals = (props: { diffAdditions?: number; diffDeletions?: number }) => {\n const { diffAdditions, diffDeletions } = props;\n\n if (typeof diffAdditions !== \"number\" || typeof diffDeletions !== \"number\") {\n return null;\n }\n\n return (\n <HStack as=\"span\" gap=\"3xs\" flexShrink={0}>\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.success\">\n +{diffAdditions}\n </Text>\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.error\">\n -{diffDeletions}\n </Text>\n </HStack>\n );\n};\n\nconst WorkspaceDropdownTrigger = (props: { hasMultipleWorkspaces: boolean; onDropdownClick?: () => void }) => {\n const { hasMultipleWorkspaces, onDropdownClick } = props;\n\n if (!hasMultipleWorkspaces) {\n return null;\n }\n\n return (\n <Icon\n as={ChevronDown}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor={onDropdownClick ? \"pointer\" : \"default\"}\n aria-label=\"Workspace selector\"\n onClick={onDropdownClick ? (event) => handleIconClick(event, onDropdownClick) : undefined}\n />\n );\n};\n\nexport const WorkspaceBadge = (props: WorkspaceBadgeProps) => {\n const {\n workspaceType,\n initializing = false,\n label,\n shorthand,\n attemptStatus,\n sessionStatus,\n showLeadingSessionIndicator = true,\n diffAdditions,\n diffDeletions,\n hasMultipleWorkspaces = false,\n onClick,\n onDropdownClick,\n onSessionIndicatorClick,\n } = props;\n\n return (\n <Badge\n as=\"span\"\n display=\"inline-flex\"\n gap=\"2xs\"\n alignItems=\"center\"\n minW=\"0\"\n maxW=\"100%\"\n variant=\"subtle\"\n {...workspaceBadgeSurfaceProps}\n textStyle=\"label/XS/medium\"\n cursor={onClick || onDropdownClick || hasMultipleWorkspaces ? \"pointer\" : \"default\"}\n transition=\"background-color 0.2s ease-in-out\"\n onClick={onClick ? (event) => handleBadgeClick(event, onClick) : undefined}\n data-testid=\"workspace-badge\"\n >\n {showLeadingSessionIndicator ? (\n <LeadingSessionIndicator sessionStatus={sessionStatus} onSessionIndicatorClick={onSessionIndicatorClick} />\n ) : null}\n <WorkspaceTypeIndicator\n workspaceType={workspaceType}\n initializing={initializing}\n label={label}\n shorthand={shorthand}\n />\n <WorkspaceAttemptStatusIndicator attemptStatus={attemptStatus} />\n <WorkspaceDiffTotals diffAdditions={diffAdditions} diffDeletions={diffDeletions} />\n <WorkspaceDropdownTrigger hasMultipleWorkspaces={hasMultipleWorkspaces} onDropdownClick={onDropdownClick} />\n </Badge>\n );\n};\n","const suppressionKey = \"__pstdioDataRendererCardClickSuppressionUntil\";\n\ntype DataRendererCardInteractionGlobal = typeof globalThis & {\n [suppressionKey]?: number;\n};\n\nconst getInteractionGlobal = () => globalThis as DataRendererCardInteractionGlobal;\n\nexport const suppressNextDataRendererCardClick = () => {\n getInteractionGlobal()[suppressionKey] = Date.now() + 1500;\n};\n\nexport const isDataRendererCardClickSuppressed = () => Date.now() <= (getInteractionGlobal()[suppressionKey] ?? 0);\n","import { Grid, GridItem, Icon, IconButton, Popover, Text } from \"@chakra-ui/react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n ChartColumnIncreasing,\n CheckCircle,\n Circle,\n CircleQuestionMark,\n Clock,\n Code,\n Eye,\n Feather,\n Flag,\n Flame,\n Gauge,\n Layers,\n Lightbulb,\n Scale,\n Shield,\n ShieldAlert,\n Sparkles,\n Star,\n Tag,\n Wrench,\n} from \"lucide-react\";\nimport type { ComponentType } from \"react\";\n\nexport interface IconColorPickerIconOption {\n value: string | null;\n label: string;\n icon: ComponentType;\n}\n\nexport const optionColors = [\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n] as const;\n\nexport const optionIcons = [\n { value: \"circle\", label: \"circle\", icon: Circle },\n { value: \"bug\", label: \"bug\", icon: Bug },\n { value: \"sparkles\", label: \"sparkles\", icon: Sparkles },\n { value: \"book-open\", label: \"book open\", icon: BookOpen },\n { value: \"wrench\", label: \"wrench\", icon: Wrench },\n { value: \"gauge\", label: \"gauge\", icon: Gauge },\n { value: \"feather\", label: \"feather\", icon: Feather },\n { value: \"scale\", label: \"scale\", icon: Scale },\n { value: \"layers\", label: \"layers\", icon: Layers },\n { value: \"alert-triangle\", label: \"alert triangle\", icon: AlertTriangle },\n { value: \"star\", label: \"star\", icon: Star },\n { value: \"flag\", label: \"flag\", icon: Flag },\n { value: \"flame\", label: \"flame\", icon: Flame },\n { value: \"lightbulb\", label: \"lightbulb\", icon: Lightbulb },\n { value: \"shield\", label: \"shield\", icon: Shield },\n { value: \"eye\", label: \"eye\", icon: Eye },\n { value: \"clock\", label: \"clock\", icon: Clock },\n { value: \"check-circle\", label: \"check circle\", icon: CheckCircle },\n { value: \"tag\", label: \"tag\", icon: Tag },\n { value: \"code\", label: \"code\", icon: Code },\n { value: \"chart-column-increasing\", label: \"chart column increasing\", icon: ChartColumnIncreasing },\n { value: \"circle-question-mark\", label: \"circle question mark\", icon: CircleQuestionMark },\n { value: \"shield-alert\", label: \"shield alert\", icon: ShieldAlert },\n] satisfies IconColorPickerIconOption[];\n\nexport const getIconComponent = (\n name: string | null | undefined,\n iconOptions: readonly IconColorPickerIconOption[] = optionIcons,\n): ComponentType => {\n const entry = iconOptions.find((icon) => icon.value === (name ?? \"circle\"));\n return entry?.icon ?? Circle;\n};\n\nexport interface IconColorPickerProps {\n color: string;\n colorOptions?: readonly string[];\n icon?: string | null;\n iconOptions?: readonly IconColorPickerIconOption[];\n onColorChange: (color: string) => void;\n onIconChange?: (icon: string | null) => void;\n disabled?: boolean;\n showIcons?: boolean;\n \"aria-label\"?: string;\n}\n\nexport const IconColorPicker = (props: IconColorPickerProps) => {\n const {\n color,\n colorOptions = optionColors,\n icon,\n iconOptions = optionIcons,\n onColorChange,\n onIconChange,\n disabled,\n showIcons = true,\n \"aria-label\": ariaLabel = \"Pick color and icon\",\n } = props;\n const IconComponent = showIcons ? getIconComponent(icon, iconOptions) : Circle;\n const selectedIcon = icon ?? \"circle\";\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" disabled={disabled} aria-label={ariaLabel}>\n <Icon\n as={IconComponent}\n boxSize=\"14px\"\n color={`${color}.500`}\n fill={showIcons ? undefined : `${color}.500`}\n />\n </IconButton>\n </Popover.Trigger>\n <Popover.Positioner>\n <Popover.Content w={showIcons ? \"320px\" : \"220px\"} p=\"sm\" bg=\"bg\">\n <Text textStyle=\"label/S\" mb=\"xs\">\n Color\n </Text>\n <Grid\n templateColumns={showIcons ? \"repeat(10, 1fr)\" : \"repeat(5, 1fr)\"}\n gap=\"2xs\"\n mb={showIcons ? \"md\" : \"0\"}\n >\n {colorOptions.map((optionColor) => (\n <GridItem key={optionColor}>\n <IconButton\n size=\"2xs\"\n variant={optionColor === color ? \"outline\" : \"ghost\"}\n colorPalette={optionColor}\n onClick={() => onColorChange(optionColor)}\n aria-label={optionColor}\n >\n <Icon as={Circle} boxSize=\"14px\" fill={`${optionColor}.500`} color={`${optionColor}.500`} />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n {showIcons ? (\n <>\n <Text textStyle=\"label/S\" mb=\"xs\">\n Icon\n </Text>\n <Grid templateColumns=\"repeat(5, 1fr)\" gap=\"2xs\">\n {iconOptions.map((entry) => (\n <GridItem key={entry.value ?? \"none\"}>\n <IconButton\n size=\"2xs\"\n variant={entry.value === selectedIcon ? \"outline\" : \"ghost\"}\n onClick={() => onIconChange?.(entry.value)}\n aria-label={entry.label}\n >\n <Icon as={entry.icon} boxSize=\"14px\" />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n </>\n ) : null}\n </Popover.Content>\n </Popover.Positioner>\n </Popover.Root>\n );\n};\n","import { Badge, Icon, Menu, Portal } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Square, SquareCheck, X } from \"lucide-react\";\n\nimport { getIconComponent } from \"@/components/icon-color-picker\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { suppressNextDataRendererCardClick } from \"./card-interaction-guard\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\ninterface DataRendererAttributeBadgeProps {\n badge: AttributeBadge;\n onChange?: (attributeId: string, value: unknown) => void;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\nconst markRowActivationSuppression = () => suppressNextDataRendererCardClick();\nconst suppressRowActivation = (event: { stopPropagation: () => void }) => {\n markRowActivationSuppression();\n event.stopPropagation();\n};\n\nconst getSelectedValues = (badge: AttributeBadge) => {\n if (Array.isArray(badge.value)) return badge.value;\n return badge.value ? [badge.value] : [];\n};\n\nconst toggleMultiValue = (values: string[], optionValue: string) =>\n values.includes(optionValue) ? values.filter((value) => value !== optionValue) : [...values, optionValue];\n\nconst badgeStyleProps = {\n bg: { _light: \"bg.muted\", _dark: \"bg.subtle\" },\n color: \"fg.muted\",\n _hover: { bg: { _light: \"bg.subtle\", _dark: \"bg.hover\" } },\n} as const;\n\nconst getBadgeIconColor = (badge: AttributeBadge) => (badge.color ? `${badge.color}.fg` : \"fg.muted\");\n\nconst selectionIcon = (input: { isMultiValue: boolean; isSelected: boolean }) => {\n if (input.isMultiValue) return input.isSelected ? <SquareCheck size={14} /> : <Square size={14} />;\n return input.isSelected ? <Check size={14} /> : null;\n};\n\nexport const DataRendererAttributeBadge = (props: DataRendererAttributeBadgeProps) => {\n const { badge, onChange } = props;\n const options = badge.options ?? [];\n const canEdit = Boolean(onChange && badge.isEditable && options.length > 0);\n const isMultiValue = Array.isArray(badge.value);\n const selectedValues = getSelectedValues(badge);\n const attributeLabel = badge.attributeLabel ?? badge.label;\n const rowInteractionProps = {\n onClickCapture: markRowActivationSuppression,\n onPointerDownCapture: markRowActivationSuppression,\n onKeyDown: stopRowActivation,\n };\n\n const handleOptionChange = (optionValue: string) => {\n const nextValue = isMultiValue ? toggleMultiValue(selectedValues, optionValue) : optionValue;\n onChange?.(badge.attributeId, nextValue);\n };\n\n const handleClearSelection = () => onChange?.(badge.attributeId, isMultiValue ? [] : \"\");\n\n const badgeContent = (\n <>\n {badge.icon ? <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={getBadgeIconColor(badge)} /> : null}\n {badge.label}\n {canEdit ? <Icon as={ChevronDown} boxSize=\"3\" color=\"fg.muted\" /> : null}\n </>\n );\n\n if (!canEdit) {\n return (\n <Badge variant=\"subtle\" gap=\"2xs\" textStyle=\"label/XS/medium\" {...badgeStyleProps}>\n {badgeContent}\n </Badge>\n );\n }\n\n return (\n <Menu.Root closeOnSelect={!isMultiValue}>\n <Menu.Trigger asChild>\n <Badge\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n variant=\"subtle\"\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n {...badgeStyleProps}\n onClickCapture={markRowActivationSuppression}\n onClick={stopRowActivation}\n onPointerDownCapture={markRowActivationSuppression}\n onPointerDown={suppressRowActivation}\n onKeyDown={stopRowActivation}\n >\n {badgeContent}\n </Badge>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n minW=\"180px\"\n bg=\"bg\"\n p=\"0\"\n gap=\"0\"\n onClickCapture={markRowActivationSuppression}\n onClick={stopRowActivation}\n onPointerDownCapture={markRowActivationSuppression}\n onPointerDown={suppressRowActivation}\n onKeyDown={stopRowActivation}\n >\n {!isMultiValue ? (\n <>\n <Menu.Item value=\"__clear\" asChild>\n <ListRow\n asChild\n role=\"menuitemradio\"\n aria-checked={selectedValues.length === 0}\n variant=\"compact\"\n id=\"__clear\"\n label={`No ${attributeLabel}`}\n icon={<X size={16} />}\n iconColor=\"gray.500\"\n isSelected={selectedValues.length === 0}\n endContent={selectionIcon({ isMultiValue: false, isSelected: selectedValues.length === 0 })}\n onActivate={handleClearSelection}\n {...rowInteractionProps}\n />\n </Menu.Item>\n <Menu.Separator margin=\"0\" />\n </>\n ) : null}\n {options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n role={isMultiValue ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected}\n variant=\"compact\"\n id={option.value}\n label={option.label}\n icon={<Icon as={getIconComponent(option.icon)} boxSize=\"16px\" />}\n iconColor={`${option.color ?? \"gray\"}.500`}\n isSelected={isSelected}\n endContent={selectionIcon({ isMultiValue, isSelected })}\n onActivate={() => handleOptionChange(option.value)}\n {...rowInteractionProps}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, MouseEvent, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport { isDataRendererCardClickSuppressed } from \"./card-interaction-guard\";\nimport { DataRendererAttributeBadge } from \"./data-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererCardProps {\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const DataRendererCard = (props: DataRendererCardProps) => {\n const {\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onBadgeChange,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (isDataRendererCardClickSuppressed()) return;\n if (event.defaultPrevented) return;\n if (!(event.target instanceof Node) || !event.currentTarget.contains(event.target)) return;\n onClick?.();\n };\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"sm\"\n borderRadius=\"xs\"\n borderWidth=\"1px\"\n borderColor={isSelected ? \"border.accent\" : \"border.muted\"}\n width=\"100%\"\n background=\"bg\"\n transition=\"border-color 0.2s ease-in-out, background 0.2s ease-in-out\"\n _hover={{ borderColor: isSelected ? \"border.accent\" : \"border.accent-light\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick ? handleClick : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\n >\n <HStack align=\"start\" gap=\"2xs\" flexWrap=\"wrap\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" flex=\"1\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <DataRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={onBadgeChange} />\n ))}\n {customSlots}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { type DragEvent, useState } from \"react\";\n\nimport { ResourceContextMenu } from \"@/components/resource-context-menu\";\nimport type { DataRendererBoardGroup } from \"./data-renderer-board\";\nimport { DataRendererCard } from \"./data-renderer-card\";\n\ninterface GroupSectionProps {\n columnId: string;\n group: DataRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nexport const GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((value) => !value)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"subtle\" bg=\"bg.muted\" color=\"fg.muted\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"sm\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport type { ResourceContextAction } from \"@/components/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/resource-context-menu\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { ColumnHeader } from \"./data-renderer-board-column-header\";\nimport { GroupSection } from \"./data-renderer-board-group-section\";\nimport { DataRendererCard } from \"./data-renderer-card\";\n\ntype DataRendererCardProps = ComponentProps<typeof DataRendererCard>;\n\nexport interface DataRendererBoardItem {\n id: string;\n cardProps: Omit<DataRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface DataRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface DataRendererBoardGroup {\n key: string;\n label: string;\n items: DataRendererBoardItem[];\n}\n\nexport interface DataRendererBoardColumn {\n id: string;\n label: string;\n createLabel?: string;\n color?: string;\n items: DataRendererBoardItem[];\n groups?: DataRendererBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: DataRendererBoardColumnAction[];\n}\n\ninterface DataRendererBoardProps {\n columns: DataRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (\n itemId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => Promise<void> | void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const DataRendererBoard = (props: DataRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n size=\"xs\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"0\", pb: \"2xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"0\"\n _notFirst={{ borderLeft: \"1px solid\", borderColor: \"border.muted\" }}\n background={activeColumn === column.id ? \"bg.subtle\" : \"bg\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"sm\",\n ps: \"xs\",\n pe: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n if (onMoveItem) {\n onMoveItem(itemId, column.id, { beforeItemId, targetGroupKey: group.key });\n return;\n }\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n","import { Badge, Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { type ComponentType, type DragEvent, type ReactNode, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport { DataRendererAttributeBadge } from \"./data-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererListItem {\n id: string;\n title: string;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: DataRendererListItem[];\n onClick?: () => void;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: string) => void;\n}\n\nexport type DataRendererListExpandedState = Record<string, boolean>;\n\nexport interface DataRendererListProps {\n items: DataRendererListItem[];\n selectedItemId?: string | null;\n expandedGroups?: DataRendererListExpandedState;\n onItemClick?: (item: DataRendererListItem) => void;\n onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\ninterface FlattenedDataRendererListItem {\n id: string;\n item: DataRendererListItem;\n depth: number;\n canExpand: boolean;\n}\n\nexport const getDataRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nexport const flattenDataRendererListItems = (\n items: DataRendererListItem[],\n expanded: DataRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedDataRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({ id: item.id, item, depth, canExpand });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenDataRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetIndicatorProps = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n\n return {\n _before: {\n content: '\"\"',\n position: \"absolute\",\n bg: \"border.accent\",\n left: \"0\",\n top: \"0\",\n width: isGroup ? \"3px\" : \"100%\",\n height: isGroup ? \"100%\" : \"2px\",\n },\n } as const;\n};\n\nconst getRowIsExpanded = (expandedState: DataRendererListExpandedState, rowId: string) => {\n return expandedState[rowId] !== false;\n};\n\nconst updateExpandedState = (expandedState: DataRendererListExpandedState, rowId: string, isExpanded: boolean) => {\n return { ...expandedState, [rowId]: isExpanded };\n};\n\nconst renderLabel = (item: DataRendererListItem) => (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n {typeof item.countBadge === \"number\" ? (\n <Badge\n variant=\"subtle\"\n size=\"sm\"\n flexShrink={0}\n {...(item.countColorPalette ? { colorPalette: item.countColorPalette } : { bg: \"bg.muted\", color: \"fg.muted\" })}\n >\n {item.countBadge}\n </Badge>\n ) : null}\n </HStack>\n);\n\nconst renderEndContent = (item: DataRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <DataRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={item.onBadgeChange} />\n ))}\n {item.customSlots}\n </Wrap>\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: DataRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item),\n icon: item.statusIcon ? <Icon as={item.statusIcon} boxSize=\"16px\" /> : undefined,\n iconColor: item.statusColor ?? \"fg.muted\",\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n separatorBefore: action.separatorBefore,\n endContent: action.endContent,\n onAction: action.onClick,\n })),\n});\n\nexport const DataRendererList = (props: DataRendererListProps) => {\n const { items, selectedItemId = null, expandedGroups, onItemClick, onExpandedGroupChange } = props;\n const [localExpandedGroups, setLocalExpandedGroups] = useState<DataRendererListExpandedState>({});\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const expanded = expandedGroups ?? localExpandedGroups;\n const rows = flattenDataRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n onExpandedGroupChange?.(rowId, isExpanded);\n if (expandedGroups === undefined) {\n setLocalExpandedGroups((current) => updateExpandedState(current, rowId, isExpanded));\n }\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <DataRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface DataRendererListRowProps {\n row: FlattenedDataRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst DataRendererListRow = (props: DataRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n position=\"relative\"\n borderBottomWidth=\"1px\"\n borderBottomColor=\"border.muted\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n draggable={item.draggable}\n transition=\"background 120ms ease\"\n {...getDropTargetIndicatorProps(isDropTarget, canExpand)}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/empty-state\";\nimport { DataRendererBoard, type DataRendererBoardColumn } from \"./data-renderer-board\";\nimport { DataRendererList, type DataRendererListItem } from \"./data-renderer-list\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DataRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface DataRendererContentProps {\n viewMode: DataRendererSettings[\"viewMode\"];\n boardColumns: DataRendererBoardColumn[];\n listItems: DataRendererListItem[];\n listExpandedGroups: Record<string, boolean>;\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onBoardMoveToGroup: (\n rowId: string,\n targetGroupKey: string,\n context?: { beforeItemId?: string },\n ) => Promise<void> | void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n onListExpandedGroupChange: (rowId: string, isExpanded: boolean) => void;\n listKey: string;\n}\n\nconst DataRendererEmptyState = (props: DataRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const DataRendererContent = (props: DataRendererContentProps) => {\n const {\n viewMode,\n boardColumns,\n listItems,\n listExpandedGroups,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n onListExpandedGroupChange,\n listKey,\n } = props;\n\n if (viewMode === \"board\") {\n return (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <DataRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : (\n <DataRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n )}\n </Box>\n );\n }\n\n if (listItems.length > 0) {\n return (\n <DataRendererList\n key={listKey}\n items={listItems}\n selectedItemId={selectedRowId}\n expandedGroups={listExpandedGroups}\n onExpandedGroupChange={onListExpandedGroupChange}\n />\n );\n }\n\n return <DataRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import type { AttributeType, EnumOption } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst dedupeEnumOptions = (options: EnumOption[]) => {\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain option list.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values.\n */\nexport const getEnumOptions = (type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n const options = isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n return dedupeEnumOptions(options);\n};\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\nexport const findEnumOption = (type: AttributeType, value: string) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\n};\n","import { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./data-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, EnumOption } from \"./types\";\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n attributeLabel?: string;\n label: string;\n color?: string;\n icon?: string | null;\n value?: string | string[];\n options?: EnumOption[];\n isEditable?: boolean;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nexport const renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n const editable = descriptor.editable === true;\n if (!stringValue) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: stringValue ?? undefined,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n ...(editable ? { value: stringValue, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n\nexport const renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n const summary = summarizeMultiEnum(values, type);\n const editable = descriptor.editable === true;\n if (!summary) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: values,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: summary,\n color: firstOption?.color,\n icon: firstOption?.icon,\n ...(editable ? { value: values, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n","import { createElement, type ReactNode } from \"react\";\nimport { WorkspaceBadge, type WorkspaceBadgeProps } from \"../workspace-badge\";\nimport type { AttributeBadge } from \"./data-renderer-badge-helpers\";\nimport { renderEnumBadge, renderMultiEnumBadge } from \"./data-renderer-badge-helpers\";\nimport { getEnumOptions, toTitleCase } from \"./data-renderer-enum-helpers\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\nexport type { AttributeBadge } from \"./data-renderer-badge-helpers\";\nexport { getAttributeBadgeColorPalette } from \"./data-renderer-badge-helpers\";\nexport { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./data-renderer-enum-helpers\";\n\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: DataRendererRow, descriptor: AttributeDescriptor) => {\n const raw = row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: DataRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\") return [String(value)];\n return [];\n};\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\ninterface WorkspaceBadgeItem {\n id: string;\n name: string;\n shorthand?: string;\n type: WorkspaceBadgeProps[\"workspaceType\"];\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst textValue = (value: unknown) => (typeof value === \"string\" && value.trim() ? value.trim() : undefined);\n\nconst workspaceTypeFrom = (value: unknown): WorkspaceBadgeProps[\"workspaceType\"] =>\n value === \"current_branch\" ? \"current_branch\" : \"worktree\";\n\nconst normalizeWorkspaceBadgeItems = (value: unknown): WorkspaceBadgeItem[] => {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((item) => {\n if (!isRecord(item)) return [];\n const id = textValue(item.id);\n if (!id) return [];\n const shorthand = textValue(item.shorthand);\n const name = textValue(item.name) ?? shorthand ?? id;\n return [{ id, name, ...(shorthand ? { shorthand } : {}), type: workspaceTypeFrom(item.type) }];\n });\n};\n\nconst renderWorkspaceBadgeDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: DataRendererRow,\n): ReactNode => {\n if (descriptor.display?.kind !== \"workspace-badge\") return null;\n const items = normalizeWorkspaceBadgeItems(row.attributes[descriptor.display.itemsAttributeId]);\n if (items.length === 0) return null;\n\n const selectedId = typeof value === \"string\" ? value : undefined;\n const selectedItem = items.find((item) => item.id === selectedId) ?? items[0];\n if (!selectedItem) return null;\n\n return createElement(WorkspaceBadge, {\n workspaceType: selectedItem.type,\n shorthand: selectedItem.shorthand ?? selectedItem.name,\n hasMultipleWorkspaces: items.length > 1,\n showLeadingSessionIndicator: false,\n });\n};\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (descriptor: AttributeDescriptor, row: DataRendererRow): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render || descriptor.display) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n\n const value = getAttributeValue(row, descriptor);\n const slot = descriptor.render\n ? descriptor.render(value, row)\n : renderWorkspaceBadgeDisplay(descriptor, value, row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: DataRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n selectionMode: \"multiple\";\n options: { value: string; label: string; color?: string }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: DataRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n selectionMode: \"multiple\",\n options: [\n ...declared.map((option) => ({ value: option.value, label: option.label, color: option.color })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, selectionMode: \"multiple\", options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildOrderingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: MANUAL_ORDERING, label: \"Manual\" }];\n options.push({ value: \"title\", label: \"Title\" });\n for (const descriptor of attributes) {\n if (!descriptor.sortable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filters?: DataRendererFilterState,\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const descriptor = findAttribute(attributes, columnGrouping);\n const active = filters?.[columnGrouping];\n if (descriptor && active && active.length > 0) return normalizeFilterValues(descriptor, active);\n if (!descriptor) return undefined;\n if (descriptor.type.kind === \"enum\") return getEnumOptions(descriptor.type).map((option) => option.value);\n return undefined;\n};\n\nexport const normalizeFilterValues = (_descriptor: AttributeDescriptor, values: string[]) => values;\n\nexport const omitFilterCategory = (filters: DataRendererFilterState, id: string): DataRendererFilterState => {\n const next = { ...filters };\n delete next[id];\n return next;\n};\n\n/**\n * Drop persisted settings entries that reference attribute ids no longer\n * declared by the contribution. Falls back to defaults for missing grouping\n * and ordering attributes so a stale saved view still loads cleanly.\n */\nexport const sanitizeSettings = (\n settings: DataRendererSettings,\n attributes: AttributeDescriptor[],\n): DataRendererSettings => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const validGroupingId = (id: string) => id === NO_GROUPING || knownIds.has(id);\n const validOrderingId = (id: string) => id === MANUAL_ORDERING || id === \"title\" || knownIds.has(id);\n\n const columnGrouping = validGroupingId(settings.columnGrouping) ? settings.columnGrouping : NO_GROUPING;\n const rowGrouping = validGroupingId(settings.rowGrouping) ? settings.rowGrouping : NO_GROUPING;\n const orderingId = validOrderingId(settings.ordering.attributeId) ? settings.ordering.attributeId : MANUAL_ORDERING;\n const displayProperties = settings.displayProperties.filter(validGroupingId);\n\n return {\n viewMode: settings.viewMode,\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId, direction: settings.ordering.direction },\n displayProperties,\n };\n};\n\nexport const sanitizeFilters = (filters: DataRendererFilterState, attributes: AttributeDescriptor[]) => {\n const attributesById = new Map(attributes.map((attribute) => [attribute.id, attribute]));\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n const descriptor = attributesById.get(id);\n if (!descriptor) continue;\n if (!values || values.length === 0) continue;\n next[id] = normalizeFilterValues(descriptor, values);\n }\n return next;\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\n normalizeFilterValues,\n toTitleCase,\n} from \"./data-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n type AttributeType,\n type DataRendererFilterState,\n type DataRendererOrdering,\n type DataRendererRow,\n findAttribute,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n}\n\ninterface DataRendererRowGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n}\n\ninterface DataRendererColumnGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n subgroups: DataRendererRowGroup[];\n}\n\nconst UNASSIGNED_LABEL = \"Unassigned\";\n\nconst fallbackLabel = (descriptor: AttributeDescriptor) => `No ${descriptor.label.toLowerCase()}`;\n\nconst labelForGroupKey = (key: string, descriptor: AttributeDescriptor | undefined) => {\n if (!descriptor) return key === NO_GROUPING ? \"All\" : key;\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")\n return enumOptionLabel(descriptor.type, key);\n return key;\n};\n\n// Drops values that are no longer a declared enum option so rows pointing at a\n// removed status collapse into the \"No <attribute>\" column instead of stranding\n// an orphaned column keyed by the deleted value.\nconst resolveGroupingValue = (value: string | undefined, descriptor: AttributeDescriptor) => {\n if (value === undefined) return undefined;\n if (descriptor.type.kind !== \"enum\" && descriptor.type.kind !== \"enum-multi\") return value;\n return getEnumOptions(descriptor.type).some((option) => option.value === value) ? value : undefined;\n};\n\nconst getGroupingKey = (row: DataRendererRow, descriptor: AttributeDescriptor | undefined, columnId: string) => {\n if (columnId === NO_GROUPING) return \"all\";\n if (!descriptor) return \"all\";\n // Grouping by an enum-multi is intentionally rejected at the renderer level\n // (the contribution lists it as non-groupable). Defensive fallback: treat\n // each row as a single bucket using its first value, else fallback.\n if (descriptor.type.kind === \"enum-multi\") {\n const [first] = getAttributeStringValues(row, descriptor);\n return resolveGroupingValue(first, descriptor) ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return resolveGroupingValue(value, descriptor) ?? fallbackLabel(descriptor);\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst compareGroupKeyForDescriptor = (a: string, b: string, descriptor: AttributeDescriptor | undefined) => {\n if (descriptor && (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")) {\n const ordered = compareEnumValues(a, b, descriptor.type);\n if (ordered !== 0) return ordered;\n }\n return compareGroupKey(a, b);\n};\n\nconst orderByDirection = (value: number, direction: DataRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nconst compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst compareForDescriptor = (a: DataRendererRow, b: DataRendererRow, descriptor: AttributeDescriptor) => {\n if (descriptor.compare) return descriptor.compare(getAttributeValue(a, descriptor), getAttributeValue(b, descriptor));\n\n const left = getAttributeValue(a, descriptor);\n const right = getAttributeValue(b, descriptor);\n\n if (descriptor.type.kind === \"date\") {\n const leftTime = typeof left === \"string\" ? new Date(left).getTime() : 0;\n const rightTime = typeof right === \"string\" ? new Date(right).getTime() : 0;\n return leftTime - rightTime;\n }\n\n if (descriptor.type.kind === \"number\") {\n const leftNum = typeof left === \"number\" ? left : Number(left ?? 0);\n const rightNum = typeof right === \"number\" ? right : Number(right ?? 0);\n return leftNum - rightNum;\n }\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const [leftValue] = getAttributeStringValues(a, descriptor);\n const [rightValue] = getAttributeStringValues(b, descriptor);\n return compareEnumValues(leftValue, rightValue, descriptor.type);\n }\n\n const leftString = typeof left === \"string\" ? left : String(left ?? \"\");\n const rightString = typeof right === \"string\" ? right : String(right ?? \"\");\n return leftString.localeCompare(rightString, undefined, { numeric: true });\n};\n\nexport const orderRows = (\n rows: DataRendererRow[],\n ordering: DataRendererOrdering,\n attributes: AttributeDescriptor[],\n) => {\n if (ordering.attributeId === MANUAL_ORDERING) return rows;\n\n if (ordering.attributeId === \"title\") {\n return [...rows].sort((a, b) => orderByDirection(a.title.localeCompare(b.title), ordering.direction));\n }\n\n const descriptor = findAttribute(attributes, ordering.attributeId);\n if (!descriptor) return rows;\n\n return [...rows].sort((a, b) => orderByDirection(compareForDescriptor(a, b, descriptor), ordering.direction));\n};\n\nexport const groupRows = (rows: DataRendererRow[], options: GroupingOptions): DataRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys } = options;\n const columnDescriptor = findAttribute(attributes, columnGrouping);\n const rowDescriptor = findAttribute(attributes, rowGrouping);\n const groupedByColumn = new Map<string, DataRendererRow[]>();\n\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) groupedByColumn.set(key, []);\n }\n\n for (const row of rows) {\n const key = getGroupingKey(row, columnDescriptor, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), row]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) =>\n compareGroupKeyForDescriptor(left, right, columnDescriptor),\n );\n\n return columnEntries.map(([columnKey, columnRows]) => {\n const label = labelForGroupKey(columnKey, columnDescriptor);\n\n if (rowGrouping === NO_GROUPING) {\n return { key: columnKey, label, rows: columnRows, subgroups: [] };\n }\n\n const groupedByRow = new Map<string, DataRendererRow[]>();\n for (const row of columnRows) {\n const rowKey = getGroupingKey(row, rowDescriptor, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), row]);\n }\n\n const subgroups = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKeyForDescriptor(left, right, rowDescriptor))\n .map(([rowKey, rowRows]) => ({\n key: rowKey,\n label: labelForGroupKey(rowKey, rowDescriptor) || toTitleCase(rowKey || UNASSIGNED_LABEL),\n rows: rowRows,\n }));\n\n return { key: columnKey, label, rows: columnRows, subgroups };\n });\n};\n\nconst matchesFilter = (row: DataRendererRow, descriptor: AttributeDescriptor, values: string[]) => {\n const rowValues = getAttributeStringValues(row, descriptor);\n const normalizedValues = normalizeFilterValues(descriptor, values);\n return rowValues.some((value) => normalizedValues.includes(value));\n};\n\nexport const filterRows = (\n rows: DataRendererRow[],\n filters: DataRendererFilterState,\n attributes: AttributeDescriptor[],\n) => {\n const activeFilters = Object.entries(filters).filter(\n (entry): entry is [string, string[]] => Array.isArray(entry[1]) && entry[1].length > 0,\n );\n if (activeFilters.length === 0) return rows;\n\n return rows.filter((row) =>\n activeFilters.every(([id, values]) => {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor) return true;\n return matchesFilter(row, descriptor, values);\n }),\n );\n};\n\nexport const countFilterValues = (rows: DataRendererRow[], attributeId: string, attributes: AttributeDescriptor[]) => {\n const counts: Record<string, number> = {};\n const descriptor = findAttribute(attributes, attributeId);\n if (!descriptor) return counts;\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n return counts;\n};\n\nexport type { DataRendererColumnGroup, DataRendererRowGroup };\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Separator, Stack, Text } from \"@chakra-ui/react\";\nimport { ArrowDownAZ, ArrowDownZA, Check, ChevronDown, KanbanSquare, List, Settings2 } from \"lucide-react\";\nimport { Fragment, useEffect, useRef, useState } from \"react\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./data-renderer-helpers\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: DataRendererSettings;\n groupingOptions: MenuOption[];\n orderingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: DataRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onOrderingAttributeIdChange: (value: string) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nconst viewModeOptions = [\n { value: \"list\", label: \"List\", icon: List },\n { value: \"board\", label: \"Board\", icon: KanbanSquare },\n] as const;\n\nconst Dropdown = (props: {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n flex?: string | number;\n}) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Stack gap=\"2xs\" flex={props.flex}>\n <SectionLabel>{props.label}</SectionLabel>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"outline\" width=\"full\" justifyContent=\"space-between\">\n {selectedLabel}\n <Icon as={ChevronDown} color=\"fg.muted\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"260px\" bg=\"bg\">\n {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <HStack gap=\"2\" justifyContent=\"space-between\" width=\"full\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n {option.value === props.value ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Stack>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n orderingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onOrderingAttributeIdChange,\n onSortDirectionToggle,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const SortDirectionIcon = settings.ordering.direction === \"asc\" ? ArrowDownAZ : ArrowDownZA;\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"sm\">\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"320px\" p=\"sm\" bg=\"bg\">\n <Stack gap=\"sm\">\n <SectionLabel>View</SectionLabel>\n <HStack gap=\"2xs\">\n {viewModeOptions.map((option) => {\n const ViewModeIcon = option.icon;\n const active = settings.viewMode === option.value;\n\n return (\n <Button\n key={option.value}\n flex=\"1\"\n size=\"sm\"\n variant={active ? \"primary\" : \"outline\"}\n aria-pressed={active}\n onClick={() => onViewModeChange(option.value)}\n >\n <ViewModeIcon size={14} />\n {option.label}\n </Button>\n );\n })}\n </HStack>\n\n <Separator />\n\n <Dropdown\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n\n <Dropdown\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n <HStack gap=\"2xs\" alignItems=\"end\">\n <Dropdown\n label=\"Sort by\"\n value={settings.ordering.attributeId}\n options={orderingOptions}\n onSelect={onOrderingAttributeIdChange}\n flex=\"1\"\n />\n <IconButton\n aria-label=\"Toggle sort direction\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onSortDirectionToggle}\n data-direction={settings.ordering.direction}\n >\n <Icon as={SortDirectionIcon} />\n </IconButton>\n </HStack>\n\n <Separator />\n <Stack gap=\"2xs\">\n <SectionLabel>Display properties</SectionLabel>\n <HStack flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const isActive = settings.displayProperties.includes(option.value);\n\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant={isActive ? \"primary\" : \"outline\"}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Stack>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Badge, Button, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Filter } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { Checkbox } from \"../checkbox\";\nimport { Header } from \"../header\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { ScrollArea } from \"../scroll-area\";\nimport type { FilterCategoryView } from \"./data-renderer-helpers\";\nimport type { DataRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: FilterCategoryView[];\n filters: DataRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (attributeId: string, value: string) => void;\n onClearFilter: (attributeId: string) => void;\n onClearAll: () => void;\n}\n\ninterface FilterOptionRowProps {\n option: FilterCategoryView[\"options\"][number];\n checked: boolean;\n count: number;\n onSelect: () => void;\n}\n\nconst normalizeSelectedValues = (selected: string[] | undefined) => {\n if (!selected || selected.length === 0) return [];\n return selected;\n};\n\nconst buildNormalizedFilters = (categories: FilterCategoryView[], filters: DataRendererFilterState) => {\n const normalized: DataRendererFilterState = {};\n for (const category of categories) {\n const values = normalizeSelectedValues(filters[category.id]);\n if (values.length > 0) normalized[category.id] = values;\n }\n return normalized;\n};\n\nconst getActiveFilterCount = (filters: DataRendererFilterState) =>\n Object.values(filters).reduce((sum, values) => sum + (values?.length ?? 0), 0);\n\nconst getSelectedFilterDescription = (category: FilterCategoryView, selectedValues: string[]) => {\n if (selectedValues.length === 0) return undefined;\n\n const labels = selectedValues.map(\n (value) => category.options.find((option) => option.value === value)?.label ?? value,\n );\n\n if (labels.length <= 2) return labels.join(\", \");\n\n return `${labels.slice(0, 2).join(\", \")} +${labels.length - 2}`;\n};\n\nconst FilterCategoryLabel = (props: { label: string; selectedDescription?: string }) => {\n const { label, selectedDescription } = props;\n\n return (\n <HStack gap=\"2xs\" minW=\"0\" width=\"full\">\n <Text as=\"span\" textStyle=\"label/S/regular\" color=\"inherit\" flexShrink={0} truncate>\n {label}\n </Text>\n {selectedDescription ? (\n <Text as=\"span\" textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" minW=\"0\" truncate>\n {selectedDescription}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst FilterOptionLabel = (props: { label: string; checked: boolean }) => {\n const { label, checked } = props;\n\n return (\n <HStack gap=\"2\" minW=\"0\">\n <Checkbox\n checked={checked}\n readOnly\n aria-readonly=\"true\"\n inputProps={{ tabIndex: -1, \"aria-hidden\": true }}\n pointerEvents=\"none\"\n size=\"sm\"\n />\n <Text textStyle=\"label/S/regular\" color=\"inherit\" truncate>\n {label}\n </Text>\n </HStack>\n );\n};\n\nconst FilterOptionRow = (props: FilterOptionRowProps) => {\n const { option, checked, count, onSelect } = props;\n\n return (\n <ListRow\n id={option.value}\n role=\"checkbox\"\n aria-label={option.label}\n aria-checked={checked}\n variant=\"compact\"\n label={<FilterOptionLabel label={option.label} checked={checked} />}\n endContent={\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {count}\n </Text>\n }\n onActivate={onSelect}\n />\n );\n};\n\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { categories, filters, countsByCategory, onToggleFilterValue, onClearFilter, onClearAll } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [activeCategoryId, setActiveCategoryId] = useState<string>(categories[0]?.id ?? \"\");\n\n const activeCategory = categories.find((category) => category.id === activeCategoryId) ?? categories[0];\n\n const normalizedFilters = buildNormalizedFilters(categories, filters);\n const activeFilterCount = getActiveFilterCount(normalizedFilters);\n\n const handleOptionSelect = (category: FilterCategoryView, value: string) => {\n onToggleFilterValue(category.id, value);\n };\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Filter rows\" variant=\"ghost\" size=\"sm\">\n <HStack gap=\"2xs\">\n <Icon as={Filter} boxSize=\"14px\" />\n {activeFilterCount > 0 ? <Badge variant=\"solid\">{activeFilterCount}</Badge> : null}\n </HStack>\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content\n ref={contentRef}\n width=\"min(440px, calc(100vw - 32px))\"\n height=\"min(320px, calc(100vh - 32px))\"\n p=\"0\"\n bg=\"bg\"\n gap=\"0\"\n overflow=\"hidden\"\n >\n <HStack align=\"stretch\" gap=\"0\" minH=\"0\" height=\"full\">\n <Stack minWidth=\"188px\" borderRightWidth=\"1px\" borderColor=\"border.muted\" gap=\"0\" minH=\"0\">\n <Header\n variant=\"narrow\"\n justifyContent=\"space-between\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n Filters\n </Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={onClearAll}>\n Clear all\n </Button>\n </Header>\n <ScrollArea flex=\"1\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }} p=\"0\" gap=\"0\">\n {categories.map((category) => {\n const selectedValues = normalizedFilters[category.id] ?? [];\n const selectedDescription = getSelectedFilterDescription(category, selectedValues);\n\n return (\n <ListRow\n key={category.id}\n id={category.id}\n label={<FilterCategoryLabel label={category.label} selectedDescription={selectedDescription} />}\n role=\"button\"\n variant=\"compact\"\n isSelected={activeCategory?.id === category.id}\n endContent={\n selectedValues.length > 0 ? (\n <Badge variant=\"subtle\" bg=\"bg.muted\" color=\"fg.muted\">\n {selectedValues.length}\n </Badge>\n ) : undefined\n }\n onActivate={() => setActiveCategoryId(category.id)}\n />\n );\n })}\n </ScrollArea>\n </Stack>\n\n <Stack flex=\"1\" gap=\"0\" minW=\"0\" minH=\"0\">\n {activeCategory ? (\n <>\n <Header\n variant=\"narrow\"\n justifyContent=\"space-between\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Text textStyle=\"label/S/medium\">{activeCategory.label}</Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onClearFilter(activeCategory.id)}>\n Clear\n </Button>\n </Header>\n <ScrollArea flex=\"1\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }} p=\"0\" gap=\"0\">\n {activeCategory.options.map((option) => {\n const checked = (normalizedFilters[activeCategory.id] ?? []).includes(option.value);\n const count = countsByCategory[activeCategory.id]?.[option.value] ?? 0;\n\n return (\n <FilterOptionRow\n key={option.value}\n option={option}\n checked={checked}\n count={count}\n onSelect={() => handleOptionSelect(activeCategory, option.value)}\n />\n );\n })}\n </ScrollArea>\n </>\n ) : null}\n </Stack>\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport { omitFilterCategory } from \"./data-renderer-helpers\";\nimport {\n type DataRendererFilterState,\n type DataRendererSettings,\n DEFAULT_DATA_RENDERER_SETTINGS,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface DataRendererSnapshot {\n settings: DataRendererSettings;\n filters: DataRendererFilterState;\n expandedGroups: Record<string, boolean>;\n}\n\ninterface DataRendererStoreInitialState {\n settings?: Partial<DataRendererSettings>;\n filters?: DataRendererFilterState;\n expandedGroups?: Record<string, boolean>;\n}\n\ninterface DataRendererState extends DataRendererSnapshot {\n setViewMode: (viewMode: DataRendererSettings[\"viewMode\"]) => void;\n setColumnGrouping: (columnGrouping: DataRendererSettings[\"columnGrouping\"]) => void;\n setRowGrouping: (rowGrouping: DataRendererSettings[\"rowGrouping\"]) => void;\n setOrdering: (ordering: DataRendererSettings[\"ordering\"]) => void;\n setOrderingAttributeId: (attributeId: DataRendererSettings[\"ordering\"][\"attributeId\"]) => void;\n setDisplayProperties: (displayProperties: string[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: string) => void;\n setFilter: (attributeId: string, values: string[]) => void;\n toggleFilterValue: (attributeId: string, value: string) => void;\n clearFilter: (attributeId: string) => void;\n clearAllFilters: () => void;\n setExpandedGroup: (groupId: string, isExpanded: boolean) => void;\n reset: () => void;\n}\n\ninterface CreateDataRendererStoreOptions {\n storageKey: string;\n initialState?: DataRendererStoreInitialState;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/data-renderer\";\n\nconst toStorageName = (storageKey: string) => `${WORKSPACE_STORE_NAMESPACE}/${storageKey}`;\n\nconst DEFAULT_SNAPSHOT: DataRendererSnapshot = {\n settings: DEFAULT_DATA_RENDERER_SETTINGS,\n filters: {},\n expandedGroups: {},\n};\n\nconst createSnapshot = (initialState?: DataRendererStoreInitialState): DataRendererSnapshot => ({\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n expandedGroups: initialState?.expandedGroups ?? DEFAULT_SNAPSHOT.expandedGroups,\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\n// Strip the legacy \"tag:\" prefix used before attributes became first-class.\nconst stripTagPrefix = (id: string) => (id.startsWith(\"tag:\") ? id.slice(4) : id);\n\nconst migrateSettings = (settings: Record<string, unknown>): DataRendererSettings => {\n const orderingRaw = settings.ordering as Record<string, unknown> | undefined;\n const orderingId =\n typeof orderingRaw?.attributeId === \"string\"\n ? (orderingRaw.attributeId as string)\n : typeof orderingRaw?.field === \"string\"\n ? stripTagPrefix(orderingRaw.field as string)\n : MANUAL_ORDERING;\n const orderingDirection = (\n orderingRaw?.direction === \"desc\" ? \"desc\" : \"asc\"\n ) as DataRendererSettings[\"ordering\"][\"direction\"];\n\n const columnGrouping =\n typeof settings.columnGrouping === \"string\" ? stripTagPrefix(settings.columnGrouping) : NO_GROUPING;\n const rowGrouping = typeof settings.rowGrouping === \"string\" ? stripTagPrefix(settings.rowGrouping) : NO_GROUPING;\n const displayProperties = Array.isArray(settings.displayProperties)\n ? (settings.displayProperties as unknown[])\n .filter((entry): entry is string => typeof entry === \"string\")\n .map(stripTagPrefix)\n : [];\n\n return {\n viewMode: settings.viewMode === \"list\" ? \"list\" : \"board\",\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId === \"manual\" ? MANUAL_ORDERING : orderingId, direction: orderingDirection },\n displayProperties,\n };\n};\n\nconst migrateFilters = (filters: Record<string, unknown>): DataRendererFilterState => {\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!Array.isArray(values)) continue;\n const stringValues = values.filter((value): value is string => typeof value === \"string\");\n if (stringValues.length === 0) continue;\n next[stripTagPrefix(id)] = stringValues;\n }\n return next;\n};\n\nexport const createDataRendererStore = (options: CreateDataRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = createSnapshot(initialState);\n\n return createStore<DataRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) => set((state) => ({ ...state, settings: { ...state.settings, viewMode } })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({ ...state, settings: { ...state.settings, columnGrouping } })),\n setRowGrouping: (rowGrouping) => set((state) => ({ ...state, settings: { ...state.settings, rowGrouping } })),\n setOrdering: (ordering) => set((state) => ({ ...state, settings: { ...state.settings, ordering } })),\n setOrderingAttributeId: (attributeId) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering: { ...state.settings.ordering, attributeId } },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({ ...state, settings: { ...state.settings, displayProperties } })),\n toggleSortDirection: () =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n direction: state.settings.ordering.direction === \"asc\" ? \"desc\" : \"asc\",\n },\n },\n })),\n toggleDisplayProperty: (property) =>\n set((state) => {\n const displayProperties = state.settings.displayProperties.includes(property)\n ? state.settings.displayProperties.filter((value) => value !== property)\n : [...state.settings.displayProperties, property];\n return { ...state, settings: { ...state.settings, displayProperties } };\n }),\n setFilter: (attributeId, values) =>\n set((state) => ({ ...state, filters: { ...state.filters, [attributeId]: values } })),\n toggleFilterValue: (attributeId, value) =>\n set((state) => {\n const currentValues = state.filters[attributeId] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, attributeId)\n : { ...state.filters, [attributeId]: nextValues };\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (attributeId) =>\n set((state) => ({ ...state, filters: omitFilterCategory(state.filters, attributeId) })),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n setExpandedGroup: (groupId, isExpanded) =>\n set((state) => ({ ...state, expandedGroups: { ...state.expandedGroups, [groupId]: isExpanded } })),\n reset: () => set(snapshot),\n }),\n {\n name: toStorageName(storageKey),\n version: 2,\n migrate: (persisted, version) => {\n if (!persisted || typeof persisted !== \"object\") return persisted as DataRendererSnapshot;\n const state = persisted as {\n settings?: Record<string, unknown>;\n filters?: Record<string, unknown>;\n expandedGroups?: Record<string, boolean>;\n };\n if (version >= 2) {\n const snapshot = state as unknown as DataRendererSnapshot;\n return { ...snapshot, expandedGroups: snapshot.expandedGroups ?? {} };\n }\n return {\n settings: migrateSettings(state.settings ?? {}),\n filters: migrateFilters(state.filters ?? {}),\n expandedGroups: {},\n };\n },\n storage: createJSONStorage(createBrowserStorage),\n partialize: (state) => ({\n settings: state.settings,\n filters: state.filters,\n expandedGroups: state.expandedGroups,\n }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createDataRendererStore>>();\n\nexport const getDataRendererStore = (storageKey: string, initialState?: DataRendererStoreInitialState) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) return existingStore;\n\n const store = createDataRendererStore({ storageKey, initialState });\n workspaceStoreRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useDataRendererStore = <T>(\n storageKey: string,\n selector: (state: DataRendererState) => T,\n initialState?: DataRendererStoreInitialState,\n) => {\n const store = getDataRendererStore(storageKey, initialState);\n return useStore(store, selector);\n};\n\nexport type { DataRendererSnapshot, DataRendererState, DataRendererStoreInitialState };\n","import { useEffect, useReducer } from \"react\";\n\nimport type { AttributeDescriptor, EnumOptionsSource } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst collectSources = (attributes: AttributeDescriptor[]): EnumOptionsSource[] => {\n const sources: EnumOptionsSource[] = [];\n for (const attribute of attributes) {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") continue;\n if (isEnumOptionsSource(attribute.type.options)) sources.push(attribute.type.options);\n }\n return sources;\n};\n\n/**\n * Returns the same descriptors with every source-backed enum's options\n * replaced by a fresh `getSnapshot()` array. Pure — call from anywhere that\n * needs a normalized view of the schema.\n */\nexport const resolveAttributeOptions = (attributes: AttributeDescriptor[]): AttributeDescriptor[] =>\n attributes.map((attribute) => {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") return attribute;\n if (!isEnumOptionsSource(attribute.type.options)) return attribute;\n return { ...attribute, type: { ...attribute.type, options: attribute.type.options.getSnapshot() } };\n });\n\n/**\n * Subscribes to every source-backed enum in `attributes` and returns the\n * resolved descriptors (options materialized to plain arrays). When any\n * source's listener fires the component rerenders, so downstream renders see\n * the new snapshot automatically.\n */\nexport const useResolvedAttributes = (attributes: AttributeDescriptor[]) => {\n const [, forceRender] = useReducer((tick: number) => tick + 1, 0);\n\n useEffect(() => {\n const sources = collectSources(attributes);\n if (sources.length === 0) return;\n const refresh = () => forceRender();\n const unsubscribes = sources.map((source) => source.subscribe(refresh));\n return () => {\n for (const dispose of unsubscribes) dispose();\n };\n }, [attributes]);\n\n return resolveAttributeOptions(attributes);\n};\n","import { Box, HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { countFilterValues } from \"./data-renderer-grouping\";\nimport {\n buildDisplayPropertyOptions,\n buildFilterCategories,\n buildGroupingOptions,\n buildOrderingOptions,\n} from \"./data-renderer-helpers\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface DataRendererToolbarProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n leading?: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nexport const DataRendererToolbar = <TRow extends DataRendererRow>(props: DataRendererToolbarProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n defaultSettings,\n defaultFilters,\n leading,\n align = \"split\",\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const groupingOptions = buildGroupingOptions(attributes);\n const orderingOptions = buildOrderingOptions(attributes);\n const displayPropertyOptions = buildDisplayPropertyOptions(attributes);\n\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const setViewMode = useDataRendererStore(storageKey, (state) => state.setViewMode, initialState);\n const setColumnGrouping = useDataRendererStore(storageKey, (state) => state.setColumnGrouping, initialState);\n const setRowGrouping = useDataRendererStore(storageKey, (state) => state.setRowGrouping, initialState);\n const setOrderingAttributeId = useDataRendererStore(\n storageKey,\n (state) => state.setOrderingAttributeId,\n initialState,\n );\n const toggleSortDirection = useDataRendererStore(storageKey, (state) => state.toggleSortDirection, initialState);\n const toggleDisplayProperty = useDataRendererStore(storageKey, (state) => state.toggleDisplayProperty, initialState);\n const toggleFilterValue = useDataRendererStore(storageKey, (state) => state.toggleFilterValue, initialState);\n const clearFilter = useDataRendererStore(storageKey, (state) => state.clearFilter, initialState);\n const clearAllFilters = useDataRendererStore(storageKey, (state) => state.clearAllFilters, initialState);\n\n const categoryOptions = buildFilterCategories(attributes, rows);\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(rows, category.id, attributes)]),\n );\n\n return (\n <HStack\n gap=\"2xs\"\n minW=\"0\"\n w={align === \"split\" ? \"full\" : undefined}\n flexShrink={0}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n padding=\"2xs\"\n >\n {leading}\n {align === \"split\" ? <Box flex=\"1\" /> : null}\n <FilterMenu\n categories={categoryOptions}\n filters={filters}\n countsByCategory={countsByCategory}\n onToggleFilterValue={toggleFilterValue}\n onClearFilter={clearFilter}\n onClearAll={clearAllFilters}\n />\n <DisplayMenu\n settings={settings}\n groupingOptions={groupingOptions}\n orderingOptions={orderingOptions}\n displayPropertyOptions={displayPropertyOptions}\n onViewModeChange={setViewMode}\n onColumnGroupingChange={setColumnGrouping}\n onRowGroupingChange={setRowGrouping}\n onOrderingAttributeIdChange={setOrderingAttributeId}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type {\n DataRendererBoardColumn,\n DataRendererBoardColumnAction,\n DataRendererBoardGroup,\n} from \"./data-renderer-board\";\nimport { applyBoardMoveItem, applyBoardMoveToGroup } from \"./data-renderer-board-move\";\nimport { DataRendererContent } from \"./data-renderer-content\";\nimport { type DataRendererColumnGroup, filterRows, groupRows, orderRows } from \"./data-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n} from \"./data-renderer-helpers\";\nimport type { DataRendererListItem } from \"./data-renderer-list\";\nimport { DataRendererToolbar } from \"./data-renderer-toolbar\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\n/** Board-column behavior and menu configuration for a resolved column group. */\nexport interface BoardColumnConfig {\n /** Chakra color palette used for the column header and group badges. */\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: DataRendererBoardColumnAction[];\n}\n\n/** Switchable list/board renderer for rows with typed attributes, filtering, grouping, and ordering. */\nexport interface DataRendererProps<TRow extends DataRendererRow = DataRendererRow> {\n /** Stable rows to render. Each row must have an id, title, and attributes map. */\n rows: TRow[];\n /** Persistent key used by the renderer store for view, filter, grouping, ordering, and list expansion settings. */\n storageKey: string;\n /** Attribute descriptors that define display, filtering, grouping, ordering, and board columns. */\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyState?: ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n /** Called when a row attribute changes through drag/drop, board movement, or inline controls. */\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n /** Called for manual row ordering when a dragged row is dropped before another row. */\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\ninterface BuildListItemsInput<TRow extends DataRendererRow> {\n settings: DataRendererSettings;\n visibleRows: TRow[];\n grouped: DataRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nconst buildListItems = <TRow extends DataRendererRow>(input: BuildListItemsInput<TRow>): DataRendererListItem[] => {\n const {\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const getGroupColorPalette = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n return descriptor ? findEnumOption(descriptor.type, key)?.color : undefined;\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): DataRendererListItem => ({\n id: row.id,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n });\n\n const toSubgroupListItem = (\n subgroup: { key: string; label: string; rows: DataRendererRow[] },\n parent?: { columnKey: string },\n ): DataRendererListItem => ({\n id: parent ? `group::${parent.columnKey}::${subgroup.key}` : `group::${subgroup.key}`,\n title: subgroup.label,\n countBadge: subgroup.rows.length,\n countColorPalette: getGroupColorPalette(parent ? settings.rowGrouping : settings.columnGrouping, subgroup.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? subgroup.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, subgroup.key);\n }\n }\n : undefined,\n children: orderRows(subgroup.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? subgroup.key,\n rowKey: parent ? subgroup.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) => {\n if (column.subgroups.length > 0) {\n return {\n id: `group::${column.key}`,\n title: column.label,\n countBadge: column.rows.length,\n countColorPalette: getGroupColorPalette(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((subgroup) => toSubgroupListItem(subgroup, { columnKey: column.key })),\n } satisfies DataRendererListItem;\n }\n\n return toSubgroupListItem(column);\n });\n};\n\nexport const DataRenderer = <TRow extends DataRendererRow>(props: DataRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n defaultSettings,\n defaultFilters,\n onRowClick,\n onAttributeChange,\n onReorder,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const expandedGroups = useDataRendererStore(storageKey, (state) => state.expandedGroups, initialState);\n const setExpandedGroup = useDataRendererStore(storageKey, (state) => state.setExpandedGroup, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const toBoardItems = (boardRows: DataRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: DataRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Column color follows the enum option when the contribution does not\n // provide one, while row display badges stay visually neutral.\n const enumColor = columnGroupingDescriptor\n ? findEnumOption(columnGroupingDescriptor.type, column.key)?.color\n : undefined;\n\n const groups: DataRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumColor,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies DataRendererBoardColumn;\n });\n\n const handleBoardMoveItem = async (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => {\n await applyBoardMoveItem({\n settings,\n rowId,\n targetColumnId,\n targetGroupKey: context?.targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n });\n };\n\n const handleBoardMoveToGroup = async (rowId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => {\n await applyBoardMoveToGroup({\n settings,\n rowId,\n targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n });\n };\n\n return (\n <Stack height=\"100%\" minH=\"0\" gap=\"0\">\n {hideToolbar ? null : (\n <DataRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n leading={toolbarLeading}\n />\n )}\n\n <DataRendererContent\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n listExpandedGroups={expandedGroups}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={onCreateRow}\n onColumnAction={onColumnAction}\n onListExpandedGroupChange={setExpandedGroup}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n </Stack>\n );\n};\n","import { Button, CloseButton, Dialog, Stack, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useState } from \"react\";\n\ninterface DeleteConfirmationModalProps {\n open: boolean;\n onClose: () => void;\n onDelete: () => void | Promise<void>;\n headline?: string;\n notificationText?: string;\n buttonText?: string;\n /** Extra controls rendered below the message, e.g. an opt-in checkbox. */\n children?: ReactNode;\n}\n\nexport type { DeleteConfirmationModalProps };\n\nexport const DeleteConfirmationModal = (props: DeleteConfirmationModalProps) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const { headline, buttonText, notificationText, onDelete, open, onClose, children } = props;\n\n const handleDelete = async () => {\n setIsDeleting(true);\n\n try {\n await onDelete();\n onClose();\n } catch {\n // Errors surface through parent state.\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onClose}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Text textStyle=\"heading/M\">{headline}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"3\">\n {notificationText ? <Text>{notificationText}</Text> : null}\n {children}\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"1\">\n <Button onClick={onClose}>Close</Button>\n <Button loading={isDeleting} variant=\"outline\" colorPalette=\"red\" onClick={handleDelete}>\n {buttonText}\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","export const imagePreviewMimeTypes = {\n avif: \"image/avif\",\n bmp: \"image/bmp\",\n gif: \"image/gif\",\n heic: \"image/heic\",\n ico: \"image/x-icon\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n png: \"image/png\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n webp: \"image/webp\",\n} as const;\n\nexport const imagePreviewExtensions = Object.keys(imagePreviewMimeTypes);\n\nexport const getFileExtension = (filePath: string) => {\n const fileName = filePath.split(/[\\\\/]/).pop() ?? filePath;\n const extension = fileName.split(\".\").pop();\n return extension ? extension.toLowerCase() : \"\";\n};\n\nexport const getImagePreviewMimeType = (filePath: string) => {\n const extension = getFileExtension(filePath);\n return imagePreviewMimeTypes[extension as keyof typeof imagePreviewMimeTypes] ?? null;\n};\n\nexport const isImagePreviewPath = (filePath: string) => getImagePreviewMimeType(filePath) !== null;\n","import { getFileExtension, imagePreviewExtensions, isImagePreviewPath } from \"pstdio-file-types\";\n\nexport const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n ...imagePreviewExtensions,\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getFileExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = isImagePreviewPath;\n","import { Box, Button, Grid, Image, Text } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n const oldImageSrc = getImagePreviewSource(oldContent);\n const newImageSrc = getImagePreviewSource(newContent);\n if (isImageDiffPath(filePath) && (oldImageSrc || newImageSrc)) {\n return {\n kind: \"image\" as const,\n filePath,\n oldSrc: oldImageSrc,\n newSrc: newImageSrc,\n };\n }\n\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nconst getImagePreviewSource = (content: string) => (content.startsWith(\"data:image/\") ? content : \"\");\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"image\" ? (\n <ImageDiffPreview oldSrc={model.oldSrc} newSrc={model.newSrc} />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface ImageDiffPreviewProps {\n oldSrc: string;\n newSrc: string;\n}\n\nconst ImageDiffPreview = (props: ImageDiffPreviewProps) => {\n const { oldSrc, newSrc } = props;\n\n return (\n <Grid\n templateColumns={{ base: \"1fr\", md: \"1fr 1fr\" }}\n gap=\"sm\"\n p=\"sm\"\n borderTop=\"1px solid\"\n borderColor=\"border.muted\"\n bg=\"bg\"\n >\n <ImageDiffPanel label=\"Old\" src={oldSrc} fallback=\"No old image\" />\n <ImageDiffPanel label=\"New\" src={newSrc} fallback=\"No new image\" />\n </Grid>\n );\n};\n\ninterface ImageDiffPanelProps {\n label: string;\n src: string;\n fallback: string;\n}\n\nconst ImageDiffPanel = (props: ImageDiffPanelProps) => {\n const { label, src, fallback } = props;\n\n return (\n <Box border=\"1px solid\" borderColor=\"border.muted\" borderRadius=\"xs\" overflow=\"hidden\" bg=\"bg.subtle\" minW=\"0\">\n <Text\n px=\"xs\"\n py=\"2xs\"\n textStyle=\"label/S/medium\"\n color=\"fg.muted\"\n borderBottom=\"1px solid\"\n borderColor=\"border.muted\"\n >\n {label}\n </Text>\n <Box display=\"grid\" placeItems=\"center\" minH=\"180px\" p=\"sm\">\n {src ? (\n <Image src={src} alt={`${label} image diff`} maxH=\"260px\" maxW=\"100%\" objectFit=\"contain\" />\n ) : (\n <Text color=\"fg.muted\" textStyle=\"body/S/regular\">\n {fallback}\n </Text>\n )}\n </Box>\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.muted\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nexport const shouldShowDiffStats = (filePath: string) => !isImageDiffPath(filePath);\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const blocksDiffContentLoad = isBinaryDiff && !isImageDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff: blocksDiffContentLoad,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.muted\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={blocksDiffContentLoad}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n const showStats = shouldShowDiffStats(filePath);\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n {showStats ? (\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n ) : null}\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport { ScrollArea } from \"../scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isBinaryDiffPath, isImageDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst IMAGE_BODY_HEIGHT = 338;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const filePath = diff.newPath ?? diff.oldPath ?? \"\";\n if (isImageDiffPath(filePath) && (diff.oldContent || diff.newContent)) {\n return CARD_HEADER_HEIGHT + IMAGE_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n }\n if (isBinaryDiffPath(filePath)) return deferredCardHeight();\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface EstimateDiffRangeHeightInput {\n diffs: Diff[];\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n diffViewMode: DiffViewMode;\n startIndex: number;\n endIndex: number;\n}\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nexport interface RenderedDiffItem {\n element: HTMLElement;\n index: number;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const estimateDiffRangeHeight = (input: EstimateDiffRangeHeightInput) => {\n const { diffs, collapsedPaths, largeDiffOptInPaths, diffViewMode, startIndex, endIndex } = input;\n let offset = 0;\n for (let diffIndex = startIndex; diffIndex < endIndex; diffIndex += 1) {\n const diff = diffs[diffIndex];\n const path = getDiffPath(diff);\n offset += estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n }\n return offset;\n};\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n\nexport const getRenderedDiffItems = (scrollElement: HTMLElement | null) =>\n Array.from(scrollElement?.querySelectorAll<HTMLElement>(\"[data-index]\") ?? [])\n .filter((element) => element.querySelector('[data-testid=\"diff-card\"]'))\n .map((element) => ({ element, index: Number(element.dataset.index) }))\n .filter((item): item is RenderedDiffItem => Number.isInteger(item.index))\n .sort((a, b) => a.index - b.index);\n\nexport const getElementScrollOffset = (input: { element: HTMLElement; scrollElement: HTMLElement | null }) => {\n const { element, scrollElement } = input;\n if (!scrollElement) return element.offsetTop;\n\n const elementRect = element.getBoundingClientRect();\n const scrollRect = scrollElement.getBoundingClientRect();\n return scrollElement.scrollTop + elementRect.top - scrollRect.top;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport {\n estimateDiffRangeHeight,\n getElementScrollOffset,\n getRenderedDiffItems,\n resolveSelectedScrollState,\n} from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n diffViewMode: DiffViewMode;\n scrollRef: { current: HTMLDivElement | null };\n}\n\nconst SELECTED_ALIGNMENT_THRESHOLD = 72;\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, largeDiffOptInPaths, expansionCommand, diffViewMode, scrollRef } =\n input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n const scrollElement = scrollRef.current;\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n const estimateRangeHeight = (startIndex: number, endIndex: number) => {\n return estimateDiffRangeHeight({\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n startIndex,\n endIndex,\n });\n };\n const scrollToOffset = (offset: number) => {\n if (cancelledByUserScroll) return;\n scrollRef.current?.scrollTo({ top: Math.max(0, offset), behavior: \"auto\" });\n };\n const scrollToSelectedDiff = () => scrollToOffset(estimateRangeHeight(0, index));\n const alignRenderedSelectedDiff = () => {\n const renderedItems = getRenderedDiffItems(scrollRef.current);\n const selectedItem = renderedItems.find((item) => item.index === index);\n if (selectedItem) {\n const selectedOffset = getElementScrollOffset({ element: selectedItem.element, scrollElement });\n const currentOffset = selectedOffset - (scrollElement?.scrollTop ?? 0);\n if (Math.abs(currentOffset) >= SELECTED_ALIGNMENT_THRESHOLD) {\n scrollToOffset(selectedOffset);\n }\n return Math.abs(currentOffset) < SELECTED_ALIGNMENT_THRESHOLD;\n }\n\n const firstItem = renderedItems[0];\n const lastItem = renderedItems.at(-1);\n if (firstItem && firstItem.index > index) {\n scrollToOffset(\n getElementScrollOffset({ element: firstItem.element, scrollElement }) -\n estimateRangeHeight(index, firstItem.index),\n );\n return false;\n }\n if (lastItem && lastItem.index < index) {\n scrollToOffset(\n getElementScrollOffset({ element: lastItem.element, scrollElement }) +\n estimateRangeHeight(lastItem.index, index),\n );\n return false;\n }\n if (!firstItem || !lastItem) {\n scrollToSelectedDiff();\n }\n return false;\n };\n let alignmentAttempts = 0;\n const reconcileSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n const isAligned = alignRenderedSelectedDiff();\n alignmentAttempts += 1;\n const hasSettled = alignmentAttempts >= 3;\n if (isAligned && hasSettled && !collapsedPaths.has(selectedScrollPath) && selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if ((!isAligned || !hasSettled) && alignmentAttempts < 10) {\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n }\n };\n\n scrollElement?.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement?.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n const isInitiallyAligned = alignRenderedSelectedDiff();\n if (!shouldPinSelectedScrollIndex && !isInitiallyAligned) {\n scrollToSelectedDiff();\n }\n\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n\n return () => {\n scrollElement?.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement?.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n scrollRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n largeDiffOptInPaths,\n expansionCommand,\n diffViewMode,\n scrollRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) => !instance.isScrolling;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n setCollapsedPaths((prev) =>\n expansionCommand.path ? resolveCollapsedPathsForSelectedDiff(diffs, prev, expansionCommand.path) : prev,\n );\n return;\n }\n\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","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.muted\" : \"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 \"./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 { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import { Box, IconButton, Menu } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerOptionsMenuProps {\n isTreePanelOpen: boolean;\n hasFilePaths: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n isExpandAllDisabled: boolean;\n isCollapseAllDisabled: boolean;\n onToggleTreePanel: () => void;\n onViewModeChange: (viewMode: ChangedFilesViewMode) => void;\n onDiffViewModeChange: (diffViewMode: DiffViewMode) => void;\n onExpandAll: () => void;\n onCollapseAll: () => void;\n}\n\ninterface DiffViewerMenuItemProps {\n id: string;\n label: string;\n icon: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n onActivate: () => void;\n}\n\nconst SelectionIndicator = (props: { selected: boolean }) => (\n <Box w=\"14px\" flexShrink={0} display=\"flex\" justifyContent=\"center\">\n {props.selected ? <Check size={14} /> : null}\n </Box>\n);\n\nconst DiffViewerMenuItem = (props: DiffViewerMenuItemProps) => {\n const { id, label, icon, selected, disabled, onActivate } = props;\n\n return (\n <Menu.Item value={id} disabled={disabled} asChild>\n <ListRow\n asChild\n role={selected === undefined ? undefined : \"menuitemradio\"}\n aria-checked={selected}\n variant=\"compact\"\n id={id}\n icon={icon}\n label={label}\n disabled={disabled}\n isSelected={selected}\n endContent={selected === undefined ? undefined : <SelectionIndicator selected={selected} />}\n onActivate={onActivate}\n />\n </Menu.Item>\n );\n};\n\nexport const DiffViewerOptionsMenu = (props: DiffViewerOptionsMenuProps) => {\n const {\n isTreePanelOpen,\n hasFilePaths,\n viewMode,\n diffViewMode,\n isExpandAllDisabled,\n isCollapseAllDisabled,\n onToggleTreePanel,\n onViewModeChange,\n onDiffViewModeChange,\n onExpandAll,\n onCollapseAll,\n } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\" p=\"0\" gap=\"0\">\n <DiffViewerMenuItem\n id=\"toggle-file-tree\"\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n onActivate={onToggleTreePanel}\n />\n <Menu.Separator />\n {hasFilePaths ? (\n <>\n <DiffViewerMenuItem\n id=\"nested\"\n icon={<ListTree size={14} />}\n label=\"Nested\"\n selected={viewMode === \"nested\"}\n onActivate={() => onViewModeChange(\"nested\")}\n />\n <DiffViewerMenuItem\n id=\"flat\"\n icon={<List size={14} />}\n label=\"Flat\"\n selected={viewMode === \"flat\"}\n onActivate={() => onViewModeChange(\"flat\")}\n />\n <Menu.Separator />\n </>\n ) : null}\n <DiffViewerMenuItem\n id=\"unified\"\n icon={<Rows2 size={14} />}\n label=\"Unified\"\n selected={diffViewMode === \"unified\"}\n onActivate={() => onDiffViewModeChange(\"unified\")}\n />\n <DiffViewerMenuItem\n id=\"split\"\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n selected={diffViewMode === \"split\"}\n onActivate={() => onDiffViewModeChange(\"split\")}\n />\n <Menu.Separator />\n <DiffViewerMenuItem\n id=\"expand-all\"\n icon={<ChevronsUpDown size={14} />}\n label=\"Expand all\"\n disabled={isExpandAllDisabled}\n onActivate={onExpandAll}\n />\n <DiffViewerMenuItem\n id=\"collapse-all\"\n icon={<ChevronsDownUp size={14} />}\n label=\"Collapse all\"\n disabled={isCollapseAllDisabled}\n onActivate={onCollapseAll}\n />\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\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 \"../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 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\n if (!props.backgroundContextActions || props.backgroundContextActions.length === 0) {\n return content;\n }\n\n return <TreeListBackground actions={props.backgroundContextActions}>{content}</TreeListBackground>;\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst changeSemanticStyles: Record<string, { color: string; backgroundColor: string }> = {\n added: { color: \"fg.success\", backgroundColor: \"bg.success\" },\n deleted: { color: \"fg.error\", backgroundColor: \"bg.error\" },\n};\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"16px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n const changeBadgeProps = change\n ? (changeSemanticStyles[change] ?? { colorPalette: changeColors[change] ?? \"gray\" })\n : {};\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"xs\" variant=\"subtle\" flexShrink={0} {...changeBadgeProps}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"subtle\" flexShrink={0} bg=\"bg.muted\" color=\"fg.muted\">\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n border=\"0\"\n borderRadius=\"0\"\n placeholder=\"Filter files\"\n value={searchQuery}\n _hover={{ borderColor: \"transparent\" }}\n _focus={{ borderColor: \"transparent\" }}\n _focusVisible={{ borderColor: \"transparent\", outline: \"none\" }}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ResizableSplitLayout } from \"../resizable-split-layout\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { DiffViewerOptionsMenu } from \"./diff-viewer-options-menu\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching diffs\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <DiffViewerOptionsMenu\n isTreePanelOpen={isTreePanelOpen}\n hasFilePaths={filePaths.length > 0}\n viewMode={viewMode}\n diffViewMode={diffViewMode}\n isExpandAllDisabled={isExpandAllDisabled}\n isCollapseAllDisabled={isCollapseAllDisabled}\n onToggleTreePanel={() => setTreePanelOpen(!isTreePanelOpen)}\n onViewModeChange={setViewMode}\n onDiffViewModeChange={setDiffViewMode}\n onExpandAll={expandAllFilesAndDiffs}\n onCollapseAll={collapseAllFilesAndDiffs}\n />\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" size=\"small\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n","import { AbsoluteCenter, Button, Stack, Text } from \"@chakra-ui/react\";\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nimport { AlertMessage } from \"./alert\";\nimport { ContentPlaceholder } from \"./content-placeholder\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n label?: string;\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error(\"Dashboard error boundary caught an error\", error, info);\n }\n\n handleReset = () => {\n this.setState({ error: null });\n this.props.onReset?.();\n };\n\n render() {\n const { children, fallback, label } = this.props;\n const { error } = this.state;\n\n if (error) {\n if (fallback) {\n return fallback;\n }\n\n return <ErrorFallback error={error} label={label} onReset={this.handleReset} />;\n }\n\n return children;\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n label?: string;\n onReset?: () => void;\n}\n\nexport const ErrorFallback = (props: ErrorFallbackProps) => {\n const { error, label, onReset } = props;\n\n return (\n <ContentPlaceholder height=\"100%\" width=\"100%\">\n <AbsoluteCenter>\n <AlertMessage\n status=\"error\"\n title={<Text textStyle=\"paragraph/M/medium\">{label ?? \"Something went wrong\"}</Text>}\n >\n <Stack gap=\"sm\">\n <Text textStyle=\"paragraph/S/regular\">\n {error.message || \"An unexpected error occurred while rendering this section.\"}\n </Text>\n {onReset ? (\n <Button size=\"sm\" variant=\"primary\" onClick={onReset}>\n Try again\n </Button>\n ) : null}\n </Stack>\n </AlertMessage>\n </AbsoluteCenter>\n </ContentPlaceholder>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\n\ninterface HorizontalMenuStackProps extends StackProps {\n children?: StackProps[\"children\"];\n}\n\nexport function HorizontalMenuStack(props: HorizontalMenuStackProps) {\n const { children, h = \"41px\", px = \"xs\", py = \"xs\", borderBottomWidth = \"1px\", ...rest } = props;\n\n return (\n <HStack\n {...rest}\n h={h}\n justify=\"space-between\"\n align=\"center\"\n borderBottomWidth={borderBottomWidth}\n borderColor={\"border.muted\"}\n px={px}\n py={py}\n >\n {children}\n </HStack>\n );\n}\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\n\nexport type SimpleCardProps = BoxProps;\n\nexport const SimpleCard = (props: SimpleCardProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"0\" bg=\"bg\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport type SimpleCardBodyProps = BoxProps;\n\nexport const SimpleCardBody = (props: SimpleCardBodyProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box p=\"md\" {...rest}>\n {children}\n </Box>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { SimpleCard, SimpleCardBody } from \"./simple-card\";\n\nexport interface IntegrationCardProps {\n icon: ReactNode;\n name: string;\n description: string;\n id: string;\n version?: string;\n category?: string;\n active?: boolean;\n actionLabel?: string;\n}\n\nexport const IntegrationCard = (props: IntegrationCardProps) => {\n const { icon, name, description, id, version, category, active = false, actionLabel } = props;\n\n return (\n <SimpleCard>\n <SimpleCardBody>\n <HStack gap=\"4\" alignItems=\"flex-start\">\n <Icon boxSize=\"1em\" fontSize=\"2xl\" flexShrink=\"0\" color=\"fg.muted\">\n {icon}\n </Icon>\n <Box flex=\"1\" minW=\"0\">\n <Stack gap=\"1\">\n <HStack gap=\"2\" flexWrap=\"wrap\">\n <Text textStyle=\"sm\" fontWeight=\"semibold\">\n {name}\n </Text>\n <Badge size=\"sm\" variant=\"outline\">\n {id}\n </Badge>\n {version && (\n <Badge size=\"sm\" variant=\"outline\">\n v{version}\n </Badge>\n )}\n {category && (\n <Badge size=\"sm\" variant=\"outline\">\n {category}\n </Badge>\n )}\n </HStack>\n <Text color=\"fg.muted\">{description}</Text>\n </Stack>\n </Box>\n <Button\n type=\"button\"\n disabled={active}\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"gray\"\n bg=\"bg\"\n flexShrink=\"0\"\n >\n {active && (\n <Icon color=\"fg.success\">\n <Check />\n </Icon>\n )}\n {actionLabel ?? (active ? \"Active\" : \"Connect\")}\n </Button>\n </HStack>\n </SimpleCardBody>\n </SimpleCard>\n );\n};\n","import { Box, Collapsible, Flex, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ItemSectionProps {\n children: ReactNode;\n title?: string;\n defaultOpen?: boolean;\n action?: ReactNode;\n}\n\n/**\n * A collapsible section wrapper with a title trigger and optional action.\n */\nexport const ItemSection = (props: ItemSectionProps) => {\n const { children, title, defaultOpen = true, action } = props;\n\n return (\n <Collapsible.Root defaultOpen={defaultOpen} width=\"full\">\n <Flex>\n <Collapsible.Trigger\n _hover={{\n background: \"bg.hover\",\n }}\n padding=\"sm\"\n height=\"2rem\"\n display=\"flex\"\n width=\"full\"\n gap=\"2\"\n alignItems=\"center\"\n cursor=\"pointer\"\n justifyContent=\"space-between\"\n >\n {title && (\n <Text fontWeight=\"600\" textStyle=\"label/S/medium\">\n {title}\n </Text>\n )}\n <Collapsible.Indicator transition=\"transform 0.2s\" _open={{ transform: \"rotate(90deg)\" }}>\n <ChevronRight size={16} />\n </Collapsible.Indicator>\n </Collapsible.Trigger>\n {action && (\n <Box marginLeft=\"auto\" onClick={(e) => e.stopPropagation()}>\n {action}\n </Box>\n )}\n </Flex>\n <Collapsible.Content>{children}</Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { Box, CloseButton, Dialog, Input, InputGroup } from \"@chakra-ui/react\";\nimport type { KeyboardEventHandler, ReactNode, Ref } from \"react\";\nimport { ScrollArea, type ScrollAreaProps } from \"./scroll-area\";\n\nexport interface SearchModalContentProps {\n children: ReactNode;\n searchValue: string;\n searchPlaceholder: string;\n searchAriaLabel?: string;\n searchIcon?: ReactNode;\n searchInputRef?: Ref<HTMLInputElement>;\n searchAutoFocus?: boolean;\n showCloseButton?: boolean;\n closeButtonLabel?: string;\n bodyBefore?: ReactNode;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n scrollAreaProps?: Omit<ScrollAreaProps, \"children\">;\n onSearchChange: (value: string) => void;\n onSearchKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n}\n\nconst searchInputStateProps = {\n borderColor: \"transparent\",\n outline: \"none\",\n} as const;\n\nconst hasContent = (value: ReactNode) => value !== undefined && value !== null;\n\nconst footerJustifyContent = (hasFooterStart: boolean, hasFooterEnd: boolean) => {\n if (hasFooterStart && hasFooterEnd) return \"space-between\";\n if (hasFooterEnd) return \"flex-end\";\n return \"flex-start\";\n};\n\nexport const SearchModalContent = (props: SearchModalContentProps) => {\n const {\n children,\n searchValue,\n searchPlaceholder,\n searchAriaLabel = searchPlaceholder,\n searchIcon,\n searchInputRef,\n searchAutoFocus,\n showCloseButton = false,\n closeButtonLabel = \"Close\",\n bodyBefore,\n footerStart,\n footerEnd,\n scrollAreaProps,\n onSearchChange,\n onSearchKeyDown,\n } = props;\n const hasFooterStart = hasContent(footerStart);\n const hasFooterEnd = hasContent(footerEnd);\n const { maxH = \"24rem\", showHorizontalScrollbar = false, ...restScrollAreaProps } = scrollAreaProps ?? {};\n\n return (\n <>\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.muted\">\n <InputGroup startElement={searchIcon} width=\"full\">\n <Input\n ref={searchInputRef}\n value={searchValue}\n placeholder={searchPlaceholder}\n aria-label={searchAriaLabel}\n autoComplete=\"off\"\n autoFocus={searchAutoFocus}\n borderWidth=\"0\"\n borderColor=\"transparent\"\n borderRadius=\"0\"\n h=\"3rem\"\n _hover={searchInputStateProps}\n _active={searchInputStateProps}\n _focus={searchInputStateProps}\n _focusVisible={searchInputStateProps}\n onChange={(event) => onSearchChange(event.target.value)}\n onKeyDown={onSearchKeyDown}\n />\n </InputGroup>\n {showCloseButton ? (\n <Dialog.CloseTrigger asChild>\n <CloseButton aria-label={closeButtonLabel} size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n {bodyBefore}\n <ScrollArea maxH={maxH} showHorizontalScrollbar={showHorizontalScrollbar} {...restScrollAreaProps}>\n {children}\n </ScrollArea>\n </Dialog.Body>\n {hasFooterStart || hasFooterEnd ? (\n <Dialog.Footer\n justifyContent={footerJustifyContent(hasFooterStart, hasFooterEnd)}\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.muted\"\n >\n {hasFooterStart ? <Box minW=\"0\">{footerStart}</Box> : null}\n {hasFooterEnd ? <Box flexShrink={0}>{footerEnd}</Box> : null}\n </Dialog.Footer>\n ) : null}\n </>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { Bell, Search, X } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport { AlertMessage } from \"../alert\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowAction } from \"../list-row/list-row.types\";\nimport { SearchModalContent } from \"../search-modal-content\";\nimport type {\n NotificationCenterAction,\n NotificationCenterItem,\n NotificationCenterProps,\n} from \"./notification-center.types\";\n\nconst ACTIVE_ROW_BG = \"bg.menu-item.hover\";\n\nconst priorityColorPalette = (priority: NotificationCenterItem[\"priority\"]) => {\n if (priority === \"urgent\") return \"red\";\n if (priority === \"high\") return \"orange\";\n if (priority === \"low\") return \"gray\";\n return \"blue\";\n};\n\nconst shouldShowPriorityBadge = (priority: NotificationCenterItem[\"priority\"]) => priority !== \"normal\";\n\nconst itemSearchText = (item: NotificationCenterItem) =>\n [\n item.title,\n item.body,\n item.kind,\n item.priority,\n item.status,\n item.sourceLabel,\n item.targetLabel,\n item.searchText,\n ...(item.actions ?? []).map((action) => action.label),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\nconst filterItems = (items: NotificationCenterItem[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n if (!normalizedQuery) return items;\n return items.filter((item) => itemSearchText(item).includes(normalizedQuery));\n};\n\nconst groupItems = (items: NotificationCenterItem[]) => {\n const needsInput = items.filter((item) => item.kind === \"blocked\");\n const urgent = items.filter(\n (item) => item.kind !== \"blocked\" && (item.priority === \"urgent\" || item.priority === \"high\"),\n );\n const normal = items.filter(\n (item) => item.kind !== \"blocked\" && (item.priority === \"normal\" || item.priority === \"low\"),\n );\n return [\n { id: \"needs-input\", label: \"Needs input\", items: needsInput },\n { id: \"attention\", label: \"Needs attention\", items: urgent },\n { id: \"other\", label: \"Other\", items: normal },\n ].filter((group) => group.items.length > 0);\n};\n\nconst orderItemsForDisplay = (items: NotificationCenterItem[]) => groupItems(items).flatMap((group) => group.items);\n\nconst metadataDescription = (item: NotificationCenterItem) => {\n const parts = [item.body, item.targetLabel, item.sourceLabel, item.timeLabel].filter(Boolean);\n return parts.join(\" · \");\n};\n\nconst getActionButtons = (item: NotificationCenterItem, props: Pick<NotificationCenterProps, \"onDismiss\">) => {\n const actions: ListRowAction[] = [];\n\n if (props.onDismiss) {\n actions.push({\n id: \"dismiss\",\n label: \"Dismiss\",\n icon: <X size={14} />,\n tooltip: \"Dismiss\",\n onAction: () => props.onDismiss?.(item),\n });\n }\n\n return actions;\n};\n\nconst NotificationEndContent = (props: {\n actions: NotificationCenterAction[];\n item: NotificationCenterItem;\n onRunAction?: NotificationCenterProps[\"onRunAction\"];\n}) => {\n const { actions, item, onRunAction } = props;\n return (\n <HStack gap=\"2\" minW=\"0\" flexWrap=\"wrap\" justify=\"flex-end\">\n {shouldShowPriorityBadge(item.priority) ? (\n <Badge size=\"sm\" colorPalette={priorityColorPalette(item.priority)} textTransform=\"capitalize\" flexShrink={0}>\n {item.priority}\n </Badge>\n ) : null}\n {item.status === \"open\" ? (\n <Badge size=\"sm\" colorPalette=\"blue\" variant=\"solid\" flexShrink={0}>\n New\n </Badge>\n ) : null}\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"2xs\"\n variant=\"outline\"\n colorPalette={action.destructive ? \"red\" : \"gray\"}\n maxW=\"9rem\"\n onClick={(event) => {\n event.stopPropagation();\n onRunAction?.(item, action);\n }}\n >\n <Text truncate>{action.label}</Text>\n </Button>\n ))}\n </HStack>\n );\n};\n\nconst NotificationRows = (\n props: {\n activeIndex: number;\n items: NotificationCenterItem[];\n onActiveIndexChange: (index: number) => void;\n } & Pick<NotificationCenterProps, \"onActivateItem\" | \"onDismiss\" | \"onRunAction\">,\n) => {\n const { activeIndex, items, onActivateItem, onActiveIndexChange, onRunAction } = props;\n const groups = groupItems(items);\n let rowIndex = 0;\n\n return (\n <Stack gap=\"2xs\" py=\"xs\">\n {groups.map((group) => (\n <Stack key={group.id} gap=\"2xs\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\">\n {group.label}\n </Text>\n {group.items.map((item) => {\n const currentIndex = rowIndex;\n rowIndex += 1;\n return (\n <ListRow\n key={item.id}\n id={item.id}\n label={item.title}\n description={metadataDescription(item)}\n icon={<Icon as={Bell} boxSize=\"14px\" />}\n iconColor={`${priorityColorPalette(item.priority)}.500`}\n variant=\"compact\"\n isSelected={currentIndex === activeIndex}\n selectedBg={ACTIVE_ROW_BG}\n hoverBg={ACTIVE_ROW_BG}\n endContent={\n <NotificationEndContent item={item} actions={item.actions ?? []} onRunAction={onRunAction} />\n }\n actions={getActionButtons(item, props)}\n tabIndex={-1}\n onActivate={() => onActivateItem?.(item)}\n onPointerMove={() => onActiveIndexChange(currentIndex)}\n />\n );\n })}\n </Stack>\n ))}\n </Stack>\n );\n};\n\nconst LoadingRows = () => (\n <Stack gap=\"2\" p=\"sm\">\n {[0, 1, 2, 3].map((row) => (\n <Stack key={row} gap=\"2xs\">\n <Skeleton h=\"4\" w={row % 2 === 0 ? \"68%\" : \"52%\"} borderRadius=\"xs\" />\n <Skeleton h=\"3\" w=\"88%\" borderRadius=\"xs\" />\n </Stack>\n ))}\n </Stack>\n);\n\nexport const NotificationCenter = (props: NotificationCenterProps) => {\n const {\n autoFocus = false,\n emptyLabel = \"No notifications.\",\n error,\n footerEnd,\n footerStart,\n items,\n loading = false,\n onActivateItem,\n onEscape,\n onQueryChange,\n query,\n } = props;\n const [internalQuery, setInternalQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const activeQuery = query ?? internalQuery;\n const filteredItems = filterItems(items, activeQuery);\n const displayItems = orderItemsForDisplay(filteredItems);\n const activeItem = displayItems[activeIndex] ?? null;\n\n useEffect(() => {\n if (!autoFocus) return;\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [autoFocus]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(displayItems.length - 1, 0)));\n }, [displayItems.length]);\n\n const updateQuery = (nextQuery: string) => {\n if (query === undefined) setInternalQuery(nextQuery);\n onQueryChange?.(nextQuery);\n setActiveIndex(0);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(displayItems.length - 1, 0)));\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (activeItem) onActivateItem?.(activeItem);\n return;\n }\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n if (activeQuery.length > 0) {\n updateQuery(\"\");\n return;\n }\n onEscape?.();\n };\n\n return (\n <SearchModalContent\n searchValue={activeQuery}\n searchPlaceholder=\"Search notifications\"\n searchIcon={<Search size={14} />}\n searchInputRef={inputRef}\n searchAutoFocus={autoFocus}\n footerStart={footerStart}\n footerEnd={footerEnd}\n scrollAreaProps={{ maxH: \"24rem\", showHorizontalScrollbar: false }}\n onSearchChange={updateQuery}\n onSearchKeyDown={handleKeyDown}\n >\n {error ? (\n <Box p=\"sm\">\n <AlertMessage status=\"error\" colorPalette=\"red\" title=\"Notifications unavailable\" size=\"sm\">\n {error}\n </AlertMessage>\n </Box>\n ) : loading ? (\n <LoadingRows />\n ) : filteredItems.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n ) : (\n <NotificationRows\n {...props}\n items={filteredItems}\n activeIndex={activeIndex}\n onActiveIndexChange={setActiveIndex}\n />\n )}\n </SearchModalContent>\n );\n};\n","import { Box, HStack, Link, Separator, Stack, Text } from \"@chakra-ui/react\";\n\nexport interface OpenSourceNotice {\n name: string;\n version?: string;\n license?: string;\n copyright?: string;\n homepageUrl?: string;\n sourceUrl?: string;\n attribution?: string;\n}\n\nexport interface OpenSourceNoticesScreenProps {\n notices: OpenSourceNotice[];\n title?: string;\n description?: string;\n productName?: string;\n productVersion?: string;\n generatedAt?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\nconst getNoticeKey = (notice: OpenSourceNotice, index: number) => {\n return `${notice.name}-${notice.version ?? \"unknown\"}-${index}`;\n};\n\nconst getNoticeTitle = (notice: OpenSourceNotice) => {\n if (!notice.version) return notice.name;\n\n return `${notice.name} v${notice.version}`;\n};\n\nexport const OpenSourceNoticesScreen = (props: OpenSourceNoticesScreenProps) => {\n const {\n notices,\n title = \"Open Source and Third-Party Notices\",\n description = \"This product includes software developed by the open source community.\",\n productName,\n productVersion,\n generatedAt,\n emptyTitle = \"No third-party notices available\",\n emptyDescription = \"No third-party packages were included in this build.\",\n } = props;\n\n return (\n <Stack width=\"full\" minHeight=\"100%\" background=\"bg\" color=\"fg\" padding={{ base: \"md\", md: \"xl\" }} gap=\"lg\">\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/L\">{title}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n\n <HStack gap=\"md\" flexWrap=\"wrap\">\n {productName ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Product: {productName}\n </Text>\n ) : null}\n\n {productVersion ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Version: {productVersion}\n </Text>\n ) : null}\n\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Packages: {notices.length}\n </Text>\n\n {generatedAt ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Generated: {generatedAt}\n </Text>\n ) : null}\n </HStack>\n </Stack>\n\n <Separator borderColor=\"border.muted\" />\n\n {notices.length === 0 ? (\n <Stack borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"md\" padding=\"lg\" gap=\"xs\">\n <Text textStyle=\"label/L/medium\">{emptyTitle}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {emptyDescription}\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"md\">\n {notices.map((notice, index) => (\n <Box\n key={getNoticeKey(notice, index)}\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"md\"\n padding=\"md\"\n >\n <Stack gap=\"sm\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/L/medium\">{getNoticeTitle(notice)}</Text>\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n License: {notice.license ?? \"Unknown\"}\n </Text>\n </Stack>\n\n {notice.copyright ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {notice.copyright}\n </Text>\n ) : null}\n\n {(notice.homepageUrl || notice.sourceUrl) && (\n <Stack gap=\"2xs\">\n {notice.homepageUrl ? (\n <Link\n href={notice.homepageUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Homepage\n </Link>\n ) : null}\n\n {notice.sourceUrl ? (\n <Link\n href={notice.sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Source code\n </Link>\n ) : null}\n </Stack>\n )}\n\n {notice.attribution ? (\n <Box background=\"bg.muted\" borderRadius=\"sm\" padding=\"sm\">\n <Text textStyle=\"label/S/regular\" whiteSpace=\"pre-wrap\">\n {notice.attribution}\n </Text>\n </Box>\n ) : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport const DEFAULT_PALETTE_ASSET_LIMIT = 48;\n\nexport interface PaletteSearchEntry {\n id: string;\n mode?: string;\n label: ReactNode;\n searchText?: string;\n secondaryLabel?: ReactNode;\n assetType?: string;\n}\n\nexport interface PaletteMode {\n id: string;\n inputPrefix?: string;\n}\n\nexport interface FilterPaletteEntriesOptions {\n query: string;\n mode?: string;\n getEffectiveQuery?: (query: string) => string;\n defaultAssetLimit?: number;\n}\n\nconst getSearchableText = (entry: PaletteSearchEntry) => {\n const label = typeof entry.label === \"string\" ? entry.label : \"\";\n const secondaryLabel = typeof entry.secondaryLabel === \"string\" ? entry.secondaryLabel : \"\";\n\n return `${label} ${entry.searchText ?? \"\"} ${secondaryLabel}`;\n};\n\nconst hasInputPrefix = (query: string, inputPrefix: string) => query.trimStart().startsWith(inputPrefix);\n\nexport const resolvePaletteMode = (query: string, modes: readonly PaletteMode[] = [], fallbackMode?: string) => {\n const prefixedMode = modes.find((mode) => mode.inputPrefix && hasInputPrefix(query, mode.inputPrefix));\n\n return prefixedMode?.id ?? fallbackMode ?? modes.find((mode) => !mode.inputPrefix)?.id ?? modes[0]?.id;\n};\n\nexport const getPaletteEffectiveQuery = (query: string, modes: readonly PaletteMode[] = [], modeId?: string) => {\n const mode = modes.find(\n (candidate) => candidate.id === modeId && candidate.inputPrefix && hasInputPrefix(query, candidate.inputPrefix),\n );\n\n if (!mode?.inputPrefix) return query.trim();\n\n return query.trimStart().slice(mode.inputPrefix.length).trim();\n};\n\nconst limitDefaultAssetEntries = <T extends PaletteSearchEntry>(entries: T[], limit: number) => {\n const counts: Record<string, number> = {};\n\n return entries.filter((entry) => {\n const assetType = entry.assetType;\n if (!assetType) return true;\n\n const count = counts[assetType] ?? 0;\n if (count >= limit) return false;\n\n counts[assetType] = count + 1;\n return true;\n });\n};\n\nexport const filterPaletteEntries = <T extends PaletteSearchEntry>(\n entries: T[],\n options: FilterPaletteEntriesOptions,\n) => {\n const effectiveQuery = (options.getEffectiveQuery?.(options.query) ?? options.query.trim()).toLowerCase();\n\n const filteredEntries = entries.filter((entry) => {\n if (options.mode && entry.mode !== options.mode) return false;\n if (!effectiveQuery) return true;\n\n return getSearchableText(entry).toLowerCase().includes(effectiveQuery);\n });\n\n if (effectiveQuery || options.defaultAssetLimit === undefined) {\n return filteredEntries;\n }\n\n return limitDefaultAssetEntries(filteredEntries, options.defaultAssetLimit);\n};\n","import { Box, HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { Check } from \"lucide-react\";\nimport { type RefObject, useEffect } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport type { PaletteEntry } from \"./palette\";\n\ntype PaletteRow<T extends PaletteEntry> =\n | { type: \"group\"; id: string; label: string }\n | { type: \"entry\"; id: string; entry: T; entryIndex: number };\n\nconst GROUP_ROW_HEIGHT = 24;\nconst ENTRY_ROW_HEIGHT = 40;\nconst INITIAL_VIEWPORT_HEIGHT = 384;\nconst ACTIVE_ROW_BG = \"bg.menu-item.hover\";\n\nconst buildEntryItem = (entry: PaletteEntry): ListRowItem => ({\n id: entry.id,\n label: entry.label,\n description: entry.description ?? entry.secondaryLabel,\n icon: entry.icon,\n endContent:\n entry.endContent ??\n (entry.shortcut || entry.isSelected ? (\n <HStack gap=\"2\">\n {entry.shortcut}\n {entry.isSelected ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n ) : undefined),\n onActivate: entry.onActivate,\n});\n\nconst buildRows = <T extends PaletteEntry>(entries: T[]) => {\n const rows: PaletteRow<T>[] = [];\n\n entries.forEach((entry, index) => {\n const previousEntry = entries[index - 1];\n if (entry.group && entry.group !== previousEntry?.group) {\n rows.push({ type: \"group\", id: `group:${entry.group}:${entry.id}`, label: entry.group });\n }\n\n rows.push({ type: \"entry\", id: entry.id, entry, entryIndex: index });\n });\n\n return rows;\n};\n\nconst getActiveRowIndex = <T extends PaletteEntry>(rows: PaletteRow<T>[], activeIndex: number) =>\n rows.findIndex((row) => row.type === \"entry\" && row.entryIndex === activeIndex);\n\ninterface PaletteListProps<T extends PaletteEntry> {\n entries: T[];\n activeIndex: number;\n emptyLabel: string;\n onHover: (index: number) => void;\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const PaletteList = <T extends PaletteEntry>(props: PaletteListProps<T>) => {\n const { entries, activeIndex, emptyLabel, onHover, scrollRef } = props;\n const rows = buildRows(entries);\n const activeRowIndex = getActiveRowIndex(rows, activeIndex);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => (rows[index]?.type === \"group\" ? GROUP_ROW_HEIGHT : ENTRY_ROW_HEIGHT),\n getItemKey: (index) => rows[index]?.id ?? index,\n initialRect: { width: 0, height: INITIAL_VIEWPORT_HEIGHT },\n overscan: 6,\n });\n\n useEffect(() => {\n if (activeRowIndex < 0) return;\n\n virtualizer.scrollToIndex(activeRowIndex, { align: \"auto\", behavior: \"auto\" });\n }, [activeRowIndex, virtualizer]);\n\n if (entries.length === 0) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Box role=\"listbox\" position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualRow.start }}\n >\n {row.type === \"group\" ? (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\" pb=\"2xs\">\n {row.label}\n </Text>\n ) : (\n <ListRow\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n selectedBg={ACTIVE_ROW_BG}\n hoverBg={row.entryIndex === activeIndex ? ACTIVE_ROW_BG : \"transparent\"}\n tabIndex={-1}\n onPointerMove={() => onHover(row.entryIndex)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { Dialog } from \"@chakra-ui/react\";\nimport type { KeyboardEvent, ReactNode, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n DEFAULT_PALETTE_ASSET_LIMIT,\n type FilterPaletteEntriesOptions,\n filterPaletteEntries,\n getPaletteEffectiveQuery,\n type PaletteMode,\n type PaletteSearchEntry,\n resolvePaletteMode,\n} from \"./palette-filter\";\nimport { PaletteList } from \"./palette-list\";\nimport { SearchModalContent } from \"./search-modal-content\";\n\nexport type { FilterPaletteEntriesOptions, PaletteMode, PaletteSearchEntry };\nexport { DEFAULT_PALETTE_ASSET_LIMIT, filterPaletteEntries };\n\nexport interface PaletteEntry extends PaletteSearchEntry {\n description?: ReactNode;\n icon?: ReactNode;\n shortcut?: ReactNode;\n endContent?: ReactNode;\n group?: string;\n isSelected?: boolean;\n onActivate: () => void;\n}\n\nexport interface PaletteState<T extends PaletteEntry> {\n query: string;\n mode?: string;\n activeIndex: number;\n entries: T[];\n}\n\nexport interface PaletteEscapeContext<T extends PaletteEntry> extends PaletteState<T> {\n activeEntry: T | null;\n entryCount: number;\n setQuery: (query: string) => void;\n setActiveIndex: (index: SetStateAction<number>) => void;\n runActiveEntry: () => void;\n closePalette: () => void;\n}\n\nexport type PaletteStateValue<T extends PaletteEntry, TValue> = TValue | ((state: PaletteState<T>) => TValue);\n\nexport interface PaletteProps<T extends PaletteEntry = PaletteEntry> {\n open: boolean;\n entries: T[];\n initialQuery?: string;\n initialActiveIndex?: number;\n mode?: string;\n modes?: PaletteMode[];\n resetKey?: string;\n inputIcon?: PaletteStateValue<T, ReactNode>;\n placeholder?: PaletteStateValue<T, string>;\n emptyLabel?: string;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n filterEntries?: (entries: T[], query: string, mode?: string) => T[];\n onActiveEntryChange?: (entry: T | null, index: number) => void;\n onQueryChange?: (query: string) => void;\n onClose: () => void;\n onEscape?: (ctx: PaletteEscapeContext<T>) => boolean | undefined;\n}\n\nconst resolveStateValue = <T extends PaletteEntry, TValue>(\n value: PaletteStateValue<T, TValue> | undefined,\n state: PaletteState<T>,\n fallback: TValue,\n) => {\n if (typeof value === \"function\") {\n return (value as (state: PaletteState<T>) => TValue)(state);\n }\n\n return value ?? fallback;\n};\n\nexport const Palette = <T extends PaletteEntry>(props: PaletteProps<T>) => {\n const {\n open,\n entries,\n initialQuery = \"\",\n initialActiveIndex = 0,\n mode,\n modes,\n resetKey = \"default\",\n inputIcon,\n placeholder,\n emptyLabel = \"No results.\",\n footerStart,\n footerEnd,\n filterEntries,\n onActiveEntryChange,\n onQueryChange,\n onClose,\n onEscape,\n } = props;\n const [query, setQueryState] = useState(initialQuery);\n const [activeIndex, setActiveIndex] = useState(initialActiveIndex);\n const inputRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef({ open: false, resetKey });\n const activeMode = mode ?? resolvePaletteMode(query, modes);\n const filteredEntries = filterEntries\n ? filterEntries(entries, query, activeMode)\n : filterPaletteEntries(entries, {\n query,\n mode: activeMode,\n getEffectiveQuery: (value) => getPaletteEffectiveQuery(value, modes, activeMode),\n });\n const activeEntry = filteredEntries[activeIndex] ?? null;\n const state: PaletteState<T> = { query, mode: activeMode, activeIndex, entries: filteredEntries };\n const resolvedInputIcon = resolveStateValue(inputIcon, state, null);\n const resolvedPlaceholder = resolveStateValue(placeholder, state, \"Search\");\n\n const setQuery = (nextQuery: string) => {\n setQueryState(nextQuery);\n onQueryChange?.(nextQuery);\n };\n\n const runActiveEntry = () => {\n activeEntry?.onActivate();\n };\n\n const closePalette = () => {\n onClose();\n };\n\n useEffect(() => {\n const previousSetup = setupRef.current;\n setupRef.current = { open, resetKey };\n if (!open) return;\n\n const shouldInitialize = !previousSetup.open || previousSetup.resetKey !== resetKey;\n if (!shouldInitialize) return;\n\n setQueryState(initialQuery);\n setActiveIndex(initialActiveIndex);\n\n const timeout = setTimeout(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n return () => clearTimeout(timeout);\n }, [initialActiveIndex, initialQuery, open, resetKey]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(filteredEntries.length - 1, 0)));\n }, [filteredEntries.length]);\n\n useEffect(() => {\n onActiveEntryChange?.(activeEntry, activeIndex);\n }, [activeEntry, activeIndex, onActiveEntryChange]);\n\n const handleEscape = () => {\n const handled = onEscape?.({\n ...state,\n activeEntry,\n entryCount: filteredEntries.length,\n setQuery,\n setActiveIndex,\n runActiveEntry,\n closePalette,\n });\n if (handled) return;\n\n if (query.length > 0) {\n setQuery(\"\");\n setActiveIndex(0);\n return;\n }\n\n closePalette();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(filteredEntries.length - 1, 0)));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n runActiveEntry();\n return;\n }\n\n if (event.key !== \"Escape\") return;\n\n event.preventDefault();\n event.stopPropagation();\n handleEscape();\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => !details.open && closePalette()}>\n <Dialog.Backdrop />\n <Dialog.Positioner alignItems=\"center\" justifyContent=\"center\" p=\"md\">\n <Dialog.Content maxW=\"44rem\" w=\"full\" p=\"0\" overflow=\"hidden\" borderWidth=\"1px\" borderColor=\"border.muted\">\n <SearchModalContent\n searchValue={query}\n searchPlaceholder={resolvedPlaceholder}\n searchIcon={resolvedInputIcon}\n searchInputRef={inputRef}\n showCloseButton\n footerStart={footerStart}\n footerEnd={footerEnd}\n scrollAreaProps={{\n maxH: \"24rem\",\n showHorizontalScrollbar: false,\n viewportRef: scrollRef,\n viewportProps: { style: { overflowAnchor: \"none\" } },\n }}\n onSearchChange={(nextQuery) => {\n setQuery(nextQuery);\n setActiveIndex(0);\n }}\n onSearchKeyDown={handleKeyDown}\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </SearchModalContent>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Kbd } from \"@chakra-ui/react\";\nimport { ArrowLeft, ArrowRight, Command, type LucideIcon, Option } from \"lucide-react\";\nimport { Fragment } from \"react\";\n\nexport type PaletteShortcutBinding = string | string[];\ntype ShortcutPlatform = \"linux\" | \"mac\" | \"win\";\n\ninterface ShortcutDisplayPart {\n label: string;\n Icon?: LucideIcon;\n}\n\nconst nonMacModifierLabels: Record<string, ShortcutDisplayPart> = {\n alt: { label: \"Alt\" },\n control: { label: \"Ctrl\" },\n ctrl: { label: \"Ctrl\" },\n mod: { label: \"Ctrl\" },\n shift: { label: \"Shift\" },\n};\n\nconst macModifierLabels: Record<string, ShortcutDisplayPart> = {\n alt: { label: \"Option\", Icon: Option },\n cmd: { label: \"Command\", Icon: Command },\n command: { label: \"Command\", Icon: Command },\n meta: { label: \"Command\", Icon: Command },\n mod: { label: \"Command\", Icon: Command },\n option: { label: \"Option\", Icon: Option },\n shift: { label: \"Shift\" },\n};\n\nconst keyLabels: Record<string, ShortcutDisplayPart> = {\n arrowleft: { label: \"Arrow Left\", Icon: ArrowLeft },\n arrowright: { label: \"Arrow Right\", Icon: ArrowRight },\n};\n\nconst getShortcutPlatform = (): ShortcutPlatform => {\n if (typeof navigator === \"undefined\") return \"linux\";\n\n const platform = navigator.platform?.toLowerCase() ?? \"\";\n if (platform.includes(\"mac\")) return \"mac\";\n if (platform.includes(\"win\")) return \"win\";\n return \"linux\";\n};\n\nexport const resolveShortcutDisplayPart = (label: string, platform = getShortcutPlatform()): ShortcutDisplayPart => {\n const normalized = label.toLowerCase();\n const modifierLabels = platform === \"mac\" ? macModifierLabels : nonMacModifierLabels;\n return keyLabels[normalized] ?? modifierLabels[normalized] ?? { label };\n};\n\nconst splitShortcutStep = (step: string) => {\n return step\n .split(\"+\")\n .map((part) => part.trim())\n .filter(Boolean);\n};\n\nconst getShortcutDisplayParts = (binding: PaletteShortcutBinding) => {\n const steps = Array.isArray(binding) ? binding.map(splitShortcutStep) : [splitShortcutStep(binding)];\n\n return steps.map((step) => step.map((label) => resolveShortcutDisplayPart(label)));\n};\n\nexport const PaletteShortcut = (props: { binding: PaletteShortcutBinding }) => {\n const { binding } = props;\n const steps = getShortcutDisplayParts(binding);\n\n return (\n <>\n {steps.map((step, stepIndex) => (\n <Fragment key={`${step.map((part) => part.label).join(\"+\")}-${stepIndex}`}>\n {step.map((part, partIndex) => (\n <Fragment key={`${part.label}-${partIndex}`}>\n <Kbd\n fontSize=\"xs\"\n borderRadius=\"0\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n aria-label={part.label}\n >\n {part.Icon ? <part.Icon size={12} aria-hidden=\"true\" /> : part.label}\n </Kbd>\n {partIndex < step.length - 1 ? \" \" : null}\n </Fragment>\n ))}\n {stepIndex < steps.length - 1 ? \" then \" : null}\n </Fragment>\n ))}\n </>\n );\n};\n","import { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\n\ninterface ParamEditorLabelProps {\n name: string;\n description?: string;\n}\n\nexport const ParamEditorLabel = (props: ParamEditorLabelProps) => {\n const { name, description } = props;\n\n return (\n <HStack gap=\"1\" alignItems=\"center\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\" truncate>\n {name}\n </Text>\n {description ? (\n <Tooltip content={description} showArrow>\n <Icon as={CircleHelp} boxSize=\"12px\" color=\"fg.muted\" opacity={0.6} cursor=\"help\" flexShrink={0} />\n </Tooltip>\n ) : null}\n </HStack>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface ParamEditorReadOnlyValueProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n preserveWhitespace?: boolean;\n}\n\nexport const ParamEditorReadOnlyValue = (props: ParamEditorReadOnlyValueProps) => {\n const { children, preserveWhitespace = false, ...boxProps } = props;\n\n return (\n <Box minW=\"0\" textStyle=\"label/S/regular\" whiteSpace={preserveWhitespace ? \"pre-wrap\" : undefined} {...boxProps}>\n {children}\n </Box>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface ColorInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const ColorInput = (props: ColorInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false, fullWidth = false } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextColor: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextColor), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n if (readOnly) {\n const valueElement = (\n <ParamEditorReadOnlyValue>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Box boxSize=\"0.75rem\" borderRadius=\"xs\" borderWidth=\"1px\" borderColor=\"border.muted\" bg={value} />\n <Box as=\"span\">{value}</Box>\n </Flex>\n </ParamEditorReadOnlyValue>\n );\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n const rootProps = {\n value: parseColor(value),\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root {...rootProps} size=\"sm\" maxW={fullWidth ? \"100%\" : \"8.75rem\"}>\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content>\n <ColorPicker.Area />\n <ColorPicker.Sliders />\n <ColorPicker.SwatchGroup>\n <ColorPicker.SwatchTrigger value={value}>\n <ColorPicker.Swatch value={value} />\n </ColorPicker.SwatchTrigger>\n </ColorPicker.SwatchGroup>\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </ColorPicker.Root>\n );\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {picker}\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {picker}\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface DateInputProps {\n id: string;\n defaultValue: string;\n name: string;\n min?: string;\n max?: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n id,\n defaultValue,\n name,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"8.75rem\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n )}\n </Box>\n );\n};\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {}\n\nexport const NumberInputRoot = React.forwardRef<HTMLDivElement, NumberInputProps>(function NumberInput(props, ref) {\n const { children, ...rest } = props;\n return (\n <ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n {children}\n <ChakraNumberInput.Control>\n <ChakraNumberInput.IncrementTrigger />\n <ChakraNumberInput.DecrementTrigger />\n </ChakraNumberInput.Control>\n </ChakraNumberInput.Root>\n );\n});\n\nexport const NumberInputField = ChakraNumberInput.Input;\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nexport const NumberInputLabel = ChakraNumberInput.Label;\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(function Slider(props, ref) {\n const { children, ...rest } = props;\n\n return (\n <ChakraSlider.Root ref={ref} variant=\"solid\" {...rest}>\n <ChakraSlider.Control>\n <ChakraSlider.Track borderRadius=\"0\">\n <ChakraSlider.Range />\n </ChakraSlider.Track>\n <ChakraSlider.Thumbs />\n </ChakraSlider.Control>\n {children}\n </ChakraSlider.Root>\n );\n});\n","import { Box, Flex, type NumberInputValueChangeDetails, type SliderValueChangeDetails } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"../number-input\";\nimport { Slider } from \"../slider\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface NumberInputProps {\n id: string;\n defaultValue: number;\n name: string;\n step?: number;\n min?: number;\n max?: number;\n onChange: (id: string, value: number) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n hideSlider?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const NumberInput = (props: NumberInputProps) => {\n const {\n id,\n defaultValue,\n name,\n step = 1,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n hideSlider = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const isRange = min !== undefined && max !== undefined;\n const showSlider = isRange && !hideSlider;\n const useFullWidthLayout = fullWidth && !showSlider;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const scheduleChange = (nextValue: number) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {useFullWidthLayout ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <NumberInputRoot\n disabled={readOnly}\n width=\"100%\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <NumberInputRoot\n disabled={readOnly}\n width=\"5rem\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Flex>\n )}\n {showSlider && (\n <Slider\n size=\"sm\"\n disabled={readOnly}\n value={[value]}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: SliderValueChangeDetails) => {\n setValue(details.value[0]);\n }}\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n onChange(id, details.value[0]);\n }}\n />\n )}\n </Box>\n );\n};\n","import { Box, Button, Flex, Icon, Menu } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Square, SquareCheck } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface Option {\n id: string;\n name: string;\n icon?: string;\n}\n\ninterface SelectionInputProps {\n id: string;\n defaultValue: string | string[];\n name: string;\n options: Option[];\n onChange: (id: string, value: string | string[]) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n multiSelect?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n placeholder?: string;\n fullWidth?: boolean;\n}\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const {\n id,\n defaultValue,\n name,\n options,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n multiSelect = false,\n placeholder,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const isSelected = (optionId: string) => {\n if (multiSelect) {\n return Array.isArray(value) && value.includes(optionId);\n }\n return value === optionId;\n };\n\n const getDisplayText = () => {\n if (multiSelect) {\n const selectedValues = Array.isArray(value) ? value : [];\n if (selectedValues.length === 0) {\n return placeholder || `Select`;\n }\n\n const selectedOptions = selectedValues\n .map((id) => options.find((o) => o.id === id))\n .filter(Boolean)\n .map((opt) => opt!.name);\n\n if (selectedOptions.length <= 3) {\n return selectedOptions.join(\", \");\n }\n const displayItems = selectedOptions.slice(0, 3).join(\", \");\n const remaining = selectedOptions.length - 3;\n return `${displayItems} +${remaining}`;\n }\n const selectedOption = options.find((o) => o.id === value);\n return selectedOption?.name || \"Select\";\n };\n\n const handleSelect = (newValue: string) => {\n if (multiSelect) {\n const currentValues = Array.isArray(value) ? value : [];\n let updatedValues: string[];\n\n if (currentValues.includes(newValue)) {\n updatedValues = currentValues.filter((v) => v !== newValue);\n } else {\n updatedValues = [...currentValues, newValue];\n }\n\n setValue(updatedValues);\n scheduleChange(updatedValues);\n } else {\n setValue(newValue);\n scheduleChange(newValue);\n }\n };\n\n const selectionIndicator = (selected: boolean) =>\n multiSelect ? (\n <Icon as={selected ? SquareCheck : Square} boxSize=\"14px\" />\n ) : selected ? (\n <Icon as={Check} boxSize=\"14px\" />\n ) : null;\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{getDisplayText()}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button\n size=\"sm\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={readOnly}\n width=\"100%\"\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" w=\"full\">\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n </Flex>\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n role={multiSelect ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected(opt.id)}\n id={opt.id}\n label={opt.name}\n endContent={selectionIndicator(isSelected(opt.id))}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" borderWidth=\"1px\" borderStyle=\"solid\" borderColor=\"border\" disabled={readOnly}>\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n role={multiSelect ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected(opt.id)}\n id={opt.id}\n label={opt.name}\n endContent={selectionIndicator(isSelected(opt.id))}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface TextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n singleLine?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n}\n\nexport const TextInput = (props: TextInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n singleLine = true,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue preserveWhitespace={!singleLine}>{value}</ParamEditorReadOnlyValue>;\n\n if (singleLine && !fullWidth) {\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n {singleLine && !fullWidth ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {singleLine ? (\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n ) : (\n <Textarea\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n rows={3}\n resize=\"vertical\"\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n","import { Box, Button, Collapsible, Flex, Stack, Text, useDisclosure } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronLeft } from \"lucide-react\";\nimport { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./text-input\";\n\ninterface InputGroupComponentProps {\n group: InputGroup;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const InputGroupComponent = (props: InputGroupComponentProps) => {\n const { group, defaultValues, onChange, readOnly, fullWidth = false } = props;\n const { open, onToggle } = useDisclosure({\n defaultOpen: !group.defaultCollapsed,\n });\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={onChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Box>\n {group.collapsible ? (\n <Button variant=\"ghost\" size=\"xs\" onClick={onToggle} pl={0} _hover={{ bg: \"transparent\" }}>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n {open ? <ChevronDown size={14} /> : <ChevronLeft size={14} />}\n </Flex>\n </Button>\n ) : (\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n )}\n\n {group.description && (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mb=\"sm\">\n {group.description}\n </Text>\n )}\n\n <Collapsible.Root open={group.collapsible ? open : true}>\n <Collapsible.Content>\n <Stack gap=\"md\">{group.params.map(renderParam)}</Stack>\n </Collapsible.Content>\n </Collapsible.Root>\n </Box>\n );\n};\n","import { Box, Flex, Separator, Stack } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\nimport { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { InputGroupComponent } from \"./input-group\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./text-input\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const { params = [], groups = [], defaultValues = {}, onChange, readOnly, fullWidth = false } = props;\n const handleChange = onChange ?? (() => undefined);\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={handleChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"sm\">\n {params.map(renderParam)}\n\n {params.length > 0 && groups.length > 0 && <Separator borderColor=\"border.muted\" />}\n\n {groups.map((group, index) => (\n <Fragment key={group.id}>\n <InputGroupComponent\n group={group}\n defaultValues={defaultValues}\n onChange={handleChange}\n readOnly={readOnly}\n fullWidth={fullWidth}\n />\n {index < groups.length - 1 && <Separator borderColor=\"border.muted\" />}\n </Fragment>\n ))}\n </Stack>\n );\n};\n","import { Badge, Button, Dialog, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUp, FileText, Folder, FolderOpen, Home, Search } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport interface RepoPickerDialogEntry {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface RepoPickerDialogProps {\n open: boolean;\n title?: string;\n description?: string;\n currentPath?: string;\n entries: RepoPickerDialogEntry[];\n selectedPath?: string | null;\n selectedPaths?: string[];\n isLoading?: boolean;\n error?: string;\n isSelectDisabled?: boolean;\n onClose: () => void;\n onSelect: () => void;\n onSelectHomeDirectory: () => void;\n onSelectParentDirectory: () => void;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n}\n\nexport type { RepoPickerDialogProps };\n\nconst getEntryIcon = (entry: RepoPickerDialogEntry) => {\n if (!entry.isDirectory) return FileText;\n if (entry.isGitRepo) return FolderOpen;\n return Folder;\n};\n\nconst filterEntries = (entries: RepoPickerDialogEntry[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return entries;\n }\n\n return entries.filter((entry) => `${entry.name} ${entry.path}`.toLowerCase().includes(normalizedQuery));\n};\n\ntype RepoPickerListEntryProps = {\n entry: RepoPickerDialogEntry;\n selectedPath: string | null;\n selectedPathSet: Set<string>;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n};\n\nconst RepoPickerListEntry = (props: RepoPickerListEntryProps) => {\n const { entry, selectedPath, selectedPathSet, onEntryClick } = props;\n const isAlreadySelected = entry.isGitRepo && selectedPathSet.has(entry.path);\n const isDisabled = !entry.isDirectory || isAlreadySelected;\n\n const handleClick = () => {\n if (isAlreadySelected) {\n return;\n }\n\n onEntryClick(entry);\n };\n\n return (\n <ListRow\n variant=\"compact\"\n isSelected={selectedPath === entry.path}\n id={entry.path}\n label={entry.name}\n icon={<Icon as={getEntryIcon(entry)} boxSize=\"16px\" />}\n endContent={\n entry.isGitRepo ? (\n <Badge\n textStyle=\"label/XS/medium\"\n px=\"xs\"\n py=\"2px\"\n colorPalette=\"green\"\n variant=\"subtle\"\n pointerEvents=\"none\"\n >\n Git repo\n </Badge>\n ) : undefined\n }\n disabled={isDisabled}\n onActivate={handleClick}\n />\n );\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n outline: \"none\",\n} as const;\n\nconst searchInputFocusVisibleProps = {\n outline: \"2px solid\",\n outlineColor: \"blue.border\",\n outlineOffset: \"-2px\",\n} as const;\n\nconst focusInlinePickerOption = (event: KeyboardEvent<HTMLDivElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]:not(:disabled)'),\n );\n\n if (options.length === 0) {\n return;\n }\n\n const currentIndex = options.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex = (() => {\n if (event.key === \"Home\") return 0;\n if (event.key === \"End\") return options.length - 1;\n if (event.key === \"ArrowUp\") return currentIndex <= 0 ? options.length - 1 : currentIndex - 1;\n return currentIndex < 0 || currentIndex === options.length - 1 ? 0 : currentIndex + 1;\n })();\n\n event.preventDefault();\n options[nextIndex]?.focus();\n};\n\nexport const RepoPickerDialog = (props: RepoPickerDialogProps) => {\n const {\n open,\n title = \"Select folder\",\n description,\n currentPath = \"\",\n entries,\n selectedPath = null,\n selectedPaths = [],\n isLoading = false,\n error = \"\",\n isSelectDisabled = false,\n onClose,\n onSelect,\n onSelectHomeDirectory,\n onSelectParentDirectory,\n onEntryClick,\n } = props;\n\n const [query, setQuery] = useState(\"\");\n const selectedPathSet = new Set(selectedPaths);\n const filteredEntries = filterEntries(entries, query);\n const searchScope = currentPath || \"Home\";\n\n useEffect(() => {\n if (!open || !searchScope) return;\n setQuery(\"\");\n }, [open, searchScope]);\n\n return (\n <Dialog.Root\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n open={open}\n onOpenChange={(details) => !details.open && onClose()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n <Stack direction=\"row\" gap=\"sm\" align=\"center\">\n <Button aria-label=\"Go to home directory\" variant=\"outline\" size=\"sm\" onClick={onSelectHomeDirectory}>\n <Home size={16} />\n </Button>\n <Button\n aria-label=\"Go to parent directory\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onSelectParentDirectory}\n disabled={!currentPath || currentPath === \"/\"}\n >\n <ChevronUp size={16} />\n </Button>\n <Text\n data-testid=\"folder-picker-path\"\n textStyle=\"paragraph/S/regular\"\n color=\"fg.muted\"\n flex=\"1\"\n lineClamp={1}\n >\n {searchScope}\n </Text>\n </Stack>\n\n <Stack gap=\"0\" borderWidth=\"1px\" borderRadius=\"md\" borderColor=\"border.muted\" overflow=\"hidden\">\n <InputGroup\n startElement={<Search size={14} />}\n width=\"full\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Input\n borderWidth=\"0\"\n borderRadius=\"0\"\n value={query}\n placeholder=\"Search repositories\"\n aria-label=\"Search repositories\"\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputFocusVisibleProps}\n onChange={(event) => setQuery(event.target.value)}\n />\n </InputGroup>\n {isLoading ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Loading...\n </Text>\n ) : error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"red.500\" p=\"sm\">\n {error}\n </Text>\n ) : filteredEntries.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n No entries found.\n </Text>\n ) : (\n <ScrollArea maxHeight=\"320px\" contentProps={{ padding: \"sm\" }}>\n <Stack gap=\"xs\" role=\"listbox\" aria-label=\"Repository folders\" onKeyDown={focusInlinePickerOption}>\n {filteredEntries.map((entry) => (\n <RepoPickerListEntry\n key={entry.path}\n entry={entry}\n selectedPath={selectedPath}\n selectedPathSet={selectedPathSet}\n onEntryClick={onEntryClick}\n />\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"sm\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={onSelect} disabled={isSelectDisabled}>\n Select repository\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface SidebarSnapshot {\n open: boolean;\n expandedSections: string[];\n expandedNodes: string[];\n width: number | null;\n}\n\ninterface SidebarState extends SidebarSnapshot {\n openSidebar: () => void;\n closeSidebar: () => void;\n toggleSidebar: () => void;\n toggleSection: (sectionId: string) => void;\n toggleNode: (nodeId: string) => void;\n setSectionExpanded: (sectionId: string, expanded: boolean) => void;\n setNodeExpanded: (nodeId: string, expanded: boolean) => void;\n setWidth: (width: number) => void;\n reset: () => void;\n}\n\ninterface CreateSidebarStoreOptions {\n storageKey: string;\n initialState?: Partial<SidebarSnapshot>;\n}\n\nconst DEFAULT_SNAPSHOT = {\n open: true,\n expandedSections: [],\n expandedNodes: [],\n width: null,\n} satisfies SidebarSnapshot;\n\nconst SIDEBAR_STORE_NAMESPACE = \"pstdio/ui/sidebar\";\n\nconst toStorageName = (storageKey: string) => `${SIDEBAR_STORE_NAMESPACE}/${storageKey}`;\n\nconst toggleId = (values: string[], id: string) =>\n values.includes(id) ? values.filter((value) => value !== id) : [...values, id];\n\nconst setExpanded = (values: string[], id: string, expanded: boolean) => {\n if (expanded) {\n return values.includes(id) ? values : [...values, id];\n }\n\n return values.filter((value) => value !== id);\n};\n\nconst getPersistedSnapshot = (state: SidebarState) => ({\n open: state.open,\n expandedSections: state.expandedSections,\n expandedNodes: state.expandedNodes,\n width: state.width,\n});\n\nexport const createSidebarStore = (options: CreateSidebarStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = { ...DEFAULT_SNAPSHOT, ...initialState };\n\n return createStore<SidebarState>()(\n persist(\n (set) => ({\n ...snapshot,\n openSidebar: () => set((state) => ({ ...state, open: true })),\n closeSidebar: () => set((state) => ({ ...state, open: false })),\n toggleSidebar: () => set((state) => ({ ...state, open: !state.open })),\n toggleSection: (sectionId) =>\n set((state) => ({\n ...state,\n expandedSections: toggleId(state.expandedSections, sectionId),\n })),\n toggleNode: (nodeId) =>\n set((state) => ({\n ...state,\n expandedNodes: toggleId(state.expandedNodes, nodeId),\n })),\n setSectionExpanded: (sectionId, expanded) =>\n set((state) => ({\n ...state,\n expandedSections: setExpanded(state.expandedSections, sectionId, expanded),\n })),\n setNodeExpanded: (nodeId, expanded) =>\n set((state) => ({\n ...state,\n expandedNodes: setExpanded(state.expandedNodes, nodeId, expanded),\n })),\n setWidth: (width) => set((state) => ({ ...state, width })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n};\n\nconst sidebarStoreRegistry = new Map<string, ReturnType<typeof createSidebarStore>>();\n\nexport const getSidebarStore = (storageKey: string, initialState?: Partial<SidebarSnapshot>) => {\n const existingStore = sidebarStoreRegistry.get(storageKey);\n\n if (existingStore) {\n return existingStore;\n }\n\n const store = createSidebarStore({ storageKey, initialState });\n sidebarStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useSidebarStore = <T>(\n storageKey: string,\n selector: (state: SidebarState) => T,\n initialState?: Partial<SidebarSnapshot>,\n) => {\n const store = getSidebarStore(storageKey, initialState);\n return useStore(store, selector);\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface SidebarFooterProps {\n children?: ReactNode;\n}\n\nexport const SidebarFooter = (props: SidebarFooterProps) => {\n const { children } = props;\n\n if (!children) {\n return null;\n }\n\n return (\n <Box bg=\"bg\" position=\"sticky\" bottom=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n","export const PANEL_HEADER_HEIGHT = \"2.5rem\";\n","import { HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { PANEL_HEADER_HEIGHT } from \"../panel-header.constants\";\n\ninterface SidebarHeaderProps {\n children?: ReactNode;\n}\n\nexport const SidebarHeader = (props: SidebarHeaderProps) => {\n const { children } = props;\n\n return (\n <HStack\n data-testid=\"sidebar-header\"\n justify=\"space-between\"\n align=\"center\"\n minH={PANEL_HEADER_HEIGHT}\n bg=\"bg\"\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n gap=\"0\"\n >\n <HStack minW=\"0\" flex=\"1\">\n {children}\n </HStack>\n </HStack>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport { useSidebarStore } from \"./sidebar.store\";\nimport type { SidebarProps } from \"./sidebar.types\";\nimport { SidebarFooter } from \"./sidebar-footer\";\nimport { SidebarHeader } from \"./sidebar-header\";\n\nconst DEFAULT_WIDTH = 240;\nconst DEFAULT_MIN_WIDTH = 200;\nconst DEFAULT_MAX_WIDTH = 480;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveInitialWidth = (width?: string | number, defaultWidth = DEFAULT_WIDTH) => {\n if (typeof width === \"number\") return width;\n if (typeof width === \"string\") {\n const parsed = parseInt(width, 10);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return defaultWidth;\n};\n\nexport const Sidebar = (props: SidebarProps) => {\n const {\n storageKey,\n sections,\n activeNodeId,\n backgroundContextActions,\n header,\n footer,\n width,\n closable = true,\n emptyLabel = \"No items available.\",\n defaultExpandedSections,\n linkComponent,\n onNavigate,\n onOpenChange,\n resizable = true,\n defaultWidth,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n virtualize = false,\n } = props;\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n\n const initialWidth = resolveInitialWidth(width, defaultWidth);\n const initialState = {\n ...(defaultExpandedSections ? { expandedSections: defaultExpandedSections } : {}),\n width: initialWidth,\n };\n\n const open = useSidebarStore(storageKey, (state) => state.open, initialState);\n const persistedWidth = useSidebarStore(storageKey, (state) => state.width, initialState);\n const expandedSections = useSidebarStore(storageKey, (state) => state.expandedSections, initialState);\n const expandedNodes = useSidebarStore(storageKey, (state) => state.expandedNodes, initialState);\n const toggleSection = useSidebarStore(storageKey, (state) => state.toggleSection, initialState);\n const toggleNode = useSidebarStore(storageKey, (state) => state.toggleNode, initialState);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [onOpenChange, open]);\n\n const effectiveWidth = clamp(persistedWidth ?? initialWidth, minWidth, maxWidth);\n if (!open && closable) {\n return null;\n }\n\n const widthCss = resizable ? `${effectiveWidth}px` : (width ?? `${initialWidth}px`);\n\n return (\n <Flex\n as=\"aside\"\n data-testid=\"sidebar\"\n direction=\"column\"\n position=\"relative\"\n h=\"100%\"\n w={widthCss}\n minW={widthCss}\n maxW={widthCss}\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderRightColor=\"border.muted\"\n bg=\"bg\"\n >\n <SidebarHeader>{header}</SidebarHeader>\n\n <ScrollArea\n flex=\"1\"\n mt=\"lg\"\n viewportRef={viewportRef}\n viewportProps={{ display: \"block\", style: { overflowX: \"hidden\" } }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n {sections.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"3\">\n {emptyLabel}\n </Text>\n ) : (\n <TreeList\n sections={sections}\n expandedSectionIds={expandedSections}\n expandedNodeIds={expandedNodes}\n activeNodeId={activeNodeId}\n backgroundContextActions={backgroundContextActions}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n virtualize={virtualize}\n scrollRef={viewportRef}\n />\n )}\n </Box>\n </ScrollArea>\n\n <SidebarFooter>{footer}</SidebarFooter>\n </Flex>\n );\n};\n","import { Switch as ChakraSwitch } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SwitchProps extends ChakraSwitch.RootProps {\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n rootRef?: React.RefObject<HTMLLabelElement | null>;\n trackLabel?: { on: React.ReactNode; off: React.ReactNode };\n thumbLabel?: { on: React.ReactNode; off: React.ReactNode };\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(props, ref) {\n const { inputProps, children, rootRef, trackLabel, thumbLabel, disabled = false, ...rest } = props;\n const interactiveCursor = disabled ? \"not-allowed\" : \"pointer\";\n\n return (\n <ChakraSwitch.Root ref={rootRef} disabled={disabled} cursor={interactiveCursor} {...rest}>\n <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />\n <ChakraSwitch.Control borderRadius=\"md\" cursor={interactiveCursor}>\n <ChakraSwitch.Thumb borderRadius=\"full\">\n {thumbLabel && (\n <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>{thumbLabel?.on}</ChakraSwitch.ThumbIndicator>\n )}\n </ChakraSwitch.Thumb>\n {trackLabel && <ChakraSwitch.Indicator fallback={trackLabel.off}>{trackLabel.on}</ChakraSwitch.Indicator>}\n </ChakraSwitch.Control>\n {children != null && <ChakraSwitch.Label cursor={interactiveCursor}>{children}</ChakraSwitch.Label>}\n </ChakraSwitch.Root>\n );\n});\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\n\ninterface TabVisibilitySnapshot {\n tabOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TabVisibilityState extends TabVisibilitySnapshot {\n setTab: (key: string, value: VisibilityOverride | undefined) => void;\n toggleTab: (key: string, hiddenByDefault: boolean) => void;\n clearTab: (key: string) => void;\n reset: () => void;\n}\n\ninterface CreateTabVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TabVisibilitySnapshot = { tabOverrides: {} };\n\nconst STORE_NAMESPACE = \"pstdio/ui/tab-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n key: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(key in overrides)) return overrides;\n const { [key]: _removed, ...rest } = overrides;\n return rest;\n }\n if (overrides[key] === value) return overrides;\n return { ...overrides, [key]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, key: string, hiddenByDefault: boolean) => {\n const current = resolveEffective(overrides[key], hiddenByDefault);\n return setOverride(overrides, key, current === \"hidden\" ? \"shown\" : \"hidden\");\n};\n\nconst getPersistedSnapshot = (state: TabVisibilityState) => ({ tabOverrides: state.tabOverrides });\n\nexport const createTabVisibilityStore = (options: CreateTabVisibilityStoreOptions) =>\n createStore<TabVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setTab: (key, value) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, value) })),\n toggleTab: (key, hiddenByDefault) =>\n set((state) => ({ ...state, tabOverrides: toggleOverride(state.tabOverrides, key, hiddenByDefault) })),\n clearTab: (key) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTabVisibilityStore>>();\n\nexport const getTabVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n const store = createTabVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTabVisibilityStore = <T>(storageKey: string, selector: (state: TabVisibilityState) => T) => {\n const store = getTabVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TabVisibilitySnapshot, TabVisibilityState };\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { VisibilityOverride } from \"./tree-list-visibility.store\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nexport const resolveVisibility = (\n override: VisibilityOverride | undefined,\n hiddenByDefault: boolean | undefined,\n): VisibilityOverride => override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\n// A section or node is \"customizable\": it opts in to the hide/show menu and may be toggled.\n// Hideability is explicit — items are non-hideable unless they set canHide (or start hidden by\n// default, which would otherwise be unrecoverable). Body sub-items never opt in, so only\n// categories (sections) and header/footer rows ever appear in the customize menu.\nconst isCustomizable = (item: { canHide?: boolean; hiddenByDefault?: boolean }) =>\n item.canHide === true || item.hiddenByDefault === true;\n\nconst isNodeVisible = (node: TreeListNode, nodeOverrides: Record<string, VisibilityOverride>) =>\n resolveVisibility(nodeOverrides[node.id], node.hiddenByDefault) === \"shown\";\n\nconst filterNodes = (nodes: TreeListNode[], nodeOverrides: Record<string, VisibilityOverride>): TreeListNode[] => {\n let changed = false;\n const next: TreeListNode[] = [];\n for (const node of nodes) {\n if (!isNodeVisible(node, nodeOverrides)) {\n changed = true;\n continue;\n }\n if (node.children && node.children.length > 0) {\n const filteredChildren = filterNodes(node.children, nodeOverrides);\n if (filteredChildren !== node.children) {\n changed = true;\n next.push({ ...node, children: filteredChildren });\n continue;\n }\n }\n next.push(node);\n }\n return changed ? next : nodes;\n};\n\n// Header/footer rows are flat lists, filtered by their own node overrides (mirrors the body's\n// per-node filtering, minus section nesting).\nexport const filterVisibleNodes = (\n nodes: TreeListNode[],\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListNode[] => filterNodes(nodes, nodeOverrides);\n\nexport const filterVisibleSections = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListSection[] => {\n let changed = false;\n const next: TreeListSection[] = [];\n for (const section of sections) {\n if (resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"hidden\") {\n changed = true;\n continue;\n }\n const filteredNodes = filterNodes(section.nodes, nodeOverrides);\n if (filteredNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: filteredNodes });\n continue;\n }\n next.push(section);\n }\n return changed ? next : sections;\n};\n\nexport interface TreeVisibilityMenuActions {\n onToggleSection: (id: string, hiddenByDefault: boolean) => void;\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n onResetOrder?: () => void;\n}\n\ninterface BuildMenuOptions {\n // Trailing toggle indicator: an eye when the entry is shown, eye-off when hidden.\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n // Leading icon for the reset rows, kept separate from the toggle list above.\n resetIcon?: ReactNode;\n}\n\nconst visibilityEndContent = (effective: VisibilityOverride, options: BuildMenuOptions) =>\n effective === \"shown\" ? options.visibleIcon : options.hiddenIcon;\n\nconst buildSectionAction = (\n section: TreeListSection,\n sectionOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = section.hiddenByDefault === true;\n const effective = resolveVisibility(sectionOverrides[section.id], hiddenByDefault);\n return {\n key: `section:${section.id}`,\n label: section.label ?? section.id,\n onClick: () => actions.onToggleSection(section.id, hiddenByDefault),\n endContent: visibilityEndContent(effective, options),\n };\n};\n\nconst buildNodeAction = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n icon: node.icon,\n onClick: () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: visibilityEndContent(effective, options),\n };\n};\n\nexport interface TreeVisibilityMenuItems {\n headerNodes?: TreeListNode[];\n sections: TreeListSection[];\n footerNodes?: TreeListNode[];\n}\n\n// Builds the back-of-tree hide/show menu. Only items that opt in via canHide (or start hidden by\n// default) are listed: header rows, body categories (sections), category-level body rows, and\n// footer rows. Hideability is explicit per item, so leaf sub-items — which never opt in — stay\n// out of the menu; you customize categories and top-level entries, not individual files/sessions.\nexport const buildTreeVisibilityMenuActions = (\n items: TreeVisibilityMenuItems,\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n\n for (const node of items.headerNodes ?? []) {\n if (isCustomizable(node)) result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n for (const section of items.sections) {\n if (isCustomizable(section)) result.push(buildSectionAction(section, sectionOverrides, actions, options));\n // Top-level rows that opt in (e.g. a \"Tickets\" nav entry) are hideable too; their leaf\n // children are not visited, so files/sessions inside a category stay non-hideable.\n for (const node of section.nodes) {\n if (isCustomizable(node)) result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n for (const node of items.footerNodes ?? []) {\n if (isCustomizable(node)) result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n\n if (result.length === 0) return result;\n\n // A separator splits the visibility toggles above from the reset actions below.\n result.push({\n key: \"__reset-visibility\",\n label: \"Reset to default\",\n icon: options.resetIcon,\n separatorBefore: true,\n onClick: actions.onResetAll,\n });\n if (actions.onResetOrder) {\n result.push({ key: \"__reset-order\", label: \"Reset order\", icon: options.resetIcon, onClick: actions.onResetOrder });\n }\n\n return result;\n};\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\nimport { resolveVisibility } from \"../tree-list/tree-list-visibility-filter\";\n\nexport interface TabVisibilityPlacement {\n closable?: boolean;\n hiddenByDefault?: boolean;\n title?: string;\n contributionId: string;\n}\n\nexport const filterVisibleTabs = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n getKey: (placement: T) => string,\n): T[] => {\n let changed = false;\n const next: T[] = [];\n for (const placement of placements) {\n if (placement.closable === true) {\n next.push(placement);\n continue;\n }\n const effective = resolveVisibility(tabOverrides[getKey(placement)], placement.hiddenByDefault);\n if (effective === \"hidden\") {\n changed = true;\n continue;\n }\n next.push(placement);\n }\n return changed ? next : placements;\n};\n\nexport interface TabVisibilityMenuActions {\n onToggleTab: (key: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildTabMenuOptions {\n // Trailing toggle indicator, mirroring the tree menu: eye when shown, eye-off when hidden.\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n resetIcon?: ReactNode;\n}\n\nexport const buildTabVisibilityMenuActions = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n actions: TabVisibilityMenuActions,\n getKey: (placement: T) => string,\n options: BuildTabMenuOptions,\n getIcon?: (placement: T) => ReactNode,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n let nonCloseableCount = 0;\n\n for (const placement of placements) {\n if (placement.closable === true) continue;\n nonCloseableCount += 1;\n const key = getKey(placement);\n const hiddenByDefault = placement.hiddenByDefault === true;\n const effective = resolveVisibility(tabOverrides[key], hiddenByDefault);\n result.push({\n key: `tab:${key}`,\n label: placement.title ?? placement.contributionId,\n icon: getIcon?.(placement),\n onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.visibleIcon : options.hiddenIcon,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({\n key: \"__reset-tabs\",\n label: \"Reset to default\",\n icon: options.resetIcon,\n separatorBefore: true,\n onClick: actions.onResetAll,\n });\n return result;\n};\n","import { Button, Editable, Flex, Icon, Menu, Table } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, ChevronDown, GripVertical, Trash2 } from \"lucide-react\";\n\nimport { IconColorPicker, type IconColorPickerIconOption } from \"../icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TagEditorAction, TagEditorValue } from \"./tag-editor.types\";\n\ninterface TagEditorRowProps {\n actionOptions?: TagEditorAction[];\n colorOptions?: readonly string[];\n iconOptions?: readonly IconColorPickerIconOption[];\n value: TagEditorValue;\n isSaving?: boolean;\n showDefault?: boolean;\n showIcons?: boolean;\n onActionsChange: (actions: string[]) => void;\n onColorChange: (color: string) => void;\n onDelete: () => void;\n onIconChange: (icon: string | null) => void;\n onNameChange: (name: string) => void;\n onSetDefault: () => void;\n}\n\nconst ActionDropdown = (props: {\n actions: string[];\n disabled?: boolean;\n options: TagEditorAction[];\n onChange: (actions: string[]) => void;\n}) => {\n const { actions, disabled, options, onChange } = props;\n\n const toggleAction = (action: string) => {\n onChange(actions.includes(action) ? actions.filter((item) => item !== action) : [...actions, action]);\n };\n\n return (\n <Menu.Root closeOnSelect={false}>\n <Menu.Trigger asChild>\n <Button size=\"2xs\" variant=\"outline\" gap=\"xs\" disabled={disabled}>\n {actions.length} action{actions.length !== 1 ? \"s\" : \"\"}\n <Icon as={ChevronDown} boxSize=\"12px\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {options.map((option) => (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={option.value}\n label={option.label}\n isSelected={actions.includes(option.value)}\n endContent={actions.includes(option.value) ? <Check size={14} /> : undefined}\n onActivate={() => toggleAction(option.value)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const TagEditorRow = (props: TagEditorRowProps) => {\n const {\n actionOptions,\n colorOptions,\n iconOptions,\n value,\n isSaving,\n showDefault,\n showIcons,\n onActionsChange,\n onColorChange,\n onDelete,\n onIconChange,\n onNameChange,\n onSetDefault,\n } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: value.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Table.Row ref={setNodeRef} style={style}>\n <Table.Cell width=\"40px\">\n <Flex cursor=\"grab\" {...attributes} {...listeners}>\n <GripVertical size={14} color=\"var(--chakra-colors-fg-muted)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Editable.Root\n defaultValue={value.name}\n onValueCommit={(details) => {\n const trimmed = details.value.trim();\n if (trimmed && trimmed !== value.name) onNameChange(trimmed);\n }}\n >\n <Editable.Preview />\n <Editable.Input />\n </Editable.Root>\n </Table.Cell>\n <Table.Cell width=\"54px\">\n <IconColorPicker\n color={value.color}\n colorOptions={colorOptions}\n icon={value.icon}\n iconOptions={iconOptions}\n showIcons={showIcons}\n onColorChange={onColorChange}\n onIconChange={onIconChange}\n disabled={isSaving}\n />\n </Table.Cell>\n {showDefault ? (\n <Table.Cell width=\"80px\">\n <Button\n size=\"2xs\"\n variant={value.isDefault ? \"primary\" : \"ghost\"}\n onClick={onSetDefault}\n disabled={isSaving || value.isDefault}\n aria-label={`Set ${value.name} as default`}\n >\n <Check size={14} />\n </Button>\n </Table.Cell>\n ) : null}\n {actionOptions ? (\n <Table.Cell width=\"140px\">\n <ActionDropdown\n actions={value.actions ?? []}\n disabled={isSaving}\n options={actionOptions}\n onChange={onActionsChange}\n />\n </Table.Cell>\n ) : null}\n <Table.Cell width=\"40px\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"red\"\n onClick={onDelete}\n disabled={isSaving || value.isDefault}\n aria-label={`Delete ${value.name}`}\n >\n <Trash2 size={14} />\n </Button>\n </Table.Cell>\n </Table.Row>\n );\n};\n","import { Button, Flex, HStack, Input, Stack, Table, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Plus, X } from \"lucide-react\";\nimport type { KeyboardEvent } from \"react\";\nimport { useState } from \"react\";\n\nimport { DeleteConfirmationModal } from \"../delete-confirmation-modal\";\nimport { IconColorPicker } from \"../icon-color-picker\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\nimport { TagEditorRow } from \"./tag-editor-row\";\n\ninterface AddFormState {\n name: string;\n color: string;\n icon: string | null;\n}\n\nconst buildDraftItem = (form: AddFormState, sortOrder: number) => ({\n id: `new-${crypto.randomUUID()}`,\n name: form.name.trim(),\n color: form.color,\n icon: form.icon,\n sortOrder,\n isNew: true,\n});\n\nexport const TagEditor = (props: TagEditorProps) => {\n const {\n title,\n description,\n values,\n onValuesChange,\n onSave,\n onCancel,\n onDeleteValue,\n onSetDefault,\n hasChanges,\n isSaving,\n addLabel = \"Add tag\",\n addPlaceholder = \"Tag name\",\n actionOptions,\n actionsColumnLabel = \"Actions\",\n cancelLabel = \"Cancel\",\n colorOptions,\n defaultAddColor = \"blue\",\n defaultAddIcon = null,\n defaultColumnLabel = \"Default\",\n deleteButtonText = \"Delete tag\",\n deleteHeadline = \"Delete tag?\",\n deleteNotificationText = (value) => `This will delete \"${value.name}\".`,\n iconOptions,\n saveLabel = \"Save\",\n showDefault,\n showIcons = true,\n valueColumnLabel = \"Name\",\n } = props;\n const [isAdding, setIsAdding] = useState(false);\n const [addForm, setAddForm] = useState<AddFormState>({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n const [valueToDelete, setValueToDelete] = useState<TagEditorValue | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const resetAddForm = () => {\n setIsAdding(false);\n setAddForm({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n };\n\n const updateValue = (index: number, patch: Partial<TagEditorValue>) => {\n const next = [...values];\n next[index] = { ...next[index], ...patch };\n onValuesChange(next);\n };\n\n const handleAddOption = () => {\n if (!addForm.name.trim()) return;\n const maxOrder = values.length > 0 ? Math.max(...values.map((value) => value.sortOrder)) : 0;\n onValuesChange([...values, buildDraftItem(addForm, maxOrder + 1)]);\n resetAddForm();\n };\n\n const handleDeleteOption = () => {\n if (!valueToDelete) return;\n if (onDeleteValue) {\n onDeleteValue(valueToDelete);\n } else {\n onValuesChange(values.filter((value) => value.id !== valueToDelete.id));\n }\n setValueToDelete(null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = values.findIndex((value) => value.id === active.id);\n const newIndex = values.findIndex((value) => value.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return;\n\n onValuesChange(arrayMove(values, oldIndex, newIndex).map((value, index) => ({ ...value, sortOrder: index })));\n };\n\n const handleAddKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") handleAddOption();\n if (event.key === \"Escape\") resetAddForm();\n };\n\n return (\n <>\n <Stack gap=\"md\" height=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"heading/S\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsAdding(true)} disabled={isAdding || isSaving}>\n <Plus size={16} />\n {addLabel}\n </Button>\n </Flex>\n\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={values.map((value) => value.id)} strategy={verticalListSortingStrategy}>\n <Table.Root size=\"sm\" variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader width=\"40px\" />\n <Table.ColumnHeader>{valueColumnLabel}</Table.ColumnHeader>\n <Table.ColumnHeader width=\"54px\" />\n {showDefault ? <Table.ColumnHeader width=\"80px\">{defaultColumnLabel}</Table.ColumnHeader> : null}\n {actionOptions ? <Table.ColumnHeader width=\"140px\">{actionsColumnLabel}</Table.ColumnHeader> : null}\n <Table.ColumnHeader width=\"40px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {values.map((value, index) => (\n <TagEditorRow\n key={value.id}\n value={value}\n isSaving={isSaving}\n showDefault={showDefault}\n showIcons={showIcons}\n actionOptions={actionOptions}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onNameChange={(name) => updateValue(index, { name })}\n onColorChange={(color) => updateValue(index, { color })}\n onIconChange={(icon) => updateValue(index, { icon })}\n onActionsChange={(actions) => updateValue(index, { actions })}\n onSetDefault={() => onSetDefault?.(value)}\n onDelete={() => setValueToDelete(value)}\n />\n ))}\n {isAdding ? (\n <Table.Row>\n <Table.Cell />\n <Table.Cell>\n <Input\n size=\"xs\"\n placeholder={addPlaceholder}\n value={addForm.name}\n onChange={(event) => setAddForm({ ...addForm, name: event.target.value })}\n onKeyDown={handleAddKeyDown}\n autoFocus\n />\n </Table.Cell>\n <Table.Cell>\n <IconColorPicker\n color={addForm.color}\n icon={addForm.icon}\n showIcons={showIcons}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onColorChange={(color) => setAddForm({ ...addForm, color })}\n onIconChange={(icon) => setAddForm({ ...addForm, icon })}\n />\n </Table.Cell>\n {showDefault ? <Table.Cell /> : null}\n {actionOptions ? <Table.Cell /> : null}\n <Table.Cell>\n <HStack gap=\"2xs\">\n <Button size=\"2xs\" variant=\"primary\" onClick={handleAddOption} disabled={!addForm.name.trim()}>\n Add\n </Button>\n <Button size=\"2xs\" variant=\"ghost\" onClick={resetAddForm} aria-label=\"Cancel add value\">\n <X size={14} />\n </Button>\n </HStack>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </SortableContext>\n </DndContext>\n\n <Flex justifyContent=\"flex-end\">\n <HStack gap=\"xs\">\n <Button size=\"sm\" variant=\"outline\" onClick={onCancel} disabled={!hasChanges || isSaving}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={!hasChanges}>\n {saveLabel}\n </Button>\n </HStack>\n </Flex>\n </Stack>\n\n <DeleteConfirmationModal\n open={Boolean(valueToDelete)}\n onClose={() => setValueToDelete(null)}\n onDelete={handleDeleteOption}\n headline={deleteHeadline}\n notificationText={valueToDelete ? deleteNotificationText(valueToDelete) : \"\"}\n buttonText={deleteButtonText}\n />\n </>\n );\n};\n","import { HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { AlertMessage } from \"../alert\";\nimport { TagEditor } from \"./tag-editor\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\n\nexport interface SaveTagSettingsInput<TValue> {\n deletedIds: Set<string>;\n drafts: TagEditorValue[];\n values: TValue[];\n}\n\ntype EditorLabels = Pick<\n TagEditorProps,\n | \"actionOptions\"\n | \"actionsColumnLabel\"\n | \"addLabel\"\n | \"addPlaceholder\"\n | \"colorOptions\"\n | \"deleteButtonText\"\n | \"deleteHeadline\"\n | \"deleteNotificationText\"\n | \"description\"\n | \"iconOptions\"\n | \"showIcons\"\n | \"title\"\n | \"valueColumnLabel\"\n>;\n\ntype SortableValue = { id: string; sortOrder: number };\n\nexport interface TagSettingsPanelProps<TValue extends SortableValue> extends EditorLabels {\n errorTitle: string;\n loadingText?: string;\n /** Loaded values; pass undefined while the initial load is pending. */\n values: TValue[] | undefined;\n /** Load/save error surfaced by the host's data layer. */\n loadError?: unknown;\n /**\n * Persists the pending edits. The host owns fetching and cache invalidation;\n * the panel resets its delete tracking once the returned promise resolves.\n */\n onSave: (input: SaveTagSettingsInput<TValue>) => Promise<void>;\n toEditorValue: (value: TValue) => TagEditorValue;\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean;\n}\n\nconst bySortOrder = (left: TagEditorValue, right: TagEditorValue) =>\n left.sortOrder - right.sortOrder || left.name.localeCompare(right.name);\n\nconst toEditorValues = <TValue extends SortableValue>(\n values: TValue[],\n toEditorValue: (value: TValue) => TagEditorValue,\n) => values.map(toEditorValue).sort(bySortOrder);\n\nconst findOriginalValue = <TValue extends SortableValue>(values: TValue[], draft: TagEditorValue) =>\n values.find((value) => value.id === draft.id);\n\nconst hasTagValueChanges = <TValue extends SortableValue>(\n values: TValue[],\n drafts: TagEditorValue[],\n deletedIds: Set<string>,\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean,\n) => {\n if (deletedIds.size > 0) return true;\n\n return drafts.some((draft) => {\n if (draft.isNew) return true;\n const original = findOriginalValue(values, draft);\n if (!original) return true;\n return valueNeedsUpdate(original, draft) || draft.sortOrder !== original.sortOrder;\n });\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : error ? String(error) : null);\n\nexport const TagSettingsPanel = <TValue extends SortableValue>(props: TagSettingsPanelProps<TValue>) => {\n const {\n errorTitle,\n loadingText = \"Loading...\",\n values: loadedValues,\n loadError,\n onSave,\n toEditorValue,\n valueNeedsUpdate,\n ...editorProps\n } = props;\n const [drafts, setDrafts] = useState<TagEditorValue[]>([]);\n const [deletedIds, setDeletedIds] = useState<Set<string>>(new Set());\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<unknown>(null);\n\n const values = loadedValues ?? [];\n\n // Edits never refetch in the background, so loaded values only change on\n // initial load and after a save invalidates the host's cache — keeping local\n // drafts in sync.\n useEffect(() => {\n if (loadedValues) setDrafts(toEditorValues(loadedValues, toEditorValue));\n }, [loadedValues, toEditorValue]);\n\n const handleSave = async () => {\n setIsSaving(true);\n setSaveError(null);\n try {\n await onSave({ deletedIds, drafts, values });\n setDeletedIds(new Set());\n } catch (error) {\n setSaveError(error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const hasChanges = hasTagValueChanges(values, drafts, deletedIds, valueNeedsUpdate);\n const error = errorMessage(loadError) ?? errorMessage(saveError);\n\n const handleDeleteValue = (value: TagEditorValue) => {\n if (!value.isNew) setDeletedIds(new Set([...deletedIds, value.id]));\n setDrafts(drafts.filter((draft) => draft.id !== value.id));\n };\n\n const handleCancel = () => {\n setDrafts(toEditorValues(values, toEditorValue));\n setDeletedIds(new Set());\n setSaveError(null);\n };\n\n return (\n <Stack boxSizing=\"border-box\" minH=\"100%\" p=\"lg\" gap=\"lg\" bg=\"bg\" color=\"fg\">\n {error ? (\n <AlertMessage status=\"error\" colorPalette=\"red\" title={errorTitle} size=\"sm\">\n {error}\n </AlertMessage>\n ) : null}\n {loadedValues === undefined ? (\n <HStack gap=\"sm\" color=\"fg.muted\">\n <Spinner size=\"sm\" />\n <Text textStyle=\"paragraph/S/regular\">{loadingText}</Text>\n </HStack>\n ) : (\n <TagEditor\n {...editorProps}\n values={drafts}\n onValuesChange={setDrafts}\n onDeleteValue={handleDeleteValue}\n hasChanges={hasChanges}\n isSaving={isSaving}\n onSave={() => void handleSave()}\n onCancel={handleCancel}\n />\n )}\n </Stack>\n );\n};\n","import { Toaster as ChakraToaster, createToaster, Portal, Spinner, Stack, Toast } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/scroll-area\";\n\nexport const toaster: ReturnType<typeof createToaster> = createToaster({\n placement: \"top\",\n pauseOnPageIdle: true,\n duration: 10000,\n});\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }} alignItems=\"start\" borderRadius=\"xs\">\n {toast.type === \"loading\" ? <Spinner size=\"sm\" color=\"blue.solid\" /> : <Toast.Indicator />}\n <Stack gap=\"1\" flex=\"1\" minWidth=\"0\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <ScrollArea maxHeight=\"12rem\" contentProps={{ paddingEnd: \"1\" }}>\n <Toast.Description whiteSpace=\"pre-wrap\" wordBreak=\"break-word\">\n {toast.description}\n </Toast.Description>\n </ScrollArea>\n )}\n </Stack>\n {toast.action && <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>}\n <Toast.CloseTrigger />\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface TreeListOrderSnapshot {\n sectionOrder: string[];\n nodeOrderBySection: Record<string, string[]>;\n}\n\ninterface TreeListOrderState extends TreeListOrderSnapshot {\n setSectionOrder: (nextSectionIds: string[]) => void;\n setNodeOrder: (sectionId: string, nextNodeIds: string[]) => void;\n resetSectionOrder: () => void;\n resetNodeOrder: (sectionId: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListOrderStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListOrderSnapshot = {\n sectionOrder: [],\n nodeOrderBySection: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-order\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst dedupe = (ids: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n return result;\n};\n\nconst getPersistedSnapshot = (state: TreeListOrderState) => ({\n sectionOrder: state.sectionOrder,\n nodeOrderBySection: state.nodeOrderBySection,\n});\n\nexport const createTreeListOrderStore = (options: CreateTreeListOrderStoreOptions) =>\n createStore<TreeListOrderState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSectionOrder: (nextSectionIds) => set((state) => ({ ...state, sectionOrder: dedupe(nextSectionIds) })),\n setNodeOrder: (sectionId, nextNodeIds) =>\n set((state) => ({\n ...state,\n nodeOrderBySection: { ...state.nodeOrderBySection, [sectionId]: dedupe(nextNodeIds) },\n })),\n resetSectionOrder: () => set((state) => ({ ...state, sectionOrder: [] })),\n resetNodeOrder: (sectionId) =>\n set((state) => {\n if (!(sectionId in state.nodeOrderBySection)) return state;\n const { [sectionId]: _removed, ...rest } = state.nodeOrderBySection;\n return { ...state, nodeOrderBySection: rest };\n }),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListOrderStore>>();\n\nexport const getTreeListOrderStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListOrderStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListOrderStore = <T>(storageKey: string, selector: (state: TreeListOrderState) => T) => {\n const store = getTreeListOrderStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListOrderSnapshot, TreeListOrderState };\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nconst reorderBy = <T extends { id: string }>(items: T[], order: string[]): T[] => {\n if (order.length === 0) return items;\n\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n const placed = new Set<number>();\n const next: T[] = [];\n\n for (const id of order) {\n const index = indexById.get(id);\n if (index === undefined || placed.has(index)) continue;\n placed.add(index);\n next.push(items[index]);\n }\n\n let changed = next.length > 0 && next.length !== items.length;\n for (let i = 0; i < items.length; i += 1) {\n if (placed.has(i)) continue;\n if (next.length !== i && !changed) changed = true;\n next.push(items[i]);\n }\n\n if (!changed) {\n for (let i = 0; i < items.length; i += 1) {\n if (items[i] !== next[i]) {\n changed = true;\n break;\n }\n }\n }\n\n return changed ? next : items;\n};\n\nexport const applyTreeListOrder = (\n sections: TreeListSection[],\n sectionOrder: string[],\n nodeOrderBySection: Record<string, string[]>,\n): TreeListSection[] => {\n let changed = false;\n const reorderedSections = reorderBy(sections, sectionOrder);\n if (reorderedSections !== sections) changed = true;\n\n const next: TreeListSection[] = [];\n for (const section of reorderedSections) {\n const nodeOrder = nodeOrderBySection[section.id];\n if (!nodeOrder || nodeOrder.length === 0) {\n next.push(section);\n continue;\n }\n const reorderedNodes = reorderBy(section.nodes, nodeOrder);\n if (reorderedNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: reorderedNodes });\n } else {\n next.push(section);\n }\n }\n\n return changed ? next : sections;\n};\n\nexport const reorderNodesById = (nodes: TreeListNode[], order: string[]) => reorderBy(nodes, order);\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\nexport type VisibilityOverride = \"hidden\" | \"shown\";\n\ninterface TreeListVisibilitySnapshot {\n sectionOverrides: Record<string, VisibilityOverride>;\n nodeOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TreeListVisibilityState extends TreeListVisibilitySnapshot {\n setSection: (id: string, value: VisibilityOverride | undefined) => void;\n setNode: (id: string, value: VisibilityOverride | undefined) => void;\n toggleSection: (id: string, hiddenByDefault: boolean) => void;\n toggleNode: (id: string, hiddenByDefault: boolean) => void;\n clearSection: (id: string) => void;\n clearNode: (id: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListVisibilitySnapshot = {\n sectionOverrides: {},\n nodeOverrides: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst flipOverride = (current: VisibilityOverride): VisibilityOverride => (current === \"hidden\" ? \"shown\" : \"hidden\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n id: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(id in overrides)) return overrides;\n const { [id]: _removed, ...rest } = overrides;\n return rest;\n }\n\n if (overrides[id] === value) return overrides;\n return { ...overrides, [id]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, id: string, hiddenByDefault: boolean) => {\n const next = flipOverride(resolveEffective(overrides[id], hiddenByDefault));\n return setOverride(overrides, id, next);\n};\n\nconst getPersistedSnapshot = (state: TreeListVisibilityState) => ({\n sectionOverrides: state.sectionOverrides,\n nodeOverrides: state.nodeOverrides,\n});\n\nexport const createTreeListVisibilityStore = (options: CreateTreeListVisibilityStoreOptions) =>\n createStore<TreeListVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSection: (id, value) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, value) })),\n setNode: (id, value) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, value) })),\n toggleSection: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n sectionOverrides: toggleOverride(state.sectionOverrides, id, hiddenByDefault),\n })),\n toggleNode: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n nodeOverrides: toggleOverride(state.nodeOverrides, id, hiddenByDefault),\n })),\n clearSection: (id) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, undefined) })),\n clearNode: (id) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListVisibilityStore>>();\n\nexport const getTreeListVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListVisibilityStore = <T>(storageKey: string, selector: (state: TreeListVisibilityState) => T) => {\n const store = getTreeListVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListVisibilitySnapshot, TreeListVisibilityState };\n","export interface FileIconThemeFont {\n fontFamily: string;\n src: { url: string; format?: string }[];\n weight?: string;\n style?: string;\n}\n\nexport interface FileIconThemeDefinition {\n fontCharacter?: string;\n fontColor?: string;\n fontId?: string;\n}\n\nexport interface FileIconThemePreferenceOption {\n id: string;\n title?: string;\n definitions: Record<string, unknown>;\n fileExtensions: Record<string, string>;\n fileNames: Record<string, string>;\n defaults: { file?: string; folder?: string };\n fonts: FileIconThemeFont[];\n}\n\nexport const defaultFileIconThemePreferences: FileIconThemePreferenceOption[] = [];\n\nexport const isFileIconThemePreference = (\n value: string | null,\n themes: readonly FileIconThemePreferenceOption[],\n): value is string => typeof value === \"string\" && themes.some((theme) => theme.id === value);\n\n// VS Code matches the longest compound extension first (\"d.ts\" before \"ts\").\nconst extensionCandidates = (filename: string) => {\n const parts = filename.toLowerCase().split(\".\");\n const candidates: string[] = [];\n for (let i = 1; i < parts.length; i += 1) candidates.push(parts.slice(i).join(\".\"));\n return candidates;\n};\n\nconst resolveDefinitionKey = (theme: FileIconThemePreferenceOption, filename: string, isDirectory: boolean) => {\n if (isDirectory) return theme.defaults.folder;\n\n const named = theme.fileNames[filename.toLowerCase()];\n if (named) return named;\n\n for (const candidate of extensionCandidates(filename)) {\n const match = theme.fileExtensions[candidate];\n if (match) return match;\n }\n\n return theme.defaults.file;\n};\n\nconst fontFamilyForDefinition = (theme: FileIconThemePreferenceOption, definition: FileIconThemeDefinition) => {\n if (definition.fontId) {\n const matched = theme.fonts.find((font) => font.fontFamily === `${theme.id}-${definition.fontId}`);\n if (matched) return matched.fontFamily;\n }\n return theme.fonts[0]?.fontFamily;\n};\n\nexport interface ResolvedFileIconGlyph {\n fontFamily: string;\n fontCharacter: string;\n fontColor?: string;\n}\n\n// VS Code icon themes store the glyph as a CSS escape (\"\\\\E023\"); decode it to the real code point.\nconst decodeFontCharacter = (value: string) => {\n const match = /^\\\\([0-9a-fA-F]+)$/.exec(value);\n return match ? String.fromCodePoint(Number.parseInt(match[1], 16)) : value;\n};\n\nexport const resolveFileIconGlyph = (\n theme: FileIconThemePreferenceOption | undefined,\n filename: string,\n isDirectory = false,\n): ResolvedFileIconGlyph | undefined => {\n if (!theme) return undefined;\n\n const key = resolveDefinitionKey(theme, filename, isDirectory);\n if (!key) return undefined;\n\n const definition = theme.definitions[key] as FileIconThemeDefinition | undefined;\n if (!definition?.fontCharacter) return undefined;\n\n const fontFamily = fontFamilyForDefinition(theme, definition);\n if (!fontFamily) return undefined;\n\n return {\n fontFamily,\n fontCharacter: decodeFontCharacter(definition.fontCharacter),\n fontColor: definition.fontColor,\n };\n};\n\nconst FONT_STYLE_ATTRIBUTE = \"data-pstdio-file-icon-fonts\";\n\nconst fontFaceRule = (font: FileIconThemeFont) => {\n const src = font.src\n .map((entry) => `url(\"${entry.url}\")${entry.format ? ` format(\"${entry.format}\")` : \"\"}`)\n .join(\", \");\n return [\n \"@font-face {\",\n ` font-family: \"${font.fontFamily}\";`,\n ` src: ${src};`,\n ` font-weight: ${font.weight ?? \"normal\"};`,\n ` font-style: ${font.style ?? \"normal\"};`,\n \"}\",\n ].join(\"\\n\");\n};\n\nexport const applyFileIconThemePreference = (\n themeId: string | null,\n themes: readonly FileIconThemePreferenceOption[],\n) => {\n if (typeof document === \"undefined\") return;\n\n let style = document.querySelector<HTMLStyleElement>(`style[${FONT_STYLE_ATTRIBUTE}]`);\n if (!style) {\n style = document.createElement(\"style\");\n style.setAttribute(FONT_STYLE_ATTRIBUTE, \"\");\n document.head.appendChild(style);\n }\n\n const theme = themes.find((option) => option.id === themeId);\n style.textContent = (theme?.fonts ?? []).map(fontFaceRule).join(\"\\n\\n\");\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyFileIconThemePreference,\n defaultFileIconThemePreferences,\n type FileIconThemePreferenceOption,\n isFileIconThemePreference,\n} from \"./apply-file-icon-theme-preference\";\nimport { createBrowserStorage } from \"./browser-storage\";\n\nconst STORAGE_KEY = \"file-icon-theme-preference\";\n\n// The bundled Seti theme is the preferred default; fall back to whatever is registered first.\nconst getDefaultFileIconThemePreference = (themes: readonly FileIconThemePreferenceOption[]) =>\n themes.find((theme) => theme.id.endsWith(\".seti\"))?.id ?? themes[0]?.id ?? null;\n\ninterface FileIconThemePreferenceContextValue {\n fileIconThemePreference: string | null;\n fileIconThemePreferences: readonly FileIconThemePreferenceOption[];\n activeFileIconTheme: FileIconThemePreferenceOption | undefined;\n setFileIconThemePreference: (preference: string) => void;\n}\n\nconst FileIconThemePreferenceContext = createContext<FileIconThemePreferenceContextValue | null>(null);\n\ninterface FileIconThemePreferenceProviderProps {\n children: ReactNode;\n themePreferences?: readonly FileIconThemePreferenceOption[];\n}\n\nconst getInitialPreference = (themes: readonly FileIconThemePreferenceOption[]) => {\n if (typeof window === \"undefined\") return getDefaultFileIconThemePreference(themes);\n\n const stored = createBrowserStorage().getItem(STORAGE_KEY);\n if (isFileIconThemePreference(stored, themes)) return stored;\n\n return getDefaultFileIconThemePreference(themes);\n};\n\nexport const FileIconThemePreferenceProvider = (props: FileIconThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultFileIconThemePreferences } = props;\n const [fileIconThemePreference, setFileIconThemePreference] = useState<string | null>(() =>\n getInitialPreference(themePreferences),\n );\n\n useEffect(() => {\n const resolved = isFileIconThemePreference(fileIconThemePreference, themePreferences)\n ? fileIconThemePreference\n : getDefaultFileIconThemePreference(themePreferences);\n\n if (resolved !== fileIconThemePreference) {\n setFileIconThemePreference(resolved);\n return;\n }\n\n applyFileIconThemePreference(resolved, themePreferences);\n if (typeof window !== \"undefined\" && resolved) createBrowserStorage().setItem(STORAGE_KEY, resolved);\n }, [fileIconThemePreference, themePreferences]);\n\n const activeFileIconTheme = themePreferences.find((theme) => theme.id === fileIconThemePreference);\n\n return (\n <FileIconThemePreferenceContext\n value={{\n fileIconThemePreference,\n fileIconThemePreferences: themePreferences,\n activeFileIconTheme,\n setFileIconThemePreference,\n }}\n >\n {children}\n </FileIconThemePreferenceContext>\n );\n};\n\nexport const useFileIconThemePreference = () => {\n const context = useContext(FileIconThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useFileIconThemePreference must be used within a FileIconThemePreferenceProvider\");\n }\n\n return context;\n};\n","const readDefaultExport = (module: { default?: unknown }) => module.default ?? module;\n\nexport const installPrismGlobal = async () => {\n const globalScope = globalThis as typeof globalThis & { Prism?: unknown };\n if (globalScope.Prism) return;\n\n const prismModule = await import(\"prismjs\");\n globalScope.Prism = readDefaultExport(prismModule);\n};\n","import { Folder } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\n\nimport { type FileIconThemePreferenceOption, resolveFileIconGlyph } from \"./apply-file-icon-theme-preference\";\nimport { getFileTypeIcon } from \"./get-file-type-icon\";\n\ninterface ResolveFileIconElementOptions {\n isDirectory?: boolean;\n theme?: FileIconThemePreferenceOption;\n size?: number;\n}\n\n// Renders a contributed icon-font glyph when the active theme matches; otherwise falls back to Lucide icons.\nexport const resolveFileIconElement = (filename: string, options: ResolveFileIconElementOptions = {}) => {\n const { isDirectory = false, theme, size = 16 } = options;\n\n const glyph = resolveFileIconGlyph(theme, filename, isDirectory);\n if (glyph) {\n const style: CSSProperties = {\n fontFamily: `\"${glyph.fontFamily}\"`,\n color: glyph.fontColor,\n fontSize: size,\n lineHeight: 1,\n display: \"inline-flex\",\n };\n return (\n <span aria-hidden=\"true\" style={style}>\n {glyph.fontCharacter}\n </span>\n );\n }\n\n if (isDirectory) return <Folder size={size} />;\n\n const Icon = getFileTypeIcon(filename);\n return <Icon size={size} />;\n};\n"],"names":["ActivityAvatar","props","$","_c","actor","icon","color","t0","background","t1","undefined","t2","Box","avatarSrc","t3","avatarAlt","name","t4","Avatar","t5","t6","t7","TimestampSeparator","Symbol","for","jsx","ActivityCommentHeader","timestamp","actions","Text","jsxs","Fragment","HStack","ActivityReply","children","rootProps","Stack","ActivityComment","composer","replies","hasReplies","Children","count","ActivityComposer","value","defaultValue","placeholder","variant","minRows","attachLabel","submitLabel","onAttach","onChange","onSubmit","internalValue","setInternalValue","useState","currentValue","isInline","canSubmit","trim","length","handleChange","nextValue","handleSubmit","event","preventDefault","chakra","borderColor","Textarea","outline","currentTarget","Spacer","Tooltip","IconButton","Icon","Paperclip","ArrowUp","EventSeparator","ActivityEvent","iconColor","iconBackground","Timeline","t8","ActivityRoot","ActivityHeader","title","ActivityFeed","ActivityTimeline","Activity","Root","Header","Feed","Event","Comment","Reply","Composer","DEFAULT_RESIZABLE_MIN_WIDTH","AttachedPanel","header","minWidth","rest","width","resizable","resolvedMinWidth","resolvedWidth","Flex","ListRowMenuItemIcon","item","ListRowMenu","items","onOpenChange","onSelect","open","placement","mainAxis","offset","details","Menu","separatorBefore","id","disabled","readOnly","opacity","cursor","description","label","endContent","map","Portal","createResourceContextActions","entry","key","isDisabled","onClick","onAction","ListRowChrome","menuOpen","onMenuOpenChange","onMenuSelect","menuItems","menuPlacement","tooltip","row","contextMenuItems","ResourceContextMenu","headerVariantStyles","main","h","px","narrow","input","React","forwardRef","ref","filterSearchableMenuItems","query","normalizedQuery","toLowerCase","filter","searchText","Boolean","join","includes","shouldResetSearchableMenuQuery","currentListId","nextListId","resolveActiveListConfig","isShowingParent","parentList","childConfig","filterItems","showSearch","searchPlaceholder","emptyState","contentTestId","closeOnSelect","listId","searchInputBorderProps","portalledMenuLayerZIndex","SearchableMenu","trigger","maxListHeight","lazyMount","positioning","onFocusOutside","portalled","hasParentList","internalOpen","setInternalOpen","setQuery","activeList","setActiveList","inputRef","useRef","isOpen","config","filteredItems","previousListIdRef","useEffect","current","timeout","setTimeout","focus","clearTimeout","handleOpenChange","t9","details_0","find","i","handleMenuItemSelect","renderIcon","_temp","t10","item_0","secondaryLabel","tooltipLabel","buildRowItem","t11","ariaLabel","_temp2","event_0","stopPropagation","_temp3","ListRow","selectedLabel","selectedIcon","ChevronDown","resolvedHeader","shouldShowSeparator","searchInput","InputGroup","Search","Input","event_1","target","_temp4","t12","t13","t14","t15","t16","t17","t18","T0","ScrollArea","t19","overscrollBehavior","t20","t21","t22","item_1","bg","isSelected","t23","t24","Content","t25","Positioner","menuPositioner","t26","t27","t28","t29","t30","t31","event_2","SearchableActionMenu","action","emptyMenuLabel","keyedTooltip","child","RowActions","context","pointerEvents","resolveLabelColor","isEmptyStateVariant","tone","RowLabel","textStyle","RowDescription","marginLeft","RowContent","isExpanded","showChevron","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","iconPx","iconLabelGap","labelColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","nodeId","computePaddingLeft","depth","resolveListRowSizing","hasDescription","rowHeight","minHeight","createRowBackgroundProps","selectedBg","_hover","outlineColor","outlineOffset","hoverBg","createListRowRootProps","role","rowRole","className","maxWidth","display","alignItems","justifyContent","gap","py","verticalPadding","pl","paddingLeft","borderRadius","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","handleKeyDown","activationProps","rowProps","content","children_0","menuItem","wrap","tabIndex","current_0","contentMinWidth","contentBackground","linkProps","minW","maxW","textOverflow","whiteSpace","_active","_focus","_focusVisible","staticProps","isInteractiveItem","url","BreadcrumbItemLink","isCurrent","linkComponent","LinkComponent","ChakraBreadcrumb","BreadcrumbItemContent","contextMenuActions","BreadcrumbSeparator","separator","Breadcrumb","separatorGap","index","BubbleButton","containerProps","button","BubblePanel","menu","onClose","closeLabel","onPopOut","popOutLabel","testId","SquareArrowOutUpRight","Minus","customTheme","base","inherit","rules","colors","isMonacoTheme","EDITOR_THEME_NAME","useEditorTheme","themePreference","themePreferences","useThemePreference","theme","preference","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","monaco","editor","defineTheme","setTheme","monaco_0","CodeEditor","defaultCode","code","showLineNumbers","isEditable","language","disableScroll","applyEditorTheme","enabled","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","tabSize","minimap","fontSize","lineNumbers","options","languages","typescript","typescriptDefaults","setCompilerOptions","JsxEmit","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","NO_GROUPING","MANUAL_ORDERING","isEnumOptionsSource","Array","isArray","isAttributesSource","attributes","DEFAULT_DATA_RENDERER_SETTINGS","viewMode","columnGrouping","rowGrouping","ordering","attributeId","direction","displayProperties","findAttribute","attribute","applyBoardMoveItem","settings","rowId","targetColumnId","targetGroupKey","beforeItemId","onAttributeChange","onReorder","applyBoardMoveToGroup","ColumnHeader","column","onCreateStart","onColumnAction","colorPalette","Badge","canCreate","createLabel","Plus","MoreHorizontal","resolveSessionIndicatorIcon","status","CircleCheck","CircleAlert","CircleStop","CirclePause","ClockAlert","CircleDot","CircleDashed","resolveSessionIndicatorColor","SessionIndicator","boxSize","ATTEMPT_STATUS_COLOR_ALIASES","amber","CHAKRA_COLOR_PALETTES","Set","workspaceBadgeSurfaceProps","_light","_dark","resolveWorkspaceIcon","workspaceType","GitCommitIcon","GitBranchIcon","resolveAttemptStatusColor","startsWith","resolvedColor","has","buildAttemptStatusTooltip","attemptStatus","handleIconClick","handleBadgeClick","LeadingSessionIndicator","sessionStatus","onSessionIndicatorClick","sessionTooltip","WorkspaceTypeIndicator","initializing","shorthand","WorkspaceTypeIcon","displayLabel","Spinner","WorkspaceAttemptStatusIndicator","WorkspaceDiffTotals","diffAdditions","diffDeletions","WorkspaceDropdownTrigger","hasMultipleWorkspaces","onDropdownClick","WorkspaceBadge","showLeadingSessionIndicator","suppressionKey","getInteractionGlobal","globalThis","suppressNextDataRendererCardClick","Date","now","isDataRendererCardClickSuppressed","optionColors","optionIcons","Circle","Bug","Sparkles","BookOpen","Wrench","Gauge","Feather","Scale","Layers","AlertTriangle","Star","Flag","Flame","Lightbulb","Shield","Eye","Clock","CheckCircle","Tag","Code","ChartColumnIncreasing","CircleQuestionMark","ShieldAlert","getIconComponent","iconOptions","IconColorPicker","colorOptions","onColorChange","onIconChange","showIcons","IconComponent","Popover","optionColor","GridItem","Grid","stopRowActivation","markRowActivationSuppression","suppressRowActivation","getSelectedValues","badge","toggleMultiValue","values","optionValue","badgeStyleProps","getBadgeIconColor","selectionIcon","isMultiValue","SquareCheck","Square","Check","DataRendererAttributeBadge","T1","T2","T3","bb0","canEdit","selectedValues","attributeLabel","onClickCapture","onPointerDownCapture","rowInteractionProps","handleOptionChange","handleClearSelection","badgeContent","X","option","DataRendererCard","badges","customSlots","workspaceBadge","onBadgeChange","hasBadges","Node","contains","Wrap","GroupSection","columnId","group","selectedItemId","canDragIn","canDragOut","isDropTarget","onGroupDragOver","onGroupDragLeave","onGroupDrop","expanded","setExpanded","itemId","dataTransfer","getData","cardProps","dropEffect","DataRendererBoard","columns","onMoveItem","onMoveToGroup","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","handleDragEnd","handleDragOver","relatedTarget","handleDragLeave","columnId_0","itemId_0","handleDrop","pb","minH","borderLeft","margin","spaceY","ps","pe","groups","groupId","event_3","event_4","event_5","itemId_1","event_6","event_7","itemId_2","setData","effectAllowed","flattenDataRendererListItems","rows","canExpand","push","getRowIsExpanded","getDropTargetIndicatorProps","isGroup","_before","position","left","top","expandedState","updateExpandedState","renderLabel","countBadge","countColorPalette","renderEndContent","buildListRowItem","statusIcon","statusColor","DataRendererList","expandedGroups","onItemClick","onExpandedGroupChange","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","handleExpandedChange","DataRendererListRow","onDraggedItemChange","onDropTargetChange","onExpandedChange","canDropHere","onDropRow","rowItem","toggleExpanded","draggedId","DataRendererEmptyState","EmptyState","DataRendererContent","boardColumns","listItems","listExpandedGroups","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","onListExpandedGroupChange","listKey","dedupeEnumOptions","seen","add","getEnumOptions","type","kind","getSnapshot","toTitleCase","replaceAll","split","chunk","toUpperCase","slice","findEnumOption","enumOptionLabel","summarizeMultiEnum","renderEnumBadge","descriptor","stringValue","editable","renderMultiEnumBadge","summary","firstOption","getAttributeValue","raw","getAttributeStringValues","String","formatDateValue","date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","workspaceTypeFrom","normalizeWorkspaceBadgeItems","flatMap","renderWorkspaceBadgeDisplay","itemsAttributeId","selectedId","selectedItem","createElement","renderAttributeBadge","render","formatted","collectDisplayBadges","displayable","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","buildFilterCategories","categories","filterable","declared","auto","declaredValues","undeclared","sort","a","b","localeCompare","numeric","selectionMode","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","filters","active","normalizeFilterValues","_descriptor","omitFilterCategory","next","sanitizeSettings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","attributesById","Map","Object","entries","get","UNASSIGNED_LABEL","fallbackLabel","labelForGroupKey","resolveGroupingValue","some","getGroupingKey","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","right","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","set","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","rowValues","normalizedValues","filterRows","activeFilters","every","countFilterValues","counts","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","hasNoneFirst","flex","Button","option_0","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","SortDirectionIcon","ArrowDownAZ","ArrowDownZA","closeOnOutsidePointerDown","document","addEventListener","removeEventListener","Settings2","ViewModeIcon","Separator","isActive","normalizeSelectedValues","selected","buildNormalizedFilters","normalized","category","getActiveFilterCount","reduce","sum","getSelectedFilterDescription","labels","FilterCategoryLabel","selectedDescription","FilterOptionLabel","checked","Checkbox","FilterOptionRow","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","activeCategory","normalizedFilters","activeFilterCount","category_0","handleOptionSelect","Filter","category_1","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","createSnapshot","initialState","toggleValue","stripTagPrefix","migrateSettings","orderingRaw","field","orderingDirection","migrateFilters","stringValues","createDataRendererStore","snapshot","createStore","persist","setViewMode","state","setColumnGrouping","setRowGrouping","setOrdering","setOrderingAttributeId","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","property","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","setExpandedGroup","reset","version","migrate","persisted","storage","createJSONStorage","createBrowserStorage","partialize","workspaceStoreRegistry","getDataRendererStore","existingStore","store","useDataRendererStore","selector","useStore","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","refresh","unsubscribes","source","subscribe","dispose","tick","DataRendererToolbar","rawAttributes","defaultSettings","defaultFilters","leading","align","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","categoryOptions","fromEntries","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","state_9","buildListItems","visibleRows","grouped","onRowClick","getRowContextMenuActions","supportsManualReorder","getGroupColorPalette","toListItem","targetColumnKey","toSubgroupListItem","subgroup","parent","DataRenderer","getBoardColumnConfig","hideToolbar","toolbarLeading","boardRows","toBoardItems","columnGroupingDescriptor","columnConfig","orderedRows","enumColor","handleBoardMoveItem","rowId_0","context_0","handleBoardMoveToGroup","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","Dialog","CloseButton","imagePreviewMimeTypes","avif","bmp","gif","heic","ico","jpeg","jpg","png","tif","tiff","webp","imagePreviewExtensions","keys","getFileExtension","filePath","extension","pop","getImagePreviewMimeType","isImagePreviewPath","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","binaryDiffExtensions","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","path","fileName","endsWith","isBinaryDiffPath","ext","isImageDiffPath","createDiffCardBodyModel","diff","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","oldImageSrc","getImagePreviewSource","newImageSrc","oldSrc","newSrc","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","ImageDiffPreview","BinaryDiffPlaceholder","LargeDiffPlaceholder","md","ImageDiffPanel","src","fallback","Image","DeferredDiffLoad","actionLabel","isLoadingDiff","loadingDiffContentRows","LoadingDiffContent","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","shouldShowDiffStats","useDiffContentLoader","setLoadingDiff","setRequestedPath","setLoadError","loadDiff","DiffCard","onToggleExpanded","blocksDiffContentLoad","DiffCardHeader","showStats","change","DiffBubble","DiffDrawerEmptyState","p","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","IMAGE_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","estimateDiffRangeHeight","diffs","collapsedPaths","largeDiffOptInPaths","startIndex","endIndex","diffIndex","resolveSelectedScrollState","selectedDiffPath","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","shouldPinSelectedScrollIndex","includePinnedDiffIndexes","indexes","pinnedStartIndex","Math","max","pinnedIndexes","from","getRenderedDiffItems","scrollElement","querySelectorAll","element","querySelector","dataset","isInteger","getElementScrollOffset","offsetTop","elementRect","getBoundingClientRect","scrollRect","scrollTop","SELECTED_ALIGNMENT_THRESHOLD","useSelectedDiffScroll","scrollRef","setCompletedScrollCommandId","frameIds","cancelledByUserScroll","cancelSelectedScroll","estimateRangeHeight","scrollToOffset","scrollTo","behavior","scrollToSelectedDiff","alignRenderedSelectedDiff","renderedItems","selectedOffset","currentOffset","abs","firstItem","lastItem","at","alignmentAttempts","reconcileSelectedDiff","isAligned","hasSettled","requestAnimationFrame","passive","isInitiallyAligned","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","delete","resolveCollapsedPathsForSelectedDiff","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","setCollapsedPaths","setLargeDiffOptInPaths","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","prev","expansionState","allExpanded","size","allCollapsed","reportedExpansionState","showFullDiff","virtualItems","getVirtualItems","style","overflowAnchor","getTotalSize","virtualItem","measureElement","start","RESIZE_SEPARATOR_HOVER_STYLE","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","round","bottom","insetInlineStart","w","transform","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","min","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","applyPanelWidthToElement","panel","flexBasis","flexGrow","flexShrink","clearPanelInlineStyles","ResizableSplitLayout","contentPanel","controlledCollapsed","onCollapsedChange","onSizeChange","resizablePanel","resizableSide","defaultSizePx","collapsed","collapsible","useId","rootRef","resizablePanelRef","contentPanelRef","cleanupDragRef","lastWidthRef","panelWidth","setPanelWidth","setRootWidth","internalCollapsed","setInternalCollapsed","collapseThresholdPx","updateRootWidth","ResizeObserver","observer","observe","disconnect","applyPanelWidth","width_0","rootWidth_0","nextBounds","nextWidth","commitPanelWidth","nextCollapsed","setCollapsed","resizeHandle","rootWidth_1","bounds_0","startX","clientX","startWidth","previousCursor","body","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","schedulePanelWidth","window","handlePointerMove","moveEvent","rawWidth","cleanup","hasPointerCapture","pointerId","releasePointerCapture","setPointerCapture","once","handleResizeStart","direction_0","width_1","handleResizeKeyDown","resizablePanelNode","contentPanelNode","resizeTrigger","normalizeChangedFilePath","segment","sortNodes","nodes","forEach","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","mode","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","SelectionIndicator","DiffViewerMenuItem","DiffViewerOptionsMenu","hasFilePaths","isExpandAllDisabled","isCollapseAllDisabled","onToggleTreePanel","onDiffViewModeChange","onExpandAll","onCollapseAll","PanelLeftClose","PanelLeftOpen","ListTree","Rows2","SquareSplitHorizontal","ChevronsUpDown","ChevronsDownUp","isInList","isActiveNode","activeNodeId","isNavigableNode","getNodeChildren","hasExpandableChildren","appendVisibleNodeRows","sectionId","expandedNodeIds","level","parentNodeId","buildVirtualRows","sections","expandedSectionIds","section","getRowFocusId","isFocusableRow","getFocusableRows","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","activeId","firstRow","resolveSectionHeaderNavigation","currentIndex","nextRow","resolveNodeNavigation","expandable","resolveTreeListKeyboardNavigation","resolvedFocusRowId","currentRow","focusByIndex","clamped","TreeListNodeRow","rowVariant","nodeGap","onFocus","onNavigate","onToggleNode","canLink","intent","listRowItem","nodeRowVariant","TreeListSectionActions","TreeListSectionHeader","focusId","onToggle","onContextMenu","transition","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","arrayMoveInPlace","to","removed","splice","computeReorderResult","overId","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","topLevelNodeIds","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","result","DndContext","section_0","row_0","row_1","row_2","findRowElement","root","treeListFocusId","findFocusedRowId","HTMLElement","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","focusableRowIds","frame","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","keyboard","scrollToIndex","StackTreeList","virtualize","TreeListBackground","TreeList","backgroundContextActions","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","changeSemanticStyles","backgroundColor","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","fileIcon","FileText","changeBadgeProps","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","overflowX","buildChangeByPath","sumDiffStats","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","nextIndex","current_1","selectChangedFilePath","diffPanel","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","SimpleCard","SimpleCardBody","IntegrationCard","ItemSection","defaultOpen","Collapsible","e","searchInputStateProps","hasContent","footerJustifyContent","hasFooterStart","hasFooterEnd","SearchModalContent","searchValue","searchAriaLabel","searchIcon","searchInputRef","searchAutoFocus","showCloseButton","closeButtonLabel","bodyBefore","footerStart","footerEnd","scrollAreaProps","onSearchChange","onSearchKeyDown","restScrollAreaProps","maxH","showHorizontalScrollbar","ACTIVE_ROW_BG","priorityColorPalette","priority","shouldShowPriorityBadge","itemSearchText","sourceLabel","targetLabel","groupItems","needsInput","urgent","normal","orderItemsForDisplay","metadataDescription","timeLabel","getActionButtons","onDismiss","NotificationEndContent","onRunAction","destructive","NotificationRows","activeIndex","onActivateItem","onActiveIndexChange","Bell","LoadingRows","NotificationCenter","autoFocus","emptyLabel","onEscape","onQueryChange","internalQuery","setInternalQuery","setActiveIndex","activeQuery","displayItems","activeItem","nextQuery","updateQuery","getNoticeKey","notice","getNoticeTitle","OpenSourceNoticesScreen","notices","productName","productVersion","generatedAt","license","copyright","homepageUrl","sourceUrl","Link","attribution","DEFAULT_PALETTE_ASSET_LIMIT","getSearchableText","hasInputPrefix","inputPrefix","trimStart","resolvePaletteMode","modes","fallbackMode","getPaletteEffectiveQuery","modeId","candidate","limitDefaultAssetEntries","limit","assetType","filterPaletteEntries","effectiveQuery","getEffectiveQuery","filteredEntries","defaultAssetLimit","GROUP_ROW_HEIGHT","ENTRY_ROW_HEIGHT","INITIAL_VIEWPORT_HEIGHT","buildEntryItem","shortcut","buildRows","previousEntry","entryIndex","getActiveRowIndex","PaletteList","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","filterEntries","onActiveEntryChange","setQueryState","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","viewportRef","viewportProps","nextQuery_0","nonMacModifierLabels","alt","control","ctrl","mod","shift","macModifierLabels","Option","cmd","Command","command","meta","keyLabels","arrowleft","ArrowLeft","arrowright","ArrowRight","getShortcutPlatform","navigator","platform","resolveShortcutDisplayPart","modifierLabels","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ParamEditorReadOnlyValue","boxProps","preserveWhitespace","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","valueElement","parseColor","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedOptions","id_0","o","remaining","o_0","getDisplayText","handleSelect","updatedValues","v","selectionIndicator","opt_0","opt","opt_1","TextInput","singleLine","e_3","resolveDefaultValue","defaultValues","paramId","InputGroupComponent","defaultCollapsed","useDisclosure","param","renderNumberParam","param_0","renderTextParam","param_1","renderSelectionParam","param_2","renderDateParam","param_3","renderColorParam","param_4","renderPropertyParam","param_5","renderParam","ChevronLeft","params","ParamEditor","getEntryIcon","isDirectory","isGitRepo","FolderOpen","Folder","RepoPickerListEntry","selectedPathSet","onEntryClick","isAlreadySelected","searchInputFocusVisibleProps","focusInlinePickerOption","activeElement","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","t32","t33","t34","t35","t36","t37","t38","t39","padding","t40","t41","t42","Body","t43","t44","t45","t46","t47","t48","expandedSections","expandedNodes","SIDEBAR_STORE_NAMESPACE","toggleId","getPersistedSnapshot","createSidebarStore","openSidebar","closeSidebar","toggleSidebar","toggleSection","toggleNode","setSectionExpanded","setNodeExpanded","setWidth","sidebarStoreRegistry","getSidebarStore","useSidebarStore","SidebarFooter","PANEL_HEADER_HEIGHT","SidebarHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","resolveInitialWidth","defaultWidth","parsed","parseInt","Sidebar","footer","closable","defaultExpandedSections","initialWidth","persistedWidth","effectiveWidth","widthCss","flexDirection","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on","tabOverrides","STORE_NAMESPACE","resolveEffective","override","hiddenByDefault","setOverride","overrides","_removed","toggleOverride","createTabVisibilityStore","setTab","toggleTab","clearTab","storeRegistry","getTabVisibilityStore","existing","useTabVisibilityStore","toStringLabel","resolveVisibility","isCustomizable","canHide","isNodeVisible","nodeOverrides","filterNodes","changed","filteredChildren","filterVisibleNodes","filterVisibleSections","sectionOverrides","filteredNodes","visibilityEndContent","effective","visibleIcon","hiddenIcon","buildSectionAction","buildNodeAction","buildTreeVisibilityMenuActions","headerNodes","footerNodes","resetIcon","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","getIcon","nonCloseableCount","contributionId","onToggleTab","ActionDropdown","toggleAction","TagEditorRow","actionOptions","isSaving","showDefault","onActionsChange","onNameChange","onSetDefault","GripVertical","Table","trimmed","Editable","isDefault","Trash2","buildDraftItem","form","sortOrder","crypto","randomUUID","isNew","TagEditor","onValuesChange","onSave","onCancel","onDeleteValue","hasChanges","addLabel","addPlaceholder","actionsColumnLabel","cancelLabel","defaultAddColor","defaultAddIcon","defaultColumnLabel","deleteButtonText","deleteHeadline","deleteNotificationText","saveLabel","valueColumnLabel","isAdding","setIsAdding","addForm","setAddForm","valueToDelete","setValueToDelete","resetAddForm","updateValue","patch","handleAddOption","maxOrder","handleDeleteOption","arrayMove","handleAddKeyDown","closestCenter","bySortOrder","toEditorValues","toEditorValue","findOriginalValue","draft","hasTagValueChanges","drafts","deletedIds","valueNeedsUpdate","errorMessage","Error","TagSettingsPanel","errorTitle","loadingText","loadedValues","editorProps","setDrafts","setDeletedIds","setIsSaving","saveError","setSaveError","handleSave","handleDeleteValue","handleCancel","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","paddingEnd","sectionOrder","nodeOrderBySection","dedupe","ids","createTreeListOrderStore","setSectionOrder","setNodeOrder","resetSectionOrder","resetNodeOrder","getTreeListOrderStore","useTreeListOrderStore","reorderBy","order","indexById","placed","applyTreeListOrder","reorderedSections","nodeOrder","reorderedNodes","flipOverride","createTreeListVisibilityStore","setSection","setNode","clearSection","clearNode","getTreeListVisibilityStore","useTreeListVisibilityStore","defaultFileIconThemePreferences","isFileIconThemePreference","themes","extensionCandidates","filename","parts","candidates","resolveDefinitionKey","defaults","folder","named","fileNames","match","fileExtensions","file","fontFamilyForDefinition","definition","fontId","matched","fonts","font","fontFamily","decodeFontCharacter","exec","fromCodePoint","resolveFileIconGlyph","definitions","fontCharacter","fontColor","FONT_STYLE_ATTRIBUTE","fontFaceRule","format","weight","applyFileIconThemePreference","themeId","setAttribute","head","appendChild","textContent","STORAGE_KEY","getDefaultFileIconThemePreference","FileIconThemePreferenceContext","createContext","getInitialPreference","stored","getItem","FileIconThemePreferenceProvider","fileIconThemePreference","setFileIconThemePreference","resolved","setItem","activeFileIconTheme","fileIconThemePreferences","useFileIconThemePreference","useContext","readDefaultExport","module","default","installPrismGlobal","globalScope","Prism","prismModule","resolveFileIconElement","glyph","lineHeight","getFileTypeIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/activity/activity-avatar.tsx","../src/components/activity/activity-comment.tsx","../src/components/activity/activity-composer.tsx","../src/components/activity/activity-event.tsx","../src/components/activity/activity-root.tsx","../src/components/activity/activity-timeline.tsx","../src/components/activity/index.ts","../src/components/command-palette/palette-filter.ts","../src/components/command-palette/palette-list.tsx","../src/components/overlays/search-modal-content.tsx","../src/components/command-palette/palette.tsx","../src/components/command-palette/palette-shortcut.tsx","../src/components/layout/horizontal-menu-stack.tsx","../src/components/layout/item-section.tsx","../src/components/layout/panel-header.constants.ts","../src/components/notification-center/notification-center.tsx","../src/components/overlays/attached-menu.tsx","../src/components/overlays/attached-panel.tsx","../src/components/overlays/bubble-button.tsx","../src/components/overlays/bubble-panel.tsx","../src/components/overlays/delete-confirmation-modal.tsx","../src/components/overlays/repo-picker-dialog.tsx","../src/components/primitives/breadcrumb.tsx","../src/components/primitives/content-placeholder.tsx","../src/components/primitives/error-boundary.tsx","../src/components/primitives/simple-card.tsx","../src/components/primitives/integration-card.tsx","../src/components/primitives/switch.tsx","../src/components/primitives/toaster.tsx","../src/components/param-editor/param-editor-control-list.tsx","../src/components/sidenav/sidenav.store.ts","../src/components/sidenav/sidenav-footer.tsx","../src/components/sidenav/sidenav-header.tsx","../src/components/sidenav/sidenav.tsx","../src/components/tab-strip/tab-visibility.store.ts","../src/components/tree-list/tree-list-visibility-filter.ts","../src/components/tab-strip/tab-visibility-filter.ts","../src/components/tag-editor/tag-editor-row.tsx","../src/components/tag-editor/tag-editor.tsx","../src/components/tag-editor/tag-settings-panel.tsx","../src/components/tree-list/tree-list-order.store.ts","../src/components/tree-list/tree-list-order-filter.ts","../src/components/tree-list/tree-list-visibility.store.ts","../src/utils/apply-file-icon-theme-preference.ts","../src/utils/file-icon-theme-preference.tsx","../src/utils/resolve-file-icon-element.tsx"],"sourcesContent":["import { Avatar, Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\n\nexport interface ActivityAvatarProps {\n actor?: ActivityActor;\n icon?: ReactNode;\n color?: string;\n background?: string;\n}\n\nexport const ActivityAvatar = (props: ActivityAvatarProps) => {\n const { actor, icon, color = \"fg.muted\", background = \"bg.muted\" } = props;\n\n if (icon) {\n return (\n <Box\n boxSize=\"18px\"\n borderRadius=\"full\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n color={color}\n background={background}\n >\n {icon}\n </Box>\n );\n }\n\n return (\n <Avatar.Root size=\"2xs\" flexShrink={0}>\n <Avatar.Image src={actor?.avatarSrc} alt={actor?.avatarAlt ?? actor?.name} />\n <Avatar.Fallback name={actor?.name} background={background} color={color} />\n </Avatar.Root>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { Children, type ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\ninterface ActivityCommentHeaderProps {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityCommentProps extends Omit<HTMLChakraProps<\"article\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n replies?: ReactNode;\n composer?: ReactNode;\n children: ReactNode;\n}\n\nexport interface ActivityReplyProps extends Omit<HTMLChakraProps<\"div\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n}\n\nconst TimestampSeparator = () => (\n <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />\n);\n\nconst ActivityCommentHeader = (props: ActivityCommentHeaderProps) => {\n const { actor, timestamp, actions } = props;\n\n return (\n <HStack gap=\"xs\" alignItems=\"center\" minW=\"0\">\n <ActivityAvatar actor={actor} />\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {actor.name}\n </Text>\n {timestamp ? (\n <>\n <TimestampSeparator />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n <Box marginLeft=\"auto\" flexShrink={0}>\n {actions}\n </Box>\n </HStack>\n );\n};\n\nexport const ActivityReply = (props: ActivityReplyProps) => {\n const { actor, timestamp, actions, children, ...rootProps } = props;\n\n return (\n <Box paddingX=\"md\" paddingY=\"sm\" {...rootProps}>\n <Stack gap=\"xs\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Box paddingLeft=\"32px\">\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\">\n {children}\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n};\n\nexport const ActivityComment = (props: ActivityCommentProps) => {\n const { actor, timestamp, actions, replies, composer, children, ...rootProps } = props;\n const hasReplies = Children.count(replies) > 0;\n\n return (\n <Box\n as=\"article\"\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"xs\"\n background=\"bg\"\n overflow=\"hidden\"\n {...rootProps}\n >\n <Stack gap=\"sm\" padding=\"md\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\" whiteSpace=\"pre-wrap\">\n {children}\n </Text>\n </Stack>\n {hasReplies ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.subtle\">\n {replies}\n </Box>\n ) : null}\n {composer ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.subtle\">\n {composer}\n </Box>\n ) : null}\n </Box>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, chakra, HStack, Icon, IconButton, Spacer, Textarea } from \"@chakra-ui/react\";\nimport { ArrowUp, Paperclip } from \"lucide-react\";\nimport type { FormEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityComposerProps extends Omit<HTMLChakraProps<\"form\">, \"onChange\" | \"onSubmit\"> {\n actor?: ActivityActor;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n variant?: \"standalone\" | \"inline\";\n minRows?: number;\n attachLabel?: string;\n submitLabel?: string;\n actions?: ReactNode;\n onAttach?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n}\n\nexport const ActivityComposer = (props: ActivityComposerProps) => {\n const {\n actor,\n value,\n defaultValue = \"\",\n placeholder = \"Leave a comment...\",\n variant = \"standalone\",\n minRows = variant === \"standalone\" ? 3 : 1,\n attachLabel = \"Attach file\",\n submitLabel = \"Submit comment\",\n actions,\n onAttach,\n onChange,\n onSubmit,\n ...rootProps\n } = props;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value ?? internalValue;\n const isInline = variant === \"inline\";\n const canSubmit = currentValue.trim().length > 0;\n\n const handleChange = (nextValue: string) => {\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n\n onSubmit?.(currentValue.trim());\n\n if (value === undefined) {\n setInternalValue(\"\");\n }\n };\n\n return (\n <chakra.form\n width=\"full\"\n background=\"bg\"\n borderWidth={isInline ? \"0\" : \"1px\"}\n borderColor=\"border\"\n borderRadius={isInline ? \"0\" : \"sm\"}\n transition=\"border-color 0.12s ease\"\n _hover={isInline ? undefined : { borderColor: \"border\" }}\n _focusWithin={isInline ? undefined : { borderColor: \"border.accent\" }}\n onSubmit={handleSubmit}\n {...rootProps}\n >\n <HStack alignItems=\"flex-start\" gap=\"xs\" padding={isInline ? \"sm\" : \"md\"}>\n {actor ? <ActivityAvatar actor={actor} /> : null}\n <Box flex=\"1\" minW=\"0\">\n <Textarea\n value={currentValue}\n rows={minRows}\n resize=\"none\"\n border=\"0\"\n padding=\"0\"\n minH={isInline ? \"1.5rem\" : \"4rem\"}\n background=\"transparent\"\n color=\"fg\"\n textStyle=\"label/S/regular\"\n placeholder={placeholder}\n _placeholder={{ color: \"fg.subtle\" }}\n onChange={(event) => handleChange(event.currentTarget.value)}\n />\n <HStack gap=\"2xs\" marginTop={isInline ? \"0\" : \"sm\"}>\n {actions}\n <Spacer />\n <Tooltip content={attachLabel}>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={attachLabel} type=\"button\" onClick={onAttach}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={submitLabel}>\n <IconButton size=\"2xs\" variant=\"subtle\" aria-label={submitLabel} type=\"submit\" disabled={!canSubmit}>\n <Icon as={ArrowUp} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </HStack>\n </Box>\n </HStack>\n </chakra.form>\n );\n};\n","import type { TimelineItemProps } from \"@chakra-ui/react\";\nimport { Box, Text, Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityEventProps extends Omit<TimelineItemProps, \"title\"> {\n actor?: ActivityActor;\n icon?: ReactNode;\n iconColor?: string;\n iconBackground?: string;\n timestamp?: ReactNode;\n children: ReactNode;\n}\n\nconst EventSeparator = () => <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />;\n\nexport const ActivityEvent = (props: ActivityEventProps) => {\n const { actor, icon, iconColor = \"fg\", iconBackground = \"transparent\", timestamp, children, ...rootProps } = props;\n\n return (\n <Timeline.Item gap=\"xs\" minH=\"24px\" paddingX=\"md\" {...rootProps}>\n <Timeline.Connector>\n <Timeline.Separator borderColor=\"border\" />\n <Timeline.Indicator outline=\"none\" border=\"none\" background=\"bg\">\n <ActivityAvatar actor={actor} icon={icon} color={iconColor} background={iconBackground} />\n </Timeline.Indicator>\n </Timeline.Connector>\n <Timeline.Content gap=\"0\" paddingBottom=\"xs\" minW=\"0\">\n <Timeline.Title\n marginTop=\"0\"\n gap=\"xs\"\n minW=\"0\"\n fontWeight=\"normal\"\n textStyle=\"label/S/regular\"\n color=\"fg.muted\"\n >\n {actor ? (\n <Text as=\"span\" color=\"fg\" fontWeight=\"500\" flexShrink={0}>\n {actor.name}\n </Text>\n ) : null}\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" gap=\"2xs\" minW=\"0\" flexWrap=\"wrap\">\n {children}\n </Box>\n {timestamp ? (\n <>\n <EventSeparator />\n <Text as=\"span\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n </Timeline.Title>\n </Timeline.Content>\n </Timeline.Item>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityRootProps extends StackProps {\n children: ReactNode;\n}\n\nexport interface ActivityHeaderProps extends Omit<StackProps, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityFeedProps extends StackProps {\n children: ReactNode;\n}\n\nexport const ActivityRoot = (props: ActivityRootProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack width=\"full\" gap=\"md\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n\nexport const ActivityHeader = (props: ActivityHeaderProps) => {\n const { title = \"Activity\", actions, ...rootProps } = props;\n\n return (\n <HStack alignItems=\"center\" justifyContent=\"space-between\" gap=\"md\" {...rootProps}>\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {title}\n </Text>\n {actions ? <HStack gap=\"xs\">{actions}</HStack> : null}\n </HStack>\n );\n};\n\nexport const ActivityFeed = (props: ActivityFeedProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack gap=\"md\" width=\"full\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n","import type { TimelineRootProps } from \"@chakra-ui/react\";\nimport { Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityTimelineProps extends TimelineRootProps {\n children: ReactNode;\n}\n\nexport const ActivityTimeline = (props: ActivityTimelineProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Timeline.Root size=\"sm\" variant=\"plain\" width=\"full\" css={{ \"--timeline-indicator-size\": \"18px\" }} {...rootProps}>\n {children}\n </Timeline.Root>\n );\n};\n","import { ActivityAvatar } from \"./activity-avatar\";\nimport { ActivityComment, ActivityReply } from \"./activity-comment\";\nimport { ActivityComposer } from \"./activity-composer\";\nimport { ActivityEvent } from \"./activity-event\";\nimport { ActivityFeed, ActivityHeader, ActivityRoot } from \"./activity-root\";\nimport { ActivityTimeline } from \"./activity-timeline\";\n\nexport type { ActivityActor } from \"./activity.types\";\nexport type { ActivityAvatarProps } from \"./activity-avatar\";\nexport type { ActivityCommentProps, ActivityReplyProps } from \"./activity-comment\";\nexport type { ActivityComposerProps } from \"./activity-composer\";\nexport type { ActivityEventProps } from \"./activity-event\";\nexport type { ActivityFeedProps, ActivityHeaderProps, ActivityRootProps } from \"./activity-root\";\nexport type { ActivityTimelineProps } from \"./activity-timeline\";\n\nexport {\n ActivityAvatar,\n ActivityComment,\n ActivityComposer,\n ActivityEvent,\n ActivityFeed,\n ActivityHeader,\n ActivityReply,\n ActivityRoot,\n ActivityTimeline,\n};\n\nexport const Activity = {\n Root: ActivityRoot,\n Header: ActivityHeader,\n Feed: ActivityFeed,\n Timeline: ActivityTimeline,\n Event: ActivityEvent,\n Comment: ActivityComment,\n Reply: ActivityReply,\n Composer: ActivityComposer,\n Avatar: ActivityAvatar,\n};\n","import type { ReactNode } from \"react\";\n\nexport const DEFAULT_PALETTE_ASSET_LIMIT = 48;\n\nexport interface PaletteSearchEntry {\n id: string;\n mode?: string;\n label: ReactNode;\n searchText?: string;\n secondaryLabel?: ReactNode;\n assetType?: string;\n}\n\nexport interface PaletteMode {\n id: string;\n inputPrefix?: string;\n}\n\nexport interface FilterPaletteEntriesOptions {\n query: string;\n mode?: string;\n getEffectiveQuery?: (query: string) => string;\n defaultAssetLimit?: number;\n}\n\nconst getSearchableText = (entry: PaletteSearchEntry) => {\n const label = typeof entry.label === \"string\" ? entry.label : \"\";\n const secondaryLabel = typeof entry.secondaryLabel === \"string\" ? entry.secondaryLabel : \"\";\n\n return `${label} ${entry.searchText ?? \"\"} ${secondaryLabel}`;\n};\n\nconst hasInputPrefix = (query: string, inputPrefix: string) => query.trimStart().startsWith(inputPrefix);\n\nexport const resolvePaletteMode = (query: string, modes: readonly PaletteMode[] = [], fallbackMode?: string) => {\n const prefixedMode = modes.find((mode) => mode.inputPrefix && hasInputPrefix(query, mode.inputPrefix));\n\n return prefixedMode?.id ?? fallbackMode ?? modes.find((mode) => !mode.inputPrefix)?.id ?? modes[0]?.id;\n};\n\nexport const getPaletteEffectiveQuery = (query: string, modes: readonly PaletteMode[] = [], modeId?: string) => {\n const mode = modes.find(\n (candidate) => candidate.id === modeId && candidate.inputPrefix && hasInputPrefix(query, candidate.inputPrefix),\n );\n\n if (!mode?.inputPrefix) return query.trim();\n\n return query.trimStart().slice(mode.inputPrefix.length).trim();\n};\n\nconst limitDefaultAssetEntries = <T extends PaletteSearchEntry>(entries: T[], limit: number) => {\n const counts: Record<string, number> = {};\n\n return entries.filter((entry) => {\n const assetType = entry.assetType;\n if (!assetType) return true;\n\n const count = counts[assetType] ?? 0;\n if (count >= limit) return false;\n\n counts[assetType] = count + 1;\n return true;\n });\n};\n\nexport const filterPaletteEntries = <T extends PaletteSearchEntry>(\n entries: T[],\n options: FilterPaletteEntriesOptions,\n) => {\n const effectiveQuery = (options.getEffectiveQuery?.(options.query) ?? options.query.trim()).toLowerCase();\n\n const filteredEntries = entries.filter((entry) => {\n if (options.mode && entry.mode !== options.mode) return false;\n if (!effectiveQuery) return true;\n\n return getSearchableText(entry).toLowerCase().includes(effectiveQuery);\n });\n\n if (effectiveQuery || options.defaultAssetLimit === undefined) {\n return filteredEntries;\n }\n\n return limitDefaultAssetEntries(filteredEntries, options.defaultAssetLimit);\n};\n","import { Box, HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { Check } from \"lucide-react\";\nimport { type RefObject, useEffect } from \"react\";\nimport type { PaletteEntry } from \"@/components/command-palette/palette\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport type { ListRowItem } from \"@/components/list-row/list-row.types\";\n\ntype PaletteRow<T extends PaletteEntry> =\n | { type: \"group\"; id: string; label: string }\n | { type: \"entry\"; id: string; entry: T; entryIndex: number };\n\nconst GROUP_ROW_HEIGHT = 24;\nconst ENTRY_ROW_HEIGHT = 40;\nconst INITIAL_VIEWPORT_HEIGHT = 384;\n\nconst buildEntryItem = (entry: PaletteEntry): ListRowItem => ({\n id: entry.id,\n label: entry.label,\n description: entry.description ?? entry.secondaryLabel,\n icon: entry.icon,\n endContent:\n entry.endContent ??\n (entry.shortcut || entry.isSelected ? (\n <HStack gap=\"2\">\n {entry.shortcut}\n {entry.isSelected ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n ) : undefined),\n onActivate: entry.onActivate,\n});\n\nconst buildRows = <T extends PaletteEntry>(entries: T[]) => {\n const rows: PaletteRow<T>[] = [];\n\n entries.forEach((entry, index) => {\n const previousEntry = entries[index - 1];\n if (entry.group && entry.group !== previousEntry?.group) {\n rows.push({ type: \"group\", id: `group:${entry.group}:${entry.id}`, label: entry.group });\n }\n\n rows.push({ type: \"entry\", id: entry.id, entry, entryIndex: index });\n });\n\n return rows;\n};\n\nconst getActiveRowIndex = <T extends PaletteEntry>(rows: PaletteRow<T>[], activeIndex: number) =>\n rows.findIndex((row) => row.type === \"entry\" && row.entryIndex === activeIndex);\n\ninterface PaletteListProps<T extends PaletteEntry> {\n entries: T[];\n activeIndex: number;\n emptyLabel: string;\n onHover: (index: number) => void;\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const PaletteList = <T extends PaletteEntry>(props: PaletteListProps<T>) => {\n const { entries, activeIndex, emptyLabel, onHover, scrollRef } = props;\n const rows = buildRows(entries);\n const activeRowIndex = getActiveRowIndex(rows, activeIndex);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => (rows[index]?.type === \"group\" ? GROUP_ROW_HEIGHT : ENTRY_ROW_HEIGHT),\n getItemKey: (index) => rows[index]?.id ?? index,\n initialRect: { width: 0, height: INITIAL_VIEWPORT_HEIGHT },\n overscan: 6,\n });\n\n useEffect(() => {\n if (activeRowIndex < 0) return;\n\n virtualizer.scrollToIndex(activeRowIndex, { align: \"auto\", behavior: \"auto\" });\n }, [activeRowIndex, virtualizer]);\n\n if (entries.length === 0) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Box role=\"listbox\" position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualRow.start }}\n >\n {row.type === \"group\" ? (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\" pb=\"2xs\">\n {row.label}\n </Text>\n ) : (\n <ListRow\n variant=\"full-width\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n tabIndex={-1}\n onPointerMove={() => onHover(row.entryIndex)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { Box, CloseButton, Dialog, Input, InputGroup } from \"@chakra-ui/react\";\nimport type { KeyboardEventHandler, ReactNode, Ref } from \"react\";\nimport { ScrollArea, type ScrollAreaProps } from \"@/components/primitives/scroll-area\";\n\nexport interface SearchModalContentProps {\n children: ReactNode;\n searchValue: string;\n searchPlaceholder: string;\n searchAriaLabel?: string;\n searchIcon?: ReactNode;\n searchInputRef?: Ref<HTMLInputElement>;\n searchAutoFocus?: boolean;\n showCloseButton?: boolean;\n closeButtonLabel?: string;\n bodyBefore?: ReactNode;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n scrollAreaProps?: Omit<ScrollAreaProps, \"children\">;\n onSearchChange: (value: string) => void;\n onSearchKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n}\n\nconst hasContent = (value: ReactNode) => value !== undefined && value !== null;\n\nconst footerJustifyContent = (hasFooterStart: boolean, hasFooterEnd: boolean) => {\n if (hasFooterStart && hasFooterEnd) return \"space-between\";\n if (hasFooterEnd) return \"flex-end\";\n return \"flex-start\";\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 SearchModalContent = (props: SearchModalContentProps) => {\n const {\n children,\n searchValue,\n searchPlaceholder,\n searchAriaLabel = searchPlaceholder,\n searchIcon,\n searchInputRef,\n searchAutoFocus,\n showCloseButton = false,\n closeButtonLabel = \"Close\",\n bodyBefore,\n footerStart,\n footerEnd,\n scrollAreaProps,\n onSearchChange,\n onSearchKeyDown,\n } = props;\n const hasFooterStart = hasContent(footerStart);\n const hasFooterEnd = hasContent(footerEnd);\n const { maxH = \"24rem\", showHorizontalScrollbar = false, ...restScrollAreaProps } = scrollAreaProps ?? {};\n\n return (\n <>\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.subtle\">\n <InputGroup startElement={searchIcon} width=\"full\">\n <Input\n ref={searchInputRef}\n value={searchValue}\n placeholder={searchPlaceholder}\n aria-label={searchAriaLabel}\n autoComplete=\"off\"\n autoFocus={searchAutoFocus}\n mx=\"xs\"\n h=\"3rem\"\n {...searchInputChromeProps}\n onChange={(event) => onSearchChange(event.target.value)}\n onKeyDown={onSearchKeyDown}\n />\n </InputGroup>\n {showCloseButton ? (\n <Dialog.CloseTrigger asChild>\n <CloseButton aria-label={closeButtonLabel} size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n {bodyBefore}\n <ScrollArea maxH={maxH} showHorizontalScrollbar={showHorizontalScrollbar} {...restScrollAreaProps}>\n {children}\n </ScrollArea>\n </Dialog.Body>\n {hasFooterStart || hasFooterEnd ? (\n <Dialog.Footer\n justifyContent={footerJustifyContent(hasFooterStart, hasFooterEnd)}\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.subtle\"\n >\n {hasFooterStart ? <Box minW=\"0\">{footerStart}</Box> : null}\n {hasFooterEnd ? <Box flexShrink={0}>{footerEnd}</Box> : null}\n </Dialog.Footer>\n ) : null}\n </>\n );\n};\n","import { Dialog } from \"@chakra-ui/react\";\nimport type { KeyboardEvent, ReactNode, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n DEFAULT_PALETTE_ASSET_LIMIT,\n type FilterPaletteEntriesOptions,\n filterPaletteEntries,\n getPaletteEffectiveQuery,\n type PaletteMode,\n type PaletteSearchEntry,\n resolvePaletteMode,\n} from \"@/components/command-palette/palette-filter\";\nimport { PaletteList } from \"@/components/command-palette/palette-list\";\nimport { SearchModalContent } from \"@/components/overlays/search-modal-content\";\n\nexport type { FilterPaletteEntriesOptions, PaletteMode, PaletteSearchEntry };\nexport { DEFAULT_PALETTE_ASSET_LIMIT, filterPaletteEntries };\n\nexport interface PaletteEntry extends PaletteSearchEntry {\n description?: ReactNode;\n icon?: ReactNode;\n shortcut?: ReactNode;\n endContent?: ReactNode;\n group?: string;\n isSelected?: boolean;\n onActivate: () => void;\n}\n\nexport interface PaletteState<T extends PaletteEntry> {\n query: string;\n mode?: string;\n activeIndex: number;\n entries: T[];\n}\n\nexport interface PaletteEscapeContext<T extends PaletteEntry> extends PaletteState<T> {\n activeEntry: T | null;\n entryCount: number;\n setQuery: (query: string) => void;\n setActiveIndex: (index: SetStateAction<number>) => void;\n runActiveEntry: () => void;\n closePalette: () => void;\n}\n\nexport type PaletteStateValue<T extends PaletteEntry, TValue> = TValue | ((state: PaletteState<T>) => TValue);\n\nexport interface PaletteProps<T extends PaletteEntry = PaletteEntry> {\n open: boolean;\n entries: T[];\n initialQuery?: string;\n initialActiveIndex?: number;\n mode?: string;\n modes?: PaletteMode[];\n resetKey?: string;\n inputIcon?: PaletteStateValue<T, ReactNode>;\n placeholder?: PaletteStateValue<T, string>;\n emptyLabel?: string;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n filterEntries?: (entries: T[], query: string, mode?: string) => T[];\n onActiveEntryChange?: (entry: T | null, index: number) => void;\n onQueryChange?: (query: string) => void;\n onClose: () => void;\n onEscape?: (ctx: PaletteEscapeContext<T>) => boolean | undefined;\n}\n\nconst resolveStateValue = <T extends PaletteEntry, TValue>(\n value: PaletteStateValue<T, TValue> | undefined,\n state: PaletteState<T>,\n fallback: TValue,\n) => {\n if (typeof value === \"function\") {\n return (value as (state: PaletteState<T>) => TValue)(state);\n }\n\n return value ?? fallback;\n};\n\nexport const Palette = <T extends PaletteEntry>(props: PaletteProps<T>) => {\n const {\n open,\n entries,\n initialQuery = \"\",\n initialActiveIndex = 0,\n mode,\n modes,\n resetKey = \"default\",\n inputIcon,\n placeholder,\n emptyLabel = \"No results.\",\n footerStart,\n footerEnd,\n filterEntries,\n onActiveEntryChange,\n onQueryChange,\n onClose,\n onEscape,\n } = props;\n const [query, setQueryState] = useState(initialQuery);\n const [activeIndex, setActiveIndex] = useState(initialActiveIndex);\n const inputRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef({ open: false, resetKey });\n const activeMode = mode ?? resolvePaletteMode(query, modes);\n const filteredEntries = filterEntries\n ? filterEntries(entries, query, activeMode)\n : filterPaletteEntries(entries, {\n query,\n mode: activeMode,\n getEffectiveQuery: (value) => getPaletteEffectiveQuery(value, modes, activeMode),\n });\n const activeEntry = filteredEntries[activeIndex] ?? null;\n const state: PaletteState<T> = { query, mode: activeMode, activeIndex, entries: filteredEntries };\n const resolvedInputIcon = resolveStateValue(inputIcon, state, null);\n const resolvedPlaceholder = resolveStateValue(placeholder, state, \"Search\");\n\n const setQuery = (nextQuery: string) => {\n setQueryState(nextQuery);\n onQueryChange?.(nextQuery);\n };\n\n const runActiveEntry = () => {\n activeEntry?.onActivate();\n };\n\n const closePalette = () => {\n onClose();\n };\n\n useEffect(() => {\n const previousSetup = setupRef.current;\n setupRef.current = { open, resetKey };\n if (!open) return;\n\n const shouldInitialize = !previousSetup.open || previousSetup.resetKey !== resetKey;\n if (!shouldInitialize) return;\n\n setQueryState(initialQuery);\n setActiveIndex(initialActiveIndex);\n\n const timeout = setTimeout(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n return () => clearTimeout(timeout);\n }, [initialActiveIndex, initialQuery, open, resetKey]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(filteredEntries.length - 1, 0)));\n }, [filteredEntries.length]);\n\n useEffect(() => {\n onActiveEntryChange?.(activeEntry, activeIndex);\n }, [activeEntry, activeIndex, onActiveEntryChange]);\n\n const handleEscape = () => {\n const handled = onEscape?.({\n ...state,\n activeEntry,\n entryCount: filteredEntries.length,\n setQuery,\n setActiveIndex,\n runActiveEntry,\n closePalette,\n });\n if (handled) return;\n\n if (query.length > 0) {\n setQuery(\"\");\n setActiveIndex(0);\n return;\n }\n\n closePalette();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(filteredEntries.length - 1, 0)));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n runActiveEntry();\n return;\n }\n\n if (event.key !== \"Escape\") return;\n\n event.preventDefault();\n event.stopPropagation();\n handleEscape();\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => !details.open && closePalette()}>\n <Dialog.Backdrop />\n <Dialog.Positioner alignItems=\"center\" justifyContent=\"center\" p=\"md\">\n <Dialog.Content maxW=\"44rem\" w=\"full\" p=\"0\" overflow=\"hidden\" borderWidth=\"1px\" borderColor=\"border.subtle\">\n <SearchModalContent\n searchValue={query}\n searchPlaceholder={resolvedPlaceholder}\n searchIcon={resolvedInputIcon}\n searchInputRef={inputRef}\n showCloseButton\n footerStart={footerStart}\n footerEnd={footerEnd}\n scrollAreaProps={{\n maxH: \"24rem\",\n showHorizontalScrollbar: false,\n viewportRef: scrollRef,\n viewportProps: { style: { overflowAnchor: \"none\" } },\n }}\n onSearchChange={(nextQuery) => {\n setQuery(nextQuery);\n setActiveIndex(0);\n }}\n onSearchKeyDown={handleKeyDown}\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </SearchModalContent>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Kbd } from \"@chakra-ui/react\";\nimport { ArrowLeft, ArrowRight, Command, type LucideIcon, Option } from \"lucide-react\";\nimport { Fragment } from \"react\";\n\nexport type PaletteShortcutBinding = string | string[];\ntype ShortcutPlatform = \"linux\" | \"mac\" | \"win\";\n\ninterface ShortcutDisplayPart {\n label: string;\n Icon?: LucideIcon;\n}\n\nconst nonMacModifierLabels: Record<string, ShortcutDisplayPart> = {\n alt: { label: \"Alt\" },\n control: { label: \"Ctrl\" },\n ctrl: { label: \"Ctrl\" },\n mod: { label: \"Ctrl\" },\n shift: { label: \"Shift\" },\n};\n\nconst macModifierLabels: Record<string, ShortcutDisplayPart> = {\n alt: { label: \"Option\", Icon: Option },\n cmd: { label: \"Command\", Icon: Command },\n command: { label: \"Command\", Icon: Command },\n meta: { label: \"Command\", Icon: Command },\n mod: { label: \"Command\", Icon: Command },\n option: { label: \"Option\", Icon: Option },\n shift: { label: \"Shift\" },\n};\n\nconst keyLabels: Record<string, ShortcutDisplayPart> = {\n arrowleft: { label: \"Arrow Left\", Icon: ArrowLeft },\n arrowright: { label: \"Arrow Right\", Icon: ArrowRight },\n};\n\nconst getShortcutPlatform = (): ShortcutPlatform => {\n if (typeof navigator === \"undefined\") return \"linux\";\n\n const platform = navigator.platform?.toLowerCase() ?? \"\";\n if (platform.includes(\"mac\")) return \"mac\";\n if (platform.includes(\"win\")) return \"win\";\n return \"linux\";\n};\n\nexport const resolveShortcutDisplayPart = (label: string, platform = getShortcutPlatform()): ShortcutDisplayPart => {\n const normalized = label.toLowerCase();\n const modifierLabels = platform === \"mac\" ? macModifierLabels : nonMacModifierLabels;\n return keyLabels[normalized] ?? modifierLabels[normalized] ?? { label };\n};\n\nconst splitShortcutStep = (step: string) => {\n return step\n .split(\"+\")\n .map((part) => part.trim())\n .filter(Boolean);\n};\n\nconst getShortcutDisplayParts = (binding: PaletteShortcutBinding) => {\n const steps = Array.isArray(binding) ? binding.map(splitShortcutStep) : [splitShortcutStep(binding)];\n\n return steps.map((step) => step.map((label) => resolveShortcutDisplayPart(label)));\n};\n\nexport const PaletteShortcut = (props: { binding: PaletteShortcutBinding }) => {\n const { binding } = props;\n const steps = getShortcutDisplayParts(binding);\n\n return (\n <>\n {steps.map((step, stepIndex) => (\n <Fragment key={`${step.map((part) => part.label).join(\"+\")}-${stepIndex}`}>\n {step.map((part, partIndex) => (\n <Fragment key={`${part.label}-${partIndex}`}>\n <Kbd\n fontSize=\"xs\"\n borderRadius=\"0\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n aria-label={part.label}\n >\n {part.Icon ? <part.Icon size={12} aria-hidden=\"true\" /> : part.label}\n </Kbd>\n {partIndex < step.length - 1 ? \" \" : null}\n </Fragment>\n ))}\n {stepIndex < steps.length - 1 ? \" then \" : null}\n </Fragment>\n ))}\n </>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\n\ninterface HorizontalMenuStackProps extends StackProps {\n children?: StackProps[\"children\"];\n}\n\nexport function HorizontalMenuStack(props: HorizontalMenuStackProps) {\n const { children, h = \"41px\", px = \"xs\", py = \"xs\", borderBottomWidth = \"1px\", ...rest } = props;\n\n return (\n <HStack\n {...rest}\n h={h}\n justify=\"space-between\"\n align=\"center\"\n borderBottomWidth={borderBottomWidth}\n borderColor={\"border.subtle\"}\n px={px}\n py={py}\n >\n {children}\n </HStack>\n );\n}\n","import { Box, Collapsible, Flex, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ItemSectionProps {\n children: ReactNode;\n title?: string;\n defaultOpen?: boolean;\n action?: ReactNode;\n}\n\n/**\n * A collapsible section wrapper with a title trigger and optional action.\n */\nexport const ItemSection = (props: ItemSectionProps) => {\n const { children, title, defaultOpen = true, action } = props;\n\n return (\n <Collapsible.Root defaultOpen={defaultOpen} width=\"full\">\n <Flex>\n <Collapsible.Trigger\n _hover={{\n background: \"bg.hover\",\n }}\n padding=\"sm\"\n height=\"2rem\"\n display=\"flex\"\n width=\"full\"\n gap=\"2\"\n alignItems=\"center\"\n cursor=\"pointer\"\n justifyContent=\"space-between\"\n >\n {title && (\n <Text fontWeight=\"600\" textStyle=\"label/S/medium\">\n {title}\n </Text>\n )}\n <Collapsible.Indicator transition=\"transform 0.2s\" _open={{ transform: \"rotate(90deg)\" }}>\n <ChevronRight size={16} />\n </Collapsible.Indicator>\n </Collapsible.Trigger>\n {action && (\n <Box marginLeft=\"auto\" onClick={(e) => e.stopPropagation()}>\n {action}\n </Box>\n )}\n </Flex>\n <Collapsible.Content>{children}</Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","export const PANEL_HEADER_HEIGHT = \"2.5rem\";\nexport const PANEL_HEADER_CONTROL_SIZE = \"2xs\" as const;\nexport const PANEL_HEADER_TAB_SIZE = \"sm\" as const;\n","import { Badge, Box, Button, HStack, Icon, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport { Bell, Search, X } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport { SearchModalContent } from \"@/components/overlays/search-modal-content\";\nimport { AlertMessage } from \"@/components/primitives/alert\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowAction } from \"../list-row/list-row.types\";\nimport type {\n NotificationCenterAction,\n NotificationCenterItem,\n NotificationCenterProps,\n} from \"./notification-center.types\";\n\nconst priorityColorPalette = (priority: NotificationCenterItem[\"priority\"]) => {\n if (priority === \"urgent\") return \"red\";\n if (priority === \"high\") return \"orange\";\n if (priority === \"low\") return \"gray\";\n return \"blue\";\n};\n\nconst shouldShowPriorityBadge = (priority: NotificationCenterItem[\"priority\"]) => priority !== \"normal\";\n\nconst itemSearchText = (item: NotificationCenterItem) =>\n [\n item.title,\n item.body,\n item.kind,\n item.priority,\n item.status,\n item.sourceLabel,\n item.targetLabel,\n item.searchText,\n ...(item.actions ?? []).map((action) => action.label),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\nconst filterItems = (items: NotificationCenterItem[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n if (!normalizedQuery) return items;\n return items.filter((item) => itemSearchText(item).includes(normalizedQuery));\n};\n\nconst groupItems = (items: NotificationCenterItem[]) => {\n const needsInput = items.filter((item) => item.kind === \"blocked\");\n const urgent = items.filter(\n (item) => item.kind !== \"blocked\" && (item.priority === \"urgent\" || item.priority === \"high\"),\n );\n const normal = items.filter(\n (item) => item.kind !== \"blocked\" && (item.priority === \"normal\" || item.priority === \"low\"),\n );\n return [\n { id: \"needs-input\", label: \"Needs input\", items: needsInput },\n { id: \"attention\", label: \"Needs attention\", items: urgent },\n { id: \"other\", label: \"Other\", items: normal },\n ].filter((group) => group.items.length > 0);\n};\n\nconst orderItemsForDisplay = (items: NotificationCenterItem[]) => groupItems(items).flatMap((group) => group.items);\n\nconst metadataDescription = (item: NotificationCenterItem) => {\n const parts = [item.body, item.targetLabel, item.sourceLabel, item.timeLabel].filter(Boolean);\n return parts.join(\" · \");\n};\n\nconst getActionButtons = (item: NotificationCenterItem, props: Pick<NotificationCenterProps, \"onDismiss\">) => {\n const actions: ListRowAction[] = [];\n\n if (props.onDismiss) {\n actions.push({\n id: \"dismiss\",\n label: \"Dismiss\",\n icon: <X size={14} />,\n tooltip: \"Dismiss\",\n onAction: () => props.onDismiss?.(item),\n });\n }\n\n return actions;\n};\n\nconst NotificationEndContent = (props: {\n actions: NotificationCenterAction[];\n item: NotificationCenterItem;\n onRunAction?: NotificationCenterProps[\"onRunAction\"];\n}) => {\n const { actions, item, onRunAction } = props;\n return (\n <HStack gap=\"2\" minW=\"0\" flexWrap=\"wrap\" justify=\"flex-end\">\n {shouldShowPriorityBadge(item.priority) ? (\n <Badge size=\"sm\" colorPalette={priorityColorPalette(item.priority)} textTransform=\"capitalize\" flexShrink={0}>\n {item.priority}\n </Badge>\n ) : null}\n {item.status === \"open\" ? (\n <Badge size=\"sm\" colorPalette=\"blue\" variant=\"solid\" flexShrink={0}>\n New\n </Badge>\n ) : null}\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"2xs\"\n variant=\"outline\"\n colorPalette={action.destructive ? \"red\" : \"gray\"}\n maxW=\"9rem\"\n onClick={(event) => {\n event.stopPropagation();\n onRunAction?.(item, action);\n }}\n >\n <Text truncate>{action.label}</Text>\n </Button>\n ))}\n </HStack>\n );\n};\n\nconst NotificationRows = (\n props: {\n activeIndex: number;\n items: NotificationCenterItem[];\n onActiveIndexChange: (index: number) => void;\n } & Pick<NotificationCenterProps, \"onActivateItem\" | \"onDismiss\" | \"onRunAction\">,\n) => {\n const { activeIndex, items, onActivateItem, onActiveIndexChange, onRunAction } = props;\n const groups = groupItems(items);\n let rowIndex = 0;\n\n return (\n <Stack gap=\"2xs\" py=\"xs\">\n {groups.map((group) => (\n <Stack key={group.id} gap=\"2xs\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\">\n {group.label}\n </Text>\n {group.items.map((item) => {\n const currentIndex = rowIndex;\n rowIndex += 1;\n return (\n <ListRow\n key={item.id}\n id={item.id}\n label={item.title}\n description={metadataDescription(item)}\n icon={<Icon as={Bell} boxSize=\"14px\" />}\n iconColor={`${priorityColorPalette(item.priority)}.500`}\n variant=\"compact\"\n isSelected={currentIndex === activeIndex}\n endContent={\n <NotificationEndContent item={item} actions={item.actions ?? []} onRunAction={onRunAction} />\n }\n actions={getActionButtons(item, props)}\n tabIndex={-1}\n onActivate={() => onActivateItem?.(item)}\n onPointerMove={() => onActiveIndexChange(currentIndex)}\n />\n );\n })}\n </Stack>\n ))}\n </Stack>\n );\n};\n\nconst LoadingRows = () => (\n <Stack gap=\"2\" p=\"sm\">\n {[0, 1, 2, 3].map((row) => (\n <Stack key={row} gap=\"2xs\">\n <Skeleton h=\"4\" w={row % 2 === 0 ? \"68%\" : \"52%\"} borderRadius=\"xs\" />\n <Skeleton h=\"3\" w=\"88%\" borderRadius=\"xs\" />\n </Stack>\n ))}\n </Stack>\n);\n\nexport const NotificationCenter = (props: NotificationCenterProps) => {\n const {\n autoFocus = false,\n emptyLabel = \"No notifications.\",\n error,\n footerEnd,\n footerStart,\n items,\n loading = false,\n onActivateItem,\n onEscape,\n onQueryChange,\n query,\n } = props;\n const [internalQuery, setInternalQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const activeQuery = query ?? internalQuery;\n const filteredItems = filterItems(items, activeQuery);\n const displayItems = orderItemsForDisplay(filteredItems);\n const activeItem = displayItems[activeIndex] ?? null;\n\n useEffect(() => {\n if (!autoFocus) return;\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [autoFocus]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(displayItems.length - 1, 0)));\n }, [displayItems.length]);\n\n const updateQuery = (nextQuery: string) => {\n if (query === undefined) setInternalQuery(nextQuery);\n onQueryChange?.(nextQuery);\n setActiveIndex(0);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(displayItems.length - 1, 0)));\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (activeItem) onActivateItem?.(activeItem);\n return;\n }\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n if (activeQuery.length > 0) {\n updateQuery(\"\");\n return;\n }\n onEscape?.();\n };\n\n return (\n <SearchModalContent\n searchValue={activeQuery}\n searchPlaceholder=\"Search notifications\"\n searchIcon={<Search size={14} />}\n searchInputRef={inputRef}\n searchAutoFocus={autoFocus}\n footerStart={footerStart}\n footerEnd={footerEnd}\n scrollAreaProps={{ maxH: \"24rem\", showHorizontalScrollbar: false }}\n onSearchChange={updateQuery}\n onSearchKeyDown={handleKeyDown}\n >\n {error ? (\n <Box p=\"sm\">\n <AlertMessage status=\"error\" colorPalette=\"red\" title=\"Notifications unavailable\" size=\"sm\">\n {error}\n </AlertMessage>\n </Box>\n ) : loading ? (\n <LoadingRows />\n ) : filteredItems.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n ) : (\n <NotificationRows\n {...props}\n items={filteredItems}\n activeIndex={activeIndex}\n onActiveIndexChange={setActiveIndex}\n />\n )}\n </SearchModalContent>\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface AttachedMenuProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n}\n\nexport const AttachedMenu = (props: AttachedMenuProps) => {\n const { children, ...rest } = props;\n\n return (\n <Flex as=\"aside\" direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" overflow=\"hidden\" bg=\"bg\" {...rest}>\n {children}\n </Flex>\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nconst DEFAULT_RESIZABLE_MIN_WIDTH = \"20rem\";\n\ninterface AttachedPanelProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n header?: ReactNode;\n resizable?: boolean;\n}\n\nexport const AttachedPanel = (props: AttachedPanelProps) => {\n const { children, header, width = \"28rem\", minWidth, resizable = false, ...rest } = props;\n const resolvedMinWidth = minWidth ?? (resizable ? DEFAULT_RESIZABLE_MIN_WIDTH : width);\n const resolvedWidth = resizable ? \"full\" : width;\n\n return (\n <Flex\n direction=\"column\"\n position=\"relative\"\n flexShrink={0}\n w={resolvedWidth}\n minW={resolvedMinWidth}\n h=\"100%\"\n borderLeftWidth=\"1px\"\n bg=\"bg\"\n overflow=\"hidden\"\n {...rest}\n >\n {header}\n <Flex flex=\"1\" minH={0} direction=\"column\">\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { chakra, type HTMLChakraProps, IconButton, type IconButtonProps } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\n\ntype BubbleButtonStyleProps = \"transition\" | \"_hover\" | \"_active\" | \"borderColor\" | \"borderWidth\";\n\nexport interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {\n containerProps?: HTMLChakraProps<\"div\">;\n isOpen?: boolean;\n tooltip?: ReactNode;\n}\n\nexport const BubbleButton = forwardRef<HTMLButtonElement, BubbleButtonProps>(function BubbleButton(props, ref) {\n const { children, containerProps, isOpen = false, tooltip, ...rest } = props;\n const button = (\n <IconButton\n ref={ref}\n rounded=\"full\"\n size=\"lg\"\n borderWidth=\"1px\"\n borderColor={isOpen ? \"border.accent\" : \"border\"}\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n }}\n _active={{ borderColor: \"border.accent\" }}\n {...rest}\n >\n {children}\n </IconButton>\n );\n\n return (\n <chakra.div position=\"fixed\" bottom=\"6\" right=\"6\" zIndex=\"docked\" {...containerProps}>\n {tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button}\n </chakra.div>\n );\n});\n","import { Box, chakra, Flex, HStack, type HTMLChakraProps, IconButton, Portal, Spacer } from \"@chakra-ui/react\";\nimport { Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Header } from \"@/components/layout/header\";\nimport { PANEL_HEADER_CONTROL_SIZE } from \"@/components/layout/panel-header.constants\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\n\nexport interface BubblePanelProps {\n isOpen?: boolean;\n title?: string;\n menu?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n onPopOut?: (() => void) | null;\n popOutLabel?: string;\n width?: string;\n height?: string;\n containerProps?: HTMLChakraProps<\"section\">;\n testId?: string;\n \"aria-label\"?: string;\n children?: ReactNode;\n}\n\nexport const BubblePanel = forwardRef<HTMLDivElement, BubblePanelProps>(function BubblePanel(props, ref) {\n const {\n isOpen = false,\n title,\n menu,\n onClose,\n closeLabel,\n onPopOut,\n popOutLabel,\n width = \"28rem\",\n height = \"38rem\",\n containerProps,\n testId,\n \"aria-label\": ariaLabel,\n children,\n } = props;\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <chakra.section\n ref={ref}\n role=\"dialog\"\n data-testid={testId}\n aria-label={ariaLabel ?? title}\n position=\"fixed\"\n bottom=\"3\"\n right=\"3\"\n w={width}\n maxW=\"calc(100vw - 2rem)\"\n h={height}\n maxH=\"calc(100vh - 2rem)\"\n borderRadius=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n bg=\"bg\"\n overflow=\"hidden\"\n zIndex=\"dropdown\"\n {...containerProps}\n >\n <Flex direction=\"column\" h=\"full\">\n <Header variant=\"main\" gap=\"sm\" flexShrink={0}>\n <HStack gap=\"1\" minW=\"0\">\n {menu}\n </HStack>\n <Spacer />\n <HStack gap=\"1\">\n {onPopOut ? (\n <Tooltip content={popOutLabel}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={popOutLabel}\n onClick={onPopOut}\n >\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {onClose ? (\n <Tooltip content={closeLabel}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={closeLabel}\n onClick={onClose}\n >\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </HStack>\n </Header>\n <Box flex=\"1\" minH={0} display=\"flex\" flexDirection=\"column\" gap=\"sm\">\n {children}\n </Box>\n </Flex>\n </chakra.section>\n </Portal>\n );\n});\n","import { Button, CloseButton, Dialog, Stack, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useState } from \"react\";\n\ninterface DeleteConfirmationModalProps {\n open: boolean;\n onClose: () => void;\n onDelete: () => void | Promise<void>;\n headline?: string;\n notificationText?: string;\n buttonText?: string;\n /** Extra controls rendered below the message, e.g. an opt-in checkbox. */\n children?: ReactNode;\n}\n\nexport type { DeleteConfirmationModalProps };\n\nexport const DeleteConfirmationModal = (props: DeleteConfirmationModalProps) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const { headline, buttonText, notificationText, onDelete, open, onClose, children } = props;\n\n const handleDelete = async () => {\n setIsDeleting(true);\n\n try {\n await onDelete();\n onClose();\n } catch {\n // Errors surface through parent state.\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onClose}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Text textStyle=\"heading/M\">{headline}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"3\">\n {notificationText ? <Text>{notificationText}</Text> : null}\n {children}\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"1\">\n <Button onClick={onClose}>Close</Button>\n <Button loading={isDeleting} variant=\"destructive\" onClick={handleDelete}>\n {buttonText}\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Badge, Button, Dialog, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUp, FileText, Folder, FolderOpen, Home, Search } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport interface RepoPickerDialogEntry {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface RepoPickerDialogProps {\n open: boolean;\n title?: string;\n description?: string;\n currentPath?: string;\n entries: RepoPickerDialogEntry[];\n selectedPath?: string | null;\n selectedPaths?: string[];\n isLoading?: boolean;\n error?: string;\n isSelectDisabled?: boolean;\n onClose: () => void;\n onSelect: () => void;\n onSelectHomeDirectory: () => void;\n onSelectParentDirectory: () => void;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n}\n\nexport type { RepoPickerDialogProps };\n\nconst getEntryIcon = (entry: RepoPickerDialogEntry) => {\n if (!entry.isDirectory) return FileText;\n if (entry.isGitRepo) return FolderOpen;\n return Folder;\n};\n\nconst filterEntries = (entries: RepoPickerDialogEntry[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return entries;\n }\n\n return entries.filter((entry) => `${entry.name} ${entry.path}`.toLowerCase().includes(normalizedQuery));\n};\n\ntype RepoPickerListEntryProps = {\n entry: RepoPickerDialogEntry;\n selectedPath: string | null;\n selectedPathSet: Set<string>;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n};\n\nconst RepoPickerListEntry = (props: RepoPickerListEntryProps) => {\n const { entry, selectedPath, selectedPathSet, onEntryClick } = props;\n const isAlreadySelected = entry.isGitRepo && selectedPathSet.has(entry.path);\n const isDisabled = !entry.isDirectory || isAlreadySelected;\n\n const handleClick = () => {\n if (isAlreadySelected) {\n return;\n }\n\n onEntryClick(entry);\n };\n\n return (\n <ListRow\n variant=\"compact\"\n isSelected={selectedPath === entry.path}\n id={entry.path}\n label={entry.name}\n icon={<Icon as={getEntryIcon(entry)} boxSize=\"16px\" />}\n endContent={\n entry.isGitRepo ? (\n <Badge\n textStyle=\"label/XS/medium\"\n px=\"xs\"\n py=\"2px\"\n colorPalette=\"green\"\n variant=\"subtle\"\n pointerEvents=\"none\"\n >\n Git repo\n </Badge>\n ) : undefined\n }\n disabled={isDisabled}\n onActivate={handleClick}\n />\n );\n};\n\nconst focusInlinePickerOption = (event: KeyboardEvent<HTMLDivElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]:not(:disabled)'),\n );\n\n if (options.length === 0) {\n return;\n }\n\n const currentIndex = options.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex = (() => {\n if (event.key === \"Home\") return 0;\n if (event.key === \"End\") return options.length - 1;\n if (event.key === \"ArrowUp\") return currentIndex <= 0 ? options.length - 1 : currentIndex - 1;\n return currentIndex < 0 || currentIndex === options.length - 1 ? 0 : currentIndex + 1;\n })();\n\n event.preventDefault();\n options[nextIndex]?.focus();\n};\n\nexport const RepoPickerDialog = (props: RepoPickerDialogProps) => {\n const {\n open,\n title = \"Select folder\",\n description,\n currentPath = \"\",\n entries,\n selectedPath = null,\n selectedPaths = [],\n isLoading = false,\n error = \"\",\n isSelectDisabled = false,\n onClose,\n onSelect,\n onSelectHomeDirectory,\n onSelectParentDirectory,\n onEntryClick,\n } = props;\n\n const [query, setQuery] = useState(\"\");\n const selectedPathSet = new Set(selectedPaths);\n const filteredEntries = filterEntries(entries, query);\n const searchScope = currentPath || \"Home\";\n\n useEffect(() => {\n if (!open || !searchScope) return;\n setQuery(\"\");\n }, [open, searchScope]);\n\n return (\n <Dialog.Root\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n open={open}\n onOpenChange={(details) => !details.open && onClose()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n <Stack direction=\"row\" gap=\"sm\" align=\"center\">\n <Button aria-label=\"Go to home directory\" variant=\"outline\" size=\"sm\" onClick={onSelectHomeDirectory}>\n <Home size={16} />\n </Button>\n <Button\n aria-label=\"Go to parent directory\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onSelectParentDirectory}\n disabled={!currentPath || currentPath === \"/\"}\n >\n <ChevronUp size={16} />\n </Button>\n <Text\n data-testid=\"folder-picker-path\"\n textStyle=\"paragraph/S/regular\"\n color=\"fg.muted\"\n flex=\"1\"\n lineClamp={1}\n >\n {searchScope}\n </Text>\n </Stack>\n\n <Stack gap=\"0\" borderWidth=\"1px\" borderRadius=\"md\" borderColor=\"border.subtle\" overflow=\"hidden\">\n <InputGroup\n startElement={<Search size={14} />}\n width=\"full\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <Input\n mx=\"xs\"\n value={query}\n placeholder=\"Search repositories\"\n aria-label=\"Search repositories\"\n autoComplete=\"off\"\n onChange={(event) => setQuery(event.target.value)}\n />\n </InputGroup>\n {isLoading ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Loading...\n </Text>\n ) : error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"red.500\" p=\"sm\">\n {error}\n </Text>\n ) : filteredEntries.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n No entries found.\n </Text>\n ) : (\n <ScrollArea maxHeight=\"320px\" contentProps={{ padding: \"sm\" }}>\n <Stack gap=\"xs\" role=\"listbox\" aria-label=\"Repository folders\" onKeyDown={focusInlinePickerOption}>\n {filteredEntries.map((entry) => (\n <RepoPickerListEntry\n key={entry.path}\n entry={entry}\n selectedPath={selectedPath}\n selectedPathSet={selectedPathSet}\n onEntryClick={onEntryClick}\n />\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"sm\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={onSelect} disabled={isSelectDisabled}>\n Select repository\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Breadcrumb as ChakraBreadcrumb, type SystemStyleObject } from \"@chakra-ui/react\";\nimport * as React from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\n\nexport interface BreadcrumbItem {\n title: React.ReactNode;\n url?: string;\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface BreadcrumbLinkProps {\n to: string;\n children: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {\n separator?: React.ReactNode;\n separatorGap?: SystemStyleObject[\"gap\"];\n items: BreadcrumbItem[];\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\nconst linkProps = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"2xs\",\n minW: \"0\",\n maxW: \"100%\",\n overflow: \"hidden\",\n outline: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\" },\n _focus: { outline: \"none\" },\n _focusVisible: { outline: \"none\" },\n} as const;\n\nconst staticProps = {\n ...linkProps,\n color: \"fg\",\n cursor: \"default\",\n textDecoration: \"none\",\n _hover: { textDecoration: \"none\" },\n} as const;\n\ninterface BreadcrumbItemContentProps {\n item: BreadcrumbItem;\n isCurrent: boolean;\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\ninterface BreadcrumbSeparatorProps {\n separator?: React.ReactNode;\n}\n\nconst isInteractiveItem = (item: BreadcrumbItem) => Boolean(item.url || item.onClick);\n\nconst BreadcrumbItemLink = (props: BreadcrumbItemContentProps) => {\n const { item, isCurrent, linkComponent: LinkComponent } = props;\n\n if (isCurrent && !isInteractiveItem(item)) {\n return <ChakraBreadcrumb.CurrentLink {...staticProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n }\n\n if (item.url && LinkComponent) {\n return (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.url) {\n return (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.onClick) {\n return (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n return (\n <ChakraBreadcrumb.Link as=\"span\" {...staticProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n};\n\nconst BreadcrumbItemContent = (props: BreadcrumbItemContentProps) => {\n const { item } = props;\n const content = <BreadcrumbItemLink {...props} />;\n\n if (!item.contextMenuActions?.length) return content;\n\n return (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {content}\n </ResourceContextMenu>\n );\n};\n\nconst BreadcrumbSeparator = (props: BreadcrumbSeparatorProps) => {\n const { separator } = props;\n\n if (separator === undefined) {\n return <ChakraBreadcrumb.Separator flexShrink={0} />;\n }\n\n return <ChakraBreadcrumb.Separator flexShrink={0}>{separator}</ChakraBreadcrumb.Separator>;\n};\n\nexport const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(function BreadcrumbRoot(props, ref) {\n const { separator, separatorGap, items, linkComponent: LinkComponent, ...rest } = props;\n\n return (\n <ChakraBreadcrumb.Root ref={ref} {...rest}>\n <ChakraBreadcrumb.List gap={separatorGap} flexWrap=\"nowrap\" minW=\"0\" maxW=\"100%\" overflow=\"hidden\">\n {items.map((item, index) => {\n const isCurrent = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n <ChakraBreadcrumb.Item minW=\"0\" flexShrink={isCurrent ? 1 : 0} overflow=\"hidden\">\n <BreadcrumbItemContent item={item} isCurrent={isCurrent} linkComponent={LinkComponent} />\n </ChakraBreadcrumb.Item>\n {isCurrent ? null : <BreadcrumbSeparator separator={separator} />}\n </React.Fragment>\n );\n })}\n </ChakraBreadcrumb.List>\n </ChakraBreadcrumb.Root>\n );\n});\n","import { Box, type BoxProps, Text, type TextProps } from \"@chakra-ui/react\";\n\nexport interface ContentPlaceholderProps extends BoxProps {}\n\nexport const contentPlaceholderBackgroundImage = `url(\"data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%239C92AC' fill-opacity='0.2' fillRule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E\")`;\n\nexport const ContentPlaceholder = (props: ContentPlaceholderProps) => (\n <Box\n {...props}\n css={{\n backgroundClip: \"padding-box\",\n backgroundImage: contentPlaceholderBackgroundImage,\n display: \"flex\",\n width: \"100%\",\n }}\n />\n);\n\nexport const Label = (props: TextProps) => (\n <Box p=\"2\">\n <Text color=\"fg.muted\" fontWeight=\"medium\" textStyle=\"sm\" whiteSpace=\"nowrap\" {...props} />\n </Box>\n);\n","import { AbsoluteCenter, Button, Stack, Text } from \"@chakra-ui/react\";\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nimport { AlertMessage } from \"@/components/primitives/alert\";\nimport { ContentPlaceholder } from \"@/components/primitives/content-placeholder\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n label?: string;\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error(\"Dashboard error boundary caught an error\", error, info);\n }\n\n handleReset = () => {\n this.setState({ error: null });\n this.props.onReset?.();\n };\n\n render() {\n const { children, fallback, label } = this.props;\n const { error } = this.state;\n\n if (error) {\n if (fallback) {\n return fallback;\n }\n\n return <ErrorFallback error={error} label={label} onReset={this.handleReset} />;\n }\n\n return children;\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n label?: string;\n onReset?: () => void;\n}\n\nexport const ErrorFallback = (props: ErrorFallbackProps) => {\n const { error, label, onReset } = props;\n\n return (\n <ContentPlaceholder height=\"100%\" width=\"100%\">\n <AbsoluteCenter>\n <AlertMessage\n status=\"error\"\n title={<Text textStyle=\"paragraph/M/medium\">{label ?? \"Something went wrong\"}</Text>}\n >\n <Stack gap=\"sm\">\n <Text textStyle=\"paragraph/S/regular\">\n {error.message || \"An unexpected error occurred while rendering this section.\"}\n </Text>\n {onReset ? (\n <Button size=\"sm\" variant=\"primary\" onClick={onReset}>\n Try again\n </Button>\n ) : null}\n </Stack>\n </AlertMessage>\n </AbsoluteCenter>\n </ContentPlaceholder>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\n\nexport type SimpleCardProps = BoxProps;\n\nexport const SimpleCard = (props: SimpleCardProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box borderWidth=\"1px\" borderColor=\"border.subtle\" borderRadius=\"xs\" bg=\"bg\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport type SimpleCardBodyProps = BoxProps;\n\nexport const SimpleCardBody = (props: SimpleCardBodyProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box p=\"md\" {...rest}>\n {children}\n </Box>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { SimpleCard, SimpleCardBody } from \"@/components/primitives/simple-card\";\n\nexport interface IntegrationCardProps {\n icon: ReactNode;\n name: string;\n description: string;\n id: string;\n version?: string;\n category?: string;\n active?: boolean;\n actionLabel?: string;\n}\n\nexport const IntegrationCard = (props: IntegrationCardProps) => {\n const { icon, name, description, id, version, category, active = false, actionLabel } = props;\n\n return (\n <SimpleCard>\n <SimpleCardBody>\n <HStack gap=\"4\" alignItems=\"flex-start\">\n <Icon boxSize=\"1em\" fontSize=\"2xl\" flexShrink=\"0\" color=\"fg.muted\">\n {icon}\n </Icon>\n <Box flex=\"1\" minW=\"0\">\n <Stack gap=\"1\">\n <HStack gap=\"2\" flexWrap=\"wrap\">\n <Text textStyle=\"sm\" fontWeight=\"semibold\">\n {name}\n </Text>\n <Badge size=\"sm\" variant=\"outline\">\n {id}\n </Badge>\n {version && (\n <Badge size=\"sm\" variant=\"outline\">\n v{version}\n </Badge>\n )}\n {category && (\n <Badge size=\"sm\" variant=\"outline\">\n {category}\n </Badge>\n )}\n </HStack>\n <Text color=\"fg.muted\">{description}</Text>\n </Stack>\n </Box>\n <Button\n type=\"button\"\n disabled={active}\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"gray\"\n bg=\"bg\"\n flexShrink=\"0\"\n >\n {active && (\n <Icon color=\"fg.success\">\n <Check />\n </Icon>\n )}\n {actionLabel ?? (active ? \"Active\" : \"Connect\")}\n </Button>\n </HStack>\n </SimpleCardBody>\n </SimpleCard>\n );\n};\n","import { Switch as ChakraSwitch } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SwitchProps extends ChakraSwitch.RootProps {\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n rootRef?: React.RefObject<HTMLLabelElement | null>;\n trackLabel?: { on: React.ReactNode; off: React.ReactNode };\n thumbLabel?: { on: React.ReactNode; off: React.ReactNode };\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(props, ref) {\n const { inputProps, children, rootRef, trackLabel, thumbLabel, disabled = false, ...rest } = props;\n const interactiveCursor = disabled ? \"not-allowed\" : \"pointer\";\n\n return (\n <ChakraSwitch.Root ref={rootRef} disabled={disabled} cursor={interactiveCursor} {...rest}>\n <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />\n <ChakraSwitch.Control\n bg=\"bg.muted\"\n borderWidth=\"1px\"\n borderColor=\"border\"\n borderRadius=\"md\"\n color=\"fg\"\n cursor={interactiveCursor}\n transition=\"border-color 0.2s ease-in-out\"\n boxShadow=\"none\"\n _hover={{ borderColor: \"border.accent-light\" }}\n _active={{ borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\n _checked={{\n bg: \"bg.button.primary.default\",\n borderColor: \"bg.button.primary.default\",\n color: \"fg.button.primary.default\",\n _hover: { borderColor: \"bg.button.primary.default\" },\n _active: { borderColor: \"bg.button.primary.default\" },\n }}\n >\n <ChakraSwitch.Thumb bg=\"bg\" borderColor=\"border\" borderRadius=\"full\">\n {thumbLabel && (\n <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>{thumbLabel?.on}</ChakraSwitch.ThumbIndicator>\n )}\n </ChakraSwitch.Thumb>\n {trackLabel && <ChakraSwitch.Indicator fallback={trackLabel.off}>{trackLabel.on}</ChakraSwitch.Indicator>}\n </ChakraSwitch.Control>\n {children != null && <ChakraSwitch.Label cursor={interactiveCursor}>{children}</ChakraSwitch.Label>}\n </ChakraSwitch.Root>\n );\n});\n","import { Toaster as ChakraToaster, createToaster, Portal, Spinner, Stack, Toast } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport const toaster: ReturnType<typeof createToaster> = createToaster({\n placement: \"top\",\n pauseOnPageIdle: true,\n duration: 10000,\n});\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }} alignItems=\"start\" borderRadius=\"xs\" gap=\"xs\" px=\"sm\" py=\"xs\" minH=\"auto\">\n {toast.type === \"loading\" ? <Spinner size=\"sm\" color=\"blue.solid\" /> : <Toast.Indicator />}\n <Stack gap=\"0\" flex=\"1\" minWidth=\"0\" maxWidth=\"100%\">\n {toast.title && <Toast.Title textStyle=\"label/S/medium\">{toast.title}</Toast.Title>}\n {toast.description && (\n <ScrollArea maxHeight=\"12rem\" contentProps={{ paddingEnd: \"1\" }}>\n <Toast.Description textStyle=\"paragraph/S/regular\" whiteSpace=\"pre-wrap\" wordBreak=\"break-word\">\n {toast.description}\n </Toast.Description>\n </ScrollArea>\n )}\n </Stack>\n {toast.action && <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>}\n <Toast.CloseTrigger />\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n );\n};\n","import { Stack, type StackProps } from \"@chakra-ui/react\";\n\ninterface ParamEditorControlListProps extends StackProps {}\n\n// A vertical stack of control items with consistent authoring density. Use it to\n// compose control layouts outside a full <ParamEditor> section.\nexport const ParamEditorControlList = (props: ParamEditorControlListProps) => {\n const { children, ...rest } = props;\n\n return (\n <Stack gap=\"sm\" minW=\"0\" {...rest}>\n {children}\n </Stack>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface SidenavSnapshot {\n open: boolean;\n expandedSections: string[];\n expandedNodes: string[];\n width: number | null;\n}\n\ninterface SidenavState extends SidenavSnapshot {\n openSidenav: () => void;\n closeSidenav: () => void;\n toggleSidenav: () => void;\n toggleSection: (sectionId: string) => void;\n toggleNode: (nodeId: string) => void;\n setSectionExpanded: (sectionId: string, expanded: boolean) => void;\n setNodeExpanded: (nodeId: string, expanded: boolean) => void;\n setWidth: (width: number) => void;\n reset: () => void;\n}\n\ninterface CreateSidenavStoreOptions {\n storageKey: string;\n initialState?: Partial<SidenavSnapshot>;\n}\n\nconst DEFAULT_SNAPSHOT = {\n open: true,\n expandedSections: [],\n expandedNodes: [],\n width: null,\n} satisfies SidenavSnapshot;\n\nconst SIDENAV_STORE_NAMESPACE = \"pstdio/ui/sidenav\";\n\nconst toStorageName = (storageKey: string) => `${SIDENAV_STORE_NAMESPACE}/${storageKey}`;\n\nconst toggleId = (values: string[], id: string) =>\n values.includes(id) ? values.filter((value) => value !== id) : [...values, id];\n\nconst setExpanded = (values: string[], id: string, expanded: boolean) => {\n if (expanded) {\n return values.includes(id) ? values : [...values, id];\n }\n\n return values.filter((value) => value !== id);\n};\n\nconst getPersistedSnapshot = (state: SidenavState) => ({\n open: state.open,\n expandedSections: state.expandedSections,\n expandedNodes: state.expandedNodes,\n width: state.width,\n});\n\nexport const createSidenavStore = (options: CreateSidenavStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = { ...DEFAULT_SNAPSHOT, ...initialState };\n\n return createStore<SidenavState>()(\n persist(\n (set) => ({\n ...snapshot,\n openSidenav: () => set((state) => ({ ...state, open: true })),\n closeSidenav: () => set((state) => ({ ...state, open: false })),\n toggleSidenav: () => set((state) => ({ ...state, open: !state.open })),\n toggleSection: (sectionId) =>\n set((state) => ({\n ...state,\n expandedSections: toggleId(state.expandedSections, sectionId),\n })),\n toggleNode: (nodeId) =>\n set((state) => ({\n ...state,\n expandedNodes: toggleId(state.expandedNodes, nodeId),\n })),\n setSectionExpanded: (sectionId, expanded) =>\n set((state) => ({\n ...state,\n expandedSections: setExpanded(state.expandedSections, sectionId, expanded),\n })),\n setNodeExpanded: (nodeId, expanded) =>\n set((state) => ({\n ...state,\n expandedNodes: setExpanded(state.expandedNodes, nodeId, expanded),\n })),\n setWidth: (width) => set((state) => ({ ...state, width })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n};\n\nconst sidenavStoreRegistry = new Map<string, ReturnType<typeof createSidenavStore>>();\n\nexport const getSidenavStore = (storageKey: string, initialState?: Partial<SidenavSnapshot>) => {\n const existingStore = sidenavStoreRegistry.get(storageKey);\n\n if (existingStore) {\n return existingStore;\n }\n\n const store = createSidenavStore({ storageKey, initialState });\n sidenavStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useSidenavStore = <T>(\n storageKey: string,\n selector: (state: SidenavState) => T,\n initialState?: Partial<SidenavSnapshot>,\n) => {\n const store = getSidenavStore(storageKey, initialState);\n return useStore(store, selector);\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface SidenavFooterProps {\n children?: ReactNode;\n}\n\nexport const SidenavFooter = (props: SidenavFooterProps) => {\n const { children } = props;\n\n if (!children) {\n return null;\n }\n\n return (\n <Box bg=\"bg\" position=\"sticky\" bottom=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n","import { HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { PANEL_HEADER_HEIGHT } from \"@/components/layout/panel-header.constants\";\n\ninterface SidenavHeaderProps {\n children?: ReactNode;\n}\n\nexport const SidenavHeader = (props: SidenavHeaderProps) => {\n const { children } = props;\n\n return (\n <HStack\n data-testid=\"sidenav-header\"\n justify=\"space-between\"\n align=\"center\"\n minH={PANEL_HEADER_HEIGHT}\n bg=\"bg\"\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n gap=\"0\"\n >\n <HStack minW=\"0\" flex=\"1\">\n {children}\n </HStack>\n </HStack>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef } from \"react\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport { useSidenavStore } from \"./sidenav.store\";\nimport type { SidenavProps } from \"./sidenav.types\";\nimport { SidenavFooter } from \"./sidenav-footer\";\nimport { SidenavHeader } from \"./sidenav-header\";\n\nconst DEFAULT_WIDTH = 240;\nconst DEFAULT_MIN_WIDTH = 200;\nconst DEFAULT_MAX_WIDTH = 480;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveInitialWidth = (width?: string | number, defaultWidth = DEFAULT_WIDTH) => {\n if (typeof width === \"number\") return width;\n if (typeof width === \"string\") {\n const parsed = parseInt(width, 10);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return defaultWidth;\n};\n\nexport const Sidenav = (props: SidenavProps) => {\n const {\n storageKey,\n sections,\n activeNodeId,\n contextActions = [],\n header,\n footer,\n width,\n closable = true,\n emptyLabel = \"No items available.\",\n defaultExpandedSections,\n linkComponent,\n onNavigate,\n onOpenChange,\n resizable = true,\n defaultWidth,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n virtualize = false,\n } = props;\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n\n const initialWidth = resolveInitialWidth(width, defaultWidth);\n const initialState = {\n ...(defaultExpandedSections ? { expandedSections: defaultExpandedSections } : {}),\n width: initialWidth,\n };\n\n const open = useSidenavStore(storageKey, (state) => state.open, initialState);\n const persistedWidth = useSidenavStore(storageKey, (state) => state.width, initialState);\n const expandedSections = useSidenavStore(storageKey, (state) => state.expandedSections, initialState);\n const expandedNodes = useSidenavStore(storageKey, (state) => state.expandedNodes, initialState);\n const toggleSection = useSidenavStore(storageKey, (state) => state.toggleSection, initialState);\n const toggleNode = useSidenavStore(storageKey, (state) => state.toggleNode, initialState);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [onOpenChange, open]);\n\n const effectiveWidth = clamp(persistedWidth ?? initialWidth, minWidth, maxWidth);\n if (!open && closable) {\n return null;\n }\n\n const widthCss = resizable ? `${effectiveWidth}px` : (width ?? `${initialWidth}px`);\n\n const content = (\n <Flex\n as=\"aside\"\n data-testid=\"sidenav\"\n direction=\"column\"\n position=\"relative\"\n h=\"100%\"\n w={widthCss}\n minW={widthCss}\n maxW={widthCss}\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderRightColor=\"border.subtle\"\n bg=\"bg\"\n >\n <SidenavHeader>{header}</SidenavHeader>\n\n <ScrollArea\n flex=\"1\"\n mt=\"lg\"\n viewportRef={viewportRef}\n viewportProps={{ display: \"block\", style: { overflowX: \"hidden\" } }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n {sections.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"3\">\n {emptyLabel}\n </Text>\n ) : (\n <TreeList\n sections={sections}\n expandedSectionIds={expandedSections}\n expandedNodeIds={expandedNodes}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n virtualize={virtualize}\n scrollRef={viewportRef}\n />\n )}\n </Box>\n </ScrollArea>\n\n <SidenavFooter>{footer}</SidenavFooter>\n </Flex>\n );\n\n return (\n <ResourceContextMenu actions={contextActions} closeOnSelect={false}>\n {content}\n </ResourceContextMenu>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\n\ninterface TabVisibilitySnapshot {\n tabOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TabVisibilityState extends TabVisibilitySnapshot {\n setTab: (key: string, value: VisibilityOverride | undefined) => void;\n toggleTab: (key: string, hiddenByDefault: boolean) => void;\n clearTab: (key: string) => void;\n reset: () => void;\n}\n\ninterface CreateTabVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TabVisibilitySnapshot = { tabOverrides: {} };\n\nconst STORE_NAMESPACE = \"pstdio/ui/tab-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n key: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(key in overrides)) return overrides;\n const { [key]: _removed, ...rest } = overrides;\n return rest;\n }\n if (overrides[key] === value) return overrides;\n return { ...overrides, [key]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, key: string, hiddenByDefault: boolean) => {\n const current = resolveEffective(overrides[key], hiddenByDefault);\n return setOverride(overrides, key, current === \"hidden\" ? \"shown\" : \"hidden\");\n};\n\nconst getPersistedSnapshot = (state: TabVisibilityState) => ({ tabOverrides: state.tabOverrides });\n\nexport const createTabVisibilityStore = (options: CreateTabVisibilityStoreOptions) =>\n createStore<TabVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setTab: (key, value) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, value) })),\n toggleTab: (key, hiddenByDefault) =>\n set((state) => ({ ...state, tabOverrides: toggleOverride(state.tabOverrides, key, hiddenByDefault) })),\n clearTab: (key) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTabVisibilityStore>>();\n\nexport const getTabVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n const store = createTabVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTabVisibilityStore = <T>(storageKey: string, selector: (state: TabVisibilityState) => T) => {\n const store = getTabVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TabVisibilitySnapshot, TabVisibilityState };\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { VisibilityOverride } from \"./tree-list-visibility.store\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nexport const resolveVisibility = (\n override: VisibilityOverride | undefined,\n hiddenByDefault: boolean | undefined,\n): VisibilityOverride => override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\n// A section or node is \"customizable\": it opts in to the hide/show menu and may be toggled.\n// Hideability is explicit — items are non-hideable unless they set canHide (or start hidden by\n// default, which would otherwise be unrecoverable). Body sub-items never opt in, so only\n// categories (sections) and header/footer rows ever appear in the customize menu.\nconst isCustomizable = (item: { canHide?: boolean; hiddenByDefault?: boolean }) =>\n item.canHide === true || item.hiddenByDefault === true;\n\nconst isNodeVisible = (node: TreeListNode, nodeOverrides: Record<string, VisibilityOverride>) =>\n resolveVisibility(nodeOverrides[node.id], node.hiddenByDefault) === \"shown\";\n\nconst filterNodes = (nodes: TreeListNode[], nodeOverrides: Record<string, VisibilityOverride>): TreeListNode[] => {\n let changed = false;\n const next: TreeListNode[] = [];\n for (const node of nodes) {\n if (!isNodeVisible(node, nodeOverrides)) {\n changed = true;\n continue;\n }\n if (node.children && node.children.length > 0) {\n const filteredChildren = filterNodes(node.children, nodeOverrides);\n if (filteredChildren !== node.children) {\n changed = true;\n next.push({ ...node, children: filteredChildren });\n continue;\n }\n }\n next.push(node);\n }\n return changed ? next : nodes;\n};\n\n// Header/footer rows are flat lists, filtered by their own node overrides (mirrors the body's\n// per-node filtering, minus section nesting).\nexport const filterVisibleNodes = (\n nodes: TreeListNode[],\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListNode[] => filterNodes(nodes, nodeOverrides);\n\nexport const filterVisibleSections = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListSection[] => {\n let changed = false;\n const next: TreeListSection[] = [];\n for (const section of sections) {\n if (resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"hidden\") {\n changed = true;\n continue;\n }\n const filteredNodes = filterNodes(section.nodes, nodeOverrides);\n if (filteredNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: filteredNodes });\n continue;\n }\n next.push(section);\n }\n return changed ? next : sections;\n};\n\nexport interface TreeVisibilityMenuActions {\n onToggleSection: (id: string, hiddenByDefault: boolean) => void;\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildMenuOptions {\n // Trailing toggle indicator: an eye when the entry is shown, eye-off when hidden.\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n // Leading icon for the reset rows, kept separate from the toggle list above.\n resetIcon?: ReactNode;\n}\n\nconst visibilityEndContent = (effective: VisibilityOverride, options: BuildMenuOptions) =>\n effective === \"shown\" ? options.visibleIcon : options.hiddenIcon;\n\nconst buildSectionAction = (\n section: TreeListSection,\n sectionOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = section.hiddenByDefault === true;\n const effective = resolveVisibility(sectionOverrides[section.id], hiddenByDefault);\n return {\n key: `section:${section.id}`,\n label: section.label ?? section.id,\n onClick: () => actions.onToggleSection(section.id, hiddenByDefault),\n endContent: visibilityEndContent(effective, options),\n };\n};\n\nconst buildNodeAction = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n icon: node.icon,\n onClick: () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: visibilityEndContent(effective, options),\n };\n};\n\nexport interface TreeVisibilityMenuItems {\n headerNodes?: TreeListNode[];\n sections: TreeListSection[];\n footerNodes?: TreeListNode[];\n}\n\n// Builds the back-of-tree hide/show menu. Only items that opt in via canHide (or start hidden by\n// default) are listed: header rows, body categories (sections), category-level body rows, and\n// footer rows. Hideability is explicit per item, so leaf sub-items — which never opt in — stay\n// out of the menu; you customize categories and top-level entries, not individual files/sessions.\nexport const buildTreeVisibilityMenuActions = (\n items: TreeVisibilityMenuItems,\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n const appendGroup = (group: ResourceContextAction[]) => {\n if (group.length === 0) return;\n if (result.length > 0) group[0] = { ...group[0], separatorBefore: true };\n result.push(...group);\n };\n\n appendGroup(\n (items.headerNodes ?? [])\n .filter(isCustomizable)\n .map((node) => buildNodeAction(node, nodeOverrides, actions, options)),\n );\n const mainActions: ResourceContextAction[] = [];\n for (const section of items.sections) {\n if (isCustomizable(section)) mainActions.push(buildSectionAction(section, sectionOverrides, actions, options));\n // Top-level rows that opt in (e.g. a \"Tickets\" nav entry) are hideable too; their leaf\n // children are not visited, so files/sessions inside a category stay non-hideable.\n for (const node of section.nodes) {\n if (isCustomizable(node)) mainActions.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n appendGroup(mainActions);\n appendGroup(\n (items.footerNodes ?? [])\n .filter(isCustomizable)\n .map((node) => buildNodeAction(node, nodeOverrides, actions, options)),\n );\n\n if (result.length === 0) return result;\n\n // A separator splits the visibility toggles above from the reset actions below.\n result.push({\n key: \"__reset-visibility\",\n label: \"Reset to default\",\n icon: options.resetIcon,\n separatorBefore: true,\n onClick: actions.onResetAll,\n });\n\n return result;\n};\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\nimport { resolveVisibility } from \"../tree-list/tree-list-visibility-filter\";\n\nexport interface TabVisibilityPlacement {\n closable?: boolean;\n hiddenByDefault?: boolean;\n pinned?: boolean;\n title?: string;\n contributionId: string;\n}\n\nexport const filterVisibleTabs = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n getKey: (placement: T) => string,\n): T[] => {\n let changed = false;\n const next: T[] = [];\n for (const placement of placements) {\n if (placement.pinned === true && placement.hiddenByDefault === true) {\n changed = true;\n continue;\n }\n if (placement.closable === true) {\n next.push(placement);\n continue;\n }\n const effective = resolveVisibility(tabOverrides[getKey(placement)], placement.hiddenByDefault);\n if (effective === \"hidden\") {\n changed = true;\n continue;\n }\n next.push(placement);\n }\n return changed ? next : placements;\n};\n\nexport interface TabVisibilityMenuActions {\n onToggleTab: (key: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildTabMenuOptions {\n // Trailing toggle indicator, mirroring the tree menu: eye when shown, eye-off when hidden.\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n resetIcon?: ReactNode;\n}\n\nexport const buildTabVisibilityMenuActions = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n actions: TabVisibilityMenuActions,\n getKey: (placement: T) => string,\n options: BuildTabMenuOptions,\n getIcon?: (placement: T) => ReactNode,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n let nonCloseableCount = 0;\n\n for (const placement of placements) {\n if (placement.pinned === true) continue;\n if (placement.closable === true) continue;\n nonCloseableCount += 1;\n const key = getKey(placement);\n const hiddenByDefault = placement.hiddenByDefault === true;\n const effective = resolveVisibility(tabOverrides[key], hiddenByDefault);\n result.push({\n key: `tab:${key}`,\n label: placement.title ?? placement.contributionId,\n icon: getIcon?.(placement),\n onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.visibleIcon : options.hiddenIcon,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({\n key: \"__reset-tabs\",\n label: \"Reset to default\",\n icon: options.resetIcon,\n separatorBefore: true,\n onClick: actions.onResetAll,\n });\n return result;\n};\n","import { Button, Editable, Flex, Icon, Menu, Table } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, ChevronDown, GripVertical, Trash2 } from \"lucide-react\";\n\nimport { IconColorPicker, type IconColorPickerIconOption } from \"@/components/primitives/icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TagEditorAction, TagEditorValue } from \"./tag-editor.types\";\n\ninterface TagEditorRowProps {\n actionOptions?: TagEditorAction[];\n colorOptions?: readonly string[];\n iconOptions?: readonly IconColorPickerIconOption[];\n value: TagEditorValue;\n isSaving?: boolean;\n showDefault?: boolean;\n showIcons?: boolean;\n onActionsChange: (actions: string[]) => void;\n onColorChange: (color: string) => void;\n onDelete: () => void;\n onIconChange: (icon: string | null) => void;\n onNameChange: (name: string) => void;\n onSetDefault: () => void;\n}\n\nconst ActionDropdown = (props: {\n actions: string[];\n disabled?: boolean;\n options: TagEditorAction[];\n onChange: (actions: string[]) => void;\n}) => {\n const { actions, disabled, options, onChange } = props;\n\n const toggleAction = (action: string) => {\n onChange(actions.includes(action) ? actions.filter((item) => item !== action) : [...actions, action]);\n };\n\n return (\n <Menu.Root closeOnSelect={false}>\n <Menu.Trigger asChild>\n <Button size=\"2xs\" variant=\"outline\" gap=\"xs\" disabled={disabled}>\n {actions.length} action{actions.length !== 1 ? \"s\" : \"\"}\n <Icon as={ChevronDown} boxSize=\"12px\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {options.map((option) => (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={option.value}\n label={option.label}\n isSelected={actions.includes(option.value)}\n endContent={actions.includes(option.value) ? <Check size={14} /> : undefined}\n onActivate={() => toggleAction(option.value)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const TagEditorRow = (props: TagEditorRowProps) => {\n const {\n actionOptions,\n colorOptions,\n iconOptions,\n value,\n isSaving,\n showDefault,\n showIcons,\n onActionsChange,\n onColorChange,\n onDelete,\n onIconChange,\n onNameChange,\n onSetDefault,\n } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: value.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Table.Row ref={setNodeRef} style={style}>\n <Table.Cell width=\"40px\">\n <Flex cursor=\"grab\" {...attributes} {...listeners}>\n <GripVertical size={14} color=\"var(--chakra-colors-fg-muted)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Editable.Root\n defaultValue={value.name}\n onValueCommit={(details) => {\n const trimmed = details.value.trim();\n if (trimmed && trimmed !== value.name) onNameChange(trimmed);\n }}\n >\n <Editable.Preview />\n <Editable.Input />\n </Editable.Root>\n </Table.Cell>\n <Table.Cell width=\"54px\">\n <IconColorPicker\n color={value.color}\n colorOptions={colorOptions}\n icon={value.icon}\n iconOptions={iconOptions}\n showIcons={showIcons}\n onColorChange={onColorChange}\n onIconChange={onIconChange}\n disabled={isSaving}\n />\n </Table.Cell>\n {showDefault ? (\n <Table.Cell width=\"80px\">\n <Button\n size=\"2xs\"\n variant={value.isDefault ? \"primary\" : \"ghost\"}\n onClick={onSetDefault}\n disabled={isSaving || value.isDefault}\n aria-label={`Set ${value.name} as default`}\n >\n <Check size={14} />\n </Button>\n </Table.Cell>\n ) : null}\n {actionOptions ? (\n <Table.Cell width=\"140px\">\n <ActionDropdown\n actions={value.actions ?? []}\n disabled={isSaving}\n options={actionOptions}\n onChange={onActionsChange}\n />\n </Table.Cell>\n ) : null}\n <Table.Cell width=\"40px\">\n <Button\n size=\"2xs\"\n variant=\"destructive\"\n onClick={onDelete}\n disabled={isSaving || value.isDefault}\n aria-label={`Delete ${value.name}`}\n >\n <Trash2 size={14} />\n </Button>\n </Table.Cell>\n </Table.Row>\n );\n};\n","import { Button, Flex, HStack, Input, Stack, Table, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Plus, X } from \"lucide-react\";\nimport type { KeyboardEvent } from \"react\";\nimport { useState } from \"react\";\n\nimport { DeleteConfirmationModal } from \"@/components/overlays/delete-confirmation-modal\";\nimport { IconColorPicker } from \"@/components/primitives/icon-color-picker\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\nimport { TagEditorRow } from \"./tag-editor-row\";\n\ninterface AddFormState {\n name: string;\n color: string;\n icon: string | null;\n}\n\nconst buildDraftItem = (form: AddFormState, sortOrder: number) => ({\n id: `new-${crypto.randomUUID()}`,\n name: form.name.trim(),\n color: form.color,\n icon: form.icon,\n sortOrder,\n isNew: true,\n});\n\nexport const TagEditor = (props: TagEditorProps) => {\n const {\n title,\n description,\n values,\n onValuesChange,\n onSave,\n onCancel,\n onDeleteValue,\n onSetDefault,\n hasChanges,\n isSaving,\n addLabel = \"Add tag\",\n addPlaceholder = \"Tag name\",\n actionOptions,\n actionsColumnLabel = \"Actions\",\n cancelLabel = \"Cancel\",\n colorOptions,\n defaultAddColor = \"blue\",\n defaultAddIcon = null,\n defaultColumnLabel = \"Default\",\n deleteButtonText = \"Delete tag\",\n deleteHeadline = \"Delete tag?\",\n deleteNotificationText = (value) => `This will delete \"${value.name}\".`,\n iconOptions,\n saveLabel = \"Save\",\n showDefault,\n showIcons = true,\n valueColumnLabel = \"Name\",\n } = props;\n const [isAdding, setIsAdding] = useState(false);\n const [addForm, setAddForm] = useState<AddFormState>({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n const [valueToDelete, setValueToDelete] = useState<TagEditorValue | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const resetAddForm = () => {\n setIsAdding(false);\n setAddForm({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n };\n\n const updateValue = (index: number, patch: Partial<TagEditorValue>) => {\n const next = [...values];\n next[index] = { ...next[index], ...patch };\n onValuesChange(next);\n };\n\n const handleAddOption = () => {\n if (!addForm.name.trim()) return;\n const maxOrder = values.length > 0 ? Math.max(...values.map((value) => value.sortOrder)) : 0;\n onValuesChange([...values, buildDraftItem(addForm, maxOrder + 1)]);\n resetAddForm();\n };\n\n const handleDeleteOption = () => {\n if (!valueToDelete) return;\n if (onDeleteValue) {\n onDeleteValue(valueToDelete);\n } else {\n onValuesChange(values.filter((value) => value.id !== valueToDelete.id));\n }\n setValueToDelete(null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = values.findIndex((value) => value.id === active.id);\n const newIndex = values.findIndex((value) => value.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return;\n\n onValuesChange(arrayMove(values, oldIndex, newIndex).map((value, index) => ({ ...value, sortOrder: index })));\n };\n\n const handleAddKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") handleAddOption();\n if (event.key === \"Escape\") resetAddForm();\n };\n\n return (\n <>\n <Stack gap=\"md\" height=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"heading/S\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsAdding(true)} disabled={isAdding || isSaving}>\n <Plus size={16} />\n {addLabel}\n </Button>\n </Flex>\n\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={values.map((value) => value.id)} strategy={verticalListSortingStrategy}>\n <Table.Root size=\"sm\" variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader width=\"40px\" />\n <Table.ColumnHeader>{valueColumnLabel}</Table.ColumnHeader>\n <Table.ColumnHeader width=\"54px\" />\n {showDefault ? <Table.ColumnHeader width=\"80px\">{defaultColumnLabel}</Table.ColumnHeader> : null}\n {actionOptions ? <Table.ColumnHeader width=\"140px\">{actionsColumnLabel}</Table.ColumnHeader> : null}\n <Table.ColumnHeader width=\"40px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {values.map((value, index) => (\n <TagEditorRow\n key={value.id}\n value={value}\n isSaving={isSaving}\n showDefault={showDefault}\n showIcons={showIcons}\n actionOptions={actionOptions}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onNameChange={(name) => updateValue(index, { name })}\n onColorChange={(color) => updateValue(index, { color })}\n onIconChange={(icon) => updateValue(index, { icon })}\n onActionsChange={(actions) => updateValue(index, { actions })}\n onSetDefault={() => onSetDefault?.(value)}\n onDelete={() => setValueToDelete(value)}\n />\n ))}\n {isAdding ? (\n <Table.Row>\n <Table.Cell />\n <Table.Cell>\n <Input\n size=\"xs\"\n placeholder={addPlaceholder}\n value={addForm.name}\n onChange={(event) => setAddForm({ ...addForm, name: event.target.value })}\n onKeyDown={handleAddKeyDown}\n autoFocus\n />\n </Table.Cell>\n <Table.Cell>\n <IconColorPicker\n color={addForm.color}\n icon={addForm.icon}\n showIcons={showIcons}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onColorChange={(color) => setAddForm({ ...addForm, color })}\n onIconChange={(icon) => setAddForm({ ...addForm, icon })}\n />\n </Table.Cell>\n {showDefault ? <Table.Cell /> : null}\n {actionOptions ? <Table.Cell /> : null}\n <Table.Cell>\n <HStack gap=\"2xs\">\n <Button size=\"2xs\" variant=\"primary\" onClick={handleAddOption} disabled={!addForm.name.trim()}>\n Add\n </Button>\n <Button size=\"2xs\" variant=\"ghost\" onClick={resetAddForm} aria-label=\"Cancel add value\">\n <X size={14} />\n </Button>\n </HStack>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </SortableContext>\n </DndContext>\n\n <Flex justifyContent=\"flex-end\">\n <HStack gap=\"xs\">\n <Button size=\"sm\" variant=\"outline\" onClick={onCancel} disabled={!hasChanges || isSaving}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={!hasChanges}>\n {saveLabel}\n </Button>\n </HStack>\n </Flex>\n </Stack>\n\n <DeleteConfirmationModal\n open={Boolean(valueToDelete)}\n onClose={() => setValueToDelete(null)}\n onDelete={handleDeleteOption}\n headline={deleteHeadline}\n notificationText={valueToDelete ? deleteNotificationText(valueToDelete) : \"\"}\n buttonText={deleteButtonText}\n />\n </>\n );\n};\n","import { HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { AlertMessage } from \"@/components/primitives/alert\";\nimport { TagEditor } from \"./tag-editor\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\n\nexport interface SaveTagSettingsInput<TValue> {\n deletedIds: Set<string>;\n drafts: TagEditorValue[];\n values: TValue[];\n}\n\ntype EditorLabels = Pick<\n TagEditorProps,\n | \"actionOptions\"\n | \"actionsColumnLabel\"\n | \"addLabel\"\n | \"addPlaceholder\"\n | \"colorOptions\"\n | \"deleteButtonText\"\n | \"deleteHeadline\"\n | \"deleteNotificationText\"\n | \"description\"\n | \"iconOptions\"\n | \"showIcons\"\n | \"title\"\n | \"valueColumnLabel\"\n>;\n\ntype SortableValue = { id: string; sortOrder: number };\n\nexport interface TagSettingsPanelProps<TValue extends SortableValue> extends EditorLabels {\n errorTitle: string;\n loadingText?: string;\n /** Loaded values; pass undefined while the initial load is pending. */\n values: TValue[] | undefined;\n /** Load/save error surfaced by the host's data layer. */\n loadError?: unknown;\n /**\n * Persists the pending edits. The host owns fetching and cache invalidation;\n * the panel resets its delete tracking once the returned promise resolves.\n */\n onSave: (input: SaveTagSettingsInput<TValue>) => Promise<void>;\n toEditorValue: (value: TValue) => TagEditorValue;\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean;\n}\n\nconst bySortOrder = (left: TagEditorValue, right: TagEditorValue) =>\n left.sortOrder - right.sortOrder || left.name.localeCompare(right.name);\n\nconst toEditorValues = <TValue extends SortableValue>(\n values: TValue[],\n toEditorValue: (value: TValue) => TagEditorValue,\n) => values.map(toEditorValue).sort(bySortOrder);\n\nconst findOriginalValue = <TValue extends SortableValue>(values: TValue[], draft: TagEditorValue) =>\n values.find((value) => value.id === draft.id);\n\nconst hasTagValueChanges = <TValue extends SortableValue>(\n values: TValue[],\n drafts: TagEditorValue[],\n deletedIds: Set<string>,\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean,\n) => {\n if (deletedIds.size > 0) return true;\n\n return drafts.some((draft) => {\n if (draft.isNew) return true;\n const original = findOriginalValue(values, draft);\n if (!original) return true;\n return valueNeedsUpdate(original, draft) || draft.sortOrder !== original.sortOrder;\n });\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : error ? String(error) : null);\n\nexport const TagSettingsPanel = <TValue extends SortableValue>(props: TagSettingsPanelProps<TValue>) => {\n const {\n errorTitle,\n loadingText = \"Loading...\",\n values: loadedValues,\n loadError,\n onSave,\n toEditorValue,\n valueNeedsUpdate,\n ...editorProps\n } = props;\n const [drafts, setDrafts] = useState<TagEditorValue[]>([]);\n const [deletedIds, setDeletedIds] = useState<Set<string>>(new Set());\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<unknown>(null);\n\n const values = loadedValues ?? [];\n\n // Edits never refetch in the background, so loaded values only change on\n // initial load and after a save invalidates the host's cache — keeping local\n // drafts in sync.\n useEffect(() => {\n if (loadedValues) setDrafts(toEditorValues(loadedValues, toEditorValue));\n }, [loadedValues, toEditorValue]);\n\n const handleSave = async () => {\n setIsSaving(true);\n setSaveError(null);\n try {\n await onSave({ deletedIds, drafts, values });\n setDeletedIds(new Set());\n } catch (error) {\n setSaveError(error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const hasChanges = hasTagValueChanges(values, drafts, deletedIds, valueNeedsUpdate);\n const error = errorMessage(loadError) ?? errorMessage(saveError);\n\n const handleDeleteValue = (value: TagEditorValue) => {\n if (!value.isNew) setDeletedIds(new Set([...deletedIds, value.id]));\n setDrafts(drafts.filter((draft) => draft.id !== value.id));\n };\n\n const handleCancel = () => {\n setDrafts(toEditorValues(values, toEditorValue));\n setDeletedIds(new Set());\n setSaveError(null);\n };\n\n return (\n <Stack boxSizing=\"border-box\" minH=\"100%\" p=\"lg\" gap=\"lg\" bg=\"bg\" color=\"fg\">\n {error ? (\n <AlertMessage status=\"error\" colorPalette=\"red\" title={errorTitle} size=\"sm\">\n {error}\n </AlertMessage>\n ) : null}\n {loadedValues === undefined ? (\n <HStack gap=\"sm\" color=\"fg.muted\">\n <Spinner size=\"sm\" />\n <Text textStyle=\"paragraph/S/regular\">{loadingText}</Text>\n </HStack>\n ) : (\n <TagEditor\n {...editorProps}\n values={drafts}\n onValuesChange={setDrafts}\n onDeleteValue={handleDeleteValue}\n hasChanges={hasChanges}\n isSaving={isSaving}\n onSave={() => void handleSave()}\n onCancel={handleCancel}\n />\n )}\n </Stack>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface TreeListOrderSnapshot {\n sectionOrder: string[];\n nodeOrderBySection: Record<string, string[]>;\n}\n\ninterface TreeListOrderState extends TreeListOrderSnapshot {\n setSectionOrder: (nextSectionIds: string[]) => void;\n setNodeOrder: (sectionId: string, nextNodeIds: string[]) => void;\n resetSectionOrder: () => void;\n resetNodeOrder: (sectionId: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListOrderStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListOrderSnapshot = {\n sectionOrder: [],\n nodeOrderBySection: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-order\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst dedupe = (ids: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n return result;\n};\n\nconst getPersistedSnapshot = (state: TreeListOrderState) => ({\n sectionOrder: state.sectionOrder,\n nodeOrderBySection: state.nodeOrderBySection,\n});\n\nexport const createTreeListOrderStore = (options: CreateTreeListOrderStoreOptions) =>\n createStore<TreeListOrderState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSectionOrder: (nextSectionIds) => set((state) => ({ ...state, sectionOrder: dedupe(nextSectionIds) })),\n setNodeOrder: (sectionId, nextNodeIds) =>\n set((state) => ({\n ...state,\n nodeOrderBySection: { ...state.nodeOrderBySection, [sectionId]: dedupe(nextNodeIds) },\n })),\n resetSectionOrder: () => set((state) => ({ ...state, sectionOrder: [] })),\n resetNodeOrder: (sectionId) =>\n set((state) => {\n if (!(sectionId in state.nodeOrderBySection)) return state;\n const { [sectionId]: _removed, ...rest } = state.nodeOrderBySection;\n return { ...state, nodeOrderBySection: rest };\n }),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListOrderStore>>();\n\nexport const getTreeListOrderStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListOrderStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListOrderStore = <T>(storageKey: string, selector: (state: TreeListOrderState) => T) => {\n const store = getTreeListOrderStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListOrderSnapshot, TreeListOrderState };\n","import type { TreeListSection } from \"./tree-list.types\";\n\nconst reorderBy = <T extends { id: string }>(items: T[], order: string[]): T[] => {\n if (order.length === 0) return items;\n\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n const placed = new Set<number>();\n const next: T[] = [];\n\n for (const id of order) {\n const index = indexById.get(id);\n if (index === undefined || placed.has(index)) continue;\n placed.add(index);\n next.push(items[index]);\n }\n\n let changed = next.length > 0 && next.length !== items.length;\n for (let i = 0; i < items.length; i += 1) {\n if (placed.has(i)) continue;\n if (next.length !== i && !changed) changed = true;\n next.push(items[i]);\n }\n\n if (!changed) {\n for (let i = 0; i < items.length; i += 1) {\n if (items[i] !== next[i]) {\n changed = true;\n break;\n }\n }\n }\n\n return changed ? next : items;\n};\n\nexport const applyTreeListOrder = (\n sections: TreeListSection[],\n sectionOrder: string[],\n nodeOrderBySection: Record<string, string[]>,\n): TreeListSection[] => {\n let changed = false;\n const reorderedSections = reorderBy(sections, sectionOrder);\n if (reorderedSections !== sections) changed = true;\n\n const next: TreeListSection[] = [];\n for (const section of reorderedSections) {\n const nodeOrder = nodeOrderBySection[section.id];\n if (!nodeOrder || nodeOrder.length === 0) {\n next.push(section);\n continue;\n }\n const reorderedNodes = reorderBy(section.nodes, nodeOrder);\n if (reorderedNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: reorderedNodes });\n } else {\n next.push(section);\n }\n }\n\n return changed ? next : sections;\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\nexport type VisibilityOverride = \"hidden\" | \"shown\";\n\ninterface TreeListVisibilitySnapshot {\n sectionOverrides: Record<string, VisibilityOverride>;\n nodeOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TreeListVisibilityState extends TreeListVisibilitySnapshot {\n setSection: (id: string, value: VisibilityOverride | undefined) => void;\n setNode: (id: string, value: VisibilityOverride | undefined) => void;\n toggleSection: (id: string, hiddenByDefault: boolean) => void;\n toggleNode: (id: string, hiddenByDefault: boolean) => void;\n clearSection: (id: string) => void;\n clearNode: (id: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListVisibilitySnapshot = {\n sectionOverrides: {},\n nodeOverrides: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst flipOverride = (current: VisibilityOverride): VisibilityOverride => (current === \"hidden\" ? \"shown\" : \"hidden\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n id: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(id in overrides)) return overrides;\n const { [id]: _removed, ...rest } = overrides;\n return rest;\n }\n\n if (overrides[id] === value) return overrides;\n return { ...overrides, [id]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, id: string, hiddenByDefault: boolean) => {\n const next = flipOverride(resolveEffective(overrides[id], hiddenByDefault));\n return setOverride(overrides, id, next);\n};\n\nconst getPersistedSnapshot = (state: TreeListVisibilityState) => ({\n sectionOverrides: state.sectionOverrides,\n nodeOverrides: state.nodeOverrides,\n});\n\nexport const createTreeListVisibilityStore = (options: CreateTreeListVisibilityStoreOptions) =>\n createStore<TreeListVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSection: (id, value) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, value) })),\n setNode: (id, value) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, value) })),\n toggleSection: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n sectionOverrides: toggleOverride(state.sectionOverrides, id, hiddenByDefault),\n })),\n toggleNode: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n nodeOverrides: toggleOverride(state.nodeOverrides, id, hiddenByDefault),\n })),\n clearSection: (id) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, undefined) })),\n clearNode: (id) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListVisibilityStore>>();\n\nexport const getTreeListVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListVisibilityStore = <T>(storageKey: string, selector: (state: TreeListVisibilityState) => T) => {\n const store = getTreeListVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListVisibilitySnapshot, TreeListVisibilityState };\n","export interface FileIconThemeFont {\n fontFamily: string;\n src: { url: string; format?: string }[];\n weight?: string;\n style?: string;\n}\n\nexport interface FileIconThemeDefinition {\n fontCharacter?: string;\n fontColor?: string;\n fontId?: string;\n}\n\nexport interface FileIconThemePreferenceOption {\n id: string;\n title?: string;\n definitions: Record<string, unknown>;\n fileExtensions: Record<string, string>;\n fileNames: Record<string, string>;\n defaults: { file?: string; folder?: string };\n fonts: FileIconThemeFont[];\n}\n\nexport const defaultFileIconThemePreferences: FileIconThemePreferenceOption[] = [];\n\nexport const isFileIconThemePreference = (\n value: string | null,\n themes: readonly FileIconThemePreferenceOption[],\n): value is string => typeof value === \"string\" && themes.some((theme) => theme.id === value);\n\n// VS Code matches the longest compound extension first (\"d.ts\" before \"ts\").\nconst extensionCandidates = (filename: string) => {\n const parts = filename.toLowerCase().split(\".\");\n const candidates: string[] = [];\n for (let i = 1; i < parts.length; i += 1) candidates.push(parts.slice(i).join(\".\"));\n return candidates;\n};\n\nconst resolveDefinitionKey = (theme: FileIconThemePreferenceOption, filename: string, isDirectory: boolean) => {\n if (isDirectory) return theme.defaults.folder;\n\n const named = theme.fileNames[filename.toLowerCase()];\n if (named) return named;\n\n for (const candidate of extensionCandidates(filename)) {\n const match = theme.fileExtensions[candidate];\n if (match) return match;\n }\n\n return theme.defaults.file;\n};\n\nconst fontFamilyForDefinition = (theme: FileIconThemePreferenceOption, definition: FileIconThemeDefinition) => {\n if (definition.fontId) {\n const matched = theme.fonts.find((font) => font.fontFamily === `${theme.id}-${definition.fontId}`);\n if (matched) return matched.fontFamily;\n }\n return theme.fonts[0]?.fontFamily;\n};\n\nexport interface ResolvedFileIconGlyph {\n fontFamily: string;\n fontCharacter: string;\n fontColor?: string;\n}\n\n// VS Code icon themes store the glyph as a CSS escape (\"\\\\E023\"); decode it to the real code point.\nconst decodeFontCharacter = (value: string) => {\n const match = /^\\\\([0-9a-fA-F]+)$/.exec(value);\n return match ? String.fromCodePoint(Number.parseInt(match[1], 16)) : value;\n};\n\nexport const resolveFileIconGlyph = (\n theme: FileIconThemePreferenceOption | undefined,\n filename: string,\n isDirectory = false,\n): ResolvedFileIconGlyph | undefined => {\n if (!theme) return undefined;\n\n const key = resolveDefinitionKey(theme, filename, isDirectory);\n if (!key) return undefined;\n\n const definition = theme.definitions[key] as FileIconThemeDefinition | undefined;\n if (!definition?.fontCharacter) return undefined;\n\n const fontFamily = fontFamilyForDefinition(theme, definition);\n if (!fontFamily) return undefined;\n\n return {\n fontFamily,\n fontCharacter: decodeFontCharacter(definition.fontCharacter),\n fontColor: definition.fontColor,\n };\n};\n\nconst FONT_STYLE_ATTRIBUTE = \"data-pstdio-file-icon-fonts\";\n\nconst fontFaceRule = (font: FileIconThemeFont) => {\n const src = font.src\n .map((entry) => `url(\"${entry.url}\")${entry.format ? ` format(\"${entry.format}\")` : \"\"}`)\n .join(\", \");\n return [\n \"@font-face {\",\n ` font-family: \"${font.fontFamily}\";`,\n ` src: ${src};`,\n ` font-weight: ${font.weight ?? \"normal\"};`,\n ` font-style: ${font.style ?? \"normal\"};`,\n \"}\",\n ].join(\"\\n\");\n};\n\nexport const applyFileIconThemePreference = (\n themeId: string | null,\n themes: readonly FileIconThemePreferenceOption[],\n) => {\n if (typeof document === \"undefined\") return;\n\n let style = document.querySelector<HTMLStyleElement>(`style[${FONT_STYLE_ATTRIBUTE}]`);\n if (!style) {\n style = document.createElement(\"style\");\n style.setAttribute(FONT_STYLE_ATTRIBUTE, \"\");\n document.head.appendChild(style);\n }\n\n const theme = themes.find((option) => option.id === themeId);\n style.textContent = (theme?.fonts ?? []).map(fontFaceRule).join(\"\\n\\n\");\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyFileIconThemePreference,\n defaultFileIconThemePreferences,\n type FileIconThemePreferenceOption,\n isFileIconThemePreference,\n} from \"./apply-file-icon-theme-preference\";\nimport { createBrowserStorage } from \"./browser-storage\";\n\nconst STORAGE_KEY = \"file-icon-theme-preference\";\n\n// The bundled Seti theme is the preferred default; fall back to whatever is registered first.\nconst getDefaultFileIconThemePreference = (themes: readonly FileIconThemePreferenceOption[]) =>\n themes.find((theme) => theme.id.endsWith(\".seti\"))?.id ?? themes[0]?.id ?? null;\n\ninterface FileIconThemePreferenceContextValue {\n fileIconThemePreference: string | null;\n fileIconThemePreferences: readonly FileIconThemePreferenceOption[];\n activeFileIconTheme: FileIconThemePreferenceOption | undefined;\n setFileIconThemePreference: (preference: string) => void;\n}\n\nconst FileIconThemePreferenceContext = createContext<FileIconThemePreferenceContextValue | null>(null);\n\ninterface FileIconThemePreferenceProviderProps {\n children: ReactNode;\n themePreferences?: readonly FileIconThemePreferenceOption[];\n}\n\nconst getInitialPreference = (themes: readonly FileIconThemePreferenceOption[]) => {\n if (typeof window === \"undefined\") return getDefaultFileIconThemePreference(themes);\n\n const stored = createBrowserStorage().getItem(STORAGE_KEY);\n if (isFileIconThemePreference(stored, themes)) return stored;\n\n return getDefaultFileIconThemePreference(themes);\n};\n\nexport const FileIconThemePreferenceProvider = (props: FileIconThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultFileIconThemePreferences } = props;\n const [fileIconThemePreference, setFileIconThemePreference] = useState<string | null>(() =>\n getInitialPreference(themePreferences),\n );\n\n useEffect(() => {\n const resolved = isFileIconThemePreference(fileIconThemePreference, themePreferences)\n ? fileIconThemePreference\n : getDefaultFileIconThemePreference(themePreferences);\n\n if (resolved !== fileIconThemePreference) {\n setFileIconThemePreference(resolved);\n return;\n }\n\n applyFileIconThemePreference(resolved, themePreferences);\n if (typeof window !== \"undefined\" && resolved) createBrowserStorage().setItem(STORAGE_KEY, resolved);\n }, [fileIconThemePreference, themePreferences]);\n\n const activeFileIconTheme = themePreferences.find((theme) => theme.id === fileIconThemePreference);\n\n return (\n <FileIconThemePreferenceContext\n value={{\n fileIconThemePreference,\n fileIconThemePreferences: themePreferences,\n activeFileIconTheme,\n setFileIconThemePreference,\n }}\n >\n {children}\n </FileIconThemePreferenceContext>\n );\n};\n\nexport const useFileIconThemePreference = () => {\n const context = useContext(FileIconThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useFileIconThemePreference must be used within a FileIconThemePreferenceProvider\");\n }\n\n return context;\n};\n","import { Folder } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\n\nimport { type FileIconThemePreferenceOption, resolveFileIconGlyph } from \"./apply-file-icon-theme-preference\";\nimport { getFileTypeIcon } from \"./get-file-type-icon\";\n\ninterface ResolveFileIconElementOptions {\n isDirectory?: boolean;\n theme?: FileIconThemePreferenceOption;\n size?: number;\n}\n\n// Renders a contributed icon-font glyph when the active theme matches; otherwise falls back to Lucide icons.\nexport const resolveFileIconElement = (filename: string, options: ResolveFileIconElementOptions = {}) => {\n const { isDirectory = false, theme, size = 16 } = options;\n\n const glyph = resolveFileIconGlyph(theme, filename, isDirectory);\n if (glyph) {\n const style: CSSProperties = {\n fontFamily: `\"${glyph.fontFamily}\"`,\n color: glyph.fontColor,\n fontSize: size,\n lineHeight: 1,\n display: \"inline-flex\",\n };\n return (\n <span aria-hidden=\"true\" style={style}>\n {glyph.fontCharacter}\n </span>\n );\n }\n\n if (isDirectory) return <Folder size={size} />;\n\n const Icon = getFileTypeIcon(filename);\n return <Icon size={size} />;\n};\n"],"names":["ActivityAvatar","props","$","_c","actor","icon","color","t0","background","t1","undefined","t2","Box","avatarSrc","t3","avatarAlt","name","t4","Avatar","t5","t6","t7","TimestampSeparator","Symbol","for","jsx","ActivityCommentHeader","timestamp","actions","Text","jsxs","Fragment","HStack","ActivityReply","children","rootProps","Stack","ActivityComment","composer","replies","hasReplies","Children","count","ActivityComposer","value","defaultValue","placeholder","variant","minRows","attachLabel","submitLabel","onAttach","onChange","onSubmit","internalValue","setInternalValue","useState","currentValue","isInline","canSubmit","trim","length","handleChange","nextValue","handleSubmit","event","preventDefault","chakra","borderColor","Textarea","currentTarget","Spacer","Tooltip","IconButton","Icon","Paperclip","ArrowUp","EventSeparator","ActivityEvent","iconColor","iconBackground","Timeline","t8","ActivityRoot","ActivityHeader","title","ActivityFeed","ActivityTimeline","Activity","Root","Header","Feed","Event","Comment","Reply","Composer","DEFAULT_PALETTE_ASSET_LIMIT","getSearchableText","entry","label","secondaryLabel","searchText","hasInputPrefix","query","inputPrefix","trimStart","startsWith","resolvePaletteMode","modes","fallbackMode","find","mode","id","getPaletteEffectiveQuery","modeId","candidate","slice","limitDefaultAssetEntries","entries","limit","counts","filter","assetType","filterPaletteEntries","options","effectiveQuery","getEffectiveQuery","toLowerCase","filteredEntries","includes","defaultAssetLimit","GROUP_ROW_HEIGHT","ENTRY_ROW_HEIGHT","INITIAL_VIEWPORT_HEIGHT","buildEntryItem","description","endContent","shortcut","isSelected","Check","onActivate","buildRows","rows","forEach","index","previousEntry","group","push","type","entryIndex","getActiveRowIndex","activeIndex","findIndex","row","PaletteList","emptyLabel","onHover","scrollRef","activeRowIndex","virtualizer","useVirtualizer","getScrollElement","current","estimateSize","getItemKey","initialRect","width","height","overscan","useEffect","scrollToIndex","align","behavior","getTotalSize","getVirtualItems","map","virtualRow","measureElement","top","start","ListRow","key","hasContent","footerJustifyContent","hasFooterStart","hasFooterEnd","searchInputChromeProps","bg","border","borderRadius","boxShadow","transition","_hover","_active","_focus","outline","_focusVisible","SearchModalContent","searchValue","searchPlaceholder","searchAriaLabel","searchIcon","searchInputRef","searchAutoFocus","showCloseButton","closeButtonLabel","bodyBefore","footerStart","footerEnd","scrollAreaProps","onSearchChange","onSearchKeyDown","restScrollAreaProps","maxH","showHorizontalScrollbar","target","Input","t9","InputGroup","t10","Dialog","CloseButton","t11","t12","ScrollArea","t13","resolveStateValue","state","fallback","Palette","open","initialQuery","initialActiveIndex","resetKey","inputIcon","filterEntries","onActiveEntryChange","onQueryChange","onClose","onEscape","setQueryState","setActiveIndex","inputRef","useRef","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","setQuery","runActiveEntry","closePalette","previousSetup","timeout","setTimeout","input","focus","setSelectionRange","clearTimeout","Math","min","max","t14","t15","entryCount","handleEscape","t16","current_0","_temp","stopPropagation","handleKeyDown","t17","details","t18","t19","viewportRef","viewportProps","style","overflowAnchor","t20","nextQuery_0","t21","t22","t23","current_1","nonMacModifierLabels","alt","control","ctrl","mod","shift","macModifierLabels","Option","cmd","Command","command","meta","option","keyLabels","arrowleft","ArrowLeft","arrowright","ArrowRight","getShortcutPlatform","navigator","platform","resolveShortcutDisplayPart","normalized","modifierLabels","splitShortcutStep","step","split","part","Boolean","getShortcutDisplayParts","binding","Array","isArray","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","join","HorizontalMenuStack","rest","h","px","py","borderBottomWidth","ItemSection","defaultOpen","action","transform","ChevronRight","Collapsible","Flex","e","PANEL_HEADER_HEIGHT","PANEL_HEADER_CONTROL_SIZE","PANEL_HEADER_TAB_SIZE","priorityColorPalette","priority","shouldShowPriorityBadge","itemSearchText","item","body","kind","status","sourceLabel","targetLabel","filterItems","items","normalizedQuery","groupItems","needsInput","urgent","normal","orderItemsForDisplay","flatMap","metadataDescription","timeLabel","getActionButtons","onDismiss","X","tooltip","onAction","NotificationEndContent","onRunAction","Badge","Button","destructive","NotificationRows","onActivateItem","onActiveIndexChange","groups","rowIndex","currentIndex","Bell","LoadingRows","NotificationCenter","autoFocus","error","loading","internalQuery","setInternalQuery","activeQuery","filteredItems","displayItems","activeItem","updateQuery","_temp2","Search","AlertMessage","Skeleton","AttachedMenu","DEFAULT_RESIZABLE_MIN_WIDTH","AttachedPanel","header","minWidth","resizable","resolvedMinWidth","resolvedWidth","BubbleButton","forwardRef","ref","containerProps","isOpen","button","BubblePanel","menu","closeLabel","onPopOut","popOutLabel","testId","ariaLabel","SquareArrowOutUpRight","Minus","Portal","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","getEntryIcon","isDirectory","isGitRepo","FolderOpen","Folder","FileText","path","RepoPickerListEntry","selectedPath","selectedPathSet","onEntryClick","has","isAlreadySelected","isDisabled","handleClick","focusInlinePickerOption","from","querySelectorAll","indexOf","document","activeElement","nextIndex","RepoPickerDialog","currentPath","selectedPaths","isLoading","isSelectDisabled","onSelect","onSelectHomeDirectory","onSelectParentDirectory","Set","searchScope","T0","t24","Home","t25","t26","t27","ChevronUp","t28","t29","t30","T1","t31","t32","t33","t34","t35","t36","t37","t38","t39","padding","t40","t41","t42","Body","t43","t44","t45","t46","Content","t47","Positioner","t48","linkProps","alignItems","display","gap","minW","maxW","overflow","textOverflow","whiteSpace","staticProps","cursor","textDecoration","isInteractiveItem","url","onClick","BreadcrumbItemLink","isCurrent","linkComponent","LinkComponent","ChakraBreadcrumb","BreadcrumbItemContent","content","contextMenuActions","placement","ResourceContextMenu","BreadcrumbSeparator","separator","Breadcrumb","React","separatorGap","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","ErrorBoundary","Component","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","render","ErrorFallback","message","AbsoluteCenter","SimpleCard","SimpleCardBody","IntegrationCard","version","category","active","actionLabel","Switch","inputProps","rootRef","thumbLabel","trackLabel","disabled","interactiveCursor","ChakraSwitch","off","on","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","md","Spinner","paddingEnd","ParamEditorControlList","DEFAULT_SNAPSHOT","expandedSections","expandedNodes","SIDENAV_STORE_NAMESPACE","toStorageName","storageKey","toggleId","values","setExpanded","expanded","getPersistedSnapshot","createSidenavStore","initialState","snapshot","createStore","persist","set","openSidenav","closeSidenav","toggleSidenav","toggleSection","sectionId","toggleNode","nodeId","setSectionExpanded","setNodeExpanded","setWidth","reset","storage","createJSONStorage","createBrowserStorage","partialize","sidenavStoreRegistry","Map","getSidenavStore","existingStore","get","store","useSidenavStore","selector","useStore","SidenavFooter","SidenavHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","clamp","resolveInitialWidth","defaultWidth","parsed","parseInt","Number","isNaN","Sidenav","sections","activeNodeId","contextActions","footer","closable","defaultExpandedSections","onNavigate","onOpenChange","maxWidth","virtualize","initialWidth","persistedWidth","_temp3","_temp4","_temp5","_temp6","effectiveWidth","widthCss","overflowX","minHeight","flexDirection","TreeList","state_0","state_1","state_2","state_3","state_4","tabOverrides","STORE_NAMESPACE","resolveEffective","override","hiddenByDefault","setOverride","overrides","_removed","toggleOverride","createTabVisibilityStore","setTab","toggleTab","clearTab","storeRegistry","getTabVisibilityStore","existing","useTabVisibilityStore","toStringLabel","resolveVisibility","isCustomizable","canHide","isNodeVisible","node","nodeOverrides","filterNodes","nodes","changed","next","filteredChildren","filterVisibleNodes","filterVisibleSections","sectionOverrides","section","filteredNodes","visibilityEndContent","effective","visibleIcon","hiddenIcon","buildSectionAction","onToggleSection","buildNodeAction","onToggleNode","buildTreeVisibilityMenuActions","result","appendGroup","separatorBefore","headerNodes","mainActions","footerNodes","resetIcon","onResetAll","filterVisibleTabs","placements","getKey","pinned","buildTabVisibilityMenuActions","getIcon","nonCloseableCount","contributionId","onToggleTab","ActionDropdown","toggleAction","ChevronDown","Menu","TagEditorRow","actionOptions","colorOptions","iconOptions","isSaving","showDefault","showIcons","onActionsChange","onColorChange","onIconChange","onNameChange","onSetDefault","attributes","listeners","setNodeRef","isDragging","useSortable","CSS","Transform","toString","opacity","GripVertical","Table","trimmed","Editable","IconColorPicker","isDefault","Trash2","buildDraftItem","form","sortOrder","crypto","randomUUID","isNew","TagEditor","onValuesChange","onSave","onCancel","onDeleteValue","hasChanges","addLabel","addPlaceholder","actionsColumnLabel","cancelLabel","defaultAddColor","defaultAddIcon","defaultColumnLabel","deleteButtonText","deleteHeadline","deleteNotificationText","saveLabel","valueColumnLabel","isAdding","setIsAdding","addForm","setAddForm","valueToDelete","setValueToDelete","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","resetAddForm","updateValue","patch","handleAddOption","maxOrder","handleDeleteOption","handleDragEnd","over","oldIndex","newIndex","arrayMove","handleAddKeyDown","Plus","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","bySortOrder","left","right","localeCompare","toEditorValues","toEditorValue","sort","findOriginalValue","draft","hasTagValueChanges","drafts","deletedIds","valueNeedsUpdate","size","some","original","errorMessage","Error","String","TagSettingsPanel","errorTitle","loadingText","loadedValues","loadError","editorProps","setDrafts","setDeletedIds","setIsSaving","saveError","setSaveError","handleSave","handleDeleteValue","handleCancel","sectionOrder","nodeOrderBySection","dedupe","ids","seen","add","createTreeListOrderStore","setSectionOrder","nextSectionIds","setNodeOrder","nextNodeIds","resetSectionOrder","resetNodeOrder","getTreeListOrderStore","useTreeListOrderStore","reorderBy","order","indexById","placed","i","applyTreeListOrder","reorderedSections","nodeOrder","reorderedNodes","flipOverride","createTreeListVisibilityStore","setSection","setNode","clearSection","clearNode","getTreeListVisibilityStore","useTreeListVisibilityStore","defaultFileIconThemePreferences","isFileIconThemePreference","themes","theme","extensionCandidates","filename","parts","candidates","resolveDefinitionKey","defaults","folder","named","fileNames","match","fileExtensions","file","fontFamilyForDefinition","definition","fontId","matched","fonts","font","fontFamily","decodeFontCharacter","exec","fromCodePoint","resolveFileIconGlyph","definitions","fontCharacter","fontColor","FONT_STYLE_ATTRIBUTE","fontFaceRule","src","format","weight","applyFileIconThemePreference","themeId","querySelector","createElement","setAttribute","head","appendChild","textContent","STORAGE_KEY","getDefaultFileIconThemePreference","endsWith","FileIconThemePreferenceContext","createContext","getInitialPreference","window","stored","getItem","FileIconThemePreferenceProvider","themePreferences","fileIconThemePreference","setFileIconThemePreference","resolved","setItem","activeFileIconTheme","fileIconThemePreferences","useFileIconThemePreference","context","useContext","resolveFileIconElement","glyph","fontSize","lineHeight","getFileTypeIcon"],"mappings":"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"}