@kitn.ai/ui 0.18.2 → 0.19.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 (201) hide show
  1. package/dist/components/thread.d.ts +54 -0
  2. package/dist/custom-elements.json +195 -0
  3. package/dist/elements/agent-card.js +1 -1
  4. package/dist/elements/artifact.js +1 -1
  5. package/dist/elements/attachments.js +1 -1
  6. package/dist/elements/autoloader.js +1 -1
  7. package/dist/elements/avatar.js +1 -1
  8. package/dist/elements/badge.js +1 -1
  9. package/dist/elements/button.js +1 -1
  10. package/dist/elements/card.js +1 -1
  11. package/dist/elements/cards.js +1 -1
  12. package/dist/elements/chain-of-thought.js +1 -1
  13. package/dist/elements/chat-scope-picker.js +1 -1
  14. package/dist/elements/chat-workspace.js +1 -1
  15. package/dist/elements/chat.js +1 -1
  16. package/dist/elements/checkpoint.js +1 -1
  17. package/dist/elements/choice.js +1 -1
  18. package/dist/elements/chunks/{Icon-C2LTALdM.js → Icon-11SRdjJ4.js} +1 -1
  19. package/dist/elements/chunks/action-icons-CtRg17uX.js +1 -0
  20. package/dist/elements/chunks/arrow-left-CifsGq8x.js +1 -0
  21. package/dist/elements/chunks/{attachments-DLJcWCDV.js → attachments-CBqQRh60.js} +1 -1
  22. package/dist/elements/chunks/{badge-BTNZTODL.js → badge-CxklEXQm.js} +1 -1
  23. package/dist/elements/chunks/{button-DBDZebGr.js → button-BD7lUvVB.js} +1 -1
  24. package/dist/elements/chunks/{card-YfCyI4fH.js → card-B-PRGXdj.js} +1 -1
  25. package/dist/elements/chunks/chat-thread-DIZbRIKG.js +1 -0
  26. package/dist/elements/chunks/check-CUKS495w.js +1 -0
  27. package/dist/elements/chunks/chevron-down-AELmYT1j.js +1 -0
  28. package/dist/elements/chunks/chevron-right-C8g26oKh.js +1 -0
  29. package/dist/elements/chunks/circle-DGcI8Cft.js +1 -0
  30. package/dist/elements/chunks/circle-check-DuU0IcBQ.js +1 -0
  31. package/dist/elements/chunks/{circle-x-pDtzlghQ.js → circle-x-mtjCO_Ok.js} +1 -1
  32. package/dist/elements/chunks/{code-block-DZ6mz6vs.js → code-block-BeWVttmU.js} +1 -1
  33. package/dist/elements/chunks/{collapsible-CWUAShMC.js → collapsible-DGjADCN6.js} +1 -1
  34. package/dist/elements/chunks/{composer-BZyPU6gD.js → composer-CavJww3d.js} +7 -3
  35. package/dist/elements/chunks/{context-Cx6eQA_G.js → context-CnlsNJSJ.js} +1 -1
  36. package/dist/elements/chunks/{conversation-list-C4xTQSpT.js → conversation-list-5O_KdI_I.js} +1 -1
  37. package/dist/elements/chunks/{default-input-BZcwyKcP.js → default-input-CB46cJJ1.js} +1 -1
  38. package/dist/elements/chunks/{define-CNSKFZCd.js → define-DfTe4zwZ.js} +1 -1
  39. package/dist/elements/chunks/{disclosure-BcBs--Jf.js → disclosure-BtFK3a-M.js} +1 -1
  40. package/dist/elements/chunks/{download-BDQwcFav.js → download-qJv1dS3M.js} +1 -1
  41. package/dist/elements/chunks/{dropdown-wgs8xCJZ.js → dropdown-UhtAueYR.js} +1 -1
  42. package/dist/elements/chunks/{ellipsis-CUiEJ6R1.js → ellipsis-B1sOOqiJ.js} +1 -1
  43. package/dist/elements/chunks/{external-link-DJUmC7g2.js → external-link-DToP_VKE.js} +1 -1
  44. package/dist/elements/chunks/{file-text-DOYfYvrh.js → file-text-BwUs_Pj4.js} +1 -1
  45. package/dist/elements/chunks/{file-tree-DQzNQrbr.js → file-tree-C6RhmSnX.js} +1 -1
  46. package/dist/elements/chunks/{folder-DBDUBANz.js → folder-H_Xp0GYP.js} +1 -1
  47. package/dist/elements/chunks/hover-card-Dn3yrk1l.js +1 -0
  48. package/dist/elements/chunks/icon-BrxJQXzC.js +1 -0
  49. package/dist/elements/chunks/{info-DBQl-m6e.js → info-11eT2q5H.js} +1 -1
  50. package/dist/elements/chunks/{input-DZD67EvW.js → input-B9oZKDfb.js} +1 -1
  51. package/dist/elements/chunks/{kbd-DbyVrlnU.js → kbd-D2fx3rWh.js} +1 -1
  52. package/dist/elements/chunks/{link-vko7AttA.js → link-B-RNYWNw.js} +1 -1
  53. package/dist/elements/chunks/{loader-Cg6rO8tQ.js → loader-BJh_aRlp.js} +1 -1
  54. package/dist/elements/chunks/{markdown-n3Xbj3PR.js → markdown-BIpjrDFv.js} +1 -1
  55. package/dist/elements/chunks/{message-CgKytiSB.js → message-CPfqj8Gi.js} +1 -1
  56. package/dist/elements/chunks/{message-feedback-Ds3-US0e.js → message-feedback-8uj0aVYh.js} +1 -1
  57. package/dist/elements/chunks/message-square-CCSQ4M9g.js +1 -0
  58. package/dist/elements/chunks/{minimize-2-3kCdE0q3.js → minimize-2-C9qkiTJg.js} +1 -1
  59. package/dist/elements/chunks/{model-switcher-BMtXGwLU.js → model-switcher-DRrMcRXH.js} +1 -1
  60. package/dist/elements/chunks/{overlay-B1-MBI6h.js → overlay-C8_FUL8q.js} +1 -1
  61. package/dist/elements/chunks/{paperclip-DDEfmkHc.js → paperclip-MA9hxLhW.js} +1 -1
  62. package/dist/elements/chunks/{progress-bar-Dwbiyv3s.js → progress-bar-y5G6HDjg.js} +1 -1
  63. package/dist/elements/chunks/{prompt-suggestion-9lvgFcEa.js → prompt-suggestion-LalWvCJy.js} +1 -1
  64. package/dist/elements/chunks/reasoning-CW3SDdb4.js +1 -0
  65. package/dist/elements/chunks/resizable-xhYF5lCQ.js +1 -0
  66. package/dist/elements/chunks/{rotate-cw-jpisOdOV.js → rotate-cw-2ndEXjgS.js} +1 -1
  67. package/dist/elements/chunks/{scroll-area-g5Ze3K6f.js → scroll-area-BzOPDXrZ.js} +1 -1
  68. package/dist/elements/chunks/scroll-button-B1x4cYqM.js +1 -0
  69. package/dist/elements/chunks/{separator-Bmjc5XyX.js → separator-CPvL5Xdl.js} +1 -1
  70. package/dist/elements/chunks/{settings-group-9imY3kRA.js → settings-group-BiIym17O.js} +1 -1
  71. package/dist/elements/chunks/{settings-Cz1bMJP9.js → settings-hmzIuNXD.js} +1 -1
  72. package/dist/elements/chunks/{share-BdenF0wQ.js → share-BbziTAzn.js} +1 -1
  73. package/dist/elements/chunks/skeleton-Bxhs1thL.js +1 -0
  74. package/dist/elements/chunks/{slots-DkZ-Cmha.js → slots--V19HwUb.js} +1 -1
  75. package/dist/elements/chunks/{star-DY6z1UUH.js → star-BHL3Va5p.js} +1 -1
  76. package/dist/elements/chunks/{store-th4VyJXM.js → store-tpnnWlxY.js} +1 -1
  77. package/dist/elements/chunks/{text-shimmer-CEi-tlXr.js → text-shimmer-1DCKivKx.js} +1 -1
  78. package/dist/elements/chunks/textarea-Czaowo9F.js +1 -0
  79. package/dist/elements/chunks/{thumbs-up-BR33KLfA.js → thumbs-up-CdLqA13R.js} +1 -1
  80. package/dist/elements/chunks/{toast-store-BEMda0fv.js → toast-store-BvBquUFA.js} +1 -1
  81. package/dist/elements/chunks/{tool-TMued3WO.js → tool-4P_ne8Go.js} +1 -1
  82. package/dist/elements/chunks/{tooltip-Cft_Rxiw.js → tooltip-CBeFqJKk.js} +1 -1
  83. package/dist/elements/chunks/{triangle-alert-B07fX3Q8.js → triangle-alert-BllqxXq8.js} +1 -1
  84. package/dist/elements/chunks/{use-card-resolution-M36zVciB.js → use-card-resolution-73xiddIW.js} +1 -1
  85. package/dist/elements/chunks/{video-MKp3LmNT.js → video-O9rA6k7S.js} +1 -1
  86. package/dist/elements/chunks/x-DeS3rQhx.js +1 -0
  87. package/dist/elements/coachmark.js +1 -1
  88. package/dist/elements/code-block.js +1 -1
  89. package/dist/elements/command.js +1 -1
  90. package/dist/elements/compare.js +1 -1
  91. package/dist/elements/composer.js +1 -1
  92. package/dist/elements/confirm-card.js +1 -1
  93. package/dist/elements/context-meter.js +1 -1
  94. package/dist/elements/conversation-list.js +1 -1
  95. package/dist/elements/dialog.js +1 -1
  96. package/dist/elements/editable-label.js +1 -1
  97. package/dist/elements/embed.js +1 -1
  98. package/dist/elements/empty.js +1 -1
  99. package/dist/elements/feedback-bar.js +1 -1
  100. package/dist/elements/file-tree.js +1 -1
  101. package/dist/elements/file-upload.js +1 -1
  102. package/dist/elements/form.js +1 -1
  103. package/dist/elements/hover-card.js +1 -1
  104. package/dist/elements/icon.js +1 -1
  105. package/dist/elements/image.js +1 -1
  106. package/dist/elements/input.js +1 -1
  107. package/dist/elements/kbd.js +1 -1
  108. package/dist/elements/link-preview.js +1 -1
  109. package/dist/elements/loader.js +1 -1
  110. package/dist/elements/markdown.js +1 -1
  111. package/dist/elements/menu.js +1 -1
  112. package/dist/elements/message-skills.js +1 -1
  113. package/dist/elements/message.js +1 -1
  114. package/dist/elements/model-switcher.js +1 -1
  115. package/dist/elements/nav.js +1 -1
  116. package/dist/elements/notice.js +1 -1
  117. package/dist/elements/pane-group.js +1 -1
  118. package/dist/elements/pane.js +1 -1
  119. package/dist/elements/popover.js +1 -1
  120. package/dist/elements/progress-bar.js +1 -1
  121. package/dist/elements/prompt-dock.js +1 -1
  122. package/dist/elements/prompt-input.js +1 -1
  123. package/dist/elements/prompt-suggestions.js +1 -1
  124. package/dist/elements/reasoning.js +1 -1
  125. package/dist/elements/remote.js +1 -1
  126. package/dist/elements/resizable.js +1 -1
  127. package/dist/elements/response-stream.js +1 -1
  128. package/dist/elements/screen.js +1 -1
  129. package/dist/elements/scroll-area.js +1 -1
  130. package/dist/elements/scroll-button.js +1 -1
  131. package/dist/elements/search.js +1 -1
  132. package/dist/elements/segmented.js +1 -1
  133. package/dist/elements/separator.js +1 -1
  134. package/dist/elements/setting-item.js +1 -1
  135. package/dist/elements/settings-group.js +1 -1
  136. package/dist/elements/skeleton.js +1 -1
  137. package/dist/elements/slots.d.ts +3 -0
  138. package/dist/elements/source.js +1 -1
  139. package/dist/elements/status.js +1 -1
  140. package/dist/elements/switch.js +1 -1
  141. package/dist/elements/tabs.js +1 -1
  142. package/dist/elements/tasks.js +1 -1
  143. package/dist/elements/text-shimmer.js +1 -1
  144. package/dist/elements/thinking-bar.js +1 -1
  145. package/dist/elements/thread.d.ts +1 -0
  146. package/dist/elements/thread.js +1 -0
  147. package/dist/elements/toast.js +1 -1
  148. package/dist/elements/tool.js +1 -1
  149. package/dist/elements/tooltip.js +1 -1
  150. package/dist/elements/voice-input.js +1 -1
  151. package/dist/elements/voice-output.js +1 -1
  152. package/dist/elements.d.ts +24 -0
  153. package/dist/index.js +3393 -3311
  154. package/dist/kai.es.js +1 -1
  155. package/dist/llms/llms-full.txt +34 -4
  156. package/dist/llms/llms.txt +3 -3
  157. package/dist/react/index.d.ts +64 -0
  158. package/dist/react/use-voice-input.d.ts +15 -0
  159. package/dist/react.js +263 -240
  160. package/dist/register-impl-CaaHJcea.js +145 -0
  161. package/dist/ui/resizable.d.ts +9 -3
  162. package/frameworks/react/index.tsx +32 -1
  163. package/frameworks/react/use-voice-input.tsx +59 -0
  164. package/llms-full.txt +34 -4
  165. package/llms.txt +3 -3
  166. package/package.json +27 -5
  167. package/src/components/component-meta.json +30 -28
  168. package/src/components/composer.tsx +5 -0
  169. package/src/components/thread.tsx +177 -0
  170. package/src/elements/chat-workspace.tsx +1 -1
  171. package/src/elements/compiled.css +1 -1
  172. package/src/elements/element-manifest.json +4 -0
  173. package/src/elements/element-meta.json +117 -0
  174. package/src/elements/element-types.d.ts +24 -0
  175. package/src/elements/icon-names.json +2 -0
  176. package/src/elements/menu.tsx +7 -4
  177. package/src/elements/register-impl.ts +2 -0
  178. package/src/elements/resizable.tsx +78 -2
  179. package/src/elements/slots.ts +7 -0
  180. package/src/elements/thread.tsx +105 -0
  181. package/src/ui/action-icons.ts +2 -1
  182. package/src/ui/icon.tsx +4 -0
  183. package/src/ui/overlay.tsx +8 -1
  184. package/src/ui/resizable.tsx +47 -9
  185. package/dist/elements/chunks/action-icons-Dtl8Ox5D.js +0 -1
  186. package/dist/elements/chunks/arrow-left-GbBceGBE.js +0 -1
  187. package/dist/elements/chunks/chat-thread-Dz2qbzvI.js +0 -1
  188. package/dist/elements/chunks/check-fhmRksq_.js +0 -1
  189. package/dist/elements/chunks/chevron-down-DcRg1aRU.js +0 -1
  190. package/dist/elements/chunks/chevron-right-ChzBcNJ-.js +0 -1
  191. package/dist/elements/chunks/circle-B4fTe9v6.js +0 -1
  192. package/dist/elements/chunks/circle-check-CJV-3Rem.js +0 -1
  193. package/dist/elements/chunks/hover-card-BQGdGAQ3.js +0 -1
  194. package/dist/elements/chunks/icon-CAyRqVrg.js +0 -1
  195. package/dist/elements/chunks/message-square-MmRkvc-M.js +0 -1
  196. package/dist/elements/chunks/reasoning-DzHWsdAJ.js +0 -1
  197. package/dist/elements/chunks/resizable-Bq_eHxUm.js +0 -1
  198. package/dist/elements/chunks/skeleton-Pjc5jiaY.js +0 -1
  199. package/dist/elements/chunks/textarea-CboigarR.js +0 -1
  200. package/dist/elements/chunks/x-Ckwicf6g.js +0 -1
  201. package/dist/register-impl-DcjZDELj.js +0 -141
