@stigmer/react 3.1.1 → 3.1.2

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 (426) hide show
  1. package/composer/SessionComposer.d.ts +24 -1
  2. package/composer/SessionComposer.d.ts.map +1 -1
  3. package/composer/SessionComposer.js +19 -8
  4. package/composer/SessionComposer.js.map +1 -1
  5. package/execution/ArtifactContentRenderer.d.ts +11 -1
  6. package/execution/ArtifactContentRenderer.d.ts.map +1 -1
  7. package/execution/ArtifactContentRenderer.js +39 -15
  8. package/execution/ArtifactContentRenderer.js.map +1 -1
  9. package/execution/FilePathContext.d.ts +8 -1
  10. package/execution/FilePathContext.d.ts.map +1 -1
  11. package/execution/FilePathContext.js.map +1 -1
  12. package/execution/FilePathLink.d.ts.map +1 -1
  13. package/execution/FilePathLink.js +21 -6
  14. package/execution/FilePathLink.js.map +1 -1
  15. package/execution/MessageEntry.d.ts +29 -0
  16. package/execution/MessageEntry.d.ts.map +1 -1
  17. package/execution/MessageEntry.js +29 -5
  18. package/execution/MessageEntry.js.map +1 -1
  19. package/execution/MessageThread.d.ts +76 -13
  20. package/execution/MessageThread.d.ts.map +1 -1
  21. package/execution/MessageThread.js +178 -24
  22. package/execution/MessageThread.js.map +1 -1
  23. package/execution/PlanArtifactCard.d.ts +27 -18
  24. package/execution/PlanArtifactCard.d.ts.map +1 -1
  25. package/execution/PlanArtifactCard.js +13 -23
  26. package/execution/PlanArtifactCard.js.map +1 -1
  27. package/execution/PlanDocumentMessage.d.ts +32 -0
  28. package/execution/PlanDocumentMessage.d.ts.map +1 -0
  29. package/execution/PlanDocumentMessage.js +37 -0
  30. package/execution/PlanDocumentMessage.js.map +1 -0
  31. package/execution/PlanStreamingCard.d.ts +45 -0
  32. package/execution/PlanStreamingCard.d.ts.map +1 -0
  33. package/execution/PlanStreamingCard.js +35 -0
  34. package/execution/PlanStreamingCard.js.map +1 -0
  35. package/execution/index.d.ts +5 -1
  36. package/execution/index.d.ts.map +1 -1
  37. package/execution/index.js +2 -0
  38. package/execution/index.js.map +1 -1
  39. package/execution/useCreateAgentExecution.d.ts +10 -0
  40. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  41. package/execution/useCreateAgentExecution.js +5 -1
  42. package/execution/useCreateAgentExecution.js.map +1 -1
  43. package/github/decodeGitHubContent.d.ts +29 -0
  44. package/github/decodeGitHubContent.d.ts.map +1 -0
  45. package/github/decodeGitHubContent.js +72 -0
  46. package/github/decodeGitHubContent.js.map +1 -0
  47. package/github/index.d.ts +1 -0
  48. package/github/index.d.ts.map +1 -1
  49. package/github/index.js +1 -0
  50. package/github/index.js.map +1 -1
  51. package/github/useGitHubFileReader.d.ts +26 -0
  52. package/github/useGitHubFileReader.d.ts.map +1 -0
  53. package/github/useGitHubFileReader.js +106 -0
  54. package/github/useGitHubFileReader.js.map +1 -0
  55. package/github/useGitHubTreeLister.d.ts.map +1 -1
  56. package/github/useGitHubTreeLister.js +6 -2
  57. package/github/useGitHubTreeLister.js.map +1 -1
  58. package/index.d.ts +9 -9
  59. package/index.d.ts.map +1 -1
  60. package/index.js +5 -5
  61. package/index.js.map +1 -1
  62. package/internal/ResizableSplit.d.ts +72 -22
  63. package/internal/ResizableSplit.d.ts.map +1 -1
  64. package/internal/ResizableSplit.js +96 -38
  65. package/internal/ResizableSplit.js.map +1 -1
  66. package/internal/VirtualizedThread.d.ts +5 -3
  67. package/internal/VirtualizedThread.d.ts.map +1 -1
  68. package/internal/VirtualizedThread.js +6 -4
  69. package/internal/VirtualizedThread.js.map +1 -1
  70. package/internal/file-icons/index.d.ts +17 -0
  71. package/internal/file-icons/index.d.ts.map +1 -0
  72. package/internal/file-icons/index.js +60 -0
  73. package/internal/file-icons/index.js.map +1 -0
  74. package/internal/file-tree/FileTreeNode.d.ts +18 -1
  75. package/internal/file-tree/FileTreeNode.d.ts.map +1 -1
  76. package/internal/file-tree/FileTreeNode.js +11 -2
  77. package/internal/file-tree/FileTreeNode.js.map +1 -1
  78. package/internal/markdown-components.d.ts +38 -1
  79. package/internal/markdown-components.d.ts.map +1 -1
  80. package/internal/markdown-components.js +86 -11
  81. package/internal/markdown-components.js.map +1 -1
  82. package/{workflow → internal}/motion-preference.d.ts +7 -4
  83. package/internal/motion-preference.d.ts.map +1 -0
  84. package/{workflow → internal}/motion-preference.js +7 -4
  85. package/internal/motion-preference.js.map +1 -0
  86. package/internal/store/index.d.ts +33 -0
  87. package/internal/store/index.d.ts.map +1 -1
  88. package/internal/store/index.js +59 -0
  89. package/internal/store/index.js.map +1 -1
  90. package/internal/store/workspace-editors-store.d.ts +145 -0
  91. package/internal/store/workspace-editors-store.d.ts.map +1 -0
  92. package/internal/store/workspace-editors-store.js +208 -0
  93. package/internal/store/workspace-editors-store.js.map +1 -0
  94. package/internal/store/workspace-file-selection-store.d.ts +38 -0
  95. package/internal/store/workspace-file-selection-store.d.ts.map +1 -0
  96. package/internal/store/workspace-file-selection-store.js +62 -0
  97. package/internal/store/workspace-file-selection-store.js.map +1 -0
  98. package/internal/useRevealLine.d.ts +49 -0
  99. package/internal/useRevealLine.d.ts.map +1 -0
  100. package/internal/useRevealLine.js +43 -0
  101. package/internal/useRevealLine.js.map +1 -0
  102. package/library/detect-plan-artifact.d.ts +21 -0
  103. package/library/detect-plan-artifact.d.ts.map +1 -1
  104. package/library/detect-plan-artifact.js +20 -0
  105. package/library/detect-plan-artifact.js.map +1 -1
  106. package/library/detect-streaming-plan.d.ts +45 -0
  107. package/library/detect-streaming-plan.d.ts.map +1 -0
  108. package/library/detect-streaming-plan.js +83 -0
  109. package/library/detect-streaming-plan.js.map +1 -0
  110. package/library/index.d.ts +4 -1
  111. package/library/index.d.ts.map +1 -1
  112. package/library/index.js +2 -1
  113. package/library/index.js.map +1 -1
  114. package/package.json +4 -4
  115. package/session/NewSessionViewer.d.ts +19 -4
  116. package/session/NewSessionViewer.d.ts.map +1 -1
  117. package/session/NewSessionViewer.js +52 -25
  118. package/session/NewSessionViewer.js.map +1 -1
  119. package/session/PlanEditor.d.ts +55 -0
  120. package/session/PlanEditor.d.ts.map +1 -0
  121. package/session/PlanEditor.js +88 -0
  122. package/session/PlanEditor.js.map +1 -0
  123. package/session/PlanStreamingDocument.d.ts +30 -0
  124. package/session/PlanStreamingDocument.d.ts.map +1 -0
  125. package/session/PlanStreamingDocument.js +37 -0
  126. package/session/PlanStreamingDocument.js.map +1 -0
  127. package/session/SessionPanelChip.d.ts +26 -0
  128. package/session/SessionPanelChip.d.ts.map +1 -0
  129. package/session/SessionPanelChip.js +40 -0
  130. package/session/SessionPanelChip.js.map +1 -0
  131. package/session/SessionViewer.d.ts +34 -7
  132. package/session/SessionViewer.d.ts.map +1 -1
  133. package/session/SessionViewer.js +315 -33
  134. package/session/SessionViewer.js.map +1 -1
  135. package/session/{inspector → facets}/ArtifactsTab.d.ts +10 -2
  136. package/session/facets/ArtifactsTab.d.ts.map +1 -0
  137. package/session/{inspector → facets}/ArtifactsTab.js +8 -3
  138. package/session/facets/ArtifactsTab.js.map +1 -0
  139. package/session/{inspector → facets}/ChangesTab.d.ts +3 -3
  140. package/session/facets/ChangesTab.d.ts.map +1 -0
  141. package/session/{inspector → facets}/ChangesTab.js +3 -3
  142. package/session/facets/ChangesTab.js.map +1 -0
  143. package/session/facets/InspectTab.d.ts.map +1 -0
  144. package/session/facets/InspectTab.js.map +1 -0
  145. package/session/{inspector → facets}/SetupTab.d.ts +11 -2
  146. package/session/facets/SetupTab.d.ts.map +1 -0
  147. package/session/{inspector → facets}/SetupTab.js +4 -3
  148. package/session/facets/SetupTab.js.map +1 -0
  149. package/session/{inspector → facets}/UsageTab.d.ts +1 -1
  150. package/session/facets/UsageTab.d.ts.map +1 -0
  151. package/session/{inspector → facets}/UsageTab.js +1 -1
  152. package/session/facets/UsageTab.js.map +1 -0
  153. package/session/{inspector → facets}/index.d.ts +0 -6
  154. package/session/facets/index.d.ts.map +1 -0
  155. package/session/{inspector → facets}/index.js +0 -3
  156. package/session/facets/index.js.map +1 -0
  157. package/session/index.d.ts +11 -2
  158. package/session/index.d.ts.map +1 -1
  159. package/session/index.js +15 -2
  160. package/session/index.js.map +1 -1
  161. package/session/plan-document.d.ts +9 -0
  162. package/session/plan-document.d.ts.map +1 -0
  163. package/session/plan-document.js +17 -0
  164. package/session/plan-document.js.map +1 -0
  165. package/session/useOpenFileChange.d.ts +20 -0
  166. package/session/useOpenFileChange.d.ts.map +1 -0
  167. package/session/useOpenFileChange.js +31 -0
  168. package/session/useOpenFileChange.js.map +1 -0
  169. package/session/usePlanDraft.d.ts +52 -0
  170. package/session/usePlanDraft.d.ts.map +1 -0
  171. package/session/usePlanDraft.js +63 -0
  172. package/session/usePlanDraft.js.map +1 -0
  173. package/session/useSessionConversation.d.ts +6 -0
  174. package/session/useSessionConversation.d.ts.map +1 -1
  175. package/session/useSessionConversation.js +1 -0
  176. package/session/useSessionConversation.js.map +1 -1
  177. package/session/useSessionPageFlow.d.ts.map +1 -1
  178. package/session/useSessionPageFlow.js +1 -0
  179. package/session/useSessionPageFlow.js.map +1 -1
  180. package/session/useSessionPanel.d.ts +120 -0
  181. package/session/useSessionPanel.d.ts.map +1 -0
  182. package/session/useSessionPanel.js +130 -0
  183. package/session/useSessionPanel.js.map +1 -0
  184. package/session/useSessionRailViews.d.ts +45 -0
  185. package/session/useSessionRailViews.d.ts.map +1 -0
  186. package/session/useSessionRailViews.js +105 -0
  187. package/session/useSessionRailViews.js.map +1 -0
  188. package/src/composer/SessionComposer.tsx +52 -10
  189. package/src/composer/__tests__/SessionComposer-contract.test.tsx +58 -4
  190. package/src/execution/ArtifactContentRenderer.tsx +101 -24
  191. package/src/execution/FilePathContext.tsx +8 -1
  192. package/src/execution/FilePathLink.tsx +22 -6
  193. package/src/execution/MessageEntry.tsx +111 -1
  194. package/src/execution/MessageThread.tsx +291 -36
  195. package/src/execution/PlanArtifactCard.tsx +63 -31
  196. package/src/execution/PlanDocumentMessage.tsx +96 -0
  197. package/src/execution/PlanStreamingCard.tsx +137 -0
  198. package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +80 -1
  199. package/src/execution/__tests__/FilePathLink.test.tsx +87 -0
  200. package/src/execution/__tests__/MessageThread.test.tsx +101 -0
  201. package/src/execution/__tests__/PlanArtifactCard.test.tsx +66 -12
  202. package/src/execution/__tests__/PlanDocumentMessage.test.tsx +55 -0
  203. package/src/execution/__tests__/PlanStreamingCard.test.tsx +49 -0
  204. package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +504 -22
  205. package/src/execution/__tests__/message-entry.test.tsx +48 -0
  206. package/src/execution/__tests__/useCreateAgentExecution.test.tsx +85 -0
  207. package/src/execution/index.ts +7 -1
  208. package/src/execution/useCreateAgentExecution.ts +16 -1
  209. package/src/github/__tests__/decodeGitHubContent.test.ts +102 -0
  210. package/src/github/__tests__/useGitHubFileReader.test.ts +183 -0
  211. package/src/github/decodeGitHubContent.ts +83 -0
  212. package/src/github/index.ts +1 -0
  213. package/src/github/useGitHubFileReader.ts +152 -0
  214. package/src/github/useGitHubTreeLister.ts +6 -2
  215. package/src/index.ts +63 -9
  216. package/src/internal/ResizableSplit.tsx +184 -51
  217. package/src/internal/VirtualizedThread.tsx +12 -4
  218. package/src/internal/__tests__/ResizableSplit.test.tsx +125 -3
  219. package/src/internal/__tests__/markdown-components.test.tsx +68 -0
  220. package/src/internal/__tests__/useRevealLine.test.tsx +97 -0
  221. package/src/internal/file-icons/__tests__/file-icons.test.tsx +35 -0
  222. package/src/internal/file-icons/index.tsx +137 -0
  223. package/src/internal/file-tree/FileTreeNode.tsx +43 -3
  224. package/src/internal/file-tree/__tests__/FileTreeNode-explorer.test.tsx +86 -0
  225. package/src/internal/markdown-components.tsx +116 -11
  226. package/src/{workflow → internal}/motion-preference.ts +7 -4
  227. package/src/internal/store/__tests__/workspace-editors-store.test.ts +216 -0
  228. package/src/internal/store/__tests__/workspace-file-selection-store.test.ts +118 -0
  229. package/src/internal/store/index.ts +94 -0
  230. package/src/internal/store/workspace-editors-store.ts +315 -0
  231. package/src/internal/store/workspace-file-selection-store.ts +88 -0
  232. package/src/internal/useRevealLine.ts +81 -0
  233. package/src/library/__tests__/detect-plan-artifact.test.ts +48 -0
  234. package/src/library/__tests__/detect-streaming-plan.test.ts +234 -0
  235. package/src/library/detect-plan-artifact.ts +35 -0
  236. package/src/library/detect-streaming-plan.ts +108 -0
  237. package/src/library/index.ts +5 -0
  238. package/src/session/NewSessionViewer.tsx +123 -55
  239. package/src/session/PlanEditor.tsx +361 -0
  240. package/src/session/PlanStreamingDocument.tsx +97 -0
  241. package/src/session/SessionPanelChip.tsx +103 -0
  242. package/src/session/SessionViewer.tsx +617 -90
  243. package/src/session/__tests__/NewSessionViewer.test.tsx +148 -0
  244. package/src/session/__tests__/PlanEditor.test.tsx +217 -0
  245. package/src/session/__tests__/PlanStreamingDocument.test.tsx +50 -0
  246. package/src/session/__tests__/SessionPanelChip.test.tsx +42 -0
  247. package/src/session/__tests__/SessionViewer-fileReviewDock.test.tsx +9 -4
  248. package/src/session/__tests__/SessionViewer-transcriptFileOpen.test.tsx +205 -0
  249. package/src/session/__tests__/audienceWiring.test.tsx +55 -19
  250. package/src/session/__tests__/useOpenFileChange.test.tsx +82 -0
  251. package/src/session/__tests__/usePlanDraft.test.ts +102 -0
  252. package/src/session/__tests__/useSessionPanel.test.ts +298 -0
  253. package/src/session/__tests__/useSessionRailViews.test.tsx +124 -0
  254. package/src/session/{inspector → facets}/ArtifactsTab.tsx +27 -5
  255. package/src/session/{inspector → facets}/ChangesTab.tsx +3 -3
  256. package/src/session/{inspector → facets}/SetupTab.tsx +13 -1
  257. package/src/session/{inspector → facets}/UsageTab.tsx +1 -1
  258. package/src/session/{inspector → facets}/__tests__/ArtifactsTab.test.tsx +35 -1
  259. package/src/session/facets/__tests__/SetupTab.test.tsx +44 -0
  260. package/src/session/{inspector → facets}/index.ts +0 -16
  261. package/src/session/index.ts +30 -13
  262. package/src/session/plan-document.ts +19 -0
  263. package/src/session/useOpenFileChange.ts +53 -0
  264. package/src/session/usePlanDraft.ts +109 -0
  265. package/src/session/useSessionConversation.ts +7 -0
  266. package/src/session/useSessionPageFlow.ts +1 -0
  267. package/src/session/useSessionPanel.ts +288 -0
  268. package/src/session/useSessionRailViews.tsx +200 -0
  269. package/src/workflow/WorkflowExecutionGraph.tsx +1 -1
  270. package/src/workflow/index.ts +1 -1
  271. package/src/workflow/useFollowExecution.ts +1 -1
  272. package/src/workspace/EditorTabs.tsx +145 -0
  273. package/src/workspace/ExplorerTree.tsx +247 -0
  274. package/src/workspace/FileViewer.tsx +516 -0
  275. package/src/workspace/WorkspaceContentSearch.tsx +478 -0
  276. package/src/workspace/WorkspaceContentSearcher.ts +70 -0
  277. package/src/workspace/WorkspaceFileLister.ts +11 -0
  278. package/src/workspace/WorkspaceFileReader.ts +57 -0
  279. package/src/workspace/WorkspaceFileSearch.tsx +429 -0
  280. package/src/workspace/WorkspaceSurface.tsx +781 -0
  281. package/src/workspace/__tests__/EditorTabs.test.tsx +100 -0
  282. package/src/workspace/__tests__/ExplorerTree.test.tsx +152 -0
  283. package/src/workspace/__tests__/FileViewer.test.tsx +421 -0
  284. package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +196 -0
  285. package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +206 -0
  286. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +348 -0
  287. package/src/workspace/__tests__/findChangeForSelection.test.ts +132 -0
  288. package/src/workspace/__tests__/matchContentPreview.test.ts +55 -0
  289. package/src/workspace/__tests__/matchWorkspaceFiles.test.ts +104 -0
  290. package/src/workspace/__tests__/resolveWorkspaceFileSelection.test.ts +135 -0
  291. package/src/workspace/__tests__/useWorkspaceContentSearch.test.tsx +196 -0
  292. package/src/workspace/__tests__/useWorkspaceFileContent.test.tsx +190 -0
  293. package/src/workspace/__tests__/useWorkspaceFileSearch.test.tsx +162 -0
  294. package/src/workspace/findChangeForSelection.ts +61 -0
  295. package/src/workspace/index.ts +56 -2
  296. package/src/workspace/matchContentPreview.ts +51 -0
  297. package/src/workspace/matchWorkspaceFiles.ts +86 -0
  298. package/src/workspace/resolveWorkspaceFileSelection.ts +119 -0
  299. package/src/workspace/useWorkspaceContentSearch.ts +228 -0
  300. package/src/workspace/useWorkspaceFileContent.ts +129 -0
  301. package/src/workspace/useWorkspaceFileSearch.ts +184 -0
  302. package/src/workspace/useWorkspaceFiles.ts +27 -27
  303. package/src/workspace/workspaceListingCache.ts +93 -0
  304. package/styles.css +1 -1
  305. package/workflow/WorkflowExecutionGraph.js +1 -1
  306. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  307. package/workflow/index.d.ts +1 -1
  308. package/workflow/index.d.ts.map +1 -1
  309. package/workflow/index.js +1 -1
  310. package/workflow/index.js.map +1 -1
  311. package/workflow/useFollowExecution.js +1 -1
  312. package/workflow/useFollowExecution.js.map +1 -1
  313. package/workspace/EditorTabs.d.ts +29 -0
  314. package/workspace/EditorTabs.d.ts.map +1 -0
  315. package/workspace/EditorTabs.js +66 -0
  316. package/workspace/EditorTabs.js.map +1 -0
  317. package/workspace/ExplorerTree.d.ts +32 -0
  318. package/workspace/ExplorerTree.d.ts.map +1 -0
  319. package/workspace/ExplorerTree.js +45 -0
  320. package/workspace/ExplorerTree.js.map +1 -0
  321. package/workspace/FileViewer.d.ts +93 -0
  322. package/workspace/FileViewer.d.ts.map +1 -0
  323. package/workspace/FileViewer.js +182 -0
  324. package/workspace/FileViewer.js.map +1 -0
  325. package/workspace/WorkspaceContentSearch.d.ts +41 -0
  326. package/workspace/WorkspaceContentSearch.d.ts.map +1 -0
  327. package/workspace/WorkspaceContentSearch.js +195 -0
  328. package/workspace/WorkspaceContentSearch.js.map +1 -0
  329. package/workspace/WorkspaceContentSearcher.d.ts +59 -0
  330. package/workspace/WorkspaceContentSearcher.d.ts.map +1 -0
  331. package/workspace/WorkspaceContentSearcher.js +7 -0
  332. package/workspace/WorkspaceContentSearcher.js.map +1 -0
  333. package/workspace/WorkspaceFileLister.d.ts +11 -0
  334. package/workspace/WorkspaceFileLister.d.ts.map +1 -1
  335. package/workspace/WorkspaceFileReader.d.ts +48 -0
  336. package/workspace/WorkspaceFileReader.d.ts.map +1 -0
  337. package/workspace/WorkspaceFileReader.js +11 -0
  338. package/workspace/WorkspaceFileReader.js.map +1 -0
  339. package/workspace/WorkspaceFileSearch.d.ts +32 -0
  340. package/workspace/WorkspaceFileSearch.d.ts.map +1 -0
  341. package/workspace/WorkspaceFileSearch.js +155 -0
  342. package/workspace/WorkspaceFileSearch.js.map +1 -0
  343. package/workspace/WorkspaceSurface.d.ts +151 -0
  344. package/workspace/WorkspaceSurface.d.ts.map +1 -0
  345. package/workspace/WorkspaceSurface.js +184 -0
  346. package/workspace/WorkspaceSurface.js.map +1 -0
  347. package/workspace/findChangeForSelection.d.ts +19 -0
  348. package/workspace/findChangeForSelection.d.ts.map +1 -0
  349. package/workspace/findChangeForSelection.js +46 -0
  350. package/workspace/findChangeForSelection.js.map +1 -0
  351. package/workspace/index.d.ts +24 -2
  352. package/workspace/index.d.ts.map +1 -1
  353. package/workspace/index.js +13 -1
  354. package/workspace/index.js.map +1 -1
  355. package/workspace/matchContentPreview.d.ts +21 -0
  356. package/workspace/matchContentPreview.d.ts.map +1 -0
  357. package/workspace/matchContentPreview.js +36 -0
  358. package/workspace/matchContentPreview.js.map +1 -0
  359. package/workspace/matchWorkspaceFiles.d.ts +30 -0
  360. package/workspace/matchWorkspaceFiles.d.ts.map +1 -0
  361. package/workspace/matchWorkspaceFiles.js +58 -0
  362. package/workspace/matchWorkspaceFiles.js.map +1 -0
  363. package/workspace/resolveWorkspaceFileSelection.d.ts +19 -0
  364. package/workspace/resolveWorkspaceFileSelection.d.ts.map +1 -0
  365. package/workspace/resolveWorkspaceFileSelection.js +115 -0
  366. package/workspace/resolveWorkspaceFileSelection.js.map +1 -0
  367. package/workspace/useWorkspaceContentSearch.d.ts +69 -0
  368. package/workspace/useWorkspaceContentSearch.d.ts.map +1 -0
  369. package/workspace/useWorkspaceContentSearch.js +154 -0
  370. package/workspace/useWorkspaceContentSearch.js.map +1 -0
  371. package/workspace/useWorkspaceFileContent.d.ts +73 -0
  372. package/workspace/useWorkspaceFileContent.d.ts.map +1 -0
  373. package/workspace/useWorkspaceFileContent.js +57 -0
  374. package/workspace/useWorkspaceFileContent.js.map +1 -0
  375. package/workspace/useWorkspaceFileSearch.d.ts +61 -0
  376. package/workspace/useWorkspaceFileSearch.d.ts.map +1 -0
  377. package/workspace/useWorkspaceFileSearch.js +119 -0
  378. package/workspace/useWorkspaceFileSearch.js.map +1 -0
  379. package/workspace/useWorkspaceFiles.d.ts +13 -5
  380. package/workspace/useWorkspaceFiles.d.ts.map +1 -1
  381. package/workspace/useWorkspaceFiles.js +18 -19
  382. package/workspace/useWorkspaceFiles.js.map +1 -1
  383. package/workspace/workspaceListingCache.d.ts +47 -0
  384. package/workspace/workspaceListingCache.d.ts.map +1 -0
  385. package/workspace/workspaceListingCache.js +55 -0
  386. package/workspace/workspaceListingCache.js.map +1 -0
  387. package/session/inspector/ArtifactsTab.d.ts.map +0 -1
  388. package/session/inspector/ArtifactsTab.js.map +0 -1
  389. package/session/inspector/ChangesTab.d.ts.map +0 -1
  390. package/session/inspector/ChangesTab.js.map +0 -1
  391. package/session/inspector/InspectTab.d.ts.map +0 -1
  392. package/session/inspector/InspectTab.js.map +0 -1
  393. package/session/inspector/SessionInspector.d.ts +0 -64
  394. package/session/inspector/SessionInspector.d.ts.map +0 -1
  395. package/session/inspector/SessionInspector.js +0 -53
  396. package/session/inspector/SessionInspector.js.map +0 -1
  397. package/session/inspector/SetupTab.d.ts.map +0 -1
  398. package/session/inspector/SetupTab.js.map +0 -1
  399. package/session/inspector/UsageTab.d.ts.map +0 -1
  400. package/session/inspector/UsageTab.js.map +0 -1
  401. package/session/inspector/WorkspaceTab.d.ts +0 -35
  402. package/session/inspector/WorkspaceTab.d.ts.map +0 -1
  403. package/session/inspector/WorkspaceTab.js +0 -75
  404. package/session/inspector/WorkspaceTab.js.map +0 -1
  405. package/session/inspector/index.d.ts.map +0 -1
  406. package/session/inspector/index.js.map +0 -1
  407. package/session/inspector/useSessionInspector.d.ts +0 -49
  408. package/session/inspector/useSessionInspector.d.ts.map +0 -1
  409. package/session/inspector/useSessionInspector.js +0 -122
  410. package/session/inspector/useSessionInspector.js.map +0 -1
  411. package/src/session/inspector/SessionInspector.tsx +0 -162
  412. package/src/session/inspector/WorkspaceTab.tsx +0 -245
  413. package/src/session/inspector/__tests__/useSessionInspector.test.ts +0 -251
  414. package/src/session/inspector/useSessionInspector.ts +0 -178
  415. package/src/workspace/WorkspaceEntryFiles.tsx +0 -196
  416. package/workflow/motion-preference.d.ts.map +0 -1
  417. package/workflow/motion-preference.js.map +0 -1
  418. package/workspace/WorkspaceEntryFiles.d.ts +0 -22
  419. package/workspace/WorkspaceEntryFiles.d.ts.map +0 -1
  420. package/workspace/WorkspaceEntryFiles.js +0 -58
  421. package/workspace/WorkspaceEntryFiles.js.map +0 -1
  422. /package/session/{inspector → facets}/InspectTab.d.ts +0 -0
  423. /package/session/{inspector → facets}/InspectTab.js +0 -0
  424. /package/src/{workflow → internal}/__tests__/motion-preference.test.ts +0 -0
  425. /package/src/session/{inspector → facets}/InspectTab.tsx +0 -0
  426. /package/src/session/{inspector → facets}/__tests__/ChangesTab.test.tsx +0 -0
