@pstdio/ui 0.15.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/{MermaidComponent-DBJsTOmj.js → MermaidComponent-BCMQqPqu.js} +11 -11
  2. package/dist/{MermaidComponent-DBJsTOmj.js.map → MermaidComponent-BCMQqPqu.js.map} +1 -1
  3. package/dist/browser-storage-BinyFNJX.js +40 -0
  4. package/dist/browser-storage-BinyFNJX.js.map +1 -0
  5. package/dist/chat-ui.js +1832 -1275
  6. package/dist/chat-ui.js.map +1 -1
  7. package/dist/checkbox-B2zYVemL.js +70 -0
  8. package/dist/checkbox-B2zYVemL.js.map +1 -0
  9. package/dist/components/chat-ui/components/ai-conversation.d.ts +1 -1
  10. package/dist/components/chat-ui/components/ai-message.d.ts +1 -1
  11. package/dist/components/chat-ui/components/ai-response.d.ts +0 -1
  12. package/dist/components/chat-ui/components/attachment-list.d.ts +1 -1
  13. package/dist/components/chat-ui/components/auto-scroll.d.ts +27 -0
  14. package/dist/components/chat-ui/components/chat-input-actions.d.ts +1 -0
  15. package/dist/components/chat-ui/components/chat-input.d.ts +8 -2
  16. package/dist/components/chat-ui/components/chat-message-animation.d.ts +22 -0
  17. package/dist/components/chat-ui/components/chat-panel.d.ts +11 -5
  18. package/dist/components/chat-ui/components/composer-constants.d.ts +1 -0
  19. package/dist/components/chat-ui/components/conversation-browse.d.ts +22 -0
  20. package/dist/components/chat-ui/components/message-types.d.ts +14 -0
  21. package/dist/components/chat-ui/components/queued-follow-up-list-state.d.ts +4 -0
  22. package/dist/components/chat-ui/components/queued-follow-up-list.d.ts +11 -0
  23. package/dist/components/chat-ui/components/timeline.d.ts +5 -2
  24. package/dist/components/chat-ui/components/working-indicator.d.ts +9 -0
  25. package/dist/components/chat-ui/components/workspace-hub.d.ts +8 -1
  26. package/dist/components/chat-ui/index.d.ts +4 -2
  27. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +0 -1
  28. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +4 -14
  29. package/dist/components/chat-ui/tool-rendering/question-prompt.d.ts +9 -0
  30. package/dist/components/chat-ui/tool-rendering/shared.d.ts +1 -1
  31. package/dist/components/chat-ui/tool-rendering/types.d.ts +1 -2
  32. package/dist/components/command-palette/index.d.ts +4 -0
  33. package/dist/components/data-table/build-columns.d.ts +13 -2
  34. package/dist/components/data-table/categorical-color-cell.d.ts +8 -0
  35. package/dist/components/data-table/color-cell-style.d.ts +13 -0
  36. package/dist/components/data-table/color-scale-cell.d.ts +7 -0
  37. package/dist/components/data-table/data-table-column-menu.d.ts +12 -0
  38. package/dist/components/data-table/data-table-header.d.ts +18 -0
  39. package/dist/components/data-table/data-table-stat-chart.d.ts +21 -0
  40. package/dist/components/data-table/data-table-state.d.ts +27 -0
  41. package/dist/components/data-table/data-table-stats-row.d.ts +11 -0
  42. package/dist/components/data-table/data-table-stats.d.ts +19 -0
  43. package/dist/components/data-table/data-table-table-parts.d.ts +21 -0
  44. package/dist/components/data-table/data-table.story-descriptions.d.ts +6 -0
  45. package/dist/components/data-table/data-table.story-fixtures.d.ts +6 -0
  46. package/dist/components/data-table/friendly-json-display.d.ts +31 -0
  47. package/dist/components/data-table/index.d.ts +3 -1
  48. package/dist/components/data-table/json-cell.d.ts +6 -0
  49. package/dist/components/data-table/pagination-footer.d.ts +4 -1
  50. package/dist/components/data-table/selection-toolbar.d.ts +3 -1
  51. package/dist/components/data-table/types.d.ts +72 -0
  52. package/dist/components/diff-viewer/diff-card.d.ts +1 -0
  53. package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +0 -19
  54. package/dist/components/diff-viewer/diff-drawer.d.ts +1 -0
  55. package/dist/components/diff-viewer/index.d.ts +2 -0
  56. package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +7 -3
  57. package/dist/components/internal/style-guide.d.ts +14 -0
  58. package/dist/components/internal/token-editor-controls.d.ts +8 -0
  59. package/dist/components/internal/token-editor-data.d.ts +40 -0
  60. package/dist/components/internal/token-editor-state.d.ts +22 -0
  61. package/dist/components/{data-renderer → kanban-renderer}/display-menu.d.ts +4 -4
  62. package/dist/components/{data-renderer → kanban-renderer}/filter-menu.d.ts +3 -3
  63. package/dist/components/kanban-renderer/index.d.ts +19 -0
  64. package/dist/components/kanban-renderer/kanban-renderer-attribute-badge.d.ts +7 -0
  65. package/dist/components/{data-renderer/data-renderer-board-column-header.d.ts → kanban-renderer/kanban-renderer-board-column-header.d.ts} +2 -2
  66. package/dist/components/{data-renderer/data-renderer-board-group-section.d.ts → kanban-renderer/kanban-renderer-board-group-section.d.ts} +2 -2
  67. package/dist/components/{data-renderer/data-renderer-board-move.d.ts → kanban-renderer/kanban-renderer-board-move.d.ts} +3 -3
  68. package/dist/components/{data-renderer/data-renderer-board.d.ts → kanban-renderer/kanban-renderer-board.d.ts} +16 -15
  69. package/dist/components/{data-renderer/data-renderer-card.d.ts → kanban-renderer/kanban-renderer-card.d.ts} +5 -4
  70. package/dist/components/{data-renderer/data-renderer-content.d.ts → kanban-renderer/kanban-renderer-content.d.ts} +8 -8
  71. package/dist/components/kanban-renderer/kanban-renderer-create-dialog.d.ts +12 -0
  72. package/dist/components/kanban-renderer/kanban-renderer-create-field.d.ts +10 -0
  73. package/dist/components/kanban-renderer/kanban-renderer-grouping.d.ts +23 -0
  74. package/dist/components/{data-renderer/data-renderer-helpers.d.ts → kanban-renderer/kanban-renderer-helpers.d.ts} +15 -15
  75. package/dist/components/kanban-renderer/kanban-renderer-list-items.d.ts +25 -0
  76. package/dist/components/kanban-renderer/kanban-renderer-list.d.ts +43 -0
  77. package/dist/components/{data-renderer/data-renderer-story-fixtures.d.ts → kanban-renderer/kanban-renderer-story-fixtures.d.ts} +3 -2
  78. package/dist/components/kanban-renderer/kanban-renderer-toolbar.d.ts +15 -0
  79. package/dist/components/kanban-renderer/kanban-renderer-view-bar.d.ts +14 -0
  80. package/dist/components/kanban-renderer/kanban-renderer-views.d.ts +12 -0
  81. package/dist/components/{data-renderer/data-renderer.d.ts → kanban-renderer/kanban-renderer.d.ts} +12 -9
  82. package/dist/components/{data-renderer → kanban-renderer}/types.d.ts +51 -14
  83. package/dist/components/kanban-renderer/use-kanban-renderer-store.d.ts +78 -0
  84. package/dist/components/layout/index.d.ts +7 -0
  85. package/dist/components/layout/panel-header.constants.d.ts +3 -0
  86. package/dist/components/{resizable-split-layout.d.ts → layout/resizable-split-layout.d.ts} +3 -2
  87. package/dist/components/layout/resizable-split-layout.geometry.d.ts +56 -0
  88. package/dist/components/{resizable-split-layout.handle.d.ts → layout/resizable-split-layout.handle.d.ts} +6 -2
  89. package/dist/components/layout/resizable-split-layout.panels.d.ts +25 -0
  90. package/dist/components/list-row/list-row-actions.d.ts +1 -0
  91. package/dist/components/list-row/list-row-content.d.ts +7 -0
  92. package/dist/components/list-row/list-row.types.d.ts +4 -1
  93. package/dist/components/overlays/attached-menu.d.ts +6 -0
  94. package/dist/components/overlays/attachment-chip.d.ts +13 -0
  95. package/dist/components/overlays/index.d.ts +16 -0
  96. package/dist/components/{resource-context-menu.d.ts → overlays/resource-context-menu.d.ts} +13 -1
  97. package/dist/components/{search-modal-content.d.ts → overlays/search-modal-content.d.ts} +1 -1
  98. package/dist/components/{searchable-menu.d.ts → overlays/searchable-menu.d.ts} +1 -1
  99. package/dist/components/param-editor/index.d.ts +24 -0
  100. package/dist/components/param-editor/inputs/action-input.d.ts +13 -0
  101. package/dist/components/param-editor/inputs/anchor-grid-input.d.ts +12 -0
  102. package/dist/components/param-editor/inputs/anchor-grid.d.ts +4 -0
  103. package/dist/components/param-editor/inputs/file-accept.d.ts +22 -0
  104. package/dist/components/param-editor/inputs/file-drop-input.d.ts +14 -0
  105. package/dist/components/param-editor/inputs/numeric-value.d.ts +6 -0
  106. package/dist/components/param-editor/inputs/range-input.d.ts +17 -0
  107. package/dist/components/param-editor/inputs/range-value.d.ts +5 -0
  108. package/dist/components/param-editor/inputs/resource-input-chips.d.ts +15 -0
  109. package/dist/components/param-editor/inputs/resource-input.d.ts +18 -0
  110. package/dist/components/param-editor/inputs/segmented-input.d.ts +14 -0
  111. package/dist/components/param-editor/{selection-input.d.ts → inputs/selection-input.d.ts} +6 -6
  112. package/dist/components/param-editor/inputs/selection-menu.d.ts +29 -0
  113. package/dist/components/param-editor/inputs/slider-marks.d.ts +5 -0
  114. package/dist/components/param-editor/inputs/vector-input.d.ts +17 -0
  115. package/dist/components/param-editor/inputs/vector-value.d.ts +7 -0
  116. package/dist/components/param-editor/param-editor-control-item.d.ts +15 -0
  117. package/dist/components/param-editor/param-editor-control-list.d.ts +5 -0
  118. package/dist/components/param-editor/param-editor-field-label.d.ts +1 -0
  119. package/dist/components/param-editor/param-editor-field.d.ts +11 -0
  120. package/dist/components/param-editor/param-editor-horizontal.d.ts +1 -0
  121. package/dist/components/param-editor/param-editor-inline-group.d.ts +5 -0
  122. package/dist/components/param-editor/param-editor-read-only-field.d.ts +9 -0
  123. package/dist/components/param-editor/param-editor-section.d.ts +17 -0
  124. package/dist/components/param-editor/param-editor.d.ts +3 -1
  125. package/dist/components/param-editor/param-editor.types.d.ts +135 -24
  126. package/dist/components/{breadcrumb.d.ts → primitives/breadcrumb.d.ts} +1 -1
  127. package/dist/components/primitives/index.d.ts +28 -0
  128. package/dist/components/{number-input.d.ts → primitives/number-input.d.ts} +0 -2
  129. package/dist/components/{session-indicator.d.ts → primitives/session-indicator.d.ts} +2 -1
  130. package/dist/components/{tooltip.d.ts → primitives/tooltip.d.ts} +0 -1
  131. package/dist/components/rich-text/prompt-input/commands.d.ts +0 -17
  132. package/dist/components/rich-text/prompt-input/events.d.ts +0 -13
  133. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.d.ts +1 -2
  134. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/ReferenceMenuPlugin.d.ts +2 -1
  135. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/hooks/useContextLookup.d.ts +2 -1
  136. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/ReferencePlugin.d.ts +2 -1
  137. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +1 -2
  138. package/dist/components/rich-text/prompt-input/prompt-input.d.ts +3 -2
  139. package/dist/components/rich-text/prompt-input/utils.d.ts +1 -2
  140. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +0 -1
  141. package/dist/components/rich-text/types.d.ts +1 -1
  142. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  143. package/dist/components/{sidebar/sidebar-footer.d.ts → sidenav/sidenav-footer.d.ts} +2 -2
  144. package/dist/components/{sidebar/sidebar-header.d.ts → sidenav/sidenav-header.d.ts} +2 -2
  145. package/dist/components/sidenav/sidenav.d.ts +2 -0
  146. package/dist/components/sidenav/sidenav.store.d.ts +49 -0
  147. package/dist/components/{sidebar/sidebar.types.d.ts → sidenav/sidenav.types.d.ts} +6 -6
  148. package/dist/components/tab-strip/tab-visibility-filter.d.ts +2 -1
  149. package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
  150. package/dist/components/tag-editor/tag-editor.types.d.ts +1 -1
  151. package/dist/components/terminal/bind-session.d.ts +33 -0
  152. package/dist/components/terminal/index.d.ts +6 -0
  153. package/dist/components/terminal/scripted-bridge.d.ts +35 -0
  154. package/dist/components/terminal/terminal-contract.d.ts +22 -0
  155. package/dist/components/terminal/terminal-theme.d.ts +12 -0
  156. package/dist/components/terminal/terminal.d.ts +56 -0
  157. package/dist/components/terminal/types.d.ts +35 -0
  158. package/dist/components/terminal/use-terminal-session.d.ts +21 -0
  159. package/dist/components/tree-list/tree-list-order-filter.d.ts +1 -2
  160. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +1 -2
  161. package/dist/components/tree-list/tree-list.d.ts +2 -2
  162. package/dist/components/tree-list/tree-list.types.d.ts +4 -0
  163. package/dist/data-table.js +1271 -0
  164. package/dist/data-table.js.map +1 -0
  165. package/dist/diff-editor-BnfV8cYB.js +182 -0
  166. package/dist/diff-editor-BnfV8cYB.js.map +1 -0
  167. package/dist/diff.js +1313 -0
  168. package/dist/diff.js.map +1 -0
  169. package/dist/empty-state-Bo4HVrgr.js +34 -0
  170. package/dist/empty-state-Bo4HVrgr.js.map +1 -0
  171. package/dist/foundations/gallery/gallery-frame.d.ts +21 -0
  172. package/dist/foundations/gallery/sections/badges-section.d.ts +1 -0
  173. package/dist/foundations/gallery/sections/buttons-section.d.ts +1 -0
  174. package/dist/foundations/gallery/sections/composite-chat-section.d.ts +1 -0
  175. package/dist/foundations/gallery/sections/composites-section.d.ts +1 -0
  176. package/dist/foundations/gallery/sections/feedback-section.d.ts +1 -0
  177. package/dist/foundations/gallery/sections/input-authoring-card.d.ts +1 -0
  178. package/dist/foundations/gallery/sections/inputs-section.d.ts +1 -0
  179. package/dist/foundations/gallery/sections/layout-section.d.ts +1 -0
  180. package/dist/foundations/gallery/sections/navigation-identity-section.d.ts +1 -0
  181. package/dist/foundations/gallery/sections/overlays-section.d.ts +1 -0
  182. package/dist/foundations/gallery/sections/panels-section.d.ts +1 -0
  183. package/dist/foundations/gallery/sections/param-editor-composite-card.d.ts +1 -0
  184. package/dist/foundations/gallery/sections/settings-composite-cards.d.ts +1 -0
  185. package/dist/index.d.ts +14 -87
  186. package/dist/index.js +2027 -7501
  187. package/dist/index.js.map +1 -1
  188. package/dist/kanban-renderer-toolbar-B9ro-9z1.js +1318 -0
  189. package/dist/kanban-renderer-toolbar-B9ro-9z1.js.map +1 -0
  190. package/dist/kanban-renderer.js +1087 -0
  191. package/dist/kanban-renderer.js.map +1 -0
  192. package/dist/list-row-YRUxEcy3.js +808 -0
  193. package/dist/list-row-YRUxEcy3.js.map +1 -0
  194. package/dist/mermaid-renderer-DZo3qj6D.js +425 -0
  195. package/dist/mermaid-renderer-DZo3qj6D.js.map +1 -0
  196. package/dist/mermaid.js +5 -0
  197. package/dist/mermaid.js.map +1 -0
  198. package/dist/param-editor-CYZJbmKu.js +933 -0
  199. package/dist/param-editor-CYZJbmKu.js.map +1 -0
  200. package/dist/param-editor-read-only-field-DgtLqcFa.js +925 -0
  201. package/dist/param-editor-read-only-field-DgtLqcFa.js.map +1 -0
  202. package/dist/prism-BXb57lxL.js +125 -0
  203. package/dist/prism-BXb57lxL.js.map +1 -0
  204. package/dist/radio-cLMEBBZk.js +76 -0
  205. package/dist/radio-cLMEBBZk.js.map +1 -0
  206. package/dist/resource-badge-qCWHP-wQ.js +99 -0
  207. package/dist/resource-badge-qCWHP-wQ.js.map +1 -0
  208. package/dist/{rich-message-DNSEhxXh.js → rich-message-DBf_5YlW.js} +462 -481
  209. package/dist/rich-message-DBf_5YlW.js.map +1 -0
  210. package/dist/rich-text.js +300 -299
  211. package/dist/rich-text.js.map +1 -1
  212. package/dist/scroll-area-BMbg1WcD.js +91 -0
  213. package/dist/scroll-area-BMbg1WcD.js.map +1 -0
  214. package/dist/style.css +1 -1
  215. package/dist/terminal.js +359 -0
  216. package/dist/terminal.js.map +1 -0
  217. package/dist/theme/global.d.ts +3 -0
  218. package/dist/theme/primitives/sizes.d.ts +23 -0
  219. package/dist/theme/recipes/badge.d.ts +50 -0
  220. package/dist/theme/recipes/button.d.ts +30 -19
  221. package/dist/theme/recipes/color-picker.d.ts +1 -0
  222. package/dist/theme/recipes/dialog.d.ts +1 -1
  223. package/dist/theme/recipes/drawer.d.ts +1 -1
  224. package/dist/theme/recipes/input.d.ts +55 -0
  225. package/dist/theme/recipes/number-input.d.ts +98 -0
  226. package/dist/theme/recipes/tabs.d.ts +49 -28
  227. package/dist/theme/recipes/textarea.d.ts +62 -1
  228. package/dist/theme/recipes/timeline.d.ts +74 -0
  229. package/dist/theme/tokens/borders.d.ts +0 -3
  230. package/dist/theme/tokens/colors.d.ts +118 -94
  231. package/dist/{theme-25P7ij4C.js → theme-CNhnbvcE.js} +1300 -375
  232. package/dist/theme-CNhnbvcE.js.map +1 -0
  233. package/dist/theme-preference-DOzHx64J.js +123 -0
  234. package/dist/theme-preference-DOzHx64J.js.map +1 -0
  235. package/dist/theme.js +1 -1
  236. package/dist/tree-list-CZHLAURU.js +1033 -0
  237. package/dist/tree-list-CZHLAURU.js.map +1 -0
  238. package/package.json +29 -3
  239. package/dist/components/data-renderer/card-interaction-guard.d.ts +0 -2
  240. package/dist/components/data-renderer/data-renderer-attribute-badge.d.ts +0 -7
  241. package/dist/components/data-renderer/data-renderer-grouping.d.ts +0 -23
  242. package/dist/components/data-renderer/data-renderer-list.d.ts +0 -39
  243. package/dist/components/data-renderer/data-renderer-toolbar.d.ts +0 -12
  244. package/dist/components/data-renderer/use-data-renderer-store.d.ts +0 -59
  245. package/dist/components/file-tree-helpers.d.ts +0 -8
  246. package/dist/components/open-source-notices-screen.d.ts +0 -20
  247. package/dist/components/panel-header.constants.d.ts +0 -1
  248. package/dist/components/param-editor/input-group.d.ts +0 -10
  249. package/dist/components/rich-text/shared/plugins/MermaidPlugin/index.d.ts +0 -1
  250. package/dist/components/rich-text/shared/plugins/TableActionMenuPlugin/TableActionMenuPlugin.d.ts +0 -5
  251. package/dist/components/rich-text/shared/plugins/TableCellResizerPlugin/TableCellResizerPlugin.d.ts +0 -2
  252. package/dist/components/rich-text/theme/report-theme.d.ts +0 -3
  253. package/dist/components/sidebar/sidebar.d.ts +0 -2
  254. package/dist/components/sidebar/sidebar.store.d.ts +0 -49
  255. package/dist/components/style-guide-data.d.ts +0 -40
  256. package/dist/components/style-guide.d.ts +0 -1
  257. package/dist/mermaid-renderer-CPGj6vsb.js +0 -570
  258. package/dist/mermaid-renderer-CPGj6vsb.js.map +0 -1
  259. package/dist/radio-DJtQY9po.js +0 -286
  260. package/dist/radio-DJtQY9po.js.map +0 -1
  261. package/dist/resource-badge-CeJTOn8F.js +0 -188
  262. package/dist/resource-badge-CeJTOn8F.js.map +0 -1
  263. package/dist/rich-message-DNSEhxXh.js.map +0 -1
  264. package/dist/theme-25P7ij4C.js.map +0 -1
  265. package/dist/utils/formats.d.ts +0 -7
  266. /package/dist/components/{palette-filter.d.ts → command-palette/palette-filter.d.ts} +0 -0
  267. /package/dist/components/{palette-list.d.ts → command-palette/palette-list.d.ts} +0 -0
  268. /package/dist/components/{palette-shortcut.d.ts → command-palette/palette-shortcut.d.ts} +0 -0
  269. /package/dist/components/{palette.d.ts → command-palette/palette.d.ts} +0 -0
  270. /package/dist/components/{code-editor.d.ts → diff-viewer/code-editor.d.ts} +0 -0
  271. /package/dist/components/{column-file-browser.d.ts → file-browser/column-file-browser.d.ts} +0 -0
  272. /package/dist/components/{performance-panel.d.ts → internal/performance-panel.d.ts} +0 -0
  273. /package/dist/components/{data-renderer/data-renderer-badge-helpers.d.ts → kanban-renderer/kanban-renderer-badge-helpers.d.ts} +0 -0
  274. /package/dist/components/{data-renderer/data-renderer-enum-helpers.d.ts → kanban-renderer/kanban-renderer-enum-helpers.d.ts} +0 -0
  275. /package/dist/components/{data-renderer → kanban-renderer}/use-resolved-attributes.d.ts +0 -0
  276. /package/dist/components/{header.d.ts → layout/header.d.ts} +0 -0
  277. /package/dist/components/{horizontal-menu-stack.d.ts → layout/horizontal-menu-stack.d.ts} +0 -0
  278. /package/dist/components/{item-section.d.ts → layout/item-section.d.ts} +0 -0
  279. /package/dist/components/{attached-panel.d.ts → overlays/attached-panel.d.ts} +0 -0
  280. /package/dist/components/{bubble-button.d.ts → overlays/bubble-button.d.ts} +0 -0
  281. /package/dist/components/{bubble-panel.d.ts → overlays/bubble-panel.d.ts} +0 -0
  282. /package/dist/components/{delete-confirmation-modal.d.ts → overlays/delete-confirmation-modal.d.ts} +0 -0
  283. /package/dist/components/{repo-picker-dialog.d.ts → overlays/repo-picker-dialog.d.ts} +0 -0
  284. /package/dist/components/param-editor/{color-input.d.ts → inputs/color-input.d.ts} +0 -0
  285. /package/dist/components/param-editor/{date-input.d.ts → inputs/date-input.d.ts} +0 -0
  286. /package/dist/components/param-editor/{horizontal-text-input.d.ts → inputs/horizontal-text-input.d.ts} +0 -0
  287. /package/dist/components/param-editor/{number-input.d.ts → inputs/number-input.d.ts} +0 -0
  288. /package/dist/components/param-editor/{text-input.d.ts → inputs/text-input.d.ts} +0 -0
  289. /package/dist/components/{alert.d.ts → primitives/alert.d.ts} +0 -0
  290. /package/dist/components/{checkbox.d.ts → primitives/checkbox.d.ts} +0 -0
  291. /package/dist/components/{content-placeholder.d.ts → primitives/content-placeholder.d.ts} +0 -0
  292. /package/dist/components/{empty-state.d.ts → primitives/empty-state.d.ts} +0 -0
  293. /package/dist/components/{error-boundary.d.ts → primitives/error-boundary.d.ts} +0 -0
  294. /package/dist/components/{icon-color-picker.d.ts → primitives/icon-color-picker.d.ts} +0 -0
  295. /package/dist/components/{info-card.d.ts → primitives/info-card.d.ts} +0 -0
  296. /package/dist/components/{integration-card.d.ts → primitives/integration-card.d.ts} +0 -0
  297. /package/dist/components/{radio.d.ts → primitives/radio.d.ts} +0 -0
  298. /package/dist/components/{resource-badge.d.ts → primitives/resource-badge.d.ts} +0 -0
  299. /package/dist/components/{scroll-area.d.ts → primitives/scroll-area.d.ts} +0 -0
  300. /package/dist/components/{simple-card.d.ts → primitives/simple-card.d.ts} +0 -0
  301. /package/dist/components/{slider.d.ts → primitives/slider.d.ts} +0 -0
  302. /package/dist/components/{switch.d.ts → primitives/switch.d.ts} +0 -0
  303. /package/dist/components/{toaster.d.ts → primitives/toaster.d.ts} +0 -0
  304. /package/dist/components/{workspace-badge.d.ts → primitives/workspace-badge.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-list-CZHLAURU.js","sources":["../src/components/layout/resizable-split-layout.geometry.ts","../src/components/layout/resizable-split-layout.handle.tsx","../src/components/layout/resizable-split-layout.panels.tsx","../src/components/layout/resizable-split-layout.tsx","../src/components/tree-list/tree-list-model.ts","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list.tsx"],"sourcesContent":["export type ResizableSplitSide = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nconst MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX = 160;\nconst VERTICAL_COLLAPSE_THRESHOLD_PX = 72;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst axes = {\n left: {\n rootDirection: \"row\",\n dimension: \"width\",\n separatorOrientation: \"vertical\",\n cursor: \"col-resize\",\n pointerCoordinate: \"clientX\",\n deltaDirection: 1,\n panelFirst: true,\n },\n right: {\n rootDirection: \"row\",\n dimension: \"width\",\n separatorOrientation: \"vertical\",\n cursor: \"col-resize\",\n pointerCoordinate: \"clientX\",\n deltaDirection: -1,\n panelFirst: false,\n },\n top: {\n rootDirection: \"column\",\n dimension: \"height\",\n separatorOrientation: \"horizontal\",\n cursor: \"row-resize\",\n pointerCoordinate: \"clientY\",\n deltaDirection: 1,\n panelFirst: true,\n },\n bottom: {\n rootDirection: \"column\",\n dimension: \"height\",\n separatorOrientation: \"horizontal\",\n cursor: \"row-resize\",\n pointerCoordinate: \"clientY\",\n deltaDirection: -1,\n panelFirst: false,\n },\n} as const;\n\nexport const getResizableSplitAxis = (side: ResizableSplitSide) => axes[side];\n\nexport const resolveResizableBounds = (input: {\n rootSize: number;\n fallbackRootSize: number;\n minSize: number;\n maxSize?: number;\n contentMinSize: number;\n}) => {\n const rootSize = input.rootSize > 0 ? input.rootSize : input.fallbackRootSize;\n const maxFromContent = Math.max(0, rootSize - input.contentMinSize);\n const configuredMax = input.maxSize ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSize, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst resolveCollapseThreshold = (side: ResizableSplitSide, minSize: number) => {\n if (side === \"top\" || side === \"bottom\") return VERTICAL_COLLAPSE_THRESHOLD_PX;\n return clamp(minSize / 2, MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX, MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX);\n};\n\nexport const resolveDraggedPanelSize = (input: {\n side: ResizableSplitSide;\n startSize: number;\n pointerDelta: number;\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n}) => {\n const axis = getResizableSplitAxis(input.side);\n const rawSize = input.startSize + input.pointerDelta * axis.deltaDirection;\n const collapsed = input.collapsible && rawSize <= resolveCollapseThreshold(input.side, input.minSize);\n\n return {\n rawSize,\n size: collapsed ? 0 : clamp(rawSize, input.minSize, input.maxSize),\n collapsed,\n };\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\nimport type { getResizableSplitAxis } from \"@/components/layout/resizable-split-layout.geometry\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.emphasized\" } };\n\ninterface ResizeHandleProps {\n axis: ReturnType<typeof getResizableSplitAxis>;\n bounds: { minSize: number; maxSize: number };\n collapsed: boolean;\n collapsible: boolean;\n contentPanelId: string;\n resizablePanelId: string;\n resizeHandleSizePx: number;\n resizeLabel: string;\n resolvedPanelSize: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n axis,\n bounds,\n collapsed,\n collapsible,\n contentPanelId,\n resizablePanelId,\n resizeHandleSizePx,\n resizeLabel,\n resolvedPanelSize,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const verticalSeparator = axis.separatorOrientation === \"vertical\";\n const resizeHandleSize = `${resizeHandleSizePx}px`;\n const resizeHandleOffset = `${resizeHandleSizePx / -2}px`;\n const separatorStyle = verticalSeparator\n ? {\n content: '\"\"',\n position: \"absolute\" as const,\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border.subtle\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }\n : {\n content: '\"\"',\n position: \"absolute\" as const,\n insetInline: 0,\n top: \"50%\",\n h: \"1px\",\n bg: showResizeSeparator ? \"border.subtle\" : \"transparent\",\n transform: \"translateY(-50%)\",\n };\n return (\n <Box\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation={axis.separatorOrientation}\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={collapsible ? 0 : Math.round(bounds.minSize)}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelSize)}\n aria-hidden={collapsed ? true : undefined}\n tabIndex={collapsed ? -1 : 0}\n display={collapsed ? \"none\" : undefined}\n position=\"relative\"\n zIndex=\"docked\"\n flex={`0 0 ${resizeHandleSize}`}\n h={verticalSeparator ? \"full\" : resizeHandleSize}\n w={verticalSeparator ? resizeHandleSize : \"full\"}\n mx={verticalSeparator ? resizeHandleOffset : undefined}\n my={verticalSeparator ? undefined : resizeHandleOffset}\n cursor={axis.cursor}\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={separatorStyle}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n h: verticalSeparator ? undefined : \"2px\",\n w: verticalSeparator ? \"2px\" : undefined,\n },\n }}\n />\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n PointerEvent as ReactPointerEvent,\n RefObject,\n} from \"react\";\nimport type { getResizableSplitAxis } from \"@/components/layout/resizable-split-layout.geometry\";\nimport { ResizeHandle } from \"@/components/layout/resizable-split-layout.handle\";\n\ninterface ResizableSplitPanelsProps {\n axis: ReturnType<typeof getResizableSplitAxis>;\n bounds: { minSize: number; maxSize: number };\n collapsed: boolean;\n collapsible: boolean;\n contentPanel: ReactNode;\n contentPanelId: string;\n contentPanelRef: RefObject<HTMLDivElement | null>;\n resizablePanel: ReactNode;\n resizablePanelId: string;\n resizablePanelRef: RefObject<HTMLDivElement | null>;\n resizeHandleSizePx: number;\n resizeLabel: string;\n resolvedPanelSize: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizableSplitPanels = (props: ResizableSplitPanelsProps) => {\n const {\n axis,\n bounds,\n collapsed,\n collapsible,\n contentPanel,\n contentPanelId,\n contentPanelRef,\n resizablePanel,\n resizablePanelId,\n resizablePanelRef,\n resizeHandleSizePx,\n resizeLabel,\n resolvedPanelSize,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n const resizablePanelNode = (\n <Flex\n key=\"resizable-panel\"\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h={axis.dimension === \"height\" ? `${resolvedPanelSize}px` : \"full\"}\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelSize}px`}\n w={axis.dimension === \"width\" ? `${resolvedPanelSize}px` : \"full\"}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\n key=\"content-panel\"\n id={contentPanelId}\n ref={contentPanelRef}\n display=\"flex\"\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex=\"1\"\n >\n {contentPanel}\n </Flex>\n );\n const resizeTrigger = (\n <ResizeHandle\n key=\"resize-handle\"\n axis={axis}\n bounds={bounds}\n collapsed={collapsed}\n collapsible={collapsible}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeHandleSizePx={resizeHandleSizePx}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={onResizeKeyDown}\n onResizeStart={onResizeStart}\n />\n );\n\n if (axis.panelFirst) {\n return (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n );\n }\n\n return (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n getResizableSplitAxis,\n type ResizableSplitSide,\n resolveDraggedPanelSize,\n resolveResizableBounds,\n} from \"@/components/layout/resizable-split-layout.geometry\";\nimport { ResizableSplitPanels } from \"@/components/layout/resizable-split-layout.panels\";\n\ninterface ResizableSplitLayoutProps extends Omit<FlexProps, \"children\" | \"onResize\"> {\n resizablePanel: ReactNode;\n contentPanel: ReactNode;\n resizableSide?: ResizableSplitSide;\n defaultSizePx?: number;\n minSizePx?: number;\n maxSizePx?: number;\n contentMinSizePx?: number;\n collapsed?: boolean;\n collapsible?: boolean;\n resizeLabel?: string;\n resizeHandleSizePx?: number;\n showResizeSeparator?: boolean;\n onSizeChange?: (size: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_SIZE = { width: 1200, height: 720 };\nconst KEYBOARD_RESIZE_STEP = 24;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\ntype PanelDimension = \"width\" | \"height\";\n\nconst getElementSize = (element: HTMLDivElement | null, dimension: PanelDimension) =>\n element?.getBoundingClientRect()[dimension] ?? 0;\n\nconst applyPanelSizeToElement = (panel: HTMLDivElement | null, size: number, dimension: PanelDimension) => {\n if (!panel) return;\n\n panel.style[dimension] = `${size}px`;\n panel.style.flexBasis = `${size}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = size > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\n panel.style.height = \"\";\n panel.style.flexBasis = \"\";\n panel.style.flexGrow = \"\";\n panel.style.flexShrink = \"\";\n panel.style.display = \"\";\n};\n\nexport const ResizableSplitLayout = (props: ResizableSplitLayoutProps) => {\n const {\n resizablePanel,\n contentPanel,\n resizableSide = \"left\",\n defaultSizePx = 240,\n minSizePx = 200,\n maxSizePx,\n contentMinSizePx = 0,\n collapsed: controlledCollapsed,\n collapsible = true,\n resizeLabel = \"Resize panel\",\n resizeHandleSizePx = 12,\n showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const axis = getResizableSplitAxis(resizableSide);\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const lastSizeRef = useRef(defaultSizePx);\n const [panelSize, setPanelSize] = useState(defaultSizePx);\n const [rootSize, setRootSize] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBounds({\n rootSize,\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const resolvedPanelSize = collapsed ? 0 : clamp(panelSize, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootSize = () => {\n setRootSize(element.getBoundingClientRect()[axis.dimension]);\n };\n\n updateRootSize();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootSize);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [axis.dimension]);\n\n useEffect(() => {\n lastSizeRef.current = defaultSizePx;\n setPanelSize(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelSize = (size: number) => {\n applyPanelSizeToElement(resizablePanelRef.current, size, axis.dimension);\n };\n\n useEffect(() => {\n // React may reuse the same DOM element across renders when this component swaps roles\n // (e.g., a wrapping ResizableSplitLayout disappears, leaving the inner one in its place).\n // Clear any inline styles on the content panel that leaked from a prior render where\n // the same DOM element was the resizable panel; otherwise stale `flex: 0 0 Xpx` pins\n // the content's width.\n clearPanelInlineStyles(contentPanelRef.current);\n clearPanelInlineStyles(resizablePanelRef.current);\n applyPanelSizeToElement(resizablePanelRef.current, resolvedPanelSize, axis.dimension);\n }, [axis.dimension, resolvedPanelSize]);\n\n const commitPanelSize = (size: number) => {\n const nextBounds = resolveResizableBounds({\n rootSize: getElementSize(rootRef.current, axis.dimension),\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const nextSize = clamp(size, nextBounds.minSize, nextBounds.maxSize);\n\n lastSizeRef.current = nextSize;\n setPanelSize(nextSize);\n applyPanelSize(nextSize);\n onSizeChange?.(nextSize);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const bounds = resolveResizableBounds({\n rootSize: getElementSize(rootRef.current, axis.dimension),\n fallbackRootSize: FALLBACK_ROOT_SIZE[axis.dimension],\n minSize: minSizePx,\n maxSize: maxSizePx,\n contentMinSize: contentMinSizePx,\n });\n const startPointer = event[axis.pointerCoordinate];\n const startSize = collapsed ? 0 : getElementSize(resizablePanelRef.current, axis.dimension) || lastSizeRef.current;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextSize = startSize === 0 ? 0 : clamp(startSize, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelSize = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelSize(nextSize);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const result = resolveDraggedPanelSize({\n side: resizableSide,\n startSize,\n pointerDelta: moveEvent[axis.pointerCoordinate] - startPointer,\n minSize: bounds.minSize,\n maxSize: bounds.maxSize,\n collapsible,\n });\n nextCollapsed = result.collapsed;\n nextSize = result.size;\n schedulePanelSize();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelSize(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelSize(nextSize);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = axis.cursor;\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const negativeDirectionKey = axis.dimension === \"width\" ? \"ArrowLeft\" : \"ArrowUp\";\n const positiveDirectionKey = axis.dimension === \"width\" ? \"ArrowRight\" : \"ArrowDown\";\n const size = lastSizeRef.current;\n\n if (\n collapsed &&\n (event.key === negativeDirectionKey || event.key === positiveDirectionKey || event.key === \"End\")\n ) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelSize(size);\n } else if (event.key === negativeDirectionKey) {\n event.preventDefault();\n commitPanelSize(size - KEYBOARD_RESIZE_STEP * axis.deltaDirection);\n } else if (event.key === positiveDirectionKey) {\n event.preventDefault();\n commitPanelSize(size + KEYBOARD_RESIZE_STEP * axis.deltaDirection);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelSize(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelSize(bounds.maxSize);\n }\n };\n\n return (\n <Flex ref={rootRef} direction={axis.rootDirection} h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n <ResizableSplitPanels\n axis={axis}\n bounds={bounds}\n collapsed={collapsed}\n collapsible={collapsible}\n contentPanel={contentPanel}\n contentPanelId={contentPanelId}\n contentPanelRef={contentPanelRef}\n resizablePanel={resizablePanel}\n resizablePanelId={resizablePanelId}\n resizablePanelRef={resizablePanelRef}\n resizeHandleSizePx={resizeHandleSizePx}\n resizeLabel={resizeLabel}\n resolvedPanelSize={resolvedPanelSize}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n </Flex>\n );\n};\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n } = props;\n\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n const { rowVariant: nodeRowVariant, ...listRowItem } = rowItem;\n\n const rowProps = {\n ...listRowItem,\n depth: level,\n variant: nodeRowVariant ?? rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; sectionId: string; nextNodeIds: string[] };\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n\n if (isSectionDragId(activeId) && isSectionDragId(overId)) {\n const activeSection = sections.find((section) => section.id === fromSectionDragId(activeId));\n const overSection = sections.find((section) => section.id === fromSectionDragId(overId));\n if (activeSection?.canReorder === false || overSection?.canReorder === false) return null;\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(fromSectionDragId(activeId));\n const newIndex = orderedIds.indexOf(fromSectionDragId(overId));\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n }\n\n for (const section of sections) {\n const nodeIds = section.nodes.map((node) => node.id);\n const oldIndex = nodeIds.indexOf(activeId);\n const newIndex = nodeIds.indexOf(overId);\n if (oldIndex < 0 || newIndex < 0) continue;\n if (section.nodes[oldIndex]?.canReorder === false || section.nodes[newIndex]?.canReorder === false) return null;\n if (oldIndex === newIndex) return null;\n return {\n kind: \"node\",\n sectionId: section.id,\n nextNodeIds: arrayMoveInPlace(nodeIds, oldIndex, newIndex),\n };\n }\n\n return null;\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { computeReorderResult, toSectionDragId } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n disabled?: boolean;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id, disabled: props.disabled });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)} disabled={section.canReorder === false}>\n {({ setNodeRef, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext; nested rows\n// inherit position from their parent and render plain (cross-section moves are\n// out of scope per the ADR).\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id} disabled={row.node.canReorder === false}>\n {({ setNodeRef, listeners, style }) => (\n <Box\n ref={setNodeRef}\n style={style}\n w=\"full\"\n minW=\"0\"\n onPointerDownCapture={(event) => listeners?.onPointerDown?.(event)}\n >\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id));\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n onReorderNodes?.(result.sectionId, result.nextNodeIds);\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, ReactNode, RefObject } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\n/** Sectioned hierarchical list for files, resources, navigation, and customizable sidenavs. */\ninterface TreeListProps {\n /** Ordered sections to render, each containing nested tree nodes. */\n sections: TreeListSection[];\n /** Controlled section ids that are currently expanded. */\n expandedSectionIds?: string[];\n /** Controlled node ids that are currently expanded. */\n expandedNodeIds?: string[];\n /** Active node id, or ids, used for selection styling. */\n activeNodeId?: string | string[] | null;\n /** Compact rows suit app navigation; tree rows suit file/resource hierarchies. */\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n /** Link renderer used when nodes provide `href`. */\n linkComponent?: TreeListLinkComponent;\n /** Called when a navigable node is activated. */\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n /** Render large trees with virtual rows. Disable when using drag ordering. */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n // When set, right-clicking the empty back area of the tree (everything not\n // covered by an item row) opens this menu. Item rows keep their own\n // right-click behaviour — the menu lives on a layer behind them.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n scrollRef,\n } = props;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n pb={virtualItem.index === rows.length - 1 ? \"0\" : nodeGap}\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\ninterface TreeListBackgroundProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n}\n\n// Renders the right-click target as a layer behind the rows so empty back-area\n// clicks open the menu while item rows (painted above) keep their own handling.\n// `flex` lets the layer grow to fill a flex-column host (e.g. a scroll area);\n// `minH=full` covers definite-height hosts. Either way the absolute child fills\n// the wrapper, so the whole back area is right-clickable, not just the rows.\nconst TreeListBackground = (props: TreeListBackgroundProps) => {\n const { actions, children } = props;\n\n return (\n <Box position=\"relative\" flex=\"1 0 auto\" minH=\"full\" w=\"full\" minW=\"0\" maxW=\"full\">\n <ResourceContextMenu actions={actions} closeOnSelect={false}>\n <Box position=\"absolute\" inset=\"0\" zIndex={0} aria-hidden data-tree-list-background=\"true\" />\n </ResourceContextMenu>\n <Box position=\"relative\" zIndex={1} w=\"full\" minW=\"0\" maxW=\"full\">\n {children}\n </Box>\n </Box>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const content = props.draggable ? (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n />\n ) : (\n <StackTreeList {...props} />\n );\n const paddedContent = (\n <Box p=\"xs\" w=\"full\" minW=\"0\" maxW=\"full\">\n {content}\n </Box>\n );\n\n if (!props.backgroundContextActions || props.backgroundContextActions.length === 0) {\n return paddedContent;\n }\n\n return <TreeListBackground actions={props.backgroundContextActions}>{paddedContent}</TreeListBackground>;\n};\n"],"names":["MIN_HORIZONTAL_COLLAPSE_THRESHOLD_PX","MAX_HORIZONTAL_COLLAPSE_THRESHOLD_PX","VERTICAL_COLLAPSE_THRESHOLD_PX","clamp","value","min","max","Math","axes","left","rootDirection","dimension","separatorOrientation","cursor","pointerCoordinate","deltaDirection","panelFirst","right","top","bottom","getResizableSplitAxis","side","resolveResizableBounds","input","rootSize","fallbackRootSize","maxFromContent","contentMinSize","configuredMax","maxSize","minSize","resolveCollapseThreshold","resolveDraggedPanelSize","axis","rawSize","startSize","pointerDelta","collapsed","collapsible","size","RESIZE_SEPARATOR_HOVER_STYLE","_before","bg","ResizeHandle","props","$","_c","bounds","contentPanelId","resizablePanelId","resizeHandleSizePx","resizeLabel","resolvedPanelSize","showResizeSeparator","onResizeKeyDown","onResizeStart","verticalSeparator","resizeHandleSize","resizeHandleOffset","t0","content","position","insetInlineStart","w","transform","insetInline","h","separatorStyle","t1","t2","t3","round","t4","t5","t6","undefined","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","jsx","Box","ResizableSplitPanels","contentPanel","contentPanelRef","resizablePanel","resizablePanelRef","Flex","resizablePanelNode","contentPanelNode","resizeTrigger","FALLBACK_ROOT_SIZE","width","height","KEYBOARD_RESIZE_STEP","getElementSize","element","getBoundingClientRect","applyPanelSizeToElement","panel","style","flexBasis","flexGrow","flexShrink","display","clearPanelInlineStyles","ResizableSplitLayout","controlledCollapsed","maxSizePx","onCollapsedChange","onSizeChange","rest","resizableSide","defaultSizePx","minSizePx","contentMinSizePx","id","useId","rootRef","useRef","cleanupDragRef","_temp","lastSizeRef","panelSize","setPanelSize","useState","setRootSize","internalCollapsed","setInternalCollapsed","current","updateRootSize","ResizeObserver","observer","observe","disconnect","useEffect","Symbol","for","applyPanelSize","t19","size_0","nextBounds","nextSize","commitPanelSize","t20","nextCollapsed","setCollapsed","t21","event","button","preventDefault","resizeHandle","currentTarget","bounds_0","startPointer","previousCursor","document","body","previousUserSelect","userSelect","nextSize_0","nextCollapsed_0","animationFrame","setDraggingPanelState","pointerEvents","schedulePanelSize","window","requestAnimationFrame","handlePointerMove","moveEvent","result","cleanup","removeEventListener","hasPointerCapture","pointerId","releasePointerCapture","cancelAnimationFrame","_temp2","setPointerCapture","addEventListener","once","handleResizeStart","t22","event_0","negativeDirectionKey","positiveDirectionKey","size_1","key","handleResizeKeyDown","t23","t24","isInList","values","includes","isActiveNode","activeNodeId","Array","isArray","isNavigableNode","node","isNavigable","navigationIntent","getNodeChildren","children","hasExpandableChildren","length","isContainer","appendVisibleNodeRows","rows","sectionId","nodes","expandedNodeIds","level","parentNodeId","push","kind","buildVirtualRows","sections","expandedSectionIds","section","label","expanded","emptyState","getRowFocusId","row","isFocusableRow","disabled","getFocusableRows","filter","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","Set","map","has","activeId","find","firstRow","resolveSectionHeaderNavigation","currentIndex","type","nextRow","rowId","resolveNodeNavigation","expandable","nodeId","resolveTreeListKeyboardNavigation","resolvedFocusRowId","findIndex","currentRow","focusByIndex","index","clamped","TreeListNodeRow","rowVariant","nodeGap","linkComponent","LinkComponent","tabIndex","onFocus","onNavigate","onToggleNode","hasChildren","isActive","isDisabled","canLink","Boolean","href","intent","onActivate","handleActivate","actions","action","onAction","context","listRowItem","nodeRowVariant","rowItem","depth","variant","isSelected","isExpanded","showExpandToggle","onToggleExpand","rowProps","ListRow","Stack","TreeListSectionActions","opacity","menuItems","SearchableActionMenu","jsxs","Menu","IconButton","icon","stopPropagation","HStack","TreeListSectionHeader","focusId","onToggle","onContextMenu","Text","ChevronRight","transition","item","SECTION_PREFIX","toSectionDragId","isSectionDragId","startsWith","fromSectionDragId","slice","arrayMoveInPlace","items","from","to","next","removed","splice","computeReorderResult","overId","activeSection","overSection","canReorder","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","sortable","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","_temp3","_temp4","topLevelNodeIds","onPointerDown","_temp5","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","bb0","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","String","active","handleDragEnd","T0","DndContext","T1","_temp6","T2","section_0","row_0","row_1","row_2","findRowElement","root","querySelectorAll","dataset","treeListFocusId","findFocusedRowId","target","HTMLElement","contains","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","join","focusableRowIds","split","frame","focus","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","handleKeyDown","rowId_0","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","scrollRef","virtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","getItemKey","keyboard","scrollToIndex","align","getTotalSize","getVirtualItems","virtualItem","measureElement","start","StackTreeList","virtualize","TreeListBackground","ResourceContextMenu","TreeList","draggable","paddedContent","backgroundContextActions"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pstdio/ui",
3
- "version": "0.15.0",
3
+ "version": "0.17.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/pufflyai/prompt-studio"
@@ -12,6 +12,9 @@
12
12
  "dist"
13
13
  ],
14
14
  "type": "module",
15
+ "sideEffects": [
16
+ "**/*.css"
17
+ ],
15
18
  "types": "./dist/index.d.ts",
16
19
  "exports": {
17
20
  ".": {
@@ -30,6 +33,26 @@
30
33
  "import": "./dist/chat-ui.js",
31
34
  "types": "./dist/components/chat-ui/index.d.ts"
32
35
  },
36
+ "./diff": {
37
+ "import": "./dist/diff.js",
38
+ "types": "./dist/components/diff-viewer/index.d.ts"
39
+ },
40
+ "./kanban-renderer": {
41
+ "import": "./dist/kanban-renderer.js",
42
+ "types": "./dist/components/kanban-renderer/index.d.ts"
43
+ },
44
+ "./data-table": {
45
+ "import": "./dist/data-table.js",
46
+ "types": "./dist/components/data-table/index.d.ts"
47
+ },
48
+ "./mermaid": {
49
+ "import": "./dist/mermaid.js",
50
+ "types": "./dist/components/mermaid-renderer/index.d.ts"
51
+ },
52
+ "./terminal": {
53
+ "import": "./dist/terminal.js",
54
+ "types": "./dist/components/terminal/index.d.ts"
55
+ },
33
56
  "./style.css": "./dist/style.css"
34
57
  },
35
58
  "scripts": {
@@ -52,6 +75,7 @@
52
75
  "react-dom": "^19.0.0"
53
76
  },
54
77
  "dependencies": {
78
+ "@chakra-ui/charts": "^3.36.0",
55
79
  "@dnd-kit/core": "^6.3.1",
56
80
  "@dnd-kit/sortable": "^10.0.0",
57
81
  "@dnd-kit/utilities": "^3.2.2",
@@ -68,18 +92,19 @@
68
92
  "@lexical/react": "^0.40.0",
69
93
  "@lexical/rich-text": "^0.40.0",
70
94
  "@lexical/selection": "^0.40.0",
71
- "@lexical/table": "^0.40.0",
72
95
  "@lexical/utils": "^0.40.0",
73
96
  "@lexical/yjs": "^0.40.0",
74
97
  "@monaco-editor/react": "^4.7.0",
75
98
  "@tanstack/react-table": "^8.21.3",
76
99
  "@tanstack/react-virtual": "^3.13.19",
77
- "date-fns": "^2.30.0",
100
+ "@xterm/addon-fit": "^0.10.0",
101
+ "@xterm/xterm": "^5.5.0",
78
102
  "katex": "^0.16.33",
79
103
  "lexical": "^0.40.0",
80
104
  "lucide-react": "^0.556.0",
81
105
  "mermaid": "11.15.0",
82
106
  "prismjs": "^1.30.0",
107
+ "recharts": "^3.9.2",
83
108
  "use-stick-to-bottom": "^1.1.3",
84
109
  "y-protocols": "^1.0.7",
85
110
  "y-websocket": "^3.0.0",
@@ -104,6 +129,7 @@
104
129
  "pstdio-file-types": "workspace:*",
105
130
  "react": "19.2.4",
106
131
  "react-dom": "19.2.4",
132
+ "react-test-renderer": "19.2.4",
107
133
  "storybook": "^10.1.9",
108
134
  "typescript": "6.0.2",
109
135
  "vite": "^7.2.4",
@@ -1,2 +0,0 @@
1
- export declare const suppressNextDataRendererCardClick: () => void;
2
- export declare const isDataRendererCardClickSuppressed: () => boolean;
@@ -1,7 +0,0 @@
1
- import { AttributeBadge } from './data-renderer-helpers';
2
- interface DataRendererAttributeBadgeProps {
3
- badge: AttributeBadge;
4
- onChange?: (attributeId: string, value: unknown) => void;
5
- }
6
- export declare const DataRendererAttributeBadge: (props: DataRendererAttributeBadgeProps) => import("react/jsx-runtime").JSX.Element;
7
- export {};
@@ -1,23 +0,0 @@
1
- import { AttributeDescriptor, DataRendererFilterState, DataRendererOrdering, DataRendererRow } from './types';
2
- interface GroupingOptions {
3
- attributes: AttributeDescriptor[];
4
- columnGrouping: string;
5
- rowGrouping: string;
6
- knownColumnKeys?: string[];
7
- }
8
- interface DataRendererRowGroup {
9
- key: string;
10
- label: string;
11
- rows: DataRendererRow[];
12
- }
13
- interface DataRendererColumnGroup {
14
- key: string;
15
- label: string;
16
- rows: DataRendererRow[];
17
- subgroups: DataRendererRowGroup[];
18
- }
19
- export declare const orderRows: (rows: DataRendererRow[], ordering: DataRendererOrdering, attributes: AttributeDescriptor[]) => DataRendererRow[];
20
- export declare const groupRows: (rows: DataRendererRow[], options: GroupingOptions) => DataRendererColumnGroup[];
21
- export declare const filterRows: (rows: DataRendererRow[], filters: DataRendererFilterState, attributes: AttributeDescriptor[]) => DataRendererRow[];
22
- export declare const countFilterValues: (rows: DataRendererRow[], attributeId: string, attributes: AttributeDescriptor[]) => Record<string, number>;
23
- export type { DataRendererColumnGroup, DataRendererRowGroup };
@@ -1,39 +0,0 @@
1
- import { ComponentType, ReactNode } from 'react';
2
- import { ResourceContextAction } from '../resource-context-menu';
3
- import { AttributeBadge } from './data-renderer-helpers';
4
- export interface DataRendererListItem {
5
- id: string;
6
- title: string;
7
- countBadge?: number;
8
- countColorPalette?: string;
9
- statusIcon?: ComponentType<{
10
- size?: number | string;
11
- }>;
12
- statusColor?: string;
13
- badges?: AttributeBadge[];
14
- customSlots?: ReactNode[];
15
- children?: DataRendererListItem[];
16
- onClick?: () => void;
17
- onBadgeChange?: (attributeId: string, value: unknown) => void;
18
- contextMenuActions?: ResourceContextAction[];
19
- draggable?: boolean;
20
- onDropRow?: (rowId: string) => void;
21
- }
22
- export type DataRendererListExpandedState = Record<string, boolean>;
23
- export interface DataRendererListProps {
24
- items: DataRendererListItem[];
25
- selectedItemId?: string | null;
26
- expandedGroups?: DataRendererListExpandedState;
27
- onItemClick?: (item: DataRendererListItem) => void;
28
- onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;
29
- }
30
- interface FlattenedDataRendererListItem {
31
- id: string;
32
- item: DataRendererListItem;
33
- depth: number;
34
- canExpand: boolean;
35
- }
36
- export declare const getDataRendererListIndentation: (depth: number) => string | undefined;
37
- export declare const flattenDataRendererListItems: (items: DataRendererListItem[], expanded: DataRendererListExpandedState, depth?: number) => FlattenedDataRendererListItem[];
38
- export declare const DataRendererList: (props: DataRendererListProps) => import("react/jsx-runtime").JSX.Element;
39
- export {};
@@ -1,12 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from './types';
3
- export interface DataRendererToolbarProps<TRow extends DataRendererRow = DataRendererRow> {
4
- rows: TRow[];
5
- storageKey: string;
6
- attributes: AttributeDescriptor[];
7
- defaultSettings?: Partial<DataRendererSettings>;
8
- defaultFilters?: DataRendererFilterState;
9
- leading?: ReactNode;
10
- align?: "split" | "end";
11
- }
12
- export declare const DataRendererToolbar: <TRow extends DataRendererRow>(props: DataRendererToolbarProps<TRow>) => import("react/jsx-runtime").JSX.Element;
@@ -1,59 +0,0 @@
1
- import { DataRendererFilterState, DataRendererSettings } from './types';
2
- interface DataRendererSnapshot {
3
- settings: DataRendererSettings;
4
- filters: DataRendererFilterState;
5
- expandedGroups: Record<string, boolean>;
6
- }
7
- interface DataRendererStoreInitialState {
8
- settings?: Partial<DataRendererSettings>;
9
- filters?: DataRendererFilterState;
10
- expandedGroups?: Record<string, boolean>;
11
- }
12
- interface DataRendererState extends DataRendererSnapshot {
13
- setViewMode: (viewMode: DataRendererSettings["viewMode"]) => void;
14
- setColumnGrouping: (columnGrouping: DataRendererSettings["columnGrouping"]) => void;
15
- setRowGrouping: (rowGrouping: DataRendererSettings["rowGrouping"]) => void;
16
- setOrdering: (ordering: DataRendererSettings["ordering"]) => void;
17
- setOrderingAttributeId: (attributeId: DataRendererSettings["ordering"]["attributeId"]) => void;
18
- setDisplayProperties: (displayProperties: string[]) => void;
19
- toggleSortDirection: () => void;
20
- toggleDisplayProperty: (property: string) => void;
21
- setFilter: (attributeId: string, values: string[]) => void;
22
- toggleFilterValue: (attributeId: string, value: string) => void;
23
- clearFilter: (attributeId: string) => void;
24
- clearAllFilters: () => void;
25
- setExpandedGroup: (groupId: string, isExpanded: boolean) => void;
26
- reset: () => void;
27
- }
28
- interface CreateDataRendererStoreOptions {
29
- storageKey: string;
30
- initialState?: DataRendererStoreInitialState;
31
- }
32
- export declare const createDataRendererStore: (options: CreateDataRendererStoreOptions) => Omit<import('zustand').StoreApi<DataRendererState>, "setState" | "persist"> & {
33
- setState(partial: DataRendererState | Partial<DataRendererState> | ((state: DataRendererState) => DataRendererState | Partial<DataRendererState>), replace?: false | undefined): unknown;
34
- setState(state: DataRendererState | ((state: DataRendererState) => DataRendererState), replace: true): unknown;
35
- persist: {
36
- setOptions: (options: Partial<import('zustand/middleware').PersistOptions<DataRendererState, unknown, unknown>>) => void;
37
- clearStorage: () => void;
38
- rehydrate: () => Promise<void> | void;
39
- hasHydrated: () => boolean;
40
- onHydrate: (fn: (state: DataRendererState) => void) => () => void;
41
- onFinishHydration: (fn: (state: DataRendererState) => void) => () => void;
42
- getOptions: () => Partial<import('zustand/middleware').PersistOptions<DataRendererState, unknown, unknown>>;
43
- };
44
- };
45
- export declare const getDataRendererStore: (storageKey: string, initialState?: DataRendererStoreInitialState) => Omit<import('zustand').StoreApi<DataRendererState>, "setState" | "persist"> & {
46
- setState(partial: DataRendererState | Partial<DataRendererState> | ((state: DataRendererState) => DataRendererState | Partial<DataRendererState>), replace?: false | undefined): unknown;
47
- setState(state: DataRendererState | ((state: DataRendererState) => DataRendererState), replace: true): unknown;
48
- persist: {
49
- setOptions: (options: Partial<import('zustand/middleware').PersistOptions<DataRendererState, unknown, unknown>>) => void;
50
- clearStorage: () => void;
51
- rehydrate: () => Promise<void> | void;
52
- hasHydrated: () => boolean;
53
- onHydrate: (fn: (state: DataRendererState) => void) => () => void;
54
- onFinishHydration: (fn: (state: DataRendererState) => void) => () => void;
55
- getOptions: () => Partial<import('zustand/middleware').PersistOptions<DataRendererState, unknown, unknown>>;
56
- };
57
- };
58
- export declare const useDataRendererStore: <T>(storageKey: string, selector: (state: DataRendererState) => T, initialState?: DataRendererStoreInitialState) => T;
59
- export type { DataRendererSnapshot, DataRendererState, DataRendererStoreInitialState };
@@ -1,8 +0,0 @@
1
- export type FileTreeItem = {
2
- id: string;
3
- name: string;
4
- type: "file" | "folder";
5
- meta?: string;
6
- children?: FileTreeItem[];
7
- };
8
- export declare const mapFilesById: (nodes: FileTreeItem[]) => Map<string, FileTreeItem>;
@@ -1,20 +0,0 @@
1
- export interface OpenSourceNotice {
2
- name: string;
3
- version?: string;
4
- license?: string;
5
- copyright?: string;
6
- homepageUrl?: string;
7
- sourceUrl?: string;
8
- attribution?: string;
9
- }
10
- export interface OpenSourceNoticesScreenProps {
11
- notices: OpenSourceNotice[];
12
- title?: string;
13
- description?: string;
14
- productName?: string;
15
- productVersion?: string;
16
- generatedAt?: string;
17
- emptyTitle?: string;
18
- emptyDescription?: string;
19
- }
20
- export declare const OpenSourceNoticesScreen: (props: OpenSourceNoticesScreenProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export declare const PANEL_HEADER_HEIGHT = "2.5rem";
@@ -1,10 +0,0 @@
1
- import { InputGroup, ParamValue, ParamValueMap } from './param-editor.types';
2
- interface InputGroupComponentProps {
3
- group: InputGroup;
4
- defaultValues: ParamValueMap;
5
- onChange: (id: string, value: ParamValue) => void;
6
- readOnly?: boolean;
7
- fullWidth?: boolean;
8
- }
9
- export declare const InputGroupComponent: (props: InputGroupComponentProps) => import("react/jsx-runtime").JSX.Element;
10
- export {};
@@ -1 +0,0 @@
1
- export { $createMermaidNode, $isMermaidNode, MermaidNode } from './MermaidNode';
@@ -1,5 +0,0 @@
1
- interface TableCellActionMenuContainerProps {
2
- anchorElem?: HTMLElement;
3
- }
4
- export declare function TableCellActionMenuPlugin({ anchorElem }: TableCellActionMenuContainerProps): import('react').ReactPortal;
5
- export {};
@@ -1,2 +0,0 @@
1
- import { ReactPortal } from 'react';
2
- export default function TableCellResizerPlugin(): null | ReactPortal;
@@ -1,3 +0,0 @@
1
- import { EditorThemeClasses } from 'lexical';
2
- declare const theme: EditorThemeClasses;
3
- export default theme;
@@ -1,2 +0,0 @@
1
- import { SidebarProps } from './sidebar.types';
2
- export declare const Sidebar: (props: SidebarProps) => import("react/jsx-runtime").JSX.Element | null;