@@ -1 +1 @@
1
- import{s as A,g as k,h as z,l as m,p as q,i as D,c as o,S as w,n as x,a as E,b as F,t as p,f as G}from"./chunks/define-CNSKFZCd.js";import{c as b}from"./chunks/cn-CU7UAWzk.js";import{B as I}from"./chunks/button-DBDZebGr.js";import{T as N}from"./chunks/tooltip-Cft_Rxiw.js";var P=p('<svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07">'),V=p('<svg width=14 height=14 viewBox="0 0 24 24"fill=currentColor><rect x=4 y=4 width=16 height=16 rx=2>'),W=p('<svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=animate-spin><path d="M21 12a9 9 0 11-6.219-8.56">'),_=p("<div>");function h(){return typeof window<"u"&&"speechSynthesis"in window}function $(e){var l;const[r]=A(e,["text","disabled","class"]),[a,t]=k(!1),[n,f]=k(!1);let i,u,d;const R=()=>!!e.onSynthesize||h(),v=()=>n()?"Synthesizing...":a()?"Stop":"Read aloud";function S(){u&&(URL.revokeObjectURL(u),u=void 0)}function C(){!h()||!r.text||(window.speechSynthesis.cancel(),d=new SpeechSynthesisUtterance(r.text),d.onend=()=>t(!1),d.onerror=()=>t(!1),t(!0),window.speechSynthesis.speak(d))}async function U(){var s;if(!(!e.onSynthesize||!r.text)){f(!0);try{const c=await e.onSynthesize(r.text);(s=e.onSynthesized)==null||s.call(e,c),S(),u=URL.createObjectURL(c),i??(i=new Audio),i.src=u,i.onended=()=>t(!1),i.onerror=()=>t(!1),t(!0),await i.play()}catch{t(!1)}finally{f(!1)}}}function g(){e.onSynthesize?U():C()}function y(){e.onSynthesize?i&&(i.pause(),i.currentTime=0):h()&&window.speechSynthesis.cancel(),t(!1)}function j(){e.onSynthesize?i?.pause():h()&&window.speechSynthesis.pause()}function B(){e.onSynthesize?i?.play():h()&&window.speechSynthesis.resume()}function L(){a()?y():g()}z(m(a,s=>{var c;(c=e.onSpeakingChange)==null||c.call(e,s)},{defer:!0})),z(m(()=>r.text,s=>{e.autoplay&&s&&g()},{defer:!0})),(l=e.controllerRef)==null||l.call(e,{speak:g,pause:j,resume:B,stop:y}),q(()=>{y(),S()});const M=()=>P(),O=()=>V(),T=()=>W();return(()=>{var s=_();return D(s,o(N,{get content(){return v()},get children(){return o(I,{part:"button",variant:"ghost",size:"icon-sm",get"aria-label"(){return v()},get"aria-pressed"(){return a()},onClick:L,get disabled(){return r.disabled||!R()||n()},get class(){return b("relative z-10 rounded-full transition-all duration-300")},get children(){return[o(w,{get when(){return n()},get children(){return o(T,{})}}),o(w,{get when(){return x(()=>!n())()&&a()},get children(){return o(O,{})}}),o(w,{get when(){return x(()=>!n())()&&!a()},get children(){return o(M,{})}})]}})}})),E(()=>F(s,b("relative inline-flex items-center justify-center",r.class))),s})()}G("kai-voice-output",{text:"",autoplay:!1,synthesize:void 0,disabled:!1},(e,{dispatch:l,flag:r,expose:a})=>{let t;return a({speak:()=>t?.speak(),pause:()=>t?.pause(),resume:()=>t?.resume(),stop:()=>t?.stop()}),o($,{get text(){return e.text??""},get autoplay(){return r("autoplay")},get disabled(){return r("disabled")},get onSynthesize(){return e.synthesize?n=>e.synthesize(n):void 0},onSpeakingChange:n=>l("kai-speaking-change",{speaking:n}),onSynthesized:n=>l("kai-synthesized",{blob:n}),controllerRef:n=>t=n})});
1
+ import{s as A,g as k,h as z,o as m,p as q,i as D,c as o,S as w,n as x,a as E,b as F,t as p,f as G}from"./chunks/define-DfTe4zwZ.js";import{c as b}from"./chunks/cn-CU7UAWzk.js";import{B as I}from"./chunks/button-BD7lUvVB.js";import{T as N}from"./chunks/tooltip-CBeFqJKk.js";var P=p('<svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07">'),V=p('<svg width=14 height=14 viewBox="0 0 24 24"fill=currentColor><rect x=4 y=4 width=16 height=16 rx=2>'),W=p('<svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=animate-spin><path d="M21 12a9 9 0 11-6.219-8.56">'),_=p("<div>");function h(){return typeof window<"u"&&"speechSynthesis"in window}function $(e){var l;const[r]=A(e,["text","disabled","class"]),[a,t]=k(!1),[n,f]=k(!1);let i,u,d;const R=()=>!!e.onSynthesize||h(),v=()=>n()?"Synthesizing...":a()?"Stop":"Read aloud";function S(){u&&(URL.revokeObjectURL(u),u=void 0)}function C(){!h()||!r.text||(window.speechSynthesis.cancel(),d=new SpeechSynthesisUtterance(r.text),d.onend=()=>t(!1),d.onerror=()=>t(!1),t(!0),window.speechSynthesis.speak(d))}async function U(){var s;if(!(!e.onSynthesize||!r.text)){f(!0);try{const c=await e.onSynthesize(r.text);(s=e.onSynthesized)==null||s.call(e,c),S(),u=URL.createObjectURL(c),i??(i=new Audio),i.src=u,i.onended=()=>t(!1),i.onerror=()=>t(!1),t(!0),await i.play()}catch{t(!1)}finally{f(!1)}}}function g(){e.onSynthesize?U():C()}function y(){e.onSynthesize?i&&(i.pause(),i.currentTime=0):h()&&window.speechSynthesis.cancel(),t(!1)}function j(){e.onSynthesize?i?.pause():h()&&window.speechSynthesis.pause()}function B(){e.onSynthesize?i?.play():h()&&window.speechSynthesis.resume()}function L(){a()?y():g()}z(m(a,s=>{var c;(c=e.onSpeakingChange)==null||c.call(e,s)},{defer:!0})),z(m(()=>r.text,s=>{e.autoplay&&s&&g()},{defer:!0})),(l=e.controllerRef)==null||l.call(e,{speak:g,pause:j,resume:B,stop:y}),q(()=>{y(),S()});const M=()=>P(),O=()=>V(),T=()=>W();return(()=>{var s=_();return D(s,o(N,{get content(){return v()},get children(){return o(I,{part:"button",variant:"ghost",size:"icon-sm",get"aria-label"(){return v()},get"aria-pressed"(){return a()},onClick:L,get disabled(){return r.disabled||!R()||n()},get class(){return b("relative z-10 rounded-full transition-all duration-300")},get children(){return[o(w,{get when(){return n()},get children(){return o(T,{})}}),o(w,{get when(){return x(()=>!n())()&&a()},get children(){return o(O,{})}}),o(w,{get when(){return x(()=>!n())()&&!a()},get children(){return o(M,{})}})]}})}})),E(()=>F(s,b("relative inline-flex items-center justify-center",r.class))),s})()}G("kai-voice-output",{text:"",autoplay:!1,synthesize:void 0,disabled:!1},(e,{dispatch:l,flag:r,expose:a})=>{let t;return a({speak:()=>t?.speak(),pause:()=>t?.pause(),resume:()=>t?.resume(),stop:()=>t?.stop()}),o($,{get text(){return e.text??""},get autoplay(){return r("autoplay")},get disabled(){return r("disabled")},get onSynthesize(){return e.synthesize?n=>e.synthesize(n):void 0},onSpeakingChange:n=>l("kai-speaking-change",{speaking:n}),onSynthesized:n=>l("kai-synthesized",{blob:n}),controllerRef:n=>t=n})});
@@ -944,6 +944,8 @@ export interface KaiResizableElement extends HTMLElement {
944
944
  orientation?: "vertical" | "horizontal";
945
945
  /** Which item index is maximized (null = none). Declarative source of truth. */
946
946
  maximizedIndex?: null | number;
947
+ /** Divider affordance drawn inside each draggable handle's 8px grab zone: - `line` (default) — a 1px hairline, transparent at rest, tinting on hover/drag. - `grip` — a dotted grip handle. - `none` — no visible divider, just the invisible hit-area. The full grab zone and keyboard/ARIA behavior are identical for all three. */
948
+ handle?: "none" | "line" | "grip";
947
949
  }
