@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) • 1.69 kB
JavaScript
import{Q as p,g as v}from"./define-CNSKFZCd.js";import{c as m,p as f}from"./store-th4VyJXM.js";let e={};function g(i){e.stack&&i.setAttribute("stack",e.stack),e.position&&i.setAttribute("position",e.position),e.max!==void 0&&i.setAttribute("max",String(e.max)),e.appearance&&i.setAttribute("appearance",e.appearance),e.inverse!==void 0&&(e.inverse?i.setAttribute("inverse",""):i.removeAttribute("inverse"))}const b=5e3,x=7e3,{toasts:a,setToasts:o,mounted:O,setMounted:A}=p(()=>{const[i,t]=m([]),[n,s]=v(!1);return{toasts:i,setToasts:t,mounted:n,setMounted:s}});let u=0;function k(){return u+=1,`toast-${u}`}function M(i){const t=i.duration??b;return t===0?0:i.action?Math.max(t,x):t}const c=new Map;function h(i=null){if(typeof document>"u")return;const t=c.get(i);if(t&&t.isConnected)return t;const n=document.createElement("kai-toast-region");return document.body.appendChild(n),n.toasts=a,i&&(n.target=i),g(n),c.set(i,n),A(!0),n}function w(i){const t=a.findIndex(n=>n.id===i.id);t>=0?o(t,i):o(f(n=>{n.push(i)}))}function d(i){o(t=>t.filter(n=>n.id!==i))}function I(i){return{id:i,dismiss:()=>d(i),update:t=>{const n=a.findIndex(s=>s.id===i);n>=0&&o(n,s=>({...s,...t}))}}}function r(i,t,n){h(t?.target??null);const s=t?.id??k(),l={id:s,message:i,variant:t?.variant??n,appearance:t?.appearance??e.appearance??"pill",inverse:t?.inverse??e.inverse??!1,description:t?.description,action:t?.action,duration:t?.duration,dismissible:t?.dismissible,target:t?.target};return w(l),I(s)}const T=Object.assign((i,t)=>r(i,t,"neutral"),{success:(i,t)=>r(i,t,"success"),warning:(i,t)=>r(i,t,"warning"),error:(i,t)=>r(i,t,"error"),info:(i,t)=>r(i,t,"info"),dismiss:d,clear:()=>o([])});export{M as r,T as t};