@kitn.ai/ui 0.20.1 → 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 (510) hide show
  1. package/README.md +44 -45
  2. package/dist/components/artifact-card.d.ts +51 -0
  3. package/dist/components/artifact.d.ts +1 -1
  4. package/dist/components/attachments.d.ts +2 -2
  5. package/dist/components/audio-visualizer/index.d.ts +3 -3
  6. package/dist/components/audio-visualizer/labs/lab-choreography.d.ts +59 -0
  7. package/dist/components/audio-visualizer/labs/lab-shaders.d.ts +22 -0
  8. package/dist/components/audio-visualizer/labs/lab-visualizer.d.ts +18 -0
  9. package/dist/components/audio-visualizer/variant-aurora.d.ts +2 -2
  10. package/dist/components/audio-visualizer/variant-bar.d.ts +2 -2
  11. package/dist/components/audio-visualizer/variant-custom.d.ts +2 -2
  12. package/dist/components/audio-visualizer/variant-grid.d.ts +1 -1
  13. package/dist/components/audio-visualizer/variant-radial.d.ts +1 -1
  14. package/dist/components/audio-visualizer/variant-wave.d.ts +1 -1
  15. package/dist/components/card-fallback.d.ts +12 -2
  16. package/dist/components/card-renderer.d.ts +63 -2
  17. package/dist/components/chat-container.d.ts +3 -0
  18. package/dist/components/chat-scope-picker.d.ts +2 -2
  19. package/dist/components/chat-thread.d.ts +77 -18
  20. package/dist/components/choice-card.d.ts +3 -28
  21. package/dist/components/composer-dom.d.ts +1 -1
  22. package/dist/components/composer-highlight.d.ts +1 -1
  23. package/dist/components/composer-history.d.ts +1 -1
  24. package/dist/components/composer.d.ts +1 -1
  25. package/dist/components/confirm-card.d.ts +3 -18
  26. package/dist/components/context.d.ts +8 -4
  27. package/dist/components/conversation-item.d.ts +1 -1
  28. package/dist/components/conversation-list.d.ts +4 -3
  29. package/dist/components/embed.d.ts +3 -3
  30. package/dist/components/file-tree.d.ts +11 -22
  31. package/dist/components/form-widgets.d.ts +1 -1
  32. package/dist/components/form.d.ts +3 -44
  33. package/dist/components/link-preview.d.ts +3 -3
  34. package/dist/components/loader.d.ts +30 -48
  35. package/dist/components/message-skills.d.ts +4 -0
  36. package/dist/components/message.d.ts +84 -21
  37. package/dist/components/model-switcher.d.ts +2 -2
  38. package/dist/components/prompt-input.d.ts +2 -2
  39. package/dist/components/response-compare-types.d.ts +11 -2
  40. package/dist/components/response-compare.d.ts +3 -3
  41. package/dist/components/source.d.ts +12 -3
  42. package/dist/components/tasks-card.d.ts +3 -31
  43. package/dist/components/thread.d.ts +17 -5
  44. package/dist/components/toast.d.ts +2 -2
  45. package/dist/components/tool-classify.d.ts +8 -0
  46. package/dist/components/tool-types.d.ts +29 -1
  47. package/dist/components/tool.d.ts +3 -3
  48. package/dist/components/use-card-resolution.d.ts +1 -1
  49. package/dist/create-tween-COnPwAQN.js +338 -0
  50. package/dist/create-tween-DmTUaXWE.js +341 -0
  51. package/dist/create-tween-qs-jjvNA.js +7 -0
  52. package/dist/custom-elements.json +1726 -463
  53. package/dist/elements/agent-card.js +1 -1
  54. package/dist/elements/artifact.js +1 -1
  55. package/dist/elements/attachments.js +1 -1
  56. package/dist/elements/audio-visualizer.js +1 -1
  57. package/dist/elements/avatar.js +1 -1
  58. package/dist/elements/badge.js +1 -1
  59. package/dist/elements/button.js +1 -1
  60. package/dist/elements/card.js +1 -1
  61. package/dist/elements/cards.js +1 -1
  62. package/dist/elements/chain-of-thought.js +1 -1
  63. package/dist/elements/chat-scope-picker.js +1 -1
  64. package/dist/elements/chat-types.d.ts +70 -10
  65. package/dist/elements/chat-workspace.js +1 -1
  66. package/dist/elements/chat.js +1 -1
  67. package/dist/elements/checkpoint.js +1 -1
  68. package/dist/elements/choice.js +1 -1
  69. package/dist/elements/chunks/{Icon-Tj58ES_d.js → Icon-CHG5z5L7.js} +1 -1
  70. package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-BAtCEEgg.js} +1 -1
  71. package/dist/elements/chunks/arrow-left-CFPTeL1Y.js +1 -0
  72. package/dist/elements/chunks/artifact-fBZOE4SO.js +1 -0
  73. package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-DpYMe5VQ.js} +1 -1
  74. package/dist/elements/chunks/audio-visualizer-DFwzAcuL.js +1 -0
  75. package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-D6zodm6E.js} +1 -1
  76. package/dist/elements/chunks/{button-ZWNif3--.js → button-C42vrGvO.js} +1 -1
  77. package/dist/elements/chunks/card-renderer-DMZsSuvU.js +1 -0
  78. package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
  79. package/dist/elements/chunks/chat-thread-CNNEhol-.js +1 -0
  80. package/dist/elements/chunks/check-7Q3K-iXE.js +1 -0
  81. package/dist/elements/chunks/chevron-down-CpNYLn7E.js +1 -0
  82. package/dist/elements/chunks/chevron-right-DrH85Fha.js +1 -0
  83. package/dist/elements/chunks/choice-card-YoWjpsFV.js +1 -0
  84. package/dist/elements/chunks/circle-C9KRjKYv.js +1 -0
  85. package/dist/elements/chunks/circle-check-Dmi7Y4zw.js +1 -0
  86. package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-QIxXda6k.js} +1 -1
  87. package/dist/elements/chunks/code-block-CqeugReY.js +1 -0
  88. package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-sTv-_5lF.js} +1 -1
  89. package/dist/elements/chunks/{composer-BguS0QL_.js → composer-ldQyeVEB.js} +2 -2
  90. package/dist/elements/chunks/confirm-card-C0RNOwfn.js +1 -0
  91. package/dist/elements/chunks/context-5qgypNHC.js +1 -0
  92. package/dist/elements/chunks/conversation-list-DLzOacXz.js +1 -0
  93. package/dist/elements/chunks/create-tween-V4TXZ93X.js +7 -0
  94. package/dist/elements/chunks/default-input-DeeRSDHc.js +1 -0
  95. package/dist/elements/chunks/define-lE-QvQFn.js +1 -0
  96. package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DZSa9jog.js} +1 -1
  97. package/dist/elements/chunks/{download-Dsbg3ste.js → download-B2ZmnGqW.js} +1 -1
  98. package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-R3B7cSRE.js} +1 -1
  99. package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BmxceY4l.js} +1 -1
  100. package/dist/elements/chunks/embed-BVrtTZPo.js +1 -0
  101. package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-BbdR7YO7.js} +1 -1
  102. package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-D7dijo1A.js} +1 -1
  103. package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-0upJ5jeb.js} +1 -1
  104. package/dist/elements/chunks/{folder-glP5rha4.js → folder-D8z58t7B.js} +1 -1
  105. package/dist/elements/chunks/form-p5BKJNw5.js +1 -0
  106. package/dist/elements/chunks/hover-card-CN9s2md5.js +1 -0
  107. package/dist/elements/chunks/{icon-BLb8beoi.js → icon-CNiKP37E.js} +1 -1
  108. package/dist/elements/chunks/{info-CIsv92JK.js → info-BSnuJiHI.js} +1 -1
  109. package/dist/elements/chunks/{input-Dds1kFyt.js → input-BauDmzxX.js} +1 -1
  110. package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-BlHJaP9b.js} +1 -1
  111. package/dist/elements/chunks/{link-i4r_k7z4.js → link-DEi5iUWC.js} +1 -1
  112. package/dist/elements/chunks/link-preview-BaHyM6W4.js +1 -0
  113. package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-CmJG_Fkq.js} +1 -1
  114. package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-D2jaMpCN.js} +1 -1
  115. package/dist/elements/chunks/message-C5UfXZ2Z.js +1 -0
  116. package/dist/elements/chunks/message-CXWLmmLn.js +1 -0
  117. package/dist/elements/chunks/message-square-hXylwsy0.js +1 -0
  118. package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-C9ytZFMU.js} +1 -1
  119. package/dist/elements/chunks/model-switcher-CivGfD7-.js +1 -0
  120. package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-DJL_sbOm.js} +1 -1
  121. package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CFaB8naM.js} +1 -1
  122. package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-Br5SksfR.js} +1 -1
  123. package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-CMIvtAhU.js} +1 -1
  124. package/dist/elements/chunks/reasoning-DpZcNzLq.js +1 -0
  125. package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-Q8i3T9a_.js} +1 -1
  126. package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-B5IHCBFV.js} +1 -1
  127. package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-eLeydBje.js} +1 -1
  128. package/dist/elements/chunks/scroll-button-DWbz0yA1.js +1 -0
  129. package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-Xic78AD_.js} +1 -1
  130. package/dist/elements/chunks/{settings-B8lmec4D.js → settings-B8H51pAx.js} +1 -1
  131. package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-CsG9eYLe.js} +1 -1
  132. package/dist/elements/chunks/{share-C3lTiYGt.js → share-CNTx0z__.js} +1 -1
  133. package/dist/elements/chunks/skeleton-CLlHTcMI.js +1 -0
  134. package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
  135. package/dist/elements/chunks/source-BoVcU5ok.js +1 -0
  136. package/dist/elements/chunks/{star-CSJtGxgv.js → star-CxQVTVhI.js} +1 -1
  137. package/dist/elements/chunks/{store-CHyW95TP.js → store-CLtS5CUG.js} +1 -1
  138. package/dist/elements/chunks/tasks-card-CzlkLmUt.js +1 -0
  139. package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D5NhpIQ1.js} +1 -1
  140. package/dist/elements/chunks/textarea-x5Uxsmtm.js +1 -0
  141. package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-UobcJnx9.js} +1 -1
  142. package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-BOfs9eXq.js} +1 -1
  143. package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-Be6Dh_dt.js} +1 -1
  144. package/dist/elements/chunks/tooltip-RxMxyCLF.js +1 -0
  145. package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C4yxH2XN.js} +1 -1
  146. package/dist/elements/chunks/use-card-resolution-jva9ehH6.js +1 -0
  147. package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Dx4VRcjS.js} +2 -2
  148. package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-Y1ZTWgEa.js} +1 -1
  149. package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-B9gml9Cg.js} +2 -2
  150. package/dist/elements/chunks/{video-B7vmenoC.js → video-CrPHsytT.js} +1 -1
  151. package/dist/elements/chunks/x-_-OPHept.js +1 -0
  152. package/dist/elements/coachmark.js +1 -1
  153. package/dist/elements/code-block.js +1 -1
  154. package/dist/elements/command.js +1 -1
  155. package/dist/elements/compare.js +1 -1
  156. package/dist/elements/composer.js +1 -1
  157. package/dist/elements/confirm-card.js +1 -1
  158. package/dist/elements/context-meter.js +1 -1
  159. package/dist/elements/conversation-list.js +1 -1
  160. package/dist/elements/default-input.d.ts +34 -7
  161. package/dist/elements/define.d.ts +1 -0
  162. package/dist/elements/dialog.js +1 -1
  163. package/dist/elements/disclosure.d.ts +1 -1
  164. package/dist/elements/editable-label.js +1 -1
  165. package/dist/elements/element-data-types.d.ts +107 -0
  166. package/dist/elements/embed.js +1 -1
  167. package/dist/elements/empty.js +1 -1
  168. package/dist/elements/feedback-bar.js +1 -1
  169. package/dist/elements/file-tree.js +1 -1
  170. package/dist/elements/file-upload.js +1 -1
  171. package/dist/elements/form.js +1 -1
  172. package/dist/elements/hover-card.js +1 -1
  173. package/dist/elements/icon.js +1 -1
  174. package/dist/elements/image.js +1 -1
  175. package/dist/elements/input.js +1 -1
  176. package/dist/elements/kbd.js +1 -1
  177. package/dist/elements/link-preview.js +1 -1
  178. package/dist/elements/loader.js +1 -1
  179. package/dist/elements/markdown.js +1 -1
  180. package/dist/elements/menu.js +1 -1
  181. package/dist/elements/message-skills.js +1 -1
  182. package/dist/elements/message.js +1 -1
  183. package/dist/elements/model-switcher.js +1 -1
  184. package/dist/elements/nav.js +1 -1
  185. package/dist/elements/notice.js +1 -1
  186. package/dist/elements/pane-group.js +1 -1
  187. package/dist/elements/pane.js +1 -1
  188. package/dist/elements/popover.js +1 -1
  189. package/dist/elements/progress-bar.js +1 -1
  190. package/dist/elements/prompt-dock.js +1 -1
  191. package/dist/elements/prompt-input.js +1 -1
  192. package/dist/elements/prompt-suggestions.js +1 -1
  193. package/dist/elements/reasoning.js +1 -1
  194. package/dist/elements/register.d.ts +8 -6
  195. package/dist/elements/remote.js +1 -1
  196. package/dist/elements/resizable.js +1 -1
  197. package/dist/elements/response-stream.js +1 -1
  198. package/dist/elements/screen.js +1 -1
  199. package/dist/elements/scroll-area.js +1 -1
  200. package/dist/elements/scroll-button.js +1 -1
  201. package/dist/elements/search.js +1 -1
  202. package/dist/elements/segmented.js +1 -1
  203. package/dist/elements/separator.js +1 -1
  204. package/dist/elements/setting-item.js +1 -1
  205. package/dist/elements/settings-group.js +1 -1
  206. package/dist/elements/skeleton.js +1 -1
  207. package/dist/elements/slot-text.d.ts +51 -0
  208. package/dist/elements/slots.d.ts +21 -0
  209. package/dist/elements/source.js +1 -1
  210. package/dist/elements/status.js +1 -1
  211. package/dist/elements/switch.js +1 -1
  212. package/dist/elements/tabs.js +1 -1
  213. package/dist/elements/tasks.js +1 -1
  214. package/dist/elements/text-shimmer.js +1 -1
  215. package/dist/elements/thinking-bar.js +1 -1
  216. package/dist/elements/thread.js +1 -1
  217. package/dist/elements/toast.js +1 -1
  218. package/dist/elements/tool.js +1 -1
  219. package/dist/elements/tooltip.js +1 -1
  220. package/dist/elements/validate-messages.d.ts +25 -0
  221. package/dist/elements/voice-input.js +1 -1
  222. package/dist/elements/voice-output.js +1 -1
  223. package/dist/elements.d.ts +2734 -217
  224. package/dist/index.d.ts +163 -125
  225. package/dist/index.js +6572 -5990
  226. package/dist/index.server.d.ts +5 -0
  227. package/dist/index.server.js +5403 -4860
  228. package/dist/kai-provider.es.d.ts +5 -0
  229. package/dist/kai-provider.es.js +79 -77
  230. package/dist/kai.es.d.ts +5 -0
  231. package/dist/kai.es.js +1 -1
  232. package/dist/llms/llms-full.txt +774 -151
  233. package/dist/llms/llms.txt +57 -5
  234. package/dist/mcp.es.js +4756 -782
  235. package/dist/primitives/card-component-types.d.ts +11 -0
  236. package/dist/primitives/card-data-types.d.ts +196 -0
  237. package/dist/primitives/card-host.d.ts +1 -1
  238. package/dist/primitives/card-recovery.d.ts +3 -3
  239. package/dist/primitives/card-registry.d.ts +4 -14
  240. package/dist/primitives/card-resolution.d.ts +1 -1
  241. package/dist/primitives/card-routing.d.ts +1 -1
  242. package/dist/primitives/card-tags.d.ts +11 -0
  243. package/dist/primitives/card-validate-cards.d.ts +57 -0
  244. package/dist/primitives/card-validate-generator.testlib.d.ts +20 -0
  245. package/dist/primitives/card-validate-schemas.d.ts +17 -0
  246. package/dist/primitives/card-validate.d.ts +24 -0
  247. package/dist/primitives/create-kai-chat.d.ts +3 -3
  248. package/dist/primitives/embed-providers.d.ts +1 -1
  249. package/dist/primitives/link-preview.d.ts +1 -1
  250. package/dist/primitives/message-feedback.d.ts +2 -2
  251. package/dist/primitives/toast-store.d.ts +1 -1
  252. package/dist/react/index.d.ts +730 -302
  253. package/dist/react/use-kai-chat.d.ts +8 -4
  254. package/dist/react.d.ts +5 -0
  255. package/dist/react.js +418 -317
  256. package/dist/register-impl-AxIlqjo7.js +145 -0
  257. package/dist/remote/host-embed.d.ts +1 -1
  258. package/dist/remote/index.d.ts +2 -2
  259. package/dist/remote/provider-runtime.d.ts +2 -2
  260. package/dist/remote/provider.d.ts +2 -2
  261. package/dist/remote/validate.d.ts +1 -1
  262. package/dist/remote/wire.d.ts +1 -1
  263. package/dist/schemas/artifact.schema.json +92 -0
  264. package/dist/schemas/embed.schema.json +0 -2
  265. package/dist/schemas/from-tool-call.d.ts +48 -0
  266. package/dist/schemas/index.d.ts +48 -0
  267. package/dist/schemas/link.schema.json +0 -2
  268. package/dist/schemas/provider-subsets.d.ts +136 -0
  269. package/dist/schemas/registry.d.ts +140 -0
  270. package/dist/schemas/tool-defs.d.ts +121 -0
  271. package/dist/schemas.d.ts +5 -0
  272. package/dist/schemas.js +717 -0
  273. package/dist/solid-BGYSJyHG.js +22960 -0
  274. package/dist/solid-Dt2nEwfl.js +20194 -0
  275. package/dist/solid.d.ts +66 -0
  276. package/dist/solid.js +261 -0
  277. package/dist/solid.server.d.ts +5 -0
  278. package/dist/solid.server.js +261 -0
  279. package/dist/state/index.d.ts +14 -4
  280. package/dist/state/messages.d.ts +8 -3
  281. package/dist/state/mock.d.ts +46 -0
  282. package/dist/state/parts.d.ts +85 -0
  283. package/dist/state/stream.d.ts +15 -9
  284. package/dist/state.d.ts +5 -0
  285. package/dist/state.js +253 -84
  286. package/dist/ui/action-icons.d.ts +1 -1
  287. package/dist/ui/collapsible.d.ts +11 -6
  288. package/dist/ui/dropdown.d.ts +47 -42
  289. package/dist/ui/pane-group.d.ts +1 -1
  290. package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-B44X69AG.js} +1 -1
  291. package/dist/variant-aurora-BRhV8Flk.js +391 -0
  292. package/dist/variant-aurora-Ds5ou9BH.js +381 -0
  293. package/dist/variant-custom-B20FhtYj.js +170 -0
  294. package/dist/{variant-custom-Dif-IV4u.js → variant-custom-BvA1Schl.js} +1 -1
  295. package/dist/variant-custom-D6Rtvneb.js +200 -0
  296. package/dist/{variant-wave-DbfNdvSi.js → variant-wave-BUQtkryq.js} +1 -1
  297. package/dist/variant-wave-BVYnqy9L.js +218 -0
  298. package/dist/variant-wave-DXC6_LcH.js +208 -0
  299. package/dist/wire/chunk.d.ts +171 -0
  300. package/dist/wire/consume.d.ts +26 -0
  301. package/dist/wire/encode.d.ts +221 -0
  302. package/dist/wire/files.d.ts +116 -0
  303. package/dist/wire/formats/anthropic.d.ts +2 -0
  304. package/dist/wire/formats/openai.d.ts +5 -0
  305. package/dist/wire/index.d.ts +16 -0
  306. package/dist/wire/media-types.d.ts +106 -0
  307. package/dist/wire/read.d.ts +26 -0
  308. package/dist/wire/sink-helpers.d.ts +21 -0
  309. package/dist/wire/sse.d.ts +33 -0
  310. package/dist/wire.d.ts +5 -53
  311. package/dist/wire.js +1126 -0
  312. package/frameworks/react/index.tsx +191 -158
  313. package/frameworks/react/runtime.tsx +21 -1
  314. package/frameworks/react/use-kai-chat.tsx +11 -1
  315. package/llms-full.txt +774 -151
  316. package/llms.txt +57 -5
  317. package/package.json +62 -8
  318. package/src/agent-tooling/archetypes.ts +127 -0
  319. package/src/agent-tooling/integrations/anthropic.ts +436 -0
  320. package/src/agent-tooling/integrations/cloudflare.ts +141 -52
  321. package/src/agent-tooling/integrations/langgraph.ts +80 -13
  322. package/src/agent-tooling/integrations/mastra.ts +161 -12
  323. package/src/agent-tooling/integrations/mock.ts +47 -8
  324. package/src/agent-tooling/integrations/ollama.ts +68 -24
  325. package/src/agent-tooling/integrations/openai.ts +89 -0
  326. package/src/agent-tooling/integrations/openrouter.ts +58 -8
  327. package/src/agent-tooling/integrations/pi.ts +104 -23
  328. package/src/agent-tooling/integrations/pydantic-ai.ts +61 -5
  329. package/src/agent-tooling/integrations/vercel-ai-sdk.ts +120 -13
  330. package/src/agent-tooling/mcp/manifest.ts +206 -25
  331. package/src/agent-tooling/mcp/tools/debug.ts +13 -7
  332. package/src/agent-tooling/mcp/tools/reference.ts +285 -6
  333. package/src/agent-tooling/mcp/tools/scaffold.ts +4152 -661
  334. package/src/agent-tooling/registry.ts +74 -0
  335. package/src/agent-tooling/types.ts +361 -1
  336. package/src/components/artifact-card.tsx +120 -0
  337. package/src/components/audio-visualizer/index.tsx +9 -0
  338. package/src/components/audio-visualizer/labs/lab-choreography.ts +187 -0
  339. package/src/components/audio-visualizer/labs/lab-shaders.ts +363 -0
  340. package/src/components/audio-visualizer/labs/lab-visualizer.tsx +102 -0
  341. package/src/components/audio-visualizer/shader-canvas.tsx +31 -1
  342. package/src/components/card-fallback.tsx +42 -10
  343. package/src/components/card-renderer.tsx +146 -9
  344. package/src/components/chat-container.tsx +4 -0
  345. package/src/components/chat-thread.tsx +128 -52
  346. package/src/components/choice-card.tsx +17 -29
  347. package/src/components/composer.tsx +12 -2
  348. package/src/components/confirm-card.tsx +24 -20
  349. package/src/components/context.tsx +30 -16
  350. package/src/components/conversation-item.tsx +6 -0
  351. package/src/components/conversation-list.tsx +18 -2
  352. package/src/components/file-tree.tsx +11 -22
  353. package/src/components/file-upload.tsx +14 -8
  354. package/src/components/form.tsx +14 -47
  355. package/src/components/loader.tsx +39 -12
  356. package/src/components/message-skills.tsx +4 -0
  357. package/src/components/message.tsx +294 -46
  358. package/src/components/model-switcher.tsx +38 -8
  359. package/src/components/reasoning.tsx +92 -5
  360. package/src/components/response-compare-types.ts +25 -0
  361. package/src/components/response-compare.tsx +4 -9
  362. package/src/components/source.tsx +50 -24
  363. package/src/components/tasks-card.tsx +10 -33
  364. package/src/components/thread.tsx +84 -42
  365. package/src/components/toast.tsx +17 -6
  366. package/src/components/tool-classify.ts +26 -0
  367. package/src/components/tool-types.ts +31 -1
  368. package/src/elements/agent-card.tsx +11 -11
  369. package/src/elements/artifact.tsx +15 -7
  370. package/src/elements/attachments.tsx +6 -4
  371. package/src/elements/avatar.tsx +1 -1
  372. package/src/elements/button.tsx +29 -6
  373. package/src/elements/card.tsx +2 -2
  374. package/src/elements/cards.tsx +109 -14
  375. package/src/elements/chain-of-thought.tsx +14 -10
  376. package/src/elements/chat-scope-picker.tsx +9 -7
  377. package/src/elements/chat-types.ts +59 -6
  378. package/src/elements/chat-workspace.tsx +50 -9
  379. package/src/elements/chat.tsx +90 -3
  380. package/src/elements/choice.tsx +8 -8
  381. package/src/elements/coachmark.tsx +1 -1
  382. package/src/elements/command.tsx +8 -23
  383. package/src/elements/compare.tsx +7 -6
  384. package/src/elements/compiled.css +1 -1
  385. package/src/elements/composer.tsx +8 -8
  386. package/src/elements/confirm-card.tsx +9 -9
  387. package/src/elements/context-meter.tsx +4 -18
  388. package/src/elements/conversation-list.tsx +14 -9
  389. package/src/elements/default-input.tsx +131 -8
  390. package/src/elements/define.tsx +178 -43
  391. package/src/elements/editable-label.tsx +17 -2
  392. package/src/elements/element-data-types.ts +112 -0
  393. package/src/elements/element-meta.json +1624 -306
  394. package/src/elements/element-types.d.ts +2645 -214
  395. package/src/elements/feedback-bar.tsx +1 -1
  396. package/src/elements/file-tree.tsx +1 -1
  397. package/src/elements/file-upload.tsx +1 -1
  398. package/src/elements/form.tsx +14 -6
  399. package/src/elements/input.tsx +1 -1
  400. package/src/elements/kbd.tsx +1 -1
  401. package/src/elements/menu.tsx +40 -32
  402. package/src/elements/message-skills.tsx +7 -9
  403. package/src/elements/message.tsx +200 -32
  404. package/src/elements/model-switcher.tsx +5 -3
  405. package/src/elements/pane.tsx +1 -1
  406. package/src/elements/prompt-dock.tsx +8 -8
  407. package/src/elements/prompt-input.tsx +10 -10
  408. package/src/elements/prompt-suggestions.tsx +7 -4
  409. package/src/elements/reasoning.tsx +1 -1
  410. package/src/elements/register.ts +9 -0
  411. package/src/elements/resizable.globals.d.ts +36 -0
  412. package/src/elements/resizable.tsx +24 -13
  413. package/src/elements/response-stream.tsx +1 -1
  414. package/src/elements/scroll-button.tsx +1 -1
  415. package/src/elements/search.tsx +6 -1
  416. package/src/elements/segmented.tsx +5 -11
  417. package/src/elements/separator.tsx +1 -1
  418. package/src/elements/slot-text.ts +73 -0
  419. package/src/elements/slots.ts +67 -24
  420. package/src/elements/source.tsx +21 -22
  421. package/src/elements/switch.tsx +3 -3
  422. package/src/elements/tasks.tsx +5 -4
  423. package/src/elements/thread.tsx +36 -4
  424. package/src/elements/toast.tsx +3 -2
  425. package/src/elements/tool.tsx +1 -1
  426. package/src/elements/validate-messages.ts +76 -0
  427. package/src/elements/voice-input.tsx +7 -7
  428. package/src/elements/voice-output.tsx +4 -4
  429. package/src/index.ts +145 -6
  430. package/src/primitives/card-component-types.ts +63 -0
  431. package/src/primitives/card-data-types.ts +312 -0
  432. package/src/primitives/card-recovery.ts +13 -2
  433. package/src/primitives/card-registry.tsx +34 -23
  434. package/src/primitives/card-schemas/artifact.schema.json +92 -0
  435. package/src/primitives/card-schemas/embed.schema.json +0 -2
  436. package/src/primitives/card-schemas/link.schema.json +0 -2
  437. package/src/primitives/card-tags.ts +61 -0
  438. package/src/primitives/card-validate-cards.ts +255 -0
  439. package/src/primitives/card-validate-generator.testlib.ts +38 -0
  440. package/src/primitives/card-validate-schemas.ts +58 -0
  441. package/src/primitives/card-validate.ts +48 -20
  442. package/src/primitives/create-tween.ts +54 -2
  443. package/src/primitives/message-feedback.ts +3 -2
  444. package/src/primitives/use-audio-analysis.ts +20 -1
  445. package/src/primitives/use-sequencer.ts +20 -1
  446. package/src/schemas/from-tool-call.ts +151 -0
  447. package/src/schemas/index.ts +340 -0
  448. package/src/schemas/provider-subsets.ts +538 -0
  449. package/src/schemas/registry.ts +355 -0
  450. package/src/schemas/tool-defs.ts +492 -0
  451. package/src/solid.ts +150 -0
  452. package/src/state/index.ts +27 -1
  453. package/src/state/messages.ts +21 -4
  454. package/src/state/mock.ts +211 -0
  455. package/src/state/parts.ts +295 -0
  456. package/src/state/stream.ts +56 -58
  457. package/src/ui/collapsible.tsx +17 -5
  458. package/src/ui/dropdown.tsx +46 -12
  459. package/src/ui/overlay.tsx +10 -4
  460. package/src/wire/chunk.ts +201 -0
  461. package/src/wire/consume.ts +440 -0
  462. package/src/wire/encode.ts +689 -0
  463. package/src/wire/files.ts +342 -0
  464. package/src/wire/formats/anthropic.ts +267 -0
  465. package/src/wire/formats/openai.ts +187 -0
  466. package/src/wire/index.ts +73 -0
  467. package/src/wire/media-types.ts +344 -0
  468. package/src/wire/read.ts +152 -0
  469. package/src/wire/sink-helpers.ts +50 -0
  470. package/src/wire/sse.ts +140 -0
  471. package/dist/create-tween-hvpmSuwW.js +0 -7
  472. package/dist/elements/chunks/arrow-left-DQocUFvy.js +0 -1
  473. package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +0 -1
  474. package/dist/elements/chunks/card-BkHbp4BA.js +0 -1
  475. package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +0 -1
  476. package/dist/elements/chunks/check-B9-gn6SS.js +0 -1
  477. package/dist/elements/chunks/chevron-down-BNsxc2hk.js +0 -1
  478. package/dist/elements/chunks/chevron-right-Hv00StBO.js +0 -1
  479. package/dist/elements/chunks/circle-0e3KJTDr.js +0 -1
  480. package/dist/elements/chunks/circle-check-BNAS0JEy.js +0 -1
  481. package/dist/elements/chunks/code-block-BFUHn6Va.js +0 -1
  482. package/dist/elements/chunks/context-Cb7k4F-v.js +0 -1
  483. package/dist/elements/chunks/conversation-list-CvoAkWhN.js +0 -1
  484. package/dist/elements/chunks/create-tween-oVvAIG8r.js +0 -7
  485. package/dist/elements/chunks/default-input-Cqqilg9t.js +0 -1
  486. package/dist/elements/chunks/define-D1din7Ld.js +0 -1
  487. package/dist/elements/chunks/hover-card-Cmm6Q53m.js +0 -1
  488. package/dist/elements/chunks/message-BqyXDN3-.js +0 -1
  489. package/dist/elements/chunks/message-feedback-Djr3z6Yb.js +0 -1
  490. package/dist/elements/chunks/message-square-vFAgbDaX.js +0 -1
  491. package/dist/elements/chunks/model-switcher-B94YAKsM.js +0 -1
  492. package/dist/elements/chunks/reasoning-DTpCGtnY.js +0 -1
  493. package/dist/elements/chunks/scroll-button-B0cH5fXf.js +0 -1
  494. package/dist/elements/chunks/skeleton-DSXW5Yya.js +0 -1
  495. package/dist/elements/chunks/slots--V19HwUb.js +0 -1
  496. package/dist/elements/chunks/textarea-CUwqAX0G.js +0 -1
  497. package/dist/elements/chunks/tooltip-CgBZCVKp.js +0 -1
  498. package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +0 -1
  499. package/dist/elements/chunks/x-GRUeeQFT.js +0 -1
  500. package/dist/host-embed.d.ts +0 -33
  501. package/dist/kai-provider.d.ts +0 -2
  502. package/dist/origin.d.ts +0 -5
  503. package/dist/provider-runtime.d.ts +0 -27
  504. package/dist/register-impl-DQyejdfb.js +0 -145
  505. package/dist/validate.d.ts +0 -4
  506. package/dist/version.d.ts +0 -4
  507. package/src/components/component-meta.json +0 -4550
  508. package/src/elements/card-media.jpg +0 -0
  509. package/src/elements/resizable.d.ts +0 -27
  510. package/src/elements/video-poster.jpg +0 -0
