@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,66 +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 { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible.js";
5
- import { Input } from "../input.js";
6
- import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../tooltip.js";
7
- import { cn } from "../../lib/utils.js";
8
- import { ChevronDownIcon } from "lucide-react";
9
- import { createContext, useCallback, useContext, useMemo, useState } from "react";
10
- const WebPreviewContext = createContext(null);
11
- const useWebPreview = () => {
12
- const context = useContext(WebPreviewContext);
13
- if (!context) {
14
- throw new Error("WebPreview components must be used within a WebPreview");
15
- }
16
- return context;
17
- };
18
- export const WebPreview = ({ className, children, defaultUrl = "", onUrlChange, ...props }) => {
19
- const [url, setUrl] = useState(defaultUrl);
20
- const [consoleOpen, setConsoleOpen] = useState(false);
21
- const handleUrlChange = useCallback((newUrl) => {
22
- setUrl(newUrl);
23
- onUrlChange?.(newUrl);
24
- }, [onUrlChange]);
25
- const contextValue = useMemo(() => ({
26
- consoleOpen,
27
- setConsoleOpen,
28
- setUrl: handleUrlChange,
29
- url,
30
- }), [consoleOpen, handleUrlChange, url]);
31
- return (_jsx(WebPreviewContext.Provider, { value: contextValue, children: _jsx("div", { className: cn("flex size-full flex-col rounded-lg border bg-card", className), ...props, children: children }) }));
32
- };
33
- export const WebPreviewNavigation = ({ className, children, ...props }) => (_jsx("div", { className: cn("flex items-center gap-1 border-b p-2", className), ...props, children: children }));
34
- export const WebPreviewNavigationButton = ({ onClick, disabled, tooltip, children, ...props }) => (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { className: "h-8 w-8 p-0 hover:text-foreground", disabled: disabled, onClick: onClick, size: "sm", variant: "ghost", ...props, children: children }) }), _jsx(TooltipContent, { children: _jsx("p", { children: tooltip }) })] }) }));
35
- export const WebPreviewUrl = ({ value, onChange, onKeyDown, ...props }) => {
36
- const { url, setUrl } = useWebPreview();
37
- const [prevUrl, setPrevUrl] = useState(url);
38
- const [inputValue, setInputValue] = useState(url);
39
- // Sync input value with context URL when it changes externally (derived state pattern)
40
- if (url !== prevUrl) {
41
- setPrevUrl(url);
42
- setInputValue(url);
43
- }
44
- const handleChange = (event) => {
45
- setInputValue(event.target.value);
46
- onChange?.(event);
47
- };
48
- const handleKeyDown = useCallback((event) => {
49
- if (event.key === "Enter") {
50
- const target = event.target;
51
- setUrl(target.value);
52
- }
53
- onKeyDown?.(event);
54
- }, [setUrl, onKeyDown]);
55
- return (_jsx(Input, { className: "h-8 flex-1 text-sm", onChange: handleChange, onKeyDown: handleKeyDown, placeholder: "Enter URL...", value: value ?? inputValue, ...props }));
56
- };
57
- export const WebPreviewBody = ({ className, loading, src, ...props }) => {
58
- const { url } = useWebPreview();
59
- return (_jsxs("div", { className: "flex-1", children: [_jsx("iframe", { className: cn("size-full", className),
60
- // oxlint-disable-next-line eslint-plugin-react(iframe-missing-sandbox)
61
- sandbox: "allow-scripts allow-forms allow-popups allow-presentation", src: (src ?? url) || undefined, title: "Preview", ...props }), loading] }));
62
- };
63
- export const WebPreviewConsole = ({ className, logs = [], children, ...props }) => {
64
- const { consoleOpen, setConsoleOpen } = useWebPreview();
65
- return (_jsxs(Collapsible, { className: cn("border-t bg-muted/50 font-mono text-sm", className), onOpenChange: setConsoleOpen, open: consoleOpen, ...props, children: [_jsx(CollapsibleTrigger, { render: _jsxs(Button, { className: "flex w-full items-center justify-between p-4 text-left font-medium hover:bg-muted/50", variant: "ghost", children: ["Console", _jsx(ChevronDownIcon, { className: cn("nc-transition-transform h-4 w-4", consoleOpen && "rotate-180") })] }) }), _jsx(CollapsibleContent, { className: "px-4 pb-4 outline-none", children: _jsxs("div", { className: "flex max-h-48 flex-col gap-1 overflow-y-auto", children: [logs.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: "No console output" })) : (logs.map((log) => (_jsxs("div", { className: cn("text-xs", log.level === "error" && "text-destructive", log.level === "warn" && "text-[var(--nc-warning-deep)]", log.level === "log" && "text-foreground"), children: [_jsx("span", { className: "text-muted-foreground", children: log.timestamp.toLocaleTimeString() }), " ", log.message] }, `${log.timestamp.getTime()}-${log.level}-${log.message}`)))), children] }) })] }));
66
- };
@@ -1,130 +0,0 @@
1
- import * as React from "react";
2
- import type { BundledLanguage } from "shiki";
3
- export type AgentRedactionCategory = "secret" | "environment" | "terminal-output" | "user-memory" | "private-reasoning";
4
- export type AgentRedactionRule = {
5
- redacted: true;
6
- category: AgentRedactionCategory;
7
- label?: string;
8
- replacement?: string;
9
- };
10
- export declare const agentRedactionLabels: {
11
- readonly environment: "Environment value redacted";
12
- readonly "private-reasoning": "Private reasoning redacted";
13
- readonly secret: "Secret redacted";
14
- readonly "terminal-output": "Terminal output redacted";
15
- readonly "user-memory": "User memory redacted";
16
- };
17
- export declare function getAgentRedactionText(redaction?: AgentRedactionRule): string | undefined;
18
- export type AgentArtifactStatus = "idle" | "running" | "complete" | "failed" | "interrupted" | "permission-denied" | "redacted";
19
- export type AgentArtifactKind = "text" | "code" | "diff" | "terminal" | "preview" | "test-results" | "stack-trace" | "custom";
20
- export type AgentDiffLineKind = "context" | "added" | "removed" | "hunk";
21
- export type AgentDiffLine = {
22
- id: string;
23
- kind: AgentDiffLineKind;
24
- content: string;
25
- oldLine?: number;
26
- newLine?: number;
27
- redaction?: AgentRedactionRule;
28
- };
29
- export type AgentTerminalTranscript = {
30
- title?: string;
31
- summary?: string;
32
- output?: string;
33
- isStreaming?: boolean;
34
- status?: AgentArtifactStatus;
35
- redaction?: AgentRedactionRule;
36
- };
37
- export type AgentPreviewModel = {
38
- title?: string;
39
- url?: string;
40
- description?: string;
41
- loadingLabel?: string;
42
- };
43
- export type AgentTestStatus = "passed" | "failed" | "skipped" | "running";
44
- export type AgentTestResult = {
45
- id: string;
46
- name: string;
47
- status: AgentTestStatus;
48
- duration?: number;
49
- error?: string;
50
- redaction?: AgentRedactionRule;
51
- };
52
- export type AgentTestSuiteResult = {
53
- id: string;
54
- name: string;
55
- status: AgentTestStatus;
56
- passed?: number;
57
- failed?: number;
58
- skipped?: number;
59
- tests?: AgentTestResult[];
60
- };
61
- export type AgentTestResultsModel = {
62
- summary: {
63
- passed: number;
64
- failed: number;
65
- skipped: number;
66
- total: number;
67
- duration?: number;
68
- };
69
- suites?: AgentTestSuiteResult[];
70
- };
71
- export type AgentArtifactModel = {
72
- id: string;
73
- kind: AgentArtifactKind;
74
- title: string;
75
- description?: string;
76
- status?: AgentArtifactStatus;
77
- path?: string;
78
- language?: BundledLanguage;
79
- content?: string;
80
- diff?: AgentDiffLine[];
81
- terminal?: AgentTerminalTranscript;
82
- preview?: AgentPreviewModel;
83
- stackTrace?: string;
84
- testResults?: AgentTestResultsModel;
85
- redaction?: AgentRedactionRule;
86
- };
87
- export type AgentArtifactRenderLimits = {
88
- codeChars: number;
89
- diffLines: number;
90
- terminalChars: number;
91
- textChars: number;
92
- };
93
- export declare const defaultAgentArtifactRenderLimits: {
94
- readonly codeChars: 12000;
95
- readonly diffLines: 300;
96
- readonly terminalChars: 16000;
97
- readonly textChars: 12000;
98
- };
99
- declare function RedactedNotice({ redaction, className, }: {
100
- redaction: AgentRedactionRule;
101
- className?: string;
102
- }): React.JSX.Element;
103
- declare function TerminalPanel({ transcript, status, renderLimits, className, ...props }: React.ComponentProps<"div"> & {
104
- transcript: AgentTerminalTranscript;
105
- status?: AgentArtifactStatus;
106
- renderLimits?: Partial<AgentArtifactRenderLimits>;
107
- }): React.JSX.Element;
108
- declare function PreviewPane({ preview, className, ...props }: React.ComponentProps<"div"> & {
109
- preview: AgentPreviewModel;
110
- }): React.JSX.Element;
111
- declare function DiffViewer({ lines, filePath, renderLimits, className, ...props }: React.ComponentProps<"div"> & {
112
- lines: AgentDiffLine[];
113
- filePath?: string;
114
- renderLimits?: Partial<AgentArtifactRenderLimits>;
115
- }): React.JSX.Element;
116
- declare function StackTraceDisclosure({ trace, className }: {
117
- trace: string;
118
- className?: string;
119
- }): React.JSX.Element;
120
- declare function TestResultsPanel({ results }: {
121
- results: AgentTestResultsModel;
122
- }): React.JSX.Element;
123
- declare function ArtifactPanel({ artifact, actions, renderLimits, children, className, ...props }: Omit<React.ComponentProps<"div">, "children" | "title"> & {
124
- artifact: AgentArtifactModel;
125
- actions?: React.ReactNode;
126
- renderLimits?: Partial<AgentArtifactRenderLimits>;
127
- children?: React.ReactNode;
128
- }): React.JSX.Element;
129
- export { ArtifactPanel, DiffViewer, PreviewPane, RedactedNotice, StackTraceDisclosure, TerminalPanel, TestResultsPanel, };
130
- //# sourceMappingURL=artifact-panel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifact-panel.d.ts","sourceRoot":"","sources":["../../src/components/artifact-panel.tsx"],"names":[],"mappings":"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"}
@@ -1,180 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { CodeBlock } from "./ai-elements/code-block.js";
4
- import { StackTrace, StackTraceContent, StackTraceError, StackTraceErrorMessage, StackTraceErrorType, StackTraceExpandButton, StackTraceFrames, StackTraceHeader, } from "./ai-elements/stack-trace.js";
5
- import { Terminal, TerminalActions, TerminalContent, TerminalHeader, TerminalStatus, TerminalTitle, } from "./ai-elements/terminal.js";
6
- import { Test, TestResults, TestResultsContent, TestResultsDuration, TestResultsHeader, TestResultsProgress, TestResultsSummary, TestSuite, TestSuiteContent, TestSuiteName, TestSuiteStats, } from "./ai-elements/test-results.js";
7
- import { WebPreview, WebPreviewBody, WebPreviewNavigation, WebPreviewUrl, } from "./ai-elements/web-preview.js";
8
- import { Badge } from "./badge.js";
9
- import { FeedbackState } from "./feedback-state.js";
10
- import { cn } from "../lib/utils.js";
11
- export const agentRedactionLabels = {
12
- environment: "Environment value redacted",
13
- "private-reasoning": "Private reasoning redacted",
14
- secret: "Secret redacted",
15
- "terminal-output": "Terminal output redacted",
16
- "user-memory": "User memory redacted",
17
- };
18
- export function getAgentRedactionText(redaction) {
19
- if (!redaction) {
20
- return undefined;
21
- }
22
- return redaction.replacement ?? redaction.label ?? agentRedactionLabels[redaction.category];
23
- }
24
- const defaultCodeLanguage = "plaintext";
25
- // Map the rich artifact kinds onto the design-system `artifact-preview`
26
- // `[data-kind]` glyph vocabulary (doc/sheet/code/pdf/report); doc is the default.
27
- const artifactPreviewKinds = {
28
- code: "code",
29
- custom: "doc",
30
- diff: "code",
31
- preview: "doc",
32
- "stack-trace": "doc",
33
- terminal: "code",
34
- "test-results": "report",
35
- text: "doc",
36
- };
37
- const artifactStatusLabels = {
38
- complete: "Complete",
39
- failed: "Failed",
40
- idle: "Idle",
41
- interrupted: "Interrupted",
42
- "permission-denied": "Permission denied",
43
- redacted: "Redacted",
44
- running: "Running",
45
- };
46
- export const defaultAgentArtifactRenderLimits = {
47
- codeChars: 12_000,
48
- diffLines: 300,
49
- terminalChars: 16_000,
50
- textChars: 12_000,
51
- };
52
- function normalizeRenderLimits(renderLimits) {
53
- return {
54
- ...defaultAgentArtifactRenderLimits,
55
- ...renderLimits,
56
- };
57
- }
58
- function normalizeLimit(limit) {
59
- if (!Number.isFinite(limit)) {
60
- return 0;
61
- }
62
- return Math.max(0, Math.floor(limit));
63
- }
64
- function getBoundedText(value, limit, direction = "head") {
65
- const maxLength = normalizeLimit(limit);
66
- if (value.length <= maxLength) {
67
- return { omitted: 0, value };
68
- }
69
- if (maxLength === 0) {
70
- return { omitted: value.length, value: "" };
71
- }
72
- return {
73
- omitted: value.length - maxLength,
74
- value: direction === "tail" ? value.slice(value.length - maxLength) : value.slice(0, maxLength),
75
- };
76
- }
77
- function getBoundedLines(lines, limit) {
78
- const maxLines = normalizeLimit(limit);
79
- if (lines.length <= maxLines) {
80
- return { omitted: 0, value: lines };
81
- }
82
- return {
83
- omitted: lines.length - maxLines,
84
- value: lines.slice(0, maxLines),
85
- };
86
- }
87
- function OverflowSummary({ children, className, }) {
88
- return (_jsx("div", { "data-slot": "agent-overflow-summary", className: cn("rounded-md border bg-muted/30 px-3 py-2 text-xs text-muted-foreground", className), children: children }));
89
- }
90
- function RedactedNotice({ redaction, className, }) {
91
- return (_jsx("div", { "data-slot": "agent-redaction-notice", "data-redaction-category": redaction.category, className: cn("rounded-md border border-dashed bg-muted/30 px-3 py-2 text-sm text-muted-foreground", className), children: getAgentRedactionText(redaction) }));
92
- }
93
- function TerminalPanel({ transcript, status, renderLimits, className, ...props }) {
94
- const limits = normalizeRenderLimits(renderLimits);
95
- const rawOutput = getAgentRedactionText(transcript.redaction) ??
96
- transcript.output ??
97
- transcript.summary ??
98
- "No terminal transcript supplied.";
99
- const output = transcript.redaction
100
- ? { omitted: 0, value: rawOutput }
101
- : getBoundedText(rawOutput, limits.terminalChars, "tail");
102
- const terminalStatus = status ??
103
- transcript.status ??
104
- (transcript.redaction ? "redacted" : transcript.isStreaming ? "running" : "idle");
105
- const isRunning = terminalStatus === "running";
106
- return (_jsxs("div", { "data-slot": "terminal-panel", className: cn("grid gap-2", className), ...props, children: [output.omitted > 0 && (_jsxs(OverflowSummary, { children: [output.omitted, " earlier terminal characters not shown."] })), _jsxs(Terminal, { output: output.value, isStreaming: isRunning, children: [_jsxs(TerminalHeader, { children: [_jsx(TerminalTitle, { children: transcript.title ?? "Terminal" }), _jsx(TerminalActions, { children: _jsx(TerminalStatus, { "data-slot": "terminal-panel-status", "data-terminal-status": terminalStatus, children: artifactStatusLabels[terminalStatus] }) })] }), _jsx(TerminalContent, {})] })] }));
107
- }
108
- function PreviewPane({ preview, className, ...props }) {
109
- return (_jsxs("div", { "data-slot": "preview-pane", className: cn("min-h-64", className), ...props, children: [_jsxs(WebPreview, { defaultUrl: preview.url ?? "", className: "min-h-64", children: [_jsx(WebPreviewNavigation, { children: _jsx(WebPreviewUrl, { "aria-label": preview.title ?? "Preview URL", readOnly: true, value: preview.url ?? "" }) }), _jsx(WebPreviewBody, {}), preview.loadingLabel && _jsx("span", { className: "sr-only", children: preview.loadingLabel })] }), preview.description && (_jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: preview.description }))] }));
110
- }
111
- function getDiffLineClass(kind) {
112
- if (kind === "added") {
113
- return "bg-[var(--nc-link-bg-soft)]";
114
- }
115
- if (kind === "removed") {
116
- return "bg-[var(--nc-error-soft)]";
117
- }
118
- if (kind === "hunk") {
119
- return "bg-accent text-muted-foreground";
120
- }
121
- return "bg-background";
122
- }
123
- function getDiffPrefix(kind) {
124
- if (kind === "added") {
125
- return "+";
126
- }
127
- if (kind === "removed") {
128
- return "-";
129
- }
130
- return " ";
131
- }
132
- function DiffViewer({ lines, filePath, renderLimits, className, ...props }) {
133
- const boundedLines = getBoundedLines(lines, normalizeRenderLimits(renderLimits).diffLines);
134
- return (_jsxs("div", { "data-slot": "diff-viewer", className: cn("overflow-hidden rounded-md border bg-background font-mono text-sm", className), ...props, children: [filePath && (_jsx("div", { "data-slot": "diff-viewer-header", className: "border-b bg-muted/50 px-3 py-2 text-xs text-muted-foreground", children: filePath })), _jsx("div", { "data-slot": "diff-viewer-lines", className: "overflow-auto", children: boundedLines.value.map((line) => (_jsxs("div", { "data-slot": "diff-viewer-line", "data-diff-kind": line.kind, className: cn("grid grid-cols-[auto_auto_1fr]", getDiffLineClass(line.kind)), children: [_jsx("span", { className: "select-none px-3 py-1 text-right text-muted-foreground", children: line.oldLine ?? "" }), _jsx("span", { className: "select-none px-3 py-1 text-right text-muted-foreground", children: line.newLine ?? "" }), _jsx("span", { className: "min-w-0 whitespace-pre-wrap px-3 py-1", children: line.redaction
135
- ? getAgentRedactionText(line.redaction)
136
- : `${getDiffPrefix(line.kind)}${line.content}` })] }, line.id))) }), boundedLines.omitted > 0 && (_jsxs(OverflowSummary, { className: "m-3", children: [boundedLines.omitted, " diff lines not shown."] }))] }));
137
- }
138
- function StackTraceDisclosure({ trace, className }) {
139
- return (_jsxs(StackTrace, { trace: trace, className: className, children: [_jsxs(StackTraceHeader, { children: [_jsxs(StackTraceError, { children: [_jsx(StackTraceErrorType, {}), _jsx(StackTraceErrorMessage, {})] }), _jsx(StackTraceExpandButton, {})] }), _jsx(StackTraceContent, { children: _jsx(StackTraceFrames, { showInternalFrames: false }) })] }));
140
- }
141
- function TestResultsPanel({ results }) {
142
- return (_jsxs(TestResults, { summary: results.summary, children: [_jsxs(TestResultsHeader, { children: [_jsx(TestResultsSummary, {}), _jsx(TestResultsDuration, {})] }), _jsxs(TestResultsContent, { children: [_jsx(TestResultsProgress, {}), results.suites?.map((suite) => (_jsxs(TestSuite, { name: suite.name, status: suite.status, children: [_jsxs(TestSuiteName, { children: [suite.name, _jsx(TestSuiteStats, { passed: suite.passed, failed: suite.failed, skipped: suite.skipped })] }), suite.tests && (_jsx(TestSuiteContent, { children: suite.tests.map((test) => (_jsx(Test, { name: test.name, status: test.status, duration: test.duration, children: test.redaction ? _jsx(RedactedNotice, { redaction: test.redaction }) : undefined }, test.id))) }))] }, suite.id)))] })] }));
143
- }
144
- function ArtifactBody({ artifact, renderLimits, children, }) {
145
- const limits = normalizeRenderLimits(renderLimits);
146
- if (children) {
147
- return children;
148
- }
149
- if (artifact.redaction) {
150
- return _jsx(RedactedNotice, { redaction: artifact.redaction });
151
- }
152
- if (artifact.kind === "code") {
153
- const code = getBoundedText(artifact.content ?? "", limits.codeChars);
154
- return (_jsxs("div", { className: "grid gap-2", children: [_jsx(CodeBlock, { code: code.value, language: artifact.language ?? defaultCodeLanguage, showLineNumbers: true }), code.omitted > 0 && (_jsxs(OverflowSummary, { children: [code.omitted, " code characters not shown."] }))] }));
155
- }
156
- if (artifact.kind === "diff") {
157
- return (_jsx(DiffViewer, { lines: artifact.diff ?? [], filePath: artifact.path, renderLimits: limits }));
158
- }
159
- if (artifact.kind === "terminal") {
160
- return (_jsx(TerminalPanel, { transcript: artifact.terminal ?? {}, status: artifact.status, renderLimits: limits }));
161
- }
162
- if (artifact.kind === "preview") {
163
- return _jsx(PreviewPane, { preview: artifact.preview ?? {} });
164
- }
165
- if (artifact.kind === "stack-trace" && artifact.stackTrace) {
166
- return _jsx(StackTraceDisclosure, { trace: artifact.stackTrace });
167
- }
168
- if (artifact.kind === "test-results" && artifact.testResults) {
169
- return _jsx(TestResultsPanel, { results: artifact.testResults });
170
- }
171
- if (artifact.content) {
172
- const content = getBoundedText(artifact.content, limits.textChars);
173
- return (_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: "whitespace-pre-wrap text-sm text-foreground", children: content.value }), content.omitted > 0 && (_jsxs(OverflowSummary, { children: [content.omitted, " text characters not shown."] }))] }));
174
- }
175
- return (_jsx(FeedbackState, { status: "empty", title: "No artifact content", compact: true, className: "rounded-md border-0 bg-transparent" }));
176
- }
177
- function ArtifactPanel({ artifact, actions, renderLimits, children, className, ...props }) {
178
- return (_jsxs("div", { "data-slot": "artifact-panel", "data-artifact-kind": artifact.kind, "data-artifact-status": artifact.status, "data-kind": artifactPreviewKinds[artifact.kind], className: cn("nc-artifact-preview", className), ...props, children: [_jsxs("div", { className: "nc-artifact-preview-header", children: [_jsx("span", { className: "nc-artifact-preview-title", children: artifact.title }), artifact.status && (_jsx(Badge, { variant: "secondary", children: artifactStatusLabels[artifact.status] })), _jsx("span", { className: "nc-artifact-preview-kind", children: artifact.kind }), actions && _jsx("div", { className: "ml-2 flex items-center gap-1", children: actions })] }), _jsxs("div", { className: "nc-artifact-preview-body", children: [(artifact.description || artifact.path) && (_jsx("div", { "data-slot": "artifact-panel-subtitle", className: "mb-2 text-muted-foreground text-xs", children: artifact.description ?? artifact.path })), _jsx(ArtifactBody, { artifact: artifact, renderLimits: renderLimits, children: children })] })] }));
179
- }
180
- export { ArtifactPanel, DiffViewer, PreviewPane, RedactedNotice, StackTraceDisclosure, TerminalPanel, TestResultsPanel, };
@@ -1,24 +0,0 @@
1
- import * as React from "react";
2
- import { useRender } from "@base-ui/react/use-render";
3
- import { type VariantProps } from "class-variance-authority";
4
- import { Button } from "./button";
5
- declare const attachmentVariants: (props?: ({
6
- size?: "default" | "xs" | "sm" | null | undefined;
7
- orientation?: "horizontal" | "vertical" | null | undefined;
8
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
- declare function Attachment({ className, state, size, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentVariants> & {
10
- state?: "idle" | "uploading" | "processing" | "error" | "done";
11
- }): React.JSX.Element;
12
- declare const attachmentMediaVariants: (props?: ({
13
- variant?: "image" | "icon" | null | undefined;
14
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
15
- declare function AttachmentMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentMediaVariants>): React.JSX.Element;
16
- declare function AttachmentContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
17
- declare function AttachmentTitle({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
18
- declare function AttachmentDescription({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
19
- declare function AttachmentActions({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
- declare function AttachmentAction({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
21
- declare function AttachmentTrigger({ className, render, type, ...props }: useRender.ComponentProps<"button">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
22
- declare function AttachmentGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
23
- export { Attachment, AttachmentGroup, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentAction, AttachmentTrigger, };
24
- //# sourceMappingURL=attachment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/components/attachment.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,QAAA,MAAM,kBAAkB;;;8EAgBvB,CAAC;AAEF,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,KAAc,EACd,IAAgB,EAChB,WAA0B,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAC5B,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;CAChE,qBAWF;AAED,QAAA,MAAM,uBAAuB;;8EAc5B,CAAC;AAEF,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,OAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,qBAS5E;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW9E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAW7E;AAED,iBAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAYnF;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW9E;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,OAAO,EACP,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,qBAUrC;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,MAAM,EACN,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,0EAepC;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW5E;AAED,OAAO,EACL,UAAU,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,CAAC"}
@@ -1,68 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { mergeProps } from "@base-ui/react/merge-props";
3
- import { useRender } from "@base-ui/react/use-render";
4
- import { cva } from "class-variance-authority";
5
- import { cn } from "../lib/utils.js";
6
- import { Button } from "./button.js";
7
- const attachmentVariants = cva("group/attachment relative flex w-fit max-w-full min-w-0 shrink-0 flex-wrap rounded-xl border bg-card text-card-foreground transition-colors focus-within:ring-[length:var(--ring-width-focus)] focus-within:ring-ring/50 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed", {
8
- variants: {
9
- size: {
10
- default: "gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2",
11
- sm: "gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5",
12
- xs: "gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1",
13
- },
14
- orientation: {
15
- horizontal: "min-w-40 items-center",
16
- vertical: "w-24 flex-col has-data-[slot=attachment-content]:w-30",
17
- },
18
- },
19
- });
20
- function Attachment({ className, state = "done", size = "default", orientation = "horizontal", ...props }) {
21
- return (_jsx("div", { "data-slot": "attachment", "data-state": state, "data-size": size, "data-orientation": orientation, className: cn(attachmentVariants({ size, orientation }), className), ...props }));
22
- }
23
- const attachmentMediaVariants = cva("relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[state=error]/attachment:bg-[var(--nc-error-soft)] group-data-[state=error]/attachment:text-[var(--nc-error-deep)] group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5", {
24
- variants: {
25
- variant: {
26
- icon: "",
27
- image: "opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover",
28
- },
29
- },
30
- defaultVariants: {
31
- variant: "icon",
32
- },
33
- });
34
- function AttachmentMedia({ className, variant = "icon", ...props }) {
35
- return (_jsx("div", { "data-slot": "attachment-media", "data-variant": variant, className: cn(attachmentMediaVariants({ variant }), className), ...props }));
36
- }
37
- function AttachmentContent({ className, ...props }) {
38
- return (_jsx("div", { "data-slot": "attachment-content", className: cn("max-w-full min-w-0 flex-1 leading-tight group-data-[orientation=vertical]/attachment:px-1", className), ...props }));
39
- }
40
- function AttachmentTitle({ className, ...props }) {
41
- return (_jsx("span", { "data-slot": "attachment-title", className: cn("block max-w-full min-w-0 truncate font-medium group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer", className), ...props }));
42
- }
43
- function AttachmentDescription({ className, ...props }) {
44
- return (_jsx("span", { "data-slot": "attachment-description", className: cn("mt-0.5 block min-w-0 truncate text-xs text-muted-foreground group-data-[state=error]/attachment:text-[var(--nc-error-deep)]", "max-w-full", className), ...props }));
45
- }
46
- function AttachmentActions({ className, ...props }) {
47
- return (_jsx("div", { "data-slot": "attachment-actions", className: cn("relative z-20 flex shrink-0 items-center group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:right-3 group-data-[orientation=vertical]/attachment:gap-1", className), ...props }));
48
- }
49
- function AttachmentAction({ className, variant, size = "icon-xs", ...props }) {
50
- return (_jsx(Button, { "data-slot": "attachment-action", variant: variant ?? "ghost", size: size, className: cn(className), ...props }));
51
- }
52
- function AttachmentTrigger({ className, render, type, ...props }) {
53
- return useRender({
54
- defaultTagName: "button",
55
- props: mergeProps({
56
- type: type ?? "button",
57
- className: cn("absolute inset-0 z-10 outline-none", className),
58
- }, props),
59
- render,
60
- state: {
61
- slot: "attachment-trigger",
62
- },
63
- });
64
- }
65
- function AttachmentGroup({ className, ...props }) {
66
- return (_jsx("div", { "data-slot": "attachment-group", className: cn("flex min-w-0 scroll-fade-x snap-x snap-mandatory scroll-px-1 no-scrollbar gap-3 overflow-x-auto overscroll-x-contain py-1 *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start", className), ...props }));
67
- }
68
- export { Attachment, AttachmentGroup, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentAction, AttachmentTrigger, };
@@ -1,17 +0,0 @@
1
- import * as React from "react";
2
- import { useRender } from "@base-ui/react/use-render";
3
- import { type VariantProps } from "class-variance-authority";
4
- declare function BubbleGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
5
- declare const bubbleVariants: (props?: ({
6
- variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "muted" | "tinted" | null | undefined;
7
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
- declare function Bubble({ variant, align, className, ...props }: React.ComponentProps<"div"> & VariantProps<typeof bubbleVariants> & {
9
- align?: "start" | "end";
10
- }): React.JSX.Element;
11
- declare function BubbleContent({ className, render, ...props }: useRender.ComponentProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
12
- declare function BubbleReactions({ side, align, className, ...props }: React.ComponentProps<"div"> & {
13
- align?: "start" | "end";
14
- side?: "top" | "bottom";
15
- }): React.JSX.Element;
16
- export { BubbleGroup, Bubble, BubbleContent, BubbleReactions };
17
- //# sourceMappingURL=bubble.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bubble.d.ts","sourceRoot":"","sources":["../../src/components/bubble.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,QAAA,MAAM,cAAc;;8EAyBnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,OAAmB,EACnB,KAAe,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAC5B,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACzB,qBAUF;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,0EAiBtF;AAsBD,iBAAS,eAAe,CAAC,EACvB,IAAe,EACf,KAAa,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACzB,qBAUA;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
@@ -1,59 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { mergeProps } from "@base-ui/react/merge-props";
3
- import { useRender } from "@base-ui/react/use-render";
4
- import { cva } from "class-variance-authority";
5
- import { cn } from "../lib/utils.js";
6
- function BubbleGroup({ className, ...props }) {
7
- return (_jsx("div", { "data-slot": "bubble-group", className: cn("flex min-w-0 flex-col gap-2", className), ...props }));
8
- }
9
- const bubbleVariants = cva("group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full", {
10
- variants: {
11
- variant: {
12
- default: "*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary-hover",
13
- secondary: "*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-secondary/80",
14
- muted: "*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/80",
15
- tinted: "*:data-[slot=bubble-content]:bg-accent *:data-[slot=bubble-content]:text-accent-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-accent/80",
16
- outline: "*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground",
17
- ghost: "border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground",
18
- destructive: "*:data-[slot=bubble-content]:bg-[var(--nc-error-soft)] *:data-[slot=bubble-content]:text-[var(--nc-error-deep)] [&>[data-slot=bubble-content]:is(button,a):hover]:border-[var(--nc-error-deep)]",
19
- },
20
- },
21
- defaultVariants: {
22
- variant: "default",
23
- },
24
- });
25
- function Bubble({ variant = "default", align = "start", className, ...props }) {
26
- return (_jsx("div", { "data-slot": "bubble", "data-variant": variant, "data-align": align, className: cn(bubbleVariants({ variant }), className), ...props }));
27
- }
28
- function BubbleContent({ className, render, ...props }) {
29
- return useRender({
30
- defaultTagName: "div",
31
- props: mergeProps({
32
- className: cn("w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-[length:var(--ring-width-focus)] [button,a]:focus-visible:ring-ring/50", className),
33
- }, props),
34
- render,
35
- state: {
36
- slot: "bubble-content",
37
- },
38
- });
39
- }
40
- const bubbleReactionsVariants = cva("absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0", {
41
- variants: {
42
- side: {
43
- top: "top-0 -translate-y-3/4",
44
- bottom: "bottom-0 translate-y-3/4",
45
- },
46
- align: {
47
- start: "left-3",
48
- end: "right-3",
49
- },
50
- },
51
- defaultVariants: {
52
- side: "bottom",
53
- align: "end",
54
- },
55
- });
56
- function BubbleReactions({ side = "bottom", align = "end", className, ...props }) {
57
- return (_jsx("div", { "data-slot": "bubble-reactions", "data-align": align, "data-side": side, className: cn(bubbleReactionsVariants({ side, align }), className), ...props }));
58
- }
59
- export { BubbleGroup, Bubble, BubbleContent, BubbleReactions };
@@ -1,34 +0,0 @@
1
- import * as React from "react";
2
- type DemoAccent = "green" | "cyan" | "amber" | "red" | "blue";
3
- type DemoSurfaceScript = {
4
- domain: string;
5
- role: string;
6
- workflow: string;
7
- accent: DemoAccent | string;
8
- user: string;
9
- agent: string;
10
- traces: string[];
11
- artifactKind: string;
12
- artifactKindLabel?: string;
13
- artifactTitle: string;
14
- artifactBody: string;
15
- approvalTitle: string;
16
- approvalCopy: string;
17
- usage: string;
18
- steps: string;
19
- };
20
- type DemoSurfaceLabels = {
21
- approvalLabel: string;
22
- approveAction: string;
23
- editAction: string;
24
- liveDemoLabel: string;
25
- };
26
- declare function DemoSurface({ script, title, className, children, autoplay, labels, ...props }: React.ComponentProps<"div"> & {
27
- script?: DemoSurfaceScript;
28
- title?: string;
29
- autoplay?: boolean;
30
- labels?: Partial<DemoSurfaceLabels>;
31
- }): React.JSX.Element;
32
- export { DemoSurface };
33
- export type { DemoSurfaceLabels, DemoSurfaceScript };
34
- //# sourceMappingURL=demo-surface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo-surface.d.ts","sourceRoot":"","sources":["../../src/components/demo-surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9D,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAeF,iBAAS,WAAW,CAAC,EACnB,MAAM,EACN,KAAe,EACf,SAAS,EACT,QAAQ,EACR,QAAe,EACf,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrC,qBAmGA;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC"}