@elabs-ai/components-ai 4.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/README.md +1 -1
  2. package/dist/{_audio-player-media-chrome-T3XVXWRZ.js → _audio-player-media-chrome.js} +1 -1
  3. package/dist/_code-block-theme.js +12 -0
  4. package/dist/_code-block-theme.js.map +1 -0
  5. package/dist/{_flow-boundary-SHNWLQG5.js → _flow-boundary.js} +1 -1
  6. package/dist/_flow-boundary.js.map +1 -0
  7. package/dist/_flow-lazy.js +8 -0
  8. package/dist/_flow-lazy.js.map +1 -0
  9. package/dist/_lazy-boundary-conformance.js +2 -0
  10. package/dist/_lazy-boundary-conformance.js.map +1 -0
  11. package/dist/_lazy-cjk.js +13 -0
  12. package/dist/_lazy-cjk.js.map +1 -0
  13. package/dist/_lazy-engine-boundary.js +9 -0
  14. package/dist/_lazy-engine-boundary.js.map +1 -0
  15. package/dist/_lazy-math.js +13 -0
  16. package/dist/_lazy-math.js.map +1 -0
  17. package/dist/_lazy-mermaid.js +12 -0
  18. package/dist/_lazy-mermaid.js.map +1 -0
  19. package/dist/_mermaid-error-panel.js +9 -0
  20. package/dist/_mermaid-error-panel.js.map +1 -0
  21. package/dist/{_persona-rive-JEG44YHX.js → _persona-rive.js} +19 -24
  22. package/dist/_persona-rive.js.map +1 -0
  23. package/dist/_streamdown-i18n.js +21 -0
  24. package/dist/_streamdown-i18n.js.map +1 -0
  25. package/dist/_streamdown-safety.js +10 -0
  26. package/dist/_streamdown-safety.js.map +1 -0
  27. package/dist/_theme-scope-store.js +13 -0
  28. package/dist/_theme-scope-store.js.map +1 -0
  29. package/dist/a2ui/a2ui-surface.js +17 -0
  30. package/dist/a2ui/a2ui-surface.js.map +1 -0
  31. package/dist/a2ui/core/catalog.generated.js +10 -0
  32. package/dist/a2ui/core/catalog.generated.js.map +1 -0
  33. package/dist/a2ui/core/complete-json.js +10 -0
  34. package/dist/a2ui/core/complete-json.js.map +1 -0
  35. package/dist/a2ui/core/index.js +37 -0
  36. package/dist/a2ui/core/index.js.map +1 -0
  37. package/dist/a2ui/core/schema.js +11 -0
  38. package/dist/a2ui/core/schema.js.map +1 -0
  39. package/dist/a2ui/core/spec.js +10 -0
  40. package/dist/a2ui/core/spec.js.map +1 -0
  41. package/dist/a2ui/core/validate.js +16 -0
  42. package/dist/a2ui/core/validate.js.map +1 -0
  43. package/dist/a2ui/index.js +54 -0
  44. package/dist/a2ui/index.js.map +1 -0
  45. package/dist/a2ui/ui-catalog.js +18 -0
  46. package/dist/a2ui/ui-catalog.js.map +1 -0
  47. package/dist/agent-event.js +10 -0
  48. package/dist/agent-event.js.map +1 -0
  49. package/dist/agent-timeline.js +11 -0
  50. package/dist/agent-timeline.js.map +1 -0
  51. package/dist/agent.js +25 -0
  52. package/dist/agent.js.map +1 -0
  53. package/dist/artifact.js +23 -0
  54. package/dist/artifact.js.map +1 -0
  55. package/dist/asset-preview.js +22 -0
  56. package/dist/asset-preview.js.map +1 -0
  57. package/dist/attachments.js +33 -0
  58. package/dist/attachments.js.map +1 -0
  59. package/dist/audio-player.js +30 -0
  60. package/dist/audio-player.js.map +1 -0
  61. package/dist/audio-visualizer.js +9 -0
  62. package/dist/audio-visualizer.js.map +1 -0
  63. package/dist/canvas.js +10 -0
  64. package/dist/canvas.js.map +1 -0
  65. package/dist/chain-of-thought.js +22 -0
  66. package/dist/chain-of-thought.js.map +1 -0
  67. package/dist/chat-greeting.js +8 -0
  68. package/dist/chat-greeting.js.map +1 -0
  69. package/dist/chat-shell.js +9 -0
  70. package/dist/chat-shell.js.map +1 -0
  71. package/dist/checkpoint.js +13 -0
  72. package/dist/checkpoint.js.map +1 -0
  73. package/dist/chunk-2XOIG5TG.js +72 -0
  74. package/dist/chunk-2XOIG5TG.js.map +1 -0
  75. package/dist/chunk-34CQ2VHM.js +172 -0
  76. package/dist/chunk-34CQ2VHM.js.map +1 -0
  77. package/dist/chunk-3TDHPXZZ.js +60 -0
  78. package/dist/chunk-3TDHPXZZ.js.map +1 -0
  79. package/dist/chunk-3XNPMDZY.js +478 -0
  80. package/dist/chunk-3XNPMDZY.js.map +1 -0
  81. package/dist/chunk-3YPT3V7L.js +56 -0
  82. package/dist/chunk-3YPT3V7L.js.map +1 -0
  83. package/dist/chunk-475UEU2Q.js +87 -0
  84. package/dist/chunk-475UEU2Q.js.map +1 -0
  85. package/dist/chunk-4CBTII2I.js +95 -0
  86. package/dist/chunk-4CBTII2I.js.map +1 -0
  87. package/dist/chunk-4XRNIZMG.js +22 -0
  88. package/dist/chunk-4XRNIZMG.js.map +1 -0
  89. package/dist/chunk-5NNWUKK5.js +2 -0
  90. package/dist/chunk-5NNWUKK5.js.map +1 -0
  91. package/dist/chunk-5UOMU27Z.js +164 -0
  92. package/dist/chunk-5UOMU27Z.js.map +1 -0
  93. package/dist/chunk-5VGYZ62I.js +264 -0
  94. package/dist/chunk-5VGYZ62I.js.map +1 -0
  95. package/dist/chunk-6IQPH2OS.js +21 -0
  96. package/dist/chunk-6IQPH2OS.js.map +1 -0
  97. package/dist/chunk-6PB2MXCI.js +482 -0
  98. package/dist/chunk-6PB2MXCI.js.map +1 -0
  99. package/dist/chunk-7FD5CZEU.js +215 -0
  100. package/dist/chunk-7FD5CZEU.js.map +1 -0
  101. package/dist/chunk-7RL6KZDF.js +266 -0
  102. package/dist/chunk-7RL6KZDF.js.map +1 -0
  103. package/dist/chunk-ADOYAGGK.js +482 -0
  104. package/dist/chunk-ADOYAGGK.js.map +1 -0
  105. package/dist/chunk-AXMNJMMH.js +984 -0
  106. package/dist/chunk-AXMNJMMH.js.map +1 -0
  107. package/dist/chunk-BA3AEMOU.js +21 -0
  108. package/dist/chunk-BA3AEMOU.js.map +1 -0
  109. package/dist/chunk-BBHFOYML.js +336 -0
  110. package/dist/chunk-BBHFOYML.js.map +1 -0
  111. package/dist/chunk-BHUVISIY.js +221 -0
  112. package/dist/chunk-BHUVISIY.js.map +1 -0
  113. package/dist/chunk-BM2LWERA.js +100 -0
  114. package/dist/chunk-BM2LWERA.js.map +1 -0
  115. package/dist/chunk-CMOYXNPJ.js +211 -0
  116. package/dist/chunk-CMOYXNPJ.js.map +1 -0
  117. package/dist/chunk-CZP3RHC4.js +74 -0
  118. package/dist/chunk-CZP3RHC4.js.map +1 -0
  119. package/dist/chunk-DDG5JHQT.js +112 -0
  120. package/dist/chunk-DDG5JHQT.js.map +1 -0
  121. package/dist/chunk-DJODXO7I.js +38 -0
  122. package/dist/chunk-DJODXO7I.js.map +1 -0
  123. package/dist/chunk-DWJDJLPU.js +192 -0
  124. package/dist/chunk-DWJDJLPU.js.map +1 -0
  125. package/dist/chunk-DZW6LM22.js +45 -0
  126. package/dist/chunk-DZW6LM22.js.map +1 -0
  127. package/dist/chunk-ELGCZLZF.js +305 -0
  128. package/dist/chunk-ELGCZLZF.js.map +1 -0
  129. package/dist/chunk-EV3U6ZZB.js +209 -0
  130. package/dist/chunk-EV3U6ZZB.js.map +1 -0
  131. package/dist/chunk-EY7LVUKQ.js +87 -0
  132. package/dist/chunk-EY7LVUKQ.js.map +1 -0
  133. package/dist/chunk-F4C74F7M.js +230 -0
  134. package/dist/chunk-F4C74F7M.js.map +1 -0
  135. package/dist/chunk-FERYDFZA.js +108 -0
  136. package/dist/chunk-FERYDFZA.js.map +1 -0
  137. package/dist/chunk-FUIYG2DS.js +166 -0
  138. package/dist/chunk-FUIYG2DS.js.map +1 -0
  139. package/dist/chunk-GKYZT3LA.js +136 -0
  140. package/dist/chunk-GKYZT3LA.js.map +1 -0
  141. package/dist/chunk-H42LRUQ4.js +102 -0
  142. package/dist/chunk-H42LRUQ4.js.map +1 -0
  143. package/dist/chunk-HVXM2G5F.js +222 -0
  144. package/dist/chunk-HVXM2G5F.js.map +1 -0
  145. package/dist/chunk-I4RDAGVY.js +53 -0
  146. package/dist/chunk-I4RDAGVY.js.map +1 -0
  147. package/dist/chunk-IQJG4IDX.js +208 -0
  148. package/dist/chunk-IQJG4IDX.js.map +1 -0
  149. package/dist/chunk-IX2PXG4Y.js +144 -0
  150. package/dist/chunk-IX2PXG4Y.js.map +1 -0
  151. package/dist/chunk-IXICSOOP.js +287 -0
  152. package/dist/chunk-IXICSOOP.js.map +1 -0
  153. package/dist/chunk-JY5HSN4D.js +84 -0
  154. package/dist/chunk-JY5HSN4D.js.map +1 -0
  155. package/dist/chunk-LMNSBOBG.js +19 -0
  156. package/dist/chunk-LMNSBOBG.js.map +1 -0
  157. package/dist/chunk-MBI7D6IL.js +42 -0
  158. package/dist/chunk-MBI7D6IL.js.map +1 -0
  159. package/dist/chunk-MLFMYCPH.js +192 -0
  160. package/dist/chunk-MLFMYCPH.js.map +1 -0
  161. package/dist/chunk-MOK66734.js +33 -0
  162. package/dist/chunk-MOK66734.js.map +1 -0
  163. package/dist/chunk-MXTAWPYM.js +196 -0
  164. package/dist/chunk-MXTAWPYM.js.map +1 -0
  165. package/dist/chunk-NCL2UZKI.js +96 -0
  166. package/dist/chunk-NCL2UZKI.js.map +1 -0
  167. package/dist/chunk-NET4YLRY.js +107 -0
  168. package/dist/chunk-NET4YLRY.js.map +1 -0
  169. package/dist/chunk-NIG67CFM.js +329 -0
  170. package/dist/chunk-NIG67CFM.js.map +1 -0
  171. package/dist/chunk-NMVNNO3L.js +10 -0
  172. package/dist/chunk-NMVNNO3L.js.map +1 -0
  173. package/dist/chunk-NP7VID4K.js +2 -0
  174. package/dist/chunk-NP7VID4K.js.map +1 -0
  175. package/dist/chunk-NPUCMAG2.js +382 -0
  176. package/dist/chunk-NPUCMAG2.js.map +1 -0
  177. package/dist/chunk-NSCLRHES.js +102 -0
  178. package/dist/chunk-NSCLRHES.js.map +1 -0
  179. package/dist/chunk-OEUXHVFW.js +86 -0
  180. package/dist/chunk-OEUXHVFW.js.map +1 -0
  181. package/dist/chunk-ONBHFIMZ.js +137 -0
  182. package/dist/chunk-ONBHFIMZ.js.map +1 -0
  183. package/dist/chunk-OPH2HHL2.js +228 -0
  184. package/dist/chunk-OPH2HHL2.js.map +1 -0
  185. package/dist/chunk-OQERHIQP.js +287 -0
  186. package/dist/chunk-OQERHIQP.js.map +1 -0
  187. package/dist/chunk-P6YJAZFG.js +103 -0
  188. package/dist/chunk-P6YJAZFG.js.map +1 -0
  189. package/dist/chunk-PG7ERDOD.js +65 -0
  190. package/dist/chunk-PG7ERDOD.js.map +1 -0
  191. package/dist/chunk-PIB5JBMA.js +90 -0
  192. package/dist/chunk-PIB5JBMA.js.map +1 -0
  193. package/dist/chunk-PQ5BPIWQ.js +22 -0
  194. package/dist/chunk-PQ5BPIWQ.js.map +1 -0
  195. package/dist/chunk-PQBF6ZIQ.js +55 -0
  196. package/dist/chunk-PQBF6ZIQ.js.map +1 -0
  197. package/dist/chunk-PTWCTSZL.js +173 -0
  198. package/dist/chunk-PTWCTSZL.js.map +1 -0
  199. package/dist/chunk-QJUNPVOS.js +101 -0
  200. package/dist/chunk-QJUNPVOS.js.map +1 -0
  201. package/dist/chunk-QUDZOTRV.js +43 -0
  202. package/dist/chunk-QUDZOTRV.js.map +1 -0
  203. package/dist/chunk-RB7G65JC.js +213 -0
  204. package/dist/chunk-RB7G65JC.js.map +1 -0
  205. package/dist/chunk-RPHAOR7P.js +45 -0
  206. package/dist/chunk-RPHAOR7P.js.map +1 -0
  207. package/dist/chunk-RTCSH2AN.js +331 -0
  208. package/dist/chunk-RTCSH2AN.js.map +1 -0
  209. package/dist/chunk-S3ISPW3A.js +28 -0
  210. package/dist/chunk-S3ISPW3A.js.map +1 -0
  211. package/dist/chunk-SEVN656N.js +36 -0
  212. package/dist/chunk-SEVN656N.js.map +1 -0
  213. package/dist/chunk-SKVG672B.js +64 -0
  214. package/dist/chunk-SKVG672B.js.map +1 -0
  215. package/dist/chunk-SPQIU7GA.js +236 -0
  216. package/dist/chunk-SPQIU7GA.js.map +1 -0
  217. package/dist/chunk-SSGJ6MEM.js +1076 -0
  218. package/dist/chunk-SSGJ6MEM.js.map +1 -0
  219. package/dist/chunk-SSKZ2AED.js +118 -0
  220. package/dist/chunk-SSKZ2AED.js.map +1 -0
  221. package/dist/chunk-T56JFGXI.js +561 -0
  222. package/dist/chunk-T56JFGXI.js.map +1 -0
  223. package/dist/chunk-TCB6O74A.js +137 -0
  224. package/dist/chunk-TCB6O74A.js.map +1 -0
  225. package/dist/chunk-TTEYPO6X.js +57 -0
  226. package/dist/chunk-TTEYPO6X.js.map +1 -0
  227. package/dist/chunk-TWPHAJNM.js +462 -0
  228. package/dist/chunk-TWPHAJNM.js.map +1 -0
  229. package/dist/chunk-TXJJLP4O.js +336 -0
  230. package/dist/chunk-TXJJLP4O.js.map +1 -0
  231. package/dist/chunk-TZ6TB7VM.js +245 -0
  232. package/dist/chunk-TZ6TB7VM.js.map +1 -0
  233. package/dist/chunk-UBLKJJ7K.js +278 -0
  234. package/dist/chunk-UBLKJJ7K.js.map +1 -0
  235. package/dist/chunk-UCJ6IUFS.js +52 -0
  236. package/dist/chunk-UCJ6IUFS.js.map +1 -0
  237. package/dist/chunk-UCKFJ3QF.js +197 -0
  238. package/dist/chunk-UCKFJ3QF.js.map +1 -0
  239. package/dist/chunk-UPXSLILN.js +20 -0
  240. package/dist/chunk-UPXSLILN.js.map +1 -0
  241. package/dist/chunk-V4DORGWJ.js +92 -0
  242. package/dist/chunk-V4DORGWJ.js.map +1 -0
  243. package/dist/chunk-V6E5DYZD.js +80 -0
  244. package/dist/chunk-V6E5DYZD.js.map +1 -0
  245. package/dist/chunk-VLLYKF3P.js +96 -0
  246. package/dist/chunk-VLLYKF3P.js.map +1 -0
  247. package/dist/chunk-VLNBTOH6.js +43 -0
  248. package/dist/chunk-VLNBTOH6.js.map +1 -0
  249. package/dist/chunk-WMDSMSPL.js +303 -0
  250. package/dist/chunk-WMDSMSPL.js.map +1 -0
  251. package/dist/chunk-WU5BLGTF.js +149 -0
  252. package/dist/chunk-WU5BLGTF.js.map +1 -0
  253. package/dist/chunk-WYTZVSGK.js +245 -0
  254. package/dist/chunk-WYTZVSGK.js.map +1 -0
  255. package/dist/chunk-X47QMM6K.js +187 -0
  256. package/dist/chunk-X47QMM6K.js.map +1 -0
  257. package/dist/chunk-XNBKO32Y.js +174 -0
  258. package/dist/chunk-XNBKO32Y.js.map +1 -0
  259. package/dist/chunk-YHUSW7D2.js +40 -0
  260. package/dist/chunk-YHUSW7D2.js.map +1 -0
  261. package/dist/chunk-YSKD7UXX.js +126 -0
  262. package/dist/chunk-YSKD7UXX.js.map +1 -0
  263. package/dist/chunk-YYRDGWOU.js +72 -0
  264. package/dist/chunk-YYRDGWOU.js.map +1 -0
  265. package/dist/chunk-ZIGZMWM7.js +19 -0
  266. package/dist/chunk-ZIGZMWM7.js.map +1 -0
  267. package/dist/chunk-ZKRTUKNP.js +40 -0
  268. package/dist/chunk-ZKRTUKNP.js.map +1 -0
  269. package/dist/code-block.js +38 -0
  270. package/dist/code-block.js.map +1 -0
  271. package/dist/commit.js +51 -0
  272. package/dist/commit.js.map +1 -0
  273. package/dist/composer.js +15 -0
  274. package/dist/composer.js.map +1 -0
  275. package/dist/confirmation.js +53 -0
  276. package/dist/confirmation.js.map +1 -0
  277. package/dist/connection.js +8 -0
  278. package/dist/connection.js.map +1 -0
  279. package/dist/context-panel.js +25 -0
  280. package/dist/context-panel.js.map +1 -0
  281. package/dist/controls.js +10 -0
  282. package/dist/controls.js.map +1 -0
  283. package/dist/conversation.js +19 -0
  284. package/dist/conversation.js.map +1 -0
  285. package/dist/diff-view.js +15 -0
  286. package/dist/diff-view.js.map +1 -0
  287. package/dist/edge.js +10 -0
  288. package/dist/edge.js.map +1 -0
  289. package/dist/environment-variables.js +29 -0
  290. package/dist/environment-variables.js.map +1 -0
  291. package/dist/file-tree.js +23 -0
  292. package/dist/file-tree.js.map +1 -0
  293. package/dist/gallery.js +9 -0
  294. package/dist/gallery.js.map +1 -0
  295. package/dist/grouped-parts.js +21 -0
  296. package/dist/grouped-parts.js.map +1 -0
  297. package/dist/image.js +9 -0
  298. package/dist/image.js.map +1 -0
  299. package/dist/index.d.ts +366 -98
  300. package/dist/index.js +672 -13577
  301. package/dist/index.js.map +1 -1
  302. package/dist/inline-citation.js +39 -0
  303. package/dist/inline-citation.js.map +1 -0
  304. package/dist/jsx-preview.js +17 -0
  305. package/dist/jsx-preview.js.map +1 -0
  306. package/dist/markdown-view.js +17 -0
  307. package/dist/markdown-view.js.map +1 -0
  308. package/dist/message-compare.js +12 -0
  309. package/dist/message-compare.js.map +1 -0
  310. package/dist/message-edit.js +19 -0
  311. package/dist/message-edit.js.map +1 -0
  312. package/dist/message-feedback.js +11 -0
  313. package/dist/message-feedback.js.map +1 -0
  314. package/dist/message-form-spec.js +38 -0
  315. package/dist/message-form-spec.js.map +1 -0
  316. package/dist/message-form.js +26 -0
  317. package/dist/message-form.js.map +1 -0
  318. package/dist/message-table-spec.js +26 -0
  319. package/dist/message-table-spec.js.map +1 -0
  320. package/dist/message-table.js +12 -0
  321. package/dist/message-table.js.map +1 -0
  322. package/dist/message.js +51 -0
  323. package/dist/message.js.map +1 -0
  324. package/dist/mic-selector.js +27 -0
  325. package/dist/mic-selector.js.map +1 -0
  326. package/dist/model-provider-logo.js +13 -0
  327. package/dist/model-provider-logo.js.map +1 -0
  328. package/dist/motion-config.js +9 -0
  329. package/dist/motion-config.js.map +1 -0
  330. package/dist/node.js +22 -0
  331. package/dist/node.js.map +1 -0
  332. package/dist/open-in-chat.js +31 -0
  333. package/dist/open-in-chat.js.map +1 -0
  334. package/dist/package-info.js +25 -0
  335. package/dist/package-info.js.map +1 -0
  336. package/dist/panel.js +10 -0
  337. package/dist/panel.js.map +1 -0
  338. package/dist/part-groups.js +18 -0
  339. package/dist/part-groups.js.map +1 -0
  340. package/dist/permission-mode-select.js +9 -0
  341. package/dist/permission-mode-select.js.map +1 -0
  342. package/dist/persona-sources.js +8 -0
  343. package/dist/persona-sources.js.map +1 -0
  344. package/dist/persona.js +14 -0
  345. package/dist/persona.js.map +1 -0
  346. package/dist/plan.js +32 -0
  347. package/dist/plan.js.map +1 -0
  348. package/dist/prompt-input-effort.js +9 -0
  349. package/dist/prompt-input-effort.js.map +1 -0
  350. package/dist/prompt-input-mode.js +10 -0
  351. package/dist/prompt-input-mode.js.map +1 -0
  352. package/dist/prompt-input-slash.js +12 -0
  353. package/dist/prompt-input-slash.js.map +1 -0
  354. package/dist/prompt-input.js +89 -0
  355. package/dist/prompt-input.js.map +1 -0
  356. package/dist/queue.js +37 -0
  357. package/dist/queue.js.map +1 -0
  358. package/dist/reasoning.js +23 -0
  359. package/dist/reasoning.js.map +1 -0
  360. package/dist/sandbox.js +28 -0
  361. package/dist/sandbox.js.map +1 -0
  362. package/dist/schema-display.js +33 -0
  363. package/dist/schema-display.js.map +1 -0
  364. package/dist/selection-toolbar.js +11 -0
  365. package/dist/selection-toolbar.js.map +1 -0
  366. package/dist/session-header.js +9 -0
  367. package/dist/session-header.js.map +1 -0
  368. package/dist/session-status-bar.js +9 -0
  369. package/dist/session-status-bar.js.map +1 -0
  370. package/dist/shimmer.js +9 -0
  371. package/dist/shimmer.js.map +1 -0
  372. package/dist/snippet.js +17 -0
  373. package/dist/snippet.js.map +1 -0
  374. package/dist/sources.js +17 -0
  375. package/dist/sources.js.map +1 -0
  376. package/dist/speech-input.js +9 -0
  377. package/dist/speech-input.js.map +1 -0
  378. package/dist/stack-trace.js +27 -0
  379. package/dist/stack-trace.js.map +1 -0
  380. package/dist/suggestion.js +16 -0
  381. package/dist/suggestion.js.map +1 -0
  382. package/dist/task.js +18 -0
  383. package/dist/task.js.map +1 -0
  384. package/dist/test-results.js +43 -0
  385. package/dist/test-results.js.map +1 -0
  386. package/dist/token-usage.js +27 -0
  387. package/dist/token-usage.js.map +1 -0
  388. package/dist/tool-result-card.js +9 -0
  389. package/dist/tool-result-card.js.map +1 -0
  390. package/dist/tool.js +27 -0
  391. package/dist/tool.js.map +1 -0
  392. package/dist/toolbar.js +10 -0
  393. package/dist/toolbar.js.map +1 -0
  394. package/dist/transcription.js +11 -0
  395. package/dist/transcription.js.map +1 -0
  396. package/dist/turn-status.js +9 -0
  397. package/dist/turn-status.js.map +1 -0
  398. package/dist/use-audio-level.js +9 -0
  399. package/dist/use-audio-level.js.map +1 -0
  400. package/dist/voice-selector.js +47 -0
  401. package/dist/voice-selector.js.map +1 -0
  402. package/dist/web-preview.js +19 -0
  403. package/dist/web-preview.js.map +1 -0
  404. package/package.json +11 -9
  405. package/schemas/a2ui-surface.v1.schema.json +5425 -0
  406. package/src/_chat-shell-rail.tsx +3 -1
  407. package/src/_flow-boundary.tsx +2 -2
  408. package/src/_persona-rive.tsx +27 -41
  409. package/src/a2ui/a2ui-surface.stories.tsx +662 -0
  410. package/src/a2ui/a2ui-surface.test.tsx +201 -0
  411. package/src/a2ui/a2ui-surface.tsx +354 -0
  412. package/src/a2ui/catalog.source.json +772 -0
  413. package/src/a2ui/core/a2ui-core.test.ts +178 -0
  414. package/src/a2ui/core/catalog.generated.ts +1006 -0
  415. package/src/a2ui/core/complete-json.ts +81 -0
  416. package/src/a2ui/core/index.ts +10 -0
  417. package/src/a2ui/core/schema.ts +111 -0
  418. package/src/a2ui/core/spec.ts +148 -0
  419. package/src/a2ui/core/validate.ts +266 -0
  420. package/src/a2ui/index.ts +7 -0
  421. package/src/a2ui/ui-catalog.tsx +225 -0
  422. package/src/a2ui/wave1-chart-spec.test.ts +87 -0
  423. package/src/a2ui/wave2-chart-spec.test.ts +108 -0
  424. package/src/agentic-workspace.stories.tsx +6 -45
  425. package/src/chat-shell.test.tsx +40 -10
  426. package/src/chat-shell.tsx +90 -44
  427. package/src/chat.stories.tsx +47 -42
  428. package/src/composer.stories.tsx +4 -5
  429. package/src/composer.test.tsx +45 -0
  430. package/src/composer.tsx +104 -21
  431. package/src/context-panel.stories.tsx +1 -1
  432. package/src/context-panel.tsx +1 -1
  433. package/src/conversation.stories.tsx +1 -0
  434. package/src/conversation.test.tsx +16 -0
  435. package/src/conversation.tsx +16 -2
  436. package/src/diff-view.stories.tsx +79 -0
  437. package/src/diff-view.tsx +3 -2
  438. package/src/file-tree.tsx +24 -17
  439. package/src/gallery.stories.tsx +42 -0
  440. package/src/gallery.tsx +2 -2
  441. package/src/grouped-parts.stories.tsx +23 -0
  442. package/src/grouped-parts.tsx +1 -1
  443. package/src/index.ts +1 -0
  444. package/src/message-compare.stories.tsx +40 -0
  445. package/src/message-compare.tsx +2 -1
  446. package/src/message-form.tsx +1 -1
  447. package/src/message-table.stories.tsx +24 -0
  448. package/src/message-table.tsx +1 -1
  449. package/src/package-info.tsx +12 -9
  450. package/src/reasoning.stories.tsx +27 -0
  451. package/src/reasoning.tsx +1 -1
  452. package/src/session-header.stories.tsx +35 -1
  453. package/src/session-header.tsx +1 -1
  454. package/src/sources.stories.tsx +30 -0
  455. package/src/sources.tsx +4 -1
  456. package/src/templates-ai-assistant.stories.tsx +151 -87
  457. package/src/tool.stories.tsx +39 -0
  458. package/src/tool.tsx +3 -3
  459. package/src/toolbar.tsx +0 -10
  460. package/dist/_flow-boundary-SHNWLQG5.js.map +0 -1
  461. package/dist/_persona-rive-JEG44YHX.js.map +0 -1
  462. /package/dist/{_audio-player-media-chrome-T3XVXWRZ.js.map → _audio-player-media-chrome.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/a2ui/core/catalog.generated.ts"],"sourcesContent":["// GENERATED by packages/cli/scripts/gen-a2ui-catalog.mjs from\n// packages/ai/src/a2ui/catalog.source.json + brand-ui.manifest.json — do not edit;\n// edit the source file (or the component) and run `pnpm gen`.\nimport type { A2uiCatalogSchema } from \"./spec\";\n\nexport const A2UI_CATALOG_VERSION = \"1\";\n\nexport const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {\n Accordion: {\n children: true,\n props: {\n collapsible: {\n type: \"boolean\",\n },\n defaultValue: {\n type: \"string\",\n },\n type: {\n enum: [\"single\", \"multiple\"],\n required: true,\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n AccordionContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionItem: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionTrigger: {\n children: true,\n props: {\n headingLevel: {\n type: \"number\",\n enum: [2, 3, 4, 5, 6],\n description:\n \"The heading level Radix's `Accordion.Header` renders. Radix hardcodes `h3`, which skips a level whenever the accordion sits directly under the page `h1` — so…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Alert: {\n children: true,\n props: {\n variant: {\n enum: [\"default\", \"destructive\", \"success\", \"warning\", \"info\"],\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AlertTitle + AlertDescription inside.\",\n },\n AlertDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, label-style descriptions…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AlertTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Avatar: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AvatarFallback (initials) inside.\",\n },\n AvatarFallback: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Badge: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"outline\", \"success\", \"warning\", \"destructive\", \"info\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compact status/label chip (status, count, category).\",\n },\n BentoGrid: {\n children: true,\n props: {\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight on every tile in this grid. Individual tiles can still opt out (or in) with their own `spotlight` prop. Disabled entire…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Feature/bento grid; children are BentoGridItem.\",\n },\n BentoGridItem: {\n children: true,\n props: {\n size: {\n type: \"string\",\n description:\n 'Size preset. Resolves to a col + row span. Overridden by explicit `span`. @default \"sm\"',\n enum: [\"sm\", \"md\", \"lg\", \"hero\"],\n },\n span: {\n type: \"object\",\n description:\n \"Explicit grid span. Wins over `size`. Spans clamp gracefully on narrow layouts — a `col: 4` on a 2-col grid becomes `span min(4, 2)`.\",\n },\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight gradient on this tile. Omit to inherit the parent `BentoGrid`'s `spotlight` (itself `false` by default) — so the effect…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Button: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\", \"lg\", \"icon\", \"icon-sm\", \"icon-lg\"],\n default: \"default\",\n },\n type: {\n enum: [\"button\", \"submit\"],\n default: \"button\",\n type: \"string\",\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"destructive\", \"outline\", \"outline-subtle\", \"ghost\", \"link\"],\n default: \"default\",\n },\n },\n events: {\n click: \"onClick\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: 'An action. Bind `on.click`; one `variant: \"default\"` per group.',\n },\n ButtonGroup: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Card: {\n children: true,\n props: {\n detail: {\n type: \"node\",\n description:\n \"Optional detail-panel content. **Undefined → a plain card** (today's single `<div>` — no grid, no panel, zero behaviour change).\",\n },\n detailLabel: {\n type: \"string\",\n description: 'Accessible label for the detail region. @default \"Details\"',\n },\n detailPlacement: {\n type: \"string\",\n enum: [\"side\", \"bottom\"],\n description: 'Which edge the detail panel sits on. @default \"side\"',\n },\n interactive: {\n type: \"string\",\n enum: [\"true\", \"false\"],\n default: \"false\",\n },\n stacked: {\n type: \"boolean\",\n description:\n \"Opt-in hairline gesture: the edges of two sheets stacked behind the card's top edge (the `hairline-stack` utility). It draws OUTSIDE the card, so it needs ~1…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The one generic surface — compose CardHeader / CardContent / CardFooter inside.\",\n },\n CardAction: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The header's trailing action slot (a Button, a Badge).\",\n },\n CardContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, subtitle-style descripti…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Checkbox: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Binary on/off toggle within a form (multi-select within a group).\",\n },\n Collapsible: {\n children: true,\n props: {\n defaultOpen: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onOpenChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleTrigger: {\n children: true,\n props: {\n asChild: {\n type: \"boolean\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Descriptions: {\n children: true,\n props: {\n columns: {\n type: \"number\",\n enum: [1, 2, 3],\n description:\n \"Number of columns at the widest breakpoint. Collapses to a single column on small screens. Default 1.\",\n },\n layout: {\n type: \"string\",\n description:\n \"`horizontal` places the label beside the value; `vertical` stacks the label above the value. Default `horizontal`.\",\n enum: [\"horizontal\", \"vertical\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Key–value list; children are DescriptionsItem.\",\n },\n DescriptionsItem: {\n children: true,\n props: {\n label: {\n type: \"node\",\n required: true,\n description: \"The term / label for this entry.\",\n },\n numeric: {\n type: \"boolean\",\n description:\n \"When the value is numeric, set this so the value uses `tabular-nums` for aligned digits.\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n EmptyState: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary/secondary actions.\",\n },\n description: {\n type: \"node\",\n },\n icon: {\n type: \"node\",\n description:\n \"Optional icon shown above the title, clamped to a fixed 40×40 (this wrapper only ever forwards `icon` to `StatePanel`, never `illustration` — for a larger, u…\",\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Nothing here yet — title, description, optional actions.\",\n },\n Grid: {\n builtin: true,\n children: true,\n props: {\n columns: {\n enum: [1, 2, 3, 4],\n default: 2,\n type: \"number\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n },\n events: {},\n source: \"builtin\",\n summary: \"Responsive CSS grid, 1–4 equal columns (collapses to one column on narrow screens).\",\n },\n Heading: {\n children: true,\n props: {\n level: {\n type: \"number\",\n description: \"Semantic heading level — drives the rendered tag AND the default size.\",\n enum: [1, 2, 3, 4, 5, 6],\n default: 2,\n },\n size: {\n type: \"string\",\n enum: [\"display-lg\", \"display\", \"title\", \"subtitle\"],\n default: \"title\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Section heading; `level` sets the HTML rank (1–6), `size` the type role.\",\n },\n Input: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n required: {\n type: \"boolean\",\n },\n type: {\n enum: [\"text\", \"email\", \"number\", \"password\", \"search\", \"tel\", \"url\", \"date\"],\n type: \"string\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Single-line text field — the base form input.\",\n },\n Kbd: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Label: {\n children: true,\n props: {\n htmlFor: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n MetricCard: {\n children: false,\n props: {\n currency: {\n type: \"string\",\n description: 'ISO 4217 code for `valueFormat: \"currency\"`. Default: `\"USD\"`.',\n },\n delta: {\n type: \"string\",\n description: 'Signed change, e.g. \"+12.4%\". Direction colors it.',\n },\n deltaDirection: {\n type: \"string\",\n enum: [\"up\", \"down\", \"neutral\"],\n },\n description: {\n type: \"node\",\n description: \"Secondary line under the value — sublabel / context.\",\n },\n evidence: {\n type: \"node\",\n description:\n \"Optional grounding footer (research 11 §B.5 KPI-3) — connects a cited figure to its source (e.g. an `EvidenceChip` from `@elabs-ai/components-ai`). Rendered …\",\n },\n label: {\n type: \"node\",\n required: true,\n },\n loading: {\n type: \"boolean\",\n description:\n \"Loading vs ready — renders a layout-shaped skeleton (matching the real box height) instead of the value/label/delta text. Default: `false`.\",\n },\n positiveIsGood: {\n type: \"boolean\",\n description: 'Whether \"up\" is good (green) — flip for metrics where down is good.',\n },\n sparkline: {\n type: \"node\",\n description:\n 'Trend slot rendered directly under the value (RM-072) — pass a `<Sparkline …/>` from `@elabs-ai/components-charts`. Hidden at `size=\"sm\"`.',\n },\n value: {\n type: \"node\",\n required: true,\n },\n valueFormat: {\n type: \"string\",\n description:\n 'How to render a NUMERIC `value`. Default: `\"compact\"`. Ignored for every other `ReactNode` — a string you already formatted is rendered verbatim.',\n enum: [\"number\", \"compact\", \"currency\", \"percent\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"One KPI: label, value, optional delta. Put several in a Grid.\",\n },\n Progress: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n marker: {\n type: \"number\",\n description:\n 'Reference point (0–100, same scale as `value`) — e.g. an \"expected by today\" pace or a target — rendered as a thin vertical tick on the track. Unset (default…',\n },\n markerLabel: {\n type: \"string\",\n description:\n 'What `marker` represents (already localized by the caller — e.g. `\"expected 70% by today\"`). When set, it is appended to the progress bar\\'s accessible value …',\n },\n max: {\n type: \"number\",\n },\n value: {\n type: \"number\",\n required: true,\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"success\", \"warning\", \"destructive\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n RadioGroup: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Mutually-exclusive single choice from a small visible set.\",\n },\n RadioGroupItem: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SectionHeader: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Right-aligned actions (buttons, menus).\",\n },\n description: {\n type: \"node\",\n },\n eyebrow: {\n type: \"node\",\n description: \"Optional element rendered above the title (eyebrow / breadcrumbs).\",\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Title + description + optional actions above a region.\",\n },\n Select: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose SelectTrigger (SelectValue) + SelectContent (SelectItem…).\",\n },\n SelectContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectItem: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectTrigger: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n autoTitle: {\n type: \"boolean\",\n description:\n \"Auto-set a native `title` from the trigger's rendered text — but ONLY while that text is actually clipped (default `true`). Set `false` when the trigger is a…\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectValue: {\n children: false,\n props: {\n placeholder: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Separator: {\n children: false,\n props: {\n orientation: {\n enum: [\"horizontal\", \"vertical\"],\n default: \"horizontal\",\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Slider: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"array\",\n },\n max: {\n type: \"number\",\n },\n min: {\n type: \"number\",\n },\n step: {\n type: \"number\",\n },\n thumbProps: {\n type: \"array\",\n description:\n \"Escape hatch spread onto the thumb LAST — for `data-*`/`style`/etc, or to deliberately override `aria-label`/`aria-labelledby`/`aria-valuetext` (an explicit …\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Stack: {\n builtin: true,\n children: true,\n props: {\n align: {\n enum: [\"start\", \"center\", \"end\", \"stretch\"],\n default: \"stretch\",\n type: \"string\",\n },\n direction: {\n enum: [\"column\", \"row\"],\n default: \"column\",\n type: \"string\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n justify: {\n enum: [\"start\", \"center\", \"end\", \"between\"],\n default: \"start\",\n type: \"string\",\n },\n wrap: {\n type: \"boolean\",\n default: false,\n },\n },\n events: {},\n source: \"builtin\",\n summary:\n \"Vertical or horizontal flex group. The default container — put siblings in a Stack, never bare.\",\n },\n StatePanel: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary / secondary action buttons.\",\n },\n description: {\n type: \"node\",\n description: \"Supporting description below the title.\",\n },\n icon: {\n type: \"node\",\n description:\n 'Icon shown above the title, clamped to a uniform 40×40 so mismatched glyphs stay tidy. For `\"error\"` defaults to a built-in warning triangle. For `\"loading\"`…',\n },\n illustration: {\n type: \"node\",\n description:\n \"A larger illustration (one of `@elabs-ai/components-ui`'s shipped `*Illustration` components, or a consumer's own `ReactNode`) shown above the title instead …\",\n },\n kind: {\n type: \"string\",\n enum: [\"empty\", \"error\", \"loading\"],\n default: \"empty\",\n },\n loadingLabel: {\n type: \"string\",\n description: 'Accessible label for the spinner in loading state. @default \"Loading…\"',\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\", \"lg\"],\n description: 'Spinner size (loading kind only). @default \"md\"',\n },\n title: {\n type: \"node\",\n description: \"Heading text.\",\n },\n titleAs: {\n type: \"string\",\n enum: [\"div\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n description:\n \"Heading level for the panel's title (#328 convention). Set this to the level that correctly follows whatever heading precedes this panel in the document outl…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"An empty / error / loading message panel.\",\n },\n StatusBadge: {\n children: false,\n props: {\n hideIcon: {\n type: \"boolean\",\n description: \"Render label-only (no status icon).\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\"],\n default: \"md\",\n },\n status: {\n type: \"string\",\n required: true,\n description: \"The canonical execution status, or a mapped out-of-vocabulary one (#363).\",\n enum: [\n \"pending\",\n \"running\",\n \"complete\",\n \"awaiting-approval\",\n \"denied\",\n \"failed\",\n \"skipped\",\n ],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A closed status vocabulary with icon + text (never colour alone).\",\n },\n Switch: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Immediate on/off setting toggle (applies on change, not on submit).\",\n },\n Table: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TableHeader/TableBody → TableRow → TableHead/TableCell.\",\n },\n TableBody: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCaption: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCell: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHead: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableRow: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Tabs: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n required: true,\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TabsList (TabsTrigger…) + TabsContent per value.\",\n },\n TabsContent: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsList: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"segmented\", \"underline\"],\n default: \"segmented\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsTrigger: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Text: {\n children: true,\n props: {\n tone: {\n type: \"string\",\n enum: [\"default\", \"muted\", \"primary\"],\n default: \"default\",\n },\n variant: {\n type: \"string\",\n enum: [\"lead\", \"body\", \"caption\", \"meta\", \"kpi\", \"kpi-sm\", \"eyebrow\", \"code\"],\n default: \"body\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A paragraph or inline run of text with a type role and tone.\",\n },\n Textarea: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n rows: {\n type: \"number\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Timeline: {\n children: false,\n props: {\n items: {\n type: \"array\",\n required: true,\n description: '[{ title, description?, status?: \"done\"|\"active\"|\"pending\", timestamp? }]',\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Ordered status timeline from `items` (title, status, timestamp, description).\",\n },\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import {
3
+ lazyFlowPart
4
+ } from "./chunk-NMVNNO3L.js";
5
+
6
+ // src/canvas.tsx
7
+ import { Skeleton } from "@elabs-ai/components-ui";
8
+ import { cn } from "@elabs-ai/components-ui/lib/cn";
9
+ import { Suspense } from "react";
10
+ import { jsx } from "react/jsx-runtime";
11
+ var CanvasImpl = lazyFlowPart((m) => m.Canvas);
12
+ var Canvas = ({ className, ...props }) => (
13
+ // The canvas fills the box its parent gives it, so the skeleton reserves the
14
+ // same space and the engine chunk arrives without a layout shift.
15
+ /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Skeleton, { className: cn("size-full", className) }), children: /* @__PURE__ */ jsx(CanvasImpl, { className, ...props }) })
16
+ );
17
+
18
+ export {
19
+ Canvas
20
+ };
21
+ //# sourceMappingURL=chunk-BA3AEMOU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/canvas.tsx"],"sourcesContent":["\"use client\";\n\nimport { Skeleton } from \"@elabs-ai/components-ui\";\nimport { cn } from \"@elabs-ai/components-ui/lib/cn\";\nimport type { ReactFlowProps } from \"@xyflow/react\";\nimport type { ReactNode } from \"react\";\nimport { Suspense } from \"react\";\n\nimport { lazyFlowPart } from \"./_flow-lazy\";\n\nexport type CanvasProps = ReactFlowProps & {\n children?: ReactNode;\n};\n\n/**\n * React Flow — and its stylesheet — is reached through a dynamic import: it\n * declares no `sideEffects`, so a static import would put the whole engine in\n * every consumer's entry chunk, a canvas rendered or not. `ReactFlowProps` above\n * is a TYPE import and erases. See ADR 0019 and `pnpm heavy-deps:check`.\n */\nconst CanvasImpl = lazyFlowPart<CanvasProps>((m) => m.Canvas);\n\nexport const Canvas = ({ className, ...props }: CanvasProps) => (\n // The canvas fills the box its parent gives it, so the skeleton reserves the\n // same space and the engine chunk arrives without a layout shift.\n <Suspense fallback={<Skeleton className={cn(\"size-full\", className)} />}>\n <CanvasImpl className={className} {...props} />\n </Suspense>\n);\n"],"mappings":";;;;;;AAEA,SAAS,gBAAgB;AACzB,SAAS,UAAU;AAGnB,SAAS,gBAAgB;AAmBH;AALtB,IAAM,aAAa,aAA0B,CAAC,MAAM,EAAE,MAAM;AAErD,IAAM,SAAS,CAAC,EAAE,WAAW,GAAG,MAAM;AAAA;AAAA;AAAA,EAG3C,oBAAC,YAAS,UAAU,oBAAC,YAAS,WAAW,GAAG,aAAa,SAAS,GAAG,GACnE,8BAAC,cAAW,WAAuB,GAAG,OAAO,GAC/C;AAAA;","names":[]}
@@ -0,0 +1,336 @@
1
+ "use client";
2
+
3
+ // src/stack-trace.tsx
4
+ import { useControllableState } from "@radix-ui/react-use-controllable-state";
5
+ import { Button } from "@elabs-ai/components-ui";
6
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@elabs-ai/components-ui";
7
+ import { useCopyToClipboard, useLocale } from "@elabs-ai/components-ui";
8
+ import { cn } from "@elabs-ai/components-ui/lib/cn";
9
+ import { AlertTriangleIcon, CheckIcon, ChevronDownIcon, CopyIcon } from "lucide-react";
10
+ import { createContext, memo, useCallback, useContext, useMemo } from "react";
11
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
+ var STACK_FRAME_WITH_PARENS_REGEX = /^at\s+(.+?)\s+\((.+):(\d+):(\d+)\)$/;
13
+ var STACK_FRAME_WITHOUT_FN_REGEX = /^at\s+(.+):(\d+):(\d+)$/;
14
+ var ERROR_TYPE_REGEX = /^(\w+Error|Error):\s*(.*)$/;
15
+ var AT_PREFIX_REGEX = /^at\s+/;
16
+ var StackTraceContext = createContext(null);
17
+ var useStackTrace = () => {
18
+ const context = useContext(StackTraceContext);
19
+ if (!context) {
20
+ throw new Error("StackTrace components must be used within StackTrace");
21
+ }
22
+ return context;
23
+ };
24
+ var parseStackFrame = (line) => {
25
+ const trimmed = line.trim();
26
+ const withParensMatch = trimmed.match(STACK_FRAME_WITH_PARENS_REGEX);
27
+ if (withParensMatch) {
28
+ const [, functionName, filePath, lineNum, colNum] = withParensMatch;
29
+ const isInternal = (filePath?.includes("node_modules") ?? false) || (filePath?.startsWith("node:") ?? false) || (filePath?.includes("internal/") ?? false);
30
+ return {
31
+ columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
32
+ filePath: filePath ?? null,
33
+ functionName: functionName ?? null,
34
+ isInternal,
35
+ lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
36
+ raw: trimmed
37
+ };
38
+ }
39
+ const withoutFnMatch = trimmed.match(STACK_FRAME_WITHOUT_FN_REGEX);
40
+ if (withoutFnMatch) {
41
+ const [, filePath, lineNum, colNum] = withoutFnMatch;
42
+ const isInternal = (filePath?.includes("node_modules") ?? false) || (filePath?.startsWith("node:") ?? false) || (filePath?.includes("internal/") ?? false);
43
+ return {
44
+ columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
45
+ filePath: filePath ?? null,
46
+ functionName: null,
47
+ isInternal,
48
+ lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
49
+ raw: trimmed
50
+ };
51
+ }
52
+ return {
53
+ columnNumber: null,
54
+ filePath: null,
55
+ functionName: null,
56
+ isInternal: trimmed.includes("node_modules") || trimmed.includes("node:"),
57
+ lineNumber: null,
58
+ raw: trimmed
59
+ };
60
+ };
61
+ var parseStackTrace = (trace) => {
62
+ const lines = trace.split("\n").filter((line) => line.trim());
63
+ if (lines.length === 0) {
64
+ return {
65
+ errorMessage: trace,
66
+ errorType: null,
67
+ frames: [],
68
+ raw: trace
69
+ };
70
+ }
71
+ const firstLine = lines[0]?.trim() ?? "";
72
+ let errorType = null;
73
+ let errorMessage = firstLine;
74
+ const errorMatch = firstLine.match(ERROR_TYPE_REGEX);
75
+ if (errorMatch) {
76
+ const [, type, msg] = errorMatch;
77
+ errorType = type ?? null;
78
+ errorMessage = msg || "";
79
+ }
80
+ const frames = lines.slice(1).filter((line) => line.trim().startsWith("at ")).map(parseStackFrame);
81
+ return {
82
+ errorMessage,
83
+ errorType,
84
+ frames,
85
+ raw: trace
86
+ };
87
+ };
88
+ var StackTrace = memo(
89
+ ({
90
+ trace,
91
+ className,
92
+ open,
93
+ defaultOpen = false,
94
+ onOpenChange,
95
+ onFilePathClick,
96
+ children,
97
+ ...props
98
+ }) => {
99
+ const [isOpen, setIsOpen] = useControllableState({
100
+ defaultProp: defaultOpen,
101
+ onChange: onOpenChange,
102
+ prop: open
103
+ });
104
+ const parsedTrace = useMemo(() => parseStackTrace(trace), [trace]);
105
+ const contextValue = useMemo(
106
+ () => ({
107
+ isOpen,
108
+ onFilePathClick,
109
+ raw: trace,
110
+ setIsOpen,
111
+ trace: parsedTrace
112
+ }),
113
+ [parsedTrace, trace, isOpen, setIsOpen, onFilePathClick]
114
+ );
115
+ return /* @__PURE__ */ jsx(StackTraceContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
116
+ "div",
117
+ {
118
+ className: cn(
119
+ "not-prose w-full overflow-hidden rounded-lg border bg-background font-mono text-body",
120
+ className
121
+ ),
122
+ ...props,
123
+ children
124
+ }
125
+ ) });
126
+ }
127
+ );
128
+ var StackTraceHeader = memo(({ className, children, ...props }) => {
129
+ const { isOpen, setIsOpen } = useStackTrace();
130
+ return /* @__PURE__ */ jsx(Collapsible, { onOpenChange: setIsOpen, open: isOpen, children: /* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, ...props, children: /* @__PURE__ */ jsx(
131
+ "div",
132
+ {
133
+ className: cn(
134
+ "flex w-full cursor-pointer items-center gap-3 p-3 text-start transition-colors hover:bg-muted/50",
135
+ className
136
+ ),
137
+ children
138
+ }
139
+ ) }) });
140
+ });
141
+ var StackTraceError = memo(({ className, children, ...props }) => /* @__PURE__ */ jsxs("div", { className: cn("flex flex-1 items-center gap-2 overflow-hidden", className), ...props, children: [
142
+ /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-4 shrink-0 text-destructive" }),
143
+ children
144
+ ] }));
145
+ var StackTraceErrorType = memo(
146
+ ({ className, children, ...props }) => {
147
+ const { trace } = useStackTrace();
148
+ return (
149
+ // #124: the error type NAME is running text (e.g. "TypeError"), not a
150
+ // mark — ink rung, unlike the AlertTriangleIcon mark above.
151
+ /* @__PURE__ */ jsx("span", { className: cn("shrink-0 font-semibold text-destructive-text", className), ...props, children: children ?? trace.errorType })
152
+ );
153
+ }
154
+ );
155
+ var StackTraceErrorMessage = memo(
156
+ ({ className, children, ...props }) => {
157
+ const { trace } = useStackTrace();
158
+ return /* @__PURE__ */ jsx("span", { className: cn("truncate text-foreground", className), ...props, children: children ?? trace.errorMessage });
159
+ }
160
+ );
161
+ var handleActionsClick = (e) => e.stopPropagation();
162
+ var handleActionsKeyDown = (e) => {
163
+ if (e.key === "Enter" || e.key === " ") {
164
+ e.stopPropagation();
165
+ }
166
+ };
167
+ var StackTraceActions = memo(
168
+ ({ className, children, ...props }) => /* @__PURE__ */ jsx(
169
+ "div",
170
+ {
171
+ className: cn("flex shrink-0 items-center gap-1", className),
172
+ onClick: handleActionsClick,
173
+ onKeyDown: handleActionsKeyDown,
174
+ role: "group",
175
+ ...props,
176
+ children
177
+ }
178
+ )
179
+ );
180
+ var StackTraceCopyButton = memo(
181
+ ({
182
+ onCopy,
183
+ onError,
184
+ timeout,
185
+ className,
186
+ children,
187
+ "aria-label": ariaLabel,
188
+ ...props
189
+ }) => {
190
+ const { t } = useLocale();
191
+ const { raw } = useStackTrace();
192
+ const { copied: isCopied, copy } = useCopyToClipboard(
193
+ timeout === void 0 ? void 0 : { resetAfterMs: timeout }
194
+ );
195
+ const copyToClipboard = useCallback(async () => {
196
+ const ok = await copy(raw);
197
+ if (ok) {
198
+ onCopy?.();
199
+ } else {
200
+ onError?.(new Error("Clipboard API not available"));
201
+ }
202
+ }, [copy, raw, onCopy, onError]);
203
+ const Icon = isCopied ? CheckIcon : CopyIcon;
204
+ return /* @__PURE__ */ jsx(
205
+ Button,
206
+ {
207
+ "aria-label": ariaLabel ?? t("copy"),
208
+ className: cn("size-7", className),
209
+ onClick: copyToClipboard,
210
+ size: "icon",
211
+ variant: "ghost",
212
+ ...props,
213
+ children: children ?? /* @__PURE__ */ jsx(Icon, { size: 14 })
214
+ }
215
+ );
216
+ }
217
+ );
218
+ var StackTraceExpandButton = memo(
219
+ ({ className, ...props }) => {
220
+ const { isOpen } = useStackTrace();
221
+ return /* @__PURE__ */ jsx("div", { className: cn("flex size-7 items-center justify-center", className), ...props, children: /* @__PURE__ */ jsx(
222
+ ChevronDownIcon,
223
+ {
224
+ className: cn(
225
+ "size-4 text-muted-foreground transition-transform",
226
+ isOpen ? "rotate-180" : "rotate-0"
227
+ )
228
+ }
229
+ ) });
230
+ }
231
+ );
232
+ var StackTraceContent = memo(
233
+ ({ className, maxHeight = 400, children, ...props }) => {
234
+ const { isOpen } = useStackTrace();
235
+ return /* @__PURE__ */ jsx(Collapsible, { open: isOpen, children: /* @__PURE__ */ jsx(
236
+ CollapsibleContent,
237
+ {
238
+ className: cn(
239
+ "overflow-auto border-t bg-muted/30",
240
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=open]:animate-in",
241
+ className
242
+ ),
243
+ style: { maxHeight },
244
+ ...props,
245
+ children
246
+ }
247
+ ) });
248
+ }
249
+ );
250
+ var FilePathButton = memo(({ frame, onFilePathClick }) => {
251
+ const handleClick = useCallback(() => {
252
+ if (frame.filePath) {
253
+ onFilePathClick?.(
254
+ frame.filePath,
255
+ frame.lineNumber ?? void 0,
256
+ frame.columnNumber ?? void 0
257
+ );
258
+ }
259
+ }, [frame, onFilePathClick]);
260
+ return /* @__PURE__ */ jsxs(
261
+ "button",
262
+ {
263
+ className: cn(
264
+ // #399 — a frame link is body text; the hover ink takes the `-text` rung.
265
+ "underline decoration-dotted hover:text-primary-text",
266
+ onFilePathClick && "cursor-pointer"
267
+ ),
268
+ disabled: !onFilePathClick,
269
+ onClick: handleClick,
270
+ type: "button",
271
+ children: [
272
+ frame.filePath,
273
+ frame.lineNumber !== null && `:${frame.lineNumber}`,
274
+ frame.columnNumber !== null && `:${frame.columnNumber}`
275
+ ]
276
+ }
277
+ );
278
+ });
279
+ FilePathButton.displayName = "FilePathButton";
280
+ var StackTraceFrames = memo(
281
+ ({ className, showInternalFrames = true, ...props }) => {
282
+ const { trace, onFilePathClick } = useStackTrace();
283
+ const { t } = useLocale();
284
+ const framesToShow = showInternalFrames ? trace.frames : trace.frames.filter((f) => !f.isInternal);
285
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-1 p-3", className), ...props, children: [
286
+ framesToShow.map((frame) => /* @__PURE__ */ jsxs(
287
+ "div",
288
+ {
289
+ className: cn(
290
+ "text-meta",
291
+ frame.isInternal ? "text-muted-foreground/50" : "text-foreground/90"
292
+ ),
293
+ children: [
294
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "at " }),
295
+ frame.functionName && /* @__PURE__ */ jsxs("span", { className: frame.isInternal ? "" : "text-foreground", children: [
296
+ frame.functionName,
297
+ " "
298
+ ] }),
299
+ frame.filePath && /* @__PURE__ */ jsxs(Fragment, { children: [
300
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "(" }),
301
+ /* @__PURE__ */ jsx(FilePathButton, { frame, onFilePathClick }),
302
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: ")" })
303
+ ] }),
304
+ !(frame.filePath || frame.functionName) && /* @__PURE__ */ jsx("span", { children: frame.raw.replace(AT_PREFIX_REGEX, "") })
305
+ ]
306
+ },
307
+ frame.raw
308
+ )),
309
+ framesToShow.length === 0 && /* @__PURE__ */ jsx("div", { className: "text-muted-foreground text-meta", children: t("ai.stackTrace.empty") })
310
+ ] });
311
+ }
312
+ );
313
+ StackTrace.displayName = "StackTrace";
314
+ StackTraceHeader.displayName = "StackTraceHeader";
315
+ StackTraceError.displayName = "StackTraceError";
316
+ StackTraceErrorType.displayName = "StackTraceErrorType";
317
+ StackTraceErrorMessage.displayName = "StackTraceErrorMessage";
318
+ StackTraceActions.displayName = "StackTraceActions";
319
+ StackTraceCopyButton.displayName = "StackTraceCopyButton";
320
+ StackTraceExpandButton.displayName = "StackTraceExpandButton";
321
+ StackTraceContent.displayName = "StackTraceContent";
322
+ StackTraceFrames.displayName = "StackTraceFrames";
323
+
324
+ export {
325
+ StackTrace,
326
+ StackTraceHeader,
327
+ StackTraceError,
328
+ StackTraceErrorType,
329
+ StackTraceErrorMessage,
330
+ StackTraceActions,
331
+ StackTraceCopyButton,
332
+ StackTraceExpandButton,
333
+ StackTraceContent,
334
+ StackTraceFrames
335
+ };
336
+ //# sourceMappingURL=chunk-BBHFOYML.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/stack-trace.tsx"],"sourcesContent":["\"use client\";\n\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Button } from \"@elabs-ai/components-ui\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@elabs-ai/components-ui\";\nimport { useCopyToClipboard, useLocale } from \"@elabs-ai/components-ui\";\nimport { cn } from \"@elabs-ai/components-ui/lib/cn\";\nimport { AlertTriangleIcon, CheckIcon, ChevronDownIcon, CopyIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { createContext, memo, useCallback, useContext, useMemo } from \"react\";\n\n// Regex patterns for parsing stack traces\nconst STACK_FRAME_WITH_PARENS_REGEX = /^at\\s+(.+?)\\s+\\((.+):(\\d+):(\\d+)\\)$/;\nconst STACK_FRAME_WITHOUT_FN_REGEX = /^at\\s+(.+):(\\d+):(\\d+)$/;\nconst ERROR_TYPE_REGEX = /^(\\w+Error|Error):\\s*(.*)$/;\nconst AT_PREFIX_REGEX = /^at\\s+/;\n\ninterface StackFrame {\n raw: string;\n functionName: string | null;\n filePath: string | null;\n lineNumber: number | null;\n columnNumber: number | null;\n isInternal: boolean;\n}\n\ninterface ParsedStackTrace {\n errorType: string | null;\n errorMessage: string;\n frames: StackFrame[];\n raw: string;\n}\n\ninterface StackTraceContextValue {\n trace: ParsedStackTrace;\n raw: string;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n onFilePathClick?: (filePath: string, line?: number, column?: number) => void;\n}\n\nconst StackTraceContext = createContext<StackTraceContextValue | null>(null);\n\nconst useStackTrace = () => {\n const context = useContext(StackTraceContext);\n if (!context) {\n throw new Error(\"StackTrace components must be used within StackTrace\");\n }\n return context;\n};\n\nconst parseStackFrame = (line: string): StackFrame => {\n const trimmed = line.trim();\n\n // Pattern: at functionName (filePath:line:column)\n const withParensMatch = trimmed.match(STACK_FRAME_WITH_PARENS_REGEX);\n if (withParensMatch) {\n const [, functionName, filePath, lineNum, colNum] = withParensMatch;\n const isInternal =\n (filePath?.includes(\"node_modules\") ?? false) ||\n (filePath?.startsWith(\"node:\") ?? false) ||\n (filePath?.includes(\"internal/\") ?? false);\n return {\n columnNumber: colNum ? Number.parseInt(colNum, 10) : null,\n filePath: filePath ?? null,\n functionName: functionName ?? null,\n isInternal,\n lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,\n raw: trimmed,\n };\n }\n\n // Pattern: at filePath:line:column (no function name)\n const withoutFnMatch = trimmed.match(STACK_FRAME_WITHOUT_FN_REGEX);\n if (withoutFnMatch) {\n const [, filePath, lineNum, colNum] = withoutFnMatch;\n const isInternal =\n (filePath?.includes(\"node_modules\") ?? false) ||\n (filePath?.startsWith(\"node:\") ?? false) ||\n (filePath?.includes(\"internal/\") ?? false);\n return {\n columnNumber: colNum ? Number.parseInt(colNum, 10) : null,\n filePath: filePath ?? null,\n functionName: null,\n isInternal,\n lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,\n raw: trimmed,\n };\n }\n\n // Fallback: unparseable line\n return {\n columnNumber: null,\n filePath: null,\n functionName: null,\n isInternal: trimmed.includes(\"node_modules\") || trimmed.includes(\"node:\"),\n lineNumber: null,\n raw: trimmed,\n };\n};\n\nconst parseStackTrace = (trace: string): ParsedStackTrace => {\n const lines = trace.split(\"\\n\").filter((line) => line.trim());\n\n if (lines.length === 0) {\n return {\n errorMessage: trace,\n errorType: null,\n frames: [],\n raw: trace,\n };\n }\n\n const firstLine = lines[0]?.trim() ?? \"\";\n let errorType: string | null = null;\n let errorMessage = firstLine;\n\n // Try to extract error type from \"ErrorType: message\" format\n const errorMatch = firstLine.match(ERROR_TYPE_REGEX);\n if (errorMatch) {\n const [, type, msg] = errorMatch;\n errorType = type ?? null;\n errorMessage = msg || \"\";\n }\n\n // Parse stack frames (lines starting with \"at\")\n const frames = lines\n .slice(1)\n .filter((line) => line.trim().startsWith(\"at \"))\n .map(parseStackFrame);\n\n return {\n errorMessage,\n errorType,\n frames,\n raw: trace,\n };\n};\n\nexport type StackTraceProps = ComponentProps<\"div\"> & {\n trace: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onFilePathClick?: (filePath: string, line?: number, column?: number) => void;\n};\n\nexport const StackTrace = memo(\n ({\n trace,\n className,\n open,\n defaultOpen = false,\n onOpenChange,\n onFilePathClick,\n children,\n ...props\n }: StackTraceProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n prop: open,\n });\n\n const parsedTrace = useMemo(() => parseStackTrace(trace), [trace]);\n\n const contextValue = useMemo(\n () => ({\n isOpen,\n onFilePathClick,\n raw: trace,\n setIsOpen,\n trace: parsedTrace,\n }),\n [parsedTrace, trace, isOpen, setIsOpen, onFilePathClick],\n );\n\n return (\n <StackTraceContext.Provider value={contextValue}>\n <div\n className={cn(\n \"not-prose w-full overflow-hidden rounded-lg border bg-background font-mono text-body\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </StackTraceContext.Provider>\n );\n },\n);\n\nexport type StackTraceHeaderProps = ComponentProps<typeof CollapsibleTrigger>;\n\nexport const StackTraceHeader = memo(({ className, children, ...props }: StackTraceHeaderProps) => {\n const { isOpen, setIsOpen } = useStackTrace();\n\n return (\n <Collapsible onOpenChange={setIsOpen} open={isOpen}>\n <CollapsibleTrigger asChild {...props}>\n <div\n className={cn(\n \"flex w-full cursor-pointer items-center gap-3 p-3 text-start transition-colors hover:bg-muted/50\",\n className,\n )}\n >\n {children}\n </div>\n </CollapsibleTrigger>\n </Collapsible>\n );\n});\n\nexport type StackTraceErrorProps = ComponentProps<\"div\">;\n\nexport const StackTraceError = memo(({ className, children, ...props }: StackTraceErrorProps) => (\n <div className={cn(\"flex flex-1 items-center gap-2 overflow-hidden\", className)} {...props}>\n <AlertTriangleIcon className=\"size-4 shrink-0 text-destructive\" />\n {children}\n </div>\n));\n\nexport type StackTraceErrorTypeProps = ComponentProps<\"span\">;\n\nexport const StackTraceErrorType = memo(\n ({ className, children, ...props }: StackTraceErrorTypeProps) => {\n const { trace } = useStackTrace();\n\n return (\n // #124: the error type NAME is running text (e.g. \"TypeError\"), not a\n // mark — ink rung, unlike the AlertTriangleIcon mark above.\n <span className={cn(\"shrink-0 font-semibold text-destructive-text\", className)} {...props}>\n {children ?? trace.errorType}\n </span>\n );\n },\n);\n\nexport type StackTraceErrorMessageProps = ComponentProps<\"span\">;\n\nexport const StackTraceErrorMessage = memo(\n ({ className, children, ...props }: StackTraceErrorMessageProps) => {\n const { trace } = useStackTrace();\n\n return (\n <span className={cn(\"truncate text-foreground\", className)} {...props}>\n {children ?? trace.errorMessage}\n </span>\n );\n },\n);\n\nexport type StackTraceActionsProps = ComponentProps<\"div\">;\n\nconst handleActionsClick = (e: React.MouseEvent) => e.stopPropagation();\nconst handleActionsKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n }\n};\n\nexport const StackTraceActions = memo(\n ({ className, children, ...props }: StackTraceActionsProps) => (\n <div\n className={cn(\"flex shrink-0 items-center gap-1\", className)}\n onClick={handleActionsClick}\n onKeyDown={handleActionsKeyDown}\n role=\"group\"\n {...props}\n >\n {children}\n </div>\n ),\n);\n\nexport type StackTraceCopyButtonProps = ComponentProps<typeof Button> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport const StackTraceCopyButton = memo(\n ({\n onCopy,\n onError,\n timeout,\n className,\n children,\n \"aria-label\": ariaLabel,\n ...props\n }: StackTraceCopyButtonProps) => {\n const { t } = useLocale();\n const { raw } = useStackTrace();\n // Shared implementation (`@elabs-ai/components-ui`) instead of a private\n // copy of the same copy-to-clipboard state machine (issue-workflow.md\n // dedupe finding) — see `CodeBlockCopyButton` for the reference usage.\n const { copied: isCopied, copy } = useCopyToClipboard(\n timeout === undefined ? undefined : { resetAfterMs: timeout },\n );\n\n const copyToClipboard = useCallback(async () => {\n const ok = await copy(raw);\n if (ok) {\n onCopy?.();\n } else {\n onError?.(new Error(\"Clipboard API not available\"));\n }\n }, [copy, raw, onCopy, onError]);\n\n const Icon = isCopied ? CheckIcon : CopyIcon;\n\n return (\n <Button\n aria-label={ariaLabel ?? t(\"copy\")}\n className={cn(\"size-7\", className)}\n onClick={copyToClipboard}\n size=\"icon\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <Icon size={14} />}\n </Button>\n );\n },\n);\n\nexport type StackTraceExpandButtonProps = ComponentProps<\"div\">;\n\nexport const StackTraceExpandButton = memo(\n ({ className, ...props }: StackTraceExpandButtonProps) => {\n const { isOpen } = useStackTrace();\n\n return (\n <div className={cn(\"flex size-7 items-center justify-center\", className)} {...props}>\n <ChevronDownIcon\n className={cn(\n \"size-4 text-muted-foreground transition-transform\",\n isOpen ? \"rotate-180\" : \"rotate-0\",\n )}\n />\n </div>\n );\n },\n);\n\nexport type StackTraceContentProps = ComponentProps<typeof CollapsibleContent> & {\n maxHeight?: number;\n};\n\nexport const StackTraceContent = memo(\n ({ className, maxHeight = 400, children, ...props }: StackTraceContentProps) => {\n const { isOpen } = useStackTrace();\n\n return (\n <Collapsible open={isOpen}>\n <CollapsibleContent\n className={cn(\n \"overflow-auto border-t bg-muted/30\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className,\n )}\n style={{ maxHeight }}\n {...props}\n >\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n },\n);\n\nexport type StackTraceFramesProps = ComponentProps<\"div\"> & {\n showInternalFrames?: boolean;\n};\n\ninterface FilePathButtonProps {\n frame: StackFrame;\n onFilePathClick?: (filePath: string, lineNumber?: number, columnNumber?: number) => void;\n}\n\nconst FilePathButton = memo(({ frame, onFilePathClick }: FilePathButtonProps) => {\n const handleClick = useCallback(() => {\n if (frame.filePath) {\n onFilePathClick?.(\n frame.filePath,\n frame.lineNumber ?? undefined,\n frame.columnNumber ?? undefined,\n );\n }\n }, [frame, onFilePathClick]);\n\n return (\n <button\n className={cn(\n // #399 — a frame link is body text; the hover ink takes the `-text` rung.\n \"underline decoration-dotted hover:text-primary-text\",\n onFilePathClick && \"cursor-pointer\",\n )}\n disabled={!onFilePathClick}\n onClick={handleClick}\n type=\"button\"\n >\n {frame.filePath}\n {frame.lineNumber !== null && `:${frame.lineNumber}`}\n {frame.columnNumber !== null && `:${frame.columnNumber}`}\n </button>\n );\n});\n\nFilePathButton.displayName = \"FilePathButton\";\n\nexport const StackTraceFrames = memo(\n ({ className, showInternalFrames = true, ...props }: StackTraceFramesProps) => {\n const { trace, onFilePathClick } = useStackTrace();\n const { t } = useLocale();\n\n const framesToShow = showInternalFrames\n ? trace.frames\n : trace.frames.filter((f) => !f.isInternal);\n\n return (\n <div className={cn(\"space-y-1 p-3\", className)} {...props}>\n {framesToShow.map((frame) => (\n <div\n className={cn(\n \"text-meta\",\n frame.isInternal ? \"text-muted-foreground/50\" : \"text-foreground/90\",\n )}\n key={frame.raw}\n >\n <span className=\"text-muted-foreground\">at </span>\n {frame.functionName && (\n <span className={frame.isInternal ? \"\" : \"text-foreground\"}>\n {frame.functionName}{\" \"}\n </span>\n )}\n {frame.filePath && (\n <>\n <span className=\"text-muted-foreground\">(</span>\n <FilePathButton frame={frame} onFilePathClick={onFilePathClick} />\n <span className=\"text-muted-foreground\">)</span>\n </>\n )}\n {!(frame.filePath || frame.functionName) && (\n <span>{frame.raw.replace(AT_PREFIX_REGEX, \"\")}</span>\n )}\n </div>\n ))}\n {framesToShow.length === 0 && (\n <div className=\"text-muted-foreground text-meta\">{t(\"ai.stackTrace.empty\")}</div>\n )}\n </div>\n );\n },\n);\n\nStackTrace.displayName = \"StackTrace\";\nStackTraceHeader.displayName = \"StackTraceHeader\";\nStackTraceError.displayName = \"StackTraceError\";\nStackTraceErrorType.displayName = \"StackTraceErrorType\";\nStackTraceErrorMessage.displayName = \"StackTraceErrorMessage\";\nStackTraceActions.displayName = \"StackTraceActions\";\nStackTraceCopyButton.displayName = \"StackTraceCopyButton\";\nStackTraceExpandButton.displayName = \"StackTraceExpandButton\";\nStackTraceContent.displayName = \"StackTraceContent\";\nStackTraceFrames.displayName = \"StackTraceFrames\";\n"],"mappings":"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","names":[]}