@kitn.ai/ui
Version:
Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. Authored in SolidJS.
2 lines (1 loc) • 2.08 kB
JavaScript
import{f as y,g as v,o as I,c,n as d,q as u,S as x,t as g,p as A}from"./chunks/define-CNSKFZCd.js";import{c as q,C as O,a as _}from"./chunks/conversation-list-C4xTQSpT.js";import{r as $,a as E}from"./chunks/slots-DkZ-Cmha.js";var R=g("<slot name=header>"),D=g("<slot name=footer>"),L=g("<slot name=empty>");function f(r){var t;return{id:r.getAttribute("id")??"",title:((t=r.textContent)==null?void 0:t.trim())??"",groupId:r.getAttribute("group-id")??void 0,scope:{type:"collection"},messageCount:0,lastMessageAt:new Date(0).toISOString(),updatedAt:new Date(0).toISOString()}}y("kai-conversations",{groups:[],conversations:[],activeId:void 0,collapsed:void 0,defaultCollapsed:void 0},(r,{dispatch:t,element:s,expose:m,flag:h})=>{const[w,S]=v([]),[l,b]=v({});I(()=>{const e=()=>{const i=[...s.querySelectorAll("kai-conversation")];S(i.map(f)),b($(s,E))};e();const n=new MutationObserver(e);n.observe(s,{childList:!0,attributes:!0,subtree:!0}),A(()=>n.disconnect())});const k=()=>[...r.conversations??[],...w()],[p,C]=q(()=>r.collapsed,h("defaultCollapsed")),o=e=>{C(e),t("kai-collapse-toggle",{collapsed:e})};let a;return m({focus:e=>{var n,i;a?a.focus(e):(i=(n=s.shadowRoot)==null?void 0:n.querySelector("input"))==null||i.focus(e)},clear:()=>a?.clearSearch(),select:e=>t("kai-conversation-select",{id:e}),collapse:()=>o(!0),expand:()=>o(!1),toggle:()=>o(!p())}),c(x,{get when(){return!p()},get fallback(){return c(_,{onExpand:()=>o(!1)})},get children(){return c(O,{get groups(){return r.groups},get conversations(){return k()},get activeId(){return r.activeId},onSelect:e=>t("kai-conversation-select",{id:e}),onNewChat:()=>t("kai-new-chat"),onToggleSidebar:()=>{t("kai-toggle-sidebar"),o(!0)},onSearchChange:e=>t("kai-search",{query:e}),controllerRef:e=>a=e,get header(){return d(()=>!!l().header)()?(()=>{var e=R();return e._$owner=u(),e})():void 0},get footer(){return d(()=>!!l().footer)()?(()=>{var e=D();return e._$owner=u(),e})():void 0},get empty(){return d(()=>!!l().empty)()?(()=>{var e=L();return e._$owner=u(),e})():void 0}})}})});export{f as parseKaiConversationElement};