@@ -9,6 +9,12 @@ export interface FileTreeNodeProps {
9
9
  readonly node: TreeNode;
10
10
  readonly selectedPath: string;
11
11
  readonly onSelect: (path: string) => void;
12
+ /**
13
+ * Optional double-click handler for file nodes. When set, a double-click on a
14
+ * file calls `onActivate(path)` (used by the workspace surface to pin a
15
+ * previewed tab); the single click still fires `onSelect`. Folders ignore it.
16
+ */
17
+ readonly onActivate?: (path: string) => void;
12
18
  readonly depth: number;
13
19
  /**
14
20
  * When `true`, file nodes (not folders) become draggable and emit
@@ -18,6 +24,17 @@ export interface FileTreeNodeProps {
18
24
  * where file referencing is not applicable (e.g., SkillFileBrowser).
19
25
  */
20
26
  readonly enableDrag?: boolean;
27
+ /**
28
+ * When `true`, render monochrome file-type / folder icons before each name
29
+ * (VS Code explorer feel). Opt-in so drag/skill contexts stay icon-free.
30
+ */
31
+ readonly showIcons?: boolean;
32
+ /**
33
+ * When `true`, draw vertical indent guides down each nested group and indent
34
+ * via nested margins rather than per-row left padding. Opt-in; the default
35
+ * padding-based indentation is preserved for existing consumers.
36
+ */
37
+ readonly indentGuides?: boolean;
21
38
  /**
22
39
  * Maximum depth at which folders start collapsed instead of expanded.
23
40
  * Folders at depth >= maxInitialDepth render collapsed by default,
@@ -38,5 +55,5 @@ export interface FileTreeNodeProps {
38
55
  * Uses `role="treeitem"` / `role="group"` for a11y and `--stgm-*`
39
56
  * theme tokens for all visual properties.
40
57
  */
41
- export declare function FileTreeNode({ node, selectedPath, onSelect, depth, enableDrag, maxInitialDepth, }: FileTreeNodeProps): import("react/jsx-runtime").JSX.Element;
58
+ export declare function FileTreeNode({ node, selectedPath, onSelect, onActivate, depth, enableDrag, showIcons, indentGuides, maxInitialDepth, }: FileTreeNodeProps): import("react/jsx-runtime").JSX.Element;
42
59
  //# sourceMappingURL=FileTreeNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileTreeNode.d.ts","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,UAAkB,EAClB,eAAe,GAChB,EAAE,iBAAiB,2CAoEnB"}
1
+ {"version":3,"file":"FileTreeNode.d.ts","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,KAAK,EACL,UAAkB,EAClB,SAAiB,EACjB,YAAoB,EACpB,eAAe,GAChB,EAAE,iBAAiB,2CAuFnB"}
@@ -2,6 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { FileTypeIcon, FolderTypeIcon } from "../file-icons/index.js";
5
6
  /**
6
7
  * MIME type used to transfer workspace file-reference data during
7
8
  * drag-and-drop. The payload is `JSON.stringify({ path })` where
@@ -18,7 +19,7 @@ export const FILE_REF_MIME = "application/x-stigmer-file-ref";
18
19
  * Uses `role="treeitem"` / `role="group"` for a11y and `--stgm-*`
19
20
  * theme tokens for all visual properties.
20
21
  */
21
- export function FileTreeNode({ node, selectedPath, onSelect, depth, enableDrag = false, maxInitialDepth, }) {
22
+ export function FileTreeNode({ node, selectedPath, onSelect, onActivate, depth, enableDrag = false, showIcons = false, indentGuides = false, maxInitialDepth, }) {
22
23
  const [expanded, setExpanded] = useState(maxInitialDepth === undefined ? true : depth < maxInitialDepth);
23
24
  const isFolder = !!node.children;
24
25
  const isSelected = node.path === selectedPath;
@@ -31,10 +32,18 @@ export function FileTreeNode({ node, selectedPath, onSelect, depth, enableDrag =
31
32
  onSelect(node.path);
32
33
  }
33
34
  }, [isFolder, node.path, onSelect]);
35
+ const handleDoubleClick = useCallback(() => {
36
+ if (!isFolder)
37
+ onActivate?.(node.path);
38
+ }, [isFolder, node.path, onActivate]);
34
39
  const handleDragStart = useCallback((e) => {
35
40
  e.dataTransfer.setData(FILE_REF_MIME, JSON.stringify({ path: node.path }));
36
41
  e.dataTransfer.effectAllowed = "link";
37
42
  }, [node.path]);
38
- return (_jsxs("li", { role: "treeitem", "aria-expanded": isFolder ? expanded : undefined, children: [_jsxs("button", { type: "button", onClick: handleClick, draggable: isDraggable, onDragStart: isDraggable ? handleDragStart : undefined, className: cn("flex w-full items-center gap-1.5 px-3 py-1 text-left text-xs transition-colors", "hover:bg-muted", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", isSelected && !isFolder && "bg-muted text-foreground font-medium", !isSelected && "text-muted-foreground", isDraggable && "cursor-grab active:cursor-grabbing"), style: { paddingLeft: `${12 + depth * 12}px` }, "aria-current": isSelected ? "true" : undefined, children: [isFolder && (_jsx("span", { className: "text-[10px] text-muted-foreground-subtle", children: expanded ? "▼" : "▶" })), _jsx("span", { className: cn("truncate", isFolder && "font-medium text-foreground"), children: node.name })] }), isFolder && expanded && node.children && (_jsx("ul", { role: "group", children: node.children.map((child) => (_jsx(FileTreeNode, { node: child, selectedPath: selectedPath, onSelect: onSelect, depth: depth + 1, enableDrag: enableDrag, maxInitialDepth: maxInitialDepth }, child.path))) }))] }));
43
+ return (_jsxs("li", { role: "treeitem", "aria-expanded": isFolder ? expanded : undefined, children: [_jsxs("button", { type: "button", onClick: handleClick, onDoubleClick: onActivate ? handleDoubleClick : undefined, draggable: isDraggable, onDragStart: isDraggable ? handleDragStart : undefined, className: cn("flex w-full items-center gap-1.5 py-1 text-left text-xs transition-colors", "hover:bg-muted", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", isSelected && !isFolder && "bg-muted text-foreground font-medium", !isSelected && "text-muted-foreground", isDraggable && "cursor-grab active:cursor-grabbing"),
44
+ // Indent-guide mode indents via the nested group's margin, so rows need
45
+ // only a small constant inset; padding mode keeps the per-depth inset.
46
+ style: { paddingLeft: indentGuides ? "8px" : `${12 + depth * 12}px`, paddingRight: "8px" }, "aria-current": isSelected ? "true" : undefined, children: [isFolder && (_jsx("span", { className: "text-[10px] text-muted-foreground-subtle", children: expanded ? "▼" : "▶" })), showIcons &&
47
+ (isFolder ? (_jsx(FolderTypeIcon, { open: expanded })) : (_jsx(FileTypeIcon, { fileName: node.name }))), _jsx("span", { className: cn("truncate", isFolder && "font-medium text-foreground"), children: node.name })] }), isFolder && expanded && node.children && (_jsx("ul", { role: "group", className: cn(indentGuides && "ml-3 border-l border-border"), children: node.children.map((child) => (_jsx(FileTreeNode, { node: child, selectedPath: selectedPath, onSelect: onSelect, onActivate: onActivate, depth: depth + 1, enableDrag: enableDrag, showIcons: showIcons, indentGuides: indentGuides, maxInitialDepth: maxInitialDepth }, child.path))) }))] }));
39
48
  }
40
49
  //# sourceMappingURL=FileTreeNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileTreeNode.js","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileTreeNode.js","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"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"}
@@ -25,6 +25,14 @@ export declare function stripFrontmatter(content: string): string;
25
25
  * no-op for everything else (already-rich markdown, prose, or a reply that is
26
26
  * legitimately a single code block).
27
27
  *
28
+ * `allowBareFence` extends the unwrap to a whole-body fence with NO language
29
+ * tag. For an ordinary chat message a bare fence is ambiguous (it may be a
30
+ * legitimate single code block), so the default stays strict. A Plan-mode plan
31
+ * is different by contract: the turn's output IS a markdown document, so a
32
+ * reply that is one giant untagged fence is a wrapped plan, not code. Only
33
+ * plan-document surfaces pass `true`. A fence tagged with any other language
34
+ * (```python …) is never unwrapped in either mode.
35
+ *
28
36
  * Render-time only: callers pass it the text right before handing it to the
29
37
  * markdown renderer, so the transcript and the raw artifact stay faithful to
30
38
  * what the agent produced — a single source of truth for the unwrap, with no
@@ -32,7 +40,23 @@ export declare function stripFrontmatter(content: string): string;
32
40
  * arrived yet, so this no-ops and the live text renders as typed; it unwraps
33
41
  * once the block closes.
34
42
  */
35
- export declare function unwrapEnclosingMarkdownFence(content: string): string;
43
+ export declare function unwrapEnclosingMarkdownFence(content: string, allowBareFence?: boolean): string;
44
+ /**
45
+ * Splits a markdown document into its leading `# H1` title and the remaining
46
+ * body, for surfaces that render the title in their own chrome (the plan
47
+ * document header) instead of inside the prose flow.
48
+ *
49
+ * Only a heading at the very start of the document counts as the title — an
50
+ * `# H1` further down is document content and stays in the body. When there is
51
+ * no leading H1, `title` is `null` and `body` is the input unchanged.
52
+ *
53
+ * Render-time only, like {@link unwrapEnclosingMarkdownFence}: the stored
54
+ * message/artifact keeps its heading; only the presentation moves it.
55
+ */
56
+ export declare function extractLeadingH1(markdown: string): {
57
+ readonly title: string | null;
58
+ readonly body: string;
59
+ };
36
60
  /**
37
61
  * Styled react-markdown component overrides for SDK markdown surfaces.
38
62
  *
@@ -43,4 +67,17 @@ export declare function unwrapEnclosingMarkdownFence(content: string): string;
43
67
  * Used by `MessageEntry` (chat messages) and `SkillDetailView` (SKILL.md).
44
68
  */
45
69
  export declare const MARKDOWN_COMPONENTS: Components;
70
+ /**
71
+ * Document-grade typography for a Plan-mode plan: one step up the heading
72
+ * scale from the chat-tuned {@link MARKDOWN_COMPONENTS}, wider section
73
+ * spacing, and a hairline under `##` section headings for scannability. The
74
+ * plan is a reviewable document, not a chat bubble — its headings must carry
75
+ * the structure at a glance.
76
+ *
77
+ * Everything except the headings is inherited from `MARKDOWN_COMPONENTS`, so
78
+ * body text, code, tables, and links render identically across chat and plan
79
+ * surfaces. Used by `PlanDocumentMessage` (thread) — the same treatment any
80
+ * plan-document surface should share.
81
+ */
82
+ export declare const PLAN_DOCUMENT_MARKDOWN_COMPONENTS: Components;
46
83
  //# sourceMappingURL=markdown-components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-components.d.ts","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAQnC;;;GAGG;AACH,eAAO,MAAM,cAAc,sBAAc,CAAC;AAI1C;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA4LjC,CAAC"}
1
+ {"version":3,"file":"markdown-components.d.ts","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAQnC;;;GAGG;AACH,eAAO,MAAM,cAAc,sBAAc,CAAC;AAI1C;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,cAAc,UAAQ,GACrB,MAAM,CASR;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAKA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA4LjC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iCAAiC,EAAE,UAqC/C,CAAC"}
@@ -33,6 +33,13 @@ export function stripFrontmatter(content) {
33
33
  * the kind of fuzzy heuristic this codebase avoids.
34
34
  */
35
35
  const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/i;
36
+ /**
37
+ * Matches content whose ENTIRE body is a single fenced code block with an
38
+ * EMPTY info string (no language tag). Only meaningful for surfaces that know
39
+ * the body is markdown by contract (a Plan-mode plan) — see
40
+ * {@link unwrapEnclosingMarkdownFence}'s `allowBareFence`.
41
+ */
42
+ const ENCLOSING_BARE_FENCE_RE = /^(`{3,})[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/;
36
43
  /**
37
44
  * Unwraps a message the model wrapped entirely in a ```markdown / ```md fence.
38
45
  *
@@ -43,6 +50,14 @@ const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\
43
50
  * no-op for everything else (already-rich markdown, prose, or a reply that is
44
51
  * legitimately a single code block).
45
52
  *
53
+ * `allowBareFence` extends the unwrap to a whole-body fence with NO language
54
+ * tag. For an ordinary chat message a bare fence is ambiguous (it may be a
55
+ * legitimate single code block), so the default stays strict. A Plan-mode plan
56
+ * is different by contract: the turn's output IS a markdown document, so a
57
+ * reply that is one giant untagged fence is a wrapped plan, not code. Only
58
+ * plan-document surfaces pass `true`. A fence tagged with any other language
59
+ * (```python …) is never unwrapped in either mode.
60
+ *
46
61
  * Render-time only: callers pass it the text right before handing it to the
47
62
  * markdown renderer, so the transcript and the raw artifact stay faithful to
48
63
  * what the agent produced — a single source of truth for the unwrap, with no
@@ -50,9 +65,42 @@ const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\
50
65
  * arrived yet, so this no-ops and the live text renders as typed; it unwraps
51
66
  * once the block closes.
52
67
  */
53
- export function unwrapEnclosingMarkdownFence(content) {
54
- const match = ENCLOSING_MARKDOWN_FENCE_RE.exec(content.trim());
55
- return match ? match[2] : content;
68
+ export function unwrapEnclosingMarkdownFence(content, allowBareFence = false) {
69
+ const trimmed = content.trim();
70
+ const tagged = ENCLOSING_MARKDOWN_FENCE_RE.exec(trimmed);
71
+ if (tagged)
72
+ return tagged[2];
73
+ if (allowBareFence) {
74
+ const bare = ENCLOSING_BARE_FENCE_RE.exec(trimmed);
75
+ if (bare)
76
+ return bare[2];
77
+ }
78
+ return content;
79
+ }
80
+ /**
81
+ * Matches a document that OPENS with an `# H1` heading (optionally preceded by
82
+ * blank lines only). Group 1 is the heading text; the match spans through the
83
+ * heading's trailing newline(s) so `body` starts at the first content line.
84
+ */
85
+ const LEADING_H1_RE = /^#[ \t]+(.+?)[ \t]*(?:\r?\n+|$)/;
86
+ /**
87
+ * Splits a markdown document into its leading `# H1` title and the remaining
88
+ * body, for surfaces that render the title in their own chrome (the plan
89
+ * document header) instead of inside the prose flow.
90
+ *
91
+ * Only a heading at the very start of the document counts as the title — an
92
+ * `# H1` further down is document content and stays in the body. When there is
93
+ * no leading H1, `title` is `null` and `body` is the input unchanged.
94
+ *
95
+ * Render-time only, like {@link unwrapEnclosingMarkdownFence}: the stored
96
+ * message/artifact keeps its heading; only the presentation moves it.
97
+ */
98
+ export function extractLeadingH1(markdown) {
99
+ const trimmed = markdown.trim();
100
+ const match = LEADING_H1_RE.exec(trimmed);
101
+ if (!match)
102
+ return { title: null, body: markdown };
103
+ return { title: match[1], body: trimmed.slice(match[0].length) };
56
104
  }
57
105
  /**
58
106
  * Styled react-markdown component overrides for SDK markdown surfaces.
@@ -65,22 +113,22 @@ export function unwrapEnclosingMarkdownFence(content) {
65
113
  */
66
114
  export const MARKDOWN_COMPONENTS = {
67
115
  p({ children, ...props }) {
68
- return (_jsx("p", { className: "text-sm text-foreground mb-3 last:mb-0 leading-relaxed", ...props, children: children }));
116
+ return (_jsx("p", { className: "text-sm text-foreground mb-3 last:mb-0 leading-relaxed break-words", ...props, children: children }));
69
117
  },
70
118
  a({ children, href, ...props }) {
71
- return (_jsx("a", { href: href, className: "text-primary underline underline-offset-2 hover:text-primary-muted", target: "_blank", rel: "noopener noreferrer", ...props, children: children }));
119
+ return (_jsx("a", { href: href, className: "text-primary underline underline-offset-2 hover:text-primary-muted break-words", target: "_blank", rel: "noopener noreferrer", ...props, children: children }));
72
120
  },
73
121
  h1({ children, ...props }) {
74
- return (_jsx("h1", { className: "text-lg font-semibold text-foreground mt-5 mb-2 first:mt-0", ...props, children: children }));
122
+ return (_jsx("h1", { className: "text-lg font-semibold text-foreground mt-5 mb-2 first:mt-0 break-words", ...props, children: children }));
75
123
  },
76
124
  h2({ children, ...props }) {
77
- return (_jsx("h2", { className: "text-base font-semibold text-foreground mt-5 mb-2 first:mt-0", ...props, children: children }));
125
+ return (_jsx("h2", { className: "text-base font-semibold text-foreground mt-5 mb-2 first:mt-0 break-words", ...props, children: children }));
78
126
  },
79
127
  h3({ children, ...props }) {
80
- return (_jsx("h3", { className: "text-sm font-semibold text-foreground mt-4 mb-1.5 first:mt-0", ...props, children: children }));
128
+ return (_jsx("h3", { className: "text-sm font-semibold text-foreground mt-4 mb-1.5 first:mt-0 break-words", ...props, children: children }));
81
129
  },
82
130
  h4({ children, ...props }) {
83
- return (_jsx("h4", { className: "text-sm font-medium text-foreground mt-3 mb-1 first:mt-0", ...props, children: children }));
131
+ return (_jsx("h4", { className: "text-sm font-medium text-foreground mt-3 mb-1 first:mt-0 break-words", ...props, children: children }));
84
132
  },
85
133
  ul({ children, ...props }) {
86
134
  return (_jsx("ul", { className: "list-disc pl-5 mb-3 last:mb-0 space-y-1 text-sm text-foreground", ...props, children: children }));
@@ -89,7 +137,7 @@ export const MARKDOWN_COMPONENTS = {
89
137
  return (_jsx("ol", { className: "list-decimal pl-5 mb-3 last:mb-0 space-y-1 text-sm text-foreground", ...props, children: children }));
90
138
  },
91
139
  li({ children, ...props }) {
92
- return (_jsx("li", { className: "leading-relaxed", ...props, children: children }));
140
+ return (_jsx("li", { className: "leading-relaxed break-words", ...props, children: children }));
93
141
  },
94
142
  pre({ children, ...props }) {
95
143
  return (_jsx("pre", { className: "mb-3 last:mb-0 overflow-x-auto rounded-md bg-muted p-3", ...props, children: children }));
@@ -108,7 +156,7 @@ export const MARKDOWN_COMPONENTS = {
108
156
  : null;
109
157
  return (_jsx("code", { className: cn("hljs font-mono text-xs text-foreground", codeClassName), ...props, children: highlighted ?? children }));
110
158
  }
111
- return (_jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded text-foreground", ...props, children: children }));
159
+ return (_jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded text-foreground break-words", ...props, children: children }));
112
160
  },
113
161
  blockquote({ children, ...props }) {
114
162
  return (_jsx("blockquote", { className: "border-l-2 border-border pl-4 mb-3 last:mb-0 text-muted-foreground italic", ...props, children: children }));
@@ -132,4 +180,31 @@ export const MARKDOWN_COMPONENTS = {
132
180
  return (_jsx("em", { className: "italic", ...props, children: children }));
133
181
  },
134
182
  };
183
+ /**
184
+ * Document-grade typography for a Plan-mode plan: one step up the heading
185
+ * scale from the chat-tuned {@link MARKDOWN_COMPONENTS}, wider section
186
+ * spacing, and a hairline under `##` section headings for scannability. The
187
+ * plan is a reviewable document, not a chat bubble — its headings must carry
188
+ * the structure at a glance.
189
+ *
190
+ * Everything except the headings is inherited from `MARKDOWN_COMPONENTS`, so
191
+ * body text, code, tables, and links render identically across chat and plan
192
+ * surfaces. Used by `PlanDocumentMessage` (thread) — the same treatment any
193
+ * plan-document surface should share.
194
+ */
195
+ export const PLAN_DOCUMENT_MARKDOWN_COMPONENTS = {
196
+ ...MARKDOWN_COMPONENTS,
197
+ h1({ children, ...props }) {
198
+ return (_jsx("h1", { className: "text-lg font-semibold text-foreground mt-6 mb-3 first:mt-0 break-words", ...props, children: children }));
199
+ },
200
+ h2({ children, ...props }) {
201
+ return (_jsx("h2", { className: "text-base font-semibold text-foreground mt-6 mb-2.5 pb-1 border-b border-border-muted first:mt-0 break-words", ...props, children: children }));
202
+ },
203
+ h3({ children, ...props }) {
204
+ return (_jsx("h3", { className: "text-sm font-semibold text-foreground mt-5 mb-2 first:mt-0 break-words", ...props, children: children }));
205
+ },
206
+ h4({ children, ...props }) {
207
+ return (_jsx("h4", { className: "text-sm font-medium text-foreground mt-4 mb-1.5 first:mt-0 break-words", ...props, children: children }));
208
+ },
209
+ };
135
210
  //# sourceMappingURL=markdown-components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-components.js","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-components.js","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * Utility for respecting the user's motion preference (prefers-reduced-motion)
3
- * in programmatic viewport animations (fitView, setCenter, etc.) that are NOT
4
- * covered by the CSS-level reduced-motion rule in styles.css.
3
+ * in programmatic viewport animations (fitView, setCenter, scrollIntoView, etc.)
4
+ * that are NOT covered by the CSS-level reduced-motion rule in styles.css.
5
5
  *
6
- * React Flow's JS-driven animations (duration parameter on fitView/setCenter)
7
- * bypass CSS media queries — they must be explicitly checked.
6
+ * JS-driven animations (React Flow's duration parameter on fitView/setCenter,
7
+ * smooth `scrollIntoView`) bypass CSS media queries — they must be explicitly
8
+ * checked. Lives in `internal/` because it is cross-cutting: the workflow graph
9
+ * and the workspace file viewer both depend on it, and `internal/` may not
10
+ * depend on a feature domain.
8
11
  */
9
12
  /**
10
13
  * Returns true if the user prefers reduced motion.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-preference.d.ts","sourceRoot":"","sources":["../../src/internal/motion-preference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAY9C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * Utility for respecting the user's motion preference (prefers-reduced-motion)
3
- * in programmatic viewport animations (fitView, setCenter, etc.) that are NOT
4
- * covered by the CSS-level reduced-motion rule in styles.css.
3
+ * in programmatic viewport animations (fitView, setCenter, scrollIntoView, etc.)
4
+ * that are NOT covered by the CSS-level reduced-motion rule in styles.css.
5
5
  *
6
- * React Flow's JS-driven animations (duration parameter on fitView/setCenter)
7
- * bypass CSS media queries — they must be explicitly checked.
6
+ * JS-driven animations (React Flow's duration parameter on fitView/setCenter,
7
+ * smooth `scrollIntoView`) bypass CSS media queries — they must be explicitly
8
+ * checked. Lives in `internal/` because it is cross-cutting: the workflow graph
9
+ * and the workspace file viewer both depend on it, and `internal/` may not
10
+ * depend on a feature domain.
8
11
  */
9
12
  let cachedPreference = null;
10
13
  let mediaQuery = null;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-preference.js","sourceRoot":"","sources":["../../src/internal/motion-preference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,IAAI,gBAAgB,GAAmB,IAAI,CAAC;AAC5C,IAAI,UAAU,GAA0B,IAAI,CAAC;AAE7C,SAAS,aAAa;IACpB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtB,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC;QAC9B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YAClC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC"}
@@ -1,10 +1,16 @@
1
1
  import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
2
2
  import { ConversationStore, type StreamState } from "./conversation-store.js";
3
+ import { WorkspaceFileSelectionStore, type SelectedWorkspaceFile } from "./workspace-file-selection-store.js";
4
+ import { WorkspaceEditorsStore, type WorkspaceEditorsSnapshot } from "./workspace-editors-store.js";
3
5
  export { ConversationStore, type StreamState } from "./conversation-store.js";
4
6
  export { structuralShare } from "./structural-share.js";
5
7
  export { WorkflowExecutionEventStore, type WorkflowEventStreamState, type DerivedTaskState, type DerivedCostSummary, } from "./workflow-execution-event-store.js";
6
8
  export { SelectionStore } from "./selection-store.js";
7
9
  export type { SelectedThreadItem } from "./selection-store.js";
10
+ export { WorkspaceFileSelectionStore } from "./workspace-file-selection-store.js";
11
+ export type { SelectedWorkspaceFile } from "./workspace-file-selection-store.js";
12
+ export { WorkspaceEditorsStore, editorKey, virtualEntryId, isVirtualEntryId, } from "./workspace-editors-store.js";
13
+ export type { OpenEditor, OpenFileOptions, EditorReveal, WorkspaceEditorsSnapshot, } from "./workspace-editors-store.js";
8
14
  /**
9
15
  * Internal context for the conversation store. Not exported from the
10
16
  * public SDK barrel — used only within SDK hooks and components.
@@ -31,4 +37,31 @@ export declare function useStoreExecution(store: ConversationStore): AgentExecut
31
37
  * Returns a stable reference when the state is unchanged.
32
38
  */
33
39
  export declare function useStoreStreamState(store: ConversationStore): StreamState;
40
+ /**
41
+ * Internal context carrying the {@link WorkspaceFileSelectionStore} instance
42
+ * (stable ref) to both columns of the session viewer. Not exported from the
43
+ * public SDK barrel — consumed only within SDK components and `SessionViewer`.
44
+ */
45
+ export declare const WorkspaceFileSelectionContext: import("react").Context<WorkspaceFileSelectionStore | null>;
46
+ /**
47
+ * Access the workspace-file selection store from context.
48
+ * Throws if called outside a `WorkspaceFileSelectionContext.Provider`.
49
+ */
50
+ export declare function useWorkspaceFileSelectionStore(): WorkspaceFileSelectionStore;
51
+ /**
52
+ * Create or reuse a `WorkspaceFileSelectionStore` instance, preserved across
53
+ * re-renders via ref. `SessionViewer` calls this and provides the result
54
+ * through {@link WorkspaceFileSelectionContext} (DD-07).
55
+ */
56
+ export declare function useWorkspaceFileSelectionStoreRef(): WorkspaceFileSelectionStore;
57
+ /** Subscribe to the currently-selected workspace file. */
58
+ export declare function useWorkspaceFileSelection(store: WorkspaceFileSelectionStore): SelectedWorkspaceFile | null;
59
+ /**
60
+ * Create or reuse a `WorkspaceEditorsStore` instance, preserved across
61
+ * re-renders via ref. Owned by `SessionViewer` alongside the selection store;
62
+ * the surface subscribes to it for its tab group.
63
+ */
64
+ export declare function useWorkspaceEditorsStoreRef(): WorkspaceEditorsStore;
65
+ /** Subscribe to the open-editor group snapshot. */
66
+ export declare function useWorkspaceEditors(store: WorkspaceEditorsStore): WorkspaceEditorsSnapshot;
34
67
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,2BAA2B,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM/D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,mDACU,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAQxD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAM3D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,GACvB,cAAc,GAAG,IAAI,CAEvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAEzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,2BAA2B,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,qBAAqB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,2BAA2B,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AAMtC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,mDACU,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAQxD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAM3D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,GACvB,cAAc,GAAG,IAAI,CAEvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAEzE;AAMD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,6DACe,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,2BAA2B,CAQ5E;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,IAAI,2BAA2B,CAM/E;AAED,0DAA0D;AAC1D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,2BAA2B,GACjC,qBAAqB,GAAG,IAAI,CAE9B;AAMD;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,qBAAqB,CAMnE;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,GAC3B,wBAAwB,CAE1B"}
@@ -1,10 +1,14 @@
1
1
  "use client";
2
2
  import { createContext, useContext, useRef, useSyncExternalStore } from "react";
3
3
  import { ConversationStore } from "./conversation-store.js";
4
+ import { WorkspaceFileSelectionStore, } from "./workspace-file-selection-store.js";
5
+ import { WorkspaceEditorsStore, } from "./workspace-editors-store.js";
4
6
  export { ConversationStore } from "./conversation-store.js";
5
7
  export { structuralShare } from "./structural-share.js";
6
8
  export { WorkflowExecutionEventStore, } from "./workflow-execution-event-store.js";
7
9
  export { SelectionStore } from "./selection-store.js";
10
+ export { WorkspaceFileSelectionStore } from "./workspace-file-selection-store.js";
11
+ export { WorkspaceEditorsStore, editorKey, virtualEntryId, isVirtualEntryId, } from "./workspace-editors-store.js";
8
12
  // ---------------------------------------------------------------------------
9
13
  // Context
10
14
  // ---------------------------------------------------------------------------
@@ -53,4 +57,59 @@ export function useStoreExecution(store) {
53
57
  export function useStoreStreamState(store) {
54
58
  return useSyncExternalStore(store.subscribe, store.getStreamState);
55
59
  }
60
+ // ---------------------------------------------------------------------------
61
+ // Workspace file selection — the DD-07 shared "which file is open" store
62
+ // ---------------------------------------------------------------------------
63
+ /**
64
+ * Internal context carrying the {@link WorkspaceFileSelectionStore} instance
65
+ * (stable ref) to both columns of the session viewer. Not exported from the
66
+ * public SDK barrel — consumed only within SDK components and `SessionViewer`.
67
+ */
68
+ export const WorkspaceFileSelectionContext = createContext(null);
69
+ /**
70
+ * Access the workspace-file selection store from context.
71
+ * Throws if called outside a `WorkspaceFileSelectionContext.Provider`.
72
+ */
73
+ export function useWorkspaceFileSelectionStore() {
74
+ const store = useContext(WorkspaceFileSelectionContext);
75
+ if (!store) {
76
+ throw new Error("useWorkspaceFileSelectionStore must be used within a WorkspaceFileSelectionContext.Provider");
77
+ }
78
+ return store;
79
+ }
80
+ /**
81
+ * Create or reuse a `WorkspaceFileSelectionStore` instance, preserved across
82
+ * re-renders via ref. `SessionViewer` calls this and provides the result
83
+ * through {@link WorkspaceFileSelectionContext} (DD-07).
84
+ */
85
+ export function useWorkspaceFileSelectionStoreRef() {
86
+ const ref = useRef(null);
87
+ if (!ref.current) {
88
+ ref.current = new WorkspaceFileSelectionStore();
89
+ }
90
+ return ref.current;
91
+ }
92
+ /** Subscribe to the currently-selected workspace file. */
93
+ export function useWorkspaceFileSelection(store) {
94
+ return useSyncExternalStore(store.subscribe, store.getSelection);
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // Workspace editors — the surface's open-editor group (Slice B)
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * Create or reuse a `WorkspaceEditorsStore` instance, preserved across
101
+ * re-renders via ref. Owned by `SessionViewer` alongside the selection store;
102
+ * the surface subscribes to it for its tab group.
103
+ */
104
+ export function useWorkspaceEditorsStoreRef() {
105
+ const ref = useRef(null);
106
+ if (!ref.current) {
107
+ ref.current = new WorkspaceEditorsStore();
108
+ }
109
+ return ref.current;
110
+ }
111
+ /** Subscribe to the open-editor group snapshot. */
112
+ export function useWorkspaceEditors(store) {
113
+ return useSyncExternalStore(store.subscribe, store.getSnapshot);
114
+ }
56
115
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAoB,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAoB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,2BAA2B,GAI5B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GACnC,aAAa,CAA2B,IAAI,CAAC,CAAC;AAEhD,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAwB;IAExB,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"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"}