@nadicodeai/ui 0.20.0 → 0.22.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 (350) hide show
  1. package/AGENTS.md +4 -3
  2. package/README.md +14 -21
  3. package/dist/agents.d.ts +10 -0
  4. package/dist/agents.d.ts.map +1 -0
  5. package/dist/agents.js +9 -0
  6. package/dist/components/badge.d.ts +1 -1
  7. package/dist/components/brand-icons/apple.d.ts +18 -0
  8. package/dist/components/brand-icons/apple.d.ts.map +1 -0
  9. package/dist/components/brand-icons/apple.js +22 -0
  10. package/dist/components/brand-icons/brand-icon.d.ts +22 -0
  11. package/dist/components/brand-icons/brand-icon.d.ts.map +1 -0
  12. package/dist/components/brand-icons/brand-icon.js +26 -0
  13. package/dist/components/brand-icons/linux.d.ts +18 -0
  14. package/dist/components/brand-icons/linux.d.ts.map +1 -0
  15. package/dist/components/brand-icons/linux.js +25 -0
  16. package/dist/components/brand-icons/windows.d.ts +18 -0
  17. package/dist/components/brand-icons/windows.d.ts.map +1 -0
  18. package/dist/components/brand-icons/windows.js +22 -0
  19. package/dist/components/brand-icons.d.ts +5 -0
  20. package/dist/components/brand-icons.d.ts.map +1 -0
  21. package/dist/components/brand-icons.js +10 -0
  22. package/dist/components/button.d.ts +1 -1
  23. package/dist/components/button.js +1 -1
  24. package/dist/components/card-marketing.js +2 -2
  25. package/dist/components/card.d.ts +4 -3
  26. package/dist/components/card.d.ts.map +1 -1
  27. package/dist/components/card.js +12 -2
  28. package/dist/components/chart-breakdown-table.js +1 -1
  29. package/dist/components/chart-bullet-bar.d.ts +18 -2
  30. package/dist/components/chart-bullet-bar.d.ts.map +1 -1
  31. package/dist/components/chart-bullet-bar.js +62 -9
  32. package/dist/components/chart-date-range-control.d.ts +11 -1
  33. package/dist/components/chart-date-range-control.d.ts.map +1 -1
  34. package/dist/components/chart-date-range-control.js +13 -3
  35. package/dist/components/chart-entity-colors.d.ts +7 -1
  36. package/dist/components/chart-entity-colors.d.ts.map +1 -1
  37. package/dist/components/chart-entity-colors.js +7 -1
  38. package/dist/components/chart-kpi-stat.d.ts.map +1 -1
  39. package/dist/components/chart-kpi-stat.js +1 -1
  40. package/dist/components/chart-time-series.d.ts.map +1 -1
  41. package/dist/components/chart-time-series.js +62 -4
  42. package/dist/components/chart.js +2 -2
  43. package/dist/components/code-editor-mockup.js +1 -1
  44. package/dist/components/nav-bar.js +1 -1
  45. package/dist/components/radio-group.d.ts +1 -1
  46. package/dist/components/radio-group.d.ts.map +1 -1
  47. package/dist/components/radio-group.js +2 -2
  48. package/dist/components/theme-mode-switcher.d.ts +10 -3
  49. package/dist/components/theme-mode-switcher.d.ts.map +1 -1
  50. package/dist/components/theme-mode-switcher.js +14 -7
  51. package/dist/components/use-case-bento.d.ts +2 -4
  52. package/dist/components/use-case-bento.d.ts.map +1 -1
  53. package/dist/components/use-case-bento.js +2 -3
  54. package/dist/eslint/index.js +91 -0
  55. package/dist/eslint/rules/jsx-class-utility.js +231 -0
  56. package/dist/eslint/rules/no-deprecated-zod-api.js +156 -0
  57. package/dist/eslint/rules/no-design-system-src-import.js +11 -0
  58. package/dist/eslint/rules/no-invalid-token-utility.js +46 -0
  59. package/dist/eslint/rules/no-native-visible-control.js +86 -0
  60. package/dist/eslint/rules/no-raw-color-utility.js +109 -0
  61. package/dist/eslint/rules/no-raw-focus-ring-width.js +30 -0
  62. package/dist/eslint/rules/no-raw-logo-import.js +41 -0
  63. package/dist/eslint/rules/no-shadcn-appearance-override.js +191 -0
  64. package/dist/eslint/rules/no-token-category-bypass.js +53 -0
  65. package/dist/eslint/rules/no-ui-src-import.js +10 -0
  66. package/dist/eslint/rules/no-unpinned-vercel-functions-import.js +100 -0
  67. package/dist/eslint/rules/src-import-boundary.js +207 -0
  68. package/dist/hooks/index.d.ts +0 -1
  69. package/dist/hooks/index.d.ts.map +1 -1
  70. package/dist/hooks/index.js +0 -1
  71. package/dist/index.d.ts +1 -16
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -16
  74. package/dist/internal/assistant-ui/attachment.d.ts +5 -0
  75. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -0
  76. package/dist/internal/assistant-ui/attachment.js +93 -0
  77. package/dist/internal/assistant-ui/follow-up-suggestions.d.ts +3 -0
  78. package/dist/internal/assistant-ui/follow-up-suggestions.d.ts.map +1 -0
  79. package/dist/internal/assistant-ui/follow-up-suggestions.js +8 -0
  80. package/dist/internal/assistant-ui/markdown-text.d.ts +2 -0
  81. package/dist/internal/assistant-ui/markdown-text.d.ts.map +1 -0
  82. package/dist/internal/assistant-ui/markdown-text.js +54 -0
  83. package/dist/internal/assistant-ui/reasoning.d.ts +31 -0
  84. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -0
  85. package/dist/internal/assistant-ui/reasoning.js +118 -0
  86. package/dist/internal/assistant-ui/thread.d.ts +26 -0
  87. package/dist/internal/assistant-ui/thread.d.ts.map +1 -0
  88. package/dist/internal/assistant-ui/thread.js +118 -0
  89. package/dist/internal/assistant-ui/tool-fallback.d.ts +10 -0
  90. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -0
  91. package/dist/internal/assistant-ui/tool-fallback.js +163 -0
  92. package/dist/internal/assistant-ui/tool-group.d.ts +18 -0
  93. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -0
  94. package/dist/internal/assistant-ui/tool-group.js +44 -0
  95. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts +8 -0
  96. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts.map +1 -0
  97. package/dist/internal/assistant-ui/tooltip-icon-button.js +10 -0
  98. package/dist/styles/globals.css +3 -209
  99. package/docs/agents/nadicodeai-ui.md +4 -6
  100. package/docs/component-classification.md +1 -1
  101. package/docs/consuming-cross-repo.md +32 -3
  102. package/docs/contract.md +16 -6
  103. package/docs/migration/base-ui-migration.md +0 -11
  104. package/docs/product-compositions.md +1 -1
  105. package/llms.txt +5 -6
  106. package/package.json +17 -29
  107. package/skills/nadicodeai-ui/SKILL.md +5 -7
  108. package/dist/ai-elements.d.ts +0 -49
  109. package/dist/ai-elements.d.ts.map +0 -1
  110. package/dist/ai-elements.js +0 -48
  111. package/dist/components/agent-avatar.d.ts +0 -7
  112. package/dist/components/agent-avatar.d.ts.map +0 -1
  113. package/dist/components/agent-avatar.js +0 -6
  114. package/dist/components/agent-chat.d.ts +0 -20
  115. package/dist/components/agent-chat.d.ts.map +0 -1
  116. package/dist/components/agent-chat.js +0 -10
  117. package/dist/components/agent-composer.d.ts +0 -56
  118. package/dist/components/agent-composer.d.ts.map +0 -1
  119. package/dist/components/agent-composer.js +0 -56
  120. package/dist/components/agent-message.d.ts +0 -117
  121. package/dist/components/agent-message.d.ts.map +0 -1
  122. package/dist/components/agent-message.js +0 -99
  123. package/dist/components/agent-thread.d.ts +0 -26
  124. package/dist/components/agent-thread.d.ts.map +0 -1
  125. package/dist/components/agent-thread.js +0 -63
  126. package/dist/components/agent-tool-approval.d.ts +0 -27
  127. package/dist/components/agent-tool-approval.d.ts.map +0 -1
  128. package/dist/components/agent-tool-approval.js +0 -43
  129. package/dist/components/ai-elements/agent.d.ts +0 -27
  130. package/dist/components/ai-elements/agent.d.ts.map +0 -1
  131. package/dist/components/ai-elements/agent.js +0 -25
  132. package/dist/components/ai-elements/artifact.d.ts +0 -24
  133. package/dist/components/ai-elements/artifact.d.ts.map +0 -1
  134. package/dist/components/ai-elements/artifact.js +0 -20
  135. package/dist/components/ai-elements/attachments.d.ts +0 -55
  136. package/dist/components/ai-elements/attachments.d.ts.map +0 -1
  137. package/dist/components/ai-elements/attachments.js +0 -125
  138. package/dist/components/ai-elements/audio-player.d.ts +0 -30
  139. package/dist/components/ai-elements/audio-player.d.ts.map +0 -1
  140. package/dist/components/ai-elements/audio-player.js +0 -41
  141. package/dist/components/ai-elements/canvas.d.ts +0 -8
  142. package/dist/components/ai-elements/canvas.d.ts.map +0 -1
  143. package/dist/components/ai-elements/canvas.js +0 -5
  144. package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
  145. package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
  146. package/dist/components/ai-elements/chain-of-thought.js +0 -49
  147. package/dist/components/ai-elements/checkpoint.d.ts +0 -12
  148. package/dist/components/ai-elements/checkpoint.d.ts.map +0 -1
  149. package/dist/components/ai-elements/checkpoint.js +0 -10
  150. package/dist/components/ai-elements/code-block.d.ts +0 -53
  151. package/dist/components/ai-elements/code-block.d.ts.map +0 -1
  152. package/dist/components/ai-elements/code-block.js +0 -239
  153. package/dist/components/ai-elements/commit.d.ts +0 -65
  154. package/dist/components/ai-elements/commit.d.ts.map +0 -1
  155. package/dist/components/ai-elements/commit.js +0 -83
  156. package/dist/components/ai-elements/confirmation.d.ts +0 -50
  157. package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
  158. package/dist/components/ai-elements/confirmation.js +0 -57
  159. package/dist/components/ai-elements/connection.d.ts +0 -6
  160. package/dist/components/ai-elements/connection.d.ts.map +0 -1
  161. package/dist/components/ai-elements/connection.js +0 -10
  162. package/dist/components/ai-elements/context.d.ts +0 -33
  163. package/dist/components/ai-elements/context.d.ts.map +0 -1
  164. package/dist/components/ai-elements/context.js +0 -147
  165. package/dist/components/ai-elements/controls.d.ts +0 -5
  166. package/dist/components/ai-elements/controls.d.ts.map +0 -1
  167. package/dist/components/ai-elements/controls.js +0 -5
  168. package/dist/components/ai-elements/conversation.d.ts +0 -24
  169. package/dist/components/ai-elements/conversation.d.ts.map +0 -1
  170. package/dist/components/ai-elements/conversation.js +0 -41
  171. package/dist/components/ai-elements/edge.d.ts +0 -6
  172. package/dist/components/ai-elements/edge.d.ts.map +0 -1
  173. package/dist/components/ai-elements/edge.js +0 -88
  174. package/dist/components/ai-elements/environment-variables.d.ts +0 -39
  175. package/dist/components/ai-elements/environment-variables.d.ts.map +0 -1
  176. package/dist/components/ai-elements/environment-variables.js +0 -60
  177. package/dist/components/ai-elements/file-tree.d.ts +0 -27
  178. package/dist/components/ai-elements/file-tree.d.ts.map +0 -1
  179. package/dist/components/ai-elements/file-tree.js +0 -73
  180. package/dist/components/ai-elements/image.d.ts +0 -7
  181. package/dist/components/ai-elements/image.d.ts.map +0 -1
  182. package/dist/components/ai-elements/image.js +0 -3
  183. package/dist/components/ai-elements/inline-citation.d.ts +0 -39
  184. package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
  185. package/dist/components/ai-elements/inline-citation.js +0 -86
  186. package/dist/components/ai-elements/jsx-preview.d.ts +0 -30
  187. package/dist/components/ai-elements/jsx-preview.d.ts.map +0 -1
  188. package/dist/components/ai-elements/jsx-preview.js +0 -159
  189. package/dist/components/ai-elements/message.d.ts +0 -38
  190. package/dist/components/ai-elements/message.d.ts.map +0 -1
  191. package/dist/components/ai-elements/message.js +0 -91
  192. package/dist/components/ai-elements/mic-selector.d.ts +0 -46
  193. package/dist/components/ai-elements/mic-selector.d.ts.map +0 -1
  194. package/dist/components/ai-elements/mic-selector.js +0 -180
  195. package/dist/components/ai-elements/model-selector.d.ts +0 -36
  196. package/dist/components/ai-elements/model-selector.d.ts.map +0 -1
  197. package/dist/components/ai-elements/model-selector.js +0 -18
  198. package/dist/components/ai-elements/node.d.ts +0 -22
  199. package/dist/components/ai-elements/node.d.ts.map +0 -1
  200. package/dist/components/ai-elements/node.js +0 -12
  201. package/dist/components/ai-elements/open-in-chat.d.ts +0 -27
  202. package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
  203. package/dist/components/ai-elements/open-in-chat.js +0 -81
  204. package/dist/components/ai-elements/package-info.d.ts +0 -30
  205. package/dist/components/ai-elements/package-info.d.ts.map +0 -1
  206. package/dist/components/ai-elements/package-info.js +0 -50
  207. package/dist/components/ai-elements/panel.d.ts +0 -6
  208. package/dist/components/ai-elements/panel.d.ts.map +0 -1
  209. package/dist/components/ai-elements/panel.js +0 -5
  210. package/dist/components/ai-elements/persona.d.ts +0 -49
  211. package/dist/components/ai-elements/persona.d.ts.map +0 -1
  212. package/dist/components/ai-elements/persona.js +0 -175
  213. package/dist/components/ai-elements/plan.d.ts +0 -27
  214. package/dist/components/ai-elements/plan.d.ts.map +0 -1
  215. package/dist/components/ai-elements/plan.js +0 -34
  216. package/dist/components/ai-elements/prompt-input.d.ts +0 -149
  217. package/dist/components/ai-elements/prompt-input.d.ts.map +0 -1
  218. package/dist/components/ai-elements/prompt-input.js +0 -704
  219. package/dist/components/ai-elements/queue.d.ts +0 -62
  220. package/dist/components/ai-elements/queue.d.ts.map +0 -1
  221. package/dist/components/ai-elements/queue.js +0 -24
  222. package/dist/components/ai-elements/reasoning.d.ts +0 -27
  223. package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
  224. package/dist/components/ai-elements/reasoning.js +0 -92
  225. package/dist/components/ai-elements/sandbox.d.ts +0 -25
  226. package/dist/components/ai-elements/sandbox.d.ts.map +0 -1
  227. package/dist/components/ai-elements/sandbox.js +0 -15
  228. package/dist/components/ai-elements/schema-display.d.ts +0 -56
  229. package/dist/components/ai-elements/schema-display.d.ts.map +0 -1
  230. package/dist/components/ai-elements/schema-display.js +0 -90
  231. package/dist/components/ai-elements/shimmer.d.ts +0 -10
  232. package/dist/components/ai-elements/shimmer.d.ts.map +0 -1
  233. package/dist/components/ai-elements/shimmer.js +0 -11
  234. package/dist/components/ai-elements/snippet.d.ts +0 -19
  235. package/dist/components/ai-elements/snippet.d.ts.map +0 -1
  236. package/dist/components/ai-elements/snippet.js +0 -32
  237. package/dist/components/ai-elements/sources.d.ts +0 -13
  238. package/dist/components/ai-elements/sources.d.ts.map +0 -1
  239. package/dist/components/ai-elements/sources.js +0 -9
  240. package/dist/components/ai-elements/speech-input.d.ts +0 -55
  241. package/dist/components/ai-elements/speech-input.d.ts.map +0 -1
  242. package/dist/components/ai-elements/speech-input.js +0 -187
  243. package/dist/components/ai-elements/stack-trace.d.ts +0 -38
  244. package/dist/components/ai-elements/stack-trace.d.ts.map +0 -1
  245. package/dist/components/ai-elements/stack-trace.js +0 -181
  246. package/dist/components/ai-elements/suggestion.d.ts +0 -11
  247. package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
  248. package/dist/components/ai-elements/suggestion.js +0 -13
  249. package/dist/components/ai-elements/task.d.ts +0 -15
  250. package/dist/components/ai-elements/task.d.ts.map +0 -1
  251. package/dist/components/ai-elements/task.js +0 -10
  252. package/dist/components/ai-elements/terminal.d.ts +0 -28
  253. package/dist/components/ai-elements/terminal.d.ts.map +0 -1
  254. package/dist/components/ai-elements/terminal.js +0 -55
  255. package/dist/components/ai-elements/test-results.d.ts +0 -59
  256. package/dist/components/ai-elements/test-results.d.ts.map +0 -1
  257. package/dist/components/ai-elements/test-results.js +0 -98
  258. package/dist/components/ai-elements/tool.d.ts +0 -32
  259. package/dist/components/ai-elements/tool.d.ts.map +0 -1
  260. package/dist/components/ai-elements/tool.js +0 -49
  261. package/dist/components/ai-elements/toolbar.d.ts +0 -6
  262. package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
  263. package/dist/components/ai-elements/toolbar.js +0 -5
  264. package/dist/components/ai-elements/transcription.d.ts +0 -17
  265. package/dist/components/ai-elements/transcription.d.ts.map +0 -1
  266. package/dist/components/ai-elements/transcription.js +0 -36
  267. package/dist/components/ai-elements/voice-selector.d.ts +0 -65
  268. package/dist/components/ai-elements/voice-selector.d.ts.map +0 -1
  269. package/dist/components/ai-elements/voice-selector.js +0 -224
  270. package/dist/components/ai-elements/web-preview.d.ts +0 -35
  271. package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
  272. package/dist/components/ai-elements/web-preview.js +0 -66
  273. package/dist/components/artifact-panel.d.ts +0 -130
  274. package/dist/components/artifact-panel.d.ts.map +0 -1
  275. package/dist/components/artifact-panel.js +0 -180
  276. package/dist/components/attachment.d.ts +0 -24
  277. package/dist/components/attachment.d.ts.map +0 -1
  278. package/dist/components/attachment.js +0 -68
  279. package/dist/components/bubble.d.ts +0 -17
  280. package/dist/components/bubble.d.ts.map +0 -1
  281. package/dist/components/bubble.js +0 -59
  282. package/dist/components/demo-surface.d.ts +0 -34
  283. package/dist/components/demo-surface.d.ts.map +0 -1
  284. package/dist/components/demo-surface.js +0 -21
  285. package/dist/components/files-preview.d.ts +0 -36
  286. package/dist/components/files-preview.d.ts.map +0 -1
  287. package/dist/components/files-preview.js +0 -85
  288. package/dist/components/marker.d.ts +0 -11
  289. package/dist/components/marker.d.ts.map +0 -1
  290. package/dist/components/marker.js +0 -34
  291. package/dist/components/message-scroller.d.ts +0 -17
  292. package/dist/components/message-scroller.d.ts.map +0 -1
  293. package/dist/components/message-scroller.js +0 -29
  294. package/dist/components/message.d.ts +0 -11
  295. package/dist/components/message.d.ts.map +0 -1
  296. package/dist/components/message.js +0 -21
  297. package/dist/components/state-notice.d.ts +0 -13
  298. package/dist/components/state-notice.d.ts.map +0 -1
  299. package/dist/components/state-notice.js +0 -8
  300. package/dist/components/watch-it-work-band.d.ts +0 -12
  301. package/dist/components/watch-it-work-band.d.ts.map +0 -1
  302. package/dist/components/watch-it-work-band.js +0 -8
  303. package/dist/hooks/use-controllable-state.d.ts +0 -9
  304. package/dist/hooks/use-controllable-state.d.ts.map +0 -1
  305. package/dist/hooks/use-controllable-state.js +0 -23
  306. package/dist/lib/agent-attachment.d.ts +0 -11
  307. package/dist/lib/agent-attachment.d.ts.map +0 -1
  308. package/dist/lib/agent-attachment.js +0 -19
  309. package/dist/lib/agent-contracts.d.ts +0 -132
  310. package/dist/lib/agent-contracts.d.ts.map +0 -1
  311. package/dist/lib/agent-contracts.js +0 -6
  312. package/dist/lib/agent-state.d.ts +0 -22
  313. package/dist/lib/agent-state.d.ts.map +0 -1
  314. package/dist/lib/agent-state.js +0 -96
  315. package/dist/lib/agent-work-state.d.ts +0 -36
  316. package/dist/lib/agent-work-state.d.ts.map +0 -1
  317. package/dist/lib/agent-work-state.js +0 -36
  318. package/dist/lib/message-scroller-primitive/components.d.ts +0 -17
  319. package/dist/lib/message-scroller-primitive/components.d.ts.map +0 -1
  320. package/dist/lib/message-scroller-primitive/components.js +0 -204
  321. package/dist/lib/message-scroller-primitive/geometry.d.ts +0 -51
  322. package/dist/lib/message-scroller-primitive/geometry.d.ts.map +0 -1
  323. package/dist/lib/message-scroller-primitive/geometry.js +0 -199
  324. package/dist/lib/message-scroller-primitive/index.d.ts +0 -12
  325. package/dist/lib/message-scroller-primitive/index.d.ts.map +0 -1
  326. package/dist/lib/message-scroller-primitive/index.js +0 -12
  327. package/dist/lib/message-scroller-primitive/stores.d.ts +0 -6
  328. package/dist/lib/message-scroller-primitive/stores.d.ts.map +0 -1
  329. package/dist/lib/message-scroller-primitive/stores.js +0 -53
  330. package/dist/lib/message-scroller-primitive/types.d.ts +0 -88
  331. package/dist/lib/message-scroller-primitive/types.d.ts.map +0 -1
  332. package/dist/lib/message-scroller-primitive/types.js +0 -40
  333. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts +0 -19
  334. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts.map +0 -1
  335. package/dist/lib/message-scroller-primitive/use-message-scroller-commands.js +0 -188
  336. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts +0 -7
  337. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts.map +0 -1
  338. package/dist/lib/message-scroller-primitive/use-message-scroller-controller.js +0 -506
  339. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts +0 -49
  340. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts.map +0 -1
  341. package/dist/lib/message-scroller-primitive/use-message-scroller-refs.js +0 -90
  342. package/dist/lib/message-scroller-primitive/use-render.d.ts +0 -22
  343. package/dist/lib/message-scroller-primitive/use-render.d.ts.map +0 -1
  344. package/dist/lib/message-scroller-primitive/use-render.js +0 -113
  345. package/dist/lib/message-scroller-primitive/utils.d.ts +0 -4
  346. package/dist/lib/message-scroller-primitive/utils.d.ts.map +0 -1
  347. package/dist/lib/message-scroller-primitive/utils.js +0 -9
  348. package/docs/agent-work-surfaces.md +0 -132
  349. package/docs/migration/ai-elements-vendoring.md +0 -29
  350. package/docs/terminal-tui-semantics.md +0 -172
