@adea-ai/ui 0.140.0 → 0.142.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 (455) hide show
  1. package/dist/components/composites/appearance-editor/appearance-editor.js +2 -2
  2. package/dist/components/composites/appearance-editor/appearance-editor.js.map +1 -1
  3. package/dist/components/composites/catalog-browser/catalog-browser-group.js +1 -1
  4. package/dist/components/composites/chain-of-thought/chain-of-thought.d.ts +56 -0
  5. package/dist/components/composites/chain-of-thought/chain-of-thought.d.ts.map +1 -0
  6. package/dist/components/composites/chain-of-thought/chain-of-thought.js +117 -0
  7. package/dist/components/composites/chain-of-thought/chain-of-thought.js.map +1 -0
  8. package/dist/components/composites/chain-of-thought/index.d.ts +2 -0
  9. package/dist/components/composites/chain-of-thought/index.d.ts.map +1 -0
  10. package/dist/components/composites/chain-of-thought/index.js +2 -0
  11. package/dist/components/composites/chat/chat.d.ts +67 -0
  12. package/dist/components/composites/chat/chat.d.ts.map +1 -0
  13. package/dist/components/composites/chat/chat.js +179 -0
  14. package/dist/components/composites/chat/chat.js.map +1 -0
  15. package/dist/components/composites/chat/index.d.ts +2 -0
  16. package/dist/components/composites/chat/index.d.ts.map +1 -0
  17. package/dist/components/composites/chat/index.js +2 -0
  18. package/dist/components/composites/checkpoint/checkpoint-model.d.ts +34 -0
  19. package/dist/components/composites/checkpoint/checkpoint-model.d.ts.map +1 -0
  20. package/dist/components/composites/checkpoint/checkpoint-model.js +48 -0
  21. package/dist/components/composites/checkpoint/checkpoint-model.js.map +1 -0
  22. package/dist/components/composites/checkpoint/checkpoint.d.ts +48 -0
  23. package/dist/components/composites/checkpoint/checkpoint.d.ts.map +1 -0
  24. package/dist/components/composites/checkpoint/checkpoint.js +160 -0
  25. package/dist/components/composites/checkpoint/checkpoint.js.map +1 -0
  26. package/dist/components/composites/checkpoint/index.d.ts +3 -0
  27. package/dist/components/composites/checkpoint/index.d.ts.map +1 -0
  28. package/dist/components/composites/checkpoint/index.js +3 -0
  29. package/dist/components/composites/confirmation/confirmation-model.d.ts +45 -0
  30. package/dist/components/composites/confirmation/confirmation-model.d.ts.map +1 -0
  31. package/dist/components/composites/confirmation/confirmation-model.js +51 -0
  32. package/dist/components/composites/confirmation/confirmation-model.js.map +1 -0
  33. package/dist/components/composites/confirmation/confirmation.d.ts +72 -0
  34. package/dist/components/composites/confirmation/confirmation.d.ts.map +1 -0
  35. package/dist/components/composites/confirmation/confirmation.js +300 -0
  36. package/dist/components/composites/confirmation/confirmation.js.map +1 -0
  37. package/dist/components/composites/confirmation/index.d.ts +3 -0
  38. package/dist/components/composites/confirmation/index.d.ts.map +1 -0
  39. package/dist/components/composites/confirmation/index.js +3 -0
  40. package/dist/components/composites/context/context-model.d.ts +69 -0
  41. package/dist/components/composites/context/context-model.d.ts.map +1 -0
  42. package/dist/components/composites/context/context-model.js +122 -0
  43. package/dist/components/composites/context/context-model.js.map +1 -0
  44. package/dist/components/composites/context/context.d.ts +38 -0
  45. package/dist/components/composites/context/context.d.ts.map +1 -0
  46. package/dist/components/composites/context/context.js +234 -0
  47. package/dist/components/composites/context/context.js.map +1 -0
  48. package/dist/components/composites/context/index.d.ts +3 -0
  49. package/dist/components/composites/context/index.d.ts.map +1 -0
  50. package/dist/components/composites/context/index.js +3 -0
  51. package/dist/components/composites/file-tree/build-file-tree.d.ts +138 -0
  52. package/dist/components/composites/file-tree/build-file-tree.d.ts.map +1 -0
  53. package/dist/components/composites/file-tree/build-file-tree.js +325 -0
  54. package/dist/components/composites/file-tree/build-file-tree.js.map +1 -0
  55. package/dist/components/composites/file-tree/file-tree.d.ts +74 -0
  56. package/dist/components/composites/file-tree/file-tree.d.ts.map +1 -0
  57. package/dist/components/composites/file-tree/file-tree.js +389 -0
  58. package/dist/components/composites/file-tree/file-tree.js.map +1 -0
  59. package/dist/components/composites/file-tree/index.d.ts +3 -0
  60. package/dist/components/composites/file-tree/index.d.ts.map +1 -0
  61. package/dist/components/composites/file-tree/index.js +3 -0
  62. package/dist/components/composites/inline-citation/citation.d.ts +37 -0
  63. package/dist/components/composites/inline-citation/citation.d.ts.map +1 -0
  64. package/dist/components/composites/inline-citation/citation.js +52 -0
  65. package/dist/components/composites/inline-citation/citation.js.map +1 -0
  66. package/dist/components/composites/inline-citation/index.d.ts +3 -0
  67. package/dist/components/composites/inline-citation/index.d.ts.map +1 -0
  68. package/dist/components/composites/inline-citation/index.js +3 -0
  69. package/dist/components/composites/inline-citation/inline-citation.d.ts +64 -0
  70. package/dist/components/composites/inline-citation/inline-citation.d.ts.map +1 -0
  71. package/dist/components/composites/inline-citation/inline-citation.js +272 -0
  72. package/dist/components/composites/inline-citation/inline-citation.js.map +1 -0
  73. package/dist/components/composites/message-scroller/index.d.ts +3 -0
  74. package/dist/components/composites/message-scroller/index.d.ts.map +1 -0
  75. package/dist/components/composites/message-scroller/index.js +3 -0
  76. package/dist/components/composites/message-scroller/message-scroller.d.ts +55 -0
  77. package/dist/components/composites/message-scroller/message-scroller.d.ts.map +1 -0
  78. package/dist/components/composites/message-scroller/message-scroller.js +201 -0
  79. package/dist/components/composites/message-scroller/message-scroller.js.map +1 -0
  80. package/dist/components/composites/message-scroller/scroll-anchor.d.ts +66 -0
  81. package/dist/components/composites/message-scroller/scroll-anchor.d.ts.map +1 -0
  82. package/dist/components/composites/message-scroller/scroll-anchor.js +122 -0
  83. package/dist/components/composites/message-scroller/scroll-anchor.js.map +1 -0
  84. package/dist/components/composites/model-selector/index.d.ts +3 -0
  85. package/dist/components/composites/model-selector/index.d.ts.map +1 -0
  86. package/dist/components/composites/model-selector/index.js +3 -0
  87. package/dist/components/composites/model-selector/model-selector.d.ts +55 -0
  88. package/dist/components/composites/model-selector/model-selector.d.ts.map +1 -0
  89. package/dist/components/composites/model-selector/model-selector.js +490 -0
  90. package/dist/components/composites/model-selector/model-selector.js.map +1 -0
  91. package/dist/components/composites/model-selector/models.d.ts +51 -0
  92. package/dist/components/composites/model-selector/models.d.ts.map +1 -0
  93. package/dist/components/composites/model-selector/models.js +71 -0
  94. package/dist/components/composites/model-selector/models.js.map +1 -0
  95. package/dist/components/composites/plan/index.d.ts +2 -0
  96. package/dist/components/composites/plan/index.d.ts.map +1 -0
  97. package/dist/components/composites/plan/index.js +2 -0
  98. package/dist/components/composites/plan/plan.d.ts +61 -0
  99. package/dist/components/composites/plan/plan.d.ts.map +1 -0
  100. package/dist/components/composites/plan/plan.js +130 -0
  101. package/dist/components/composites/plan/plan.js.map +1 -0
  102. package/dist/components/composites/queue/index.d.ts +2 -0
  103. package/dist/components/composites/queue/index.d.ts.map +1 -0
  104. package/dist/components/composites/queue/index.js +2 -0
  105. package/dist/components/composites/queue/queue.d.ts +77 -0
  106. package/dist/components/composites/queue/queue.d.ts.map +1 -0
  107. package/dist/components/composites/queue/queue.js +271 -0
  108. package/dist/components/composites/queue/queue.js.map +1 -0
  109. package/dist/components/composites/reasoning/index.d.ts +2 -0
  110. package/dist/components/composites/reasoning/index.d.ts.map +1 -0
  111. package/dist/components/composites/reasoning/index.js +2 -0
  112. package/dist/components/composites/reasoning/reasoning.d.ts +62 -0
  113. package/dist/components/composites/reasoning/reasoning.d.ts.map +1 -0
  114. package/dist/components/composites/reasoning/reasoning.js +156 -0
  115. package/dist/components/composites/reasoning/reasoning.js.map +1 -0
  116. package/dist/components/composites/sources/index.d.ts +3 -0
  117. package/dist/components/composites/sources/index.d.ts.map +1 -0
  118. package/dist/components/composites/sources/index.js +3 -0
  119. package/dist/components/composites/sources/source.d.ts +46 -0
  120. package/dist/components/composites/sources/source.d.ts.map +1 -0
  121. package/dist/components/composites/sources/source.js +74 -0
  122. package/dist/components/composites/sources/source.js.map +1 -0
  123. package/dist/components/composites/sources/sources.d.ts +45 -0
  124. package/dist/components/composites/sources/sources.d.ts.map +1 -0
  125. package/dist/components/composites/sources/sources.js +175 -0
  126. package/dist/components/composites/sources/sources.js.map +1 -0
  127. package/dist/components/composites/stack-trace/index.d.ts +3 -0
  128. package/dist/components/composites/stack-trace/index.d.ts.map +1 -0
  129. package/dist/components/composites/stack-trace/index.js +3 -0
  130. package/dist/components/composites/stack-trace/parse-stack-trace.d.ts +118 -0
  131. package/dist/components/composites/stack-trace/parse-stack-trace.d.ts.map +1 -0
  132. package/dist/components/composites/stack-trace/parse-stack-trace.js +376 -0
  133. package/dist/components/composites/stack-trace/parse-stack-trace.js.map +1 -0
  134. package/dist/components/composites/stack-trace/stack-trace.d.ts +63 -0
  135. package/dist/components/composites/stack-trace/stack-trace.d.ts.map +1 -0
  136. package/dist/components/composites/stack-trace/stack-trace.js +491 -0
  137. package/dist/components/composites/stack-trace/stack-trace.js.map +1 -0
  138. package/dist/components/composites/subagent/index.d.ts +2 -0
  139. package/dist/components/composites/subagent/index.d.ts.map +1 -0
  140. package/dist/components/composites/subagent/index.js +2 -0
  141. package/dist/components/composites/subagent/subagent.d.ts +55 -0
  142. package/dist/components/composites/subagent/subagent.d.ts.map +1 -0
  143. package/dist/components/composites/subagent/subagent.js +138 -0
  144. package/dist/components/composites/subagent/subagent.js.map +1 -0
  145. package/dist/components/composites/suggestion/index.d.ts +2 -0
  146. package/dist/components/composites/suggestion/index.d.ts.map +1 -0
  147. package/dist/components/composites/suggestion/index.js +2 -0
  148. package/dist/components/composites/suggestion/suggestion.d.ts +37 -0
  149. package/dist/components/composites/suggestion/suggestion.d.ts.map +1 -0
  150. package/dist/components/composites/suggestion/suggestion.js +100 -0
  151. package/dist/components/composites/suggestion/suggestion.js.map +1 -0
  152. package/dist/components/composites/task/index.d.ts +2 -0
  153. package/dist/components/composites/task/index.d.ts.map +1 -0
  154. package/dist/components/composites/task/index.js +2 -0
  155. package/dist/components/composites/task/task.d.ts +96 -0
  156. package/dist/components/composites/task/task.d.ts.map +1 -0
  157. package/dist/components/composites/task/task.js +311 -0
  158. package/dist/components/composites/task/task.js.map +1 -0
  159. package/dist/components/composites/terminal/ansi.d.ts +101 -0
  160. package/dist/components/composites/terminal/ansi.d.ts.map +1 -0
  161. package/dist/components/composites/terminal/ansi.js +544 -0
  162. package/dist/components/composites/terminal/ansi.js.map +1 -0
  163. package/dist/components/composites/terminal/index.d.ts +4 -0
  164. package/dist/components/composites/terminal/index.d.ts.map +1 -0
  165. package/dist/components/composites/terminal/index.js +4 -0
  166. package/dist/components/composites/terminal/terminal-model.d.ts +63 -0
  167. package/dist/components/composites/terminal/terminal-model.d.ts.map +1 -0
  168. package/dist/components/composites/terminal/terminal-model.js +69 -0
  169. package/dist/components/composites/terminal/terminal-model.js.map +1 -0
  170. package/dist/components/composites/terminal/terminal.d.ts +88 -0
  171. package/dist/components/composites/terminal/terminal.d.ts.map +1 -0
  172. package/dist/components/composites/terminal/terminal.js +500 -0
  173. package/dist/components/composites/terminal/terminal.js.map +1 -0
  174. package/dist/components/composites/test-results/index.d.ts +3 -0
  175. package/dist/components/composites/test-results/index.d.ts.map +1 -0
  176. package/dist/components/composites/test-results/index.js +3 -0
  177. package/dist/components/composites/test-results/test-results-model.d.ts +154 -0
  178. package/dist/components/composites/test-results/test-results-model.d.ts.map +1 -0
  179. package/dist/components/composites/test-results/test-results-model.js +252 -0
  180. package/dist/components/composites/test-results/test-results-model.js.map +1 -0
  181. package/dist/components/composites/test-results/test-results.d.ts +60 -0
  182. package/dist/components/composites/test-results/test-results.d.ts.map +1 -0
  183. package/dist/components/composites/test-results/test-results.js +631 -0
  184. package/dist/components/composites/test-results/test-results.js.map +1 -0
  185. package/dist/components/composites/tool/format-tool-value.d.ts +37 -0
  186. package/dist/components/composites/tool/format-tool-value.d.ts.map +1 -0
  187. package/dist/components/composites/tool/format-tool-value.js +135 -0
  188. package/dist/components/composites/tool/format-tool-value.js.map +1 -0
  189. package/dist/components/composites/tool/index.d.ts +3 -0
  190. package/dist/components/composites/tool/index.d.ts.map +1 -0
  191. package/dist/components/composites/tool/index.js +3 -0
  192. package/dist/components/composites/tool/tool.d.ts +69 -0
  193. package/dist/components/composites/tool/tool.d.ts.map +1 -0
  194. package/dist/components/composites/tool/tool.js +214 -0
  195. package/dist/components/composites/tool/tool.js.map +1 -0
  196. package/dist/components/composites/update-dialog/update-dialog.js +1 -1
  197. package/dist/components/conversation/conversation-surface.d.ts +7 -0
  198. package/dist/components/conversation/conversation-surface.d.ts.map +1 -1
  199. package/dist/components/conversation/conversation-surface.js +2 -0
  200. package/dist/components/conversation/conversation-surface.js.map +1 -1
  201. package/dist/components/conversation/scroll-follow-core.d.ts +24 -0
  202. package/dist/components/conversation/scroll-follow-core.d.ts.map +1 -1
  203. package/dist/components/conversation/scroll-follow-core.js +23 -1
  204. package/dist/components/conversation/scroll-follow-core.js.map +1 -1
  205. package/dist/components/conversation/scroll-follow.d.ts +3 -0
  206. package/dist/components/conversation/scroll-follow.d.ts.map +1 -1
  207. package/dist/components/conversation/scroll-follow.js +80 -1
  208. package/dist/components/conversation/scroll-follow.js.map +1 -1
  209. package/dist/components/ui/attachment/attachment.d.ts +58 -0
  210. package/dist/components/ui/attachment/attachment.d.ts.map +1 -0
  211. package/dist/components/ui/attachment/attachment.js +279 -0
  212. package/dist/components/ui/attachment/attachment.js.map +1 -0
  213. package/dist/components/ui/attachment/index.d.ts +2 -0
  214. package/dist/components/ui/attachment/index.d.ts.map +1 -0
  215. package/dist/components/ui/attachment/index.js +2 -0
  216. package/dist/components/ui/badge/badge.d.ts +1 -1
  217. package/dist/components/ui/bubble/bubble.d.ts +33 -0
  218. package/dist/components/ui/bubble/bubble.d.ts.map +1 -0
  219. package/dist/components/ui/bubble/bubble.js +95 -0
  220. package/dist/components/ui/bubble/bubble.js.map +1 -0
  221. package/dist/components/ui/bubble/index.d.ts +2 -0
  222. package/dist/components/ui/bubble/index.d.ts.map +1 -0
  223. package/dist/components/ui/bubble/index.js +2 -0
  224. package/dist/components/ui/button/button.d.ts +1 -1
  225. package/dist/components/ui/code-block/code-block.d.ts +56 -3
  226. package/dist/components/ui/code-block/code-block.d.ts.map +1 -1
  227. package/dist/components/ui/code-block/code-block.js +231 -50
  228. package/dist/components/ui/code-block/code-block.js.map +1 -1
  229. package/dist/components/ui/code-block/index.d.ts +1 -1
  230. package/dist/components/ui/code-block/index.d.ts.map +1 -1
  231. package/dist/components/ui/code-block/index.js +2 -2
  232. package/dist/components/ui/field/number-field.d.ts +21 -4
  233. package/dist/components/ui/field/number-field.d.ts.map +1 -1
  234. package/dist/components/ui/field/number-field.js +22 -11
  235. package/dist/components/ui/field/number-field.js.map +1 -1
  236. package/dist/components/ui/marker/index.d.ts +2 -0
  237. package/dist/components/ui/marker/index.d.ts.map +1 -0
  238. package/dist/components/ui/marker/index.js +2 -0
  239. package/dist/components/ui/marker/marker.d.ts +35 -0
  240. package/dist/components/ui/marker/marker.d.ts.map +1 -0
  241. package/dist/components/ui/marker/marker.js +123 -0
  242. package/dist/components/ui/marker/marker.js.map +1 -0
  243. package/dist/components/ui/message/cite-ranges.d.ts +42 -0
  244. package/dist/components/ui/message/cite-ranges.d.ts.map +1 -0
  245. package/dist/components/ui/message/cite-ranges.js +105 -0
  246. package/dist/components/ui/message/cite-ranges.js.map +1 -0
  247. package/dist/components/ui/message/index.d.ts +4 -0
  248. package/dist/components/ui/message/index.d.ts.map +1 -0
  249. package/dist/components/ui/message/index.js +4 -0
  250. package/dist/components/ui/message/message.d.ts +95 -0
  251. package/dist/components/ui/message/message.d.ts.map +1 -0
  252. package/dist/components/ui/message/message.js +443 -0
  253. package/dist/components/ui/message/message.js.map +1 -0
  254. package/dist/components/ui/message/parse-message-text.d.ts +93 -0
  255. package/dist/components/ui/message/parse-message-text.d.ts.map +1 -0
  256. package/dist/components/ui/message/parse-message-text.js +365 -0
  257. package/dist/components/ui/message/parse-message-text.js.map +1 -0
  258. package/dist/components/ui/questionnaire/index.d.ts +2 -0
  259. package/dist/components/ui/questionnaire/index.d.ts.map +1 -0
  260. package/dist/components/ui/questionnaire/index.js +2 -0
  261. package/dist/components/ui/questionnaire/questionnaire.d.ts +83 -0
  262. package/dist/components/ui/questionnaire/questionnaire.d.ts.map +1 -0
  263. package/dist/components/ui/questionnaire/questionnaire.js +470 -0
  264. package/dist/components/ui/questionnaire/questionnaire.js.map +1 -0
  265. package/dist/components/ui/status-chip/status-chip.d.ts +1 -1
  266. package/dist/components/ui/switch/switch.js +11 -11
  267. package/dist/components/ui/switch/switch.js.map +1 -1
  268. package/dist/components/ui/trace/index.d.ts +2 -0
  269. package/dist/components/ui/trace/index.d.ts.map +1 -0
  270. package/dist/components/ui/trace/index.js +2 -0
  271. package/dist/components/ui/trace/trace.d.ts +72 -0
  272. package/dist/components/ui/trace/trace.d.ts.map +1 -0
  273. package/dist/components/ui/trace/trace.js +340 -0
  274. package/dist/components/ui/trace/trace.js.map +1 -0
  275. package/dist/index.d.ts +26 -0
  276. package/dist/index.d.ts.map +1 -1
  277. package/dist/index.js +46 -5
  278. package/dist/r/attachment.json +25 -0
  279. package/dist/r/bubble.json +22 -0
  280. package/dist/r/chain-of-thought.json +26 -0
  281. package/dist/r/chat.json +24 -0
  282. package/dist/r/checkpoint.json +35 -0
  283. package/dist/r/confirmation.json +34 -0
  284. package/dist/r/context.json +33 -0
  285. package/dist/r/file-tree.json +32 -0
  286. package/dist/r/inline-citation.json +35 -0
  287. package/dist/r/marker.json +22 -0
  288. package/dist/r/message-scroller.json +31 -0
  289. package/dist/r/message.json +33 -0
  290. package/dist/r/model-selector.json +34 -0
  291. package/dist/r/plan.json +26 -0
  292. package/dist/r/questionnaire.json +28 -0
  293. package/dist/r/queue.json +26 -0
  294. package/dist/r/reasoning.json +26 -0
  295. package/dist/r/registry.json +811 -52
  296. package/dist/r/sources.json +32 -0
  297. package/dist/r/src/components/composites/chain-of-thought/chain-of-thought.tsx +141 -0
  298. package/dist/r/src/components/composites/chain-of-thought/index.ts +11 -0
  299. package/dist/r/src/components/composites/chat/chat.tsx +190 -0
  300. package/dist/r/src/components/composites/chat/index.ts +11 -0
  301. package/dist/r/src/components/composites/checkpoint/checkpoint-model.ts +71 -0
  302. package/dist/r/src/components/composites/checkpoint/checkpoint.tsx +214 -0
  303. package/dist/r/src/components/composites/checkpoint/index.ts +8 -0
  304. package/dist/r/src/components/composites/confirmation/confirmation-model.ts +83 -0
  305. package/dist/r/src/components/composites/confirmation/confirmation.tsx +311 -0
  306. package/dist/r/src/components/composites/confirmation/index.ts +9 -0
  307. package/dist/r/src/components/composites/context/context-model.ts +168 -0
  308. package/dist/r/src/components/composites/context/context.tsx +187 -0
  309. package/dist/r/src/components/composites/context/index.ts +18 -0
  310. package/dist/r/src/components/composites/file-tree/build-file-tree.ts +456 -0
  311. package/dist/r/src/components/composites/file-tree/file-tree.tsx +405 -0
  312. package/dist/r/src/components/composites/file-tree/index.ts +25 -0
  313. package/dist/r/src/components/composites/inline-citation/citation.ts +78 -0
  314. package/dist/r/src/components/composites/inline-citation/index.ts +9 -0
  315. package/dist/r/src/components/composites/inline-citation/inline-citation.tsx +285 -0
  316. package/dist/r/src/components/composites/message-scroller/index.ts +2 -0
  317. package/dist/r/src/components/composites/message-scroller/message-scroller.tsx +301 -0
  318. package/dist/r/src/components/composites/message-scroller/scroll-anchor.ts +170 -0
  319. package/dist/r/src/components/composites/model-selector/index.ts +14 -0
  320. package/dist/r/src/components/composites/model-selector/model-selector.tsx +420 -0
  321. package/dist/r/src/components/composites/model-selector/models.ts +103 -0
  322. package/dist/r/src/components/composites/plan/index.ts +1 -0
  323. package/dist/r/src/components/composites/plan/plan.tsx +155 -0
  324. package/dist/r/src/components/composites/queue/index.ts +10 -0
  325. package/dist/r/src/components/composites/queue/queue.tsx +264 -0
  326. package/dist/r/src/components/composites/reasoning/index.ts +1 -0
  327. package/dist/r/src/components/composites/reasoning/reasoning.tsx +176 -0
  328. package/dist/r/src/components/composites/sources/index.ts +11 -0
  329. package/dist/r/src/components/composites/sources/source.ts +116 -0
  330. package/dist/r/src/components/composites/sources/sources.tsx +163 -0
  331. package/dist/r/src/components/composites/stack-trace/index.ts +19 -0
  332. package/dist/r/src/components/composites/stack-trace/parse-stack-trace.ts +507 -0
  333. package/dist/r/src/components/composites/stack-trace/stack-trace.tsx +395 -0
  334. package/dist/r/src/components/composites/subagent/index.ts +1 -0
  335. package/dist/r/src/components/composites/subagent/subagent.tsx +159 -0
  336. package/dist/r/src/components/composites/suggestion/index.ts +1 -0
  337. package/dist/r/src/components/composites/suggestion/suggestion.tsx +140 -0
  338. package/dist/r/src/components/composites/task/index.ts +14 -0
  339. package/dist/r/src/components/composites/task/task.tsx +317 -0
  340. package/dist/r/src/components/composites/terminal/ansi.ts +674 -0
  341. package/dist/r/src/components/composites/terminal/index.ts +20 -0
  342. package/dist/r/src/components/composites/terminal/terminal-model.ts +111 -0
  343. package/dist/r/src/components/composites/terminal/terminal.tsx +574 -0
  344. package/dist/r/src/components/composites/test-results/index.ts +20 -0
  345. package/dist/r/src/components/composites/test-results/test-results-model.ts +368 -0
  346. package/dist/r/src/components/composites/test-results/test-results.tsx +586 -0
  347. package/dist/r/src/components/composites/tool/format-tool-value.ts +221 -0
  348. package/dist/r/src/components/composites/tool/index.ts +2 -0
  349. package/dist/r/src/components/composites/tool/tool.tsx +228 -0
  350. package/dist/r/src/components/conversation/conversation-surface.tsx +9 -0
  351. package/dist/r/src/components/conversation/scroll-follow-core.ts +31 -0
  352. package/dist/r/src/components/conversation/scroll-follow.ts +92 -0
  353. package/dist/r/src/components/ui/attachment/attachment.tsx +282 -0
  354. package/dist/r/src/components/ui/attachment/index.ts +10 -0
  355. package/dist/r/src/components/ui/bubble/bubble.tsx +86 -0
  356. package/dist/r/src/components/ui/bubble/index.ts +1 -0
  357. package/dist/r/src/components/ui/code-block/code-block.tsx +256 -26
  358. package/dist/r/src/components/ui/code-block/index.ts +9 -1
  359. package/dist/r/src/components/ui/field/number-field.tsx +51 -14
  360. package/dist/r/src/components/ui/marker/index.ts +1 -0
  361. package/dist/r/src/components/ui/marker/marker.tsx +90 -0
  362. package/dist/r/src/components/ui/message/cite-ranges.ts +144 -0
  363. package/dist/r/src/components/ui/message/index.ts +23 -0
  364. package/dist/r/src/components/ui/message/message.tsx +434 -0
  365. package/dist/r/src/components/ui/message/parse-message-text.ts +450 -0
  366. package/dist/r/src/components/ui/questionnaire/index.ts +10 -0
  367. package/dist/r/src/components/ui/questionnaire/questionnaire.tsx +446 -0
  368. package/dist/r/src/components/ui/trace/index.ts +9 -0
  369. package/dist/r/src/components/ui/trace/trace.tsx +334 -0
  370. package/dist/r/src/styles/base.css +34 -0
  371. package/dist/r/stack-trace.json +32 -0
  372. package/dist/r/subagent.json +27 -0
  373. package/dist/r/suggestion.json +24 -0
  374. package/dist/r/task.json +28 -0
  375. package/dist/r/terminal.json +35 -0
  376. package/dist/r/test-results.json +33 -0
  377. package/dist/r/tool.json +31 -0
  378. package/dist/r/trace.json +25 -0
  379. package/package.json +6 -3
  380. package/registry.json +811 -52
  381. package/src/components/composites/chain-of-thought/chain-of-thought.tsx +141 -0
  382. package/src/components/composites/chain-of-thought/index.ts +11 -0
  383. package/src/components/composites/chat/chat.tsx +190 -0
  384. package/src/components/composites/chat/index.ts +11 -0
  385. package/src/components/composites/checkpoint/checkpoint-model.ts +71 -0
  386. package/src/components/composites/checkpoint/checkpoint.tsx +214 -0
  387. package/src/components/composites/checkpoint/index.ts +8 -0
  388. package/src/components/composites/confirmation/confirmation-model.ts +83 -0
  389. package/src/components/composites/confirmation/confirmation.tsx +311 -0
  390. package/src/components/composites/confirmation/index.ts +9 -0
  391. package/src/components/composites/context/context-model.ts +168 -0
  392. package/src/components/composites/context/context.tsx +187 -0
  393. package/src/components/composites/context/index.ts +18 -0
  394. package/src/components/composites/file-tree/build-file-tree.ts +456 -0
  395. package/src/components/composites/file-tree/file-tree.tsx +405 -0
  396. package/src/components/composites/file-tree/index.ts +25 -0
  397. package/src/components/composites/inline-citation/citation.ts +78 -0
  398. package/src/components/composites/inline-citation/index.ts +9 -0
  399. package/src/components/composites/inline-citation/inline-citation.tsx +285 -0
  400. package/src/components/composites/message-scroller/index.ts +2 -0
  401. package/src/components/composites/message-scroller/message-scroller.tsx +301 -0
  402. package/src/components/composites/message-scroller/scroll-anchor.ts +170 -0
  403. package/src/components/composites/model-selector/index.ts +14 -0
  404. package/src/components/composites/model-selector/model-selector.tsx +420 -0
  405. package/src/components/composites/model-selector/models.ts +103 -0
  406. package/src/components/composites/plan/index.ts +1 -0
  407. package/src/components/composites/plan/plan.tsx +155 -0
  408. package/src/components/composites/queue/index.ts +10 -0
  409. package/src/components/composites/queue/queue.tsx +264 -0
  410. package/src/components/composites/reasoning/index.ts +1 -0
  411. package/src/components/composites/reasoning/reasoning.tsx +176 -0
  412. package/src/components/composites/sources/index.ts +11 -0
  413. package/src/components/composites/sources/source.ts +116 -0
  414. package/src/components/composites/sources/sources.tsx +163 -0
  415. package/src/components/composites/stack-trace/index.ts +19 -0
  416. package/src/components/composites/stack-trace/parse-stack-trace.ts +507 -0
  417. package/src/components/composites/stack-trace/stack-trace.tsx +395 -0
  418. package/src/components/composites/subagent/index.ts +1 -0
  419. package/src/components/composites/subagent/subagent.tsx +159 -0
  420. package/src/components/composites/suggestion/index.ts +1 -0
  421. package/src/components/composites/suggestion/suggestion.tsx +140 -0
  422. package/src/components/composites/task/index.ts +14 -0
  423. package/src/components/composites/task/task.tsx +317 -0
  424. package/src/components/composites/terminal/ansi.ts +674 -0
  425. package/src/components/composites/terminal/index.ts +20 -0
  426. package/src/components/composites/terminal/terminal-model.ts +111 -0
  427. package/src/components/composites/terminal/terminal.tsx +574 -0
  428. package/src/components/composites/test-results/index.ts +20 -0
  429. package/src/components/composites/test-results/test-results-model.ts +368 -0
  430. package/src/components/composites/test-results/test-results.tsx +586 -0
  431. package/src/components/composites/tool/format-tool-value.ts +221 -0
  432. package/src/components/composites/tool/index.ts +2 -0
  433. package/src/components/composites/tool/tool.tsx +228 -0
  434. package/src/components/conversation/conversation-surface.tsx +9 -0
  435. package/src/components/conversation/scroll-follow-core.ts +31 -0
  436. package/src/components/conversation/scroll-follow.ts +92 -0
  437. package/src/components/ui/attachment/attachment.tsx +282 -0
  438. package/src/components/ui/attachment/index.ts +10 -0
  439. package/src/components/ui/bubble/bubble.tsx +86 -0
  440. package/src/components/ui/bubble/index.ts +1 -0
  441. package/src/components/ui/code-block/code-block.tsx +256 -26
  442. package/src/components/ui/code-block/index.ts +9 -1
  443. package/src/components/ui/field/number-field.tsx +51 -14
  444. package/src/components/ui/marker/index.ts +1 -0
  445. package/src/components/ui/marker/marker.tsx +90 -0
  446. package/src/components/ui/message/cite-ranges.ts +144 -0
  447. package/src/components/ui/message/index.ts +23 -0
  448. package/src/components/ui/message/message.tsx +434 -0
  449. package/src/components/ui/message/parse-message-text.ts +450 -0
  450. package/src/components/ui/questionnaire/index.ts +10 -0
  451. package/src/components/ui/questionnaire/questionnaire.tsx +446 -0
  452. package/src/components/ui/trace/index.ts +9 -0
  453. package/src/components/ui/trace/trace.tsx +334 -0
  454. package/src/index.ts +26 -0
  455. package/src/styles/base.css +34 -0