948
950
 
949
951
  export interface KaiResizableItemElement extends HTMLElement {
@@ -1234,6 +1236,27 @@ export interface KaiThinkingBarElement extends HTMLElement {
1234
1236
  stopLabel?: string;
1235
1237
  }
1236
1238
 
1239
+ export interface KaiThreadElement extends HTMLElement {
1240
+ /** Color mode (`auto` follows prefers-color-scheme). */
1241
+ theme?: 'light' | 'dark' | 'auto';
1242
+ /** The full message thread to render, newest last. Each entry carries its role, content, and optional reasoning/tools/attachments/actions/avatar. Set as a JS property (`el.messages = [...]`); a NEW array reference per streaming chunk re-renders (mutating in place does not). */
1243
+ messages?: { id: string; role: "user" | "assistant"; content: string; reasoning?: { text: string; label?: string }; tools?: { type: string; state: "input-streaming" | "input-available" | "output-available" | "output-error"; input?: Record<string, unknown>; output?: Record<string, unknown>; toolCallId?: string; errorText?: string }[]; attachments?: { id: string; type: "file" | "source-document"; filename?: string; mediaType?: string; url?: string; title?: string }[]; actions?: ("copy" | "like" | "dislike" | "regenerate" | "edit" | { id: string; label: string; icon?: string; tooltip?: string })[]; avatar?: { src?: string; fallback?: string; alt?: string }; feedback?: "like" | "dislike" }[];
1244
+ /** Show a typing indicator on the pending assistant turn — set while awaiting the assistant's reply. */
1245
+ loading?: boolean;
1246
+ /** Body/prose font scale for rendered markdown (`'xs' | 'sm' | 'base' | 'lg'`). Defaults to `'sm'`. */
1247
+ proseSize?: "sm" | "lg" | "xs" | "base";
1248
+ /** Shiki theme name for syntax-highlighted code blocks (e.g. `'github-dark-dimmed'`). */
1249
+ codeTheme?: string;
1250
+ /** Enable Shiki syntax highlighting in code blocks. Turn off to render plain `<pre>` blocks (lighter, no highlighter load). Default true. */
1251
+ codeHighlight?: boolean;
1252
+ /** Whether each message's action bar is always visible (`'always'`, default) or only revealed on hover of that message row (`'hover'`). */
1253
+ actionsReveal?: "always" | "hover";
1254
+ /** Show the scroll-to-bottom button inside the scroll area. Default true. */
1255
+ scrollButton?: boolean;
1256
+ /** Extra classes applied to the thread's inner root. */
1257
+ class?: string;
1258
+ }
1259
+
1237
1260
  export interface KaiToastRegionElement extends HTMLElement {
1238
1261
  /** Color mode (`auto` follows prefers-color-scheme). */
1239
1262
  theme?: 'light' | 'dark' | 'auto';
@@ -1433,6 +1456,7 @@ declare global {
1433
1456
  'kai-tasks': KaiTasksElement;
1434
1457
  'kai-text-shimmer': KaiTextShimmerElement;
1435
1458
  'kai-thinking-bar': KaiThinkingBarElement;
1459
+ 'kai-thread': KaiThreadElement;
1436
1460
  'kai-toast-region': KaiToastRegionElement;
1437
1461
  'kai-tool': KaiToolElement;
1438
1462
  'kai-tooltip': KaiTooltipElement;