@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
@@ -0,0 +1,11 @@
1
+ // Content-fetch capability — the byte-reading sibling of WorkspaceFileLister.
2
+ // Domain: workspace. Injected by the host (DD-004) so the SDK never learns how
3
+ // bytes are fetched: GitHub Contents/blob on web, Tauri fs on desktop.
4
+ /**
5
+ * Shared soft cap for a single file read, enforced identically on web and
6
+ * desktop so both substrates truncate at the same boundary. Files larger than
7
+ * this return their first {@link MAX_WORKSPACE_FILE_READ_BYTES} bytes in `text`
8
+ * with `truncated: true`; `size` still reports the full file size.
9
+ */
10
+ export const MAX_WORKSPACE_FILE_READ_BYTES = 1_048_576; // 1 MiB
11
+ //# sourceMappingURL=WorkspaceFileReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceFileReader.js","sourceRoot":"","sources":["../../src/workspace/WorkspaceFileReader.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,uEAAuE;AAIvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,SAAS,CAAC,CAAC,QAAQ"}
@@ -0,0 +1,32 @@
1
+ import type { WorkspaceEntry } from "./useWorkspaceEntries.js";
2
+ import type { WorkspaceFileLister } from "./WorkspaceFileLister.js";
3
+ import type { SelectedWorkspaceFile } from "../internal/store/workspace-file-selection-store.js";
4
+ /** Props for {@link WorkspaceFileSearch}. */
5
+ export interface WorkspaceFileSearchProps {
6
+ /** All workspace entries to search across. */
7
+ readonly entries: readonly WorkspaceEntry[];
8
+ /** Platform-injected file lister. `undefined` → search is unavailable. */
9
+ readonly lister: WorkspaceFileLister | undefined;
10
+ /** Opens a result in the viewer. */
11
+ readonly onOpenFile: (entryId: string, path: string) => void;
12
+ /** The file currently open in the viewer, highlighted in the results. */
13
+ readonly selectedFile?: SelectedWorkspaceFile | null;
14
+ /** Additional CSS classes for the root element. */
15
+ readonly className?: string;
16
+ }
17
+ /**
18
+ * Workspace-wide filename/path search surface.
19
+ *
20
+ * Searches the already-loaded listings across every workspace entry (via
21
+ * {@link useWorkspaceFileSearch}) and opens a hit in the viewer through
22
+ * `onOpenFile` — the same seam a file-tree click uses. Filename-first by design;
23
+ * content search is a separate substrate-specific capability (DD-09).
24
+ *
25
+ * Keyboard/a11y follows the platform's combobox+listbox pattern (see
26
+ * `mcp-server/McpServerPicker`): the input is a `role="combobox"` driving
27
+ * `aria-activedescendant`, results are a `role="listbox"` of `role="option"`
28
+ * rows, and ArrowUp/Down move a virtual focus with Enter to open — focus stays
29
+ * in the input. All visual properties flow through `--stgm-*` tokens (DD-005).
30
+ */
31
+ export declare function WorkspaceFileSearch({ entries, lister, onOpenFile, selectedFile, className, }: WorkspaceFileSearchProps): import("react/jsx-runtime").JSX.Element;
32
+ //# sourceMappingURL=WorkspaceFileSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceFileSearch.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceFileSearch.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAUjG,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACjD,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrD,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AASD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACN,UAAU,EACV,YAAY,EACZ,SAAS,GACV,EAAE,wBAAwB,2CAsJ1B"}
@@ -0,0 +1,155 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useId, useMemo, useRef, useState, } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { useWorkspaceFileSearch, } from "./useWorkspaceFileSearch.js";
6
+ /** Cap on rendered rows — keeps the DOM bounded on huge repositories. */
7
+ const MAX_RESULTS = 200;
8
+ /**
9
+ * Workspace-wide filename/path search surface.
10
+ *
11
+ * Searches the already-loaded listings across every workspace entry (via
12
+ * {@link useWorkspaceFileSearch}) and opens a hit in the viewer through
13
+ * `onOpenFile` — the same seam a file-tree click uses. Filename-first by design;
14
+ * content search is a separate substrate-specific capability (DD-09).
15
+ *
16
+ * Keyboard/a11y follows the platform's combobox+listbox pattern (see
17
+ * `mcp-server/McpServerPicker`): the input is a `role="combobox"` driving
18
+ * `aria-activedescendant`, results are a `role="listbox"` of `role="option"`
19
+ * rows, and ArrowUp/Down move a virtual focus with Enter to open — focus stays
20
+ * in the input. All visual properties flow through `--stgm-*` tokens (DD-005).
21
+ */
22
+ export function WorkspaceFileSearch({ entries, lister, onOpenFile, selectedFile, className, }) {
23
+ const [query, setQuery] = useState("");
24
+ const [focusIndex, setFocusIndex] = useState(-1);
25
+ const inputRef = useRef(null);
26
+ const listboxId = useId();
27
+ const optionId = useCallback((index) => `${listboxId}-opt-${index}`, [listboxId]);
28
+ const { groups, totalMatches, isLoading, isUnsupported } = useWorkspaceFileSearch({ entries, lister, query });
29
+ // Flat, capped view of every rendered match — the index space the keyboard
30
+ // and `aria-activedescendant` share with the grouped render below.
31
+ const flatResults = useMemo(() => {
32
+ const flat = [];
33
+ for (const group of groups) {
34
+ for (const match of group.matches) {
35
+ if (flat.length >= MAX_RESULTS)
36
+ return flat;
37
+ flat.push({ entryId: group.entry.id, entry: group.entry, match });
38
+ }
39
+ }
40
+ return flat;
41
+ }, [groups]);
42
+ // A new query invalidates the previous virtual focus.
43
+ useEffect(() => {
44
+ setFocusIndex(-1);
45
+ }, [query]);
46
+ // Autofocus on mount — the user switched into Search intending to type.
47
+ useEffect(() => {
48
+ inputRef.current?.focus();
49
+ }, []);
50
+ // Keep the virtually-focused option in view (no-op where unsupported, e.g. tests).
51
+ useEffect(() => {
52
+ if (focusIndex < 0)
53
+ return;
54
+ const el = typeof document !== "undefined"
55
+ ? document.getElementById(optionId(focusIndex))
56
+ : null;
57
+ el?.scrollIntoView?.({ block: "nearest" });
58
+ }, [focusIndex, optionId]);
59
+ const handleKeyDown = useCallback((e) => {
60
+ if (e.key === "ArrowDown") {
61
+ e.preventDefault();
62
+ setFocusIndex((prev) => prev < flatResults.length - 1 ? prev + 1 : prev);
63
+ }
64
+ else if (e.key === "ArrowUp") {
65
+ e.preventDefault();
66
+ setFocusIndex((prev) => (prev > 0 ? prev - 1 : -1));
67
+ }
68
+ else if (e.key === "Enter") {
69
+ e.preventDefault();
70
+ const target = flatResults[focusIndex];
71
+ if (target)
72
+ onOpenFile(target.entryId, target.match.path);
73
+ }
74
+ }, [flatResults, focusIndex, onOpenFile]);
75
+ const trimmed = query.trim();
76
+ const showGroupHeaders = groups.length > 1;
77
+ return (_jsxs("div", { className: cn("flex h-full flex-col", className), children: [_jsxs("div", { className: "flex items-center gap-1.5 border-b border-border px-2 py-1.5", children: [_jsx(SearchIcon, {}), _jsx("input", { ref: inputRef, type: "text", role: "combobox", "aria-expanded": true, "aria-controls": listboxId, "aria-activedescendant": focusIndex >= 0 ? optionId(focusIndex) : undefined, value: query, onChange: (e) => setQuery(e.target.value), onKeyDown: handleKeyDown, placeholder: "Search files by name\u2026", disabled: isUnsupported, className: cn("min-w-0 flex-1 bg-transparent text-xs text-foreground", "placeholder:text-muted-foreground", "focus-visible:outline-none disabled:cursor-not-allowed"), "aria-label": "Search workspace files by name" }), trimmed.length > 0 && (_jsx("button", { type: "button", onClick: () => {
78
+ setQuery("");
79
+ inputRef.current?.focus();
80
+ }, className: "shrink-0 text-muted-foreground transition-colors hover:text-foreground", "aria-label": "Clear search", children: _jsx(ClearIcon, {}) }))] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: isUnsupported ? (_jsx(MessageState, { children: "File search isn\u2019t available here." })) : trimmed.length === 0 ? (_jsx(MessageState, { children: "Search files by name across the whole workspace." })) : isLoading && totalMatches === 0 && groups.length === 0 ? (_jsx(MessageState, { children: "Searching\u2026" })) : groups.length === 0 ? (_jsxs(MessageState, { children: ["No files matching \u201C", trimmed, "\u201D."] })) : (_jsxs(_Fragment, { children: [_jsx("ul", { id: listboxId, role: "listbox", "aria-label": "Search results", className: "py-0.5", children: renderRows({
81
+ groups,
82
+ showGroupHeaders,
83
+ selectedFile: selectedFile ?? null,
84
+ focusIndex,
85
+ optionId,
86
+ onOpenFile,
87
+ }) }), totalMatches > flatResults.length && (_jsxs("p", { className: "border-t border-border px-3 py-1.5 text-[0.65rem] text-muted-foreground", children: ["Showing the first ", flatResults.length, " of ", totalMatches, " matches \u2014 refine your search to narrow the list."] }))] })) })] }));
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // Result rows — a single pass over groups that keeps the flat match index
91
+ // aligned with `flatResults` (and thus keyboard focus / aria-activedescendant).
92
+ // ---------------------------------------------------------------------------
93
+ function renderRows({ groups, showGroupHeaders, selectedFile, focusIndex, optionId, onOpenFile, }) {
94
+ const rows = [];
95
+ let matchIndex = 0;
96
+ for (const group of groups) {
97
+ if (showGroupHeaders) {
98
+ rows.push(_jsx(GroupHeader, { name: group.entry.name }, `h:${group.entry.id}`));
99
+ }
100
+ for (const match of group.matches) {
101
+ if (matchIndex >= MAX_RESULTS)
102
+ break;
103
+ const index = matchIndex++;
104
+ const isOpen = selectedFile?.entryId === group.entry.id &&
105
+ selectedFile.path === match.path;
106
+ rows.push(_jsx(ResultRow, { id: optionId(index), match: match, isFocused: index === focusIndex, isOpen: isOpen, onOpen: () => onOpenFile(group.entry.id, match.path) }, `${group.entry.id}:${match.path}`));
107
+ }
108
+ if (group.truncated) {
109
+ rows.push(_jsx(GroupNotice, { children: "Partial listing \u2014 this repository has too many files to search in full." }, `t:${group.entry.id}`));
110
+ }
111
+ if (group.error) {
112
+ rows.push(_jsxs(GroupNotice, { isError: true, children: ["Couldn\u2019t list files: ", group.error.message] }, `e:${group.entry.id}`));
113
+ }
114
+ if (matchIndex >= MAX_RESULTS)
115
+ break;
116
+ }
117
+ return rows;
118
+ }
119
+ function ResultRow({ id, match, isFocused, isOpen, onOpen, }) {
120
+ const lastSlash = match.path.lastIndexOf("/");
121
+ const basename = match.path.slice(lastSlash + 1);
122
+ const dir = lastSlash >= 0 ? match.path.slice(0, lastSlash) : "";
123
+ return (_jsx("li", { id: id, role: "option", "aria-selected": isFocused, children: _jsxs("button", { type: "button", onClick: onOpen, tabIndex: -1, "aria-current": isOpen ? "true" : undefined, className: cn("flex w-full items-baseline gap-1.5 px-3 py-1 text-left text-xs transition-colors", isFocused && "bg-muted", isOpen && "bg-muted font-medium text-foreground", !isFocused && !isOpen && "hover:bg-muted"), children: [_jsx("span", { className: "truncate text-foreground", children: _jsx(HighlightedPath, { text: basename, offset: lastSlash + 1, matchStart: match.matchStart, matchEnd: match.matchEnd }) }), dir && (_jsx("span", { className: "truncate text-[0.65rem] text-muted-foreground", children: _jsx(HighlightedPath, { text: dir, offset: 0, matchStart: match.matchStart, matchEnd: match.matchEnd }) }))] }) }));
124
+ }
125
+ /**
126
+ * Renders a slice of the path (`text`, starting at `offset` within the full
127
+ * path), emphasizing the intersection with the match range `[matchStart,
128
+ * matchEnd)`. Non-overlapping slices render plain.
129
+ */
130
+ function HighlightedPath({ text, offset, matchStart, matchEnd, }) {
131
+ const localStart = Math.max(0, matchStart - offset);
132
+ const localEnd = Math.min(text.length, matchEnd - offset);
133
+ if (localStart >= localEnd)
134
+ return _jsx(_Fragment, { children: text });
135
+ return (_jsxs(_Fragment, { children: [text.slice(0, localStart), _jsx("span", { className: "font-semibold text-foreground", children: text.slice(localStart, localEnd) }), text.slice(localEnd)] }));
136
+ }
137
+ function GroupHeader({ name }) {
138
+ return (_jsx("li", { role: "presentation", className: "truncate px-3 pb-0.5 pt-2 text-[0.6rem] font-medium uppercase tracking-wide text-muted-foreground", children: name }));
139
+ }
140
+ function GroupNotice({ children, isError, }) {
141
+ return (_jsx("li", { role: "presentation", className: cn("px-3 py-1 text-[0.65rem]", isError ? "text-destructive" : "text-muted-foreground"), children: children }));
142
+ }
143
+ function MessageState({ children }) {
144
+ return (_jsx("div", { className: "flex h-full items-center justify-center p-8 text-center text-xs text-muted-foreground", children: children }));
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // Inline SVG icons (SDK independence — no lucide dependency)
148
+ // ---------------------------------------------------------------------------
149
+ function SearchIcon() {
150
+ return (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-muted-foreground", "aria-hidden": "true", children: [_jsx("circle", { cx: "5.25", cy: "5.25", r: "3.5" }), _jsx("path", { d: "M7.75 7.75L10.5 10.5" })] }));
151
+ }
152
+ function ClearIcon() {
153
+ return (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M3 3L9 9M9 3L3 9" }) }));
154
+ }
155
+ //# sourceMappingURL=WorkspaceFileSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceFileSearch.js","sourceRoot":"","sources":["../../src/workspace/WorkspaceFileSearch.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ import { type ReactNode } from "react";
2
+ import type { FileChange } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
3
+ import { type OpenEditor, type OpenFileOptions, type SelectedWorkspaceFile } from "../internal/store/index.js";
4
+ import type { RevealTarget } from "../internal/useRevealLine.js";
5
+ import type { WorkspaceEntry } from "./useWorkspaceEntries.js";
6
+ import type { WorkspaceFileLister } from "./WorkspaceFileLister.js";
7
+ import type { WorkspaceFileReader } from "./WorkspaceFileReader.js";
8
+ import type { WorkspaceContentSearcher } from "./WorkspaceContentSearcher.js";
9
+ /**
10
+ * A host-injected rail view: an icon in the activity rail whose content
11
+ * renders in the sidebar pane when active.
12
+ *
13
+ * This is how session facets (Config, Changes, Artifacts, …) join the built-in
14
+ * Explorer/Search views without the surface knowing any session domain — the
15
+ * same composition philosophy as the injected lister/reader capabilities
16
+ * (DD-004). The surface stays an embeddable, domain-pure workspace organism;
17
+ * hosts extend its rail.
18
+ */
19
+ export interface SurfaceRailView {
20
+ /** Unique view id. Must not collide with the built-in `"files"`/`"search"`. */
21
+ readonly id: string;
22
+ /** Accessible label; also rendered as the sidebar heading. */
23
+ readonly label: string;
24
+ /** Monochrome rail icon (tinted via `currentColor`, DD-005). */
25
+ readonly icon: ReactNode;
26
+ /** Optional count badge rendered over the rail icon (hidden when 0). */
27
+ readonly badge?: number;
28
+ /** Sidebar content rendered while this view is active. */
29
+ readonly content: ReactNode;
30
+ }
31
+ /**
32
+ * A host-injected virtual document: an editor tab whose content is not a
33
+ * workspace file — the session's `plan.md` today; execution artifacts are the
34
+ * anticipated next family.
35
+ *
36
+ * The editor-area counterpart of {@link SurfaceRailView}'s rail injection
37
+ * (DD-004): virtual documents share the tab group with file tabs (identical
38
+ * open / pin / close / activate semantics through the same editors store),
39
+ * and only the *body* rendering diverges — the surface renders `content`
40
+ * instead of breadcrumbs + `FileViewer`. The surface stays domain-pure: it
41
+ * matches tabs to virtual documents by identity and knows nothing about what
42
+ * the document is.
43
+ *
44
+ * `entryId` must come from `virtualEntryId(kind)` so it can never alias a
45
+ * real workspace entry; `path` doubles as the tab label's source (its
46
+ * basename), matching file-tab behavior.
47
+ */
48
+ export interface SurfaceVirtualDocument {
49
+ /** Virtual entry id (from `virtualEntryId`) — the tab's owning "entry". */
50
+ readonly entryId: string;
51
+ /** Tab identity within the entry; its basename is the tab label. */
52
+ readonly path: string;
53
+ /** Editor-area content rendered while this document's tab is active. */
54
+ readonly content: ReactNode;
55
+ }
56
+ /** Props for {@link WorkspaceSurface}. */
57
+ export interface WorkspaceSurfaceProps {
58
+ /** The workspace entries whose files are browsable (multi-root). */
59
+ readonly entries: readonly WorkspaceEntry[];
60
+ /** Platform-injected file lister. `undefined` disables explorer + search. */
61
+ readonly lister: WorkspaceFileLister | undefined;
62
+ /** Platform-injected content reader for the editor. */
63
+ readonly reader: WorkspaceFileReader | undefined;
64
+ /**
65
+ * Platform-injected content (text) searcher. When provided, the Search pane
66
+ * gains a `Name | Text` toggle offering full-text search; `undefined` (web/git
67
+ * today) keeps the Search pane filename-only (DD-09). Mirrors the lister's
68
+ * null contract — the honest "unavailable here" state.
69
+ */
70
+ readonly searcher?: WorkspaceContentSearcher;
71
+ /**
72
+ * The active rail view id (`"files"`, `"search"`, or an {@link SurfaceRailView.id}).
73
+ * Provide together with `onViewChange` to control the rail from the host;
74
+ * omit for internal (uncontrolled) view state. An id that matches no view
75
+ * (e.g. a contextual extra view that disappeared) falls back to `"files"`.
76
+ */
77
+ readonly view?: string;
78
+ /** Called when the user picks a rail view. */
79
+ readonly onViewChange?: (viewId: string) => void;
80
+ /**
81
+ * Host-injected rail views, rendered after the built-in Explorer/Search.
82
+ * Their `content` renders in the sidebar pane; the editor area stays for
83
+ * files (the VS Code model).
84
+ */
85
+ readonly extraViews?: readonly SurfaceRailView[];
86
+ /**
87
+ * Host-injected virtual documents (see {@link SurfaceVirtualDocument}).
88
+ * A tab whose identity matches one of these renders its `content` in the
89
+ * editor area instead of the file viewer. The host opens/activates the tab
90
+ * through the same editors-store seams as files.
91
+ */
92
+ readonly virtualDocuments?: readonly SurfaceVirtualDocument[];
93
+ /**
94
+ * Detach a workspace entry. When provided, explorer root headers carry a
95
+ * remove control (VS Code's "Remove Folder from Workspace").
96
+ */
97
+ readonly onRemoveEntry?: (entryId: string) => void;
98
+ /**
99
+ * Attach a local folder (host opens its native picker and adds the entry).
100
+ * When provided, the explorer renders an "Add Folder" footer action —
101
+ * desktop hosts wire this; web hosts omit it (no native picker).
102
+ */
103
+ readonly onAddLocalFolder?: () => void;
104
+ /** Open editor tabs in order (VS Code open-editors model). */
105
+ readonly editors: readonly OpenEditor[];
106
+ /** The active editor's file, or `null`. Highlighted in the tree and shown. */
107
+ readonly selectedFile: SelectedWorkspaceFile | null;
108
+ /**
109
+ * Opens a file as a preview (single click) from the explorer or search. The
110
+ * same seam the tree/search uses; the owner routes it to the editors store.
111
+ * `options.line` (content-search hits) requests a jump-to-line reveal.
112
+ */
113
+ readonly onOpenFile: (entryId: string, path: string, options?: OpenFileOptions) => void;
114
+ /** Focuses an already-open editor (tab single click). */
115
+ readonly onActivateEditor: (entryId: string, path: string) => void;
116
+ /** Pins an editor (tab double-click) so it stops being the preview tab. */
117
+ readonly onPinEditor: (entryId: string, path: string) => void;
118
+ /** Closes an editor (tab close control or middle click). */
119
+ readonly onCloseEditor: (entryId: string, path: string) => void;
120
+ /** Collapses the surface back to the chat-dominant layout. */
121
+ readonly onCollapse: () => void;
122
+ /**
123
+ * The session {@link FileChange} that touched the open file, when it was
124
+ * changed this session. When present the editor defaults to the authoritative
125
+ * `baseline→candidate` diff (DD-06), matching the inspector's Viewer tab.
126
+ */
127
+ readonly change?: FileChange;
128
+ /**
129
+ * Jump-to-line reveal for the **active** editor (already scoped by the owner
130
+ * to `reveal.key === activeKey`), or `undefined`. Forwarded to the editor's
131
+ * viewer, which opens in File view and scrolls to / highlights the line.
132
+ */
133
+ readonly reveal?: RevealTarget;
134
+ /** Additional CSS classes for the root element. */
135
+ readonly className?: string;
136
+ }
137
+ /**
138
+ * A VS Code / Cursor-inspired read-only workspace surface: a slim activity rail
139
+ * (Explorer / Search), a resizable sidebar, and a large editor area.
140
+ *
141
+ * This is the workspace-dominant counterpart to the inspector's cramped Viewer
142
+ * tab. The session viewer flips its layout to give this surface the majority of
143
+ * the screen while chat becomes a narrow column (see `SessionViewer`). It is a
144
+ * self-contained organism: given `entries`, a `lister`, a `reader`, and the
145
+ * open-file selection, it renders identically inside the Console or embedded in
146
+ * a third-party host (DD-004). Explicitly read-only — no editing, no commit UI.
147
+ *
148
+ * All visual properties flow through `--stgm-*` tokens (DD-005).
149
+ */
150
+ export declare function WorkspaceSurface({ entries, lister, reader, searcher, view, onViewChange, extraViews, virtualDocuments, onRemoveEntry, onAddLocalFolder, editors, selectedFile, onOpenFile, onActivateEditor, onPinEditor, onCloseEditor, onCollapse, change, reveal, className, }: WorkspaceSurfaceProps): import("react/jsx-runtime").JSX.Element;
151
+ //# sourceMappingURL=WorkspaceSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceSurface.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceSurface.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useRef, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { ResizableSplit } from "../internal/ResizableSplit.js";
6
+ import { editorKey, } from "../internal/store/index.js";
7
+ import { WorkspaceFileSearch } from "./WorkspaceFileSearch.js";
8
+ import { WorkspaceContentSearch } from "./WorkspaceContentSearch.js";
9
+ import { FileViewer } from "./FileViewer.js";
10
+ import { EditorTabs } from "./EditorTabs.js";
11
+ import { ExplorerTree } from "./ExplorerTree.js";
12
+ /** The built-in rail views every surface has. */
13
+ const BUILT_IN_VIEWS = ["files", "search"];
14
+ /**
15
+ * A VS Code / Cursor-inspired read-only workspace surface: a slim activity rail
16
+ * (Explorer / Search), a resizable sidebar, and a large editor area.
17
+ *
18
+ * This is the workspace-dominant counterpart to the inspector's cramped Viewer
19
+ * tab. The session viewer flips its layout to give this surface the majority of
20
+ * the screen while chat becomes a narrow column (see `SessionViewer`). It is a
21
+ * self-contained organism: given `entries`, a `lister`, a `reader`, and the
22
+ * open-file selection, it renders identically inside the Console or embedded in
23
+ * a third-party host (DD-004). Explicitly read-only — no editing, no commit UI.
24
+ *
25
+ * All visual properties flow through `--stgm-*` tokens (DD-005).
26
+ */
27
+ export function WorkspaceSurface({ entries, lister, reader, searcher, view, onViewChange, extraViews, virtualDocuments, onRemoveEntry, onAddLocalFolder, editors, selectedFile, onOpenFile, onActivateEditor, onPinEditor, onCloseEditor, onCollapse, change, reveal, className, }) {
28
+ // Optionally controlled (standard React pattern): a host that owns view
29
+ // routing (e.g. the session panel's auto-view logic) passes `view` +
30
+ // `onViewChange`; standalone embedders get internal state for free.
31
+ const [uncontrolledView, setUncontrolledView] = useState("files");
32
+ const requestedView = view ?? uncontrolledView;
33
+ const handleViewChange = useCallback((next) => {
34
+ setUncontrolledView(next);
35
+ onViewChange?.(next);
36
+ }, [onViewChange]);
37
+ // A stale id (e.g. a contextual extra view that disappeared) degrades to the
38
+ // explorer rather than an empty sidebar.
39
+ const isKnownView = BUILT_IN_VIEWS.includes(requestedView) ||
40
+ (extraViews?.some((v) => v.id === requestedView) ?? false);
41
+ const activeView = isKnownView ? requestedView : "files";
42
+ const activeExtraView = extraViews?.find((v) => v.id === activeView);
43
+ return (_jsxs("div", { className: cn("flex h-full min-h-0", className), children: [_jsx(ActivityRail, { view: activeView, onViewChange: handleViewChange, extraViews: extraViews }), _jsx(ResizableSplit, { resizablePane: "primary", defaultSize: 288, minSize: 200, maxSize: 560, storageKey: "stgm-workspace-sidebar-width", ariaLabel: "Resize sidebar",
44
+ // min-w-0: the split is a flex-row child of the surface; without it,
45
+ // the fixed-width sidebar sub-pane gives the whole surface a hard
46
+ // minimum width and content overflow escapes to the session panel.
47
+ className: "min-h-0 min-w-0 flex-1", primary: activeExtraView ? (_jsx(ExtraViewSidebar, { view: activeExtraView })) : activeView === "search" ? (_jsx(SearchSidebar, { entries: entries, lister: lister, searcher: searcher, selectedFile: selectedFile, onOpenFile: onOpenFile })) : (_jsx(ExplorerSidebar, { entries: entries, lister: lister, selectedFile: selectedFile, onOpenFile: onOpenFile, onActivateFile: onPinEditor, onRemoveEntry: onRemoveEntry, onAddLocalFolder: onAddLocalFolder })), secondary: _jsx(EditorArea, { entries: entries, reader: reader, editors: editors, selectedFile: selectedFile, virtualDocuments: virtualDocuments, change: change, reveal: reveal, onActivateEditor: onActivateEditor, onPinEditor: onPinEditor, onCloseEditor: onCloseEditor, onCollapse: onCollapse }) })] }));
48
+ }
49
+ function ActivityRail({ view, onViewChange, extraViews, }) {
50
+ const items = [
51
+ { id: "files", label: "Explorer", icon: _jsx(FilesIcon, {}) },
52
+ { id: "search", label: "Search", icon: _jsx(SearchIcon, {}) },
53
+ ...(extraViews ?? []),
54
+ ];
55
+ // Roving selection: arrows move relative to the *focused* item's position,
56
+ // so the rail scales to any number of injected views.
57
+ const handleKeyDown = useCallback((e, index) => {
58
+ let nextIndex = null;
59
+ if (e.key === "ArrowDown" || e.key === "ArrowRight") {
60
+ nextIndex = Math.min(index + 1, items.length - 1);
61
+ }
62
+ else if (e.key === "ArrowUp" || e.key === "ArrowLeft") {
63
+ nextIndex = Math.max(index - 1, 0);
64
+ }
65
+ if (nextIndex === null || nextIndex === index)
66
+ return;
67
+ e.preventDefault();
68
+ onViewChange(items[nextIndex].id);
69
+ }, [items, onViewChange]);
70
+ return (_jsx("div", { role: "radiogroup", "aria-label": "Workspace view", "aria-orientation": "vertical", className: "flex w-11 shrink-0 flex-col items-center gap-1 border-r border-border bg-muted-faint py-2", children: items.map((item, index) => {
71
+ const isSelected = view === item.id;
72
+ const showBadge = item.badge != null && item.badge > 0;
73
+ return (_jsxs("button", { type: "button", role: "radio", "aria-checked": isSelected, "aria-label": showBadge ? `${item.label} (${item.badge})` : item.label, title: item.label, tabIndex: isSelected ? 0 : -1, onClick: () => onViewChange(item.id), onKeyDown: (e) => handleKeyDown(e, index), className: cn("relative flex h-9 w-9 items-center justify-center rounded-md transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", isSelected
74
+ ? "bg-accent text-foreground"
75
+ : "text-muted-foreground hover:bg-accent-hover hover:text-foreground"), children: [item.icon, showBadge && (_jsx("span", { "aria-hidden": "true", className: "absolute -right-0.5 -top-0.5 inline-flex min-w-[0.875rem] items-center justify-center rounded-full bg-primary px-1 py-px text-[9px] font-medium leading-none text-primary-foreground", children: item.badge }))] }, item.id));
76
+ }) }));
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Explorer sidebar — multi-root file tree
80
+ // ---------------------------------------------------------------------------
81
+ function ExplorerSidebar({ entries, lister, selectedFile, onOpenFile, onActivateFile, onRemoveEntry, onAddLocalFolder, }) {
82
+ return (_jsxs("div", { className: "flex h-full min-h-0 flex-col border-r border-border", children: [_jsx(SidebarHeader, { title: "Explorer" }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto py-1.5", children: !lister || entries.length === 0 ? (_jsx(SidebarEmpty, { children: "No workspace attached." })) : (_jsx(ExplorerTree, { entries: entries, lister: lister, selectedFile: selectedFile, onOpenFile: onOpenFile, onActivateFile: onActivateFile, onRemoveEntry: onRemoveEntry })) }), onAddLocalFolder && (_jsx("div", { className: "shrink-0 border-t border-border-muted p-1.5", children: _jsxs("button", { type: "button", onClick: onAddLocalFolder, className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-xs text-foreground transition-colors hover:bg-accent-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: [_jsx(FolderPlusIcon, {}), _jsx("span", { className: "flex-1 text-left", children: "Add Folder" })] }) }))] }));
83
+ }
84
+ function SearchSidebar({ entries, lister, searcher, selectedFile, onOpenFile, }) {
85
+ // Filename search is the default: cached, instant, and always available.
86
+ // Content (text) search is opt-in and only offered when a searcher exists.
87
+ const [mode, setMode] = useState("name");
88
+ return (_jsxs("div", { className: "flex h-full min-h-0 flex-col border-r border-border", children: [_jsx(SidebarHeader, { title: "Search" }), searcher && _jsx(SearchModeToggle, { value: mode, onChange: setMode }), searcher && mode === "text" ? (_jsx(WorkspaceContentSearch, { entries: entries, searcher: searcher, onOpenFile: onOpenFile, selectedFile: selectedFile, className: "min-h-0 flex-1" })) : (_jsx(WorkspaceFileSearch, { entries: entries, lister: lister, onOpenFile: onOpenFile, selectedFile: selectedFile, className: "min-h-0 flex-1" }))] }));
89
+ }
90
+ /**
91
+ * `Name | Text` search-mode selector, mirroring `FileViewer`'s `Diff | File`
92
+ * radiogroup (roving `tabindex`, arrow-key roving, `role="radio"`). Shown only
93
+ * when a content searcher is injected.
94
+ */
95
+ function SearchModeToggle({ value, onChange, }) {
96
+ const options = [
97
+ { value: "name", label: "Name" },
98
+ { value: "text", label: "Text" },
99
+ ];
100
+ const handleKeyDown = useCallback((e) => {
101
+ if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
102
+ e.preventDefault();
103
+ onChange(value === "name" ? "text" : "name");
104
+ }
105
+ }, [value, onChange]);
106
+ return (_jsx("div", { className: "shrink-0 border-b border-border px-2 py-1.5", children: _jsx("div", { role: "radiogroup", "aria-label": "Search mode", className: "inline-flex rounded-md bg-muted p-0.5", children: options.map((option) => {
107
+ const isSelected = value === option.value;
108
+ return (_jsx("button", { type: "button", role: "radio", "aria-checked": isSelected, tabIndex: isSelected ? 0 : -1, onClick: () => onChange(option.value), onKeyDown: handleKeyDown, className: cn("rounded px-2.5 py-0.5 text-[0.7rem] font-medium transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", isSelected
109
+ ? "bg-background text-foreground shadow-sm"
110
+ : "text-muted-foreground hover:text-foreground"), children: option.label }, option.value));
111
+ }) }) }));
112
+ }
113
+ // ---------------------------------------------------------------------------
114
+ // Extra-view sidebar — host-injected facet content (Config, Changes, …)
115
+ // ---------------------------------------------------------------------------
116
+ function ExtraViewSidebar({ view }) {
117
+ return (_jsxs("div", { className: "flex h-full min-h-0 flex-col border-r border-border", children: [_jsx(SidebarHeader, { title: view.label }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 py-3", children: view.content })] }));
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // Editor area — collapse control + tab strip + read-only FileViewer
121
+ // ---------------------------------------------------------------------------
122
+ function EditorArea({ entries, reader, editors, selectedFile, virtualDocuments, change, reveal, onActivateEditor, onPinEditor, onCloseEditor, onCollapse, }) {
123
+ const viewerRef = useRef(null);
124
+ const activeKey = selectedFile
125
+ ? editorKey(selectedFile.entryId, selectedFile.path)
126
+ : null;
127
+ // The active tab is a virtual document when its identity matches an injected
128
+ // one — the body renders the document's content instead of the file viewer.
129
+ const activeVirtualDocument = activeKey !== null
130
+ ? virtualDocuments?.find((d) => editorKey(d.entryId, d.path) === activeKey)
131
+ : undefined;
132
+ const activeEntryName = selectedFile
133
+ ? entries.find((e) => e.id === selectedFile.entryId)?.name
134
+ : undefined;
135
+ return (_jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsxs("div", { className: "flex shrink-0 items-stretch border-b border-border pr-24", children: [_jsx("button", { type: "button", onClick: onCollapse, "aria-label": "Back to chat", title: "Back to chat", className: "flex shrink-0 items-center border-r border-border px-2 text-muted-foreground transition-colors hover:bg-accent-hover hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", children: _jsx(ChevronLeftIcon, {}) }), editors.length > 0 && (_jsx(EditorTabs, { editors: editors, activeKey: activeKey, onActivate: onActivateEditor, onPin: onPinEditor, onClose: onCloseEditor, className: "min-w-0 flex-1 border-b-0" }))] }), activeVirtualDocument ? (
136
+ // A virtual document owns its body wholesale: no breadcrumbs (there is
137
+ // no filesystem location) and no FileViewer (there is no reader-backed
138
+ // file). Keyed like files so switching documents resets cleanly.
139
+ // Vertical-only scrolling: a lone overflow-y-auto would compute
140
+ // overflow-x to auto too, giving the pane a horizontal scrollbar the
141
+ // moment any child refuses to shrink — documents must reflow instead.
142
+ _jsx("div", { className: "min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden", children: activeVirtualDocument.content }, activeKey ?? undefined)) : selectedFile ? (_jsxs(_Fragment, { children: [_jsx(Breadcrumbs, { entryName: activeEntryName, path: selectedFile.path, onRefresh: reader ? () => viewerRef.current?.refresh() : undefined }), _jsx(FileViewer, { ref: viewerRef, selectedFile: selectedFile, entries: entries, reader: reader, change: change, reveal: reveal, onClose: onCollapse, showHeader: false, className: "min-h-0 flex-1" }, activeKey ?? undefined)] })) : (_jsx("div", { className: "flex flex-1 items-center justify-center p-8 text-center text-xs text-muted-foreground", children: "Select a file to view its contents." }))] }));
143
+ }
144
+ /**
145
+ * Location breadcrumb for the active file: entry › folder › … › file, with an
146
+ * optional refresh. Display-only orientation (clickable navigation is a future
147
+ * enhancement); the refresh re-fetches the live file content.
148
+ */
149
+ function Breadcrumbs({ entryName, path, onRefresh, }) {
150
+ const segments = path.split("/").filter(Boolean);
151
+ const crumbs = entryName ? [entryName, ...segments] : segments;
152
+ return (_jsxs("div", { className: "flex shrink-0 items-center gap-1 border-b border-border-muted px-3 py-1 text-[0.65rem] text-muted-foreground", children: [_jsx("nav", { "aria-label": "File location", className: "flex min-w-0 flex-1 items-center gap-1", children: crumbs.map((crumb, i) => {
153
+ const isLast = i === crumbs.length - 1;
154
+ return (_jsxs("span", { className: "flex min-w-0 items-center gap-1", children: [i > 0 && _jsx("span", { className: "text-muted-foreground-subtle", "aria-hidden": "true", children: "\u203A" }), _jsx("span", { className: cn("truncate", isLast && "text-foreground"), children: crumb })] }, i));
155
+ }) }), onRefresh && (_jsx("button", { type: "button", onClick: onRefresh, "aria-label": "Reload file", title: "Reload file", className: "shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", children: _jsx(RefreshIcon, {}) }))] }));
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // Shared sidebar chrome
159
+ // ---------------------------------------------------------------------------
160
+ function SidebarHeader({ title }) {
161
+ return (_jsx("div", { className: "shrink-0 border-b border-border px-3 py-2 text-[0.65rem] font-semibold uppercase tracking-wide text-muted-foreground", children: title }));
162
+ }
163
+ function SidebarEmpty({ children }) {
164
+ return (_jsx("div", { className: "px-2 py-6 text-center text-xs text-muted-foreground", children: children }));
165
+ }
166
+ // ---------------------------------------------------------------------------
167
+ // Inline SVG icons (SDK independence — no lucide dependency)
168
+ // ---------------------------------------------------------------------------
169
+ function FilesIcon() {
170
+ return (_jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.7", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M13 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), _jsx("path", { d: "M13 3v5h5" })] }));
171
+ }
172
+ function SearchIcon() {
173
+ return (_jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.7", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("circle", { cx: "11", cy: "11", r: "7" }), _jsx("path", { d: "M21 21l-4.3-4.3" })] }));
174
+ }
175
+ function FolderPlusIcon() {
176
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-muted-foreground", "aria-hidden": "true", children: [_jsx("path", { d: "M1.5 3.5V11a1 1 0 001 1h9a1 1 0 001-1V5.5a1 1 0 00-1-1H7L5.5 3H2.5a1 1 0 00-1 .5z" }), _jsx("path", { d: "M7 7v3M5.5 8.5h3" })] }));
177
+ }
178
+ function ChevronLeftIcon() {
179
+ return (_jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M10 3L5 8L10 13" }) }));
180
+ }
181
+ function RefreshIcon() {
182
+ return (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M1.5 6a4.5 4.5 0 017.794-3.073M10.5 6a4.5 4.5 0 01-7.794 3.073" }), _jsx("path", { d: "M9.5 1v2.5H7M2.5 11V8.5H5" })] }));
183
+ }
184
+ //# sourceMappingURL=WorkspaceSurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceSurface.js","sourceRoot":"","sources":["../../src/workspace/WorkspaceSurface.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,SAAS,GAIV,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,iDAAiD;AACjD,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAU,CAAC;AAyIpD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,UAAU,EACV,MAAM,EACN,MAAM,EACN,SAAS,GACa;IACtB,wEAAwE;IACxE,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAS,OAAO,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAI,IAAI,gBAAgB,CAAC;IAC/C,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAY,EAAE,EAAE;QACf,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,6EAA6E;IAC7E,yCAAyC;IACzC,MAAM,WAAW,GACd,cAAoC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7D,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,MAAM,eAAe,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aAClD,KAAC,YAAY,IACX,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,UAAU,GACtB,EACF,KAAC,cAAc,IACb,aAAa,EAAC,SAAS,EACvB,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,UAAU,EAAC,8BAA8B,EACzC,SAAS,EAAC,gBAAgB;gBAC1B,qEAAqE;gBACrE,kEAAkE;gBAClE,mEAAmE;gBACnE,SAAS,EAAC,wBAAwB,EAClC,OAAO,EACL,eAAe,CAAC,CAAC,CAAC,CAChB,KAAC,gBAAgB,IAAC,IAAI,EAAE,eAAe,GAAI,CAC5C,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC5B,KAAC,aAAa,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC,CAAC,CAAC,CACF,KAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,GAClC,CACH,EAEH,SAAS,EACP,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,GACtB,GAEJ,IACE,CACP,CAAC;AACJ,CAAC;AAaD,SAAS,YAAY,CAAC,EACpB,IAAI,EACJ,YAAY,EACZ,UAAU,GAKX;IACC,MAAM,KAAK,GAAwB;QACjC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;QACvD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAC,UAAU,KAAG,EAAE;QACvD,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;KACtB,CAAC;IAEF,2EAA2E;IAC3E,sDAAsD;IACtD,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAmC,EAAE,KAAa,EAAE,EAAE;QACrD,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YACpD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACxD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO;QACtD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,KAAK,EAAE,YAAY,CAAC,CACtB,CAAC;IAEF,OAAO,CACL,cACE,IAAI,EAAC,YAAY,gBACN,gBAAgB,sBACV,UAAU,EAC3B,SAAS,EAAC,2FAA2F,YAEpG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACvD,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,OAAO,kBACE,UAAU,gBACZ,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EACpE,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EACpC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,EACzC,SAAS,EAAE,EAAE,CACX,gFAAgF,EAChF,yEAAyE,EACzE,UAAU;oBACR,CAAC,CAAC,2BAA2B;oBAC7B,CAAC,CAAC,mEAAmE,CACxE,aAEA,IAAI,CAAC,IAAI,EACT,SAAS,IAAI,CACZ,8BACc,MAAM,EAClB,SAAS,EAAC,sLAAsL,YAE/L,IAAI,CAAC,KAAK,GACN,CACR,KAzBI,IAAI,CAAC,EAAE,CA0BL,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,GASjB;IACC,OAAO,CACL,eAAK,SAAS,EAAC,qDAAqD,aAClE,KAAC,aAAa,IAAC,KAAK,EAAC,UAAU,GAAG,EAClC,cAAK,SAAS,EAAC,uCAAuC,YACnD,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACjC,KAAC,YAAY,yCAAsC,CACpD,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IACX,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,GAC5B,CACH,GACG,EACL,gBAAgB,IAAI,CACnB,cAAK,SAAS,EAAC,6CAA6C,YAC1D,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAC,+LAA+L,aAEzM,KAAC,cAAc,KAAG,EAClB,eAAM,SAAS,EAAC,kBAAkB,2BAAkB,IAC7C,GACL,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAQD,SAAS,aAAa,CAAC,EACrB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,UAAU,GAWX;IACC,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAa,MAAM,CAAC,CAAC;IAErD,OAAO,CACL,eAAK,SAAS,EAAC,qDAAqD,aAClE,KAAC,aAAa,IAAC,KAAK,EAAC,QAAQ,GAAG,EAC/B,QAAQ,IAAI,KAAC,gBAAgB,IAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAI,EAChE,QAAQ,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAC7B,KAAC,sBAAsB,IACrB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAC,gBAAgB,GAC1B,CACH,CAAC,CAAC,CAAC,CACF,KAAC,mBAAmB,IAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAC,gBAAgB,GAC1B,CACH,IACG,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,EACxB,KAAK,EACL,QAAQ,GAIT;IACC,MAAM,OAAO,GAAsE;QACjF,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;KACjC,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAmC,EAAE,EAAE;QACtC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACpD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,6CAA6C,YAC1D,cACE,IAAI,EAAC,YAAY,gBACN,aAAa,EACxB,SAAS,EAAC,uCAAuC,YAEhD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtB,MAAM,UAAU,GAAG,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;gBAC1C,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,OAAO,kBACE,UAAU,EACxB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EACrC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,EAAE,CACX,mEAAmE,EACnE,yEAAyE,EACzE,UAAU;wBACR,CAAC,CAAC,yCAAyC;wBAC3C,CAAC,CAAC,6CAA6C,CAClD,YAEA,MAAM,CAAC,KAAK,IAfR,MAAM,CAAC,KAAK,CAgBV,CACV,CAAC;YACJ,CAAC,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAsC;IACpE,OAAO,CACL,eAAK,SAAS,EAAC,qDAAqD,aAClE,KAAC,aAAa,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,EAGpC,cAAK,SAAS,EAAC,0CAA0C,YACtD,IAAI,CAAC,OAAO,GACT,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,SAAS,UAAU,CAAC,EAClB,OAAO,EACP,MAAM,EACN,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,UAAU,GAaX;IACC,MAAM,SAAS,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC;QACpD,CAAC,CAAC,IAAI,CAAC;IACT,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,qBAAqB,GACzB,SAAS,KAAK,IAAI;QAChB,CAAC,CAAC,gBAAgB,EAAE,IAAI,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAClD;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,eAAe,GAAG,YAAY;QAClC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI;QAC1D,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAI3C,eAAK,SAAS,EAAC,0DAA0D,aACvE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,gBACR,cAAc,EACzB,KAAK,EAAC,cAAc,EACpB,SAAS,EAAC,6OAA6O,YAEvP,KAAC,eAAe,KAAG,GACZ,EACR,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,gBAAgB,EAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,2BAA2B,GACrC,CACH,IACG,EACL,qBAAqB,CAAC,CAAC,CAAC;YACvB,uEAAuE;YACvE,uEAAuE;YACvE,iEAAiE;YACjE,gEAAgE;YAChE,qEAAqE;YACrE,sEAAsE;YACtE,cAEE,SAAS,EAAC,0DAA0D,YAEnE,qBAAqB,CAAC,OAAO,IAHzB,SAAS,IAAI,SAAS,CAIvB,CACP,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CACjB,8BACE,KAAC,WAAW,IACV,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,YAAY,CAAC,IAAI,EACvB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,GAClE,EAIF,KAAC,UAAU,IACT,GAAG,EAAE,SAAS,EAEd,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,KAAK,EACjB,SAAS,EAAC,gBAAgB,IARrB,SAAS,IAAI,SAAS,CAS3B,IACD,CACJ,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,uFAAuF,oDAEhG,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,IAAI,EACJ,SAAS,GAKV;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE/D,OAAO,CACL,eAAK,SAAS,EAAC,8GAA8G,aAC3H,4BAAgB,eAAe,EAAC,SAAS,EAAC,wCAAwC,YAC/E,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACvB,MAAM,MAAM,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBACvC,OAAO,CACL,gBAAc,SAAS,EAAC,iCAAiC,aACtD,CAAC,GAAG,CAAC,IAAI,eAAM,SAAS,EAAC,8BAA8B,iBAAa,MAAM,uBAAS,EACpF,eAAM,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,IAAI,iBAAiB,CAAC,YACzD,KAAK,GACD,KAJE,CAAC,CAKL,CACR,CAAC;gBACJ,CAAC,CAAC,GACE,EACL,SAAS,IAAI,CACZ,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,SAAS,gBACP,aAAa,EACxB,KAAK,EAAC,aAAa,EACnB,SAAS,EAAC,8JAA8J,YAExK,KAAC,WAAW,KAAG,GACR,CACV,IACG,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,SAAS,aAAa,CAAC,EAAE,KAAK,EAA8B;IAC1D,OAAO,CACL,cAAK,SAAS,EAAC,sHAAsH,YAClI,KAAK,GACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,QAAQ,EAA0C;IACxE,OAAO,CACL,cAAK,SAAS,EAAC,qDAAqD,YACjE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,SAAS,SAAS;IAChB,OAAO,CACL,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,iBAAa,MAAM,aACjK,eAAM,CAAC,EAAC,4DAA4D,GAAG,EACvE,eAAM,CAAC,EAAC,WAAW,GAAG,IAClB,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CACL,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,iBAAa,MAAM,aACjK,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,GAAG,EAChC,eAAM,CAAC,EAAC,iBAAiB,GAAG,IACxB,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CACL,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,EAAC,gCAAgC,iBAAa,MAAM,aAC5M,eAAM,CAAC,EAAC,mFAAmF,GAAG,EAC9F,eAAM,CAAC,EAAC,kBAAkB,GAAG,IACzB,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,iBAAa,MAAM,YACjK,eAAM,CAAC,EAAC,iBAAiB,GAAG,GACxB,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CACL,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,iBAAa,MAAM,aACjK,eAAM,CAAC,EAAC,gEAAgE,GAAG,EAC3E,eAAM,CAAC,EAAC,2BAA2B,GAAG,IAClC,CACP,CAAC;AACJ,CAAC"}