@pstdio/ui 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/{MermaidComponent-CatfVUxA.js → MermaidComponent-BCMQqPqu.js} +11 -11
  2. package/dist/{MermaidComponent-CatfVUxA.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 +1160 -1120
  6. package/dist/chat-ui.js.map +1 -1
  7. package/dist/checkbox-D5AzFRlb.js +70 -0
  8. package/dist/checkbox-D5AzFRlb.js.map +1 -0
  9. package/dist/components/chat-ui/components/ai-conversation.d.ts +1 -1
  10. package/dist/components/chat-ui/components/ai-message.d.ts +1 -1
  11. package/dist/components/chat-ui/components/ai-response.d.ts +0 -1
  12. package/dist/components/chat-ui/components/attachment-list.d.ts +1 -1
  13. package/dist/components/chat-ui/components/auto-scroll.d.ts +27 -0
  14. package/dist/components/chat-ui/components/chat-message-animation.d.ts +22 -0
  15. package/dist/components/chat-ui/components/timeline.d.ts +0 -2
  16. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +0 -1
  17. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -12
  18. package/dist/components/chat-ui/tool-rendering/shared.d.ts +1 -1
  19. package/dist/components/chat-ui/tool-rendering/types.d.ts +1 -2
  20. package/dist/components/command-palette/index.d.ts +4 -0
  21. package/dist/components/data-renderer/data-renderer-board.d.ts +1 -1
  22. package/dist/components/data-renderer/data-renderer-card.d.ts +1 -1
  23. package/dist/components/data-renderer/data-renderer-enum-helpers.d.ts +3 -3
  24. package/dist/components/data-renderer/data-renderer-helpers.d.ts +2 -0
  25. package/dist/components/data-renderer/data-renderer-list.d.ts +1 -1
  26. package/dist/components/data-renderer/data-renderer.d.ts +1 -1
  27. package/dist/components/data-renderer/index.d.ts +18 -0
  28. package/dist/components/data-renderer/types.d.ts +0 -6
  29. package/dist/components/diff-viewer/diff-card.d.ts +1 -0
  30. package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +0 -19
  31. package/dist/components/diff-viewer/diff-drawer.d.ts +1 -0
  32. package/dist/components/diff-viewer/diff-viewer-options-menu.d.ts +16 -0
  33. package/dist/components/diff-viewer/index.d.ts +2 -0
  34. package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +7 -3
  35. package/dist/components/internal/style-guide.d.ts +14 -0
  36. package/dist/components/internal/token-editor-controls.d.ts +8 -0
  37. package/dist/components/internal/token-editor-data.d.ts +40 -0
  38. package/dist/components/internal/token-editor-state.d.ts +22 -0
  39. package/dist/components/layout/index.d.ts +6 -0
  40. package/dist/components/list-row/list-row.types.d.ts +1 -1
  41. package/dist/components/notification-center/index.d.ts +2 -0
  42. package/dist/components/notification-center/notification-center.d.ts +2 -0
  43. package/dist/components/notification-center/notification-center.types.d.ts +37 -0
  44. package/dist/components/{bubble-button.d.ts → overlays/bubble-button.d.ts} +1 -1
  45. package/dist/components/overlays/index.d.ts +12 -0
  46. package/dist/components/overlays/search-modal-content.d.ts +20 -0
  47. package/dist/components/{searchable-menu.d.ts → overlays/searchable-menu.d.ts} +1 -1
  48. package/dist/components/param-editor/index.d.ts +23 -0
  49. package/dist/components/param-editor/inputs/action-input.d.ts +13 -0
  50. package/dist/components/param-editor/inputs/anchor-grid-input.d.ts +12 -0
  51. package/dist/components/param-editor/inputs/anchor-grid.d.ts +4 -0
  52. package/dist/components/param-editor/inputs/file-accept.d.ts +22 -0
  53. package/dist/components/param-editor/inputs/file-drop-input.d.ts +14 -0
  54. package/dist/components/param-editor/inputs/numeric-value.d.ts +6 -0
  55. package/dist/components/param-editor/inputs/range-input.d.ts +17 -0
  56. package/dist/components/param-editor/inputs/range-value.d.ts +5 -0
  57. package/dist/components/param-editor/inputs/resource-input-chips.d.ts +15 -0
  58. package/dist/components/param-editor/inputs/resource-input.d.ts +18 -0
  59. package/dist/components/param-editor/inputs/segmented-input.d.ts +14 -0
  60. package/dist/components/param-editor/inputs/slider-marks.d.ts +5 -0
  61. package/dist/components/param-editor/inputs/vector-input.d.ts +17 -0
  62. package/dist/components/param-editor/inputs/vector-value.d.ts +7 -0
  63. package/dist/components/param-editor/param-editor-control-item.d.ts +15 -0
  64. package/dist/components/param-editor/param-editor-control-list.d.ts +5 -0
  65. package/dist/components/param-editor/param-editor-field-label.d.ts +1 -0
  66. package/dist/components/param-editor/param-editor-field.d.ts +11 -0
  67. package/dist/components/param-editor/param-editor-inline-group.d.ts +5 -0
  68. package/dist/components/param-editor/param-editor-section.d.ts +16 -0
  69. package/dist/components/param-editor/param-editor.d.ts +2 -1
  70. package/dist/components/param-editor/param-editor.types.d.ts +101 -19
  71. package/dist/components/{breadcrumb.d.ts → primitives/breadcrumb.d.ts} +1 -1
  72. package/dist/components/{icon-color-picker.d.ts → primitives/icon-color-picker.d.ts} +2 -6
  73. package/dist/components/primitives/index.d.ts +28 -0
  74. package/dist/components/{number-input.d.ts → primitives/number-input.d.ts} +0 -2
  75. package/dist/components/{session-indicator.d.ts → primitives/session-indicator.d.ts} +2 -1
  76. package/dist/components/{tooltip.d.ts → primitives/tooltip.d.ts} +0 -1
  77. package/dist/components/rich-text/prompt-input/commands.d.ts +0 -17
  78. package/dist/components/rich-text/prompt-input/events.d.ts +0 -13
  79. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.d.ts +1 -2
  80. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +1 -2
  81. package/dist/components/rich-text/prompt-input/utils.d.ts +1 -2
  82. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +0 -1
  83. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  84. package/dist/components/sidebar/sidebar.types.d.ts +1 -1
  85. package/dist/components/tab-strip/tab-visibility-filter.d.ts +5 -3
  86. package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
  87. package/dist/components/tag-editor/tag-editor.types.d.ts +1 -1
  88. package/dist/components/terminal/bind-session.d.ts +33 -0
  89. package/dist/components/terminal/index.d.ts +6 -0
  90. package/dist/components/terminal/scripted-bridge.d.ts +35 -0
  91. package/dist/components/terminal/terminal-contract.d.ts +22 -0
  92. package/dist/components/terminal/terminal-theme.d.ts +12 -0
  93. package/dist/components/terminal/terminal.d.ts +45 -0
  94. package/dist/components/terminal/types.d.ts +35 -0
  95. package/dist/components/terminal/use-terminal-session.d.ts +21 -0
  96. package/dist/components/tree-list/tree-list-order-filter.d.ts +1 -2
  97. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +12 -4
  98. package/dist/components/tree-list/tree-list.d.ts +1 -1
  99. package/dist/components/tree-list/tree-list.types.d.ts +7 -2
  100. package/dist/data-renderer.js +1669 -0
  101. package/dist/data-renderer.js.map +1 -0
  102. package/dist/diff-editor-BnfV8cYB.js +182 -0
  103. package/dist/diff-editor-BnfV8cYB.js.map +1 -0
  104. package/dist/diff.js +1313 -0
  105. package/dist/diff.js.map +1 -0
  106. package/dist/empty-state-Bo4HVrgr.js +34 -0
  107. package/dist/empty-state-Bo4HVrgr.js.map +1 -0
  108. package/dist/foundations/gallery/gallery-frame.d.ts +21 -0
  109. package/dist/foundations/gallery/sections/badges-section.d.ts +1 -0
  110. package/dist/foundations/gallery/sections/buttons-section.d.ts +1 -0
  111. package/dist/foundations/gallery/sections/composite-chat-section.d.ts +1 -0
  112. package/dist/foundations/gallery/sections/composites-section.d.ts +1 -0
  113. package/dist/foundations/gallery/sections/feedback-section.d.ts +1 -0
  114. package/dist/foundations/gallery/sections/input-authoring-card.d.ts +1 -0
  115. package/dist/foundations/gallery/sections/inputs-section.d.ts +1 -0
  116. package/dist/foundations/gallery/sections/layout-section.d.ts +1 -0
  117. package/dist/foundations/gallery/sections/navigation-identity-section.d.ts +1 -0
  118. package/dist/foundations/gallery/sections/overlays-section.d.ts +1 -0
  119. package/dist/foundations/gallery/sections/panels-section.d.ts +1 -0
  120. package/dist/foundations/gallery/sections/param-editor-composite-card.d.ts +1 -0
  121. package/dist/foundations/gallery/sections/settings-composite-cards.d.ts +1 -0
  122. package/dist/index.d.ts +15 -84
  123. package/dist/index.js +3594 -7450
  124. package/dist/index.js.map +1 -1
  125. package/dist/list-row-mi3Hn-Um.js +740 -0
  126. package/dist/list-row-mi3Hn-Um.js.map +1 -0
  127. package/dist/mermaid-renderer-DZo3qj6D.js +425 -0
  128. package/dist/mermaid-renderer-DZo3qj6D.js.map +1 -0
  129. package/dist/mermaid.js +5 -0
  130. package/dist/mermaid.js.map +1 -0
  131. package/dist/radio-cLMEBBZk.js +76 -0
  132. package/dist/radio-cLMEBBZk.js.map +1 -0
  133. package/dist/resource-badge-qCWHP-wQ.js +99 -0
  134. package/dist/resource-badge-qCWHP-wQ.js.map +1 -0
  135. package/dist/{rich-message-BFtvH9H7.js → rich-message-DBf_5YlW.js} +462 -481
  136. package/dist/rich-message-DBf_5YlW.js.map +1 -0
  137. package/dist/rich-text.js +397 -390
  138. package/dist/rich-text.js.map +1 -1
  139. package/dist/scroll-area-BMbg1WcD.js +91 -0
  140. package/dist/scroll-area-BMbg1WcD.js.map +1 -0
  141. package/dist/style.css +1 -1
  142. package/dist/terminal.js +339 -0
  143. package/dist/terminal.js.map +1 -0
  144. package/dist/theme/global.d.ts +3 -0
  145. package/dist/theme/recipes/badge.d.ts +50 -0
  146. package/dist/theme/recipes/button.d.ts +24 -19
  147. package/dist/theme/recipes/color-picker.d.ts +1 -0
  148. package/dist/theme/recipes/dialog.d.ts +1 -1
  149. package/dist/theme/recipes/drawer.d.ts +1 -1
  150. package/dist/theme/recipes/input.d.ts +55 -0
  151. package/dist/theme/recipes/number-input.d.ts +98 -0
  152. package/dist/theme/recipes/tabs.d.ts +49 -28
  153. package/dist/theme/recipes/textarea.d.ts +62 -1
  154. package/dist/theme/recipes/timeline.d.ts +74 -0
  155. package/dist/theme/shadowless-default-config.d.ts +2 -0
  156. package/dist/theme/tokens/borders.d.ts +0 -3
  157. package/dist/theme/tokens/colors.d.ts +100 -70
  158. package/dist/{theme-C5qHTCU9.js → theme-CJBYBJaA.js} +1264 -415
  159. package/dist/theme-CJBYBJaA.js.map +1 -0
  160. package/dist/theme-preference-DOzHx64J.js +123 -0
  161. package/dist/theme-preference-DOzHx64J.js.map +1 -0
  162. package/dist/theme.js +1 -1
  163. package/dist/tree-list-CcuZMLS5.js +930 -0
  164. package/dist/tree-list-CcuZMLS5.js.map +1 -0
  165. package/dist/workspace-badge-Fuo-1zPj.js +314 -0
  166. package/dist/workspace-badge-Fuo-1zPj.js.map +1 -0
  167. package/package.json +23 -3
  168. package/dist/components/file-tree-helpers.d.ts +0 -8
  169. package/dist/components/open-source-notices-screen.d.ts +0 -20
  170. package/dist/components/param-editor/input-group.d.ts +0 -10
  171. package/dist/components/rich-text/shared/plugins/MermaidPlugin/index.d.ts +0 -1
  172. package/dist/components/rich-text/shared/plugins/TableActionMenuPlugin/TableActionMenuPlugin.d.ts +0 -5
  173. package/dist/components/rich-text/shared/plugins/TableCellResizerPlugin/TableCellResizerPlugin.d.ts +0 -2
  174. package/dist/components/rich-text/theme/report-theme.d.ts +0 -3
  175. package/dist/components/sidebar/sidebar-project-menu.d.ts +0 -7
  176. package/dist/components/style-guide-data.d.ts +0 -46
  177. package/dist/components/style-guide.d.ts +0 -1
  178. package/dist/mermaid-renderer-DYEiYmYQ.js +0 -411
  179. package/dist/mermaid-renderer-DYEiYmYQ.js.map +0 -1
  180. package/dist/radio-DJtQY9po.js +0 -286
  181. package/dist/radio-DJtQY9po.js.map +0 -1
  182. package/dist/resource-badge-D33IFv74.js +0 -188
  183. package/dist/resource-badge-D33IFv74.js.map +0 -1
  184. package/dist/rich-message-BFtvH9H7.js.map +0 -1
  185. package/dist/theme/tokens/shadows.d.ts +0 -64
  186. package/dist/theme-C5qHTCU9.js.map +0 -1
  187. package/dist/utils/formats.d.ts +0 -7
  188. /package/dist/components/{palette-filter.d.ts → command-palette/palette-filter.d.ts} +0 -0
  189. /package/dist/components/{palette-list.d.ts → command-palette/palette-list.d.ts} +0 -0
  190. /package/dist/components/{palette-shortcut.d.ts → command-palette/palette-shortcut.d.ts} +0 -0
  191. /package/dist/components/{palette.d.ts → command-palette/palette.d.ts} +0 -0
  192. /package/dist/components/{code-editor.d.ts → diff-viewer/code-editor.d.ts} +0 -0
  193. /package/dist/components/{column-file-browser.d.ts → file-browser/column-file-browser.d.ts} +0 -0
  194. /package/dist/components/{performance-panel.d.ts → internal/performance-panel.d.ts} +0 -0
  195. /package/dist/components/{header.d.ts → layout/header.d.ts} +0 -0
  196. /package/dist/components/{horizontal-menu-stack.d.ts → layout/horizontal-menu-stack.d.ts} +0 -0
  197. /package/dist/components/{item-section.d.ts → layout/item-section.d.ts} +0 -0
  198. /package/dist/components/{panel-header.constants.d.ts → layout/panel-header.constants.d.ts} +0 -0
  199. /package/dist/components/{resizable-split-layout.d.ts → layout/resizable-split-layout.d.ts} +0 -0
  200. /package/dist/components/{resizable-split-layout.handle.d.ts → layout/resizable-split-layout.handle.d.ts} +0 -0
  201. /package/dist/components/{attached-panel.d.ts → overlays/attached-panel.d.ts} +0 -0
  202. /package/dist/components/{bubble-panel.d.ts → overlays/bubble-panel.d.ts} +0 -0
  203. /package/dist/components/{delete-confirmation-modal.d.ts → overlays/delete-confirmation-modal.d.ts} +0 -0
  204. /package/dist/components/{repo-picker-dialog.d.ts → overlays/repo-picker-dialog.d.ts} +0 -0
  205. /package/dist/components/{resource-context-menu.d.ts → overlays/resource-context-menu.d.ts} +0 -0
  206. /package/dist/components/param-editor/{color-input.d.ts → inputs/color-input.d.ts} +0 -0
  207. /package/dist/components/param-editor/{date-input.d.ts → inputs/date-input.d.ts} +0 -0
  208. /package/dist/components/param-editor/{horizontal-text-input.d.ts → inputs/horizontal-text-input.d.ts} +0 -0
  209. /package/dist/components/param-editor/{number-input.d.ts → inputs/number-input.d.ts} +0 -0
  210. /package/dist/components/param-editor/{selection-input.d.ts → inputs/selection-input.d.ts} +0 -0
  211. /package/dist/components/param-editor/{text-input.d.ts → inputs/text-input.d.ts} +0 -0
  212. /package/dist/components/{alert.d.ts → primitives/alert.d.ts} +0 -0
  213. /package/dist/components/{checkbox.d.ts → primitives/checkbox.d.ts} +0 -0
  214. /package/dist/components/{content-placeholder.d.ts → primitives/content-placeholder.d.ts} +0 -0
  215. /package/dist/components/{empty-state.d.ts → primitives/empty-state.d.ts} +0 -0
  216. /package/dist/components/{error-boundary.d.ts → primitives/error-boundary.d.ts} +0 -0
  217. /package/dist/components/{info-card.d.ts → primitives/info-card.d.ts} +0 -0
  218. /package/dist/components/{integration-card.d.ts → primitives/integration-card.d.ts} +0 -0
  219. /package/dist/components/{radio.d.ts → primitives/radio.d.ts} +0 -0
  220. /package/dist/components/{resource-badge.d.ts → primitives/resource-badge.d.ts} +0 -0
  221. /package/dist/components/{scroll-area.d.ts → primitives/scroll-area.d.ts} +0 -0
  222. /package/dist/components/{simple-card.d.ts → primitives/simple-card.d.ts} +0 -0
  223. /package/dist/components/{slider.d.ts → primitives/slider.d.ts} +0 -0
  224. /package/dist/components/{switch.d.ts → primitives/switch.d.ts} +0 -0
  225. /package/dist/components/{toaster.d.ts → primitives/toaster.d.ts} +0 -0
  226. /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/utils/apply-theme-preference.ts","../src/utils/browser-storage.ts","../src/utils/theme-preference.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/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/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/sidebar/sidebar-project-menu.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, box-shadow 0.12s ease\"\n _focusWithin={isInline ? undefined : { borderColor: \"blue.border\", boxShadow: \"mid\" }}\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\", boxShadow: \"none\", outline: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", 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\" shadow=\"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 boxShadow: \"none\",\n outline: \"none\",\n} as const;\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 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 <Menu.Positioner>\n <Menu.Content w={width} bg=\"bg\" gap=\"0\" p=\"0\" zIndex=\"popover\">\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 </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 RowContent = (props: RowContentProps) => {\n const { item, isExpanded, showChevron, isDisabled, variant, tone } = props;\n const isDenseVariant = variant === \"compact\" || variant === \"tree\";\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 = (() => {\n if (isDisabled) return \"fg.muted\";\n if (tone === \"danger\") return \"red.500\";\n return \"fg\";\n })();\n const iconColor = item.iconColor ?? (tone === \"danger\" ? \"red.500\" : \"fg.muted\");\n const descriptionColor = tone === \"danger\" ? \"red.400\" : \"fg.menu-item.secondary\";\n\n return (\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" overflow=\"hidden\" alignItems=\"center\">\n {showChevron ? (\n <Box color=\"fg.muted\" flexShrink={0} display=\"flex\" alignItems=\"center\">\n <Icon\n as={ChevronRight}\n boxSize=\"12px\"\n transform={isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Box>\n ) : null}\n <Stack gap=\"2xs\" 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 {typeof item.label === \"string\" ? (\n <Text textStyle={labelTextStyle} color={labelColor} truncate>\n {item.label}\n </Text>\n ) : (\n <Box minW=\"0\" maxW=\"full\" overflow=\"hidden\" color={labelColor}>\n {item.label}\n </Box>\n )}\n </HStack>\n {item.description ? (\n typeof item.description === \"string\" ? (\n <Text ml={descriptionMarginLeft} textStyle={descriptionTextStyle} color={descriptionColor} truncate>\n {item.description}\n </Text>\n ) : (\n <Box ml={descriptionMarginLeft} minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.description}\n </Box>\n )\n ) : null}\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\" && !hasDescription) return { rowHeight: \"1.75rem\", minHeight: undefined };\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}) => ({\n bg: input.isSelected ? input.selectedBg : \"transparent\",\n _hover:\n input.tone === \"danger\" ? { boxShadow: \"inset 0 0 0 1px var(--chakra-colors-red-500)\" } : { bg: input.hoverBg },\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}) => ({\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: input.isDisabled ? (\"not-allowed\" as const) : (\"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 paddingLeft = computePaddingLeft(depth);\n const verticalPadding = variant === \"default\" ? \"xs\" : \"2xs\";\n const hasDescription = item.description !== undefined;\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 });\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 boxShadow: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\", boxShadow: \"none\" },\n _focus: { outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { outline: \"none\", boxShadow: \"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 = \"boxShadow\" | \"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=\"border.subtle\"\n boxShadow={isOpen ? \"none\" : \"mid\"}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n boxShadow: \"mid\",\n }}\n _active={{ boxShadow: isOpen ? \"none\" : \"mid\" }}\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=\"3xl\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n boxShadow=\"2xl\"\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","export type ThemePreference = string;\nexport type ThemePreferenceMode = \"light\" | \"dark\";\nexport type ThemePreferenceTokens = Record<string, string>;\n\nexport interface ThemePreferenceOption {\n id: ThemePreference;\n title?: string;\n mode: ThemePreferenceMode;\n tokens?: ThemePreferenceTokens;\n monacoTheme?: unknown;\n}\n\nexport const defaultThemePreferences = [\n { id: \"pstdio-light\", mode: \"light\" },\n { id: \"pstdio-dark\", mode: \"dark\" },\n] satisfies ThemePreferenceOption[];\n\nexport const isThemePreference = (\n value: string | null,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n): value is ThemePreference => typeof value === \"string\" && themePreferences.some((theme) => theme.id === value);\n\nexport const getThemePreferenceMode = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => themePreferences.find((preference) => preference.id === theme)?.mode ?? \"light\";\n\nexport const getThemePreferenceClassName = (theme: ThemePreference) => `theme-${theme}`;\n\nexport const getThemePreferenceClassNames = (\n theme: ThemePreference,\n mode: ThemePreferenceMode = getThemePreferenceMode(theme),\n) => [mode, getThemePreferenceClassName(theme)];\n\nconst THEME_TOKEN_PATHS_ATTRIBUTE = \"data-pstdio-theme-token-paths\";\n\nconst getThemePreferenceCssVariableName = (tokenPath: string) => `--chakra-${tokenPath.replaceAll(\".\", \"-\")}`;\n\nconst removeThemeTokens = (el: HTMLElement, theme?: ThemePreferenceOption) => {\n if (!theme?.tokens) return;\n\n for (const tokenPath of Object.keys(theme.tokens)) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n};\n\nconst removeTrackedThemeTokens = (el: HTMLElement) => {\n const tokenPaths = el.getAttribute(THEME_TOKEN_PATHS_ATTRIBUTE)?.split(\"\\n\").filter(Boolean) ?? [];\n\n for (const tokenPath of tokenPaths) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n};\n\nconst applyThemeTokens = (el: HTMLElement, theme: ThemePreferenceOption) => {\n if (!theme.tokens) {\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n return;\n }\n\n for (const [tokenPath, value] of Object.entries(theme.tokens)) {\n el.style.setProperty(getThemePreferenceCssVariableName(tokenPath), value);\n }\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, Object.keys(theme.tokens).join(\"\\n\"));\n};\n\nexport const applyThemePreference = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n const body = document.body;\n const preference = themePreferences.find((option) => option.id === theme) ?? { id: theme, mode: \"light\" };\n const mode = getThemePreferenceMode(theme, themePreferences);\n\n for (const el of [root, body]) {\n if (!el) continue;\n const previousTheme = el.getAttribute(\"data-theme\");\n const previousPreference = themePreferences.find((option) => option.id === previousTheme);\n\n el.classList.remove(\"light\", \"dark\");\n if (previousTheme) {\n el.classList.remove(getThemePreferenceClassName(previousTheme));\n }\n removeTrackedThemeTokens(el);\n removeThemeTokens(el, previousPreference);\n applyThemeTokens(el, preference);\n el.classList.add(...getThemePreferenceClassNames(theme, mode));\n el.setAttribute(\"data-theme\", theme);\n el.setAttribute(\"data-color-mode\", mode);\n el.style.colorScheme = mode;\n }\n};\n","interface BrowserStorage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, value: string) => void;\n}\n\nconst noopStorage = {\n getItem: () => null,\n removeItem: () => {},\n setItem: () => {},\n} satisfies BrowserStorage;\n\nconst readLocalStorage = () => {\n try {\n return globalThis.localStorage;\n } catch {\n return undefined;\n }\n};\n\nexport const createBrowserStorage = (): BrowserStorage => {\n const storage = readLocalStorage();\n if (!storage) return noopStorage;\n\n return {\n getItem(key) {\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n },\n removeItem(key) {\n try {\n storage.removeItem(key);\n } catch {}\n },\n setItem(key, value) {\n try {\n storage.setItem(key, value);\n } catch {}\n },\n };\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyThemePreference,\n defaultThemePreferences,\n getThemePreferenceMode,\n isThemePreference,\n type ThemePreference,\n type ThemePreferenceMode,\n type ThemePreferenceOption,\n} from \"./apply-theme-preference\";\nimport { createBrowserStorage } from \"./browser-storage\";\n\nconst STORAGE_KEY = \"theme-preference\";\n\nconst ThemePreferenceContext = createContext<ThemePreferenceContextValue | null>(null);\n\ninterface ThemePreferenceContextValue {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (preference: ThemePreference) => void;\n toggleThemePreference: () => void;\n}\n\ninterface ThemePreferenceProviderProps {\n children: ReactNode;\n initialPreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n}\n\nconst getDefaultThemePreference = (themePreferences: readonly ThemePreferenceOption[], mode: ThemePreferenceMode) =>\n themePreferences.find((preference) => preference.mode === mode)?.id ??\n themePreferences[0]?.id ??\n defaultThemePreferences[0].id;\n\nconst getStoredThemePreference = () => {\n if (typeof window === \"undefined\") return null;\n\n return createBrowserStorage().getItem(STORAGE_KEY);\n};\n\nconst storeThemePreference = (preference: ThemePreference) => {\n if (typeof window === \"undefined\") return;\n\n createBrowserStorage().setItem(STORAGE_KEY, preference);\n};\n\n// Contributed (extension) themes are namespaced (`extension.theme`) and register\n// asynchronously. A bare id like a legacy `light`/`dark` value names no\n// contribution, so it will never register — we must fall back rather than wait.\nconst looksLikeContributedThemePreference = (value: string | null) => typeof value === \"string\" && value.includes(\".\");\n\nconst isPendingStoredThemePreference = (input: {\n canRestoreStoredPreference: boolean;\n storedPreference: string | null;\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n}) => {\n const { canRestoreStoredPreference, storedPreference, themePreference, themePreferences } = input;\n\n return (\n canRestoreStoredPreference &&\n storedPreference === themePreference &&\n looksLikeContributedThemePreference(storedPreference) &&\n !isThemePreference(themePreference, themePreferences)\n );\n};\n\nexport const getInitialThemePreference = (\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof window === \"undefined\") return getDefaultThemePreference(themePreferences, \"light\");\n\n const stored = getStoredThemePreference();\n if (stored) return stored;\n\n const prefersDark =\n typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n return getDefaultThemePreference(themePreferences, prefersDark ? \"dark\" : \"light\");\n};\n\nexport const ThemePreferenceProvider = (props: ThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultThemePreferences } = props;\n const initialPreference = props.initialPreference ?? getInitialThemePreference(themePreferences);\n const canRestoreStoredPreference = props.initialPreference === undefined;\n const [themePreference, setThemePreferenceState] = useState<ThemePreference>(initialPreference);\n const storedPreference = canRestoreStoredPreference ? getStoredThemePreference() : null;\n const pendingStoredPreference = isPendingStoredThemePreference({\n canRestoreStoredPreference,\n storedPreference,\n themePreference,\n themePreferences,\n });\n\n useEffect(() => {\n if (\n storedPreference &&\n storedPreference !== themePreference &&\n isThemePreference(storedPreference, themePreferences)\n ) {\n setThemePreferenceState(storedPreference);\n return;\n }\n\n if (pendingStoredPreference) {\n return;\n }\n\n if (!isThemePreference(themePreference, themePreferences)) {\n setThemePreferenceState(\n getDefaultThemePreference(themePreferences, getThemePreferenceMode(themePreference, themePreferences)),\n );\n return;\n }\n\n applyThemePreference(themePreference, themePreferences);\n const hasPendingStoredTheme =\n storedPreference &&\n storedPreference !== themePreference &&\n looksLikeContributedThemePreference(storedPreference) &&\n !isThemePreference(storedPreference, themePreferences);\n if (!hasPendingStoredTheme) storeThemePreference(themePreference);\n }, [pendingStoredPreference, storedPreference, themePreference, themePreferences]);\n\n const setThemePreference = (preference: ThemePreference) => {\n storeThemePreference(preference);\n setThemePreferenceState(preference);\n };\n\n const toggleThemePreference = () => {\n const nextMode = getThemePreferenceMode(themePreference, themePreferences) === \"dark\" ? \"light\" : \"dark\";\n\n setThemePreference(getDefaultThemePreference(themePreferences, nextMode));\n };\n\n if (pendingStoredPreference) return null;\n\n return (\n <ThemePreferenceContext value={{ themePreference, themePreferences, setThemePreference, toggleThemePreference }}>\n {children}\n </ThemePreferenceContext>\n );\n};\n\nexport const useThemePreference = () => {\n const context = useContext(ThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useThemePreference must be used within a ThemePreferenceProvider\");\n }\n\n return context;\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 padding=\"xs\" gap=\"xs\" alignItems=\"center\">\n <Text textStyle=\"label/L/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: null, 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 ?? null));\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 ?? null;\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, 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\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=\"menuitem\"\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={selectedValues.length === 0 ? <Check size={14} /> : undefined}\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=\"menuitem\"\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={isSelected ? <Check size={14} /> : undefined}\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=\"sm\"\n borderWidth=\"1px\"\n width=\"100%\"\n background=\"bg\"\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{ borderColor: \"border.blue\", boxShadow: \"mid\" }}\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=\"xs\"\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 getDropTargetBoxShadow = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n if (isGroup) return \"inset 3px 0 0 var(--chakra-colors-border-accent)\";\n return \"inset 0 2px 0 var(--chakra-colors-border-accent)\";\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 borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n boxShadow={getDropTargetBoxShadow(isDropTarget, canExpand)}\n draggable={item.draggable}\n transition=\"background 120ms ease, box-shadow 120ms ease\"\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 } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\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 return isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.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 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 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, 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 active = filters?.[columnGrouping];\n if (active && active.length > 0) return active;\n const descriptor = findAttribute(attributes, columnGrouping);\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 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 knownIds = new Set(attributes.map((attribute) => attribute.id));\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!knownIds.has(id)) continue;\n if (!values || values.length === 0) continue;\n next[id] = values;\n }\n return next;\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\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\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 first ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return value ?? 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 return rowValues.some((value) => values.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 { ArrowDownUp, 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}) => {\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\">\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 <Text textStyle=\"label/S/regular\">{option.label}</Text>\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\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 <Stack gap=\"2xs\">\n <SectionLabel>Ordering</SectionLabel>\n <HStack gap=\"2xs\">\n <Dropdown\n label=\"Sort by\"\n value={settings.ordering.attributeId}\n options={orderingOptions}\n onSelect={onOrderingAttributeIdChange}\n />\n <IconButton\n mt=\"lg\"\n aria-label=\"Toggle sort direction\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onSortDirectionToggle}\n data-direction={settings.ordering.direction}\n >\n <Icon\n as={ArrowDownUp}\n transform={settings.ordering.direction === \"asc\" ? \"rotate(0deg)\" : \"rotate(180deg)\"}\n />\n </IconButton>\n </HStack>\n </Stack>\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, Box, Button, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Check, Filter } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\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\nconst getActiveFilterCount = (filters: DataRendererFilterState) =>\n Object.values(filters).reduce((sum, values) => sum + (values?.length ?? 0), 0);\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 activeFilterCount = getActiveFilterCount(filters);\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 ref={contentRef} width=\"420px\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <HStack align=\"stretch\" gap=\"0\" minH=\"320px\">\n <Stack minWidth=\"180px\" borderRightWidth=\"1px\" borderColor=\"border.muted\" p=\"sm\" gap=\"2xs\">\n <HStack justifyContent=\"space-between\">\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 </HStack>\n {categories.map((category) => {\n const selectedValues = filters[category.id] ?? [];\n return (\n <Button\n key={category.id}\n variant={activeCategoryId === category.id ? \"subtle\" : \"ghost\"}\n size=\"sm\"\n justifyContent=\"space-between\"\n onClick={() => setActiveCategoryId(category.id)}\n >\n <Text>{category.label}</Text>\n {selectedValues.length > 0 ? (\n <Badge variant=\"subtle\" bg=\"bg.muted\" color=\"fg.muted\">\n {selectedValues.length}\n </Badge>\n ) : null}\n </Button>\n );\n })}\n </Stack>\n\n <Stack flex=\"1\" p=\"sm\" gap=\"sm\">\n {activeCategory ? (\n <>\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/S/medium\">{activeCategory.label}</Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onClearFilter(activeCategory.id)}>\n Clear\n </Button>\n </HStack>\n <Stack gap=\"2xs\">\n {activeCategory.options.map((option) => {\n const checked = (filters[activeCategory.id] ?? []).includes(option.value);\n const count = countsByCategory[activeCategory.id]?.[option.value] ?? 0;\n\n return (\n <Button\n key={option.value}\n role=\"checkbox\"\n aria-checked={checked}\n variant=\"ghost\"\n size=\"sm\"\n width=\"full\"\n px=\"xs\"\n py=\"2xs\"\n height=\"auto\"\n borderRadius=\"sm\"\n justifyContent=\"flex-start\"\n onClick={() => onToggleFilterValue(activeCategory.id, option.value)}\n >\n <Box\n boxSize=\"4\"\n borderWidth=\"1px\"\n borderRadius=\"xs\"\n borderColor={checked ? \"fg\" : \"border\"}\n bg={checked ? \"fg\" : \"transparent\"}\n color={checked ? \"bg\" : \"transparent\"}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {checked ? <Icon as={Check} boxSize=\"3\" /> : null}\n </Box>\n <HStack gap=\"2xs\" justifyContent=\"space-between\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {count}\n </Text>\n </HStack>\n </Button>\n );\n })}\n </Stack>\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 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\n const rowProps = {\n ...rowItem,\n depth: level,\n variant: 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\", boxShadow: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", 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, IconButton, Menu, Skeleton, Stack, Text } 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, 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 { 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 MenuItemContent = (props: { checked?: boolean; icon: ReactNode; label: string }) => {\n const { checked, icon, label } = props;\n\n return (\n <HStack gap=\"2xs\" w=\"full\">\n <Box flexShrink={0}>{icon}</Box>\n <Text flex=\"1\">{label}</Text>\n {checked !== undefined ? (\n <Box w=\"14px\" flexShrink={0}>\n {checked ? <Check size={14} /> : null}\n </Box>\n ) : null}\n </HStack>\n );\n};\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 <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\">\n <Menu.Item value=\"toggle-file-tree\" onClick={() => setTreePanelOpen(!isTreePanelOpen)}>\n <MenuItemContent\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n />\n </Menu.Item>\n <Menu.Separator />\n {filePaths.length > 0 ? (\n <>\n <Menu.Item value=\"nested\" onClick={() => setViewMode(\"nested\")}>\n <MenuItemContent checked={viewMode === \"nested\"} icon={<ListTree size={14} />} label=\"Nested\" />\n </Menu.Item>\n <Menu.Item value=\"flat\" onClick={() => setViewMode(\"flat\")}>\n <MenuItemContent checked={viewMode === \"flat\"} icon={<List size={14} />} label=\"Flat\" />\n </Menu.Item>\n <Menu.Separator />\n </>\n ) : null}\n <Menu.Item value=\"unified\" onClick={() => setDiffViewMode(\"unified\")}>\n <MenuItemContent checked={diffViewMode === \"unified\"} icon={<Rows2 size={14} />} label=\"Unified\" />\n </Menu.Item>\n <Menu.Item value=\"split\" onClick={() => setDiffViewMode(\"split\")}>\n <MenuItemContent\n checked={diffViewMode === \"split\"}\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"expand-all\" disabled={isExpandAllDisabled} onClick={expandAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsUpDown size={14} />} label=\"Expand all\" />\n </Menu.Item>\n <Menu.Item value=\"collapse-all\" disabled={isCollapseAllDisabled} onClick={collapseAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsDownUp size={14} />} label=\"Collapse all\" />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" 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, 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 { CloseButton, Dialog, Input, InputGroup } 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 { ScrollArea } from \"./scroll-area\";\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\nconst paletteInputStateProps = {\n borderColor: \"transparent\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\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 const hasFooter = footerStart || footerEnd;\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\">\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.muted\">\n <InputGroup startElement={resolvedInputIcon}>\n <Input\n ref={inputRef}\n value={query}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n autoComplete=\"off\"\n borderWidth=\"0\"\n borderColor=\"transparent\"\n borderRadius=\"0\"\n h=\"3rem\"\n _hover={paletteInputStateProps}\n _active={paletteInputStateProps}\n _focus={paletteInputStateProps}\n _focusVisible={paletteInputStateProps}\n onChange={(event) => {\n setQuery(event.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n />\n </InputGroup>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n <ScrollArea\n maxH=\"24rem\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </ScrollArea>\n </Dialog.Body>\n {hasFooter ? (\n <Dialog.Footer\n justifyContent=\"space-between\"\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.muted\"\n >\n {footerStart}\n {footerEnd}\n </Dialog.Footer>\n ) : null}\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 } 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 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 id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\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 id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\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 boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nconst searchInputFocusVisibleProps = {\n boxShadow: \"none\",\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 { Avatar, Button, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, FolderIcon } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\n\ninterface SidebarProjectMenuProps {\n name: string;\n projectsLabel: string;\n onSelectProjects: () => void;\n}\n\nexport const SidebarProjectMenu = (props: SidebarProjectMenuProps) => {\n const { name, projectsLabel, onSelectProjects } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button borderRadius=\"0\" variant=\"ghost\" size=\"sm\" width=\"full\" justifyContent=\"flex-start\">\n <HStack gap=\"xs\" minW=\"0\" flex=\"1\">\n <Avatar.Root size=\"2xs\">\n <Avatar.Fallback name={name} background=\"bg.muted\" color=\"fg.muted\" />\n </Avatar.Root>\n <Text textStyle=\"label/S/medium\" truncate>\n {name}\n </Text>\n </HStack>\n <ChevronDown size={14} />\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"240px\" bg=\"bg\">\n <Menu.Item value=\"projects\" asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id=\"projects\"\n label={projectsLabel}\n icon={<Icon as={FolderIcon} boxSize=\"16px\" />}\n onActivate={onSelectProjects}\n />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\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\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\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 checkmark: ReactNode;\n}\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: effective === \"shown\" ? options.checkmark : null,\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 // Locked nodes stay visible and are surfaced as a disabled, checked row.\n const locked = node.canHide === false;\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n isDisabled: locked,\n onClick: locked ? () => {} : () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: locked || effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nexport const buildTreeVisibilityMenuActions = (\n sections: TreeListSection[],\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 section of sections) {\n // Unlabeled sections are structural groupings, not user-facing toggle targets.\n if (section.label) result.push(buildSectionAction(section, sectionOverrides, actions, options));\n const sectionEffective = resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault);\n if (sectionEffective === \"hidden\") continue;\n for (const node of section.nodes) {\n result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n\n result.push({ key: \"__reset-visibility\", label: \"Reset to default\", onClick: actions.onResetAll });\n if (actions.onResetOrder) {\n result.push({ key: \"__reset-order\", label: \"Reset order\", 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 checkmark: 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): 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 onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({ key: \"__reset-tabs\", label: \"Reset to default\", onClick: actions.onResetAll });\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\">\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","boxShadow","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","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","T0","t15","t16","t17","t18","t19","t20","t21","t22","T1","ScrollArea","t23","overscrollBehavior","t24","t25","t26","item_1","bg","isSelected","t27","t28","Content","t29","Positioner","t30","t31","event_2","SearchableActionMenu","action","emptyMenuLabel","keyedTooltip","child","RowActions","context","pointerEvents","RowContent","isExpanded","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","iconPx","iconLabelGap","bb0","labelColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","nodeId","computePaddingLeft","depth","resolveListRowSizing","hasDescription","rowHeight","minHeight","createRowBackgroundProps","selectedBg","_hover","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","defaultThemePreferences","mode","isThemePreference","themePreferences","some","theme","getThemePreferenceMode","preference","getThemePreferenceClassName","getThemePreferenceClassNames","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","replaceAll","removeThemeTokens","el","tokens","Object","keys","style","removeProperty","removeTrackedThemeTokens","tokenPaths","getAttribute","split","setAttribute","applyThemeTokens","entries","setProperty","applyThemePreference","document","root","documentElement","body","option","previousTheme","previousPreference","classList","remove","add","colorScheme","noopStorage","getItem","removeItem","setItem","readLocalStorage","globalThis","localStorage","createBrowserStorage","storage","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getStoredThemePreference","window","storeThemePreference","looksLikeContributedThemePreference","isPendingStoredThemePreference","canRestoreStoredPreference","storedPreference","themePreference","getInitialThemePreference","stored","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","setThemePreferenceState","pendingStoredPreference","setThemePreference","nextMode","toggleThemePreference","useThemePreference","useContext","Error","customTheme","base","inherit","rules","colors","isMonacoTheme","EDITOR_THEME_NAME","useEditorTheme","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","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","DataRendererAttributeBadge","T2","T3","canEdit","isMultiValue","selectedValues","attributeLabel","onClickCapture","onPointerDownCapture","rowInteractionProps","handleOptionChange","handleClearSelection","badgeContent","X","Check","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","getDropTargetBoxShadow","isGroup","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","getEnumOptions","type","kind","getSnapshot","toTitleCase","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","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","filters","active","omitFilterCategory","next","sanitizeSettings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","UNASSIGNED_LABEL","fallbackLabel","labelForGroupKey","getGroupingKey","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","left","right","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","Map","set","get","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","filterRows","activeFilters","every","countFilterValues","counts","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","hasNoneFirst","Button","option_0","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","closeOnOutsidePointerDown","addEventListener","removeEventListener","Settings2","ViewModeIcon","Separator","ArrowDownUp","isActive","getActiveFilterCount","reduce","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","category","activeCategory","activeFilterCount","Filter","category_0","checked","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","createJSONStorage","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","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","top","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","overflowAnchor","getTotalSize","virtualItem","measureElement","start","RESIZE_SEPARATOR_HOVER_STYLE","_before","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","round","position","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","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","schedulePanelWidth","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","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","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","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","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","MenuItemContent","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","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","nextIndex","current_1","selectChangedFilePath","PanelLeftClose","PanelLeftOpen","ListTree","Rows2","SquareSplitHorizontal","ChevronsUpDown","t32","ChevronsDownUp","t33","t34","t35","t36","t37","t38","t39","t40","diffPanel","t41","t42","t43","t44","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","SimpleCard","SimpleCardBody","IntegrationCard","ItemSection","defaultOpen","Collapsible","e","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","ACTIVE_ROW_BG","buildEntryItem","shortcut","buildRows","previousEntry","entryIndex","getActiveRowIndex","activeIndex","PaletteList","emptyLabel","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","paletteInputStateProps","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onQueryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","hasFooter","nonMacModifierLabels","alt","control","ctrl","mod","shift","macModifierLabels","Option","cmd","Command","command","meta","keyLabels","arrowleft","ArrowLeft","arrowright","ArrowRight","getShortcutPlatform","navigator","platform","resolveShortcutDisplayPart","normalized","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","displayItems","remaining","o_0","getDisplayText","handleSelect","updatedValues","v","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","outlineColor","outlineOffset","focusInlinePickerOption","activeElement","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","padding","Body","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","viewportRef","initialWidth","persistedWidth","effectiveWidth","widthCss","flexDirection","SidebarProjectMenu","projectsLabel","onSelectProjects","FolderIcon","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","isNodeVisible","nodeOverrides","filterNodes","changed","filteredChildren","filterVisibleSections","sectionOverrides","filteredNodes","buildSectionAction","effective","checkmark","buildNodeAction","locked","canHide","buildTreeVisibilityMenuActions","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","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","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","seen","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","head","appendChild","textContent","getDefaultFileIconThemePreference","FileIconThemePreferenceContext","getInitialPreference","FileIconThemePreferenceProvider","fileIconThemePreference","setFileIconThemePreference","resolved","activeFileIconTheme","fileIconThemePreferences","useFileIconThemePreference","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/notification-center/notification-center.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/param-editor/param-editor-label.tsx","../src/components/param-editor/param-editor-control-item.tsx","../src/components/param-editor/inputs/action-input.tsx","../src/components/param-editor/inputs/anchor-grid.ts","../src/components/param-editor/param-editor-read-only-value.tsx","../src/components/param-editor/inputs/anchor-grid-input.tsx","../src/components/param-editor/inputs/color-input.tsx","../src/components/param-editor/inputs/date-input.tsx","../src/components/param-editor/inputs/file-accept.ts","../src/components/param-editor/inputs/file-drop-input.tsx","../src/components/param-editor/inputs/horizontal-text-input.tsx","../src/components/primitives/number-input.tsx","../src/components/primitives/slider.tsx","../src/components/param-editor/inputs/number-input.tsx","../src/components/param-editor/inputs/numeric-value.ts","../src/components/param-editor/inputs/range-value.ts","../src/components/param-editor/inputs/slider-marks.tsx","../src/components/param-editor/inputs/range-input.tsx","../src/components/param-editor/inputs/resource-input-chips.tsx","../src/components/param-editor/inputs/resource-input.tsx","../src/components/param-editor/inputs/segmented-input.tsx","../src/components/param-editor/inputs/selection-input.tsx","../src/components/param-editor/inputs/text-input.tsx","../src/components/param-editor/param-editor-inline-group.tsx","../src/components/param-editor/inputs/vector-value.ts","../src/components/param-editor/inputs/vector-input.tsx","../src/components/param-editor/param-editor-field.tsx","../src/components/param-editor/param-editor-section.tsx","../src/components/param-editor/param-editor.tsx","../src/components/param-editor/param-editor-control-list.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/sidebar/sidebar.store.ts","../src/components/sidebar/sidebar-footer.tsx","../src/components/layout/panel-header.constants.ts","../src/components/sidebar/sidebar-header.tsx","../src/components/sidebar/sidebar.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/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.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","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\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 { 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 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 { 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 { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { Tooltip } from \"@/components/primitives/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}>\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, Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { ParamEditorFieldLabel } from \"./param-editor-field-label\";\n\ntype ControlItemOrientation = \"auto\" | \"inline\" | \"stacked\";\n\ninterface ParamEditorControlItemProps {\n name?: string;\n description?: string;\n hideLabel?: boolean;\n fullWidth?: boolean;\n /** `auto` renders inline when compact and stacked when full-width. */\n orientation?: ControlItemOrientation;\n /** Rendered on the label row, right-aligned (e.g. an editable value readout). */\n labelTrailing?: ReactNode;\n children: ReactNode;\n}\n\n// Shared row scaffold for control layouts: a labelled control that renders either\n// inline (label left / control right) or stacked (label above the control).\nexport const ParamEditorControlItem = (props: ParamEditorControlItemProps) => {\n const {\n name,\n description,\n hideLabel = false,\n fullWidth = false,\n orientation = \"auto\",\n labelTrailing,\n children,\n } = props;\n\n const label = hideLabel || !name ? null : <ParamEditorFieldLabel name={name} description={description} />;\n const resolved = orientation === \"auto\" ? (fullWidth ? \"stacked\" : \"inline\") : orientation;\n\n if (resolved === \"stacked\") {\n const header = label || labelTrailing;\n return (\n <Box minW=\"0\">\n {header ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" mb=\"xs\" minW=\"0\">\n {label}\n {labelTrailing}\n </Flex>\n ) : null}\n {children}\n </Box>\n );\n }\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\" minW=\"0\">\n {label}\n <Flex alignItems=\"center\" gap=\"xs\" minW=\"0\">\n {labelTrailing}\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { Button, Flex } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { ActionOption } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\n\ninterface ActionInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue?: string;\n options: ActionOption[];\n onChange: (id: string, value: string) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nexport const ActionInput = (props: ActionInputProps) => {\n const { id, name, description, defaultValue, options, onChange, readOnly } = props;\n const [active, setActive] = useState(defaultValue);\n\n useEffect(() => {\n setActive(defaultValue);\n }, [defaultValue]);\n\n const run = (optionId: string) => {\n setActive(optionId);\n onChange(id, optionId);\n };\n\n const row = (\n <Flex gap=\"xs\" wrap=\"wrap\">\n {options.map((option) => (\n <Button\n key={option.id}\n size=\"xs\"\n variant={active === option.id ? \"subtle\" : \"outline\"}\n disabled={option.disabled || readOnly}\n _hover={{ bg: \"bg.hover\", borderColor: \"border.accent-light\" }}\n _active={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\n onClick={() => run(option.id)}\n >\n {option.name}\n </Button>\n ))}\n </Flex>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n {row}\n </ParamEditorControlItem>\n );\n};\n","import type { AnchorGridValue } from \"../param-editor.types\";\n\n/** The nine anchors in row-major order (top-left → bottom-right). */\nexport const ANCHOR_GRID_VALUES: AnchorGridValue[] = [\n \"top-left\",\n \"top\",\n \"top-right\",\n \"left\",\n \"center\",\n \"right\",\n \"bottom-left\",\n \"bottom\",\n \"bottom-right\",\n];\n\nexport const isAnchorGridValue = (value: unknown): value is AnchorGridValue =>\n typeof value === \"string\" && (ANCHOR_GRID_VALUES as string[]).includes(value);\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, Grid, IconButton } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { AnchorGridValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { ANCHOR_GRID_VALUES } from \"./anchor-grid\";\n\ninterface AnchorGridInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: AnchorGridValue;\n onChange: (id: string, value: AnchorGridValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nexport const AnchorGridInput = (props: AnchorGridInputProps) => {\n const { id, name, description, defaultValue, onChange, readOnly, fullWidth } = props;\n const [value, setValue] = useState<AnchorGridValue>(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const select = (next: AnchorGridValue) => {\n setValue(next);\n onChange(id, next);\n };\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description} fullWidth={fullWidth}>\n <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n const grid = (\n <Grid\n templateColumns=\"repeat(3, 1.5rem)\"\n gap=\"1px\"\n width=\"fit-content\"\n bg=\"border.subtle\"\n p=\"1px\"\n borderRadius=\"sm\"\n overflow=\"hidden\"\n >\n {ANCHOR_GRID_VALUES.map((anchor) => {\n const selected = anchor === value;\n return (\n <IconButton\n key={anchor}\n aria-label={anchor}\n aria-pressed={selected}\n size=\"2xs\"\n variant=\"ghost\"\n bg={selected ? \"fg\" : \"bg\"}\n _hover={{ bg: selected ? \"fg\" : \"bg.muted\" }}\n borderRadius=\"0\"\n onClick={() => select(anchor)}\n >\n <Box boxSize=\"0.375rem\" borderRadius=\"full\" bg={selected ? \"bg\" : \"fg.muted\"} />\n </IconButton>\n );\n })}\n </Grid>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation={fullWidth ? \"stacked\" : \"inline\"}>\n {grid}\n </ParamEditorControlItem>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { type FocusEvent as ReactFocusEvent, 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 [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\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 useEffect(() => {\n if (!open) return;\n\n const isInsidePicker = (target: EventTarget | null) => {\n const node = target as Node;\n return rootRef.current?.contains(node) || contentRef.current?.contains(node);\n };\n\n const handleOutsideInteraction = (event: FocusEvent | PointerEvent) => {\n if (isInsidePicker(event.target)) return;\n\n setOpen(false);\n };\n\n document.addEventListener(\"focusin\", handleOutsideInteraction, true);\n document.addEventListener(\"pointerdown\", handleOutsideInteraction, true);\n document.addEventListener(\"click\", handleOutsideInteraction, true);\n\n return () => {\n document.removeEventListener(\"focusin\", handleOutsideInteraction, true);\n document.removeEventListener(\"pointerdown\", handleOutsideInteraction, true);\n document.removeEventListener(\"click\", handleOutsideInteraction, true);\n };\n }, [open]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n const handleBlur = (event: ReactFocusEvent<HTMLDivElement>) => {\n const root = event.currentTarget;\n\n setTimeout(() => {\n if (!root.contains(root.ownerDocument.activeElement)) setOpen(false);\n });\n };\n\n if (readOnly) {\n const valueElement = (\n <ParamEditorReadOnlyValue>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Box boxSize=\"0.75rem\" borderRadius=\"xs\" 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 open,\n onOpenChange: (details: { open: boolean }) => setOpen(details.open),\n onFocusOutside: () => setOpen(false),\n onInteractOutside: () => setOpen(false),\n onBlur: handleBlur,\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root ref={rootRef} {...rootProps} size=\"sm\" width={fullWidth ? \"100%\" : \"8.75rem\"} maxW=\"100%\">\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} onFocus={() => setOpen(false)} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content ref={contentRef} onBlur={handleBlur}>\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 type { FileDropValue } from \"../param-editor.types\";\n\ninterface AcceptClause {\n kind: \"extension\" | \"mime\" | \"wildcard\";\n value: string;\n}\n\n/** Parse an accept string (\"image/*,.png,image/jpeg\") into normalized clauses. */\nexport const parseAccept = (accept?: string): AcceptClause[] => {\n if (!accept) return [];\n return accept\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter(Boolean)\n .map((entry) => {\n if (entry.startsWith(\".\")) return { kind: \"extension\", value: entry };\n if (entry.endsWith(\"/*\")) return { kind: \"wildcard\", value: entry.slice(0, entry.indexOf(\"/\")) };\n return { kind: \"mime\", value: entry };\n });\n};\n\nexport interface AcceptCandidate {\n name: string;\n mimeType?: string;\n}\n\n/** Whether a file satisfies the accept string. An empty accept matches anything. */\nexport const acceptsFile = (candidate: AcceptCandidate, accept?: string) => {\n const clauses = parseAccept(accept);\n if (clauses.length === 0) return true;\n const name = candidate.name.toLowerCase();\n const mime = candidate.mimeType?.toLowerCase();\n return clauses.some((clause) => {\n if (clause.kind === \"extension\") return name.endsWith(clause.value);\n if (clause.kind === \"wildcard\") return Boolean(mime?.startsWith(`${clause.value}/`));\n return mime === clause.value;\n });\n};\n\ninterface FileMetadataInput {\n name: string;\n type?: string;\n size?: number;\n dataUrl?: string;\n}\n\n/** Build the serializable metadata a file-drop control commits (never a live File). */\nexport const fileDropValueFromFile = (input: FileMetadataInput): FileDropValue => ({\n name: input.name,\n mimeType: input.type || undefined,\n size: input.size,\n dataUrl: input.dataUrl,\n});\n","import { Box, Button, Flex, Icon, Text } from \"@chakra-ui/react\";\nimport { Upload, X } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { FileDropValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { acceptsFile, fileDropValueFromFile } from \"./file-accept\";\n\ninterface FileDropInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: FileDropValue | null;\n accept?: string;\n assetKind?: \"file\" | \"image\";\n onChange: (id: string, value: FileDropValue | null) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst formatSize = (size?: number) => {\n if (!size) return undefined;\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${Math.round(size / 1024)} KB`;\n return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n};\n\nexport const FileDropInput = (props: FileDropInputProps) => {\n const { id, name, description, defaultValue, accept, assetKind = \"file\", onChange, readOnly } = props;\n const [value, setValue] = useState<FileDropValue | null>(defaultValue);\n const [error, setError] = useState<string | null>(null);\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const ingest = (file: File | undefined) => {\n if (!file) return;\n if (!acceptsFile({ name: file.name, mimeType: file.type }, accept)) {\n setError(`${file.name} is not an accepted ${assetKind}`);\n return;\n }\n setError(null);\n const reader = new FileReader();\n reader.onload = () => {\n const dataUrl = typeof reader.result === \"string\" ? reader.result : undefined;\n const next = fileDropValueFromFile({ name: file.name, type: file.type, size: file.size, dataUrl });\n setValue(next);\n onChange(id, next);\n };\n reader.readAsDataURL(file);\n };\n\n const clear = () => {\n setValue(null);\n setError(null);\n onChange(id, null);\n };\n\n const selected = value ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" minW=\"0\" width=\"full\">\n <Flex alignItems=\"center\" gap=\"xs\" minW=\"0\">\n {assetKind === \"image\" && value.dataUrl ? (\n <Box boxSize=\"1.75rem\" borderRadius=\"xs\" bgImage={`url(${value.dataUrl})`} bgSize=\"cover\" flexShrink={0} />\n ) : null}\n <Box minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {value.name}\n </Text>\n {formatSize(value.size) ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {formatSize(value.size)}\n </Text>\n ) : null}\n </Box>\n </Flex>\n {readOnly ? null : (\n <Button size=\"2xs\" variant=\"ghost\" onClick={clear}>\n <X />\n </Button>\n )}\n </Flex>\n ) : null;\n\n const dropZone = (\n <Box\n borderWidth=\"1px\"\n borderStyle=\"dashed\"\n borderColor={error ? \"border.error\" : dragging ? \"border.accent-light\" : \"border\"}\n borderRadius=\"sm\"\n bg={dragging ? \"bg.muted\" : \"bg\"}\n px=\"sm\"\n py=\"md\"\n cursor={readOnly ? \"default\" : \"pointer\"}\n transition=\"border-color 0.2s ease-in-out\"\n boxShadow=\"none\"\n _hover={{ borderColor: error ? \"border.error\" : \"border.accent-light\" }}\n _active={{ borderColor: error ? \"border.error\" : \"border.accent-light\" }}\n _focusWithin={{ borderColor: error ? \"border.error\" : \"border.accent-light\", boxShadow: \"none\" }}\n onClick={() => {\n if (!readOnly) inputRef.current?.click();\n }}\n onDragOver={(event) => {\n if (readOnly) return;\n event.preventDefault();\n setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(event) => {\n if (readOnly) return;\n event.preventDefault();\n setDragging(false);\n ingest(event.dataTransfer.files[0]);\n }}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap=\"2xs\" color=\"fg.muted\">\n <Icon as={Upload} boxSize=\"16px\" />\n <Text textStyle=\"label/XS/regular\">Drop {assetKind} or click to browse</Text>\n </Flex>\n </Box>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n <input ref={inputRef} type=\"file\" accept={accept} hidden onChange={(event) => ingest(event.target.files?.[0])} />\n {value ? selected : dropZone}\n {error ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.error\" mt=\"2xs\">\n {error}\n </Text>\n ) : null}\n </ParamEditorControlItem>\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 HorizontalTextInputProps {\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}\n\nexport const HorizontalTextInput = (props: HorizontalTextInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false } = props;\n const [value, setValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\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 const handleClick = () => {\n if (!readOnly) {\n setIsExpanded(true);\n }\n };\n\n const handleBlur = () => {\n // Only collapse if the value is empty\n if (value.trim().length === 0) {\n setIsExpanded(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n // Allow users to collapse with Escape key\n if (e.key === \"Escape\") {\n setIsExpanded(false);\n e.preventDefault();\n }\n };\n\n if (readOnly) {\n return (\n <Box position=\"relative\" flex=\"1\" minW=\"12.5rem\">\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <ParamEditorReadOnlyValue preserveWhitespace>{value}</ParamEditorReadOnlyValue>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box position=\"relative\" flex=\"1\" minW=\"12.5rem\">\n <Box position=\"relative\" minHeight=\"2rem\">\n {!isExpanded ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" height=\"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 onClick={handleClick}\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 position=\"absolute\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n zIndex=\"10\"\n bg=\"bg\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n borderRadius=\"lg\"\n p=\"2\"\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 _focusWithin={{ borderColor: \"border.accent-light\", boxShadow: \"none\" }}\n >\n {!hideLabel && (\n <Box mb=\"sm\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\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 onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n rows={3}\n resize=\"vertical\"\n autoFocus\n />\n </Box>\n )}\n </Box>\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;\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 height=\"2px\" borderRadius=\"0\" bg=\"bg.muted\">\n <ChakraSlider.Range bg=\"fg\" />\n </ChakraSlider.Track>\n <ChakraSlider.Thumbs\n boxSize=\"0.625rem\"\n bg=\"fg\"\n borderWidth=\"1px\"\n borderColor=\"bg\"\n borderRadius=\"2xs\"\n boxShadow=\"none\"\n transition=\"width 0.12s ease, height 0.12s ease, border-color 0.2s ease-in-out\"\n _hover={{ boxSize: \"0.75rem\", borderColor: \"border.accent-light\" }}\n _active={{ boxSize: \"0.875rem\", borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\n />\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 \"@/components/primitives/number-input\";\nimport { Slider } from \"@/components/primitives/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","/** Clamp `value` into the inclusive range, tolerating an inverted min/max. */\nexport const clampToRange = (value: number, min: number, max: number) => {\n const lower = Math.min(min, max);\n const upper = Math.max(min, max);\n if (value < lower) return lower;\n if (value > upper) return upper;\n return value;\n};\n\n/** Snap `value` to the nearest multiple of `step` measured from `origin`. */\nexport const snapToStep = (value: number, step: number, origin = 0) => {\n if (!(step > 0)) return value;\n const steps = Math.round((value - origin) / step);\n return origin + steps * step;\n};\n\n/** Format a number with an optional unit suffix, trimming float noise. */\nexport const formatUnitValue = (value: number, unit?: string) => {\n const rounded = Number.isInteger(value) ? `${value}` : `${Number(value.toFixed(3))}`;\n return unit ? `${rounded}${unit}` : rounded;\n};\n","import type { RangeValue } from \"../param-editor.types\";\nimport { clampToRange, snapToStep } from \"./numeric-value\";\n\n/** Order both handles and clamp (and optionally snap) them into `[min, max]`. */\nexport const normalizeRange = (value: RangeValue, min: number, max: number, step?: number): RangeValue => {\n const first = clampToRange(value[0], min, max);\n const second = clampToRange(value[1], min, max);\n let start = Math.min(first, second);\n let end = Math.max(first, second);\n if (step && step > 0) {\n start = clampToRange(snapToStep(start, step, min), min, max);\n end = clampToRange(snapToStep(end, step, min), min, max);\n }\n return [start, end];\n};\n\n/** Replace a single handle, keeping the pair ordered. */\nexport const updateRangeHandle = (\n value: RangeValue,\n index: 0 | 1,\n next: number,\n min: number,\n max: number,\n step?: number,\n): RangeValue => {\n const draft: RangeValue = index === 0 ? [next, value[1]] : [value[0], next];\n return normalizeRange(draft, min, max, step);\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\n\ninterface SliderMarksProps {\n count?: number;\n}\n\n// Evenly-spaced tick marks rendered under a slider track. Purely decorative.\nexport const SliderMarks = (props: SliderMarksProps) => {\n const { count } = props;\n if (!count || count < 2) return null;\n const positions = Array.from({ length: count }, (_, index) => index / (count - 1));\n\n return (\n <Flex justifyContent=\"space-between\" mt=\"2xs\" aria-hidden=\"true\">\n {positions.map((position) => (\n <Box key={position} width=\"1px\" height=\"0.375rem\" bg=\"border.subtle\" />\n ))}\n </Flex>\n );\n};\n","import { Box, type SliderValueChangeDetails, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { Slider } from \"@/components/primitives/slider\";\nimport type { RangeValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { formatUnitValue } from \"./numeric-value\";\nimport { normalizeRange } from \"./range-value\";\nimport { SliderMarks } from \"./slider-marks\";\n\ninterface RangeInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: RangeValue;\n min: number;\n max: number;\n step?: number;\n unit?: string;\n markerCount?: number;\n onChange: (id: string, value: RangeValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nexport const RangeInput = (props: RangeInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n min,\n max,\n step = 1,\n unit,\n markerCount,\n onChange,\n readOnly,\n fullWidth,\n } = props;\n\n const [value, setValue] = useState<RangeValue>(() => normalizeRange(defaultValue, min, max, step));\n\n useEffect(() => {\n setValue(normalizeRange(defaultValue, min, max, step));\n }, [defaultValue, min, max, step]);\n\n const label = `${formatUnitValue(value[0], unit)} – ${formatUnitValue(value[1], unit)}`;\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description} fullWidth={fullWidth}>\n <ParamEditorReadOnlyValue>{label}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n const trailing = (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" whiteSpace=\"nowrap\">\n {label}\n </Text>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\" labelTrailing={trailing}>\n <Box>\n <Slider\n size=\"sm\"\n value={value}\n min={min}\n max={max}\n step={step}\n onValueChange={(details: SliderValueChangeDetails) =>\n setValue(normalizeRange(details.value as RangeValue, min, max, step))\n }\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n const next = normalizeRange(details.value as RangeValue, min, max, step);\n setValue(next);\n onChange(id, next);\n }}\n />\n <SliderMarks count={markerCount} />\n </Box>\n </ParamEditorControlItem>\n );\n};\n","import { Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { getIconComponent } from \"../../primitives/icon-color-picker\";\nimport { ResourceBadge } from \"../../primitives/resource-badge\";\nimport type { ResourceOption, ResourceRefValue } from \"../param-editor.types\";\n\nconst optionIcon = (option: ResourceOption) => (\n <Icon as={getIconComponent(option.icon)} boxSize=\"14px\" color={option.color ? `${option.color}.500` : \"fg.muted\"} />\n);\n\nconst openExternal = (href: string) => window.open(href, \"_blank\", \"noreferrer\");\n\nconst copyToClipboard = (text: string) => void navigator.clipboard?.writeText(text).catch(() => undefined);\n\ninterface ResourceChipProps {\n option: ResourceOption;\n onOpenResource?: (ref: ResourceRefValue) => void;\n onRemove?: () => void;\n}\n\n// A chip opens its external href in a new tab, opens its internal ref via the host, or\n// copies its text to the clipboard — whichever the option declares.\nexport const ResourceChip = (props: ResourceChipProps) => {\n const { option, onOpenResource, onRemove } = props;\n\n const handleSelect =\n option.href && option.href.length > 0\n ? () => openExternal(option.href!)\n : option.ref && onOpenResource\n ? () => onOpenResource(option.ref!)\n : option.copyText\n ? () => copyToClipboard(option.copyText!)\n : undefined;\n\n return (\n <ResourceBadge\n fileName={option.name}\n icon={optionIcon(option)}\n size=\"sm\"\n onSelect={handleSelect ? () => handleSelect() : undefined}\n onRemove={onRemove ? () => onRemove() : undefined}\n />\n );\n};\n\ninterface ResourceChipListProps {\n options: ResourceOption[];\n onOpenResource?: (ref: ResourceRefValue) => void;\n onRemove?: (optionId: string) => void;\n emptyText?: string;\n}\n\nexport const ResourceChipList = (props: ResourceChipListProps) => {\n const { options, onOpenResource, onRemove, emptyText } = props;\n\n if (options.length === 0) {\n return (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {emptyText ?? \"None\"}\n </Text>\n );\n }\n\n return (\n <Wrap gap=\"2xs\">\n {options.map((option) => (\n <ResourceChip\n key={option.id}\n option={option}\n onOpenResource={onOpenResource}\n onRemove={onRemove ? () => onRemove(option.id) : undefined}\n />\n ))}\n </Wrap>\n );\n};\n","import { Box, Button, Flex, Icon, Menu } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Plus, Square, SquareCheck, X } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ListRow } from \"../../list-row/list-row\";\nimport { getIconComponent } from \"../../primitives/icon-color-picker\";\nimport type { ResourceOption, ResourceRefValue } from \"../param-editor.types\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ResourceChipList } from \"./resource-input-chips\";\n\ninterface ResourceInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: string | string[];\n options: ResourceOption[];\n onChange: (id: string, value: string | string[]) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n editable?: boolean;\n multiSelect?: boolean;\n placeholder?: string;\n emptyText?: string;\n fullWidth?: boolean;\n}\n\nconst toIds = (value: string | string[]) => {\n if (Array.isArray(value)) return value;\n return value ? [value] : [];\n};\n\nconst resolveOptions = (ids: string[], options: ResourceOption[]) =>\n ids\n .map((id) => options.find((option) => option.id === id))\n .filter((option): option is ResourceOption => Boolean(option));\n\nconst FieldShell = (props: { fullWidth: boolean; label: ReactNode; control: ReactNode }) => {\n const { fullWidth, label, control } = props;\n\n if (fullWidth) {\n return (\n <Box>\n <Box mb=\"xs\">{label}</Box>\n {control}\n </Box>\n );\n }\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {label}\n {control}\n </Flex>\n );\n};\n\ninterface ResourceSelectMenuProps {\n triggerLabel: ReactNode;\n options: ResourceOption[];\n selectedIds: string[];\n multiSelect: boolean;\n name: string;\n emptyText?: string;\n onToggle: (optionId: string) => void;\n onClear: () => void;\n}\n\nconst selectionIndicator = (multiSelect: boolean, selected: boolean) => {\n if (multiSelect)\n return <Icon as={selected ? SquareCheck : Square} boxSize=\"14px\" color={selected ? \"fg\" : \"fg.muted\"} />;\n return selected ? <Icon as={Check} boxSize=\"14px\" color=\"fg\" /> : null;\n};\n\nconst ResourceSelectMenu = (props: ResourceSelectMenuProps) => {\n const { triggerLabel, options, selectedIds, multiSelect, name, emptyText, onToggle, onClear } = props;\n const noneSelected = selectedIds.length === 0;\n\n return (\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"subtle\" gap=\"2xs\" justifyContent=\"space-between\">\n {triggerLabel}\n <Icon as={ChevronDown} boxSize=\"12px\" color=\"fg.muted\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content bg=\"bg\">\n {!multiSelect ? (\n <Menu.Item value=\"__clear\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n role=\"menuitemradio\"\n aria-checked={noneSelected}\n id=\"__clear\"\n label={emptyText ?? `No ${name}`}\n icon={<Icon as={X} boxSize=\"16px\" />}\n iconColor=\"gray.500\"\n isSelected={noneSelected}\n endContent={selectionIndicator(false, noneSelected)}\n onActivate={onClear}\n />\n </Menu.Item>\n ) : null}\n {options.map((option) => {\n const selected = selectedIds.includes(option.id);\n return (\n <Menu.Item key={option.id} value={option.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n role={multiSelect ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={selected}\n id={option.id}\n label={option.name}\n icon={<Icon as={getIconComponent(option.icon)} boxSize=\"16px\" />}\n iconColor={`${option.color ?? \"gray\"}.500`}\n tooltip={option.description ?? undefined}\n isSelected={selected}\n endContent={selectionIndicator(multiSelect, selected)}\n onActivate={() => onToggle(option.id)}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const ResourceInput = (props: ResourceInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n options,\n onChange,\n onOpenResource,\n readOnly,\n editable = false,\n multiSelect = false,\n placeholder,\n emptyText,\n fullWidth = false,\n } = props;\n\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const emitChange = (next: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n onChange(id, next);\n };\n\n // Debounce multi-select toggles so a burst of menu clicks makes one update call.\n const scheduleChange = (next: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, next), 540);\n };\n\n const selectedIds = toIds(value);\n const selectedOptions = resolveOptions(selectedIds, options);\n const interactive = editable && !readOnly;\n\n const label = <ParamEditorLabel name={name} description={description} />;\n\n if (!interactive) {\n return (\n <FieldShell\n fullWidth={fullWidth}\n label={label}\n control={<ResourceChipList options={selectedOptions} onOpenResource={onOpenResource} emptyText={emptyText} />}\n />\n );\n }\n\n const toggleOption = (optionId: string) => {\n if (multiSelect) {\n const next = selectedIds.includes(optionId)\n ? selectedIds.filter((entry) => entry !== optionId)\n : [...selectedIds, optionId];\n setValue(next);\n scheduleChange(next);\n return;\n }\n setValue(optionId);\n emitChange(optionId);\n };\n\n const removeOption = (optionId: string) => {\n const next = selectedIds.filter((entry) => entry !== optionId);\n setValue(next);\n scheduleChange(next);\n };\n\n const clearSelection = () => {\n const next = multiSelect ? [] : \"\";\n setValue(next);\n emitChange(next);\n };\n\n if (multiSelect) {\n const control = (\n <Flex direction=\"column\" gap=\"2xs\" align=\"flex-start\" minW=\"0\">\n {selectedOptions.length > 0 ? (\n <ResourceChipList\n options={selectedOptions}\n onOpenResource={onOpenResource}\n onRemove={removeOption}\n emptyText={emptyText}\n />\n ) : null}\n <ResourceSelectMenu\n triggerLabel={\n <Flex align=\"center\" gap=\"2xs\">\n <Icon as={Plus} boxSize=\"12px\" />\n {placeholder ?? \"Add\"}\n </Flex>\n }\n options={options}\n selectedIds={selectedIds}\n multiSelect\n name={name}\n emptyText={emptyText}\n onToggle={toggleOption}\n onClear={clearSelection}\n />\n </Flex>\n );\n\n return <FieldShell fullWidth={fullWidth} label={label} control={control} />;\n }\n\n const selected = selectedOptions[0];\n const triggerLabel = selected ? (\n <Flex align=\"center\" gap=\"2xs\" minW=\"0\">\n <Icon\n as={getIconComponent(selected.icon)}\n boxSize=\"14px\"\n color={selected.color ? `${selected.color}.500` : \"fg.muted\"}\n />\n {selected.name}\n </Flex>\n ) : (\n (placeholder ?? \"Select\")\n );\n\n return (\n <FieldShell\n fullWidth={fullWidth}\n label={label}\n control={\n <ResourceSelectMenu\n triggerLabel={triggerLabel}\n options={options}\n selectedIds={selectedIds}\n multiSelect={false}\n name={name}\n emptyText={emptyText}\n onToggle={toggleOption}\n onClear={clearSelection}\n />\n }\n />\n );\n};\n","import { Box, Button, Group } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { SegmentedOption } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface SegmentedInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: string;\n options: SegmentedOption[];\n variant?: \"default\" | \"dots\";\n onChange: (id: string, value: string) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nexport const SegmentedInput = (props: SegmentedInputProps) => {\n const { id, name, description, defaultValue, options, variant = \"default\", onChange, readOnly, fullWidth } = props;\n const [value, setValue] = useState(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const select = (next: string) => {\n setValue(next);\n onChange(id, next);\n };\n\n const selectedName = options.find((option) => option.id === value)?.name ?? value;\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description} fullWidth={fullWidth}>\n <ParamEditorReadOnlyValue>{selectedName}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n const group = (\n <Group\n attached\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border\"\n borderRadius=\"xs\"\n overflow=\"hidden\"\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{ borderColor: \"border.accent-light\" }}\n _active={{ borderColor: \"border.accent-light\" }}\n _focusWithin={{ borderColor: \"border.accent-light\", boxShadow: \"none\" }}\n >\n {options.map((option) => {\n const selected = option.id === value;\n return (\n <Button\n key={option.id}\n flex=\"1\"\n size=\"xs\"\n variant={selected ? \"subtle\" : \"ghost\"}\n borderRadius=\"0\"\n aria-pressed={selected}\n onClick={() => select(option.id)}\n >\n {variant === \"dots\" ? (\n <Box boxSize=\"0.5rem\" borderRadius=\"full\" bg={option.indicatorColor ?? \"fg.muted\"} mr=\"1\" />\n ) : null}\n {option.name}\n </Button>\n );\n })}\n </Group>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n {group}\n </ParamEditorControlItem>\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\" color={selected ? \"fg\" : \"fg.muted\"} />\n ) : selected ? (\n <Icon as={Check} boxSize=\"14px\" color=\"fg\" />\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 textStyle=\"label/S/regular\"\n width=\"100%\"\n _hover={{ bg: \"bg.hover\", borderColor: \"border.accent-light\" }}\n _active={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _expanded={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\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=\"full-width\"\n role={multiSelect ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected(opt.id)}\n id={opt.id}\n isSelected={isSelected(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\n size=\"sm\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={readOnly}\n textStyle=\"label/S/regular\"\n _hover={{ bg: \"bg.hover\", borderColor: \"border.accent-light\" }}\n _active={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _expanded={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\n >\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=\"full-width\"\n role={multiSelect ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected(opt.id)}\n id={opt.id}\n isSelected={isSelected(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 { Flex, type FlexProps } from \"@chakra-ui/react\";\n\ninterface ParamEditorInlineGroupProps extends FlexProps {}\n\n// A horizontal row of controls that share a line (e.g. paired x/y inputs).\nexport const ParamEditorInlineGroup = (props: ParamEditorInlineGroupProps) => {\n const { children, ...rest } = props;\n\n return (\n <Flex alignItems=\"center\" gap=\"xs\" minW=\"0\" {...rest}>\n {children}\n </Flex>\n );\n};\n","import type { VectorValue } from \"../param-editor.types\";\nimport { clampToRange } from \"./numeric-value\";\n\nexport interface VectorBounds {\n min?: number;\n max?: number;\n}\n\nconst clampAxis = (value: number, bounds: VectorBounds) => {\n if (bounds.min === undefined && bounds.max === undefined) return value;\n const min = bounds.min ?? Number.NEGATIVE_INFINITY;\n const max = bounds.max ?? Number.POSITIVE_INFINITY;\n return clampToRange(value, min, max);\n};\n\n/** Update a single axis without dropping the other, clamping into optional bounds. */\nexport const updateVectorAxis = (\n value: VectorValue,\n axis: \"x\" | \"y\",\n next: number,\n bounds: VectorBounds = {},\n): VectorValue => {\n const clamped = clampAxis(next, bounds);\n return axis === \"x\" ? { x: clamped, y: value.y } : { x: value.x, y: clamped };\n};\n","import { Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { VectorValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorInlineGroup } from \"../param-editor-inline-group\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { NumberInput } from \"./number-input\";\nimport { updateVectorAxis } from \"./vector-value\";\n\ninterface VectorInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: VectorValue;\n xLabel?: string;\n yLabel?: string;\n min?: number;\n max?: number;\n step?: number;\n onChange: (id: string, value: VectorValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\ninterface VectorAxisFieldProps {\n label: string;\n fieldId: string;\n value: number;\n min?: number;\n max?: number;\n step?: number;\n onCommit: (value: number) => void;\n}\n\n// A single axis: the shared NumberInput (label/slider hidden) prefixed with its axis letter.\nconst VectorAxisField = (props: VectorAxisFieldProps) => {\n const { label, fieldId, value, min, max, step, onCommit } = props;\n\n return (\n <Flex alignItems=\"center\" gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" width=\"1rem\" flexShrink={0}>\n {label}\n </Text>\n <NumberInput\n id={fieldId}\n name={label}\n description=\"\"\n defaultValue={value}\n min={min}\n max={max}\n step={step}\n hideLabel\n hideSlider\n fullWidth\n onChange={(_, next) => onCommit(next)}\n />\n </Flex>\n );\n};\n\nexport const VectorInput = (props: VectorInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n xLabel = \"X\",\n yLabel = \"Y\",\n min,\n max,\n step = 1,\n onChange,\n readOnly,\n } = props;\n const [value, setValue] = useState<VectorValue>(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const commitAxis = (axis: \"x\" | \"y\", next: number) => {\n const updated = updateVectorAxis(value, axis, next, { min, max });\n setValue(updated);\n onChange(id, updated);\n };\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description}>\n <ParamEditorReadOnlyValue>{`${value.x}, ${value.y}`}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n <ParamEditorInlineGroup>\n <VectorAxisField\n label={xLabel}\n fieldId={`${id}.x`}\n value={value.x}\n min={min}\n max={max}\n step={step}\n onCommit={(next) => commitAxis(\"x\", next)}\n />\n <VectorAxisField\n label={yLabel}\n fieldId={`${id}.y`}\n value={value.y}\n min={min}\n max={max}\n step={step}\n onCommit={(next) => commitAxis(\"y\", next)}\n />\n </ParamEditorInlineGroup>\n </ParamEditorControlItem>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ActionInput } from \"./inputs/action-input\";\nimport { AnchorGridInput } from \"./inputs/anchor-grid-input\";\nimport { ColorInput } from \"./inputs/color-input\";\nimport { DateInput } from \"./inputs/date-input\";\nimport { FileDropInput } from \"./inputs/file-drop-input\";\nimport { NumberInput } from \"./inputs/number-input\";\nimport { RangeInput } from \"./inputs/range-input\";\nimport { ResourceInput } from \"./inputs/resource-input\";\nimport { SegmentedInput } from \"./inputs/segmented-input\";\nimport { SelectionInput } from \"./inputs/selection-input\";\nimport { TextInput } from \"./inputs/text-input\";\nimport { VectorInput } from \"./inputs/vector-input\";\nimport type { Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface ParamEditorFieldProps {\n param: Param;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => 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\nconst PropertyField = (props: { param: Extract<Param, { type: \"property\" }>; fullWidth?: boolean }) => {\n const { param, fullWidth } = props;\n\n if (fullWidth) {\n return (\n <Box>\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 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\nexport const ParamEditorField = (props: ParamEditorFieldProps) => {\n const { param, defaultValues, onChange, onOpenResource, readOnly, fullWidth = false } = props;\n const common = { id: param.id, readOnly, onChange, fullWidth };\n\n switch (param.type) {\n case \"number\":\n return (\n <NumberInput\n {...common}\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 />\n );\n case \"text\":\n return (\n <TextInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n />\n );\n case \"selection\":\n return (\n <SelectionInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n />\n );\n case \"date\":\n return (\n <DateInput\n {...common}\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 />\n );\n case \"color\":\n return (\n <ColorInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n />\n );\n case \"property\":\n return <PropertyField param={param} fullWidth={fullWidth} />;\n case \"resource\":\n return (\n <ResourceInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n multiSelect={param.multiSelect}\n editable={param.editable}\n placeholder={param.placeholder}\n emptyText={param.emptyText}\n onOpenResource={onOpenResource}\n />\n );\n case \"range\":\n return (\n <RangeInput\n {...common}\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 unit={param.unit}\n markerCount={param.markerCount}\n />\n );\n case \"segmented\":\n return (\n <SegmentedInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n variant={param.variant}\n />\n );\n case \"actions\":\n return (\n <ActionInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n />\n );\n case \"anchorGrid\":\n return (\n <AnchorGridInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n />\n );\n case \"vector\":\n return (\n <VectorInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n xLabel={param.xLabel}\n yLabel={param.yLabel}\n min={param.min}\n max={param.max}\n step={param.step}\n />\n );\n case \"fileDrop\":\n return (\n <FileDropInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n accept={param.accept}\n assetKind={param.assetKind}\n />\n );\n default:\n return null;\n }\n};\n","import { Box, Button, Collapsible, Flex, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\nimport type { Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorField } from \"./param-editor-field\";\n\ninterface ParamEditorSectionProps {\n title?: string;\n description?: string;\n params: Param[];\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n isFirst?: boolean;\n}\n\nconst ParamEditorSectionTitle = (props: { title: string; description?: string }) => {\n const { title, description } = props;\n\n return (\n <Stack gap=\"2xs\" minW=\"0\" textAlign=\"left\">\n <Text textStyle=\"label/M/medium\" color=\"fg\" truncate>\n {title}\n </Text>\n {description ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" lineClamp={2}>\n {description}\n </Text>\n ) : null}\n </Stack>\n );\n};\n\nconst ParamEditorSectionHeader = (props: {\n title: string;\n description?: string;\n open: boolean;\n collapsible?: boolean;\n onToggle: () => void;\n}) => {\n const { title, description, open, collapsible, onToggle } = props;\n\n if (!collapsible) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2.25rem\" px=\"sm\" py=\"xs\">\n <ParamEditorSectionTitle title={title} description={description} />\n </Flex>\n );\n }\n\n return (\n <Button\n aria-expanded={open}\n borderRadius=\"0\"\n height=\"auto\"\n justifyContent=\"space-between\"\n minHeight=\"2.25rem\"\n onClick={onToggle}\n px=\"sm\"\n py=\"xs\"\n size=\"xs\"\n variant=\"ghost\"\n width=\"full\"\n _expanded={{ bg: \"transparent\" }}\n >\n <ParamEditorSectionTitle title={title} description={description} />\n <Icon\n as={ChevronDown}\n boxSize=\"14px\"\n color=\"fg.muted\"\n flexShrink={0}\n transform={open ? \"rotate(0deg)\" : \"rotate(-90deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Button>\n );\n};\n\nconst ParamEditorSectionBody = (props: Omit<ParamEditorSectionProps, \"title\" | \"description\" | \"collapsible\">) => {\n const { params, defaultValues, onChange, onOpenResource, readOnly, fullWidth, defaultCollapsed, isFirst } = props;\n\n return (\n <Stack gap=\"0\" py={defaultCollapsed || isFirst ? \"2xs\" : \"xs\"}>\n {params.map((param) => (\n <Box key={param.id} px=\"sm\" py=\"xs\">\n <ParamEditorField\n param={param}\n defaultValues={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n />\n </Box>\n ))}\n </Stack>\n );\n};\n\nexport const ParamEditorSection = (props: ParamEditorSectionProps) => {\n const {\n title,\n description,\n params,\n defaultValues,\n onChange,\n onOpenResource,\n readOnly,\n fullWidth,\n collapsible,\n defaultCollapsed = false,\n isFirst = false,\n } = props;\n const [open, setOpen] = useState(!defaultCollapsed);\n const hasTitle = Boolean(title);\n const canCollapse = Boolean(hasTitle && collapsible);\n const contentOpen = canCollapse ? open : true;\n\n return (\n <Stack as=\"section\" gap=\"0\" borderTopWidth={isFirst ? \"0\" : \"1px\"} borderColor=\"border.subtle\" minW=\"0\">\n {title ? (\n <ParamEditorSectionHeader\n title={title}\n description={description}\n open={contentOpen}\n collapsible={canCollapse}\n onToggle={() => setOpen((current) => !current)}\n />\n ) : null}\n <Collapsible.Root open={contentOpen}>\n <Collapsible.Content>\n <ParamEditorSectionBody\n params={params}\n defaultValues={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n defaultCollapsed={defaultCollapsed}\n isFirst={isFirst}\n />\n </Collapsible.Content>\n </Collapsible.Root>\n </Stack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorSection } from \"./param-editor-section\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const { params = [], groups = [], defaultValues = {}, onChange, onOpenResource, readOnly, fullWidth = false } = props;\n const handleChange = onChange ?? (() => undefined);\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"0\">\n {params.length > 0 ? (\n <ParamEditorSection\n params={params}\n defaultValues={defaultValues}\n onChange={handleChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n isFirst\n />\n ) : null}\n {groups.map((group, index) => (\n <ParamEditorSection\n key={group.id}\n title={group.title}\n description={group.description}\n params={group.params}\n defaultValues={defaultValues}\n onChange={handleChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n collapsible={group.collapsible}\n defaultCollapsed={group.defaultCollapsed}\n isFirst={params.length === 0 && index === 0}\n />\n ))}\n </Stack>\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 { 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 { 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 \"@/components/layout/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 \"@/components/primitives/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.subtle\"\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 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 <SidebarFooter>{footer}</SidebarFooter>\n </Flex>\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 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 \"@/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 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 \"@/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","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","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","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","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","ParamEditorLabel","CircleHelp","ParamEditorControlItem","hideLabel","fullWidth","orientation","labelTrailing","ParamEditorFieldLabel","ActionInput","readOnly","active","setActive","optionId","run","disabled","ANCHOR_GRID_VALUES","isAnchorGridValue","ParamEditorReadOnlyValue","boxProps","preserveWhitespace","AnchorGridInput","setValue","next","select","anchor","selected","Grid","grid","ColorInput","setOpen","rootRef","contentRef","timeoutRef","nextColor","scheduleChange","isInsidePicker","node","contains","handleOutsideInteraction","addEventListener","removeEventListener","newColor","event_0","root","ownerDocument","handleBlur","valueElement","parseColor","details_0","toString","onOpenChange","onFocusOutside","onInteractOutside","onBlur","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","parseAccept","accept","endsWith","acceptsFile","clauses","mime","mimeType","some","clause","fileDropValueFromFile","size","dataUrl","formatSize","round","toFixed","FileDropInput","assetKind","setError","dragging","setDragging","file","reader","FileReader","onload","result","readAsDataURL","ingest","clear","click","dataTransfer","files","Upload","dropZone","event_1","HorizontalTextInput","isExpanded","setIsExpanded","NumberInputRoot","React","ChakraNumberInput","NumberInputField","Slider","ChakraSlider","boxSize","NumberInput","hideSlider","showSlider","useFullWidthLayout","Number","isNaN","valueAsNumber","next_0","details_1","details_2","clampToRange","lower","upper","snapToStep","origin","formatUnitValue","unit","rounded","isInteger","normalizeRange","first","second","end","SliderMarks","_","positions","position","RangeInput","markerCount","trailing","optionIcon","getIconComponent","openExternal","href","window","copyToClipboard","text","clipboard","writeText","catch","ResourceChip","onOpenResource","onRemove","copyText","handleSelect","ResourceBadge","ResourceChipList","emptyText","Wrap","toIds","resolveOptions","ids","FieldShell","selectionIndicator","multiSelect","SquareCheck","Square","ResourceSelectMenu","triggerLabel","selectedIds","onToggle","onClear","noneSelected","ChevronDown","Menu","ResourceInput","editable","emitChange","selectedOptions","interactive","toggleOption","next_1","removeOption","optionId_0","next_2","entry_0","clearSelection","next_3","Plus","SegmentedInput","selectedName","option_0","indicatorColor","Group","SelectionInput","selectedValues","id_0","o","remaining","o_0","getDisplayText","currentValues","updatedValues","v","opt_0","opt","opt_1","TextInput","singleLine","e_3","ParamEditorInlineGroup","clampAxis","bounds","NEGATIVE_INFINITY","POSITIVE_INFINITY","updateVectorAxis","axis","clamped","x","y","VectorAxisField","fieldId","onCommit","VectorInput","xLabel","yLabel","updated","commitAxis","resolveDefaultValue","defaultValues","paramId","PropertyField","param","ParamEditorField","common","ParamEditorSectionTitle","ParamEditorSectionHeader","collapsible","ParamEditorSectionBody","params","defaultCollapsed","isFirst","ParamEditorSection","canCollapse","contentOpen","ParamEditor","ParamEditorControlList","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","separatorGap","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","ErrorBoundary","Component","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","render","ErrorFallback","message","AbsoluteCenter","SimpleCard","SimpleCardBody","IntegrationCard","version","category","actionLabel","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","md","Spinner","paddingEnd","DEFAULT_SNAPSHOT","expandedSections","expandedNodes","SIDEBAR_STORE_NAMESPACE","toStorageName","storageKey","toggleId","values","setExpanded","expanded","getPersistedSnapshot","createSidebarStore","initialState","snapshot","createStore","persist","set","openSidebar","closeSidebar","toggleSidebar","toggleSection","sectionId","toggleNode","nodeId","setSectionExpanded","setNodeExpanded","setWidth","reset","storage","createJSONStorage","createBrowserStorage","partialize","sidebarStoreRegistry","Map","getSidebarStore","existingStore","get","store","useSidebarStore","selector","useStore","SidebarFooter","PANEL_HEADER_HEIGHT","SidebarHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","clamp","resolveInitialWidth","defaultWidth","parsed","parseInt","Sidebar","sections","activeNodeId","backgroundContextActions","footer","closable","defaultExpandedSections","onNavigate","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","nodeOverrides","filterNodes","nodes","changed","filteredChildren","filterVisibleNodes","filterVisibleSections","sectionOverrides","section","filteredNodes","visibilityEndContent","effective","visibleIcon","hiddenIcon","buildSectionAction","onToggleSection","buildNodeAction","onToggleNode","buildTreeVisibilityMenuActions","headerNodes","footerNodes","resetIcon","separatorBefore","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","getIcon","nonCloseableCount","contributionId","onToggleTab","ActionDropdown","toggleAction","TagEditorRow","actionOptions","colorOptions","iconOptions","isSaving","showDefault","showIcons","onActionsChange","onColorChange","onIconChange","onNameChange","onSetDefault","attributes","listeners","setNodeRef","isDragging","useSortable","CSS","Transform","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","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","bySortOrder","left","right","localeCompare","toEditorValues","toEditorValue","sort","findOriginalValue","draft","hasTagValueChanges","drafts","deletedIds","valueNeedsUpdate","original","errorMessage","Error","String","TagSettingsPanel","errorTitle","loadingText","loadedValues","loadError","editorProps","setDrafts","setDeletedIds","setIsSaving","saveError","setSaveError","handleSave","handleDeleteValue","handleCancel","sectionOrder","nodeOrderBySection","dedupe","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","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","FileIconThemePreferenceContext","createContext","getInitialPreference","stored","getItem","FileIconThemePreferenceProvider","themePreferences","fileIconThemePreference","setFileIconThemePreference","resolved","setItem","activeFileIconTheme","fileIconThemePreferences","useFileIconThemePreference","context","useContext","readDefaultExport","module","default","installPrismGlobal","globalScope","globalThis","Prism","prismModule","resolveFileIconElement","glyph","fontSize","lineHeight","getFileTypeIcon"],"mappings":"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"}