@hidemikimura/chit-ui 0.2.0 → 0.3.1

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 (38) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +148 -3
  3. package/dist/chit-ui.iife.min.js +218 -99
  4. package/dist/chit-ui.iife.min.js.map +1 -1
  5. package/dist/chit-ui.min.js +209 -90
  6. package/dist/chit-ui.min.js.map +1 -1
  7. package/dist/types/chit-ui.d.ts +64 -4
  8. package/dist/types/controllers/composer-controller.d.ts +4 -0
  9. package/dist/types/controllers/drag-controller.d.ts +118 -0
  10. package/dist/types/controllers/scroll-lock-controller.d.ts +37 -0
  11. package/dist/types/controllers/viewport-controller.d.ts +38 -0
  12. package/dist/types/events.d.ts +1 -0
  13. package/dist/types/global.d.ts +7 -1
  14. package/dist/types/i18n/labels.d.ts +8 -0
  15. package/dist/types/index.d.ts +162 -0
  16. package/dist/types/render/message-list.d.ts +0 -1
  17. package/dist/types/theme/default-theme.d.ts +8 -0
  18. package/dist/types/types.d.ts +40 -0
  19. package/package.json +1 -1
  20. package/src/chit-ui.js +261 -4
  21. package/src/controllers/composer-controller.js +2 -0
  22. package/src/controllers/drag-controller.js +319 -0
  23. package/src/controllers/scroll-controller.js +21 -1
  24. package/src/controllers/scroll-lock-controller.js +185 -0
  25. package/src/controllers/viewport-controller.js +102 -0
  26. package/src/events.js +1 -0
  27. package/src/global.d.ts +7 -1
  28. package/src/i18n/labels.js +6 -0
  29. package/src/index.js +34 -0
  30. package/src/render/launcher.js +9 -1
  31. package/src/render/message-list.js +40 -10
  32. package/src/render/panel.js +17 -1
  33. package/src/styles/composer.css.js +18 -0
  34. package/src/styles/launcher.css.js +13 -0
  35. package/src/styles/message.css.js +60 -15
  36. package/src/styles/panel.css.js +30 -3
  37. package/src/theme/default-theme.js +16 -0
  38. package/src/types.js +18 -0