@@ -0,0 +1,446 @@
1
+ import { Check, CircleHelp, Clock, LoaderCircle } from 'lucide-solid'
2
+ import {
3
+ createEffect,
4
+ createMemo,
5
+ createSignal,
6
+ createUniqueId,
7
+ For,
8
+ on,
9
+ Show,
10
+ splitProps,
11
+ type ComponentProps,
12
+ type JSX,
13
+ } from 'solid-js'
14
+ import { cn } from '#lib/utils'
15
+ import { Button } from '../button'
16
+ import { Checkbox } from '../checkbox'
17
+ import { RadioGroup, RadioGroupItem } from '../radio-group'
18
+ import { Textarea } from '../textarea'
19
+
20
+ /**
21
+ * Questionnaire.
22
+ *
23
+ * The agent has stopped and is asking the person something before it continues.
24
+ * This is the one place in a transcript where the reader *must* act, so it is
25
+ * the one element allowed to look like a card — and it only ever asks what the
26
+ * runtime actually asked.
27
+ *
28
+ * ## What it models
29
+ *
30
+ * One question or several. Each has a prompt and, optionally, a closed set of
31
+ * options (single choice, or `multiple`) and/or a free-text answer. A question
32
+ * with only a prompt is a text box; the runtime contract that exists today is
33
+ * exactly that. Options are shown only when the producer supplied them, which is
34
+ * why they are data here and not something this component can invent.
35
+ *
36
+ * Several questions are asked one at a time, with "Question 2 of 3" and Back /
37
+ * Next, because a wall of unrelated fields is how a person answers none of them
38
+ * well. Moving between them returns focus to the question, so a screen-reader
39
+ * user hears what they are now answering.
40
+ *
41
+ * ## It does not decide whether you may answer
42
+ *
43
+ * `status` and `disabledReason` come from the host, which owns authority (is
44
+ * this session connected, is the generation current, does this client have the
45
+ * input). A disabled questionnaire says *why* in words next to the button.
46
+ * `answered` and `expired` render the exchange read-only, so a settled question
47
+ * stays in the record as what was asked and what was answered.
48
+ *
49
+ * Submit is `Cmd/Ctrl+Enter` from any text field; plain Enter stays a newline.
50
+ */
51
+ export type QuestionnaireOption = Readonly<{
52
+ id: string
53
+ label: string
54
+ description?: string
55
+ }>
56
+
57
+ export type QuestionnaireQuestion = Readonly<{
58
+ id: string
59
+ prompt: string
60
+ description?: string
61
+ options?: readonly QuestionnaireOption[]
62
+ /** Allow more than one option. */
63
+ multiple?: boolean
64
+ /** Offer a free-text answer (always present when there are no options). */
65
+ allowText?: boolean
66
+ textLabel?: string
67
+ textPlaceholder?: string
68
+ /** The question may be skipped. */
69
+ optional?: boolean
70
+ }>
71
+
72
+ export type QuestionnaireAnswer = Readonly<{ optionIds: readonly string[]; text: string }>
73
+ export type QuestionnaireAnswers = Readonly<Record<string, QuestionnaireAnswer>>
74
+ export type QuestionnaireStatus = 'open' | 'submitting' | 'answered' | 'expired'
75
+
76
+ const EMPTY: QuestionnaireAnswer = { optionIds: [], text: '' }
77
+
78
+ /**
79
+ * The answer a record holds for a question. Question ids are host strings, and
80
+ * the record is an ordinary object, so `constructor`, `toString` and `__proto__`
81
+ * are valid ids that a plain index would resolve to inherited values and a
82
+ * summary or a validity check would then read `optionIds` from.
83
+ */
84
+ export function answerFor(
85
+ record: QuestionnaireAnswers,
86
+ question: Pick<QuestionnaireQuestion, 'id'>
87
+ ): QuestionnaireAnswer | undefined {
88
+ return Object.hasOwn(record, question.id) ? record[question.id] : undefined
89
+ }
90
+
91
+ /** Whether a question has what it needs. */
92
+ export function isQuestionAnswered(
93
+ question: QuestionnaireQuestion,
94
+ answer: QuestionnaireAnswer | undefined
95
+ ): boolean {
96
+ if (question.optional) return true
97
+ return (answer?.optionIds.length ?? 0) > 0 || (answer?.text.trim().length ?? 0) > 0
98
+ }
99
+
100
+ export type QuestionnaireProps = Omit<ComponentProps<'section'>, 'onSubmit' | 'title'> & {
101
+ questions: readonly QuestionnaireQuestion[]
102
+ title?: string
103
+ description?: string
104
+ status?: QuestionnaireStatus
105
+ answers?: QuestionnaireAnswers
106
+ defaultAnswers?: QuestionnaireAnswers
107
+ onAnswersChange?: (answers: QuestionnaireAnswers) => void
108
+ onSubmit?: (answers: QuestionnaireAnswers) => void | Promise<void>
109
+ /** Why answering is not possible right now; shown beside the button. */
110
+ disabledReason?: string
111
+ /** A failed submit, in words. */
112
+ error?: string
113
+ submitLabel?: string
114
+ }
115
+
116
+ export function Questionnaire(props: QuestionnaireProps) {
117
+ const [local, rest] = splitProps(props, [
118
+ 'class',
119
+ 'questions',
120
+ 'title',
121
+ 'description',
122
+ 'status',
123
+ 'answers',
124
+ 'defaultAnswers',
125
+ 'onAnswersChange',
126
+ 'onSubmit',
127
+ 'disabledReason',
128
+ 'error',
129
+ 'submitLabel',
130
+ ])
131
+ const uid = createUniqueId()
132
+ const [internal, setInternal] = createSignal<QuestionnaireAnswers>(local.defaultAnswers ?? {})
133
+ const [step, setStep] = createSignal(0)
134
+ const answers = () => local.answers ?? internal()
135
+ const status = () => local.status ?? 'open'
136
+ const settled = () => status() === 'answered' || status() === 'expired'
137
+ const hostDisabledReason = () => (local.disabledReason?.trim() ? local.disabledReason : undefined)
138
+ const locked = () => status() !== 'open' || hostDisabledReason() !== undefined
139
+ const count = () => local.questions.length
140
+ const current = () => local.questions[Math.min(step(), count() - 1)]
141
+ const last = () => step() >= count() - 1
142
+ const reasonId = `${uid}-reason`
143
+ const submitReason = () =>
144
+ hostDisabledReason() ??
145
+ (status() === 'open' && last() && local.onSubmit === undefined
146
+ ? 'Sending answers is not available here.'
147
+ : undefined)
148
+ let questionHeading: HTMLHeadingElement | undefined
149
+
150
+ const answerOf = (question: QuestionnaireQuestion) => answerFor(answers(), question) ?? EMPTY
151
+ const change = (question: QuestionnaireQuestion, next: QuestionnaireAnswer) => {
152
+ const value = { ...answers(), [question.id]: next }
153
+ if (local.answers === undefined) setInternal(value)
154
+ local.onAnswersChange?.(value)
155
+ }
156
+
157
+ const canAdvance = () => {
158
+ const question = current()
159
+ return question !== undefined && isQuestionAnswered(question, answerFor(answers(), question))
160
+ }
161
+ const canSubmit = () =>
162
+ local.questions.every((question) =>
163
+ isQuestionAnswered(question, answerFor(answers(), question))
164
+ )
165
+
166
+ // A host that is slow to report `submitting` must not be handed the same answer
167
+ // twice by a second Ctrl+Enter or a double click.
168
+ let sending = false
169
+ const submit = async () => {
170
+ if (sending || locked() || !canSubmit() || local.onSubmit === undefined) return
171
+ sending = true
172
+ try {
173
+ await local.onSubmit?.(answers())
174
+ } finally {
175
+ sending = false
176
+ }
177
+ }
178
+
179
+ // The control that had focus is removed when the exchange settles into its
180
+ // read-only record. Give focus to the record instead of dropping it on <body>,
181
+ // but only if it was inside this questionnaire to begin with.
182
+ let root: HTMLElement | undefined
183
+ let focusWithin = false
184
+ let wasSettled = settled()
185
+ createEffect(
186
+ on(
187
+ settled,
188
+ (done) => {
189
+ // `settled` is not memoised, so this also runs for open -> submitting.
190
+ if (done === wasSettled) return
191
+ wasSettled = done
192
+ if (done && focusWithin && document.activeElement === document.body) {
193
+ root?.focus({ preventScroll: true })
194
+ }
195
+ focusWithin = false
196
+ },
197
+ { defer: true }
198
+ )
199
+ )
200
+
201
+ // Land on the new question when the step changes, not on the Next button that
202
+ // has just been replaced by one for a different question.
203
+ let firstStep = true
204
+ createEffect(() => {
205
+ void step()
206
+ if (firstStep) {
207
+ firstStep = false
208
+ return
209
+ }
210
+ questionHeading?.focus()
211
+ })
212
+
213
+ const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (event) => {
214
+ if (event.key === 'Enter' && (event.metaKey || event.ctrlKey) && last()) {
215
+ event.preventDefault()
216
+ void submit()
217
+ }
218
+ }
219
+
220
+ const summary = createMemo(() =>
221
+ local.questions.map((question) => {
222
+ const answer = answerFor(answers(), question) ?? EMPTY
223
+ const chosen = (question.options ?? [])
224
+ .filter((option) => answer.optionIds.includes(option.id))
225
+ .map((option) => option.label)
226
+ return {
227
+ question,
228
+ parts: [...chosen, ...(answer.text.trim() ? [answer.text.trim()] : [])],
229
+ }
230
+ })
231
+ )
232
+
233
+ return (
234
+ <section
235
+ ref={(element) => (root = element)}
236
+ data-slot="questionnaire"
237
+ data-status={status()}
238
+ aria-label={local.title ?? 'Question from the agent'}
239
+ // Not a tab stop: only the landing place for focus when a control goes away.
240
+ tabindex="-1"
241
+ class={cn(
242
+ 'flex w-full max-w-xl min-w-0 flex-col gap-3 rounded-xl border bg-card p-4 outline-none focus-visible:ring-3 focus-visible:ring-primary-subtle',
243
+ {
244
+ 'border-border': settled(),
245
+ 'border-ring': !settled(),
246
+ }
247
+ )}
248
+ onKeyDown={onKeyDown}
249
+ onFocusIn={() => (focusWithin = true)}
250
+ onFocusOut={(event) => {
251
+ // Moving to another element ends it; a control disappearing does not.
252
+ const next = event.relatedTarget
253
+ if (next instanceof Node && !event.currentTarget.contains(next)) focusWithin = false
254
+ }}
255
+ {...rest}
256
+ >
257
+ <header class="flex items-start gap-2.5">
258
+ <span aria-hidden="true" class="mt-0.5 text-muted-foreground [&_svg]:size-4">
259
+ <Show when={status() === 'expired'} fallback={<CircleHelp />}>
260
+ <Clock />
261
+ </Show>
262
+ </span>
263
+ <div class="min-w-0 flex-1">
264
+ <h3 class="m-0 text-sm font-semibold">{local.title ?? 'The agent has a question'}</h3>
265
+ <Show when={local.description}>
266
+ <p class="m-0 mt-0.5 text-xs text-muted-foreground">{local.description}</p>
267
+ </Show>
268
+ </div>
269
+ <Show when={status() === 'answered'}>
270
+ <span class="flex items-center gap-1 text-xs text-muted-foreground">
271
+ <Check aria-hidden="true" class="size-3.5" />
272
+ Answered
273
+ </span>
274
+ </Show>
275
+ <Show when={status() === 'expired'}>
276
+ <span class="text-xs text-muted-foreground">No longer waiting</span>
277
+ </Show>
278
+ </header>
279
+
280
+ <Show
281
+ when={!settled()}
282
+ fallback={
283
+ <dl class="m-0 flex flex-col gap-2">
284
+ <For each={summary()}>
285
+ {(entry) => (
286
+ <div class="flex flex-col gap-0.5">
287
+ <dt class="text-xs text-muted-foreground">{entry.question.prompt}</dt>
288
+ <dd class="m-0 text-sm [overflow-wrap:anywhere] whitespace-pre-wrap">
289
+ {entry.parts.length > 0 ? entry.parts.join(', ') : 'Skipped'}
290
+ </dd>
291
+ </div>
292
+ )}
293
+ </For>
294
+ </dl>
295
+ }
296
+ >
297
+ <Show when={current()} keyed>
298
+ {(question) => (
299
+ <fieldset class="m-0 flex min-w-0 flex-col gap-2.5 border-0 p-0" disabled={locked()}>
300
+ <legend class="mb-1 p-0">
301
+ <Show when={count() > 1}>
302
+ <span class="block text-xs text-muted-foreground tabular-nums">
303
+ Question {step() + 1} of {count()}
304
+ </span>
305
+ </Show>
306
+ <h4
307
+ ref={(element) => (questionHeading = element)}
308
+ tabindex="-1"
309
+ class="m-0 text-sm font-medium outline-none [overflow-wrap:anywhere]"
310
+ >
311
+ {question.prompt}
312
+ </h4>
313
+ <Show when={question.description}>
314
+ <span class="mt-0.5 block text-xs font-normal text-muted-foreground">
315
+ {question.description}
316
+ </span>
317
+ </Show>
318
+ </legend>
319
+
320
+ <Show when={(question.options?.length ?? 0) > 0}>
321
+ <Show
322
+ when={question.multiple}
323
+ fallback={
324
+ <RadioGroup
325
+ aria-label={question.prompt}
326
+ value={answerOf(question).optionIds[0] ?? ''}
327
+ onChange={(value) =>
328
+ change(question, { ...answerOf(question), optionIds: value ? [value] : [] })
329
+ }
330
+ disabled={locked()}
331
+ >
332
+ <For each={question.options}>
333
+ {(option) => (
334
+ <RadioGroupItem
335
+ value={option.id}
336
+ label={option.label}
337
+ description={option.description}
338
+ variant="card"
339
+ />
340
+ )}
341
+ </For>
342
+ </RadioGroup>
343
+ }
344
+ >
345
+ <div role="group" aria-label={question.prompt} class="grid gap-2">
346
+ <For each={question.options}>
347
+ {(option) => (
348
+ <Checkbox
349
+ label={option.label}
350
+ description={option.description}
351
+ checked={answerOf(question).optionIds.includes(option.id)}
352
+ disabled={locked()}
353
+ onChange={(checked: boolean) => {
354
+ const ids = answerOf(question).optionIds
355
+ change(question, {
356
+ ...answerOf(question),
357
+ optionIds: checked
358
+ ? [...ids.filter((id) => id !== option.id), option.id]
359
+ : ids.filter((id) => id !== option.id),
360
+ })
361
+ }}
362
+ />
363
+ )}
364
+ </For>
365
+ </div>
366
+ </Show>
367
+ </Show>
368
+
369
+ <Show when={(question.options?.length ?? 0) === 0 || question.allowText}>
370
+ <div class="flex flex-col gap-1">
371
+ <label class="text-xs text-muted-foreground" for={`${uid}-${question.id}-text`}>
372
+ {question.textLabel ??
373
+ ((question.options?.length ?? 0) > 0 ? 'Something else' : 'Your answer')}
374
+ </label>
375
+ <Textarea
376
+ id={`${uid}-${question.id}-text`}
377
+ rows={2}
378
+ placeholder={question.textPlaceholder}
379
+ value={answerOf(question).text}
380
+ disabled={locked()}
381
+ aria-describedby={locked() && hostDisabledReason() ? reasonId : undefined}
382
+ onInput={(event) =>
383
+ change(question, { ...answerOf(question), text: event.currentTarget.value })
384
+ }
385
+ />
386
+ </div>
387
+ </Show>
388
+ </fieldset>
389
+ )}
390
+ </Show>
391
+
392
+ <Show when={submitReason()}>
393
+ <p id={reasonId} role="status" class="m-0 text-xs text-muted-foreground">
394
+ {submitReason()}
395
+ </p>
396
+ </Show>
397
+ <Show when={local.error}>
398
+ <p role="alert" class="m-0 text-xs text-destructive">
399
+ {local.error}
400
+ </p>
401
+ </Show>
402
+
403
+ <footer class="flex items-center justify-between gap-2">
404
+ <Show when={count() > 1} fallback={<span />}>
405
+ <Button
406
+ type="button"
407
+ variant="ghost"
408
+ size="sm"
409
+ disabled={step() === 0 || locked()}
410
+ onClick={() => setStep((value) => Math.max(0, value - 1))}
411
+ >
412
+ Back
413
+ </Button>
414
+ </Show>
415
+ <Show
416
+ when={last()}
417
+ fallback={
418
+ <Button
419
+ type="button"
420
+ size="sm"
421
+ disabled={locked() || !canAdvance()}
422
+ aria-describedby={hostDisabledReason() ? reasonId : undefined}
423
+ onClick={() => setStep((value) => Math.min(count() - 1, value + 1))}
424
+ >
425
+ Next
426
+ </Button>
427
+ }
428
+ >
429
+ <Button
430
+ type="button"
431
+ size="sm"
432
+ disabled={locked() || !canSubmit() || local.onSubmit === undefined}
433
+ aria-describedby={submitReason() ? reasonId : undefined}
434
+ onClick={() => void submit()}
435
+ >
436
+ <Show when={status() === 'submitting'}>
437
+ <LoaderCircle aria-hidden="true" class="motion-safe:animate-spin" />
438
+ </Show>
439
+ {local.submitLabel ?? 'Send answer'}
440
+ </Button>
441
+ </Show>
442
+ </footer>
443
+ </Show>
444
+ </section>
445
+ )
446
+ }
@@ -0,0 +1,9 @@
1
+ export {
2
+ Trace,
3
+ TraceDetail,
4
+ TraceLine,
5
+ TRACE_STATUS_LABELS,
6
+ type TraceLineProps,
7
+ type TraceProps,
8
+ type TraceStatus,
9
+ } from './trace'