@@ -1,12 +1,12 @@
1
1
  import { JSX, Accessor } from 'solid-js';
2
- import { AsTag } from './overlay';
2
+ import { AsTag } from './overlay.js';
3
3
  /** Imperative open controller, handed to a parent (e.g. the kai-menu facade) via
4
4
  * `controllerRef` so it can drive/observe the Dropdown's open state. */
5
5
  export interface DropdownController {
6
6
  open: Accessor<boolean>;
7
7
  setOpen: (v: boolean) => void;
8
8
  }
9
- export declare function Dropdown(props: {
9
+ export interface DropdownProps {
10
10
  children: JSX.Element;
11
11
  /** Initial open state (uncontrolled seed). */
12
12
  defaultOpen?: boolean;
@@ -14,40 +14,65 @@ export declare function Dropdown(props: {
14
14
  disabled?: boolean;
15
15
  /** Receive the open controller (open accessor + setOpen) once mounted. */
16
16
  controllerRef?: (api: DropdownController) => void;
17
- }): JSX.Element;
18
- export declare function DropdownTrigger(props: {
17
+ }
18
+ export interface DropdownTriggerProps {
19
+ /** Render as a different tag/component; defaults to a button. */
19
20
  as?: AsTag;
20
21
  children?: JSX.Element;
21
22
  class?: string;
22
- [k: string]: any;
23
- }): JSX.Element;
24
- export declare function DropdownContent(props: {
23
+ /** Remaining attributes are spread onto the rendered trigger. */
24
+ [k: string]: unknown;
25
+ }
26
+ export interface DropdownContentProps {
25
27
  children: JSX.Element;
26
28
  class?: string;
27
- }): JSX.Element;
28
- export declare function DropdownItem(props: {
29
+ }
30
+ export interface DropdownItemProps {
29
31
  children: JSX.Element;
30
32
  class?: string;
31
33
  onSelect?: () => void;
32
34
  disabled?: boolean;
33
- }): JSX.Element;
35
+ }
36
+ export interface DropdownSeparatorProps {
37
+ class?: string;
38
+ }
39
+ export interface DropdownLabelProps {
40
+ children: JSX.Element;
41
+ class?: string;
42
+ }
43
+ export interface DropdownCheckboxItemProps extends DropdownItemProps {
44
+ checked?: boolean;
45
+ }
46
+ export interface DropdownRadioItemProps extends DropdownItemProps {
47
+ checked?: boolean;
48
+ }
49
+ export interface DropdownSubProps {
50
+ children: JSX.Element;
51
+ }
52
+ export interface DropdownSubTriggerProps {
53
+ children: JSX.Element;
54
+ class?: string;
55
+ }
56
+ export interface DropdownSubContentProps {
57
+ children: JSX.Element;
58
+ class?: string;
59
+ }
60
+ export declare function Dropdown(props: DropdownProps): JSX.Element;
61
+ export declare function DropdownTrigger(props: DropdownTriggerProps): JSX.Element;
62
+ export declare function DropdownContent(props: DropdownContentProps): JSX.Element;
63
+ export declare function DropdownItem(props: DropdownItemProps): JSX.Element;
34
64
  /**
35
65
  * A thin, non-interactive divider between groups of items.
36
66
  * a11y: `role="separator"` — exposed to AT as a group boundary; not in the
37
67
  * roving-focus tab order (the `[role="menuitem"]` query skips it).
38
68
  */
39
- export declare function DropdownSeparator(props: {
40
- class?: string;
41
- }): JSX.Element;
69
+ export declare function DropdownSeparator(props: DropdownSeparatorProps): JSX.Element;
42
70
  /**
43
71
  * A non-interactive section header.
44
72
  * a11y: a plain muted label — NOT a menuitem and NOT focusable, so roving focus
45
73
  * skips it; it labels the items that follow visually only (`select-none`).
46
74
  */
47
- export declare function DropdownLabel(props: {
48
- children: JSX.Element;
49
- class?: string;
50
- }): JSX.Element;
75
+ export declare function DropdownLabel(props: DropdownLabelProps): JSX.Element;
51
76
  /**
52
77
  * A togglable menu item.
53
78
  * a11y: `role="menuitemcheckbox"` + `aria-checked`. Activating fires `onSelect`
@@ -56,13 +81,7 @@ export declare function DropdownLabel(props: {
56
81
  * present — aligns with the plain items above it instead of being pushed in by a
57
82
  * reserved leading check column.
58
83
  */
59
- export declare function DropdownCheckboxItem(props: {
60
- children: JSX.Element;
61
- class?: string;
62
- checked?: boolean;
63
- onSelect?: () => void;
64
- disabled?: boolean;
65
- }): JSX.Element;
84
+ export declare function DropdownCheckboxItem(props: DropdownCheckboxItemProps): JSX.Element;
66
85
  /**
67
86
  * A single-select (radio) menu item.
68
87
  * a11y: `role="menuitemradio"` + `aria-checked`. Behaves like the checkbox item —
@@ -71,13 +90,7 @@ export declare function DropdownCheckboxItem(props: {
71
90
  * content aligns with plain items. Group membership is the consumer's concern;
72
91
  * this primitive just renders the selected state and reports the click.
73
92
  */
74
- export declare function DropdownRadioItem(props: {
75
- children: JSX.Element;
76
- class?: string;
77
- checked?: boolean;
78
- onSelect?: () => void;
79
- disabled?: boolean;
80
- }): JSX.Element;
93
+ export declare function DropdownRadioItem(props: DropdownRadioItemProps): JSX.Element;
81
94
  /**
82
95
  * A nested menu group. Mirrors the `Dropdown` context shape with its own open
83
96
  * signal + trigger/content refs, plus a small close-delay so a pointer can cross
@@ -87,9 +100,7 @@ export declare function DropdownRadioItem(props: {
87
100
  * (Escape/outside-click/select), `useDismiss` on the parent unmounts the whole
88
101
  * content tree, which tears this provider down and drops the sub with it.
89
102
  */
90
- export declare function DropdownSub(props: {
91
- children: JSX.Element;
92
- }): JSX.Element;
103
+ export declare function DropdownSub(props: DropdownSubProps): JSX.Element;
93
104
  /**
94
105
  * The item that opens a submenu.
95
106
  * a11y: `role="menuitem"` + `aria-haspopup="menu"` + `aria-expanded`, trailing
@@ -97,10 +108,7 @@ export declare function DropdownSub(props: {
97
108
  * keyboard-open also moves focus into the sub's first item. ArrowRight/Enter are
98
109
  * swallowed so the parent menu doesn't also act on them.
99
110
  */
100
- export declare function DropdownSubTrigger(props: {
101
- children: JSX.Element;
102
- class?: string;
103
- }): JSX.Element;
111
+ export declare function DropdownSubTrigger(props: DropdownSubTriggerProps): JSX.Element;
104
112
  /**
105
113
  * The submenu surface — same portal/positioning/roving-focus core as
106
114
  * DropdownContent, anchored `right-start` off its trigger.
@@ -108,7 +116,4 @@ export declare function DropdownSubTrigger(props: {
108
116
  * ArrowUp/Down/Home/End rove within; typeahead included (matches DropdownContent).
109
117
  * Keyboard-open focuses the first item.
110
118
  */
111
- export declare function DropdownSubContent(props: {
112
- children: JSX.Element;
113
- class?: string;
114
- }): JSX.Element;
119
+ export declare function DropdownSubContent(props: DropdownSubContentProps): JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
- import { PaneStatusTone } from './pane';
2
+ import { PaneStatusTone } from './pane.js';
3
3
  /** The work state of a tab's agent/process, mapped to the kit's tool / status
4
4
  * hues — the SAME vocabulary as {@link './pane'.PaneStatus} and the AgentCard:
5
5
  * working = blue, idle = muted, done = green, error = red, blocked = amber. */
@@ -1,4 +1,4 @@
1
- import{i as x,s as y,c as b,a as w,C as R,t as A}from"./register-impl-DQyejdfb.js";import{d as u,j as S,b as _,f as k,o as M}from"./kai.es.js";import{c as n,h as T,S as W,D as C}from"./create-tween-hvpmSuwW.js";const q=`
1
+ import{i as x,s as y,c as b,a as w,C as R,t as A}from"./register-impl-AxIlqjo7.js";import{d as u,j as S,b as _,f as k,o as M}from"./kai.es.js";import{c as n,h as T,S as W,D as C}from"./create-tween-qs-jjvNA.js";const q=`
2
2
  const float PI = 3.14159265359;
3
3
  // Strand phase span: 0.5 + pi (fact sheet section 2's "sigma", the
4
4
  // midpoint of the interval [1, 2*pi] with the interpolation knob fixed
@@ -0,0 +1,391 @@
1
+ import { insert as x, createComponent as y, effect as b, setAttribute as w, className as R, setStyleProperty as A, template as S } from "solid-js/web";
2
+ import { createEffect as u, createSignal as k, onCleanup as C } from "solid-js";
3
+ import { c as l, S as T, h as _, D as M } from "./create-tween-DmTUaXWE.js";
4
+ import { C as W } from "./solid-BGYSJyHG.js";
5
+ const z = `
6
+ const float PI = 3.14159265359;
7
+ // Strand phase span: 0.5 + pi (fact sheet section 2's "sigma", the
8
+ // midpoint of the interval [1, 2*pi] with the interpolation knob fixed
9
+ // at 0.5).
10
+ const float STRAND_SIGMA = 0.5 + PI;
11
+ const int STRAND_COUNT = 36;
12
+
13
+ // 4-octave directional-sine warp cascade. M0 and the per-octave rotation B
14
+ // (cos 0.6, sin 0.8, an exact ~53.13 degree rotation) are fact sheet
15
+ // section 2's stated matrices; M1/M2/M3 = B composed with the previous
16
+ // octave's matrix, and each v_k is the first row of M_k. Hand-derived and
17
+ // checked against the fact sheet's own listed v_0..v_3 below, not copied
18
+ // from any source.
19
+ const mat2 WARP_M0 = mat2(0.6, 0.25, -0.25, 0.9);
20
+ const mat2 WARP_M1 = mat2(0.16, 0.63, -0.87, 0.34);
21
+ const mat2 WARP_M2 = mat2(-0.408, 0.506, -0.794, -0.492);
22
+ const mat2 WARP_M3 = mat2(-0.6496, -0.0228, -0.0828, -0.9304);
23
+ const vec2 WARP_V0 = vec2(0.600, -0.250);
24
+ const vec2 WARP_V1 = vec2(0.160, -0.870);
25
+ const vec2 WARP_V2 = vec2(-0.408, -0.794);
26
+ const vec2 WARP_V3 = vec2(-0.650, -0.083);
27
+
28
+ // Displaces p through all 4 octaves. Octave k's phase carries k*tau, so
29
+ // octave 0 is static in time and octave 3 moves fastest -- fine
30
+ // corrugation slides across coarse folds, which reads as flowing wind
31
+ // (fact sheet section 2, "Mechanism of the fold / wind").
32
+ vec2 auroraWarp(vec2 p, float phi, float tau, float freq, float amp) {
33
+ vec2 x = p;
34
+ float f = freq;
35
+ float a = amp;
36
+
37
+ vec2 q = WARP_M0 * x;
38
+ vec2 w = sin(f * q + vec2(phi));
39
+ x += (a / f) * WARP_V0 * w;
40
+ f *= 1.4;
41
+ a *= 1.0 + 0.1 * (max(w.x, w.y) - 1.0);
42
+
43
+ q = WARP_M1 * x;
44
+ w = sin(f * q + vec2(tau + phi));
45
+ x += (a / f) * WARP_V1 * w;
46
+ f *= 1.4;
47
+ a *= 1.0 + 0.1 * (max(w.x, w.y) - 1.0);
48
+
49
+ q = WARP_M2 * x;
50
+ w = sin(f * q + vec2(2.0 * tau + phi));
51
+ x += (a / f) * WARP_V2 * w;
52
+ f *= 1.4;
53
+ a *= 1.0 + 0.1 * (max(w.x, w.y) - 1.0);
54
+
55
+ q = WARP_M3 * x;
56
+ w = sin(f * q + vec2(3.0 * tau + phi));
57
+ x += (a / f) * WARP_V3 * w;
58
+
59
+ return x;
60
+ }
61
+
62
+ vec3 auroraRgb2Hsv(vec3 c) {
63
+ vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
64
+ vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
65
+ vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
66
+ float d = q.x - min(q.w, q.y);
67
+ return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + 1.0e-10)), d / (q.x + 1.0e-10), q.x);
68
+ }
69
+
70
+ vec3 auroraHsv2Rgb(vec3 c) {
71
+ vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
72
+ vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
73
+ return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
74
+ }
75
+
76
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
77
+ // Fact sheet section 2: u in [0,1]^2, centered point p = u - 0.5, no
78
+ // aspect correction -- the element is forced square by CSS, so this is
79
+ // only correct on a square canvas (true for every audio-visualizer size).
80
+ vec2 uv = fragCoord / iResolution.xy;
81
+ vec2 p = uv - 0.5;
82
+
83
+ // Solid-body rotation of the sampling frame (module doc, departure 1).
84
+ // gl_FragCoord's y-up frame is mirrored against the screen's y-down one,
85
+ // so the sign here is what makes positive uRotation read CLOCKWISE on
86
+ // screen -- verified empirically against the audit's estimator (which
87
+ // measures +10 for uRotation = +10 deg/s with the wind frozen).
88
+ float rotA = -uRotation * iTime;
89
+ float rc = cos(rotA);
90
+ float rs = sin(rotA);
91
+ p = mat2(rc, -rs, rs, rc) * p;
92
+
93
+ // Negative tau: time-reversing the octave phases flips the wind's
94
+ // emergent angular drift from counter-clockwise (measured on the original)
95
+ // to the reference's clockwise, without touching any static property --
96
+ // lobes, radii, spectra are distribution-identical (module doc,
97
+ // departure 1).
98
+ float tau = -iTime * uSpeed;
99
+ float freq = max(2.0 + 13.0 * uComplexity, 1.0);
100
+ float amp = uAmplitude;
101
+ float ringRadius = uScale;
102
+
103
+ vec3 hsv = auroraRgb2Hsv(uColor);
104
+ // Chain-seed strand, phase -1/36 NOT scaled by STRAND_SIGMA (fact sheet
105
+ // section 2), so inter-strand spacing is defined for strand 1 too.
106
+ vec2 prevStrand = auroraWarp(p, -1.0 / float(STRAND_COUNT), tau, freq, amp);
107
+
108
+ vec3 accum = vec3(0.0);
109
+ for (int j = 1; j <= STRAND_COUNT; j++) {
110
+ float frac = float(j) / float(STRAND_COUNT);
111
+ float phi = frac * STRAND_SIGMA;
112
+ vec2 strand = auroraWarp(p, phi, tau, freq, amp);
113
+
114
+ // Signed distance to the (warped) ring, per strand: negative inside,
115
+ // positive outside -- the sign feeds the asymmetric edge width below.
116
+ float sd = length(strand) - ringRadius;
117
+ float dist = abs(sd);
118
+ // Inter-strand spacing through the chain: an analytic blur exactly
119
+ // proportional to how far this strand's warp has drifted from its
120
+ // neighbour's. Fanned regions (large spacing) fuse into soft veils;
121
+ // bunched regions (small spacing) stay crisp -- this is what turns 36
122
+ // discrete rings into an aurora (fact sheet section 2). The 2.3 growth
123
+ // rate (fact sheet's own is 2.0) and the 0.66x outer-side factor are
124
+ // the parity edge calibration: the reference holds a 10-90% rise of
125
+ // ~6-10px(2x) with the OUTER edge always the sharper of the two
126
+ // (module doc, departure 4).
127
+ float spacing = length(strand - prevStrand);
128
+ float edgeWidth = 0.01 + max(exp(2.3 * spacing) - 1.0, 0.001);
129
+ edgeWidth *= mix(1.0, 0.66, step(0.0, sd));
130
+ float coverage = 1.0 - smoothstep(0.0, 1.0, dist / edgeWidth);
131
+
132
+ // Fixed hue drift across the strand fan, matching the fact sheet's
133
+ // documented colorShift default (0.05 turns at weight 0.3, i.e. 0.015
134
+ // turns end to end); earliest strand shifts most.
135
+ vec3 strandColor = auroraHsv2Rgb(vec3(fract(hsv.x + (1.0 - frac) * 0.015), hsv.y, hsv.z));
136
+ accum += coverage * strandColor;
137
+ prevStrand = strand;
138
+ }
139
+
140
+ // Mean soft coverage across all 36 strands (fact sheet section 2's image
141
+ // accumulator I). The inverse-distance glow accumulator G is omitted: the
142
+ // fact sheet states its gain ships as 0, so it contributes nothing.
143
+ vec3 image = accum / float(STRAND_COUNT);
144
+
145
+ // Deterministic per-pixel dither, +/- 1/510, identical on all channels
146
+ // (fact sheet section 3). Kept as a plain vec3 offset, not pre-mixed into
147
+ // the image accumulator, so each branch can add it at the point the fact
148
+ // sheet actually specifies (see the dark branch below).
149
+ float n = fract(sin(dot(fragCoord, vec2(12.9898, 78.233))) * 43758.5453);
150
+ vec3 dither = vec3((n - 0.5) / 255.0);
151
+
152
+ float brightness = uIntensity;
153
+ vec3 rgb;
154
+ float alpha;
155
+
156
+ if (uTheme < 0.5) {
157
+ // Dark pipeline, parity-calibrated (module doc, departures 2 + 3).
158
+ // RGB1 = 1.2 * I, THEN add dither (fact sheet order: pre-gain first so
159
+ // the dither's written amplitude stays +/- 1/510), then floor at 0 --
160
+ // a negative dither on a near-black pixel would otherwise be blown up
161
+ // by the chroma-preserving rescale's division right below.
162
+ vec3 x1 = max(1.2 * image + dither, 0.0);
163
+
164
+ // Chroma-preserving tonemap: knee the MAX channel (11x/(1+11x) -- a
165
+ // steeper knee than the fact sheet's per-channel 4x/(1+4x)) and rescale
166
+ // the vector, so ribbon cores land on a stable brightness level largely
167
+ // independent of how thin the veils have fanned (the audit measured the
168
+ // per-channel map crushing spread-out states to ~half the reference's
169
+ // rendered brightness) while hue and saturation pass through untouched
170
+ // for the HSV shape-up to own.
171
+ float mxc = max(x1.r, max(x1.g, x1.b));
172
+ float tmMax = 11.0 * mxc / (1.0 + 11.0 * mxc);
173
+ vec3 tm = x1 * (tmMax / max(mxc, 1.0e-5));
174
+
175
+ // Rendered-colour calibration: hue +0.013 turns (audit target
176
+ // ~197.5deg for the default accent), saturation proportional to the
177
+ // caller's own (a desaturated accent stays desaturated) but rising
178
+ // with the pixel's value and capped at 0.98 -- Rob's reference:
179
+ // saturation RISES with brightness, and nothing is ever white.
180
+ vec3 hv = auroraRgb2Hsv(tm);
181
+ hv.x = fract(hv.x + 0.013);
182
+ hv.y = min(hv.y * (1.02 + 0.35 * hv.z), 0.98);
183
+ tm = auroraHsv2Rgb(hv);
184
+
185
+ // Brightness compression (departure 3): uIntensity DRIVES 0.5..2.5 at
186
+ // the thinking/connecting pulse but must RENDER inside roughly
187
+ // 0.5..0.65 mean brightness, never dropping the ring below visibility.
188
+ // Two compressive powers (colour flatter than alpha) plus a smoothstep
189
+ // alpha knee that lifts ribbon cores to full opacity while cutting the
190
+ // dim tails -- which is also what keeps the centre transparent and the
191
+ // edges crisp. max(brightness, 0.05) only guards pow() against a
192
+ // (contractually impossible) zero or negative uniform.
193
+ float bVal = pow(max(brightness, 0.05) / 1.5, 0.07);
194
+ float bAlpha = 0.97 * pow(max(brightness, 0.05) / 1.5, 0.09);
195
+ float luma = dot(tm, vec3(0.299, 0.587, 0.114));
196
+ // Clamped to [0,1] before the premultiply below, mirroring the light
197
+ // branch, so rgb * alpha <= alpha stays enforced for every input.
198
+ rgb = clamp(tm * bVal, 0.0, 1.0);
199
+ alpha = clamp(smoothstep(0.0, 0.50, luma) * bAlpha, 0.0, 1.0);
200
+ } else {
201
+ // Light pipeline (fact sheet section 4): RGB1 = I, then add dither;
202
+ // brightness curve on vector length, hue direction kept, saturation
203
+ // extrapolated 3x about gray.
204
+ vec3 x1 = image + dither;
205
+ float mag = length(x1);
206
+ vec3 dir = x1 / max(mag, 1.0e-5);
207
+ float mag2 = 2.0 * mag / (1.0 + 2.0 * mag);
208
+ vec3 x2 = dir * mag2;
209
+ float gray = dot(x2, vec3(0.2, 0.5, 0.1));
210
+ rgb = clamp(vec3(gray) + 3.0 * (x2 - vec3(gray)), 0.0, 1.0);
211
+ alpha = clamp(mag2 * clamp(brightness, 1.0, 2.0), 0.0, 1.0);
212
+ }
213
+
214
+ // PREMULTIPLIED output. Both branches above clamp their natural rgb to
215
+ // [0,1] before this line, which is what makes rgb * alpha <= alpha
216
+ // (componentwise) a property the code enforces unconditionally, not one
217
+ // that happens to hold for the inputs this was tested against. See the
218
+ // module doc above for why this departs from the fact sheet's own
219
+ // (deliberately non-premultiplied) pipeline.
220
+ fragColor = vec4(rgb * alpha, alpha);
221
+ }
222
+ `;
223
+ var P = /* @__PURE__ */ S("<div style=aspect-ratio:1>");
224
+ function f(e) {
225
+ switch (e) {
226
+ case "listening":
227
+ return {
228
+ intensity: [1.5, 2],
229
+ speed: 1,
230
+ complexity: 0.7,
231
+ amplitude: 1,
232
+ scale: 0.3,
233
+ rotation: 5.3
234
+ };
235
+ case "thinking":
236
+ return {
237
+ intensity: [0.5, 2.5],
238
+ speed: 1.5,
239
+ complexity: 1,
240
+ amplitude: 0.5,
241
+ scale: 0.3,
242
+ rotation: 9.4
243
+ };
244
+ case "connecting":
245
+ return {
246
+ intensity: [0.5, 2.5],
247
+ speed: 1.5,
248
+ complexity: 1,
249
+ amplitude: 0.5,
250
+ scale: 0.3,
251
+ // Clockwise like every other transitional state -- see the doc note
252
+ // above for the 2026-08-10 direction-unify rationale.
253
+ rotation: 5.5
254
+ };
255
+ case "speaking":
256
+ return {
257
+ intensity: 1.5,
258
+ speed: 3.5,
259
+ complexity: 1.25,
260
+ amplitude: 0.75,
261
+ scale: 0.3,
262
+ rotation: -3.5
263
+ };
264
+ // Dead-connection look: mirrors idle's resting targets for now. A
265
+ // dedicated arm so the pending LiveKit measurement (their aura may dim
266
+ // differently at disconnected) can adjust it in one line.
267
+ case "disconnected":
268
+ return {
269
+ intensity: 1,
270
+ speed: 0.5,
271
+ complexity: 0.4,
272
+ amplitude: 1.2,
273
+ scale: 0.2,
274
+ rotation: 0
275
+ };
276
+ case "idle":
277
+ default:
278
+ return {
279
+ intensity: 1,
280
+ speed: 0.5,
281
+ complexity: 0.4,
282
+ amplitude: 1.2,
283
+ scale: 0.2,
284
+ rotation: 0
285
+ };
286
+ }
287
+ }
288
+ function N() {
289
+ var s;
290
+ const [e, o] = k(!1);
291
+ if (typeof matchMedia == "function") {
292
+ const i = matchMedia("(prefers-color-scheme: dark)");
293
+ o(i.matches);
294
+ const n = (r) => o(r.matches);
295
+ (s = i.addEventListener) == null || s.call(i, "change", n), C(() => {
296
+ var r;
297
+ return (r = i.removeEventListener) == null ? void 0 : r.call(i, "change", n);
298
+ });
299
+ }
300
+ return e;
301
+ }
302
+ function V(e) {
303
+ const o = l(1), s = l(0.5), i = l(0.4), n = l(1.2), r = l(0.2), p = N(), m = () => e.dark ?? p();
304
+ u(() => {
305
+ const t = f(e.state), a = e.frozen ? {
306
+ duration: 0
307
+ } : {
308
+ duration: 0.5,
309
+ ease: "easeOut"
310
+ }, c = e.frozen ? {
311
+ duration: 0
312
+ } : {
313
+ duration: 0.35,
314
+ ease: "easeOut"
315
+ }, h = Array.isArray(t.intensity) && e.frozen ? t.intensity[0] : t.intensity;
316
+ o.to(h, Array.isArray(t.intensity) ? c : a), i.to(t.complexity, a), n.to(t.amplitude, a), r.to(t.scale, e.state === "listening" && !e.frozen ? {
317
+ type: "spring",
318
+ duration: 1,
319
+ bounce: 0.35
320
+ } : a), s.to(e.frozen ? 0 : t.speed, {
321
+ duration: 0
322
+ });
323
+ }), u(() => {
324
+ if (e.state !== "speaking") return;
325
+ const t = e.volume;
326
+ t > 0 && (r.animating() || r.to(0.2 + 0.2 * t));
327
+ });
328
+ const v = () => e.frozen ? 0 : f(e.state).rotation * Math.PI / 180, g = () => m() ? 0 : 1;
329
+ return (() => {
330
+ var t = P();
331
+ return x(t, y(T, {
332
+ fragment: z,
333
+ get precision() {
334
+ return e.size === "icon" || e.size === "sm" ? "mediump" : "highp";
335
+ },
336
+ get uniforms() {
337
+ return {
338
+ uColor: {
339
+ type: "3fv",
340
+ value: _(e.color ?? M)
341
+ },
342
+ uIntensity: {
343
+ type: "1f",
344
+ value: o.value()
345
+ },
346
+ uSpeed: {
347
+ type: "1f",
348
+ value: s.value()
349
+ },
350
+ uComplexity: {
351
+ type: "1f",
352
+ value: i.value()
353
+ },
354
+ uAmplitude: {
355
+ type: "1f",
356
+ value: n.value()
357
+ },
358
+ uScale: {
359
+ type: "1f",
360
+ value: r.value()
361
+ },
362
+ uTheme: {
363
+ type: "1f",
364
+ value: g()
365
+ },
366
+ uRotation: {
367
+ type: "1f",
368
+ value: v()
369
+ }
370
+ };
371
+ },
372
+ get animateWhenNotVisible() {
373
+ return e.animateWhenNotVisible;
374
+ },
375
+ onError: (a) => {
376
+ /not available/i.test(a) ? console.warn('<kai-audio-visualizer variant="aurora">: shader unavailable', a) : console.error('<kai-audio-visualizer variant="aurora">: shader error', a), e.onUnavailable();
377
+ }
378
+ })), b((a) => {
379
+ var c = e.state, h = e.class, d = `${W[e.size]}px`;
380
+ return c !== a.e && w(t, "data-kai-state", a.e = c), h !== a.t && R(t, a.t = h), d !== a.a && A(t, "height", a.a = d), a;
381
+ }, {
382
+ e: void 0,
383
+ t: void 0,
384
+ a: void 0
385
+ }), t;
386
+ })();
387
+ }
388
+ export {
389
+ f as auroraTargets,
390
+ V as default
391
+ };