@@ -1,14 +1,17 @@
1
- var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),n=new WeakMap;let o=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(s&&void 0===t){const s=void 0!==e&&1===e.length;s&&(t=n.get(e)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),s&&n.set(e,t))}return t}toString(){return this.cssText}};const r=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,s,i)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+t[i+1],t[0]);return new o(s,t,i)},a=s?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const s of t.cssRules)e+=s.cssText;return(t=>new o("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:h,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:d,getOwnPropertySymbols:p,getPrototypeOf:u}=Object,m=globalThis,f=m.trustedTypes,g=f?f.emptyScript:"",b=m.reactiveElementPolyfillSupport,v=(t,e)=>t,y={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let s=t;switch(e){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},w=(t,e)=>!h(t,e),$={attribute:!0,type:String,converter:y,reflect:!1,useDefault:!1,hasChanged:w};Symbol.metadata??=Symbol("metadata"),m.litPropertyMetadata??=new WeakMap;let x=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=$){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const s=Symbol(),i=this.getPropertyDescriptor(t,s,e);void 0!==i&&l(this.prototype,t,i)}}static getPropertyDescriptor(t,e,s){const{get:i,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:i,set(e){const o=i?.call(this);n?.call(this,e),this.requestUpdate(t,o,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??$}static _$Ei(){if(this.hasOwnProperty(v("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(v("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(v("properties"))){const t=this.properties,e=[...d(t),...p(t)];for(const s of e)this.createProperty(s,t[s])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,s]of e)this.elementProperties.set(t,s)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const s=this._$Eu(t,e);void 0!==s&&this._$Eh.set(s,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const s=new Set(t.flat(1/0).reverse());for(const t of s)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const s=e.attribute;return!1===s?void 0:"string"==typeof s?s:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const s of e.keys())this.hasOwnProperty(s)&&(t.set(s,this[s]),delete this[s]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((t,i)=>{if(s)t.adoptedStyleSheets=i.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const s of i){const i=document.createElement("style"),n=e.litNonce;void 0!==n&&i.setAttribute("nonce",n),i.textContent=s.cssText,t.appendChild(i)}})(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,s){this._$AK(t,s)}_$ET(t,e){const s=this.constructor.elementProperties.get(t),i=this.constructor._$Eu(t,s);if(void 0!==i&&!0===s.reflect){const n=(void 0!==s.converter?.toAttribute?s.converter:y).toAttribute(e,s.type);this._$Em=t,null==n?this.removeAttribute(i):this.setAttribute(i,n),this._$Em=null}}_$AK(t,e){const s=this.constructor,i=s._$Eh.get(t);if(void 0!==i&&this._$Em!==i){const t=s.getPropertyOptions(i),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:y;this._$Em=i;const o=n.fromAttribute(e,t.type);this[i]=o??this._$Ej?.get(i)??o,this._$Em=null}}requestUpdate(t,e,s,i=!1,n){if(void 0!==t){const o=this.constructor;if(!1===i&&(n=this[t]),s??=o.getPropertyOptions(t),!((s.hasChanged??w)(n,e)||s.useDefault&&s.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,s))))return;this.C(t,e,s)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:s,reflect:i,wrapped:n},o){s&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||s||(e=void 0),this._$AL.set(t,e)),!0===i&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,s]of t){const{wrapped:t}=s,i=this[e];!0!==t||this._$AL.has(e)||void 0===i||this.C(e,void 0,s,i)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};x.elementStyles=[],x.shadowRootOptions={mode:"open"},x[v("elementProperties")]=new Map,x[v("finalized")]=new Map,b?.({ReactiveElement:x}),(m.reactiveElementVersions??=[]).push("2.1.2");const _=globalThis,A=t=>t,S=_.trustedTypes,E=S?S.createPolicy("lit-html",{createHTML:t=>t}):void 0,k="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,T="?"+C,O=`<${T}>`,U=document,P=()=>U.createComment(""),L=t=>null===t||"object"!=typeof t&&"function"!=typeof t,M=Array.isArray,R="[ \t\n\f\r]",z=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,B=/-->/g,H=/>/g,N=RegExp(`>|${R}(?:([^\\s"'>=/]+)(${R}*=${R}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),I=/'/g,j=/"/g,D=/^(?:script|style|textarea|title)$/i,q=t=>(e,...s)=>({_$litType$:t,strings:e,values:s}),F=q(1),W=q(2),K=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,J=U.createTreeWalker(U,129);function Y(t,e){if(!M(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==E?E.createHTML(e):e}class Z{constructor({strings:t,_$litType$:e},s){let i;this.parts=[];let n=0,o=0;const r=t.length-1,a=this.parts,[h,l]=((t,e)=>{const s=t.length-1,i=[];let n,o=2===e?"<svg>":3===e?"<math>":"",r=z;for(let e=0;e<s;e++){const s=t[e];let a,h,l=-1,c=0;for(;c<s.length&&(r.lastIndex=c,h=r.exec(s),null!==h);)c=r.lastIndex,r===z?"!--"===h[1]?r=B:void 0!==h[1]?r=H:void 0!==h[2]?(D.test(h[2])&&(n=RegExp("</"+h[2],"g")),r=N):void 0!==h[3]&&(r=N):r===N?">"===h[0]?(r=n??z,l=-1):void 0===h[1]?l=-2:(l=r.lastIndex-h[2].length,a=h[1],r=void 0===h[3]?N:'"'===h[3]?j:I):r===j||r===I?r=N:r===B||r===H?r=z:(r=N,n=void 0);const d=r===N&&t[e+1].startsWith("/>")?" ":"";o+=r===z?s+O:l>=0?(i.push(a),s.slice(0,l)+k+s.slice(l)+C+d):s+C+(-2===l?e:d)}return[Y(t,o+(t[s]||"<?>")+(2===e?"</svg>":3===e?"</math>":"")),i]})(t,e);if(this.el=Z.createElement(h,s),J.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(i=J.nextNode())&&a.length<r;){if(1===i.nodeType){if(i.hasAttributes())for(const t of i.getAttributeNames())if(t.endsWith(k)){const e=l[o++],s=i.getAttribute(t).split(C),r=/([.?@])?(.*)/.exec(e);a.push({type:1,index:n,name:r[2],strings:s,ctor:"."===r[1]?st:"?"===r[1]?it:"@"===r[1]?nt:et}),i.removeAttribute(t)}else t.startsWith(C)&&(a.push({type:6,index:n}),i.removeAttribute(t));if(D.test(i.tagName)){const t=i.textContent.split(C),e=t.length-1;if(e>0){i.textContent=S?S.emptyScript:"";for(let s=0;s<e;s++)i.append(t[s],P()),J.nextNode(),a.push({type:2,index:++n});i.append(t[e],P())}}}else if(8===i.nodeType)if(i.data===T)a.push({type:2,index:n});else{let t=-1;for(;-1!==(t=i.data.indexOf(C,t+1));)a.push({type:7,index:n}),t+=C.length-1}n++}}static createElement(t,e){const s=U.createElement("template");return s.innerHTML=t,s}}function Q(t,e,s=t,i){if(e===K)return e;let n=void 0!==i?s._$Co?.[i]:s._$Cl;const o=L(e)?void 0:e._$litDirective$;return n?.constructor!==o&&(n?._$AO?.(!1),void 0===o?n=void 0:(n=new o(t),n._$AT(t,s,i)),void 0!==i?(s._$Co??=[])[i]=n:s._$Cl=n),void 0!==n&&(e=Q(t,n._$AS(t,e.values),n,i)),e}class X{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:e},parts:s}=this._$AD,i=(t?.creationScope??U).importNode(e,!0);J.currentNode=i;let n=J.nextNode(),o=0,r=0,a=s[0];for(;void 0!==a;){if(o===a.index){let e;2===a.type?e=new tt(n,n.nextSibling,this,t):1===a.type?e=new a.ctor(n,a.name,a.strings,this,t):6===a.type&&(e=new ot(n,this,t)),this._$AV.push(e),a=s[++r]}o!==a?.index&&(n=J.nextNode(),o++)}return J.currentNode=U,i}p(t){let e=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,e),e+=s.strings.length-2):s._$AI(t[e])),e++}}class tt{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,s,i){this.type=2,this._$AH=G,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=s,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const e=this._$AM;return void 0!==e&&11===t?.nodeType&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=Q(this,t,e),L(t)?t===G||null==t||""===t?(this._$AH!==G&&this._$AR(),this._$AH=G):t!==this._$AH&&t!==K&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):(t=>M(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&L(this._$AH)?this._$AA.nextSibling.data=t:this.T(U.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:s}=t,i="number"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=Z.createElement(Y(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===i)this._$AH.p(e);else{const t=new X(i,this),s=t.u(this.options);t.p(e),this.T(s),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new Z(t)),e}k(t){M(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let s,i=0;for(const n of t)i===e.length?e.push(s=new tt(this.O(P()),this.O(P()),this,this.options)):s=e[i],s._$AI(n),i++;i<e.length&&(this._$AR(s&&s._$AB.nextSibling,i),e.length=i)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){const e=A(t).nextSibling;A(t).remove(),t=e}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class et{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,s,i,n){this.type=1,this._$AH=G,this._$AN=void 0,this.element=t,this.name=e,this._$AM=i,this.options=n,s.length>2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=G}_$AI(t,e=this,s,i){const n=this.strings;let o=!1;if(void 0===n)t=Q(this,t,e,0),o=!L(t)||t!==this._$AH&&t!==K,o&&(this._$AH=t);else{const i=t;let r,a;for(t=n[0],r=0;r<n.length-1;r++)a=Q(this,i[s+r],e,r),a===K&&(a=this._$AH[r]),o||=!L(a)||a!==this._$AH[r],a===G?t=G:t!==G&&(t+=(a??"")+n[r+1]),this._$AH[r]=a}o&&!i&&this.j(t)}j(t){t===G?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}}class st extends et{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===G?void 0:t}}class it extends et{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==G)}}class nt extends et{constructor(t,e,s,i,n){super(t,e,s,i,n),this.type=5}_$AI(t,e=this){if((t=Q(this,t,e,0)??G)===K)return;const s=this._$AH,i=t===G&&s!==G||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,n=t!==G&&(s===G||i);i&&this.element.removeEventListener(this.name,this,s),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){"function"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class ot{constructor(t,e,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){Q(this,t)}}const rt={I:tt},at=_.litHtmlPolyfillSupport;at?.(Z,tt),(_.litHtmlVersions??=[]).push("3.3.3");const ht=(t,e,s)=>{const i=s?.renderBefore??e;let n=i._$litPart$;if(void 0===n){const t=s?.renderBefore??null;i._$litPart$=n=new tt(e.insertBefore(P(),t),t,void 0,s??{})}return n._$AI(t),n},lt=globalThis;let ct=class extends x{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=ht(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return K}};ct._$litElement$=!0,ct.finalized=!0,lt.litElementHydrateSupport?.({LitElement:ct});const dt=lt.litElementPolyfillSupport;dt?.({LitElement:ct}),(lt.litElementVersions??=[]).push("4.2.2");const pt=1,ut=2,mt=3,ft=4,gt=t=>(...e)=>({_$litDirective$:t,values:e});let bt=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,s){this._$Ct=t,this._$AM=e,this._$Ci=s}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}},vt=class extends bt{constructor(t){if(super(t),this.it=G,t.type!==ut)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===G||null==t)return this._t=void 0,this.it=t;if(t===K)return t;if("string"!=typeof t)throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;const e=[t];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};vt.directiveName="unsafeHTML",vt.resultType=1;const yt=gt(vt),wt=Object.freeze({SUBMIT:"chat-submit",BEFORE_OPEN:"chat-before-open",OPEN:"chat-open",BEFORE_CLOSE:"chat-before-close",CLOSE:"chat-close",HIDE:"chat-hide",SHOW:"chat-show",STATE_CHANGE:"chat-state-change",INPUT:"chat-input",MESSAGE_RENDER:"chat-message-render",MESSAGE_CLICK:"chat-message-click",SCROLL_TOP:"chat-scroll-top",BREAKPOINT_CHANGE:"chat-breakpoint-change",HOME:"chat-home",ATTACH:"chat-attach"});function $t(t,e,s,{cancelable:i=!1}={}){return t.dispatchEvent(new CustomEvent(e,{detail:s,bubbles:!0,composed:!0,cancelable:i}))}const xt={closed:"launcher",open:"panel",hidden:null};class _t{#t;#e;#s;#i;#n="closed";#o="closed";#r=!1;#a=0;#h=null;#l=null;#c=!1;constructor(t,{animation:e,keepsLauncher:s,onOpened:i}){this.#t=t,this.#e=e,this.#s=s,this.#i=i,t.addController(this)}get renderedState(){return this.#o}get applying(){return this.#r}hostConnected(){this.#n=this.#t.state,this.#o=this.#t.state,this.#t.dataset.renderedState=this.#o}hostDisconnected(){this.#l?.(),this.#l=null,this.#h?.(!1),this.#h=null}hostUpdated(){this.#t.dataset.renderedState=this.#o}request(t,e){const s=this.#n;return t===s?Promise.resolve(!0):this.#d(s,t,e)?(this.#p(),this.#n=t,this.#u(t),$t(this.#t,wt.STATE_CHANGE,{from:s,to:t,trigger:e}),this.#m(s,t,e)):(this.#u(s),Promise.resolve(!1))}#d(t,e,s){return"open"===e?$t(this.#t,wt.BEFORE_OPEN,{from:t,trigger:s},{cancelable:!0}):"closed"!==e||"open"!==t||$t(this.#t,wt.BEFORE_CLOSE,{from:t,trigger:s},{cancelable:!0})}#p(){this.#a+=1,this.#l?.(),this.#l=null,this.#h?.(!1),this.#h=null,this.#o!==this.#n&&(this.#o=this.#n,this.#t.requestUpdate())}#m(t,e,s){const i=this.#a,n=new Promise(t=>{this.#h=t});return(async()=>{if(this.#c=this.#f(),await this.#t.updateComplete,i!==this.#a)return;const n=this.#g(t);if(n&&!this.#b(t,e)&&(await this.#v(n,"exit",this.#e(t,e,"exit")),i!==this.#a))return;if(this.#o=e,this.#t.requestUpdate(),await this.#t.updateComplete,i!==this.#a)return;const o=this.#g(e);o&&(await this.#v(o,"enter",this.#e(t,e,"enter")),i!==this.#a)||(this.#y(t,e,s),this.#w(e),this.#h?.(!0),this.#h=null)})(),n}#b(t,e){return"closed"===t&&"open"===e&&this.#s()}#y(t,e,s){"hidden"===t&&$t(this.#t,wt.SHOW,{from:t,to:e}),"hidden"!==e?"open"===e?$t(this.#t,wt.OPEN,{from:t,trigger:s}):"closed"===e&&"open"===t&&$t(this.#t,wt.CLOSE,{from:t,trigger:s}):$t(this.#t,wt.HIDE,{from:t,to:e})}#w(t){"open"!==t?("closed"===t&&this.#c&&this.#g("closed")?.focus(),this.#c=!1):this.#i()}#f(){const t=this.#t.renderRoot instanceof ShadowRoot?this.#t.renderRoot.activeElement:null,e=this.#g("open");return!(!t||!e||t!==e&&!e.contains(t))}#g(t){const e=xt[t];return e?this.#t.renderRoot.querySelector(`[part~="${e}"]`):null}#u(t){this.#t.state!==t&&(this.#r=!0,this.#t.state=t,this.#r=!1)}#v(t,e,s){const{effect:i,duration:n}=s;return"none"===i||n<=0||window.matchMedia("(prefers-reduced-motion: reduce)").matches?Promise.resolve():new Promise(s=>{let o=!1;const r=e=>{e&&e.target!==t||o||(o=!0,clearTimeout(a),t.removeEventListener("animationend",r),t.removeAttribute("data-anim"),t.style.removeProperty("--_chit-anim-duration"),this.#l===r&&(this.#l=null),s())};t.dataset.effect=i,t.dataset.anim=e,t.style.setProperty("--_chit-anim-duration",`${n}ms`),t.addEventListener("animationend",r);const a=setTimeout(r,n+50);this.#l=r})}}class At{#t;#$=null;#x=0;#_="pc";#A=!1;constructor(t){this.#t=t,t.addController(this)}get device(){return this.#_}hostDisconnected(){this.#$?.removeEventListener("change",this.#S),this.#$=null}observe(t){t===this.#x&&this.#$||(this.#x=t,this.#$?.removeEventListener("change",this.#S),this.#$=window.matchMedia(`(max-width: ${t-1}px)`),this.#$.addEventListener("change",this.#S),this.#E(this.#$.matches?"mobile":"pc"))}#S=t=>{this.#E(t.matches?"mobile":"pc")};#E(t){t===this.#_&&this.#t.dataset.device||(this.#_=t,this.#t.dataset.device=t,this.#t.requestUpdate(),this.#A&&$t(this.#t,wt.BREAKPOINT_CHANGE,{device:t}),this.#A=!0)}}const St="#2563eb",Et="#1f2328",kt="#5c6370",Ct="#ffffff",Tt="#f1f3f5",Ot="#e4e4e7",Ut="#ffffff",Pt={size:60,position:"bottom-right",offset:{x:24,y:24},radius:30,image:null,label:null,component:null,props:{},colors:{background:St,text:Ut,shadow:"0 4px 12px rgba(0, 0, 0, 0.2)"},animation:{enter:"scale",exit:"scale",duration:200,idle:"none"}},Lt={size:56,offset:{x:16,y:16},radius:28},Mt={breakpoint:768,zIndex:2147483e3,font:{family:"system-ui, -apple-system, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif",size:14},closed:{pc:Pt,mobile:{...Pt,...Lt}},open:{width:380,height:600,position:"bottom-right",offset:{x:24,y:24},radius:16,launcher:"hidden",header:{visible:!0,title:null,logo:null,home:!1},background:{image:null},colors:{background:Ct,text:Et,accent:St,border:Ot,shadow:"0 8px 32px rgba(0, 0, 0, 0.24)",headerBackground:Ct,headerText:Et,userBubble:St,userText:Ut,assistantBubble:Tt,assistantText:Et,systemText:kt,inputBackground:Ct,inputText:Et,inputPlaceholder:kt},bubble:{radius:14,tail:"none"},speaker:{assistant:{name:null,avatar:null},user:{name:null,avatar:null}},animation:{enter:"scale",exit:"fade",duration:150,scroll:"smooth"},input:{maxRows:5,placeholder:null,attach:!1,accept:"image/*,video/*",multiple:!1}},hidden:{animation:{exit:"fade",duration:150}}},Rt=Lt;function zt(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function Bt(t,e){if(!zt(e))return t;const s={...t};for(const[t,i]of Object.entries(e)){if(void 0===i)continue;const e=s[t];s[t]=zt(i)&&zt(e)?Bt(e,i):i}return s}function Ht(t,e){const s=t??{},i=function(t,e){const s=t??{};if(!("pc"in s)&&!("mobile"in s)){const s=t??{};return Bt(Mt.closed[e],s)}const i=Bt(Mt.closed.pc,s.pc);return"pc"===e?i:s.mobile?Bt(Mt.closed.mobile,s.mobile):Bt(i,Rt)}(s.closed,e);return{breakpoint:s.breakpoint??Mt.breakpoint,zIndex:s.zIndex??Mt.zIndex,font:Bt(Mt.font,s.font),closed:Bt(Mt.closed[e],i),open:Bt(Mt.open,s.open),hidden:Bt(Mt.hidden,s.hidden),device:e}}const Nt=t=>`${t}px`;function It(t){return t?`url("${t.replace(/[\\"]/g,"\\$&")}")`:"none"}function jt(t){const e=Object.entries(function(t){const{closed:e,open:s}=t,i=s.colors;return{"--chit-z-index":String(t.zIndex),"--chit-font-family":t.font.family,"--chit-font-size":Nt(t.font.size),"--chit-launcher-size":"auto"===e.size?"auto":Nt(e.size),"--chit-launcher-offset-x":Nt(e.offset.x),"--chit-launcher-offset-y":Nt(e.offset.y),"--chit-launcher-radius":Nt(e.radius),"--chit-launcher-image":It(e.image),"--chit-launcher-bg":e.colors.background,"--chit-launcher-text":e.colors.text,"--chit-launcher-shadow":e.colors.shadow,"--chit-panel-width":Nt(s.width),"--chit-panel-height":Nt(s.height),"--chit-panel-offset-x":Nt(s.offset.x),"--chit-panel-offset-y":Nt(s.offset.y),"--chit-panel-radius":Nt(s.radius),"--chit-panel-bg-image":It(s.background.image),"--chit-panel-shadow":i.shadow,"--chit-color-bg":i.background,"--chit-color-text":i.text,"--chit-color-accent":i.accent,"--chit-color-border":i.border,"--chit-color-header-bg":i.headerBackground,"--chit-color-header-text":i.headerText,"--chit-color-user-bg":i.userBubble,"--chit-color-user-text":i.userText,"--chit-color-assistant-bg":i.assistantBubble,"--chit-color-assistant-text":i.assistantText,"--chit-color-system-text":i.systemText,"--chit-color-input-bg":i.inputBackground,"--chit-color-input-text":i.inputText,"--chit-color-input-placeholder":i.inputPlaceholder,"--chit-bubble-radius":Nt(s.bubble.radius),"--_chit-input-max-rows":String(s.input.maxRows),"--_chit-speaker-gutter":s.speaker.assistant.avatar?"2.5em":"0px"}}(t)).map(([t,e])=>` ${t}: ${e};`).join("\n");return`:host {\n${e}\n}\n`}const Dt="undefined"!=typeof ShadowRoot&&"adoptedStyleSheets"in Document.prototype&&"replaceSync"in CSSStyleSheet.prototype;class qt{#k=null;#C=null;#T="";#O;constructor(t){this.#O=t}attach(t){if(t instanceof ShadowRoot){if(Dt)return this.#k||(this.#k=new CSSStyleSheet),void(t.adoptedStyleSheets.includes(this.#k)||(t.adoptedStyleSheets=[...t.adoptedStyleSheets,this.#k]));this.#C||(this.#C=document.createElement("style"),this.#C.setAttribute(this.#O,"")),this.#C.parentNode!==t&&t.append(this.#C)}}write(t,e){if(t!==this.#T){if(this.attach(e),this.#k)this.#k.replaceSync(t);else{if(!this.#C)return;this.#C.textContent=t}this.#T=t}}detach(){this.#C?.remove(),this.#C=null}}class Ft{#t;#k=new qt("data-chit-theme");#U;constructor(t,{device:e}){this.#t=t,this.#U=Ht(void 0,e())}get current(){return this.#U}hostConnected(){this.#P()}hostDisconnected(){this.#k.detach()}static breakpointOf(t){return function(t){return t?.breakpoint??Mt.breakpoint}(t)}apply(t,e){this.#U=Ht(t,e),this.#P()}#P(){this.#k.write(jt(this.#U),this.#t.renderRoot)}}class Wt{#t;#L;#M=null;#R=null;#z=!0;#B=!1;#H=!1;#N=!0;#I=!1;#j;#D=!0;#q;#F=0;constructor(t,{behavior:e}){this.#t=t,this.#L=e,t.addController(this)}get hasUnseen(){return this.#B}get atBottom(){return this.#z}hostDisconnected(){this.#W(),clearTimeout(this.#j)}hostUpdate(){const t=this.#t.messages,e=t[t.length-1],s=t.length>this.#F,i=e?.id!==this.#q;this.#q=e?.id,this.#F=t.length,(s||i)&&(this.#z||"user"===e?.role?this.#N=!0:this.#B=!0)}hostUpdated(){const t=this.#t.renderRoot.querySelector('[part~="messages"]');if(t!==this.#M&&(this.#W(),this.#M=t,this.#K(),t&&(this.#z=!0,this.#B=!1,this.#N=!0,this.#D=!0)),this.#N){const t=this.#G;this.#N=!1,this.#V({behavior:t})}}#K(){if(!this.#M)return;this.#M.addEventListener("scroll",this.#J,{passive:!0}),this.#M.addEventListener("scrollend",this.#Y);const t=this.#M.firstElementChild;t&&"undefined"!=typeof ResizeObserver&&(this.#R=new ResizeObserver(()=>{this.#z&&this.#V({behavior:this.#I?"smooth":"instant"})}),this.#R.observe(t))}#W(){this.#M?.removeEventListener("scroll",this.#J),this.#M?.removeEventListener("scrollend",this.#Y),this.#R?.disconnect(),this.#R=null,this.#M=null}#Y=()=>{this.#Z()};#J=()=>{const t=this.#M;if(!t)return;const e=t.scrollHeight-t.scrollTop-t.clientHeight<=24;if(this.#I)return void(e&&this.#Z());e!==this.#z&&(this.#z=e,e&&this.#B&&(this.#B=!1,this.#t.requestUpdate()));const s=t.scrollTop<=0;s&&!this.#H&&$t(this.#t,wt.SCROLL_TOP,{}),this.#H=s};scrollToBottom({smooth:t}={}){const e=void 0===t?this.#G:t?"smooth":"instant";this.#V({behavior:e}),this.#B&&(this.#B=!1,this.#t.requestUpdate())}get#G(){return this.#D||window.matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":this.#L()}#V({behavior:t="instant"}={}){const e=this.#M;e&&(this.#D=!1,"smooth"===t&&this.#Q(),e.scrollTo({top:e.scrollHeight,behavior:t}),this.#z=!0,this.#H=!1,this.#B=!1)}#Q(){this.#I=!0,clearTimeout(this.#j),this.#j=setTimeout(()=>this.#Z(),700)}#Z(){if(!this.#I)return;this.#I=!1,clearTimeout(this.#j);const t=this.#M;if(!t)return;const e=t.scrollHeight-t.scrollTop-t.clientHeight;this.#z=e<=24}}const Kt="undefined"!=typeof CSS&&CSS.supports?.("field-sizing","content");class Gt{#t;#X="";#tt=!1;#et=!1;#st;constructor(t){this.#t=t,t.addController(this)}get value(){return this.#X}set value(t){this.#X=t??"";const e=this.#it;e&&e.value!==this.#X&&(e.value=this.#X),this.#nt(),this.#ot()}get composing(){return this.#tt}get length(){return Array.from(this.#X).length}get canSend(){if(this.#t.busy||this.#t.inputDisabled)return!1;if(""===this.#X.trim())return!1;const t=this.#t.maxLength;return void 0===t||this.length<=t}hostDisconnected(){clearTimeout(this.#st)}hostUpdated(){const t=this.#it;t&&t.value!==this.#X&&(t.value=this.#X),this.#nt(),this.#ot()}get#it(){return this.#t.renderRoot.querySelector('[part~="input"]')}onInput(t){this.#X=t.target.value,this.#nt(),this.#ot(),$t(this.#t,wt.INPUT,{value:this.#X})}onCompositionStart(){this.#tt=!0}onCompositionEnd(){this.#tt=!1,this.#et=!0,clearTimeout(this.#st),this.#st=setTimeout(()=>{this.#et=!1},0)}onKeydown(t){"Enter"===t.key&&this.#t.sendOnEnter&&(t.shiftKey||t.altKey||t.ctrlKey||t.metaKey||t.isComposing||229===t.keyCode||this.#tt||this.#et||(t.preventDefault(),this.submit()))}submit(t){const e=t??this.#X;if(void 0===t&&!this.canSend)return!1;if(void 0!==t&&(this.#t.busy||this.#t.inputDisabled))return!1;if(""===e.trim())return!1;return!!$t(this.#t,wt.SUBMIT,{text:e},{cancelable:!0})&&(this.clear(),!0)}clear(){this.value="",this.focus()}focus(){this.#it?.focus()}#nt(){if(Kt)return;const t=this.#it;t&&(t.style.height="auto",t.style.height=`${t.scrollHeight}px`)}#ot(){const t=this.#t.renderRoot,e=t.querySelector('[part~="send-button"]');e&&(e.disabled=!this.canSend);const s=this.#it,i=t.querySelector('[part~="counter"]'),n=this.#t.maxLength;if(void 0===n)return;const o=n-this.length,r=o<0;if(s?.setAttribute("aria-invalid",r?"true":"false"),!i)return;i.textContent=String(o),i.toggleAttribute("data-over",r);const a=this.#t.currentLabels,h=r?a.overLimit:a.charactersLeft;i.setAttribute("aria-label",h.replace("{n}",String(Math.abs(o)))),i.hidden=this.length<=.8*n}}const Vt=new WeakMap,Jt=t=>`msg:${t}`,Yt=["text","html","template","element","component"];function Zt(t){const e=Yt.filter(e=>e in t);if(1===e.length)return e[0];if(0===e.length)throw new Error(`ChitUI: message "${t.id}" has no content. Give it one of html, template, element or component.`);throw new Error(`ChitUI: message "${t.id}" has ${e.join(" and ")}. Give it exactly one.`)}function Qt(t){return t[Zt(t)]}function Xt(t,e,s,i={}){let n=Vt.get(t);n||(n=new Map,Vt.set(t,n));const o=n.get(e);if(o&&o.source===s){for(const[t,e]of Object.entries(i))Object.is(o.props[t],e)||(o.element[t]=e);return o.props={...i},o.element}const r=document.createElement(function(t){if("string"==typeof t)return t;const e=customElements,s=e.getName?.(t);if(s)return s;const i=t.tagName;if("string"==typeof i&&i)return i;throw new Error("ChitUI: component is not registered in customElements. Call customElements.define() for it, or pass its tag name as a string.")}(s));for(const[t,e]of Object.entries(i))r[t]=e;return n.set(e,{source:s,element:r,props:{...i}}),r}function te(t,e){return Vt.get(t)?.get(Jt(e))?.element}function ee(t,e){switch(Zt(e)){case"text":return e.text;case"template":return e.template;case"element":return e.element;case"component":{const s=e;return Xt(t,Jt(e.id),s.component,s.props)}default:{const s=e.html;return yt(t.sanitize?t.sanitize(s):s)}}}function se(t){const e=t.currentTheme.closed,s=t.currentLabels,i=e.component?Xt(t,"launcher",e.component,e.props):null;return F`
1
+ var ChitUI=function(t){"use strict";const e=globalThis,i=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s=Symbol(),n=new WeakMap;let o=class{constructor(t,e,i){if(this._$cssResult$=!0,i!==s)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(i&&void 0===t){const i=void 0!==e&&1===e.length;i&&(t=n.get(e)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),i&&n.set(e,t))}return t}toString(){return this.cssText}};const r=(t,...e)=>{const i=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new o(i,t,s)},a=i?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new o("string"==typeof t?t:t+"",void 0,s))(e)})(t):t,{is:h,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:d,getOwnPropertySymbols:p,getPrototypeOf:u}=Object,m=globalThis,f=m.trustedTypes,g=f?f.emptyScript:"",b=m.reactiveElementPolyfillSupport,v=(t,e)=>t,y={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},w=(t,e)=>!h(t,e),x={attribute:!0,type:String,converter:y,reflect:!1,useDefault:!1,hasChanged:w};Symbol.metadata??=Symbol("metadata"),m.litPropertyMetadata??=new WeakMap;let $=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=x){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??x}static _$Ei(){if(this.hasOwnProperty(v("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(v("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(v("properties"))){const t=this.properties,e=[...d(t),...p(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((t,s)=>{if(i)t.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const i of s){const s=document.createElement("style"),n=e.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=i.cssText,t.appendChild(s)}})(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:y).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:y;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??w)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};$.elementStyles=[],$.shadowRootOptions={mode:"open"},$[v("elementProperties")]=new Map,$[v("finalized")]=new Map,b?.({ReactiveElement:$}),(m.reactiveElementVersions??=[]).push("2.1.2");const _=globalThis,S=t=>t,A=_.trustedTypes,E=A?A.createPolicy("lit-html",{createHTML:t=>t}):void 0,k="$lit$",T=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+T,O=`<${C}>`,L=document,M=()=>L.createComment(""),P=t=>null===t||"object"!=typeof t&&"function"!=typeof t,z=Array.isArray,U="[ \t\n\f\r]",R=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,H=/-->/g,D=/>/g,B=RegExp(`>|${U}(?:([^\\s"'>=/]+)(${U}*=${U}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),I=/'/g,N=/"/g,j=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),W=q(1),F=q(2),K=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),Y=new WeakMap,G=L.createTreeWalker(L,129);function J(t,e){if(!z(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==E?E.createHTML(e):e}class X{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const r=t.length-1,a=this.parts,[h,l]=((t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"<svg>":3===e?"<math>":"",r=R;for(let e=0;e<i;e++){const i=t[e];let a,h,l=-1,c=0;for(;c<i.length&&(r.lastIndex=c,h=r.exec(i),null!==h);)c=r.lastIndex,r===R?"!--"===h[1]?r=H:void 0!==h[1]?r=D:void 0!==h[2]?(j.test(h[2])&&(n=RegExp("</"+h[2],"g")),r=B):void 0!==h[3]&&(r=B):r===B?">"===h[0]?(r=n??R,l=-1):void 0===h[1]?l=-2:(l=r.lastIndex-h[2].length,a=h[1],r=void 0===h[3]?B:'"'===h[3]?N:I):r===N||r===I?r=B:r===H||r===D?r=R:(r=B,n=void 0);const d=r===B&&t[e+1].startsWith("/>")?" ":"";o+=r===R?i+O:l>=0?(s.push(a),i.slice(0,l)+k+i.slice(l)+T+d):i+T+(-2===l?e:d)}return[J(t,o+(t[i]||"<?>")+(2===e?"</svg>":3===e?"</math>":"")),s]})(t,e);if(this.el=X.createElement(h,i),G.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=G.nextNode())&&a.length<r;){if(1===s.nodeType){if(s.hasAttributes())for(const t of s.getAttributeNames())if(t.endsWith(k)){const e=l[o++],i=s.getAttribute(t).split(T),r=/([.?@])?(.*)/.exec(e);a.push({type:1,index:n,name:r[2],strings:i,ctor:"."===r[1]?it:"?"===r[1]?st:"@"===r[1]?nt:et}),s.removeAttribute(t)}else t.startsWith(T)&&(a.push({type:6,index:n}),s.removeAttribute(t));if(j.test(s.tagName)){const t=s.textContent.split(T),e=t.length-1;if(e>0){s.textContent=A?A.emptyScript:"";for(let i=0;i<e;i++)s.append(t[i],M()),G.nextNode(),a.push({type:2,index:++n});s.append(t[e],M())}}}else if(8===s.nodeType)if(s.data===C)a.push({type:2,index:n});else{let t=-1;for(;-1!==(t=s.data.indexOf(T,t+1));)a.push({type:7,index:n}),t+=T.length-1}n++}}static createElement(t,e){const i=L.createElement("template");return i.innerHTML=t,i}}function Z(t,e,i=t,s){if(e===K)return e;let n=void 0!==s?i._$Co?.[s]:i._$Cl;const o=P(e)?void 0:e._$litDirective$;return n?.constructor!==o&&(n?._$AO?.(!1),void 0===o?n=void 0:(n=new o(t),n._$AT(t,i,s)),void 0!==s?(i._$Co??=[])[s]=n:i._$Cl=n),void 0!==n&&(e=Z(t,n._$AS(t,e.values),n,s)),e}class Q{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:e},parts:i}=this._$AD,s=(t?.creationScope??L).importNode(e,!0);G.currentNode=s;let n=G.nextNode(),o=0,r=0,a=i[0];for(;void 0!==a;){if(o===a.index){let e;2===a.type?e=new tt(n,n.nextSibling,this,t):1===a.type?e=new a.ctor(n,a.name,a.strings,this,t):6===a.type&&(e=new ot(n,this,t)),this._$AV.push(e),a=i[++r]}o!==a?.index&&(n=G.nextNode(),o++)}return G.currentNode=L,s}p(t){let e=0;for(const i of this._$AV)void 0!==i&&(void 0!==i.strings?(i._$AI(t,i,e),e+=i.strings.length-2):i._$AI(t[e])),e++}}class tt{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,i,s){this.type=2,this._$AH=V,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=i,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const e=this._$AM;return void 0!==e&&11===t?.nodeType&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=Z(this,t,e),P(t)?t===V||null==t||""===t?(this._$AH!==V&&this._$AR(),this._$AH=V):t!==this._$AH&&t!==K&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):(t=>z(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==V&&P(this._$AH)?this._$AA.nextSibling.data=t:this.T(L.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=X.createElement(J(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=Y.get(t.strings);return void 0===e&&Y.set(t.strings,e=new X(t)),e}k(t){z(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(M()),this.O(M()),this,this.options)):i=e[s],i._$AI(n),s++;s<e.length&&(this._$AR(i&&i._$AB.nextSibling,s),e.length=s)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){const e=S(t).nextSibling;S(t).remove(),t=e}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class et{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,i,s,n){this.type=1,this._$AH=V,this._$AN=void 0,this.element=t,this.name=e,this._$AM=s,this.options=n,i.length>2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!P(t)||t!==this._$AH&&t!==K,o&&(this._$AH=t);else{const s=t;let r,a;for(t=n[0],r=0;r<n.length-1;r++)a=Z(this,s[i+r],e,r),a===K&&(a=this._$AH[r]),o||=!P(a)||a!==this._$AH[r],a===V?t=V:t!==V&&(t+=(a??"")+n[r+1]),this._$AH[r]=a}o&&!s&&this.j(t)}j(t){t===V?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}}class it extends et{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===V?void 0:t}}class st extends et{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==V)}}class nt extends et{constructor(t,e,i,s,n){super(t,e,i,s,n),this.type=5}_$AI(t,e=this){if((t=Z(this,t,e,0)??V)===K)return;const i=this._$AH,s=t===V&&i!==V||t.capture!==i.capture||t.once!==i.once||t.passive!==i.passive,n=t!==V&&(i===V||s);s&&this.element.removeEventListener(this.name,this,i),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){"function"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class ot{constructor(t,e,i){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(t){Z(this,t)}}const rt={I:tt},at=_.litHtmlPolyfillSupport;at?.(X,tt),(_.litHtmlVersions??=[]).push("3.3.3");const ht=(t,e,i)=>{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(M(),t),t,void 0,i??{})}return n._$AI(t),n},lt=globalThis;let ct=class extends ${constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=ht(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return K}};ct._$litElement$=!0,ct.finalized=!0,lt.litElementHydrateSupport?.({LitElement:ct});const dt=lt.litElementPolyfillSupport;dt?.({LitElement:ct}),(lt.litElementVersions??=[]).push("4.2.2");const pt=1,ut=2,mt=3,ft=4,gt=t=>(...e)=>({_$litDirective$:t,values:e});let bt=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}},vt=class extends bt{constructor(t){if(super(t),this.it=V,t.type!==ut)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===V||null==t)return this._t=void 0,this.it=t;if(t===K)return t;if("string"!=typeof t)throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;const e=[t];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};vt.directiveName="unsafeHTML",vt.resultType=1;const yt=gt(vt),wt=Object.freeze({SUBMIT:"chat-submit",BEFORE_OPEN:"chat-before-open",OPEN:"chat-open",BEFORE_CLOSE:"chat-before-close",CLOSE:"chat-close",HIDE:"chat-hide",SHOW:"chat-show",STATE_CHANGE:"chat-state-change",INPUT:"chat-input",MESSAGE_RENDER:"chat-message-render",MESSAGE_CLICK:"chat-message-click",SCROLL_TOP:"chat-scroll-top",BREAKPOINT_CHANGE:"chat-breakpoint-change",HOME:"chat-home",ATTACH:"chat-attach",MOVE:"chat-move"});function xt(t,e,i,{cancelable:s=!1}={}){return t.dispatchEvent(new CustomEvent(e,{detail:i,bubbles:!0,composed:!0,cancelable:s}))}const $t={closed:"launcher",open:"panel",hidden:null};class _t{#t;#e;#i;#s;#n="closed";#o="closed";#r=!1;#a=0;#h=null;#l=null;#c=!1;constructor(t,{animation:e,keepsLauncher:i,onOpened:s}){this.#t=t,this.#e=e,this.#i=i,this.#s=s,t.addController(this)}get renderedState(){return this.#o}get applying(){return this.#r}hostConnected(){this.#n=this.#t.state,this.#o=this.#t.state,this.#t.dataset.renderedState=this.#o}hostDisconnected(){this.#l?.(),this.#l=null,this.#h?.(!1),this.#h=null}hostUpdated(){this.#t.dataset.renderedState=this.#o}request(t,e){const i=this.#n;return t===i?Promise.resolve(!0):this.#d(i,t,e)?(this.#p(),this.#n=t,this.#u(t),xt(this.#t,wt.STATE_CHANGE,{from:i,to:t,trigger:e}),this.#m(i,t,e)):(this.#u(i),Promise.resolve(!1))}#d(t,e,i){return"open"===e?xt(this.#t,wt.BEFORE_OPEN,{from:t,trigger:i},{cancelable:!0}):"closed"!==e||"open"!==t||xt(this.#t,wt.BEFORE_CLOSE,{from:t,trigger:i},{cancelable:!0})}#p(){this.#a+=1,this.#l?.(),this.#l=null,this.#h?.(!1),this.#h=null,this.#o!==this.#n&&(this.#o=this.#n,this.#t.requestUpdate())}#m(t,e,i){const s=this.#a,n=new Promise(t=>{this.#h=t});return(async()=>{if(this.#c=this.#f(),await this.#t.updateComplete,s!==this.#a)return;const n=this.#g(t);if(n&&!this.#b(t,e)&&(await this.#v(n,"exit",this.#e(t,e,"exit")),s!==this.#a))return;if(this.#o=e,this.#t.requestUpdate(),await this.#t.updateComplete,s!==this.#a)return;const o=this.#g(e);o&&(await this.#v(o,"enter",this.#e(t,e,"enter")),s!==this.#a)||(this.#y(t,e,i),this.#w(e),this.#h?.(!0),this.#h=null)})(),n}#b(t,e){return"closed"===t&&"open"===e&&this.#i()}#y(t,e,i){"hidden"===t&&xt(this.#t,wt.SHOW,{from:t,to:e}),"hidden"!==e?"open"===e?xt(this.#t,wt.OPEN,{from:t,trigger:i}):"closed"===e&&"open"===t&&xt(this.#t,wt.CLOSE,{from:t,trigger:i}):xt(this.#t,wt.HIDE,{from:t,to:e})}#w(t){"open"!==t?("closed"===t&&this.#c&&this.#g("closed")?.focus(),this.#c=!1):this.#s()}#f(){const t=this.#t.renderRoot instanceof ShadowRoot?this.#t.renderRoot.activeElement:null,e=this.#g("open");return!(!t||!e||t!==e&&!e.contains(t))}#g(t){const e=$t[t];return e?this.#t.renderRoot.querySelector(`[part~="${e}"]`):null}#u(t){this.#t.state!==t&&(this.#r=!0,this.#t.state=t,this.#r=!1)}#v(t,e,i){const{effect:s,duration:n}=i;return"none"===s||n<=0||window.matchMedia("(prefers-reduced-motion: reduce)").matches?Promise.resolve():new Promise(i=>{let o=!1;const r=e=>{e&&e.target!==t||o||(o=!0,clearTimeout(a),t.removeEventListener("animationend",r),t.removeAttribute("data-anim"),t.style.removeProperty("--_chit-anim-duration"),this.#l===r&&(this.#l=null),i())};t.dataset.effect=s,t.dataset.anim=e,t.style.setProperty("--_chit-anim-duration",`${n}ms`),t.addEventListener("animationend",r);const a=setTimeout(r,n+50);this.#l=r})}}class St{#t;#x=null;#$=0;#_="pc";#S=!1;constructor(t){this.#t=t,t.addController(this)}get device(){return this.#_}hostDisconnected(){this.#x?.removeEventListener("change",this.#A),this.#x=null}observe(t){t===this.#$&&this.#x||(this.#$=t,this.#x?.removeEventListener("change",this.#A),this.#x=window.matchMedia(`(max-width: ${t-1}px)`),this.#x.addEventListener("change",this.#A),this.#E(this.#x.matches?"mobile":"pc"))}#A=t=>{this.#E(t.matches?"mobile":"pc")};#E(t){t===this.#_&&this.#t.dataset.device||(this.#_=t,this.#t.dataset.device=t,this.#t.requestUpdate(),this.#S&&xt(this.#t,wt.BREAKPOINT_CHANGE,{device:t}),this.#S=!0)}}const At="#2563eb",Et="#1f2328",kt="#5c6370",Tt="#ffffff",Ct="#f1f3f5",Ot="#e4e4e7",Lt="#ffffff",Mt={size:60,position:"bottom-right",offset:{x:24,y:24},radius:30,draggable:!1,image:null,label:null,component:null,props:{},colors:{background:At,text:Lt,shadow:"0 4px 12px rgba(0, 0, 0, 0.2)"},animation:{enter:"scale",exit:"scale",duration:200,idle:"none"}},Pt={size:56,offset:{x:16,y:16},radius:28},zt={breakpoint:768,zIndex:2147483e3,font:{family:"system-ui, -apple-system, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif",size:14},closed:{pc:Mt,mobile:{...Mt,...Pt}},open:{width:380,height:600,position:"bottom-right",offset:{x:24,y:24},radius:16,launcher:"hidden",draggable:!1,header:{visible:!0,title:null,logo:null,home:!1},background:{image:null},colors:{background:Tt,text:Et,accent:At,border:Ot,shadow:"0 8px 32px rgba(0, 0, 0, 0.24)",headerBackground:Tt,headerText:Et,userBubble:At,userText:Lt,assistantBubble:Ct,assistantText:Et,systemText:kt,inputBackground:Tt,inputText:Et,inputPlaceholder:kt},bubble:{radius:14,tail:"none"},loading:{auto:!1,style:"spinner",text:null,timeout:0},speaker:{assistant:{name:null,avatar:null},user:{name:null,avatar:null}},animation:{enter:"scale",exit:"fade",duration:150,scroll:"smooth"},input:{maxRows:5,placeholder:null,attach:!1,accept:"image/*,video/*",multiple:!1}},hidden:{animation:{exit:"fade",duration:150}}},Ut=Pt;function Rt(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function Ht(t,e){if(!Rt(e))return t;const i={...t};for(const[t,s]of Object.entries(e)){if(void 0===s)continue;const e=i[t];i[t]=Rt(s)&&Rt(e)?Ht(e,s):s}return i}function Dt(t,e){const i=t??{},s=function(t,e){const i=t??{};if(!("pc"in i)&&!("mobile"in i)){const i=t??{};return Ht(zt.closed[e],i)}const s=Ht(zt.closed.pc,i.pc);return"pc"===e?s:i.mobile?Ht(zt.closed.mobile,i.mobile):Ht(s,Ut)}(i.closed,e);return{breakpoint:i.breakpoint??zt.breakpoint,zIndex:i.zIndex??zt.zIndex,font:Ht(zt.font,i.font),closed:Ht(zt.closed[e],s),open:Ht(zt.open,i.open),hidden:Ht(zt.hidden,i.hidden),device:e}}const Bt=t=>`${t}px`;function It(t){return t?`url("${t.replace(/[\\"]/g,"\\$&")}")`:"none"}function Nt(t){const e=Object.entries(function(t){const{closed:e,open:i}=t,s=i.colors;return{"--chit-z-index":String(t.zIndex),"--chit-font-family":t.font.family,"--chit-font-size":Bt(t.font.size),"--chit-launcher-size":"auto"===e.size?"auto":Bt(e.size),"--chit-launcher-offset-x":Bt(e.offset.x),"--chit-launcher-offset-y":Bt(e.offset.y),"--chit-launcher-radius":Bt(e.radius),"--chit-launcher-image":It(e.image),"--chit-launcher-bg":e.colors.background,"--chit-launcher-text":e.colors.text,"--chit-launcher-shadow":e.colors.shadow,"--chit-panel-width":Bt(i.width),"--chit-panel-height":Bt(i.height),"--chit-panel-offset-x":Bt(i.offset.x),"--chit-panel-offset-y":Bt(i.offset.y),"--chit-panel-radius":Bt(i.radius),"--chit-panel-bg-image":It(i.background.image),"--chit-panel-shadow":s.shadow,"--chit-color-bg":s.background,"--chit-color-text":s.text,"--chit-color-accent":s.accent,"--chit-color-border":s.border,"--chit-color-header-bg":s.headerBackground,"--chit-color-header-text":s.headerText,"--chit-color-user-bg":s.userBubble,"--chit-color-user-text":s.userText,"--chit-color-assistant-bg":s.assistantBubble,"--chit-color-assistant-text":s.assistantText,"--chit-color-system-text":s.systemText,"--chit-color-input-bg":s.inputBackground,"--chit-color-input-text":s.inputText,"--chit-color-input-placeholder":s.inputPlaceholder,"--chit-bubble-radius":Bt(i.bubble.radius),"--_chit-input-max-rows":String(i.input.maxRows),"--_chit-speaker-gutter":i.speaker.assistant.avatar?"2.5em":"0px"}}(t)).map(([t,e])=>` ${t}: ${e};`).join("\n");return`:host {\n${e}\n}\n`}const jt="undefined"!=typeof ShadowRoot&&"adoptedStyleSheets"in Document.prototype&&"replaceSync"in CSSStyleSheet.prototype;class qt{#k=null;#T=null;#C="";#O;constructor(t){this.#O=t}attach(t){if(t instanceof ShadowRoot){if(jt)return this.#k||(this.#k=new CSSStyleSheet),void(t.adoptedStyleSheets.includes(this.#k)||(t.adoptedStyleSheets=[...t.adoptedStyleSheets,this.#k]));this.#T||(this.#T=document.createElement("style"),this.#T.setAttribute(this.#O,"")),this.#T.parentNode!==t&&t.append(this.#T)}}write(t,e){if(t!==this.#C){if(this.attach(e),this.#k)this.#k.replaceSync(t);else{if(!this.#T)return;this.#T.textContent=t}this.#C=t}}detach(){this.#T?.remove(),this.#T=null}}class Wt{#t;#k=new qt("data-chit-theme");#L;constructor(t,{device:e}){this.#t=t,this.#L=Dt(void 0,e())}get current(){return this.#L}hostConnected(){this.#M()}hostDisconnected(){this.#k.detach()}static breakpointOf(t){return function(t){return t?.breakpoint??zt.breakpoint}(t)}apply(t,e){this.#L=Dt(t,e),this.#M()}#M(){this.#k.write(Nt(this.#L),this.#t.renderRoot)}}class Ft{#t;#P;#z=null;#U=null;#R=!0;#H=!1;#D=!1;#B=!0;#I=!1;#N;#j=!0;#q=0;#W;#F=0;constructor(t,{behavior:e}){this.#t=t,this.#P=e,t.addController(this)}get hasUnseen(){return this.#H}get atBottom(){return this.#R}hostDisconnected(){this.#K(),clearTimeout(this.#N)}hostUpdate(){const t=this.#t.messages,e=t[t.length-1],i=t.length>this.#F,s=e?.id!==this.#W;this.#W=e?.id,this.#F=t.length,(i||s)&&(this.#R||"user"===e?.role?this.#B=!0:this.#H=!0)}hostUpdated(){const t=this.#t.renderRoot.querySelector('[part~="messages"]');if(t!==this.#z&&(this.#K(),this.#z=t,this.#V(),t&&(this.#R=!0,this.#H=!1,this.#B=!0,this.#j=!0)),this.#B){const t=this.#Y;this.#B=!1,this.#G({behavior:t})}}#V(){if(!this.#z)return;this.#q=this.#z.clientHeight,this.#z.addEventListener("scroll",this.#J,{passive:!0}),this.#z.addEventListener("scrollend",this.#X);const t=this.#z.firstElementChild;t&&"undefined"!=typeof ResizeObserver&&(this.#U=new ResizeObserver(()=>{this.#q=this.#z?.clientHeight??0,this.#R&&this.#G({behavior:this.#I?"smooth":"instant"})}),this.#U.observe(t),this.#U.observe(this.#z))}#K(){this.#z?.removeEventListener("scroll",this.#J),this.#z?.removeEventListener("scrollend",this.#X),this.#U?.disconnect(),this.#U=null,this.#z=null}#X=()=>{this.#Z()};#J=()=>{const t=this.#z;if(!t)return;if(t.clientHeight!==this.#q)return void(this.#q=t.clientHeight);const e=t.scrollHeight-t.scrollTop-t.clientHeight<=24;if(this.#I)return void(e&&this.#Z());e!==this.#R&&(this.#R=e,e&&this.#H&&(this.#H=!1,this.#t.requestUpdate()));const i=t.scrollTop<=0;i&&!this.#D&&xt(this.#t,wt.SCROLL_TOP,{}),this.#D=i};scrollToBottom({smooth:t}={}){const e=void 0===t?this.#Y:t?"smooth":"instant";this.#G({behavior:e}),this.#H&&(this.#H=!1,this.#t.requestUpdate())}get#Y(){return this.#j||window.matchMedia("(prefers-reduced-motion: reduce)").matches?"instant":this.#P()}#G({behavior:t="instant"}={}){const e=this.#z;e&&(this.#j=!1,"smooth"===t&&this.#Q(),e.scrollTo({top:e.scrollHeight,behavior:t}),this.#R=!0,this.#D=!1,this.#H=!1)}#Q(){this.#I=!0,clearTimeout(this.#N),this.#N=setTimeout(()=>this.#Z(),700)}#Z(){if(!this.#I)return;this.#I=!1,clearTimeout(this.#N);const t=this.#z;if(!t)return;const e=t.scrollHeight-t.scrollTop-t.clientHeight;this.#R=e<=24}}const Kt="undefined"!=typeof CSS&&CSS.supports?.("field-sizing","content");class Vt{#t;#tt="";#et=!1;#it=!1;#st;constructor(t){this.#t=t,t.addController(this)}get value(){return this.#tt}set value(t){this.#tt=t??"";const e=this.#nt;e&&e.value!==this.#tt&&(e.value=this.#tt),this.#ot(),this.#rt()}get composing(){return this.#et}get length(){return Array.from(this.#tt).length}get canSend(){if(this.#t.busy||this.#t.inputDisabled)return!1;if(""===this.#tt.trim())return!1;const t=this.#t.maxLength;return void 0===t||this.length<=t}hostDisconnected(){clearTimeout(this.#st)}hostUpdated(){const t=this.#nt;t&&t.value!==this.#tt&&(t.value=this.#tt),this.#ot(),this.#rt()}get#nt(){return this.#t.renderRoot.querySelector('[part~="input"]')}onInput(t){this.#tt=t.target.value,this.#ot(),this.#rt(),xt(this.#t,wt.INPUT,{value:this.#tt})}onCompositionStart(){this.#et=!0}onCompositionEnd(){this.#et=!1,this.#it=!0,clearTimeout(this.#st),this.#st=setTimeout(()=>{this.#it=!1},0)}onKeydown(t){"Enter"===t.key&&this.#t.sendOnEnter&&(t.shiftKey||t.altKey||t.ctrlKey||t.metaKey||t.isComposing||229===t.keyCode||this.#et||this.#it||(t.preventDefault(),this.submit()))}submit(t){const e=t??this.#tt;if(void 0===t&&!this.canSend)return!1;if(void 0!==t&&(this.#t.busy||this.#t.inputDisabled))return!1;if(""===e.trim())return!1;return!!xt(this.#t,wt.SUBMIT,{text:e},{cancelable:!0})&&(this.clear(),this.#t.handleSubmitted(),!0)}clear(){this.value="",this.focus()}focus(){this.#nt?.focus()}#ot(){if(Kt)return;const t=this.#nt;t&&(t.style.height="auto",t.style.height=`${t.scrollHeight}px`)}#rt(){const t=this.#t.renderRoot,e=t.querySelector('[part~="send-button"]');e&&(e.disabled=!this.canSend);const i=this.#nt,s=t.querySelector('[part~="counter"]'),n=this.#t.maxLength;if(void 0===n)return;const o=n-this.length,r=o<0;if(i?.setAttribute("aria-invalid",r?"true":"false"),!s)return;s.textContent=String(o),s.toggleAttribute("data-over",r);const a=this.#t.currentLabels,h=r?a.overLimit:a.charactersLeft;s.setAttribute("aria-label",h.replace("{n}",String(Math.abs(o)))),s.hidden=this.length<=.8*n}}class Yt{#t;#at;#ht;#lt=!1;constructor(t,e){this.#t=t,this.#at=e,t.addController(this)}hostConnected(){this.#ct=()=>{const t=this.#at.current();t&&this.#at.onMove(t)},window.addEventListener("resize",this.#ct)}hostDisconnected(){this.#ct&&window.removeEventListener("resize",this.#ct),this.#ct=void 0}#ct;consumeDrag(){const t=this.#lt;return this.#lt=!1,t}place(t){if(!t){for(const t of[this.#at.vars.x,this.#at.vars.y])this.#t.style.removeProperty(t);return}const e=this.#at.element(),i=this.#dt(t),s=e?this.#pt(i,this.#at.size()):i;return this.#t.style.setProperty(this.#at.vars.x,`${s.x}px`),this.#t.style.setProperty(this.#at.vars.y,`${s.y}px`),e?s:void 0}start(t){if(!this.#at.enabled()||0!==t.button)return;if(this.#at.element()){this.#ht={pointer:{x:t.clientX,y:t.clientY},displacement:this.#at.current()??{x:0,y:0},size:this.#at.size(),corner:this.#at.corner(),base:this.#at.base(),moved:!1,pointerId:t.pointerId,target:t.currentTarget};try{this.#ht.target.setPointerCapture(t.pointerId)}catch{}this.#ht.target.addEventListener("pointermove",this.#ut),this.#ht.target.addEventListener("pointerup",this.#mt),this.#ht.target.addEventListener("pointercancel",this.#mt)}}#ut=t=>{const e=this.#ht;if(!e||t.pointerId!==e.pointerId)return;const i=t.clientX-e.pointer.x,s=t.clientY-e.pointer.y;!e.moved&&Math.hypot(i,s)<4||(e.moved=!0,t.preventDefault(),this.#at.onMove(this.#ft({x:e.displacement.x+i,y:e.displacement.y+s},e.base,e.corner,e.size)))};#mt=t=>{const e=this.#ht;if(e&&t.pointerId===e.pointerId){e.target.removeEventListener("pointermove",this.#ut),e.target.removeEventListener("pointerup",this.#mt),e.target.removeEventListener("pointercancel",this.#mt);try{e.target.hasPointerCapture(t.pointerId)&&e.target.releasePointerCapture(t.pointerId)}catch{}this.#ht=void 0,e.moved&&(this.#lt=!0,this.#at.onSettle(this.#at.name))}};nudge(t){if(!this.#at.enabled())return!1;if(t.altKey||t.ctrlKey||t.metaKey)return!1;const e={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]}[t.key];if(!e)return!1;if(!this.#at.element())return!1;const i=t.shiftKey?32:8,s=this.#at.current()??{x:0,y:0};return t.preventDefault(),this.#at.onMove(this.#ft({x:s.x+e[0]*i,y:s.y+e[1]*i},this.#at.base(),this.#at.corner(),this.#at.size())),this.#at.onSettle(this.#at.name),!0}#dt(t,e=this.#at.base(),i=this.#at.corner()){return{x:e.x+(i.endsWith("right")?-t.x:t.x),y:e.y+(i.startsWith("bottom")?-t.y:t.y)}}#ft(t,e,i,s){const n=this.#pt(this.#dt(t,e,i),s);return{x:i.endsWith("right")?e.x-n.x:n.x-e.x,y:i.startsWith("bottom")?e.y-n.y:n.y-e.y}}#pt(t,e){return{x:Gt(t.x,window.innerWidth-e.width),y:Gt(t.y,window.innerHeight-e.height)}}}function Gt(t,e){return Math.round(Math.min(Math.max(t,8),Math.max(8,e-8)))}const Jt=/^(auto|scroll|overlay)$/;class Xt{#t;#gt=null;#bt;constructor(t){this.#t=t,t.addController(this)}hostUpdated(){const t=this.#t.renderRoot?.querySelector('[part~="panel"]')??null;t!==this.#gt&&(this.#K(),this.#gt=t,this.#V())}hostDisconnected(){this.#K()}#V(){const t=this.#gt;t&&(t.addEventListener("touchstart",this.#vt,{passive:!0}),t.addEventListener("touchmove",this.#yt,{passive:!1}),t.addEventListener("touchend",this.#wt,{passive:!0}),t.addEventListener("touchcancel",this.#wt,{passive:!0}))}#K(){const t=this.#gt;t&&(t.removeEventListener("touchstart",this.#vt),t.removeEventListener("touchmove",this.#yt),t.removeEventListener("touchend",this.#wt),t.removeEventListener("touchcancel",this.#wt),this.#gt=null,this.#bt=void 0)}#vt=t=>{if(1!==t.touches.length)return void(this.#bt=void 0);const e=t.touches[0];this.#bt={x:e.clientX,y:e.clientY,verdict:"undecided"}};#wt=()=>{this.#bt=void 0};#yt=t=>{const e=this.#bt;if(!e)return;if(t.touches.length>1)return void(this.#bt=void 0);if("block"===e.verdict)return void(t.cancelable&&t.preventDefault());if("allow"===e.verdict)return;const i=t.touches[0],s=i.clientX-e.x,n=i.clientY-e.y;if(Math.abs(s)<3&&Math.abs(n)<3)return;const o=Math.abs(n)>=Math.abs(s),r=this.#xt(t,o,o?n:s);e.verdict=r?"allow":"block",!r&&t.cancelable&&t.preventDefault()};#xt(t,e,i){const s=this.#gt;if(!s)return!0;for(const n of t.composedPath())if(n instanceof HTMLElement){if(this.#$t(n,e,i))return!0;if(n===s)break}return!1}#$t(t,e,i){const s=getComputedStyle(t),n=e?s.overflowY:s.overflowX;if(!Jt.test(n))return!1;const o=e?t.scrollTop:t.scrollLeft,r=e?t.clientHeight:t.clientWidth,a=e?t.scrollHeight:t.scrollWidth;return!(a<=r+1)&&(i>0?o>1:o<a-r-1)}}class Zt{#t;#_t;#A;#St=!1;constructor(t,{enabled:e}){this.#t=t,this.#_t=e,t.addController(this)}hostConnected(){const t=window.visualViewport;t&&(this.#A=()=>this.#E(),t.addEventListener("resize",this.#A),t.addEventListener("scroll",this.#A))}hostDisconnected(){const t=window.visualViewport;t&&this.#A&&(t.removeEventListener("resize",this.#A),t.removeEventListener("scroll",this.#A)),this.#A=void 0,this.#At()}hostUpdated(){this.#E()}#E(){const t=window.visualViewport,e=this.#t.renderRoot?.querySelector('[part~="panel"]');t&&e&&this.#_t()&&!(t.scale>1.01)?(this.#t.style.setProperty("--_chit-vv-top",`${Math.round(t.offsetTop)}px`),this.#t.style.setProperty("--_chit-vv-height",`${Math.round(t.height)}px`),this.#St=!0):this.#At()}#At(){this.#St&&(this.#t.style.removeProperty("--_chit-vv-top"),this.#t.style.removeProperty("--_chit-vv-height"),this.#St=!1)}}const Qt=new WeakMap,te=t=>`msg:${t}`,ee=["text","html","template","element","component"];function ie(t){const e=ee.filter(e=>e in t);if(1===e.length)return e[0];if(0===e.length)throw new Error(`ChitUI: message "${t.id}" has no content. Give it one of html, template, element or component.`);throw new Error(`ChitUI: message "${t.id}" has ${e.join(" and ")}. Give it exactly one.`)}function se(t){return t[ie(t)]}function ne(t,e,i,s={}){let n=Qt.get(t);n||(n=new Map,Qt.set(t,n));const o=n.get(e);if(o&&o.source===i){for(const[t,e]of Object.entries(s))Object.is(o.props[t],e)||(o.element[t]=e);return o.props={...s},o.element}const r=document.createElement(function(t){if("string"==typeof t)return t;const e=customElements,i=e.getName?.(t);if(i)return i;const s=t.tagName;if("string"==typeof s&&s)return s;throw new Error("ChitUI: component is not registered in customElements. Call customElements.define() for it, or pass its tag name as a string.")}(i));for(const[t,e]of Object.entries(s))r[t]=e;return n.set(e,{source:i,element:r,props:{...s}}),r}function oe(t,e){return Qt.get(t)?.get(te(e))?.element}function re(t,e){switch(ie(e)){case"text":return e.text;case"template":return e.template;case"element":return e.element;case"component":{const i=e;return ne(t,te(e.id),i.component,i.props)}default:{const i=e.html;return yt(t.sanitize?t.sanitize(i):i)}}}function ae(t){const e=t.currentTheme.closed,i=t.currentLabels,s=e.component?ne(t,"launcher",e.component,e.props):null;return W`
2
2
  <button
3
3
  part="launcher"
4
4
  type="button"
5
- aria-label=${e.label||s.launcher}
5
+ aria-label=${e.label||i.launcher}
6
6
  aria-expanded=${"open"===t.state}
7
- ?data-has-image=${!i&&!!e.image}
8
- ?data-custom=${!!i}
9
- @click=${()=>t.toggleFromUser()}
7
+ ?data-has-image=${!s&&!!e.image}
8
+ ?data-custom=${!!s}
9
+ ?data-draggable=${e.draggable}
10
+ @pointerdown=${e=>t.launcherDrag.start(e)}
11
+ @keydown=${e=>t.launcherDrag.nudge(e)}
12
+ @click=${()=>{t.launcherDrag.consumeDrag()||t.toggleFromUser()}}
10
13
  >
11
- ${i??F`<slot name="launcher">${function(t){return t.image?G:t.label?F`<span part="launcher-label">${t.label}</span>`:function(){return F`
14
+ ${s??W`<slot name="launcher">${function(t){return t.image?V:t.label?W`<span part="launcher-label">${t.label}</span>`:function(){return W`
12
15
  <svg part="launcher-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
13
16
  <path
14
17
  fill="currentColor"
@@ -17,11 +20,11 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
17
20
  </svg>
18
21
  `}()}(e)}</slot>`}
19
22
  </button>
20
- `}const{I:ie}=rt,ne=t=>t,oe=()=>document.createComment(""),re=(t,e,s)=>{const i=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===s){const e=i.insertBefore(oe(),n),o=i.insertBefore(oe(),n);s=new ie(e,o,t,t.options)}else{const e=s._$AB.nextSibling,o=s._$AM,r=o!==t;if(r){let e;s._$AQ?.(t),s._$AM=t,void 0!==s._$AP&&(e=t._$AU)!==o._$AU&&s._$AP(e)}if(e!==n||r){let t=s._$AA;for(;t!==e;){const e=ne(t).nextSibling;ne(i).insertBefore(t,n),t=e}}}return s},ae=(t,e,s=t)=>(t._$AI(e,s),t),he={},le=(t,e=he)=>t._$AH=e,ce=t=>{t._$AR(),t._$AA.remove()},de=(t,e,s)=>{const i=new Map;for(let n=e;n<=s;n++)i.set(t[n],n);return i},pe=gt(class extends bt{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,s){let i;void 0===s?s=e:void 0!==e&&(i=e);const n=[],o=[];let r=0;for(const e of t)n[r]=i?i(e,r):r,o[r]=s(e,r),r++;return{values:o,keys:n}}render(t,e,s){return this.dt(t,e,s).values}update(t,[e,s,i]){const n=(t=>t._$AH)(t),{values:o,keys:r}=this.dt(e,s,i);if(!Array.isArray(n))return this.ut=r,o;const a=this.ut??=[],h=[];let l,c,d=0,p=n.length-1,u=0,m=o.length-1;for(;d<=p&&u<=m;)if(null===n[d])d++;else if(null===n[p])p--;else if(a[d]===r[u])h[u]=ae(n[d],o[u]),d++,u++;else if(a[p]===r[m])h[m]=ae(n[p],o[m]),p--,m--;else if(a[d]===r[m])h[m]=ae(n[d],o[m]),re(t,h[m+1],n[d]),d++,m--;else if(a[p]===r[u])h[u]=ae(n[p],o[u]),re(t,n[d],n[p]),p--,u++;else if(void 0===l&&(l=de(r,u,m),c=de(a,d,p)),l.has(a[d]))if(l.has(a[p])){const e=c.get(r[u]),s=void 0!==e?n[e]:null;if(null===s){const e=re(t,n[d]);ae(e,o[u]),h[u]=e}else h[u]=ae(s,o[u]),re(t,n[d],s),n[e]=null;u++}else ce(n[p]),p--;else ce(n[d]),d++;for(;u<=m;){const e=re(t,h[m+1]);ae(e,o[u]),h[u++]=e}for(;d<=p;){const t=n[d++];null!==t&&ce(t)}return this.ut=r,le(t,h),K}});function ue(t,e){if("system"===e.role)return F`
23
+ `}const{I:he}=rt,le=t=>t,ce=()=>document.createComment(""),de=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(ce(),n),o=s.insertBefore(ce(),n);i=new he(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,r=o!==t;if(r){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||r){let t=i._$AA;for(;t!==e;){const e=le(t).nextSibling;le(s).insertBefore(t,n),t=e}}}return i},pe=(t,e,i=t)=>(t._$AI(e,i),t),ue={},me=(t,e=ue)=>t._$AH=e,fe=t=>{t._$AR(),t._$AA.remove()},ge=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},be=gt(class extends bt{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let r=0;for(const e of t)n[r]=s?s(e,r):r,o[r]=i(e,r),r++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:r}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=r,o;const a=this.ut??=[],h=[];let l,c,d=0,p=n.length-1,u=0,m=o.length-1;for(;d<=p&&u<=m;)if(null===n[d])d++;else if(null===n[p])p--;else if(a[d]===r[u])h[u]=pe(n[d],o[u]),d++,u++;else if(a[p]===r[m])h[m]=pe(n[p],o[m]),p--,m--;else if(a[d]===r[m])h[m]=pe(n[d],o[m]),de(t,h[m+1],n[d]),d++,m--;else if(a[p]===r[u])h[u]=pe(n[p],o[u]),de(t,n[d],n[p]),p--,u++;else if(void 0===l&&(l=ge(r,u,m),c=ge(a,d,p)),l.has(a[d]))if(l.has(a[p])){const e=c.get(r[u]),i=void 0!==e?n[e]:null;if(null===i){const e=de(t,n[d]);pe(e,o[u]),h[u]=e}else h[u]=pe(i,o[u]),de(t,n[d],i),n[e]=null;u++}else fe(n[p]),p--;else fe(n[d]),d++;for(;u<=m;){const e=de(t,h[m+1]);pe(e,o[u]),h[u++]=e}for(;d<=p;){const t=n[d++];null!==t&&fe(t)}return this.ut=r,me(t,h),K}});function ve(t,e){if("system"===e.role)return W`
21
24
  <article part="message message-system" data-role="system" data-id=${e.id}>
22
- <div part="message-content" data-content=${Zt(e)}>${ee(t,e)}</div>
25
+ <div part="message-content" data-content=${ie(e)}>${re(t,e)}</div>
23
26
  </article>
24
- `;const s=e.time||e.status,i=t.currentTheme.open.speaker[e.role],n=void 0===e.avatar?i.avatar:e.avatar,o=void 0===e.name?i.name:e.name;return F`
27
+ `;const i=e.time||e.status,s=t.currentTheme.open.speaker[e.role],n=void 0===e.avatar?s.avatar:e.avatar,o=void 0===e.name?s.name:e.name;return W`
25
28
  <article
26
29
  part="message message-${e.role}"
27
30
  data-role=${e.role}
@@ -29,35 +32,70 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
29
32
  ?data-streaming=${!!e.streaming}
30
33
  aria-busy=${e.streaming?"true":"false"}
31
34
  >
32
- ${n?F`<img part="avatar" src=${n} alt="" loading="lazy" />`:i.avatar?F`<span part="avatar" data-placeholder aria-hidden="true"></span>`:G}
35
+ ${n?W`<img part="avatar" src=${n} alt="" loading="lazy" />`:s.avatar?W`<span part="avatar" data-placeholder aria-hidden="true"></span>`:V}
33
36
  <div class="body">
34
- ${o?F`<span part="name">${o}</span>`:G}
37
+ ${o?W`<span part="name">${o}</span>`:V}
35
38
  <div part="bubble">
36
- <div part="message-content" data-content=${Zt(e)}>${ee(t,e)}</div>
37
- ${e.streaming?F`<span part="cursor" aria-hidden="true"></span>`:G}
39
+ <div part="message-content" data-content=${ie(e)}>${re(t,e)}</div>
40
+ ${e.streaming?W`<span part="cursor" aria-hidden="true"></span>`:V}
38
41
  </div>
39
- ${s?F`
42
+ ${i?W`
40
43
  <div part="meta" class="meta">
41
- ${e.time?F`<time part="time">${function(t,e){const s=e instanceof Date?e:new Date(e);return Number.isNaN(s.getTime())?"":t.formatTime?t.formatTime(s):new Intl.DateTimeFormat(t.resolvedLocale,{hour:"2-digit",minute:"2-digit"}).format(s)}(t,e.time)}</time>`:G}
42
- ${e.status?F`<span part="status" data-status=${e.status}>
44
+ ${e.time?W`<time part="time">${function(t,e){const i=e instanceof Date?e:new Date(e);return Number.isNaN(i.getTime())?"":t.formatTime?t.formatTime(i):new Intl.DateTimeFormat(t.resolvedLocale,{hour:"2-digit",minute:"2-digit"}).format(i)}(t,e.time)}</time>`:V}
45
+ ${e.status?W`<span part="status" data-status=${e.status}>
43
46
  ${t.currentLabels.status[e.status]}
44
- </span>`:G}
47
+ </span>`:V}
45
48
  </div>
46
- `:G}
49
+ `:V}
47
50
  </div>
48
51
  </article>
49
- `}const me=gt(class extends bt{constructor(t){if(super(t),t.type!==mt&&t.type!==pt&&t.type!==ft)throw Error("The `live` directive is not allowed on child or event bindings");if(!(t=>void 0===t.strings)(t))throw Error("`live` bindings can only contain a single expression")}render(t){return t}update(t,[e]){if(e===K||e===G)return e;const s=t.element,i=t.name;if(t.type===mt){if(e===s[i])return K}else if(t.type===ft){if(!!e===s.hasAttribute(i))return K}else if(t.type===pt&&s.getAttribute(i)===e+"")return K;return le(t),e}});function fe(t){if(t.inputHidden)return G;const e=t.currentLabels,s=t.currentTheme.open,i=t.busy||t.inputDisabled,n=t.placeholder??s.input.placeholder??e.input;return F`
52
+ `}function ye(t){const e=t.currentLabels,i=t.typing,s=0===t.messages.length&&!i&&!t.loading;return W`
53
+ <div
54
+ part="messages"
55
+ role="log"
56
+ aria-live="polite"
57
+ aria-relevant="additions text"
58
+ aria-label=${e.conversation}
59
+ @click=${e=>t.handleMessageClick(e)}
60
+ >
61
+ <div part="messages-inner" class="inner">
62
+ ${s?W`<slot name="empty"></slot>`:V}
63
+ ${be(t.messages,t=>t.id,e=>ve(t,e))}
64
+ ${t.loading?function(t){const{style:e,text:i}=t.currentTheme.open.loading,s=i??t.currentLabels.loading;return W`
65
+ <div part="loading" data-style=${e} role="status" aria-label=${s}>
66
+ ${"dots"===e?W`<span class="dots" aria-hidden="true"><i></i><i></i><i></i></span>`:V}
67
+ ${"spinner"===e?W`<span part="spinner" aria-hidden="true"></span>`:V}
68
+ ${"text"===e||i?W`<span part="loading-text">${s}</span>`:V}
69
+ </div>
70
+ `}(t):i?W`
71
+ <div part="typing" role="status" aria-label=${e.typing}>
72
+ ${"object"==typeof i&&i.html?t.renderTypingHtml(i.html):W`<span class="dots" aria-hidden="true"><i></i><i></i><i></i></span>`}
73
+ </div>
74
+ `:V}
75
+ </div>
76
+ </div>
77
+
78
+ ${t.hasUnseen?W`
79
+ <button
80
+ part="to-latest"
81
+ type="button"
82
+ @click=${()=>t.scrollToBottom({smooth:!0})}
83
+ >
84
+ ${e.toLatest}
85
+ </button>
86
+ `:V}
87
+ `}const we=gt(class extends bt{constructor(t){if(super(t),t.type!==mt&&t.type!==pt&&t.type!==ft)throw Error("The `live` directive is not allowed on child or event bindings");if(!(t=>void 0===t.strings)(t))throw Error("`live` bindings can only contain a single expression")}render(t){return t}update(t,[e]){if(e===K||e===V)return e;const i=t.element,s=t.name;if(t.type===mt){if(e===i[s])return K}else if(t.type===ft){if(!!e===i.hasAttribute(s))return K}else if(t.type===pt&&i.getAttribute(s)===e+"")return K;return me(t),e}});function xe(t){if(t.inputHidden)return V;const e=t.currentLabels,i=t.currentTheme.open,s=t.busy||t.inputDisabled,n=t.placeholder??i.input.placeholder??e.input;return W`
50
88
  <form
51
89
  part="composer"
52
90
  @submit=${e=>{e.preventDefault(),t.submit()}}
53
91
  >
54
92
  <slot name="composer">
55
- ${s.input.attach?function(t,e){const s=t.currentLabels,i=t.currentTheme.open.input;return F`
93
+ ${i.input.attach?function(t,e){const i=t.currentLabels,s=t.currentTheme.open.input;return W`
56
94
  <button
57
95
  part="attach-button"
58
96
  type="button"
59
- aria-label=${s.attach}
60
- title=${s.attach}
97
+ aria-label=${i.attach}
98
+ title=${i.attach}
61
99
  ?disabled=${e}
62
100
  @click=${()=>t.openAttach()}
63
101
  >
@@ -77,22 +115,22 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
77
115
  type="file"
78
116
  tabindex="-1"
79
117
  aria-hidden="true"
80
- accept=${i.accept}
81
- ?multiple=${i.multiple}
82
- @change=${e=>{const s=e.target,i=Array.from(s.files??[]);s.value="",i.length&&t.handleAttach(i)}}
118
+ accept=${s.accept}
119
+ ?multiple=${s.multiple}
120
+ @change=${e=>{const i=e.target,s=Array.from(i.files??[]);i.value="",s.length&&t.handleAttach(s)}}
83
121
  />
84
- `}(t,i):G}
122
+ `}(t,s):V}
85
123
 
86
124
  <slot name="input-before"></slot>
87
125
 
88
126
  <textarea
89
127
  part="input"
90
128
  rows="1"
91
- .value=${me(t.value)}
129
+ .value=${we(t.value)}
92
130
  placeholder=${n}
93
131
  aria-label=${e.input}
94
- ?disabled=${i}
95
- aria-describedby=${void 0===t.maxLength?G:"chit-counter"}
132
+ ?disabled=${s}
133
+ aria-describedby=${void 0===t.maxLength?V:"chit-counter"}
96
134
  @input=${e=>t.handleInput(e)}
97
135
  @keydown=${e=>t.handleKeydown(e)}
98
136
  @compositionstart=${()=>t.handleComposition(!0)}
@@ -101,7 +139,7 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
101
139
 
102
140
  <slot name="input-after"></slot>
103
141
 
104
- ${void 0===t.maxLength?G:F`<span part="counter" id="chit-counter" aria-live="polite" hidden></span>`}
142
+ ${void 0===t.maxLength?V:W`<span part="counter" id="chit-counter" aria-live="polite" hidden></span>`}
105
143
 
106
144
  <button
107
145
  part="send-button"
@@ -109,37 +147,44 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
109
147
  aria-label=${e.send}
110
148
  ?disabled=${!t.canSend}
111
149
  >
112
- ${t.busy?F`<span part="spinner" aria-hidden="true"></span>`:F`<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
150
+ ${t.busy?W`<span part="spinner" aria-hidden="true"></span>`:W`<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
113
151
  <path fill="currentColor" d="M3.4 20.4 21 12 3.4 3.6 3.39 10.2 15.6 12 3.39 13.8z" />
114
152
  </svg>`}
115
153
  </button>
116
154
  </slot>
117
155
  </form>
118
- `}function ge(t){const e=t.currentTheme.open,s=t.currentLabels,i=e.header.title??s.panel;return F`
156
+ `}function $e(t){const e=t.currentTheme.open,i=t.currentLabels,s=e.header.title??i.panel;return W`
119
157
  <section
120
158
  part="panel"
121
159
  role="dialog"
122
160
  aria-modal="false"
123
- aria-label=${i}
161
+ aria-label=${s}
124
162
  tabindex="-1"
125
163
  @keydown=${e=>function(t,e){if("Escape"!==e.key||e.defaultPrevented)return;e.preventDefault(),t.closeFromUser()}(t,e)}
126
164
  >
127
- ${e.header.visible?function(t,e){const s=t.currentTheme.open,i=t.currentLabels;return F`
128
- <header part="header">
165
+ ${e.header.visible?function(t,e){const i=t.currentTheme.open,s=t.currentLabels,n=i.draggable&&"pc"===t.device;return W`
166
+ <header
167
+ part="header"
168
+ ?data-draggable=${n}
169
+ tabindex=${n?"0":V}
170
+ aria-label=${n?s.move:V}
171
+ @pointerdown=${e=>{e.target.closest("button")||t.panelDrag.start(e)}}
172
+ @keydown=${e=>{e.target===e.currentTarget&&t.panelDrag.nudge(e)}}
173
+ >
129
174
  <slot name="header">
130
175
  <slot name="header-title">
131
176
  <span part="header-title">
132
- ${s.header.logo?F`<img part="header-logo" src=${s.header.logo} alt="" />`:G}
177
+ ${i.header.logo?W`<img part="header-logo" src=${i.header.logo} alt="" />`:V}
133
178
  <span part="header-heading">${e}</span>
134
179
  </span>
135
180
  </slot>
136
181
  <span part="header-actions">
137
182
  <slot name="header-actions"></slot>
138
- ${s.header.home?F`<button
183
+ ${i.header.home?W`<button
139
184
  part="home-button"
140
185
  type="button"
141
- aria-label=${i.home}
142
- title=${i.home}
186
+ aria-label=${s.home}
187
+ title=${s.home}
143
188
  @click=${()=>t.home("user")}
144
189
  >
145
190
  <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
@@ -152,11 +197,11 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
152
197
  d="M4 11.2 12 4l8 7.2M6.5 9.8V19h11V9.8M10 19v-4.6h4V19"
153
198
  />
154
199
  </svg>
155
- </button>`:G}
200
+ </button>`:V}
156
201
  <button
157
202
  part="close-button"
158
203
  type="button"
159
- aria-label=${i.close}
204
+ aria-label=${s.close}
160
205
  @click=${()=>t.closeFromUser()}
161
206
  >
162
207
  <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
@@ -172,42 +217,13 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
172
217
  </span>
173
218
  </slot>
174
219
  </header>
175
- `}(t,i):G}
220
+ `}(t,s):V}
176
221
 
177
- ${function(t){const e=t.currentLabels,s=t.typing,i=0===t.messages.length&&!s;return F`
178
- <div
179
- part="messages"
180
- role="log"
181
- aria-live="polite"
182
- aria-relevant="additions text"
183
- aria-label=${e.conversation}
184
- @click=${e=>t.handleMessageClick(e)}
185
- >
186
- <div part="messages-inner" class="inner">
187
- ${i?F`<slot name="empty"></slot>`:G}
188
- ${pe(t.messages,t=>t.id,e=>ue(t,e))}
189
- ${s?F`
190
- <div part="typing" role="status" aria-label=${e.typing}>
191
- ${"object"==typeof s&&s.html?t.renderTypingHtml(s.html):F`<span class="dots" aria-hidden="true"><i></i><i></i><i></i></span>`}
192
- </div>
193
- `:G}
194
- </div>
195
- </div>
196
-
197
- ${t.hasUnseen?F`
198
- <button
199
- part="to-latest"
200
- type="button"
201
- @click=${()=>t.scrollToBottom({smooth:!0})}
202
- >
203
- ${e.toLatest}
204
- </button>
205
- `:G}
206
- `}(t)} ${fe(t)}
222
+ ${ye(t)} ${xe(t)}
207
223
 
208
224
  <slot name="footer"></slot>
209
225
  </section>
210
- `}const be={ja:{launcher:"チャットを開く",panel:"チャット",conversation:"会話",close:"チャットを閉じる",home:"最初に戻る",send:"送信",attach:"画像や動画を添付",input:"メッセージを入力",typing:"入力中",toLatest:"最新へ",status:{sending:"送信中",sent:"送信済み",error:"送信できませんでした"},charactersLeft:"残り {n} 文字",overLimit:"{n} 文字超過しています"},en:{launcher:"Open chat",panel:"Chat",conversation:"Conversation",close:"Close chat",home:"Back to the start",send:"Send",attach:"Attach an image or video",input:"Type a message",typing:"Typing",toLatest:"Jump to latest",status:{sending:"Sending",sent:"Sent",error:"Not delivered"},charactersLeft:"{n} characters left",overLimit:"{n} characters over the limit"}};function ve(t){return t||document.documentElement.lang||void 0}const ye=r`
226
+ `}const _e={ja:{launcher:"チャットを開く",panel:"チャット",conversation:"会話",close:"チャットを閉じる",home:"最初に戻る",send:"送信",attach:"画像や動画を添付",input:"メッセージを入力",typing:"入力中",loading:"応答を待っています",move:"チャットの位置を移動(矢印キー)",toLatest:"最新へ",status:{sending:"送信中",sent:"送信済み",error:"送信できませんでした"},charactersLeft:"残り {n} 文字",overLimit:"{n} 文字超過しています"},en:{launcher:"Open chat",panel:"Chat",conversation:"Conversation",close:"Close chat",home:"Back to the start",send:"Send",attach:"Attach an image or video",input:"Type a message",typing:"Typing",loading:"Waiting for a reply",move:"Move the chat (arrow keys)",toLatest:"Jump to latest",status:{sending:"Sending",sent:"Sent",error:"Not delivered"},charactersLeft:"{n} characters left",overLimit:"{n} characters over the limit"}};function Se(t){return t||document.documentElement.lang||void 0}const Ae=r`
211
227
  :host {
212
228
  --chit-z-index: 2147483000;
213
229
  --chit-font-family: system-ui, -apple-system, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;
@@ -357,7 +373,7 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
357
373
  animation: none !important;
358
374
  }
359
375
  }
360
- `,we=r`
376
+ `,Ee=r`
361
377
  [part~='launcher'] {
362
378
  position: absolute;
363
379
  display: grid;
@@ -379,6 +395,19 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
379
395
  transition: filter 120ms ease;
380
396
  }
381
397
 
398
+ /*
399
+ * A draggable launcher takes the touch gestures for itself, so a finger on
400
+ * it moves the button instead of scrolling the page behind it.
401
+ */
402
+ [part~='launcher'][data-draggable] {
403
+ cursor: grab;
404
+ touch-action: none;
405
+ }
406
+
407
+ [part~='launcher'][data-draggable]:active {
408
+ cursor: grabbing;
409
+ }
410
+
382
411
  /* The image comes from the theme, so it is a background rather than an <img>. */
383
412
  [part~='launcher'][data-has-image] {
384
413
  background-image: var(--chit-launcher-image);
@@ -492,15 +521,21 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
492
521
  animation: none;
493
522
  }
494
523
  }
495
- `,$e=r`
524
+ `,ke=r`
496
525
  [part~='panel'] {
497
526
  position: absolute;
498
527
  display: flex;
499
528
  flex-direction: column;
500
529
  width: var(--chit-panel-width);
501
530
  height: var(--chit-panel-height);
502
- max-width: calc(100vw - var(--chit-panel-offset-x) * 2);
503
- max-height: calc(100vh - var(--chit-panel-offset-y) * 2);
531
+ /*
532
+ * The room left between the panel's own corner and the far edge. Doubling
533
+ * the offset instead would assume the panel is centred between two equal
534
+ * gaps, which stops being true the moment it is dragged: moving it up
535
+ * would have made it shorter on the way.
536
+ */
537
+ max-width: calc(100vw - var(--chit-panel-offset-x) - 8px);
538
+ max-height: calc(100vh - var(--chit-panel-offset-y) - 8px);
504
539
  overflow: hidden;
505
540
  border-radius: var(--chit-panel-radius);
506
541
  background-color: var(--chit-color-bg);
@@ -541,12 +576,18 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
541
576
  * A phone gets the whole screen. dvh rather than vh so the browser chrome
542
577
  * collapsing does not leave a gap, and the safe-area insets keep the header
543
578
  * clear of the notch.
579
+ *
580
+ * While a keyboard is up, the two --_chit-vv-* properties carry what is
581
+ * actually on screen (ViewportController fills them in from
582
+ * visualViewport); dvh knows nothing about a keyboard and would leave the
583
+ * composer behind it.
544
584
  */
545
585
  :host([data-device='mobile']) [part~='panel'],
546
586
  :host([data-device='mobile'][data-panel-position]) [part~='panel'] {
547
587
  inset: 0;
588
+ top: var(--_chit-vv-top, 0px);
548
589
  width: 100vw;
549
- height: 100dvh;
590
+ height: var(--_chit-vv-height, 100dvh);
550
591
  max-width: none;
551
592
  max-height: none;
552
593
  border-radius: 0;
@@ -573,6 +614,21 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
573
614
  * and space-between pushes the image to one edge and the title to the
574
615
  * middle, away from each other.
575
616
  */
617
+ [part~='header'][data-draggable] {
618
+ cursor: grab;
619
+ touch-action: none;
620
+ user-select: none;
621
+ }
622
+
623
+ [part~='header'][data-draggable]:active {
624
+ cursor: grabbing;
625
+ }
626
+
627
+ [part~='header'][data-draggable]:focus-visible {
628
+ outline: 2px solid var(--chit-color-accent);
629
+ outline-offset: -2px;
630
+ }
631
+
576
632
  [part~='header-title'] {
577
633
  display: inline-flex;
578
634
  min-width: 0;
@@ -633,7 +689,7 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
633
689
  height: 1.1em;
634
690
  }
635
691
 
636
- `,xe=r`
692
+ `,Te=r`
637
693
  :host {
638
694
  /* Internal: the box the tail's path is drawn in. The path is written in
639
695
  these units, so the two move together. */
@@ -734,7 +790,8 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
734
790
  */
735
791
 
736
792
  [part~='bubble']::after,
737
- [part~='typing']::after {
793
+ [part~='typing']::after,
794
+ [part~='loading']::after {
738
795
  content: '';
739
796
  display: none;
740
797
  position: absolute;
@@ -750,9 +807,11 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
750
807
  */
751
808
  @supports (clip-path: path('M 0 0 Z')) {
752
809
  :host([data-bubble-tail='top']) [part~='bubble']::after,
753
- :host([data-bubble-tail='bottom']) [part~='bubble']::after,
754
810
  :host([data-bubble-tail='top']) [part~='typing']::after,
755
- :host([data-bubble-tail='bottom']) [part~='typing']::after {
811
+ :host([data-bubble-tail='top']) [part~='loading']::after,
812
+ :host([data-bubble-tail='bottom']) [part~='bubble']::after,
813
+ :host([data-bubble-tail='bottom']) [part~='typing']::after,
814
+ :host([data-bubble-tail='bottom']) [part~='loading']::after {
756
815
  display: block;
757
816
  }
758
817
 
@@ -761,15 +820,18 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
761
820
  * bubble carries one cue about who is talking, not two.
762
821
  */
763
822
  :host([data-bubble-tail='top']) [part~='bubble'],
764
- :host([data-bubble-tail='bottom']) [part~='bubble'],
765
823
  :host([data-bubble-tail='top']) [part~='typing'],
766
- :host([data-bubble-tail='bottom']) [part~='typing'] {
824
+ :host([data-bubble-tail='top']) [part~='loading'],
825
+ :host([data-bubble-tail='bottom']) [part~='bubble'],
826
+ :host([data-bubble-tail='bottom']) [part~='typing'],
827
+ :host([data-bubble-tail='bottom']) [part~='loading'] {
767
828
  border-radius: var(--chit-bubble-radius);
768
829
  }
769
830
 
770
831
  /* Their side: the leaf points left, its root inside the bubble. */
771
832
  :host([data-bubble-tail]) [part~='message-assistant'] [part~='bubble']::after,
772
- :host([data-bubble-tail]) [part~='typing']::after {
833
+ :host([data-bubble-tail]) [part~='typing']::after,
834
+ :host([data-bubble-tail]) [part~='loading']::after {
773
835
  right: calc(100% - var(--_chit-tail-root));
774
836
  background: var(--chit-color-assistant-bg);
775
837
  }
@@ -782,17 +844,20 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
782
844
  }
783
845
 
784
846
  :host([data-bubble-tail='top']) [part~='bubble']::after,
785
- :host([data-bubble-tail='top']) [part~='typing']::after {
847
+ :host([data-bubble-tail='top']) [part~='typing']::after,
848
+ :host([data-bubble-tail='top']) [part~='loading']::after {
786
849
  top: var(--_chit-tail-offset);
787
850
  }
788
851
 
789
852
  :host([data-bubble-tail='bottom']) [part~='bubble']::after,
790
- :host([data-bubble-tail='bottom']) [part~='typing']::after {
853
+ :host([data-bubble-tail='bottom']) [part~='typing']::after,
854
+ :host([data-bubble-tail='bottom']) [part~='loading']::after {
791
855
  bottom: var(--_chit-tail-offset);
792
856
  }
793
857
 
794
858
  :host([data-bubble-tail='bottom']) [part~='message-assistant'] [part~='bubble']::after,
795
- :host([data-bubble-tail='bottom']) [part~='typing']::after {
859
+ :host([data-bubble-tail='bottom']) [part~='typing']::after,
860
+ :host([data-bubble-tail='bottom']) [part~='loading']::after {
796
861
  transform: scaleY(-1);
797
862
  }
798
863
 
@@ -860,24 +925,57 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
860
925
  }
861
926
  }
862
927
 
863
- [part~='typing'] {
928
+ [part~='typing'],
929
+ [part~='loading'] {
864
930
  position: relative;
865
931
  align-self: flex-start;
866
932
  /* Indented past the speaker's icon, when the theme gives them one. */
867
933
  margin-inline-start: var(--_chit-speaker-gutter, 0px);
868
934
  padding: 0.7em 0.9em;
935
+ /*
936
+ * Stated rather than left to the font's idea of "normal", so that both
937
+ * indicators are the same height whatever the page's typeface does, and
938
+ * so the spinner has a line box it is known to fit inside.
939
+ */
940
+ line-height: 1.5;
869
941
  border-radius: var(--chit-bubble-radius);
870
942
  border-bottom-left-radius: 4px;
871
943
  background: var(--chit-color-assistant-bg);
872
944
  color: var(--chit-color-assistant-text);
873
945
  }
874
946
 
875
- [part~='typing'] .dots {
947
+ /*
948
+ * The wait is laid out inline, like the typing bubble it stands in for. A
949
+ * flex box has no line box of its own, so dots or a spinner alone would sit
950
+ * in a noticeably shorter bubble than one holding a line of text.
951
+ */
952
+ [part~='loading'] > * + * {
953
+ margin-inline-start: 0.5em;
954
+ }
955
+
956
+ [part~='loading'] [part~='spinner'] {
957
+ display: inline-block;
958
+ /*
959
+ * Centred on the line rather than sitting on the baseline: at 1.1em it
960
+ * then fits inside the line box the text would have made on its own, so
961
+ * a spinner bubble is exactly as tall as a typing bubble.
962
+ */
963
+ vertical-align: middle;
964
+ color: var(--chit-color-system-text);
965
+ }
966
+
967
+ [part~='loading-text'] {
968
+ font-size: 0.9em;
969
+ }
970
+
971
+ [part~='typing'] .dots,
972
+ [part~='loading'] .dots {
876
973
  display: inline-flex;
877
974
  gap: 0.25em;
878
975
  }
879
976
 
880
- [part~='typing'] .dots i {
977
+ [part~='typing'] .dots i,
978
+ [part~='loading'] .dots i {
881
979
  width: 0.4em;
882
980
  height: 0.4em;
883
981
  border-radius: 50%;
@@ -886,10 +984,12 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
886
984
  animation: chit-typing 1.2s ease-in-out infinite;
887
985
  }
888
986
 
889
- [part~='typing'] .dots i:nth-child(2) {
987
+ [part~='typing'] .dots i:nth-child(2),
988
+ [part~='loading'] .dots i:nth-child(2) {
890
989
  animation-delay: 0.15s;
891
990
  }
892
- [part~='typing'] .dots i:nth-child(3) {
991
+ [part~='typing'] .dots i:nth-child(3),
992
+ [part~='loading'] .dots i:nth-child(3) {
893
993
  animation-delay: 0.3s;
894
994
  }
895
995
 
@@ -931,11 +1031,12 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
931
1031
 
932
1032
  @media (prefers-reduced-motion: reduce) {
933
1033
  [part~='cursor'],
934
- [part~='typing'] .dots i {
1034
+ [part~='typing'] .dots i,
1035
+ [part~='loading'] .dots i {
935
1036
  animation: none;
936
1037
  }
937
1038
  }
938
- `,_e=r`
1039
+ `,Ce=r`
939
1040
  [part~='message-content'] {
940
1041
  min-width: 0;
941
1042
  max-width: 100%;
@@ -1042,7 +1143,7 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
1042
1143
  border: 0;
1043
1144
  border-top: 1px solid var(--chit-color-border);
1044
1145
  }
1045
- `,Ae=r`
1146
+ `,Oe=r`
1046
1147
  [part~='composer'] {
1047
1148
  display: flex;
1048
1149
  flex: none;
@@ -1070,6 +1171,24 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
1070
1171
  overflow-y: auto;
1071
1172
  }
1072
1173
 
1174
+ /*
1175
+ * iOS Safari zooms the page in whenever a field smaller than 16px takes
1176
+ * focus, and it does not zoom back out when the field is done with — the
1177
+ * reader is left with a widget wider than the screen and no obvious way
1178
+ * back. Nothing in the page can undo that zoom short of pinning the
1179
+ * viewport's scale, which would also take pinch-zoom away from everyone.
1180
+ * So the field is kept at the size that never triggers it, and larger
1181
+ * still if the theme's font is larger.
1182
+ *
1183
+ * Coarse pointers only: on a desktop the same rule would make the field
1184
+ * stand out from the rest of the widget for no reason.
1185
+ */
1186
+ @media (pointer: coarse) {
1187
+ [part~='input'] {
1188
+ font-size: max(16px, 1em);
1189
+ }
1190
+ }
1191
+
1073
1192
  [part~='input']::placeholder {
1074
1193
  color: var(--chit-color-input-placeholder);
1075
1194
  }
@@ -1185,7 +1304,7 @@ var ChitUI=function(t){"use strict";const e=globalThis,s=e.ShadowRoot&&(void 0==
1185
1304
  animation-duration: 2s;
1186
1305
  }
1187
1306
  }
1188
- `;class Se extends ct{static styles=[ye,we,$e,xe,_e,Ae];static properties={state:{type:String,reflect:!0,noAccessor:!0},theme:{type:Object},messages:{type:Array},typing:{type:Object},busy:{type:Boolean,reflect:!0},inputDisabled:{type:Boolean,reflect:!0,attribute:"input-disabled"},inputHidden:{type:Boolean,reflect:!0,attribute:"input-hidden"},placeholder:{type:String,reflect:!0},sendOnEnter:{type:Boolean,reflect:!0,attribute:"send-on-enter"},maxLength:{type:Number,reflect:!0,attribute:"max-length"},focusOnOpen:{type:String,reflect:!0,attribute:"focus-on-open"},locale:{type:String,reflect:!0},labels:{type:Object},messageStyles:{type:String}};#rt="closed";#at="api";#ht;#x;#lt;#ct;#dt;#pt=new qt("data-chit-message-styles");#ut=new Map;#mt=null;constructor(){super(),this.theme={},this.messages=[],this.typing=!1,this.busy=!1,this.inputDisabled=!1,this.inputHidden=!1,this.placeholder=void 0,this.sendOnEnter=!0,this.maxLength=void 0,this.focusOnOpen="auto",this.locale=void 0,this.labels=void 0,this.messageStyles="",this.sanitize=void 0,this.formatTime=void 0,this.#ht=new _t(this,{animation:(t,e,s)=>this.#ft(t,e,s),keepsLauncher:()=>"visible"===this.currentTheme.open.launcher,onOpened:()=>this.#gt()}),this.#x=new At(this),this.#lt=new Ft(this,{device:()=>this.#x.device}),this.addController(this.#lt),this.#ct=new Wt(this,{behavior:()=>this.currentTheme.open.animation.scroll}),this.#dt=new Gt(this)}get state(){return this.#rt}set state(t){const e=this.#rt;if(t===e)return;if(this.#rt=t,this.requestUpdate("state",e),!this.#ht||this.#ht.applying)return;const s=this.#at;this.#at="api";const i=this.#ht.request(t,s);this.#mt=i,i.then(()=>{this.#mt===i&&(this.#mt=null)})}get device(){return this.#x.device}get currentTheme(){return this.#lt.current}get currentLabels(){return function(t,e){const s=(ve(t)||"en").toLowerCase(),i=be[s]??be[s.split("-")[0]]??be.en;return e?{...i,...e}:i}(this.locale,this.labels)}get resolvedLocale(){return ve(this.locale)}get renderedState(){return this.#ht.renderedState}get hasUnseen(){return this.#ct.hasUnseen}get value(){return this.#dt.value}set value(t){this.#dt.value=t}get canSend(){return this.#dt.canSend}open(){return this.#bt("open","api")}close(){return this.#bt("closed","api")}hide(){return this.#bt("hidden","api")}show(){return"hidden"===this.#rt?this.#bt("closed","api"):Promise.resolve(!0)}toggle(){return this.#bt("open"===this.state?"closed":"open","api")}submit(t){return this.#dt.submit(t)}clearInput(){this.#dt.clear()}scrollToBottom(t){this.#ct.scrollToBottom(t)}getMessageElement(t){return this.renderRoot.querySelector(`[part~="message"][data-id="${CSS.escape(t)}"] [part~="message-content"]`)}focusInput(){const t=this.renderRoot.querySelector('[part~="input"]');return!!t&&(t.focus(),!0)}#gt(){if("never"===this.focusOnOpen)return;if("auto"===this.focusOnOpen&&"mobile"===this.device)return;if(this.focusInput())return;const t=this.renderRoot.querySelector('[part~="panel"]');t?.focus()}handleInput(t){this.#dt.onInput(t)}handleKeydown(t){this.#dt.onKeydown(t)}handleComposition(t){t?this.#dt.onCompositionStart():this.#dt.onCompositionEnd()}handleAttach(t){$t(this,wt.ATTACH,{files:t})}openAttach(){const t=this.renderRoot.querySelector('[part~="attach-input"]');t?.click()}renderTypingHtml(t){return yt(this.sanitize?this.sanitize(t):t)}handleMessageClick(t){const e=t.composedPath(),s=e.find(t=>t instanceof HTMLElement&&t.getAttribute("part")?.split(/\s+/).includes("message"));if(!s)return;const i=s.dataset.id,n=this.messages.find(t=>t.id===i);if(!n)return;const o=e[0];$t(this,wt.MESSAGE_CLICK,{message:n,target:o,originalEvent:t},{cancelable:!0})||t.preventDefault()}toggleFromUser(){return this.#bt("open"===this.state?"closed":"open","user")}closeFromUser(){return this.#bt("closed","user")}home(t="api"){$t(this,wt.HOME,{trigger:t})}#bt(t,e){return t!==this.#rt&&(this.#at=e,this.state=t),this.#mt??Promise.resolve(!0)}#ft(t,e,s){const i=this.currentTheme;if("exit"===s&&"hidden"===e)return{effect:i.hidden.animation.exit,duration:i.hidden.animation.duration};const n="open"===("exit"===s?t:e)?i.open:i.closed;return{effect:"exit"===s?n.animation.exit:n.animation.enter,duration:n.animation.duration}}willUpdate(){this.#x.observe(Ft.breakpointOf(this.theme)),this.#lt.apply(this.theme,this.#x.device),this.#pt.write(this.messageStyles??"",this.renderRoot);const t=this.currentTheme;this.dataset.launcherPosition=t.closed.position,this.dataset.panelPosition=t.open.position,this.dataset.idle=t.closed.animation.idle,this.dataset.bubbleTail=t.open.bubble.tail}updated(){const t=new Set(this.messages.map(t=>t.id));!function(t,e){const s=Vt.get(t);if(s)for(const t of s.keys())t.startsWith("msg:")&&(e.has(t.slice(4))||s.delete(t))}(this,t),this.#vt(t)}#vt(t){for(const e of this.#ut.keys())t.has(e)||this.#ut.delete(e);for(const t of this.messages){const e=Qt(t);if(this.#ut.has(t.id)&&Object.is(this.#ut.get(t.id),e))continue;this.#ut.set(t.id,e);const s=this.getMessageElement(t.id);s&&$t(this,wt.MESSAGE_RENDER,{message:t,element:s,instance:te(this,t.id)})}}render(){const t=this.renderedState,e="closed"===t||"open"===t&&"visible"===this.currentTheme.open.launcher,s="open"===t;return F`
1189
- ${e?se(this):G} ${s?ge(this):G}
1190
- `}}customElements.get("chit-ui")||customElements.define("chit-ui",Se);const Ee=gt(class extends bt{constructor(t){if(super(t),t.type!==pt||"class"!==t.name||t.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(t){return" "+Object.keys(t).filter(e=>t[e]).join(" ")+" "}update(t,[e]){if(void 0===this.st){this.st=new Set,void 0!==t.strings&&(this.nt=new Set(t.strings.join(" ").split(/\s/).filter(t=>""!==t)));for(const t in e)e[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(e)}const s=t.element.classList;for(const t of this.st)t in e||(s.remove(t),this.st.delete(t));for(const t in e){const i=!!e[t];i===this.st.has(t)||this.nt?.has(t)||(i?(s.add(t),this.st.add(t)):(s.remove(t),this.st.delete(t)))}return K}}),ke="important",Ce=" !"+ke,Te=gt(class extends bt{constructor(t){if(super(t),t.type!==pt||"style"!==t.name||t.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce((e,s)=>{const i=t[s];return null==i?e:e+`${s=s.includes("-")?s:s.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${i};`},"")}update(t,[e]){const{style:s}=t.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(e)),this.render(e);for(const t of this.ft)null==e[t]&&(this.ft.delete(t),t.includes("-")?s.removeProperty(t):s[t]=null);for(const t in e){const i=e[t];if(null!=i){this.ft.add(t);const e="string"==typeof i&&i.endsWith(Ce);t.includes("-")||e?s.setProperty(t,e?i.slice(0,-11):i,e?ke:""):s[t]=i}}return K}});return t.ChitUI=Se,t.Events=wt,t.LitElement=ct,t.classMap=Ee,t.css=r,t.greenTheme={closed:{colors:{background:"#0a6b36",text:"#ffffff",shadow:"0 4px 12px rgba(16, 42, 26, 0.32)"}},open:{radius:12,colors:{background:"#d3ddea",text:"#16212c",accent:"#0a6b36",border:"#b6c5d6",shadow:"0 8px 32px rgba(16, 32, 48, 0.28)",headerBackground:"#ffffff",headerText:"#16212c",userBubble:"#9ce26c",userText:"#14240c",assistantBubble:"#ffffff",assistantText:"#16212c",systemText:"#37475a",inputBackground:"#ffffff",inputText:"#16212c",inputPlaceholder:"#5c6370"},bubble:{radius:18,tail:"top"}}},t.html=F,t.live=me,t.nothing=G,t.render=ht,t.repeat=pe,t.styleMap=Te,t.svg=W,t.unsafeHTML=yt,t}({});
1307
+ `;class Le extends ct{static styles=[Ae,Ee,ke,Te,Ce,Oe];static properties={state:{type:String,reflect:!0,noAccessor:!0},theme:{type:Object},messages:{type:Array},typing:{type:Object,noAccessor:!0},loading:{type:Boolean,reflect:!0,noAccessor:!0},busy:{type:Boolean,reflect:!0},inputDisabled:{type:Boolean,reflect:!0,attribute:"input-disabled"},inputHidden:{type:Boolean,reflect:!0,attribute:"input-hidden"},placeholder:{type:String,reflect:!0},sendOnEnter:{type:Boolean,reflect:!0,attribute:"send-on-enter"},maxLength:{type:Number,reflect:!0,attribute:"max-length"},focusOnOpen:{type:String,reflect:!0,attribute:"focus-on-open"},locale:{type:String,reflect:!0},labels:{type:Object},messageStyles:{type:String}};#Et="closed";#kt=!1;#Tt=!1;#Ct="api";#Ot;#$;#Lt;#Mt;#Pt;#zt=new qt("data-chit-message-styles");#Ut=new Map;#Rt=null;constructor(){super(),this.theme={},this.messages=[],this.busy=!1,this.inputDisabled=!1,this.inputHidden=!1,this.placeholder=void 0,this.sendOnEnter=!0,this.maxLength=void 0,this.focusOnOpen="auto",this.locale=void 0,this.labels=void 0,this.messageStyles="",this.sanitize=void 0,this.formatTime=void 0,this.#Ot=new _t(this,{animation:(t,e,i)=>this.#Ht(t,e,i),keepsLauncher:()=>"visible"===this.currentTheme.open.launcher,onOpened:()=>this.#Dt()}),this.#$=new St(this),this.#Lt=new Wt(this,{device:()=>this.#$.device}),this.addController(this.#Lt),this.#Mt=new Ft(this,{behavior:()=>this.currentTheme.open.animation.scroll}),this.#Pt=new Vt(this),new Xt(this),new Zt(this,{enabled:()=>"mobile"===this.device}),this.#Bt=new Yt(this,{name:"launcher",enabled:()=>this.currentTheme.closed.draggable,element:()=>this.#It("launcher"),size:()=>function(t){if(!t)return{width:0,height:0};const e=t.getBoundingClientRect();return{width:e.width,height:e.height}}(this.#It("launcher")),corner:()=>this.currentTheme.closed.position,base:()=>this.currentTheme.closed.offset,current:()=>this.#Nt,onMove:t=>this.#jt(t),onSettle:t=>this.#qt(t),vars:{x:"--chit-launcher-offset-x",y:"--chit-launcher-offset-y"}}),this.#Wt=new Yt(this,{name:"panel",enabled:()=>this.currentTheme.open.draggable&&"pc"===this.device,element:()=>this.#It("panel"),size:()=>{const t=this.currentTheme.open;return{width:Math.min(t.width,window.innerWidth-16),height:Math.min(t.height,window.innerHeight-16)}},corner:()=>this.currentTheme.open.position,base:()=>this.currentTheme.open.offset,current:()=>this.#Nt,onMove:t=>this.#jt(t),onSettle:t=>this.#qt(t),vars:{x:"--chit-panel-offset-x",y:"--chit-panel-offset-y"}})}#Bt;#Wt;#It(t){return this.renderRoot?.querySelector(`[part~="${t}"]`)??null}get launcherDrag(){return this.#Bt}get panelDrag(){return this.#Wt}get dragOffset(){return this.#Nt}set dragOffset(t){this.#Nt=t?{x:t.x,y:t.y}:null,this.#Ft()}resetPosition(){this.dragOffset=null}#Nt=null;#jt(t){this.#Nt=t,this.#Ft()}#Ft(){this.#Bt.place(this.#Nt),this.#Wt.place(this.#Nt)}#qt(t){if(!this.#Nt)return;const e=this.currentTheme,i="launcher"===t?e.closed:e.open,s="launcher"===t?this.#Bt:this.#Wt;xt(this,wt.MOVE,{target:t,position:i.position,offset:s.place(this.#Nt)??i.offset,displacement:{...this.#Nt}})}#Kt;#Vt;handleSubmitted(){this.#Yt()}#Yt(){const t=this.currentTheme.open.loading;t.auto&&(this.#Vt=new Set(this.messages.map(t=>t.id)),this.loading=!0,this.#Gt(),t.timeout>0&&(this.#Kt=setTimeout(()=>{this.#Kt=void 0,this.#l()},t.timeout)))}#l(){this.#Gt(),this.#Vt=void 0,this.loading=!1}#Gt(){void 0!==this.#Kt&&clearTimeout(this.#Kt),this.#Kt=void 0}get typing(){return this.#kt}set typing(t){const e=this.#kt;t!==e&&(this.#kt=t,this.requestUpdate("typing",e),t&&(this.loading=!1))}get loading(){return this.#Tt}set loading(t){const e=this.#Tt;t!==e&&(this.#Tt=t,this.requestUpdate("loading",e),t&&(this.typing=!1))}get state(){return this.#Et}set state(t){const e=this.#Et;if(t===e)return;if(this.#Et=t,this.requestUpdate("state",e),!this.#Ot||this.#Ot.applying)return;const i=this.#Ct;this.#Ct="api";const s=this.#Ot.request(t,i);this.#Rt=s,s.then(()=>{this.#Rt===s&&(this.#Rt=null)})}get device(){return this.#$.device}get currentTheme(){return this.#Lt.current}get currentLabels(){return function(t,e){const i=(Se(t)||"en").toLowerCase(),s=_e[i]??_e[i.split("-")[0]]??_e.en;return e?{...s,...e}:s}(this.locale,this.labels)}get resolvedLocale(){return Se(this.locale)}get renderedState(){return this.#Ot.renderedState}get hasUnseen(){return this.#Mt.hasUnseen}get value(){return this.#Pt.value}set value(t){this.#Pt.value=t}get canSend(){return this.#Pt.canSend}open(){return this.#Jt("open","api")}close(){return this.#Jt("closed","api")}hide(){return this.#Jt("hidden","api")}show(){return"hidden"===this.#Et?this.#Jt("closed","api"):Promise.resolve(!0)}toggle(){return this.#Jt("open"===this.state?"closed":"open","api")}submit(t){return this.#Pt.submit(t)}clearInput(){this.#Pt.clear()}scrollToBottom(t){this.#Mt.scrollToBottom(t)}getMessageElement(t){return this.renderRoot.querySelector(`[part~="message"][data-id="${CSS.escape(t)}"] [part~="message-content"]`)}focusInput(){const t=this.renderRoot.querySelector('[part~="input"]');return!!t&&(t.focus(),!0)}#Dt(){if("never"===this.focusOnOpen)return;if("auto"===this.focusOnOpen&&"mobile"===this.device)return;if(this.focusInput())return;const t=this.renderRoot.querySelector('[part~="panel"]');t?.focus()}handleInput(t){this.#Pt.onInput(t)}handleKeydown(t){this.#Pt.onKeydown(t)}handleComposition(t){t?this.#Pt.onCompositionStart():this.#Pt.onCompositionEnd()}handleAttach(t){xt(this,wt.ATTACH,{files:t})}openAttach(){const t=this.renderRoot.querySelector('[part~="attach-input"]');t?.click()}renderTypingHtml(t){return yt(this.sanitize?this.sanitize(t):t)}handleMessageClick(t){const e=t.composedPath(),i=e.find(t=>t instanceof HTMLElement&&t.getAttribute("part")?.split(/\s+/).includes("message"));if(!i)return;const s=i.dataset.id,n=this.messages.find(t=>t.id===s);if(!n)return;const o=e[0];xt(this,wt.MESSAGE_CLICK,{message:n,target:o,originalEvent:t},{cancelable:!0})||t.preventDefault()}toggleFromUser(){return this.#Jt("open"===this.state?"closed":"open","user")}closeFromUser(){return this.#Jt("closed","user")}home(t="api"){xt(this,wt.HOME,{trigger:t})}#Jt(t,e){return t!==this.#Et&&(this.#Ct=e,this.state=t),this.#Rt??Promise.resolve(!0)}#Ht(t,e,i){const s=this.currentTheme;if("exit"===i&&"hidden"===e)return{effect:s.hidden.animation.exit,duration:s.hidden.animation.duration};const n="open"===("exit"===i?t:e)?s.open:s.closed;return{effect:"exit"===i?n.animation.exit:n.animation.enter,duration:n.animation.duration}}willUpdate(){this.#$.observe(Wt.breakpointOf(this.theme)),this.#Lt.apply(this.theme,this.#$.device),this.#zt.write(this.messageStyles??"",this.renderRoot);const t=this.currentTheme;this.dataset.launcherPosition=t.closed.position,this.dataset.panelPosition=t.open.position,this.dataset.idle=t.closed.animation.idle,this.dataset.bubbleTail=t.open.bubble.tail}updated(){const t=new Set(this.messages.map(t=>t.id));if(function(t,e){const i=Qt.get(t);if(i)for(const t of i.keys())t.startsWith("msg:")&&(e.has(t.slice(4))||i.delete(t))}(this,t),this.#Xt(t),this.#Nt&&this.#Ft(),this.#Vt){this.messages.some(t=>"user"!==t.role&&!this.#Vt.has(t.id))&&this.#l()}}disconnectedCallback(){super.disconnectedCallback(),this.#Gt()}#Xt(t){for(const e of this.#Ut.keys())t.has(e)||this.#Ut.delete(e);for(const t of this.messages){const e=se(t);if(this.#Ut.has(t.id)&&Object.is(this.#Ut.get(t.id),e))continue;this.#Ut.set(t.id,e);const i=this.getMessageElement(t.id);i&&xt(this,wt.MESSAGE_RENDER,{message:t,element:i,instance:oe(this,t.id)})}}render(){const t=this.renderedState,e="closed"===t||"open"===t&&"visible"===this.currentTheme.open.launcher,i="open"===t;return W`
1308
+ ${e?ae(this):V} ${i?$e(this):V}
1309
+ `}}customElements.get("chit-ui")||customElements.define("chit-ui",Le);const Me=gt(class extends bt{constructor(t){if(super(t),t.type!==pt||"class"!==t.name||t.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(t){return" "+Object.keys(t).filter(e=>t[e]).join(" ")+" "}update(t,[e]){if(void 0===this.st){this.st=new Set,void 0!==t.strings&&(this.nt=new Set(t.strings.join(" ").split(/\s/).filter(t=>""!==t)));for(const t in e)e[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(e)}const i=t.element.classList;for(const t of this.st)t in e||(i.remove(t),this.st.delete(t));for(const t in e){const s=!!e[t];s===this.st.has(t)||this.nt?.has(t)||(s?(i.add(t),this.st.add(t)):(i.remove(t),this.st.delete(t)))}return K}}),Pe="important",ze=" !"+Pe,Ue=gt(class extends bt{constructor(t){if(super(t),t.type!==pt||"style"!==t.name||t.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce((e,i)=>{const s=t[i];return null==s?e:e+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${s};`},"")}update(t,[e]){const{style:i}=t.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(e)),this.render(e);for(const t of this.ft)null==e[t]&&(this.ft.delete(t),t.includes("-")?i.removeProperty(t):i[t]=null);for(const t in e){const s=e[t];if(null!=s){this.ft.add(t);const e="string"==typeof s&&s.endsWith(ze);t.includes("-")||e?i.setProperty(t,e?s.slice(0,-11):s,e?Pe:""):i[t]=s}}return K}});return t.ChitUI=Le,t.Events=wt,t.LitElement=ct,t.classMap=Me,t.css=r,t.greenTheme={closed:{colors:{background:"#0a6b36",text:"#ffffff",shadow:"0 4px 12px rgba(16, 42, 26, 0.32)"}},open:{radius:12,colors:{background:"#d3ddea",text:"#16212c",accent:"#0a6b36",border:"#b6c5d6",shadow:"0 8px 32px rgba(16, 32, 48, 0.28)",headerBackground:"#ffffff",headerText:"#16212c",userBubble:"#9ce26c",userText:"#14240c",assistantBubble:"#ffffff",assistantText:"#16212c",systemText:"#37475a",inputBackground:"#ffffff",inputText:"#16212c",inputPlaceholder:"#5c6370"},bubble:{radius:18,tail:"top"}}},t.html=W,t.live=we,t.nothing=V,t.render=ht,t.repeat=be,t.styleMap=Ue,t.svg=F,t.unsafeHTML=yt,t}({});
1191
1310
  //# sourceMappingURL=chit-ui.iife.min.js.map