@@ -1 +0,0 @@
1
- {"version":3,"file":"speech-input.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/speech-input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,UAAU,iBAAkB,SAAQ,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,sBAAsB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACjF,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,2BAA2B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CACtF;AAED,UAAU,sBAAuB,SAAQ,KAAK;IAC5C,OAAO,EAAE,2BAA2B,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,2BAA2B;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAAC;IAC7C,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAAC;CAC1C;AAED,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,4BAA4B,CAAC;IAClD,CAAC,KAAK,EAAE,MAAM,GAAG,4BAA4B,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,4BAA4B;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,2BAA4B,SAAQ,KAAK;IACjD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iBAAiB,EAAE,UAAU,iBAAiB,CAAC;QAC/C,uBAAuB,EAAE,UAAU,iBAAiB,CAAC;KACtD;CACF;AAID,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IAC7D,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAkBF,eAAO,MAAM,WAAW,GAAI,uEAMzB,gBAAgB,gCA4NlB,CAAC"}
@@ -1,187 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from "../button.js";
4
- import { Spinner } from "../spinner.js";
5
- import { cn } from "../../lib/utils.js";
6
- import { MicIcon, SquareIcon } from "lucide-react";
7
- import { useCallback, useEffect, useRef, useState } from "react";
8
- const detectSpeechInputMode = () => {
9
- if (typeof window === "undefined") {
10
- return "none";
11
- }
12
- if ("SpeechRecognition" in window || "webkitSpeechRecognition" in window) {
13
- return "speech-recognition";
14
- }
15
- if ("MediaRecorder" in window && "mediaDevices" in navigator) {
16
- return "media-recorder";
17
- }
18
- return "none";
19
- };
20
- export const SpeechInput = ({ className, onTranscriptionChange, onAudioRecorded, lang = "en-US", ...props }) => {
21
- const [isListening, setIsListening] = useState(false);
22
- const [isProcessing, setIsProcessing] = useState(false);
23
- const [mode] = useState(detectSpeechInputMode);
24
- const [isRecognitionReady, setIsRecognitionReady] = useState(false);
25
- const recognitionRef = useRef(null);
26
- const mediaRecorderRef = useRef(null);
27
- const streamRef = useRef(null);
28
- const audioChunksRef = useRef([]);
29
- const onTranscriptionChangeRef = useRef(onTranscriptionChange);
30
- const onAudioRecordedRef = useRef(onAudioRecorded);
31
- // Keep refs in sync
32
- onTranscriptionChangeRef.current = onTranscriptionChange;
33
- onAudioRecordedRef.current = onAudioRecorded;
34
- // Initialize Speech Recognition when mode is speech-recognition
35
- useEffect(() => {
36
- if (mode !== "speech-recognition") {
37
- return;
38
- }
39
- const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
40
- const speechRecognition = new SpeechRecognition();
41
- speechRecognition.continuous = true;
42
- speechRecognition.interimResults = true;
43
- speechRecognition.lang = lang;
44
- const handleStart = () => {
45
- setIsListening(true);
46
- };
47
- const handleEnd = () => {
48
- setIsListening(false);
49
- };
50
- const handleResult = (event) => {
51
- const speechEvent = event;
52
- let finalTranscript = "";
53
- for (let i = speechEvent.resultIndex; i < speechEvent.results.length; i += 1) {
54
- const result = speechEvent.results[i];
55
- if (result.isFinal) {
56
- finalTranscript += result[0]?.transcript ?? "";
57
- }
58
- }
59
- if (finalTranscript) {
60
- onTranscriptionChangeRef.current?.(finalTranscript);
61
- }
62
- };
63
- const handleError = () => {
64
- setIsListening(false);
65
- };
66
- speechRecognition.addEventListener("start", handleStart);
67
- speechRecognition.addEventListener("end", handleEnd);
68
- speechRecognition.addEventListener("result", handleResult);
69
- speechRecognition.addEventListener("error", handleError);
70
- recognitionRef.current = speechRecognition;
71
- setIsRecognitionReady(true);
72
- return () => {
73
- speechRecognition.removeEventListener("start", handleStart);
74
- speechRecognition.removeEventListener("end", handleEnd);
75
- speechRecognition.removeEventListener("result", handleResult);
76
- speechRecognition.removeEventListener("error", handleError);
77
- speechRecognition.stop();
78
- recognitionRef.current = null;
79
- setIsRecognitionReady(false);
80
- };
81
- }, [mode, lang]);
82
- // Cleanup MediaRecorder and stream on unmount
83
- useEffect(() => () => {
84
- if (mediaRecorderRef.current?.state === "recording") {
85
- mediaRecorderRef.current.stop();
86
- }
87
- if (streamRef.current) {
88
- for (const track of streamRef.current.getTracks()) {
89
- track.stop();
90
- }
91
- }
92
- }, []);
93
- // Start MediaRecorder recording
94
- const startMediaRecorder = useCallback(async () => {
95
- if (!onAudioRecordedRef.current) {
96
- return;
97
- }
98
- try {
99
- const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
100
- streamRef.current = stream;
101
- const mediaRecorder = new MediaRecorder(stream);
102
- audioChunksRef.current = [];
103
- const handleDataAvailable = (event) => {
104
- if (event.data.size > 0) {
105
- audioChunksRef.current.push(event.data);
106
- }
107
- };
108
- const handleStop = async () => {
109
- for (const track of stream.getTracks()) {
110
- track.stop();
111
- }
112
- streamRef.current = null;
113
- const audioBlob = new Blob(audioChunksRef.current, {
114
- type: "audio/webm",
115
- });
116
- if (audioBlob.size > 0 && onAudioRecordedRef.current) {
117
- setIsProcessing(true);
118
- try {
119
- const transcript = await onAudioRecordedRef.current(audioBlob);
120
- if (transcript) {
121
- onTranscriptionChangeRef.current?.(transcript);
122
- }
123
- }
124
- catch {
125
- // Error handling delegated to the onAudioRecorded caller
126
- }
127
- finally {
128
- setIsProcessing(false);
129
- }
130
- }
131
- };
132
- const handleError = () => {
133
- setIsListening(false);
134
- for (const track of stream.getTracks()) {
135
- track.stop();
136
- }
137
- streamRef.current = null;
138
- };
139
- mediaRecorder.addEventListener("dataavailable", handleDataAvailable);
140
- mediaRecorder.addEventListener("stop", handleStop);
141
- mediaRecorder.addEventListener("error", handleError);
142
- mediaRecorderRef.current = mediaRecorder;
143
- mediaRecorder.start();
144
- setIsListening(true);
145
- }
146
- catch {
147
- setIsListening(false);
148
- }
149
- }, []);
150
- // Stop MediaRecorder recording
151
- const stopMediaRecorder = useCallback(() => {
152
- if (mediaRecorderRef.current?.state === "recording") {
153
- mediaRecorderRef.current.stop();
154
- }
155
- setIsListening(false);
156
- }, []);
157
- const toggleListening = useCallback(() => {
158
- if (mode === "speech-recognition" && recognitionRef.current) {
159
- if (isListening) {
160
- recognitionRef.current.stop();
161
- }
162
- else {
163
- recognitionRef.current.start();
164
- }
165
- }
166
- else if (mode === "media-recorder") {
167
- if (isListening) {
168
- stopMediaRecorder();
169
- }
170
- else {
171
- startMediaRecorder();
172
- }
173
- }
174
- }, [mode, isListening, startMediaRecorder, stopMediaRecorder]);
175
- // Determine if button should be disabled
176
- const isDisabled = mode === "none" ||
177
- (mode === "speech-recognition" && !isRecognitionReady) ||
178
- (mode === "media-recorder" && !onAudioRecorded) ||
179
- isProcessing;
180
- return (_jsxs("div", { className: "relative inline-flex items-center justify-center", children: [isListening &&
181
- [0, 1, 2].map((index) => (_jsx("div", { className: "absolute inset-0 rounded-full border-2 border-destructive/30 motion-safe:animate-ping motion-reduce:animate-pulse", style: {
182
- animationDelay: `${index * 0.3}s`,
183
- animationDuration: "2s",
184
- } }, index))), _jsxs(Button, { className: cn("relative z-10 rounded-full", isListening
185
- ? "bg-destructive text-destructive-foreground hover:bg-destructive/80 hover:text-destructive-foreground"
186
- : "bg-primary text-primary-foreground hover:bg-primary/80 hover:text-primary-foreground", className), disabled: isDisabled, onClick: toggleListening, ...props, children: [isProcessing && _jsx(Spinner, {}), !isProcessing && isListening && _jsx(SquareIcon, { className: "size-4" }), !(isProcessing || isListening) && _jsx(MicIcon, { className: "size-4" })] })] }));
187
- };
@@ -1,38 +0,0 @@
1
- import { Button } from "../button";
2
- import { CollapsibleContent, CollapsibleTrigger } from "../collapsible";
3
- import type { ComponentProps } from "react";
4
- export type StackTraceProps = ComponentProps<"div"> & {
5
- trace: string;
6
- open?: boolean;
7
- defaultOpen?: boolean;
8
- onOpenChange?: (open: boolean) => void;
9
- onFilePathClick?: (filePath: string, line?: number, column?: number) => void;
10
- };
11
- export declare const StackTrace: import("react").MemoExoticComponent<({ trace, className, open, defaultOpen, onOpenChange, onFilePathClick, children, ...props }: StackTraceProps) => import("react").JSX.Element>;
12
- export type StackTraceHeaderProps = ComponentProps<typeof CollapsibleTrigger>;
13
- export declare const StackTraceHeader: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceHeaderProps) => import("react").JSX.Element>;
14
- export type StackTraceErrorProps = ComponentProps<"div">;
15
- export declare const StackTraceError: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceErrorProps) => import("react").JSX.Element>;
16
- export type StackTraceErrorTypeProps = ComponentProps<"span">;
17
- export declare const StackTraceErrorType: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceErrorTypeProps) => import("react").JSX.Element>;
18
- export type StackTraceErrorMessageProps = ComponentProps<"span">;
19
- export declare const StackTraceErrorMessage: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceErrorMessageProps) => import("react").JSX.Element>;
20
- export type StackTraceActionsProps = ComponentProps<"div">;
21
- export declare const StackTraceActions: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceActionsProps) => import("react").JSX.Element>;
22
- export type StackTraceCopyButtonProps = ComponentProps<typeof Button> & {
23
- onCopy?: () => void;
24
- onError?: (error: Error) => void;
25
- timeout?: number;
26
- };
27
- export declare const StackTraceCopyButton: import("react").MemoExoticComponent<({ onCopy, onError, timeout, className, children, ...props }: StackTraceCopyButtonProps) => import("react").JSX.Element>;
28
- export type StackTraceExpandButtonProps = ComponentProps<"div">;
29
- export declare const StackTraceExpandButton: import("react").MemoExoticComponent<({ className, ...props }: StackTraceExpandButtonProps) => import("react").JSX.Element>;
30
- export type StackTraceContentProps = ComponentProps<typeof CollapsibleContent> & {
31
- maxHeight?: number;
32
- };
33
- export declare const StackTraceContent: import("react").MemoExoticComponent<({ className, maxHeight, children, ...props }: StackTraceContentProps) => import("react").JSX.Element>;
34
- export type StackTraceFramesProps = ComponentProps<"div"> & {
35
- showInternalFrames?: boolean;
36
- };
37
- export declare const StackTraceFrames: import("react").MemoExoticComponent<({ className, showInternalFrames, ...props }: StackTraceFramesProps) => import("react").JSX.Element>;
38
- //# sourceMappingURL=stack-trace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack-trace.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/stack-trace.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAe,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAI/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmI5C,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9E,CAAC;AAEF,eAAO,MAAM,UAAU,mIAUlB,eAAe,iCAkCnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9E,eAAO,MAAM,gBAAgB,0EAA4C,qBAAqB,iCAqB5F,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzD,eAAO,MAAM,eAAe,0EAA4C,oBAAoB,iCAK1F,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB,0EACM,wBAAwB,iCAS7D,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEjE,eAAO,MAAM,sBAAsB,0EACG,2BAA2B,iCAShE,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAS3D,eAAO,MAAM,iBAAiB,0EACQ,sBAAsB,iCAY3D,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACtE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,oGAQ5B,yBAAyB,iCAuB7B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEhE,eAAO,MAAM,sBAAsB,gEACP,2BAA2B,iCActD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,qFACyB,sBAAsB,iCAe5E,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IAC1D,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAqCF,eAAO,MAAM,gBAAgB,oFAC0B,qBAAqB,iCAyC3E,CAAC"}
@@ -1,181 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useControllableState } from "../../hooks/use-controllable-state.js";
4
- import { Button } from "../button.js";
5
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible.js";
6
- import { cn } from "../../lib/utils.js";
7
- import { useCopyToClipboard } from "../../lib/use-copy-to-clipboard.js";
8
- import { AlertTriangleIcon, CheckIcon, ChevronDownIcon, CopyIcon } from "lucide-react";
9
- import { createContext, memo, useCallback, useContext, useMemo } from "react";
10
- // Regex patterns for parsing stack traces
11
- const STACK_FRAME_WITH_PARENS_REGEX = /^at\s+(.+?)\s+\((.+):(\d+):(\d+)\)$/;
12
- const STACK_FRAME_WITHOUT_FN_REGEX = /^at\s+(.+):(\d+):(\d+)$/;
13
- const ERROR_TYPE_REGEX = /^(\w+Error|Error):\s*(.*)$/;
14
- const AT_PREFIX_REGEX = /^at\s+/;
15
- const StackTraceContext = createContext(null);
16
- const useStackTrace = () => {
17
- const context = useContext(StackTraceContext);
18
- if (!context) {
19
- throw new Error("StackTrace components must be used within StackTrace");
20
- }
21
- return context;
22
- };
23
- const parseStackFrame = (line) => {
24
- const trimmed = line.trim();
25
- // Pattern: at functionName (filePath:line:column)
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") ||
30
- filePath.startsWith("node:") ||
31
- filePath.includes("internal/");
32
- return {
33
- columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
34
- filePath: filePath ?? null,
35
- functionName: functionName ?? null,
36
- isInternal,
37
- lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
38
- raw: trimmed,
39
- };
40
- }
41
- // Pattern: at filePath:line:column (no function name)
42
- const withoutFnMatch = trimmed.match(STACK_FRAME_WITHOUT_FN_REGEX);
43
- if (withoutFnMatch) {
44
- const [, filePath, lineNum, colNum] = withoutFnMatch;
45
- const isInternal = (filePath?.includes("node_modules") ?? false) ||
46
- (filePath?.startsWith("node:") ?? false) ||
47
- (filePath?.includes("internal/") ?? false);
48
- return {
49
- columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
50
- filePath: filePath ?? null,
51
- functionName: null,
52
- isInternal,
53
- lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
54
- raw: trimmed,
55
- };
56
- }
57
- // Fallback: unparseable line
58
- return {
59
- columnNumber: null,
60
- filePath: null,
61
- functionName: null,
62
- isInternal: trimmed.includes("node_modules") || trimmed.includes("node:"),
63
- lineNumber: null,
64
- raw: trimmed,
65
- };
66
- };
67
- const parseStackTrace = (trace) => {
68
- const lines = trace.split("\n").filter((line) => line.trim());
69
- if (lines.length === 0) {
70
- return {
71
- errorMessage: trace,
72
- errorType: null,
73
- frames: [],
74
- raw: trace,
75
- };
76
- }
77
- const firstLine = lines[0].trim();
78
- let errorType = null;
79
- let errorMessage = firstLine;
80
- // Try to extract error type from "ErrorType: message" format
81
- const errorMatch = firstLine.match(ERROR_TYPE_REGEX);
82
- if (errorMatch) {
83
- const [, type, msg] = errorMatch;
84
- errorType = type;
85
- errorMessage = msg || "";
86
- }
87
- // Parse stack frames (lines starting with "at")
88
- const frames = lines
89
- .slice(1)
90
- .filter((line) => line.trim().startsWith("at "))
91
- .map(parseStackFrame);
92
- return {
93
- errorMessage,
94
- errorType,
95
- frames,
96
- raw: trace,
97
- };
98
- };
99
- export const StackTrace = memo(({ trace, className, open, defaultOpen = false, onOpenChange, onFilePathClick, children, ...props }) => {
100
- const [isOpen, setIsOpen] = useControllableState({
101
- defaultProp: defaultOpen,
102
- onChange: onOpenChange,
103
- prop: open,
104
- });
105
- const parsedTrace = useMemo(() => parseStackTrace(trace), [trace]);
106
- const contextValue = useMemo(() => ({
107
- isOpen,
108
- onFilePathClick,
109
- raw: trace,
110
- setIsOpen,
111
- trace: parsedTrace,
112
- }), [parsedTrace, trace, isOpen, setIsOpen, onFilePathClick]);
113
- return (_jsx(StackTraceContext.Provider, { value: contextValue, children: _jsx("div", { className: cn("not-prose w-full overflow-hidden rounded-lg border bg-background font-mono text-sm", className), ...props, children: children }) }));
114
- });
115
- export const StackTraceHeader = memo(({ className, children, ...props }) => {
116
- const { isOpen, setIsOpen } = useStackTrace();
117
- return (_jsx(Collapsible, { onOpenChange: setIsOpen, open: isOpen, children: _jsx(CollapsibleTrigger, { nativeButton: false, render: _jsx("div", { className: cn("flex w-full cursor-pointer items-center gap-3 p-3 text-left transition-colors hover:bg-muted/50", className), children: children }), ...props }) }));
118
- });
119
- export const StackTraceError = memo(({ className, children, ...props }) => (_jsxs("div", { className: cn("flex flex-1 items-center gap-2 overflow-hidden", className), ...props, children: [_jsx(AlertTriangleIcon, { className: "size-4 shrink-0 text-destructive" }), children] })));
120
- export const StackTraceErrorType = memo(({ className, children, ...props }) => {
121
- const { trace } = useStackTrace();
122
- return (_jsx("span", { className: cn("shrink-0 font-semibold text-destructive", className), ...props, children: children ?? trace.errorType }));
123
- });
124
- export const StackTraceErrorMessage = memo(({ className, children, ...props }) => {
125
- const { trace } = useStackTrace();
126
- return (_jsx("span", { className: cn("truncate text-foreground", className), ...props, children: children ?? trace.errorMessage }));
127
- });
128
- const handleActionsClick = (e) => e.stopPropagation();
129
- const handleActionsKeyDown = (e) => {
130
- if (e.key === "Enter" || e.key === " ") {
131
- e.stopPropagation();
132
- }
133
- };
134
- export const StackTraceActions = memo(({ className, children, ...props }) => (
135
- // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- The group only intercepts bubbled events from its interactive child controls so the parent stack frame is not activated.
136
- _jsx("div", { className: cn("flex shrink-0 items-center gap-1", className), onClick: handleActionsClick, onKeyDown: handleActionsKeyDown, role: "group", ...props, children: children })));
137
- export const StackTraceCopyButton = memo(({ onCopy, onError, timeout = 2000, className, children, ...props }) => {
138
- const { raw } = useStackTrace();
139
- const { copyToClipboard, isCopied } = useCopyToClipboard({
140
- text: raw,
141
- onCopy,
142
- onError,
143
- timeout,
144
- });
145
- const Icon = isCopied ? CheckIcon : CopyIcon;
146
- return (_jsx(Button, { className: cn("size-7", className), onClick: copyToClipboard, size: "icon", variant: "ghost", ...props, children: children ?? _jsx(Icon, { size: 14 }) }));
147
- });
148
- export const StackTraceExpandButton = memo(({ className, ...props }) => {
149
- const { isOpen } = useStackTrace();
150
- return (_jsx("div", { className: cn("flex size-7 items-center justify-center", className), ...props, children: _jsx(ChevronDownIcon, { className: cn("nc-transition-transform size-4 text-muted-foreground", isOpen ? "rotate-180" : "rotate-0") }) }));
151
- });
152
- export const StackTraceContent = memo(({ className, maxHeight = 400, children, ...props }) => {
153
- const { isOpen } = useStackTrace();
154
- return (_jsx(Collapsible, { open: isOpen, children: _jsx(CollapsibleContent, { className: cn("overflow-auto border-t bg-muted/30", className), style: { maxHeight }, ...props, children: children }) }));
155
- });
156
- const FilePathButton = memo(({ frame, onFilePathClick }) => {
157
- const handleClick = useCallback(() => {
158
- if (frame.filePath) {
159
- onFilePathClick?.(frame.filePath, frame.lineNumber ?? undefined, frame.columnNumber ?? undefined);
160
- }
161
- }, [frame, onFilePathClick]);
162
- return (_jsxs("button", { className: cn("underline decoration-dotted hover:text-primary", onFilePathClick && "cursor-pointer"), disabled: !onFilePathClick, onClick: handleClick, type: "button", children: [frame.filePath, frame.lineNumber !== null && `:${frame.lineNumber}`, frame.columnNumber !== null && `:${frame.columnNumber}`] }));
163
- });
164
- FilePathButton.displayName = "FilePathButton";
165
- export const StackTraceFrames = memo(({ className, showInternalFrames = true, ...props }) => {
166
- const { trace, onFilePathClick } = useStackTrace();
167
- const framesToShow = showInternalFrames
168
- ? trace.frames
169
- : trace.frames.filter((f) => !f.isInternal);
170
- return (_jsxs("div", { className: cn("flex flex-col gap-1 p-3", className), ...props, children: [framesToShow.map((frame) => (_jsxs("div", { className: cn("text-xs", frame.isInternal ? "text-muted-foreground/50" : "text-foreground/90"), children: [_jsx("span", { className: "text-muted-foreground", children: "at " }), frame.functionName && (_jsxs("span", { className: frame.isInternal ? "" : "text-foreground", children: [frame.functionName, " "] })), frame.filePath && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "(" }), _jsx(FilePathButton, { frame: frame, onFilePathClick: onFilePathClick }), _jsx("span", { className: "text-muted-foreground", children: ")" })] })), !(frame.filePath || frame.functionName) && (_jsx("span", { children: frame.raw.replace(AT_PREFIX_REGEX, "") }))] }, frame.raw))), framesToShow.length === 0 && (_jsx("div", { className: "text-muted-foreground text-xs", children: "No stack frames" }))] }));
171
- });
172
- StackTrace.displayName = "StackTrace";
173
- StackTraceHeader.displayName = "StackTraceHeader";
174
- StackTraceError.displayName = "StackTraceError";
175
- StackTraceErrorType.displayName = "StackTraceErrorType";
176
- StackTraceErrorMessage.displayName = "StackTraceErrorMessage";
177
- StackTraceActions.displayName = "StackTraceActions";
178
- StackTraceCopyButton.displayName = "StackTraceCopyButton";
179
- StackTraceExpandButton.displayName = "StackTraceExpandButton";
180
- StackTraceContent.displayName = "StackTraceContent";
181
- StackTraceFrames.displayName = "StackTraceFrames";
@@ -1,11 +0,0 @@
1
- import { Button } from "../button";
2
- import { ScrollArea } from "../scroll-area";
3
- import type { ComponentProps } from "react";
4
- export type SuggestionsProps = ComponentProps<typeof ScrollArea>;
5
- export declare const Suggestions: ({ className, children, ...props }: SuggestionsProps) => import("react").JSX.Element;
6
- export type SuggestionProps = Omit<ComponentProps<typeof Button>, "onClick"> & {
7
- suggestion: string;
8
- onClick?: (suggestion: string) => void;
9
- };
10
- export declare const Suggestion: ({ suggestion, onClick, className, variant, size, children, ...props }: SuggestionProps) => import("react").JSX.Element;
11
- //# sourceMappingURL=suggestion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"suggestion.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/suggestion.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;AAEjE,eAAO,MAAM,WAAW,GAAI,mCAAmC,gBAAgB,gCAK9E,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,uEAQxB,eAAe,gCAiBjB,CAAC"}
@@ -1,13 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from "../button.js";
4
- import { ScrollArea, ScrollBar } from "../scroll-area.js";
5
- import { cn } from "../../lib/utils.js";
6
- import { useCallback } from "react";
7
- export const Suggestions = ({ className, children, ...props }) => (_jsxs(ScrollArea, { className: "w-full overflow-x-auto whitespace-nowrap", ...props, children: [_jsx("div", { className: cn("flex w-max flex-nowrap items-center gap-2", className), children: children }), _jsx(ScrollBar, { className: "hidden", orientation: "horizontal" })] }));
8
- export const Suggestion = ({ suggestion, onClick, className, variant = "outline", size = "sm", children, ...props }) => {
9
- const handleClick = useCallback(() => {
10
- onClick?.(suggestion);
11
- }, [onClick, suggestion]);
12
- return (_jsx(Button, { className: cn("cursor-pointer rounded-full px-4", className), onClick: handleClick, size: size, type: "button", variant: variant, ...props, children: children || suggestion }));
13
- };
@@ -1,15 +0,0 @@
1
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible";
2
- import type { ComponentProps } from "react";
3
- export type TaskItemFileProps = ComponentProps<"div">;
4
- export declare const TaskItemFile: ({ children, className, ...props }: TaskItemFileProps) => import("react").JSX.Element;
5
- export type TaskItemProps = ComponentProps<"div">;
6
- export declare const TaskItem: ({ children, className, ...props }: TaskItemProps) => import("react").JSX.Element;
7
- export type TaskProps = ComponentProps<typeof Collapsible>;
8
- export declare const Task: ({ defaultOpen, className, ...props }: TaskProps) => import("react").JSX.Element;
9
- export type TaskTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {
10
- title: string;
11
- };
12
- export declare const TaskTrigger: ({ children, className, title, ...props }: TaskTriggerProps) => import("react").JSX.Element;
13
- export type TaskContentProps = ComponentProps<typeof CollapsibleContent>;
14
- export declare const TaskContent: ({ children, className, ...props }: TaskContentProps) => import("react").JSX.Element;
15
- //# sourceMappingURL=task.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/task.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEtD,eAAO,MAAM,YAAY,GAAI,mCAAmC,iBAAiB,gCAUhF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAElD,eAAO,MAAM,QAAQ,GAAI,mCAAmC,aAAa,gCAIxE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,eAAO,MAAM,IAAI,GAAI,sCAA6C,SAAS,gCAE1E,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACzE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,0CAA0C,gBAAgB,gCAiBrF,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzE,eAAO,MAAM,WAAW,GAAI,mCAAmC,gBAAgB,gCAI9E,CAAC"}
@@ -1,10 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible.js";
4
- import { cn } from "../../lib/utils.js";
5
- import { ChevronDownIcon, SearchIcon } from "lucide-react";
6
- export const TaskItemFile = ({ children, className, ...props }) => (_jsx("div", { className: cn("inline-flex items-center gap-1 rounded-md border bg-secondary px-1.5 py-0.5 text-foreground text-xs", className), ...props, children: children }));
7
- export const TaskItem = ({ children, className, ...props }) => (_jsx("div", { className: cn("text-muted-foreground text-sm", className), ...props, children: children }));
8
- export const Task = ({ defaultOpen = true, className, ...props }) => (_jsx(Collapsible, { className: cn(className), defaultOpen: defaultOpen, ...props }));
9
- export const TaskTrigger = ({ children, className, title, ...props }) => (_jsx(CollapsibleTrigger, { className: cn("group", className), nativeButton: false, render: _jsx("div", { className: "nc-transition-paint flex w-full cursor-pointer items-center gap-2 text-muted-foreground text-sm hover:text-foreground", children: children ?? (_jsxs(_Fragment, { children: [_jsx(SearchIcon, { className: "size-4" }), _jsx("p", { className: "text-sm", children: title }), _jsx(ChevronDownIcon, { className: "nc-transition-transform size-4 group-data-panel-open:rotate-180" })] })) }), ...props }));
10
- export const TaskContent = ({ children, className, ...props }) => (_jsx(CollapsibleContent, { className: cn("text-popover-foreground outline-none", className), ...props, children: _jsx("div", { className: "mt-4 flex flex-col gap-2 border-l-2 border-muted pl-4", children: children }) }));
@@ -1,28 +0,0 @@
1
- import { Button } from "../button";
2
- import type { ComponentProps, HTMLAttributes } from "react";
3
- export type TerminalHeaderProps = HTMLAttributes<HTMLDivElement>;
4
- export declare const TerminalHeader: ({ className, children, ...props }: TerminalHeaderProps) => import("react").JSX.Element;
5
- export type TerminalTitleProps = HTMLAttributes<HTMLDivElement>;
6
- export declare const TerminalTitle: ({ className, children, ...props }: TerminalTitleProps) => import("react").JSX.Element;
7
- export type TerminalStatusProps = HTMLAttributes<HTMLDivElement>;
8
- export declare const TerminalStatus: ({ className, children, ...props }: TerminalStatusProps) => import("react").JSX.Element | null;
9
- export type TerminalActionsProps = HTMLAttributes<HTMLDivElement>;
10
- export declare const TerminalActions: ({ className, children, ...props }: TerminalActionsProps) => import("react").JSX.Element;
11
- export type TerminalCopyButtonProps = ComponentProps<typeof Button> & {
12
- onCopy?: () => void;
13
- onError?: (error: Error) => void;
14
- timeout?: number;
15
- };
16
- export declare const TerminalCopyButton: ({ onCopy, onError, timeout, children, className, ...props }: TerminalCopyButtonProps) => import("react").JSX.Element;
17
- export type TerminalClearButtonProps = ComponentProps<typeof Button>;
18
- export declare const TerminalClearButton: ({ children, className, ...props }: TerminalClearButtonProps) => import("react").JSX.Element | null;
19
- export type TerminalContentProps = HTMLAttributes<HTMLDivElement>;
20
- export declare const TerminalContent: ({ className, children, ...props }: TerminalContentProps) => import("react").JSX.Element;
21
- export type TerminalProps = HTMLAttributes<HTMLDivElement> & {
22
- output: string;
23
- isStreaming?: boolean;
24
- autoScroll?: boolean;
25
- onClear?: () => void;
26
- };
27
- export declare const Terminal: ({ output, isStreaming, autoScroll, onClear, className, children, ...props }: TerminalProps) => import("react").JSX.Element;
28
- //# sourceMappingURL=terminal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/terminal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK7C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAgB5D,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEjE,eAAO,MAAM,cAAc,GAAI,mCAAmC,mBAAmB,gCAUpF,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEhE,eAAO,MAAM,aAAa,GAAI,mCAAmC,kBAAkB,gCAQlF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEjE,eAAO,MAAM,cAAc,GAAI,mCAAmC,mBAAmB,uCAepF,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe,GAAI,mCAAmC,oBAAoB,gCAItF,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACpE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,6DAOhC,uBAAuB,gCAyBzB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,mBAAmB,GAAI,mCAIjC,wBAAwB,uCAqB1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe,GAAI,mCAAmC,oBAAoB,gCA0BtF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,6EAQtB,aAAa,gCAkCf,CAAC"}
@@ -1,55 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Button } from "../button.js";
4
- import { cn } from "../../lib/utils.js";
5
- import { useCopyToClipboard } from "../../lib/use-copy-to-clipboard.js";
6
- import Ansi from "ansi-to-react";
7
- import { CheckIcon, CopyIcon, TerminalIcon, Trash2Icon } from "lucide-react";
8
- import { createContext, useContext, useEffect, useMemo, useRef } from "react";
9
- const TerminalContext = createContext({
10
- autoScroll: true,
11
- isStreaming: false,
12
- output: "",
13
- });
14
- export const TerminalHeader = ({ className, children, ...props }) => (_jsx("div", { className: cn("flex items-center justify-between border-[var(--nc-dark-line)] border-b px-4 py-2", className), ...props, children: children }));
15
- export const TerminalTitle = ({ className, children, ...props }) => (_jsxs("div", { className: cn("flex items-center gap-2 text-sm text-[var(--nc-dark-muted)]", className), ...props, children: [_jsx(TerminalIcon, { className: "size-4" }), children ?? "Terminal"] }));
16
- export const TerminalStatus = ({ className, children, ...props }) => {
17
- const { isStreaming } = useContext(TerminalContext);
18
- if (!isStreaming && children == null) {
19
- return null;
20
- }
21
- return (_jsx("div", { className: cn("flex items-center gap-2 text-xs text-[var(--nc-dark-muted)]", className), ...props, children: children }));
22
- };
23
- export const TerminalActions = ({ className, children, ...props }) => (_jsx("div", { className: cn("flex items-center gap-1", className), ...props, children: children }));
24
- export const TerminalCopyButton = ({ onCopy, onError, timeout = 2000, children, className, ...props }) => {
25
- const { output } = useContext(TerminalContext);
26
- const { copyToClipboard, isCopied } = useCopyToClipboard({
27
- text: output,
28
- onCopy,
29
- onError,
30
- timeout,
31
- });
32
- const Icon = isCopied ? CheckIcon : CopyIcon;
33
- return (_jsx(Button, { className: cn("size-7 shrink-0 text-[var(--nc-dark-muted)] hover:bg-[var(--nc-dark-canvas-soft-2)] hover:text-[var(--nc-dark-ink)]", className), onClick: copyToClipboard, size: "icon", variant: "ghost", ...props, children: children ?? _jsx(Icon, { size: 14 }) }));
34
- };
35
- export const TerminalClearButton = ({ children, className, ...props }) => {
36
- const { onClear } = useContext(TerminalContext);
37
- if (!onClear) {
38
- return null;
39
- }
40
- return (_jsx(Button, { className: cn("size-7 shrink-0 text-[var(--nc-dark-muted)] hover:bg-[var(--nc-dark-canvas-soft-2)] hover:text-[var(--nc-dark-ink)]", className), onClick: onClear, size: "icon", variant: "ghost", ...props, children: children ?? _jsx(Trash2Icon, { size: 14 }) }));
41
- };
42
- export const TerminalContent = ({ className, children, ...props }) => {
43
- const { output, isStreaming, autoScroll } = useContext(TerminalContext);
44
- const containerRef = useRef(null);
45
- useEffect(() => {
46
- if (autoScroll && containerRef.current) {
47
- containerRef.current.scrollTop = containerRef.current.scrollHeight;
48
- }
49
- }, [output, autoScroll]);
50
- return (_jsx("div", { className: cn("max-h-96 overflow-auto p-4 font-mono text-sm leading-relaxed", className), ref: containerRef, ...props, children: children ?? (_jsxs("pre", { className: "whitespace-pre-wrap break-words", children: [_jsx(Ansi, { useClasses: true, children: output }), isStreaming && (_jsx("span", { className: "ml-0.5 inline-block h-4 w-2 bg-[var(--nc-dark-cyan)] motion-safe:animate-pulse" }))] })) }));
51
- };
52
- export const Terminal = ({ output, isStreaming = false, autoScroll = true, onClear, className, children, ...props }) => {
53
- const contextValue = useMemo(() => ({ autoScroll, isStreaming, onClear, output }), [autoScroll, isStreaming, onClear, output]);
54
- return (_jsx(TerminalContext.Provider, { value: contextValue, children: _jsx("div", { "data-slot": "terminal", className: cn("flex flex-col overflow-hidden rounded-lg border border-[var(--nc-dark-line)] bg-[var(--nc-dark-canvas-soft)] text-[var(--nc-dark-ink)] selection:bg-[var(--nc-dark-cyan)] selection:text-[var(--nc-dark-canvas)]", className), ...props, children: children ?? (_jsxs(_Fragment, { children: [_jsxs(TerminalHeader, { children: [_jsx(TerminalTitle, {}), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(TerminalStatus, {}), _jsxs(TerminalActions, { children: [_jsx(TerminalCopyButton, {}), onClear && _jsx(TerminalClearButton, {})] })] })] }), _jsx(TerminalContent, {})] })) }) }));
55
- };
@@ -1,59 +0,0 @@
1
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible";
2
- import type { ComponentProps, HTMLAttributes } from "react";
3
- type TestStatus = "passed" | "failed" | "skipped" | "running";
4
- interface TestResultsSummary {
5
- passed: number;
6
- failed: number;
7
- skipped: number;
8
- total: number;
9
- duration?: number;
10
- }
11
- export type TestResultsHeaderProps = HTMLAttributes<HTMLDivElement>;
12
- export declare const TestResultsHeader: ({ className, children, ...props }: TestResultsHeaderProps) => import("react").JSX.Element;
13
- export type TestResultsDurationProps = HTMLAttributes<HTMLSpanElement>;
14
- export declare const TestResultsDuration: ({ className, children, ...props }: TestResultsDurationProps) => import("react").JSX.Element | null;
15
- export type TestResultsSummaryProps = HTMLAttributes<HTMLDivElement>;
16
- export declare const TestResultsSummary: ({ className, children, ...props }: TestResultsSummaryProps) => import("react").JSX.Element | null;
17
- export type TestResultsProps = HTMLAttributes<HTMLDivElement> & {
18
- summary?: TestResultsSummary;
19
- };
20
- export declare const TestResults: ({ summary, className, children, ...props }: TestResultsProps) => import("react").JSX.Element;
21
- export type TestResultsProgressProps = HTMLAttributes<HTMLDivElement>;
22
- export declare const TestResultsProgress: ({ className, children, ...props }: TestResultsProgressProps) => import("react").JSX.Element | null;
23
- export type TestResultsContentProps = HTMLAttributes<HTMLDivElement>;
24
- export declare const TestResultsContent: ({ className, children, ...props }: TestResultsContentProps) => import("react").JSX.Element;
25
- export type TestSuiteProps = ComponentProps<typeof Collapsible> & {
26
- name: string;
27
- status: TestStatus;
28
- };
29
- export declare const TestSuite: ({ name, status, className, children, ...props }: TestSuiteProps) => import("react").JSX.Element;
30
- export type TestSuiteNameProps = ComponentProps<typeof CollapsibleTrigger>;
31
- export declare const TestSuiteName: ({ className, children, ...props }: TestSuiteNameProps) => import("react").JSX.Element;
32
- export type TestSuiteStatsProps = HTMLAttributes<HTMLDivElement> & {
33
- passed?: number;
34
- failed?: number;
35
- skipped?: number;
36
- };
37
- export declare const TestSuiteStats: ({ passed, failed, skipped, className, children, ...props }: TestSuiteStatsProps) => import("react").JSX.Element;
38
- export type TestSuiteContentProps = ComponentProps<typeof CollapsibleContent>;
39
- export declare const TestSuiteContent: ({ className, children, ...props }: TestSuiteContentProps) => import("react").JSX.Element;
40
- export type TestNameProps = HTMLAttributes<HTMLSpanElement>;
41
- export declare const TestName: ({ className, children, ...props }: TestNameProps) => import("react").JSX.Element;
42
- export type TestDurationProps = HTMLAttributes<HTMLSpanElement>;
43
- export declare const TestDuration: ({ className, children, ...props }: TestDurationProps) => import("react").JSX.Element | null;
44
- export type TestStatusProps = HTMLAttributes<HTMLSpanElement>;
45
- export declare const TestStatus: ({ className, children, ...props }: TestStatusProps) => import("react").JSX.Element;
46
- export type TestProps = HTMLAttributes<HTMLDivElement> & {
47
- name: string;
48
- status: TestStatus;
49
- duration?: number;
50
- };
51
- export declare const Test: ({ name, status, duration, className, children, ...props }: TestProps) => import("react").JSX.Element;
52
- export type TestErrorProps = HTMLAttributes<HTMLDivElement>;
53
- export declare const TestError: ({ className, children, ...props }: TestErrorProps) => import("react").JSX.Element;
54
- export type TestErrorMessageProps = HTMLAttributes<HTMLParagraphElement>;
55
- export declare const TestErrorMessage: ({ className, children, ...props }: TestErrorMessageProps) => import("react").JSX.Element;
56
- export type TestErrorStackProps = HTMLAttributes<HTMLPreElement>;
57
- export declare const TestErrorStack: ({ className, children, ...props }: TestErrorStackProps) => import("react").JSX.Element;
58
- export {};
59
- //# sourceMappingURL=test-results.d.ts.map