@kodaris/krubble-app-components 1.0.150 → 1.0.151

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.
@@ -1 +1 @@
1
- {"version":3,"file":"krubble-app.bundled.js","sources":["../../../node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/lit-html/lit-html.js","../../../node_modules/lit-element/lit-element.js","../../../node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/@lit/reactive-element/decorators/base.js","../../../node_modules/@lit/reactive-element/decorators/query.js","../../../node_modules/lit-html/directive.js","../../../node_modules/lit-html/directives/unsafe-html.js","../../../node_modules/lit-html/directives/class-map.js","scaffold/nav-item-edit.js","../../../node_modules/lit-html/directives/style-map.js","../../../node_modules/lit-html/directive-helpers.js","../../../node_modules/lit-html/directives/repeat.js","../../../node_modules/marked/lib/marked.esm.js","chatbot.js","scaffold.js","screen-nav.js","screen-detail.js","subbar.js","router.js"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==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 s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>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[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){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}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y 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,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.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,s=this.constructor.elementProperties;for(const i of s.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 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,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&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,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}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){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(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!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&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 Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{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 r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{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)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as s,Directive as i,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=s(class extends i{constructor(t){if(super(t),t.type!==r.ATTRIBUTE||\"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(s=>t[s]).join(\" \")+\" \"}update(s,[i]){if(void 0===this.st){this.st=new Set,void 0!==s.strings&&(this.nt=new Set(s.strings.join(\" \").split(/\\s/).filter(t=>\"\"!==t)));for(const t in i)i[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(i)}const r=s.element.classList;for(const t of this.st)t in i||(r.remove(t),this.st.delete(t));for(const t in i){const s=!!i[t];s===this.st.has(t)||this.nt?.has(t)||(s?(r.add(t),this.st.add(t)):(r.remove(t),this.st.delete(t)))}return t}});export{e as classMap};\n//# sourceMappingURL=class-map.js.map\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport '@kodaris/krubble-components';\nexport class KRNavItemEdit extends LitElement {\n constructor() {\n super(...arguments);\n this.label = '';\n this.icon = '';\n this.url = '';\n this.active = true;\n }\n connectedCallback() {\n super.connectedCallback();\n if (this.data) {\n this.label = this.data.label || '';\n this.icon = this.data.icon || '';\n this.url = this.data.url || '';\n this.active = this.data.active !== false;\n }\n }\n handleLabelInput(e) {\n const textField = e.target;\n this.label = textField.value;\n }\n handleIconInput(e) {\n const textField = e.target;\n this.icon = textField.value;\n }\n handleUrlInput(e) {\n const textField = e.target;\n this.url = textField.value;\n }\n handleActiveChange(e) {\n this.active = e.target.checked;\n }\n handleCancel() {\n this.dialogRef.close(undefined);\n }\n handleSave() {\n this.dialogRef.close({\n label: this.label,\n icon: this.icon || undefined,\n url: this.url || undefined,\n active: this.active,\n });\n }\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleSave();\n }\n }\n render() {\n return html `\n <h2>Edit Navigation Item</h2>\n\n <div class=\"form-group\">\n <kr-text-field\n label=\"Label\"\n name=\"label\"\n .value=${this.label}\n @input=${this.handleLabelInput}\n @keydown=${this.handleKeyDown}\n placeholder=\"Enter label\"\n ></kr-text-field>\n </div>\n\n <div class=\"form-group\">\n <kr-text-field\n label=\"Icon (emoji or SVG)\"\n name=\"icon\"\n .value=${this.icon}\n @input=${this.handleIconInput}\n @keydown=${this.handleKeyDown}\n placeholder=\"e.g. 📊 or <svg>...</svg>\"\n ></kr-text-field>\n </div>\n\n <div class=\"form-group\">\n <kr-text-field\n label=\"URL\"\n name=\"url\"\n .value=${this.url}\n @input=${this.handleUrlInput}\n @keydown=${this.handleKeyDown}\n placeholder=\"e.g. /ci/my-page or https://...\"\n ></kr-text-field>\n </div>\n\n <div class=\"form-group\">\n <div class=\"checkbox-group\">\n <input\n type=\"checkbox\"\n id=\"active\"\n .checked=${this.active}\n @change=${this.handleActiveChange}\n />\n <label class=\"checkbox-label\" for=\"active\">Visible in navigation</label>\n </div>\n </div>\n\n <div class=\"actions\">\n <button class=\"btn-cancel\" @click=${this.handleCancel}>Cancel</button>\n <button class=\"btn-save\" @click=${this.handleSave}>Save</button>\n </div>\n `;\n }\n}\nKRNavItemEdit.styles = css `\n :host {\n display: block;\n width: 360px;\n padding: 24px;\n color: rgba(255, 255, 255, 0.9);\n\n /* Dark theme for kr-text-field */\n --kr-text-field-label-color: rgba(255, 255, 255, 0.7);\n --kr-text-field-border-color: rgba(255, 255, 255, 0.1);\n --kr-text-field-bg: rgba(255, 255, 255, 0.05);\n --kr-text-field-color: #ffffff;\n --kr-text-field-focus-border-color: #beea4e;\n --kr-text-field-focus-ring-color: rgba(190, 234, 78, 0.1);\n --kr-text-field-placeholder-color: rgba(255, 255, 255, 0.3);\n --kr-text-field-helper-color: rgba(255, 255, 255, 0.5);\n }\n\n h2 {\n margin: 0 0 24px 0;\n font-size: 18px;\n font-weight: 600;\n color: #ffffff;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .checkbox-group {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n accent-color: #beea4e;\n cursor: pointer;\n }\n\n .checkbox-label {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.9);\n cursor: pointer;\n }\n\n .actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n margin-top: 28px;\n }\n\n button {\n padding: 10px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .btn-cancel {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n }\n\n .btn-cancel:hover {\n background: rgba(255, 255, 255, 0.1);\n color: #ffffff;\n }\n\n .btn-save {\n background: #beea4e;\n border: none;\n color: #10172a;\n }\n\n .btn-save:hover {\n background: #d4f472;\n }\n `;\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"label\", void 0);\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"icon\", void 0);\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"url\", void 0);\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"active\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-nav-item-edit')) {\n customElements.define('kr-nav-item-edit', KRNavItemEdit);\n}\n//# sourceMappingURL=nav-item-edit.js.map","import{noChange as t}from\"../lit-html.js\";import{directive as e,Directive as r,PartType as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const n=\"important\",i=\" !\"+n,o=e(class extends r{constructor(t){if(super(t),t.type!==s.ATTRIBUTE||\"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,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes(\"-\")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${s};`},\"\")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes(\"-\")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r=\"string\"==typeof e&&e.endsWith(i);t.includes(\"-\")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:\"\"):s[t]=e}}return t}});export{o as styleMap};\n//# sourceMappingURL=style-map.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","/**\n * marked v12.0.2 - a markdown parser\n * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape$1(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n // precede setext continuation with 4 spaces so it isn't a setext\n let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1');\n text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (const header of headers) {\n item.header.push({\n text: header,\n tokens: this.lexer.inline(header)\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map(cell => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell)\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape$1(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape$1(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = '\\\\p{P}\\\\p{S}';\nconst punctuation = edit(/^((?![*_])[\\spunctuation])/, 'u')\n .replace(/punctuation/g, _punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n escape: edit(escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\n/**\n * GFM + Line Breaks Inline Grammar\n */\nconst inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n};\n/**\n * exports\n */\nconst block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic\n};\nconst inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic\n};\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = []) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n }\n else {\n src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$1(code, true))\n + '</code></pre>\\n';\n }\n return '<pre><code class=\"language-'\n + escape$1(lang)\n + '\">'\n + (escaped ? code : escape$1(code, true))\n + '</code></pre>\\n';\n }\n blockquote(quote) {\n return `<blockquote>\\n${quote}</blockquote>\\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `<h${level}>${text}</h${level}>\\n`;\n }\n hr() {\n return '<hr>\\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n listitem(text, task, checked) {\n return `<li>${text}</li>\\n`;\n }\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph(text) {\n return `<p>${text}</p>\\n`;\n }\n table(header, body) {\n if (body)\n body = `<tbody>${body}</tbody>`;\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n tablerow(content) {\n return `<tr>\\n${content}</tr>\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `<strong>${text}</strong>`;\n }\n em(text) {\n return `<em>${text}</em>`;\n }\n codespan(text) {\n return `<code>${text}</code>`;\n }\n br() {\n return '<br>';\n }\n del(text) {\n return `<del>${text}</del>`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${title}\"`;\n }\n out += '>';\n return out;\n }\n text(text) {\n return text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n em(text) {\n return text;\n }\n codespan(text) {\n return text;\n }\n del(text) {\n return text;\n }\n html(text) {\n return text;\n }\n text(text) {\n return text;\n }\n link(href, title, text) {\n return '' + text;\n }\n image(href, title, text) {\n return '' + text;\n }\n br() {\n return '';\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n options;\n renderer;\n textRenderer;\n constructor(options) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const genericToken = token;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n const headingToken = token;\n out += this.renderer.heading(this.parseInline(headingToken.tokens), headingToken.depth, unescape(this.parseInline(headingToken.tokens, this.textRenderer)));\n continue;\n }\n case 'code': {\n const codeToken = token;\n out += this.renderer.code(codeToken.text, codeToken.lang, !!codeToken.escaped);\n continue;\n }\n case 'table': {\n const tableToken = token;\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < tableToken.header.length; j++) {\n cell += this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens), { header: true, align: tableToken.align[j] });\n }\n header += this.renderer.tablerow(cell);\n let body = '';\n for (let j = 0; j < tableToken.rows.length; j++) {\n const row = tableToken.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { header: false, align: tableToken.align[k] });\n }\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n const blockquoteToken = token;\n const body = this.parse(blockquoteToken.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n const listToken = token;\n const ordered = listToken.ordered;\n const start = listToken.start;\n const loose = listToken.loose;\n let body = '';\n for (let j = 0; j < listToken.items.length; j++) {\n const item = listToken.items[j];\n const checked = item.checked;\n const task = item.task;\n let itemBody = '';\n if (item.task) {\n const checkbox = this.renderer.checkbox(!!checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n}\n\nclass Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape$1(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { marked } from 'marked';\n// Importing these named exports also registers their custom elements\n// (kr-dialog, kr-tab-group, kr-tab, kr-text-field for the browse dialog;\n// kr-checkbox for the settings panel's Tools toggles).\nimport { KRFilePreview, KRSnackbar } from '@kodaris/krubble-components';\nimport { KRHttp } from '@kodaris/krubble-http';\n/**\n * The action-confirmation decisions, in the left-to-right order they render and\n * the order the arrow keys walk. Yes is first so it's the default highlight.\n * Shared by the render and the keyboard handler so the two never drift.\n */\nconst CONFIRMATION_DECISIONS = [\n {\n decision: 'approve',\n label: 'Yes',\n },\n {\n decision: 'approveAlways',\n label: 'Always allow',\n },\n {\n decision: 'reject',\n label: 'No',\n },\n];\n/**\n * The modes as shown in the composer's mode selector, in menu order. `label` is\n * the short trigger text (Gemini-style inline label); `description` is the menu\n * sublabel. Written for a non-technical user — no \"guarded tool\" jargon.\n */\nconst CHATBOT_MODES = [\n {\n mode: 'NORMAL',\n label: 'Ask',\n description: 'Asks before making changes',\n },\n {\n mode: 'EDIT',\n label: 'Auto',\n description: 'Makes changes automatically',\n },\n {\n mode: 'PLAN',\n label: 'Plan',\n description: 'Suggests a plan, makes no changes',\n },\n];\n/** Image extensions the chatbot renders as thumbnails (used when MIME is absent). */\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp'];\n/**\n * Video extensions the picker accepts. The AI cannot watch video — these upload\n * and store for playback and tool use only, and the backend tells the model so.\n * Matches what kr-file-preview can play back.\n */\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mov'];\n/**\n * File extensions the picker accepts. Mirrors what the backend can read: the\n * document/spreadsheet family Bedrock ingests, the plain-text family read as\n * fallback, and the image formats. Videos are accepted for upload/storage even\n * though the model can't read them. This is a UX convenience — the backend\n * accepts anything and just tells the model when a type can't be read.\n */\nconst ACCEPTED_FILE_EXTENSIONS = [\n 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'csv', 'html', 'md', 'txt', 'json', 'xml', 'vtt', 'srt',\n ...IMAGE_EXTENSIONS,\n ...VIDEO_EXTENSIONS,\n];\n/**\n * AI chatbot component with SSE streaming.\n *\n * Accepts a `send` callback that returns a streaming Response (SSE format).\n * Parses the stream for text tokens, status updates, and errors.\n * Dispatches a `stream-event` custom event for every SSE message so consumers can react.\n *\n * ## SSE Stream Format\n * The component expects `data:` lines with JSON payloads containing a `type` field:\n * - `STATUS` — `{ type: \"STATUS\", message: \"Thinking...\" }`\n * - `RESPONSE_PART` — `{ type: \"RESPONSE_PART\", message: \"token text\" }`\n * - `TOOL_RESULT` — `{ type: \"TOOL_RESULT\", message: \"tool_name\", data: {...} }`\n * - `ERROR` — `{ type: \"ERROR\", message: \"Something went wrong\" }`\n * - `HEARTBEAT` — `{ type: \"HEARTBEAT\" }` (ignored)\n * - `ACTION_CONFIRMATION_REQUIRED` — a guarded tool paused for approval;\n * `{ type, data: { actions: [...] }, finished: true }` (Rail 3).\n *\n * The final event should include `finished: true` to signal stream completion.\n *\n * ## Turn locking (when the composer is free to send)\n * `finished: true` is the single reliable \"turn over, safe to send\" signal — the\n * component unlocks the composer on it, and also on stream close/error as a\n * fallback so a dropped stream never wedges the UI. The one exception is\n * `ACTION_CONFIRMATION_REQUIRED`: it too carries `finished: true`, but the\n * conversation is now awaiting an approve/deny decision, so the composer stays\n * blocked and only a confirmation decision (not a new message) is a valid next\n * call.\n *\n * ## Usage\n * ```html\n * <kr-chatbot\n * label=\"AI Assistant\"\n * .send=${(params) => {\n * return fetch('/api/ai/chat/stream', {\n * method: 'POST',\n * headers: { 'Content-Type': 'application/json', 'Accept': 'text/event-stream' },\n * credentials: 'include',\n * body: JSON.stringify({ userText: params.message })\n * });\n * }}\n * ></kr-chatbot>\n * ```\n *\n * @slot - Optional slot content displayed above the messages area\n *\n * @fires message-submit - When the user sends a message. Cancelable. Detail: `{ message: string }`\n * @fires stream-event - Dispatched for every SSE message received. Detail contains the parsed event data.\n * @fires conversation-created - When a turn with no target creates a new conversation and the chatbot pins it. Detail: `{ conversation }` (the full conversation object).\n * @fires conversation-title - When the server sends the generated title for a new conversation (end of its first turn). The header label is already updated; this is for consumers with their own chrome to sync (breadcrumbs, tab titles). Detail: `{ title }`.\n */\nexport class KRChatbot extends LitElement {\n constructor() {\n super(...arguments);\n // --- Private properties ---\n /**\n * Internal toggle for how the action-confirmation prompt (Rail 3) is presented:\n * - `false`: the compact card that floats over the messages, pinned above the\n * composer — plain-language ask + Yes/Always/No only, no tool arguments.\n * - `true`: the prompt renders inline in the message stream (Claude-CLI style),\n * grows to any height (no inner scroll — the transcript scrolls), and offers a\n * \"Show details\" disclosure of the raw tool input for technical users.\n * Flip here to switch approaches; the floating path is unchanged when false.\n */\n this._inlineConfirm = true;\n /**\n * Internal toggle for how the assistant's reasoning (\"thinking\") is presented:\n * - `false`: the current collapsible grey \"Thinking\" disclosure (kept so we can\n * revert).\n * - `true`: reasoning renders as a plain agentic message — same text style as a\n * normal assistant reply, no box, no collapse.\n * Flip here to switch approaches.\n */\n this._reasoningAsMessage = true;\n this._reader = null;\n this._decoder = new TextDecoder();\n this._buffer = '';\n /**\n * True once the current turn ended cleanly (a `finished:true` chunk arrived).\n * Distinguishes a real completion from a dropped stream: if the SSE stream\n * closes (`result.done`) while this is still false, the turn is NOT over — the\n * connection dropped (5-min emitter timeout, tab was backgrounded, network\n * blip) — so we reconnect instead of unlocking the composer. Reset per turn.\n */\n this._turnFinishedCleanly = false;\n /**\n * Consecutive failed reconnect attempts for the current drop. Bounds the retry\n * loop so a genuinely dead turn (server gone) can't spin forever — after the\n * cap we give up and finish the turn. Reset when a reconnect succeeds or a new\n * turn starts.\n */\n this._reconnectAttempts = 0;\n this._userHasScrolledUp = false;\n /**\n * Keep the end of the streaming response in view. Set at the start of every\n * turn (send, confirmation decision, reconnect); cleared when the user scrolls\n * up on their own (wheel, touch drag, scrollbar drag) and restored when they\n * scroll back to the bottom. Checked in updated() after every streamed chunk.\n */\n this._followStream = false;\n this._isDragging = false;\n this._isResizing = false;\n this._overlay = null;\n this._resizeDir = '';\n this._dragStartX = 0;\n this._dragStartY = 0;\n this._dragStartLeft = 0;\n this._dragStartTop = 0;\n this._resizeStartW = 0;\n this._resizeStartH = 0;\n /** Cursor X at drawer resize start. */\n this._drawerResizeStartX = 0;\n /** Drawer width at resize start. */\n this._drawerResizeStartW = 0;\n /** Counter for depth-aware dragenter/dragleave tracking. */\n this._dragDepth = 0;\n /** Monotonic id source for pending attachments. */\n this._pendingSeq = 0;\n /**\n * The `aiAnalyze` mode for the next picked files — set when the attach action\n * opens the picker (true = \"Attach Files\", false = \"Attach Files for\n * Reference\"), read by the file-input change handler. Not reactive: it's read\n * synchronously in the change handler, never rendered.\n */\n this._pendingAttachAnalyze = true;\n /**\n * Request-id guards for skill searches — bumped on each search so out-of-order\n * responses are dropped (mirrors the kr-combo-box `_requestId` pattern). Org and\n * global searches run concurrently into separate buffers, so each has its own.\n */\n this._orgSkillRequestId = 0;\n this._globalSkillRequestId = 0;\n this._invocableSkillRequestId = 0;\n this._suggestedActionRequestId = 0;\n /**\n * Codes of global skills with an in-flight enable/disable request. The `+`\n * button reads this to show a pending state and ignore repeat clicks. Mutated\n * in place; call requestUpdate() after changing it to re-render.\n */\n this._globalSkillPending = new Set();\n /**\n * The live Web Speech recognizer while dictating, else null. Not reactive —\n * `_isDictating` drives the UI; this is just the handle used to stop it.\n */\n this._speechRecognition = null;\n /**\n * The composer text as it stood when dictation started. Each `result` event\n * re-reports the whole utterance (final + interim), so the value is rebuilt as\n * this base + the transcript rather than appended to — appending would repeat\n * the interim text on every event.\n */\n this._speechBaseValue = '';\n /**\n * Transcript of utterances the recognizer has marked final this session.\n * Held separately because `results` is pruned in continuous mode on some\n * browsers; without this, earlier sentences would vanish mid-dictation.\n */\n this._speechFinalTranscript = '';\n // --- @property (public API) ---\n /**\n * Callback function for sending messages. Receives the user's message and\n * current conversation history. Must return a Response with a streaming SSE body.\n *\n * Optional — when not set, the chatbot uses its built-in default that streams\n * from the Kodaris Bedrock conversation endpoints. Set this to override.\n */\n this.send = null;\n /**\n * Callback function called on init to load existing conversation messages.\n * Must return a Promise that resolves with an array of KRChatbotMessage.\n *\n * Optional — when not set, the chatbot uses its built-in default that loads\n * existing messages from the Kodaris Bedrock conversation. Set this to override.\n */\n this.load = null;\n /**\n * Conversation messages. Can be set externally for initial messages.\n * Updated internally as the conversation progresses.\n */\n this.messages = [];\n /**\n * Header label text.\n */\n this.label = 'Kat';\n /**\n * Input placeholder text.\n */\n this.placeholder = 'Type a message...';\n /**\n * Whether the chat panel is open. Only relevant in floating mode.\n */\n this.opened = false;\n /**\n * Hide the built-in floating toggle button. Use this when an external\n * control (e.g. the site-editor bar) owns opening the chat — the panel is\n * then driven via the `open()` / `close()` / `toggle()` methods.\n */\n this.hideToggle = false;\n /**\n * Layout mode.\n * - `'floating'` (default): the chatbot is a fixed bottom-right widget with a\n * toggle button, and the panel can be dragged and resized. This is the\n * traditional chat-widget appearance.\n * - `'inline'`: the chatbot drops its fixed positioning and fills its parent\n * container (100% width/height, no border radius/shadow, no toggle, no\n * drag/resize). The panel is always open. Use this to embed the chat as a\n * full page or panel region.\n */\n this.variant = 'floating';\n /**\n * The conversation this chatbot's turns target (backend `conversationID`).\n *\n * - Set → every turn is sent with this `conversationID`, so the chat continues\n * that specific conversation.\n * - Unset → the first turn is sent with `createNew: true` (a fresh\n * conversation); the component then resolves the new conversation's id (via\n * `/conversation/last`) and pins it here so the rest of the session stays one\n * conversation instead of spawning a new one per message.\n *\n * Only used by the built-in `send` default; a custom `send` owns its own\n * targeting.\n */\n this.conversationId = null;\n // --- @state (internal) ---\n this._inputValue = '';\n this._isStreaming = false;\n this._error = '';\n /**\n * The current conversation's title. In the floating widget it replaces the\n * static header label so the user sees which conversation they're in. Set from\n * the loaded/switched conversation and from the live `CONVERSATION_TITLE` event\n * (the server generates a title at the end of a new conversation's first turn);\n * empty for a brand-new conversation, where the header falls back to `label`.\n */\n this._conversationTitle = '';\n /**\n * User-facing context warning text (`CONVERSATION_TOKEN_WARNING`). Shown as a\n * dismissible banner in all variants. Carries only friendly guidance, no numbers.\n */\n this._contextWarning = '';\n /**\n * True once the conversation hit the context-window limit\n * (`CONVERSATION_LIMIT_REACHED`, or `contextExceeded` on load). Drives a\n * blocking \"start a new conversation\" notice. User-facing, all variants.\n */\n this._contextLimitReached = false;\n /** Server-provided limit text (`CONVERSATION_LIMIT_REACHED`), if any. */\n this._contextLimitMessage = '';\n /**\n * The guarded tool awaiting the user's decision, from the turn's\n * `ACTION_CONFIRMATION_REQUIRED` event (`data.actions[]`, of which we handle the\n * first — the framework confirms one guarded tool at a time). Non-empty means\n * the conversation is paused on a confirmation: the normal composer is blocked\n * (a new chat message would be rejected by the server with\n * `awaitingConfirmation`) and the approve/deny prompt is shown instead. Cleared\n * once a decision is sent.\n *\n * This is the one case where `finished:true` unlocks the turn lock but does\n * NOT free the composer — the only valid next call is a confirmation decision.\n */\n this._pendingActions = [];\n /**\n * Keyboard-highlighted confirmation option, as an index into the decision list\n * (0 = Yes, 1 = Always allow, 2 = No). Yes is highlighted by default so Enter\n * approves. Arrow Left/Right move it; Enter activates it. -1 when no batch is\n * pending.\n */\n this._confirmationHighlighted = -1;\n /**\n * True while a confirmation decision (approve/deny) is being sent and its\n * follow-up turn streams. Disables the approve/deny buttons so the batch can't\n * be resolved twice.\n */\n this._confirmationInFlight = false;\n /**\n * INTERNAL-ONLY latest telemetry snapshot (last-value-wins). Populated from\n * `TOKEN_USAGE` events during streaming and hydrated from the conversation\n * DTO on load. Only surfaced in the `inline` variant's debug panel.\n */\n this._telemetry = null;\n /**\n * INTERNAL-ONLY per-iteration telemetry log for the debug panel's verbose\n * table. Append-only within a turn; reset at the start of each send. Each row\n * may be augmented with its `CACHE_CHECKPOINT` info.\n */\n this._iterationLog = [];\n /** Latest cache-checkpoint info keyed by iteration, for the verbose table. */\n this._cacheCheckpoints = {};\n /**\n * Whether the side drawer is open (slid in). The drawer stays mounted and\n * animates via a CSS transform, so this drives the slide and the content push.\n */\n this._drawerOpen = false;\n /**\n * Which view the drawer shows — settings, debug, history, or a single tool\n * call's full detail. One drawer holds them all; header buttons switch\n * settings/debug/history and clicking a tool line switches to `toolDetail`. The\n * content/width swap inside. Never null, so the content stays visible while the\n * drawer slides shut. `history` is floating-only (the previous-conversations\n * picker); in floating the drawer fills the panel over the transcript.\n */\n this._drawerView = 'settings';\n /**\n * The user's previous conversations, loaded from `/conversation/list` when the\n * history view opens. Each is the raw ConversationViewDto (we read conversationID,\n * title, lastModified). Empty until the first open; reloaded on each open so a\n * freshly-created or renamed conversation shows.\n */\n this._conversations = [];\n /** True while the history list is being fetched (drives a loading state). */\n this._conversationsLoading = false;\n /**\n * The tool call whose full input/output the `toolDetail` drawer view shows —\n * the clicked `tool_use` message and its paired `tool_result` message, stored\n * whole. The render reads `.data.*` off them (and formats for display) so we\n * don't duplicate the message shape here. Transient — set on click, never\n * persisted (its bytes can be large and the view is a peek). Null when none.\n */\n this._toolDetail = null;\n /** Which tool-detail block ('input' | 'output') just flashed \"Copied\" (null = none). */\n this._toolDetailCopied = null;\n /** Whether the tool-detail Input section is expanded. Both open on open. */\n this._toolDetailInputOpen = true;\n /** Whether the tool-detail Output section is expanded. */\n this._toolDetailOutputOpen = true;\n /** Current width of the drawer in px (user-resizable, persisted). */\n this._drawerWidth = 430;\n /** True while the user is dragging the drawer's resize handle. */\n this._isDrawerResizing = false;\n /** Files staged in the composer, before the message is sent. */\n this._pendingConversationFiles = [];\n /** True while a file is being dragged over the panel (shows the drop overlay). */\n this._isDraggingFile = false;\n /** Whether the `/` skill menu is open above the composer. */\n this._skillMenuOpened = false;\n /** Current `/` query (text after the slash), sent to `_searchOrgSkills`. */\n this._skillQuery = '';\n /**\n * Latest org skill search results (this instance's own skills). Backs the\n * browse dialog's \"Your Org\" tab only — global skills never appear here.\n */\n this._orgSkills = [];\n /**\n * Latest shared-Kodaris (global) skill results, for the browse dialog's\n * \"Kodaris\" tab. Kept separate from `_orgSkills` so switching tabs shows\n * fresh results immediately instead of the other tab's stale list — the browse\n * search fills both buffers at once.\n */\n this._globalSkills = [];\n /**\n * Latest results for the `/` composer menu — everything the current user can\n * actually invoke, merged and role-filtered server-side by\n * `/conversation/availableSkills`. A separate buffer from the two browse-tab lists\n * so installed globals in the menu never leak into the \"Your Org\" tab.\n */\n this._invocableSkills = [];\n /**\n * Context-aware action chips for the empty state, from `/conversation/suggestedActions`.\n * Loaded fresh every time the panel opens on an empty conversation (see `_loadSuggestedActions`);\n * cleared when the first message is sent so they don't linger over a live conversation.\n */\n this._suggestedActions = [];\n /**\n * AI framework UI config flags fetched from `aiFrameworkConfig` on connect.\n * `debugTelemetryEnabled` (same server-side gate as TOKEN_USAGE emission) turns\n * on the debug drawer toggle and the `/test-context-warning` / `/test-context-limit` composer\n * options — known up front, before any message.\n */\n this._aiFrameworkConfig = {};\n /** Highlighted item in the skill menu for keyboard navigation (-1 = none). */\n this._skillHighlighted = 0;\n /** Index of the message whose copy button just flashed \"Copied\" (-1 = none). */\n this._copiedIndex = -1;\n /** Whether the \"Browse all skills\" dialog is open. */\n this._skillBrowseOpened = false;\n /**\n * Active tab in the browse dialog. `org` shows `_orgSkills` (this instance's\n * skills); `kodaris` shows `_globalSkills` (the shared global catalog).\n */\n this._skillBrowseSource = 'org';\n /** Search text in the browse dialog, routed to the active tab's search. */\n this._skillBrowseQuery = '';\n /** True while the mic is live and speech is being transcribed into the composer. */\n this._isDictating = false;\n /**\n * Conversation posture for guarded tools (the composer's mode selector). Sent on\n * each turn's `mode` field and kept in sync with the server's `CONVERSATION_STATE`\n * event. Defaults to NORMAL (ask before each guarded tool).\n */\n this._mode = 'NORMAL';\n /** Whether the composer's mode menu (Ask / Auto / Plan) is open. */\n this._modeMenuOpened = false;\n /**\n * Whether to show the tools the assistant ran, as activity lines in the\n * transcript. On by default; a user can hide them from the settings panel.\n * User-controlled in the settings panel; persisted in localStorage.\n */\n this._showTools = true;\n /**\n * Whether to also show each tool's inputs and results under its line. Only\n * has an effect when `_showTools` is on. Off by default.\n */\n this._showToolInputs = false;\n /**\n * Whether to show the raw tool input inside the confirmation card (the JSON the\n * model proposed for a guarded action). The plain-language ask + Yes/No always\n * show; this only reveals the technical detail. Off by default.\n */\n this._showConfirmationInput = false;\n /**\n * Close the `/` skill menu when the click lands outside it.\n *\n * Bound at the document because a click anywhere — including outside this\n * component entirely — should dismiss the menu. `composedPath()` rather than\n * `e.target` since the menu lives in this component's shadow root, where\n * `target` on a document listener is retargeted to the host element and every\n * inside click would look like an outside one.\n */\n this._handleDocumentClick = (e) => {\n // Close the mode menu on any click outside the mode selector (the trigger\n // owns its own toggle, so exclude the whole `.mode` block).\n if (this._modeMenuOpened) {\n const modePath = e.composedPath();\n if (!modePath.some((el) => el instanceof HTMLElement && el.classList.contains('mode'))) {\n this._modeMenuOpened = false;\n }\n }\n if (!this._skillMenuOpened) {\n return;\n }\n // Excluded: the textarea, since clicking it keeps editing the same `/` command\n // and dismissing there would fight the user still typing it; and the plus\n // button, which owns the menu's open/close itself. The plus exclusion matters\n // in both directions — this listener runs after the button's own handler, so\n // without it a click that just opened the menu would immediately close it\n // again, and a click meant to toggle it shut would be double-handled.\n const path = e.composedPath();\n if (path.some((el) => el instanceof HTMLElement && (el.classList.contains('skill-menu') || el.classList.contains('input') || el.classList.contains('input-plus')))) {\n return;\n }\n this._skillMenuOpened = false;\n };\n this._handleMouseMove = (e) => {\n if (this._isDragging) {\n let newLeft = this._dragStartLeft + (e.clientX - this._dragStartX);\n let newTop = this._dragStartTop + (e.clientY - this._dragStartY);\n const w = this._panelEl.offsetWidth;\n newLeft = Math.max(-w + 48, Math.min(newLeft, window.innerWidth - 48));\n newTop = Math.max(0, Math.min(newTop, window.innerHeight - 48));\n this._panelEl.style.left = newLeft + 'px';\n this._panelEl.style.top = newTop + 'px';\n }\n else if (this._isResizing) {\n const dx = e.clientX - this._dragStartX;\n const dy = e.clientY - this._dragStartY;\n const minW = 340;\n const minH = 380;\n const maxW = window.innerWidth * 0.9;\n const maxH = window.innerHeight - 72;\n let newW = this._resizeStartW;\n let newH = this._resizeStartH;\n let newLeft = this._dragStartLeft;\n let newTop = this._dragStartTop;\n if (this._resizeDir.includes('e')) {\n newW = Math.max(minW, Math.min(this._resizeStartW + dx, maxW));\n }\n if (this._resizeDir.includes('w')) {\n newW = Math.max(minW, Math.min(this._resizeStartW - dx, maxW));\n newLeft = this._dragStartLeft + (this._resizeStartW - newW);\n }\n if (this._resizeDir.includes('s')) {\n newH = Math.max(minH, Math.min(this._resizeStartH + dy, maxH));\n }\n if (this._resizeDir.includes('n')) {\n newH = Math.max(minH, Math.min(this._resizeStartH - dy, maxH));\n newTop = this._dragStartTop + (this._resizeStartH - newH);\n }\n newLeft = Math.max(0, newLeft);\n newTop = Math.max(0, newTop);\n this._panelEl.style.width = newW + 'px';\n this._panelEl.style.height = newH + 'px';\n this._panelEl.style.left = newLeft + 'px';\n this._panelEl.style.top = newTop + 'px';\n }\n };\n this._handleMouseUp = () => {\n if (this._isDragging) {\n this._isDragging = false;\n this._panelEl.classList.remove('panel--dragging');\n }\n if (this._isResizing) {\n this._isResizing = false;\n this._panelEl.classList.remove('panel--resizing');\n }\n if (this._overlay) {\n this._overlay.style.display = 'none';\n }\n document.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n this._saveState();\n };\n /**\n * Keyboard control for the confirmation prompt. Bound at the document so it\n * works even though the composer (where focus usually sits) is blocked while a\n * batch is pending: Left/Right move the highlight across Yes / Always allow /\n * No, Enter activates the highlighted one. No-op when nothing is pending or a\n * decision is already in flight.\n */\n this._handleDocumentKeydown = (e) => {\n if (!this._pendingActions.length || this._confirmationInFlight) {\n return;\n }\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n this._confirmationHighlighted = (this._confirmationHighlighted + 1) % CONFIRMATION_DECISIONS.length;\n return;\n }\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this._confirmationHighlighted =\n (this._confirmationHighlighted - 1 + CONFIRMATION_DECISIONS.length) % CONFIRMATION_DECISIONS.length;\n return;\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n const option = CONFIRMATION_DECISIONS[this._confirmationHighlighted];\n if (option) {\n this._handleConfirmationDecision(option.decision);\n }\n }\n };\n this._handleDrawerResizeMouseMove = (e) => {\n if (!this._isDrawerResizing) {\n return;\n }\n // Handle is on the drawer's left edge; dragging left (negative dx) widens it.\n const dx = e.clientX - this._drawerResizeStartX;\n const minW = 300;\n // Never let the chat column shrink below 300px — cap the drawer at the\n // container width minus that reserved chat width.\n const minChatWidth = 300;\n const maxW = Math.max(minW, this.offsetWidth - minChatWidth);\n this._drawerWidth = Math.max(minW, Math.min(this._drawerResizeStartW - dx, maxW));\n };\n this._handleDrawerResizeMouseUp = () => {\n this._isDrawerResizing = false;\n document.removeEventListener('mousemove', this._handleDrawerResizeMouseMove);\n document.removeEventListener('mouseup', this._handleDrawerResizeMouseUp);\n this._saveState();\n };\n }\n // --- Lifecycle ---\n connectedCallback() {\n super.connectedCallback();\n // Default to loading a conversation's messages when the consumer hasn't\n // provided their own `load`. With `conversationId` set we rebuild that\n // conversation; with none set the user wants a NEW conversation, so we start\n // blank (no resume — the first message creates one via `send`). Rows already\n // match KRChatbotMessage ({ type, content }); we only parse each row's\n // `conversationFileIDs` (a JSON array string of ids) into `conversationFiles`.\n if (!this.load) {\n this.load = () => {\n if (this.conversationId == null) {\n return Promise.resolve([]);\n }\n return KRHttp.fetch({ url: `/api/system/conversation/${this.conversationId}/messages` })\n .then((r) => r.json())\n .then((res) => Promise.all((res?.data || []).map((msg) => {\n // Persisted tool_use / tool_result rows — the message IS the row: keep\n // the type and parse content into `data`, the same {type, data} shape\n // the live stream pushes. The render reads data.* and pairs a result to\n // its use by data.toolUseId. No transform, so live and reload match.\n if (msg.type === 'tool_use' || msg.type === 'tool_result') {\n let data = {};\n try {\n data = JSON.parse(msg.content || '{}');\n }\n catch { /* malformed — render a bare line from what we have */ }\n return Promise.resolve({\n type: msg.type,\n content: '',\n data,\n });\n }\n // Persisted reasoning row — the DB stores the model's thinking as its own\n // row with the text in `content` and type \"reasoning\". Live, reasoning\n // instead arrives as REASONING_PART deltas accumulated onto an assistant\n // bubble's `reasoning` property, which is the ONLY shape the render shows\n // (via msg.reasoning). Map the DB row into that same shape — an assistant\n // bubble carrying the text in `reasoning` — so reloaded/reconciled\n // reasoning renders identically to live instead of vanishing.\n if (msg.type === 'reasoning') {\n return Promise.resolve({\n type: 'assistant',\n content: '',\n reasoning: msg.content || '',\n });\n }\n // A persisted approve/deny record — content is {outcome, tools:[...]}.\n // Keep the type, parse content into `data`; the render reads msg.data.*.\n if (msg.type === 'action_decision') {\n let data = {};\n try {\n data = JSON.parse(msg.content || '{}');\n }\n catch { /* malformed — render a bare line from what we have */ }\n return Promise.resolve({\n type: 'action_decision',\n content: '',\n data,\n });\n }\n // Resolve this message's `conversationFileIDs` (a JSON array string of\n // ids) into full file objects — each fetch response IS the\n // KRChatbotConversationFile (id + niceName + mimeType), and niceName\n // drives the previewer's file-type detection. A failed fetch drops\n // that file rather than rendering a broken thumbnail.\n let ids = [];\n try {\n ids = JSON.parse(msg.conversationFileIDs || '[]');\n }\n catch { /* no/invalid attachments — leave empty */ }\n if (!ids.length) {\n return Promise.resolve(msg);\n }\n return Promise.all(ids.map((id) => KRHttp.fetch({ url: `/api/system/conversationFile/${id}` })\n .then((r) => r.json())\n .then((meta) => meta?.data)\n .catch(() => null)))\n .then((files) => {\n msg.conversationFiles = files.filter((f) => f != null);\n return msg;\n });\n })));\n };\n }\n // Tab-scoped resume (floating only): a reload should redisplay the exact\n // conversation this tab was on, and a brand-new tab should reopen the user's\n // most-recent one. The pinned id lives in sessionStorage (per-tab — unlike\n // localStorage it isn't shared across tabs, so two tabs can sit on different\n // conversations). We resolve the id FIRST, then run the built-in load so it\n // rebuilds the right transcript. Skipped when the consumer owns targeting (an\n // explicit `conversation-id`) or in inline mode (embedded as a page — the host\n // route, not the tab, decides the conversation).\n let resolveConversationId = Promise.resolve();\n if (this.variant === 'floating' && this.conversationId == null) {\n const stored = Number(sessionStorage.getItem('kr-chatbot-conversation-id'));\n if (stored > 0) {\n this.conversationId = stored;\n // Fetch the conversation so the header shows its title on reload (the\n // transcript load doesn't carry it). Best-effort — the header falls back\n // to the default label if this fails.\n resolveConversationId = KRHttp.fetch({ url: `/api/system/conversation/${stored}` })\n .then((r) => r.json())\n .then((res) => {\n this._conversationTitle = res?.data?.title || '';\n })\n .catch(() => { });\n }\n else {\n // Fresh tab, nothing pinned yet — resume the user's most recent conversation\n // (404 when they have none, which leaves us blank for a new one).\n resolveConversationId = KRHttp.fetch({ url: '/api/system/conversation/last' })\n .then((r) => {\n if (!r.ok) {\n return;\n }\n return r.json().then((res) => {\n const id = res?.data?.conversationID;\n if (typeof id === 'number') {\n this.conversationId = id;\n this._conversationTitle = res?.data?.title || '';\n this._persistConversationId();\n }\n });\n })\n .catch(() => { });\n }\n }\n // `this.load` is always set by here (defaulted above when the consumer didn't\n // supply one); the `!` is because TS can't narrow the nullable property across\n // the promise boundary.\n resolveConversationId.then(() => this.load()).then((messages) => {\n if (messages && messages.length) {\n this.messages = messages;\n }\n // A turn may still be running server-side for this conversation (the page was\n // reloaded mid-turn, or opened on another device while a turn streams). After\n // the transcript loads, try to attach to that live turn: _reconnectStream hits\n // the read-only attach endpoint — 200 resumes streaming (locks the composer +\n // shows the typing indicator so the user knows the AI is still working), 204\n // means nothing is running (stays idle). Only meaningful with a pinned\n // conversation and the built-in stream (a custom `send` owns its own turns).\n if (this.conversationId && !this._isStreaming) {\n this._reconnectStream();\n }\n }).catch(() => { });\n // Fetch the framework config on load (debugTelemetryEnabled, v2ChatEnabled,\n // registryServer). debugTelemetryEnabled gates the debug affordances and is\n // known before any message.\n KRHttp.fetch({\n url: '/api/system/integration/aws/bedrock/aiFrameworkConfig',\n })\n .then((r) => r.json())\n .then((res) => {\n this._aiFrameworkConfig = res?.data || {};\n })\n .catch(() => { });\n // Inline mode fills its container and is always open — the floating widget's\n // toggle/drag/resize state doesn't apply, but the composer message and debug\n // drawer state (restored inside _restoreState) do.\n if (this.variant === 'inline') {\n this.opened = true;\n }\n this._restoreState();\n document.addEventListener('click', this._handleDocumentClick);\n // Drive the confirmation prompt from the keyboard even when focus isn't in the\n // (blocked) composer: Left/Right move the highlight, Enter activates it.\n document.addEventListener('keydown', this._handleDocumentKeydown);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n document.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n document.removeEventListener('click', this._handleDocumentClick);\n document.removeEventListener('keydown', this._handleDocumentKeydown);\n // Release the mic if the chatbot is torn down mid-dictation — otherwise the\n // recognizer keeps the browser's recording indicator lit with nothing to\n // transcribe into. abort() (not stop()) since the discarded text has nowhere to go.\n if (this._speechRecognition) {\n this._speechRecognition.abort();\n this._speechRecognition = null;\n this._isDictating = false;\n }\n // Release any object URLs still held by staged attachments.\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n }\n updated(changed) {\n if (changed.has('messages')) {\n if (!this._userHasScrolledUp && !this._isStreaming && this._messagesEl) {\n requestAnimationFrame(() => {\n if (this._messagesEl) {\n this._messagesEl.scrollTop = this._messagesEl.scrollHeight;\n }\n });\n }\n }\n // Streamed chunks mutate the message in place and call requestUpdate(), so\n // `changed` never has 'messages' mid-turn — run the follow on every update\n // instead. The user message stays pinned at the top (Gemini-style) until the\n // response grows past the bottom of the view; from then on the end stays in\n // view. Never scrolls to the empty runway below the content.\n if (this._isStreaming && this._followStream && this._messagesEl) {\n requestAnimationFrame(() => {\n const container = this._messagesEl;\n if (!container || !this._isStreaming || !this._followStream) {\n return;\n }\n const turnEls = container.querySelectorAll('.agent-turn');\n const turnEl = turnEls[turnEls.length - 1];\n const lastEl = turnEl?.lastElementChild;\n if (!lastEl) {\n return;\n }\n // Bottom edge of the turn's last rendered child, in the container's\n // scroll coordinates — the runway (min-height on the turn) sits below it.\n const contentBottom = lastEl.getBoundingClientRect().bottom\n - container.getBoundingClientRect().top\n + container.scrollTop\n + 24;\n const visibleBottom = container.scrollTop + container.clientHeight;\n if (contentBottom > visibleBottom) {\n container.scrollTop = Math.min(contentBottom - container.clientHeight, container.scrollHeight - container.clientHeight);\n }\n });\n }\n if (changed.has('opened') && this.opened && this._inputEl) {\n setTimeout(() => {\n if (this._inputEl) {\n this._inputEl.focus();\n }\n }, 200);\n }\n // Load context-aware action chips every time the panel opens on an empty conversation. Fires for\n // the floating variant on toggle-open and for the inline variant on its first render (which sets\n // `opened` true at connect). Only when empty — a resumed conversation shows its transcript, not chips.\n // The request-id guard inside handles a stale reply if the user closes/reopens quickly.\n if (changed.has('opened') && this.opened && this.messages.length === 0) {\n this._loadSuggestedActions();\n }\n // Position the fixed skill menu above the composer, following the krubble\n // select-field pattern (fixed element positioned from the trigger's rect).\n if (this._skillMenuOpened) {\n this._positionSkillMenu();\n }\n // Keep the keyboard-highlighted skill scrolled into view.\n if (changed.has('_skillHighlighted') && this._skillMenuOpened) {\n this._skillMenuEl\n ?.querySelector('.skill-menu__item--highlighted')\n ?.scrollIntoView({ block: 'nearest' });\n }\n }\n /** Anchor the fixed skill menu to the composer, opening upward above it. */\n _positionSkillMenu() {\n requestAnimationFrame(() => {\n if (!this._skillMenuEl || !this._inputWrapperEl) {\n return;\n }\n const inputRect = this._inputWrapperEl.getBoundingClientRect();\n this._skillMenuEl.style.left = inputRect.left + 'px';\n this._skillMenuEl.style.width = inputRect.width + 'px';\n // Bound the menu by the chat panel's own top edge so it stays within the\n // widget. In floating mode that keeps it inside the card; in inline mode the\n // panel top sits just below the app header/breadcrumb, so it stays clear of\n // those too. An 8px gap keeps it off both edges.\n const topLimit = this._panelEl.getBoundingClientRect().top + 8;\n const spaceAbove = inputRect.top - 8 - topLimit;\n this._skillMenuEl.style.maxHeight = spaceAbove + 'px';\n // Measure after the cap is applied so the upward anchor uses the real\n // height, then clamp the top edge to the panel bound.\n const menuRect = this._skillMenuEl.getBoundingClientRect();\n const top = Math.max(topLimit, inputRect.top - menuRect.height - 8);\n this._skillMenuEl.style.top = top + 'px';\n });\n }\n // --- Public methods ---\n /**\n * Stops the current stream without clearing the conversation.\n */\n stop() {\n this._handleStop();\n }\n /** Whether a turn is in flight — true from send until the stream ends. */\n isStreaming() {\n return this._isStreaming;\n }\n /** Open the chat panel. */\n open() {\n if (!this.opened) {\n this._handleToggle();\n }\n }\n /** Close the chat panel. */\n close() {\n if (this.opened) {\n this._handleToggle();\n }\n }\n /** Toggle the chat panel open/closed. */\n toggle() {\n this._handleToggle();\n }\n /**\n * Open the panel and send `payload.message` as if the user had typed it and pressed Enter.\n *\n * Lets a host app hand the assistant a predefined prompt (e.g. a \"Migrate\" button that\n * starts a skill for the current record). Goes through `_handleSubmit`, not `_send`, so\n * the streaming and pending-confirmation guards and the cancelable `message-submit`\n * event all apply exactly as they do for a typed message. Nothing is sent while a turn\n * is in flight; the message is dropped rather than queued.\n */\n prompt(payload) {\n this.open();\n this._inputValue = payload.message;\n this._handleSubmit();\n }\n // --- Private methods ---\n /**\n * Shows a full-viewport transparent overlay during drag/resize operations.\n *\n * This overlay solves a critical rendering issue when the chatbot is used inside\n * a page that contains iframes (e.g., the AI editor shell where the page content\n * is rendered in an iframe and the chatbot floats on top).\n *\n * Without the overlay, modifying the iframe's `pointer-events` style during drag\n * (to prevent it from swallowing mousemove events) causes Chrome to recalculate\n * compositing layers. This layer recalculation blocks the browser from repainting\n * the chatbot panel's style changes (width/height/position) even though they are\n * correctly applied to the DOM. The result is that the panel appears frozen while\n * the user drags, despite the inline styles updating on every mousemove.\n *\n * The overlay approach avoids this entirely: instead of touching the iframe's styles,\n * we place a transparent div (z-index 9999) above the iframe but below the chatbot\n * (z-index 10000). This div intercepts all mouse events that would otherwise hit the\n * iframe, without triggering any compositing layer changes on the iframe itself.\n */\n _showOverlay() {\n if (!this._overlay) {\n this._overlay = document.createElement('div');\n this._overlay.style.cssText = 'position:fixed; inset:0; z-index:9999; display:none;';\n document.body.appendChild(this._overlay);\n }\n this._overlay.style.display = 'block';\n }\n _handleHeaderMouseDown(e) {\n // Inline mode fills its parent — dragging the panel doesn't apply.\n if (this.variant === 'inline') {\n return;\n }\n // Ignore clicks on buttons inside the header\n if (e.target.closest('button')) {\n return;\n }\n if (!this._panelEl) {\n return;\n }\n this._isDragging = true;\n this._panelEl.classList.add('panel--dragging');\n this._showOverlay();\n const rect = this._panelEl.getBoundingClientRect();\n this._panelEl.style.left = rect.left + 'px';\n this._panelEl.style.top = rect.top + 'px';\n this._panelEl.style.right = 'auto';\n this._panelEl.style.bottom = 'auto';\n this._panelEl.style.position = 'fixed';\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n this._dragStartLeft = rect.left;\n this._dragStartTop = rect.top;\n e.preventDefault();\n document.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n }\n _handleResizeMouseDown(e) {\n // Inline mode fills its parent — resizing the panel doesn't apply.\n if (this.variant === 'inline') {\n return;\n }\n if (!this._panelEl) {\n return;\n }\n this._isResizing = true;\n this._resizeDir = e.currentTarget.dataset.dir || '';\n this._panelEl.classList.add('panel--resizing');\n this._showOverlay();\n const rect = this._panelEl.getBoundingClientRect();\n this._panelEl.style.left = rect.left + 'px';\n this._panelEl.style.top = rect.top + 'px';\n this._panelEl.style.right = 'auto';\n this._panelEl.style.bottom = 'auto';\n this._panelEl.style.position = 'fixed';\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n this._dragStartLeft = rect.left;\n this._dragStartTop = rect.top;\n this._resizeStartW = rect.width;\n this._resizeStartH = rect.height;\n e.preventDefault();\n e.stopPropagation();\n document.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n }\n _handleToggle() {\n this.opened = !this.opened;\n if (this.opened && this._panelEl) {\n this._applyStoredLayout();\n }\n this._saveState();\n }\n /**\n * Persist the pinned conversation id per-tab so a reload redisplays this exact\n * conversation. sessionStorage (not localStorage) is deliberate: it's scoped to\n * the tab, so two tabs can sit on different conversations without clobbering\n * each other. Only meaningful for the floating widget's built-in flow — inline\n * embeds and custom-`load` consumers own their own targeting.\n */\n _persistConversationId() {\n // Floating-only: inline embeds (and custom-`load` consumers) own their own\n // targeting and never resume from this key, so they must not write it either —\n // otherwise an inline chat sharing the page/origin would clobber the floating\n // widget's pinned id.\n if (this.variant !== 'floating') {\n return;\n }\n try {\n if (this.conversationId != null) {\n sessionStorage.setItem('kr-chatbot-conversation-id', String(this.conversationId));\n }\n else {\n sessionStorage.removeItem('kr-chatbot-conversation-id');\n }\n }\n catch { /* sessionStorage not available */ }\n }\n _saveState() {\n try {\n // `toolDetail` is a transient peek, not a saved view — persist only the two\n // real preference views so a reload never reopens a stale tool.\n let persistedDrawerView = this._drawerView;\n if (persistedDrawerView === 'toolDetail') {\n persistedDrawerView = 'settings';\n }\n const state = {\n opened: String(this.opened),\n message: this._inputValue,\n mode: this._mode,\n showTools: String(this._showTools),\n showToolInputs: String(this._showToolInputs),\n showConfirmationInput: String(this._showConfirmationInput),\n drawerOpen: String(this._drawerOpen),\n drawerView: persistedDrawerView,\n drawerWidth: String(this._drawerWidth),\n };\n if (this._panelEl) {\n const s = this._panelEl.style;\n if (s.left) {\n state.left = s.left;\n }\n if (s.top) {\n state.top = s.top;\n }\n if (s.width) {\n state.width = s.width;\n }\n if (s.height) {\n state.height = s.height;\n }\n if (s.position) {\n state.position = s.position;\n }\n }\n localStorage.setItem('kr-chatbot-state', JSON.stringify(state));\n }\n catch { /* localStorage not available */ }\n }\n _restoreState() {\n try {\n const raw = localStorage.getItem('kr-chatbot-state');\n if (!raw) {\n return;\n }\n const state = JSON.parse(raw);\n // Draft text and the debug drawer are persisted for all variants.\n // A lone `/` is dropped — it's the in-progress half of a menu interaction,\n // not a draft, and restoring it would revive a stale menu the user never\n // used. Anything with an actual command after the slash (`/code`, `/code do\n // the thing`) is a real draft and restores normally. Trimmed before testing\n // so a stray space around the slash doesn't defeat the check.\n if (typeof state.message === 'string' && state.message.trim() !== '/') {\n this._inputValue = state.message;\n }\n if (state.mode === 'NORMAL' || state.mode === 'EDIT' || state.mode === 'PLAN') {\n this._mode = state.mode;\n }\n this._showTools = state.showTools === 'true';\n this._showToolInputs = state.showToolInputs === 'true';\n this._showConfirmationInput = state.showConfirmationInput === 'true';\n this._drawerOpen = state.drawerOpen === 'true';\n if (state.drawerView === 'settings' || state.drawerView === 'debug' || state.drawerView === 'history') {\n this._drawerView = state.drawerView;\n // History's list isn't persisted (it can go stale); refetch it so a reload\n // that was on the conversations panel comes back to a populated list rather\n // than an empty one.\n if (state.drawerView === 'history') {\n this._loadConversations();\n }\n }\n const w = Number(state.drawerWidth);\n if (w >= 300) {\n this._drawerWidth = w;\n }\n // The floating widget's open/layout state doesn't apply to inline mode.\n if (this.variant !== 'inline' && state.opened === 'true') {\n this.opened = true;\n // Apply layout after first render\n this.updateComplete.then(() => this._applyStoredLayout());\n }\n }\n catch { /* localStorage not available */ }\n }\n _applyStoredLayout() {\n try {\n const raw = localStorage.getItem('kr-chatbot-state');\n if (!raw || !this._panelEl) {\n return;\n }\n const state = JSON.parse(raw);\n if (state.position) {\n this._panelEl.style.position = state.position;\n }\n if (state.left) {\n this._panelEl.style.left = state.left;\n }\n if (state.top) {\n this._panelEl.style.top = state.top;\n }\n if (state.width) {\n this._panelEl.style.width = state.width;\n }\n if (state.height) {\n this._panelEl.style.height = state.height;\n }\n }\n catch { /* localStorage not available */ }\n }\n _handleInputChange(e) {\n this._inputValue = e.target.value;\n this._saveState();\n // Auto-resize textarea\n const textarea = e.target;\n textarea.style.height = 'auto';\n textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px';\n // Open the skill menu while the message is a `/` command being typed (a\n // leading slash with no space yet). The text after the slash is the search\n // query, run server-side via `_searchInvocableSkills`.\n // (org skills + installed globals — everything invocable by /code)\n const slashMatch = this._inputValue.match(/^\\/(\\S*)$/);\n if (slashMatch) {\n this._skillMenuOpened = true;\n this._skillQuery = slashMatch[1];\n this._skillHighlighted = 0;\n this._searchInvocableSkills(this._skillQuery);\n }\n else {\n this._skillMenuOpened = false;\n }\n }\n _handleKeyDown(e) {\n // When the skill menu is open, arrow keys / Enter / Escape drive it. The top\n // actions (Attach Files, Attach Files for Reference, Browse All Skills, plus\n // the two debug test triggers when enabled) come first, then the filtered\n // skills — all one navigable list.\n if (this._skillMenuOpened) {\n const debugActions = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let actionCount = 3;\n if (debugActions) {\n actionCount = 5;\n }\n const count = actionCount + this._invocableSkills.length;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this._skillHighlighted = (this._skillHighlighted + 1) % count;\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n this._skillHighlighted = (this._skillHighlighted - 1 + count) % count;\n return;\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this._activateSkillMenuItem(this._skillHighlighted);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n this._skillMenuOpened = false;\n return;\n }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this._handleSubmit();\n }\n }\n /** Run the skill-menu item at the given flat index (actions first, then skills). */\n _activateSkillMenuItem(index) {\n const debugActions = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let actionCount = 3;\n if (debugActions) {\n actionCount = 5;\n }\n if (index === 0) {\n this._openFilePicker(true);\n return;\n }\n if (index === 1) {\n this._openFilePicker(false);\n return;\n }\n if (index === 2) {\n this._handleSkillBrowseOpen();\n return;\n }\n if (debugActions && index === 3) {\n this._skillMenuOpened = false;\n this._send({\n message: '/test-context-warning',\n conversationFiles: [],\n });\n return;\n }\n if (debugActions && index === 4) {\n this._skillMenuOpened = false;\n this._send({\n message: '/test-context-limit',\n conversationFiles: [],\n });\n return;\n }\n const skill = this._invocableSkills[index - actionCount];\n if (skill) {\n this._handleSkillSelect(skill);\n }\n }\n // --- Skills ---\n /**\n * Load the browse dialog's \"Your Org\" tab into `_orgSkills` from\n * `/conversation/localSkillList` — this instance's own active skills, already\n * role-filtered to what the caller may run and ranked by the server.\n *\n * Not the `aiskills` search endpoint: that requires a skill-authoring role\n * (`skillView`/`skillEdit`), so an ordinary chat user got a 403 and an empty\n * tab. This one only needs a logged-in employee. It also means the query\n * matching, active-only filter and \"exclude globally-published\" rule all live\n * server-side instead of being rebuilt as OpenSearch DSL here.\n *\n * EXCEPTION — on kodaris.com this list also carries that instance's own\n * globally-published skills (flagged `global: true`), because there is no\n * Kodaris tab there for them to appear on.\n *\n * Request-id guard drops responses that arrive out of order (kr-combo-box\n * `_fetch` pattern).\n */\n _searchOrgSkills(query) {\n this._orgSkillRequestId++;\n const requestId = this._orgSkillRequestId;\n KRHttp.fetch({\n url: '/api/system/conversation/localSkillList',\n method: 'POST',\n body: { query: query.trim() },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response superseded by a newer search.\n if (requestId !== this._orgSkillRequestId) {\n return;\n }\n this._orgSkills = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: skill search failed', error);\n });\n }\n /**\n * Load the skills for the `/` composer menu into `_invocableSkills` from\n * `/conversation/availableSkills` — this instance's own skills plus the installed\n * global ones, already merged, role-filtered and ranked by the server. That's the\n * same set the model sees via `list_skills`, so the menu can't offer a skill the\n * chat would then refuse.\n *\n * Not the `aiskills` endpoints the browse dialog's Org tab uses: those require a\n * skill-authoring role, which an ordinary chat user doesn't have.\n *\n * Request-id guard drops responses that arrive out of order (kr-combo-box `_fetch`\n * pattern).\n */\n _searchInvocableSkills(query) {\n this._invocableSkillRequestId++;\n const requestId = this._invocableSkillRequestId;\n KRHttp.fetch({\n url: '/api/system/conversation/availableSkills',\n method: 'POST',\n body: { query: query.trim() },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response superseded by a newer search.\n if (requestId !== this._invocableSkillRequestId) {\n return;\n }\n this._invocableSkills = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: invocable skill search failed', error);\n });\n }\n /**\n * Load the empty-state action chips from `/conversation/suggestedActions`, passing the user's\n * current page/selection context (captured live, same as a send). The server picks a few skills\n * the user can run that fit where they are and writes a label for each. Called every time the\n * panel opens on an empty conversation (per product decision — context can change between opens).\n *\n * AI-only, no fallback: any failure, or v2 chat being off (server returns `[]`), just leaves the\n * empty state with no chips. A request-id guard drops a response superseded by a newer open, so a\n * slow reply from a previous open can't land after the user has started typing.\n */\n _loadSuggestedActions() {\n this._suggestedActionRequestId++;\n const requestId = this._suggestedActionRequestId;\n const context = this._captureContext();\n KRHttp.fetch({\n url: '/api/system/conversation/suggestedActions',\n method: 'POST',\n body: {\n pageContext: context.pageContext,\n selectionContext: context.selectionContext,\n },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response from a prior open, and never overwrite chips once a conversation\n // has started (the user opened, the reply was slow, they typed and sent in the meantime).\n if (requestId !== this._suggestedActionRequestId || this.messages.length > 0) {\n return;\n }\n this._suggestedActions = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: suggested actions load failed', error);\n });\n }\n /**\n * Load the browse dialog's \"Kodaris\" tab into `_globalSkills` — the whole\n * published Kodaris catalog for discovery, installed or not, runnable by this\n * user or not. Each row carries `enabled` (installed here), `canEnable` (may\n * install it) and `canRun` (roles allow invoking it).\n *\n * Uses `/conversation/globalSkillList` rather than the `/aiskills/global/search`\n * twin, which requires a skill-authoring role an ordinary chat user doesn't have.\n *\n * Returns `[]` — not an error — when there's no reachable registry, and always\n * on kodaris.com, which IS the catalog source and so has no remote to pull. The\n * tab itself is hidden there (see `_renderSkillBrowse`).\n */\n _searchGlobalSkills(query) {\n this._globalSkillRequestId++;\n const requestId = this._globalSkillRequestId;\n KRHttp.fetch({\n url: '/api/system/conversation/globalSkillList',\n method: 'POST',\n body: { query: query.trim() },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response superseded by a newer search.\n if (requestId !== this._globalSkillRequestId) {\n return;\n }\n this._globalSkills = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: global skill search failed', error);\n });\n }\n /**\n * Enable or disable a global skill on this instance via\n * `/aiskills/global/{code}/enabled`, then reflect the server's result on the\n * matching card. Ignores clicks while a request for the same code is pending.\n */\n _handleGlobalSkillEnable(skill, e) {\n // The card body inserts the skill; the install button must not also do that.\n e.stopPropagation();\n // The button is shown to everyone so the catalog reads the same for all users,\n // but the enable endpoint requires administrator/superuser/skillEdit. Without\n // it, say who to ask instead of firing a request that comes back 403.\n if (!skill.canEnable) {\n KRSnackbar.show({\n title: 'Permission Required',\n message: 'You do not have permission to install skills. Please contact your site administrator.',\n type: 'error',\n });\n return;\n }\n if (this._globalSkillPending.has(skill.code)) {\n return;\n }\n // Drive the clicked button's own spinner (KRButton disables itself while\n // loading, so a second click can't fire until the request settles).\n const btn = e.currentTarget;\n this._globalSkillPending.add(skill.code);\n btn?.showLoading();\n KRHttp.fetch({\n url: `/api/system/opensearch/aiskills/global/${encodeURIComponent(skill.code)}/enabled`,\n method: 'POST',\n body: { enabled: !skill.enabled },\n })\n .then((r) => r.json())\n .then((res) => {\n // Reflect the server's returned flag on the card. The button label/style\n // re-render from skill.enabled; reset() clears the spinner to idle.\n skill.enabled = res?.data?.enabled;\n btn?.reset();\n this.requestUpdate();\n })\n .catch((error) => {\n console.error('kr-chatbot: global skill enable failed', error);\n btn?.showError('Error');\n })\n .finally(() => {\n this._globalSkillPending.delete(skill.code);\n });\n }\n /** The `+` button toggles the skill/attachment menu open (showing all skills). */\n _handlePlusClick() {\n if (this._skillMenuOpened) {\n this._skillMenuOpened = false;\n return;\n }\n this._skillQuery = '';\n this._skillHighlighted = 0;\n this._skillMenuOpened = true;\n this._searchInvocableSkills('');\n }\n _handleModeToggle() {\n this._modeMenuOpened = !this._modeMenuOpened;\n }\n _handleModeSelect(mode) {\n this._mode = mode;\n this._modeMenuOpened = false;\n // Persist the choice so it survives a reload, alongside the other composer\n // state. The server is still the source of truth on the next turn's\n // CONVERSATION_STATE, but this keeps the selector from flashing the default.\n this._saveState();\n }\n _handleShowToolsChange(e) {\n this._showTools = e.target.checked;\n this._saveState();\n }\n _handleShowToolInputsChange(e) {\n this._showToolInputs = e.target.checked;\n this._saveState();\n }\n _handleShowConfirmationInputChange(e) {\n this._showConfirmationInput = e.target.checked;\n this._saveState();\n }\n /**\n * The mic button toggles dictation. Speech is transcribed straight into the\n * composer as editable text — the user still reviews and presses send, so a\n * misheard word is fixable and nothing is sent by voice alone.\n *\n * Recognition runs entirely in the browser's Web Speech API (Chrome/Edge send\n * audio to Google's service, Safari to Apple's). No audio reaches Kodaris, and\n * there's no backend call or cost on our side.\n */\n _handleMicClick() {\n // Second click stops. `stop()` flushes the pending utterance as a final\n // result, so the last words aren't lost; onend clears the state.\n if (this._speechRecognition) {\n this._speechRecognition.stop();\n return;\n }\n // Prefixed in Chrome/Edge/Safari; the unprefixed name is checked first for\n // whenever they drop the prefix. The mic button isn't rendered without one of\n // these, so reaching here unsupported means a mid-session change — bail quietly.\n const SpeechRecognitionCtor = window.SpeechRecognition || window.webkitSpeechRecognition;\n if (!SpeechRecognitionCtor) {\n return;\n }\n const recognition = new SpeechRecognitionCtor();\n // Keep listening through natural pauses — a chat message is often several\n // sentences, and the default stops at the first one.\n recognition.continuous = true;\n // Show words as they're recognized rather than only at end of utterance.\n recognition.interimResults = true;\n // `lang` is deliberately left unset so the recognizer follows the page/OS\n // language, which is correct for every consumer of this component.\n // Dictation ADDS to whatever is already typed rather than replacing it, so\n // the user can type half a message and speak the rest. The separating space\n // is part of the base so the transcript never runs into the existing word.\n this._speechBaseValue = this._inputValue;\n if (this._speechBaseValue && !this._speechBaseValue.endsWith(' ')) {\n this._speechBaseValue += ' ';\n }\n this._speechFinalTranscript = '';\n recognition.onresult = (e) => {\n // Everything from resultIndex on is new since the last event: finalized\n // pieces move to _speechFinalTranscript permanently, while non-final ones\n // are rebuilt each event because the browser revises its guess as it hears\n // more. Rebuilding the whole value (base + final + interim) is what keeps\n // those revisions from stacking up as duplicated text.\n let interim = '';\n for (let i = e.resultIndex; i < e.results.length; i++) {\n if (e.results[i].isFinal) {\n this._speechFinalTranscript += e.results[i][0].transcript;\n }\n else {\n interim += e.results[i][0].transcript;\n }\n }\n this._inputValue = this._speechBaseValue + this._speechFinalTranscript + interim;\n this._saveState();\n // Grow the textarea as dictated text wraps — the same clamp the typing path\n // uses, since @input doesn't fire for programmatic value changes.\n if (this._inputEl) {\n this._inputEl.style.height = 'auto';\n this._inputEl.style.height = Math.min(this._inputEl.scrollHeight, 120) + 'px';\n }\n };\n recognition.onerror = (e) => {\n // Denied mic permission is the one error worth explaining — the user has to\n // fix it in browser settings, and the button would otherwise look broken.\n if (e.error === 'not-allowed' || e.error === 'service-not-allowed') {\n this._error = 'Microphone access is blocked. Allow it in your browser settings to use voice input.';\n return;\n }\n // `no-speech` (silence) and `aborted` (user stopped) are normal; anything\n // else is a transient service hiccup. onend still runs, so the mic resets.\n };\n // Fires on stop(), on error, and when the browser ends recognition on its own\n // (e.g. a long silence) — the single place the live state is torn down.\n recognition.onend = () => {\n this._speechRecognition = null;\n this._isDictating = false;\n };\n // start() is what triggers the browser's mic permission prompt.\n this._speechRecognition = recognition;\n this._isDictating = true;\n this._error = '';\n recognition.start();\n this._inputEl?.focus();\n }\n /**\n /** Insert `/code ` into the composer and focus it, ready for the message. */\n _handleSkillSelect(skill) {\n // The user's roles don't allow this skill — inserting /code would just fail in the\n // chat. Name the roles that would grant it, so the user knows what to ask for and\n // whoever grants it knows what to give.\n if (skill.canRun === false) {\n let message = `You do not have access to \"${skill.name}\". Ask your site administrator to grant it.`;\n if (skill.allowedRoles?.length) {\n message = `\"${skill.name}\" requires the ${skill.allowedRoles.join(' or ')} role. Ask your site administrator to grant it.`;\n }\n KRSnackbar.show({\n title: 'Access Required',\n message: message,\n type: 'error',\n });\n return;\n }\n // A global skill nobody has installed here yet isn't runnable either — point at the\n // Install button rather than appearing to ignore the click. Local skills carry no\n // install state, so this only applies to global ones.\n if (skill.global && !skill.enabled) {\n KRSnackbar.show({\n title: 'Not Installed',\n message: `\"${skill.name}\" has to be installed on this site before you can use it — use the Install button on the card.`,\n type: 'info',\n });\n return;\n }\n this._inputValue = `/${skill.code} `;\n this._saveState();\n this._skillMenuOpened = false;\n this._skillBrowseOpened = false;\n this._inputEl?.focus();\n }\n /** Activate a skill card via keyboard (Enter/Space), since it's a div role=button. */\n _handleSkillCardKeydown(e, skill) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._handleSkillSelect(skill);\n }\n }\n /**\n * Click an empty-state suggestion chip: prefill `/code ` into the composer, same as picking the\n * skill from the `/` menu, and focus so the user can add details before sending. No permission\n * guards here (unlike `_handleSkillSelect`) — a suggested action's code always comes from the\n * server's role-filtered runnable set, so it's already known to be invokable by this user.\n */\n _handleSuggestedActionClick(action) {\n this._inputValue = `/${action.code} `;\n this._saveState();\n this._inputEl?.focus();\n }\n /** Copy a message's text to the clipboard and briefly flash \"Copied\". */\n _handleCopyMessage(content, index) {\n navigator.clipboard.writeText(content).then(() => {\n this._copiedIndex = index;\n setTimeout(() => {\n if (this._copiedIndex === index) {\n this._copiedIndex = -1;\n }\n }, 2000);\n }).catch(() => { });\n }\n _handleSkillBrowseOpen() {\n this._skillMenuOpened = false;\n this._skillBrowseQuery = '';\n this._skillBrowseOpened = true;\n // Fill both tabs up front so switching between them is instant, not stale.\n // The Kodaris tab isn't rendered on the registry server, so skip its fetch there.\n this._searchOrgSkills('');\n if (this._aiFrameworkConfig.registryServer !== true) {\n this._searchGlobalSkills('');\n }\n }\n _handleSkillBrowseClose() {\n this._skillBrowseOpened = false;\n }\n _handleSkillBrowseSearch(e) {\n this._skillBrowseQuery = e.target.value;\n // Filter both catalogs so whichever tab the user switches to is already current.\n this._searchOrgSkills(this._skillBrowseQuery);\n if (this._aiFrameworkConfig.registryServer !== true) {\n this._searchGlobalSkills(this._skillBrowseQuery);\n }\n }\n _handleSkillBrowseTabChange(e) {\n // Both buffers are kept current by open/search, so switching just swaps which\n // one is shown — no re-search needed.\n this._skillBrowseSource = e.detail.activeTabId;\n }\n // --- Attachments ---\n /**\n * Open the OS file picker. `aiAnalyze` records which attach action was used so\n * the change handler stages the picked files in the right mode: true for\n * \"Attach Files\" (the model reads them), false for \"Attach Files for Reference\"\n * (attached for a tool to act on — the model is told about them but not asked\n * to read them). Chosen once at the picker, so selecting 30 files never means\n * toggling 30 chips.\n */\n _openFilePicker(aiAnalyze = true) {\n // Close the skill/attachment menu — opening the OS file picker is the end of\n // the menu interaction, and the picker is a separate window so the menu would\n // otherwise linger open behind it (and after a file is chosen).\n this._skillMenuOpened = false;\n // A lone `/` was only the means of reaching this action, so it shouldn't be\n // left behind in the composer once the picker opens. Nothing else is touched:\n // a real command (`/code`) stays because `/code` plus an attachment is a valid\n // invocation, and the plus button reaches this same method with an arbitrary\n // draft in the composer, which must survive.\n if (this._inputValue.trim() === '/') {\n this._inputValue = '';\n this._saveState();\n }\n this._pendingAttachAnalyze = aiAnalyze;\n this._fileInputEl?.click();\n }\n _handleFileInputChange(e) {\n const input = e.target;\n if (input.files) {\n this._addFiles(input.files, this._pendingAttachAnalyze);\n }\n // Reset so picking the same file again re-fires change.\n input.value = '';\n }\n _handlePaste(e) {\n const items = e.clipboardData?.items;\n if (!items) {\n return;\n }\n const files = [];\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'file') {\n const file = items[i].getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n if (files.length) {\n e.preventDefault();\n this._addFiles(files);\n }\n }\n _handleDragEnter(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n e.preventDefault();\n this._dragDepth++;\n this._isDraggingFile = true;\n }\n _handleDragOver(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n // Required so the drop event fires.\n e.preventDefault();\n }\n _handleDragLeave(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n this._dragDepth--;\n if (this._dragDepth <= 0) {\n this._dragDepth = 0;\n this._isDraggingFile = false;\n }\n }\n _handleDrop(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n e.preventDefault();\n this._dragDepth = 0;\n this._isDraggingFile = false;\n if (e.dataTransfer?.files) {\n this._addFiles(e.dataTransfer.files);\n }\n }\n _hasFiles(e) {\n return Array.from(e.dataTransfer?.types || []).includes('Files');\n }\n /** Lower-cased extension of a filename (without the dot), or '' if none. */\n _getFileExtension(name) {\n const dot = name.lastIndexOf('.');\n if (dot < 0) {\n return '';\n }\n return name.slice(dot + 1).toLowerCase();\n }\n /**\n * Stage a set of files in the composer (held locally until send). `aiAnalyze`\n * comes from which attach action was used — true for \"Attach Files\" (the model\n * reads them), false for \"Attach Files for Reference\" (tool-only, not read).\n * Drag-and-drop and paste default to analyze.\n */\n _addFiles(fileList, aiAnalyze = true) {\n // Only accept what the picker's `accept` filter allows (extension-based, so a\n // drag/paste can't sneak in a type the picker itself wouldn't offer).\n const files = Array.from(fileList).filter((f) => ACCEPTED_FILE_EXTENSIONS.includes(this._getFileExtension(f.name)));\n if (!files.length) {\n return;\n }\n files.forEach((file) => {\n // Only images get a local preview thumbnail; documents (and videos, which are\n // tiles too) render an icon. Prefer the File's MIME, falling back to the\n // extension when it's absent.\n let previewUrl;\n if (file.type.startsWith('image/') || IMAGE_EXTENSIONS.includes(this._getFileExtension(file.name))) {\n previewUrl = URL.createObjectURL(file);\n }\n const pending = {\n localId: 'att-' + this._pendingSeq++,\n file,\n name: file.name,\n mimeType: file.type,\n previewUrl,\n aiAnalyze,\n };\n this._pendingConversationFiles = [...this._pendingConversationFiles, pending];\n });\n }\n _handlePendingRemove(localId) {\n const target = this._pendingConversationFiles.find((p) => p.localId === localId);\n if (target?.previewUrl) {\n URL.revokeObjectURL(target.previewUrl);\n }\n this._pendingConversationFiles = this._pendingConversationFiles.filter((p) => p.localId !== localId);\n }\n _clearPending() {\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n this._pendingConversationFiles = [];\n }\n /** Open the shared full-screen previewer for a message attachment (image or video). */\n _handleFileOpen(file) {\n // Use the local preview if the upload hasn't finished yet; otherwise the\n // backend view URL (prefixed with the base URL — a raw fetch of a relative\n // path would hit the page origin, e.g. the dev server, not the backend).\n // The previewer picks image vs video playback off the name's extension, so\n // niceName has to carry it — hence the generic fallback keeps no extension\n // only when there's no name at all.\n const src = file.previewUrl\n || `${KRHttp.getBaseUrl()}/api/system/conversationFile/${file.conversationFileID}/view`;\n const preview = KRFilePreview.open({\n src,\n name: file.niceName || 'file',\n });\n // The previewer's download button only fires a `download` event — the\n // consumer performs the actual download. Hit the view endpoint with\n // `?download=true` (Content-Disposition: attachment) in a new tab.\n preview.addEventListener('download', () => {\n window.open(`${KRHttp.getBaseUrl()}/api/system/conversationFile/${file.conversationFileID}/view?download=true`, '_blank');\n });\n }\n _handleSubmit() {\n if (this._isStreaming) {\n return;\n }\n // A guarded-tool batch is awaiting a decision. The turn lock released with\n // its finished:true, but the server rejects a normal chat message with\n // awaitingConfirmation until it's resolved — so the composer stays blocked\n // and the approve/deny prompt owns the next call.\n if (this._pendingActions.length) {\n return;\n }\n const messageText = this._inputValue.trim();\n const pending = this._pendingConversationFiles;\n // Allow sending an image with no text, but require at least one of them.\n if (!messageText && !pending.length) {\n return;\n }\n // The files sent to the backend, each paired with its analyze flag. Sent\n // files are shown once the conversation reloads and they come back as stored\n // conversation files; the just-sent message itself carries text only.\n const conversationFiles = pending.map((p) => ({\n file: p.file,\n aiAnalyze: p.aiAnalyze,\n }));\n const submitEvent = new CustomEvent('message-submit', {\n detail: {\n message: messageText,\n conversationFiles,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(submitEvent);\n if (submitEvent.defaultPrevented) {\n return;\n }\n this._send({\n message: messageText,\n conversationFiles\n });\n }\n /**\n * Append the user message and stream the response. Split out of `_handleSubmit`\n * so debug test triggers can send a specific message without going through the\n * composer input. `_handleSubmit` owns reading/validating the composer and\n * firing the cancelable `message-submit` event; this owns the send + stream.\n */\n _send(params) {\n const userMessage = {\n type: 'user',\n content: params.message,\n };\n // Attach the staged files' local previews to the message so its thumbnails\n // show INSTANTLY, without waiting on the upload. Each carries a temporary\n // previewUrl (images only; documents render an icon from mimeType) and\n // conversationFileID -1 as a placeholder; the built-in send swaps these for\n // the real server files once the upload returns.\n if (this._pendingConversationFiles.length) {\n userMessage.conversationFiles = this._pendingConversationFiles.map((p) => ({\n conversationFileID: -1,\n niceName: p.name,\n mimeType: p.mimeType,\n aiAnalyze: p.aiAnalyze,\n previewUrl: p.previewUrl,\n }));\n }\n // The message is on its way, so stop the mic if it's still live — otherwise\n // it would keep transcribing into the now-cleared composer. abort() rather\n // than stop() because a trailing pending utterance belongs to the message\n // just sent; flushing it would drop stray words into the next one.\n if (this._speechRecognition) {\n this._speechRecognition.abort();\n }\n this.messages = [...this.messages, userMessage];\n this._inputValue = '';\n // The conversation has started — drop the empty-state chips so they don't linger above the\n // transcript. A newer suggestedActions reply is also ignored now (its guard checks messages.length).\n this._suggestedActions = [];\n this._saveState();\n this._error = '';\n this._userHasScrolledUp = false;\n this._followStream = true;\n // Clear the composer, but DON'T revoke the preview object URLs — the sent\n // message now renders them until the upload's real files replace them.\n this._pendingConversationFiles = [];\n // Reset textarea height\n if (this._inputEl) {\n this._inputEl.style.height = 'auto';\n }\n // Add empty assistant message to stream into\n this.messages = [...this.messages, {\n type: 'assistant',\n content: '',\n }];\n this._isStreaming = true;\n // Fresh turn: not yet finished, no reconnects used. These gate the drop-vs-done\n // decision in _readStreamChunk when the stream closes.\n this._turnFinishedCleanly = false;\n this._reconnectAttempts = 0;\n // Scroll user's message to the top (Gemini-style). The runway (min-height =\n // viewport) goes on the agent-turn WRAPPER, not an individual message — the\n // whole turn (reasoning, tool lines, text, decision) streams inside that one\n // element, so nothing strands below it. Enough scroll room below the user\n // message to push it to the top.\n this.updateComplete.then(() => {\n if (!this._messagesEl) {\n return;\n }\n // Clear runway from previous turns.\n this._messagesEl.querySelectorAll('.agent-turn').forEach((el) => {\n el.style.minHeight = '';\n });\n const userEls = this._messagesEl.querySelectorAll('.message--user');\n const userMsgEl = userEls[userEls.length - 1];\n const turnEls = this._messagesEl.querySelectorAll('.agent-turn');\n const turnEl = turnEls[turnEls.length - 1];\n if (turnEl) {\n turnEl.style.minHeight = this._messagesEl.clientHeight + 'px';\n }\n if (userMsgEl) {\n this._messagesEl.scrollTop = userMsgEl.offsetTop - this._messagesEl.offsetTop - 24;\n }\n });\n // Default to streaming from the Kodaris Bedrock conversation endpoints when\n // the consumer hasn't provided their own `send`.\n if (!this.send) {\n this.send = (params) => {\n // Rail-3 confirmation decision: resolve a paused guarded-tool batch by\n // hitting the SAME streaming endpoint with `confirmation` set. There's no\n // userText/files on this path (the server ignores message text here), and\n // the conversation is always already pinned (a batch can't pause before\n // the conversation exists), so no upload and no createNew.\n if (params.confirmation) {\n return KRHttp.fetch({\n url: '/api/system/integration/aws/bedrock/stream/invokeModelForConversationWithState',\n method: 'POST',\n headers: { Accept: 'text/event-stream' },\n body: {\n confirmation: params.confirmation,\n conversationID: this.conversationId,\n },\n });\n }\n // Images are upload-first: each file is stored as a conversation file\n // (type LIBRARY — the format lives in mimeType), then the resulting\n // conversationFileIDs are attached to the message via `fileIds` on the\n // normal JSON stream call. There is no multipart chat endpoint. With no\n // images the upload resolves to an empty list immediately; a failed\n // upload is dropped so an undefined id never reaches `fileIds`.\n let uploaded = Promise.resolve([]);\n if (params.conversationFiles.length) {\n uploaded = Promise.all(params.conversationFiles.map(({ file, aiAnalyze }) => {\n const form = new FormData();\n form.append('file', file);\n form.append('type', 'LIBRARY');\n form.append('niceName', file.name);\n // Reference-only files (from \"Attach Files for Reference\") aren't read\n // by the model — the endpoint defaults aiAnalyze=true, so only send\n // the flag when it's false.\n if (!aiAnalyze) {\n form.append('aiAnalyze', 'false');\n }\n return KRHttp.fetch({\n url: '/api/system/conversationFile/upload',\n method: 'POST',\n body: form,\n })\n .then((r) => r.json())\n // Keep the whole file DTO the upload returns (id + niceName +\n // mimeType + …), not just the id — it's attached to the sent message\n // below so the attachment shows immediately.\n .then((res) => res.data);\n }));\n }\n return uploaded.then((files) => {\n // Replace the just-sent user message's local previews with the real\n // uploaded files (backed by the stored file's view URL). The last user\n // message is the one _send appended before the trailing empty assistant\n // message; revoke its now-defunct preview object URLs first.\n if (files.length) {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].type === 'user') {\n (this.messages[i].conversationFiles || []).forEach((f) => {\n if (f.previewUrl) {\n URL.revokeObjectURL(f.previewUrl);\n }\n });\n this.messages[i].conversationFiles = files;\n this.requestUpdate();\n break;\n }\n }\n }\n // Conversation targeting: continue `conversationId` when set, else\n // start a fresh conversation (createNew) for this turn. The pin below\n // means createNew only fires on the very first untargeted turn.\n const body = {\n userText: params.message,\n fileIds: files.map((f) => f.conversationFileID),\n // Posture for guarded tools this turn (Ask / Auto / Plan). The server\n // validates and persists it, and only re-sets it when it changes.\n mode: this._mode,\n };\n // Ground the model in where the user is and what they've highlighted.\n // Only sent when present so an empty selection / failed capture doesn't\n // add noise to the request.\n if (params.pageContext) {\n body.pageContext = params.pageContext;\n }\n if (params.selectionContext) {\n body.selectionContext = params.selectionContext;\n }\n if (this.conversationId != null) {\n body.conversationID = this.conversationId;\n }\n else {\n body.createNew = true;\n }\n return KRHttp.fetch({\n url: '/api/system/integration/aws/bedrock/stream/invokeModelForConversationWithState',\n method: 'POST',\n headers: { Accept: 'text/event-stream' },\n body,\n }).then((response) => {\n // Pin the session to the conversation this turn used. The stream\n // doesn't echo the resolved id, so when we let the server create one\n // (no conversationId set) we resolve it via `/last` and keep it, so\n // subsequent turns continue this conversation instead of each sending\n // createNew and spawning a new one. Best-effort, fire-and-forget: a\n // failure leaves it unpinned and the next turn resolves server-side.\n if (this.conversationId == null) {\n KRHttp.fetch({ url: '/api/system/conversation/last' })\n .then((r) => r.json())\n .then((res) => {\n const conversation = res?.data;\n const id = conversation?.conversationID;\n if (typeof id === 'number') {\n this.conversationId = id;\n // Pin it to this tab so a reload redisplays this new conversation.\n this._persistConversationId();\n // Announce the newly-created conversation so consumers can react\n // (e.g. update the route from /chat/new to /chat/{id}). The full\n // conversation object is passed, not just the id, so consumers\n // have the title/timestamps too.\n this.dispatchEvent(new CustomEvent('conversation-created', {\n detail: { conversation },\n bubbles: true,\n composed: true,\n }));\n }\n })\n .catch(() => { });\n }\n return response;\n });\n });\n };\n }\n // Capture where the user is and what they've highlighted at send time (not\n // earlier — selection is transient and the route may have changed since the\n // panel opened), so every turn grounds the model in the user's current spot.\n const context = this._captureContext();\n this.send({\n message: params.message,\n messages: this.messages.slice(0, -1),\n conversationFiles: params.conversationFiles,\n pageContext: context.pageContext,\n selectionContext: context.selectionContext,\n }).then((response) => {\n if (!response.ok) {\n this._handleStreamError('Request failed: ' + response.status);\n return;\n }\n if (!response.body) {\n this._handleStreamError('No response body');\n return;\n }\n this._reader = response.body.getReader();\n this._decoder = new TextDecoder();\n this._buffer = '';\n this._readStreamChunk();\n }).catch((err) => {\n if (err.name !== 'AbortError') {\n this._handleStreamError(err.message);\n }\n });\n }\n /**\n * Resolve the paused guarded-tool batch (Rail 3). Hits the SAME streaming\n * endpoint as a normal turn but with a `confirmation` value instead of a\n * message; the server runs (approve/approveAlways) or denies (reject) the batch\n * and continues the turn, streaming the outcome into a fresh assistant bubble.\n *\n * The decision uses the same `send` callback so a custom `send` can own its own\n * targeting — it just receives `confirmation` set and no message.\n */\n _handleConfirmationDecision(decision) {\n if (this._confirmationInFlight) {\n return;\n }\n this._confirmationInFlight = true;\n this._error = '';\n // The decision line is authored by the server (single source of truth): it\n // persists an `action_decision` row AND streams an `ACTION_DECISION` event\n // back. We keep the prompt in place — the clicked button shows a loading\n // spinner — until that event arrives, which is our ack that the server\n // accepted the decision. The event handler then drops the prompt, appends the\n // decision line, and the follow-up turn streams into a new assistant bubble.\n const btn = this._messagesEl?.querySelector(`.confirmation__btn[data-decision=\"${decision}\"]`);\n btn?.showLoading();\n this._isStreaming = true;\n // Fresh turn (confirmation decision runs a model turn too): reset the\n // drop-vs-done gates used by _readStreamChunk.\n this._turnFinishedCleanly = false;\n this._reconnectAttempts = 0;\n this._userHasScrolledUp = false;\n this._followStream = true;\n this.send({\n message: '',\n messages: this.messages,\n conversationFiles: [],\n pageContext: '',\n selectionContext: '',\n confirmation: decision,\n }).then((response) => {\n // Leave _confirmationInFlight true — the buttons stay loading until the\n // streamed ACTION_DECISION event resolves the prompt. Only clear it on an\n // error path, where no such event will arrive.\n if (!response.ok) {\n this._confirmationInFlight = false;\n btn?.reset();\n this._handleStreamError('Request failed: ' + response.status);\n return;\n }\n if (!response.body) {\n this._confirmationInFlight = false;\n btn?.reset();\n this._handleStreamError('No response body');\n return;\n }\n this._reader = response.body.getReader();\n this._decoder = new TextDecoder();\n this._buffer = '';\n this._readStreamChunk();\n }).catch((err) => {\n this._confirmationInFlight = false;\n btn?.reset();\n if (err.name !== 'AbortError') {\n this._handleStreamError(err.message);\n }\n });\n }\n /**\n * Capture ambient \"where is the user / what are they looking at\" context at\n * send time, so the AI is grounded without the host passing anything in.\n *\n * Two universal sources that exist on every page the chatbot mounts in:\n * - `pageContext` — the location (full url, which already carries the path and\n * query) and title, plus, when the page renders the server-side\n * `#kodaris-page` JSON island (storefront content pages do), its parsed\n * contents (page name/type/ids). A page without the island still yields url\n * + title, so context is never empty on a real page.\n * - `selectionContext` — the text the user currently has highlighted, read\n * live here because a selection is transient (it may be gone a moment later).\n *\n * Both are returned as strings because that's what the backend `ModelForText`\n * fields (`pageContext` / `selectionContext`) accept. Capture is best-effort:\n * any failure yields an empty string for that field rather than blocking send.\n */\n _captureContext() {\n let pageContext = '';\n try {\n const page = {\n url: window.location.href,\n title: document.title,\n };\n // Structured page context is opt-in by convention: a page that renders the\n // `#kodaris-page` island gets its name/type/ids folded in for free. The\n // island's text is JSON; a malformed/absent island just leaves it out.\n const island = document.getElementById('kodaris-page');\n if (island && island.textContent) {\n try {\n page.page = JSON.parse(island.textContent);\n }\n catch { /* island present but not valid JSON — location context still stands */ }\n }\n pageContext = JSON.stringify(page);\n }\n catch { /* leave pageContext empty — never block a send on context capture */ }\n let selectionContext = '';\n try {\n const selection = window.getSelection();\n if (selection) {\n selectionContext = selection.toString().trim();\n }\n }\n catch { /* leave selectionContext empty */ }\n return {\n pageContext,\n selectionContext,\n };\n }\n _handleStop() {\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n this._isStreaming = false;\n }\n _handleMessagesScroll(e) {\n const container = e.target;\n const distanceFromBottom = container.scrollHeight - container.scrollTop - container.clientHeight;\n if (distanceFromBottom > 50) {\n this._userHasScrolledUp = true;\n }\n else {\n this._userHasScrolledUp = false;\n // Back at the bottom mid-turn: resume following the stream end.\n if (this._isStreaming) {\n this._followStream = true;\n }\n }\n }\n /**\n * User-driven scroll intent while a response streams. Scroll events alone can't\n * tell the user apart from our own follow-scroll (and from scrollTop clamping\n * when the runway clears), so listen for the gestures instead: a wheel/trackpad\n * move up, any touch drag, or a pointer down on the scrollbar track. Any of\n * these stops the follow; scrolling back to the bottom restores it.\n */\n _handleMessagesWheel(e) {\n if (this._isStreaming && e.deltaY < 0) {\n this._followStream = false;\n }\n }\n _handleMessagesTouchMove() {\n if (this._isStreaming) {\n this._followStream = false;\n }\n }\n _handleMessagesPointerDown(e) {\n const container = e.currentTarget;\n if (this._isStreaming && e.offsetX >= container.clientWidth) {\n this._followStream = false;\n }\n }\n _handleErrorDismiss() {\n this._error = '';\n }\n _handleContextWarningDismiss() {\n this._contextWarning = '';\n }\n /**\n * A header button either opens the drawer to its view, switches the view if the\n * drawer is already open on the other one, or closes the drawer if it's already\n * showing this view. `_drawerView` is left intact on close so the content stays\n * visible while the drawer slides shut.\n */\n _toggleDrawer(view) {\n if (this._drawerOpen && this._drawerView === view) {\n this._drawerOpen = false;\n }\n else {\n this._drawerOpen = true;\n this._drawerView = view;\n // Opening the history view refetches the list so a just-created or renamed\n // conversation shows without a reload.\n if (view === 'history') {\n this._loadConversations();\n }\n }\n this._saveState();\n }\n /**\n * Fetch the user's previous conversations for the history list, most-recently\n * modified first. Ownership is enforced server-side (the endpoint scopes to the\n * current administrator), so we only filter to active ones.\n */\n _loadConversations() {\n this._conversationsLoading = true;\n KRHttp.fetch({\n url: '/api/system/conversation/list',\n method: 'POST',\n body: {\n page: 0,\n size: 50,\n sortBy: 'lastModified',\n sortDirection: 'desc',\n filterFields: [{\n name: 'active',\n operation: 'IS',\n value: 'true',\n }],\n },\n })\n .then((r) => r.json())\n .then((res) => {\n this._conversations = res?.data?.content || [];\n })\n .catch(() => {\n this._conversations = [];\n })\n .then(() => {\n this._conversationsLoading = false;\n });\n }\n /**\n * Switch the floating widget to a previously-created conversation (clicked in the\n * history list): stop any live turn, reset the transient turn/context state, pin\n * the new id (persisted per-tab so a reload stays here), then rebuild its\n * transcript via the built-in `load`. The drawer closes so the user lands back\n * in the conversation.\n */\n _handleSwitchConversation(conversationID) {\n if (conversationID === this.conversationId) {\n this._handleCloseDrawer();\n return;\n }\n this._handleStop();\n this.conversationId = conversationID;\n // Adopt the picked conversation's title for the header (empty for an untitled\n // one, so the header falls back to the default label).\n this._conversationTitle = this._conversations.find((c) => c.conversationID === conversationID)?.title || '';\n this._persistConversationId();\n // Clear the transient, per-conversation state so it doesn't bleed into the one\n // we're switching to — pending confirmations, context banners, errors, the\n // reconnect counter, and staged composer files (the transcript is loaded below).\n this._pendingActions = [];\n this._inlineConfirm = true;\n this._contextWarning = '';\n this._contextLimitReached = false;\n this._contextLimitMessage = '';\n this._error = '';\n this._reconnectAttempts = 0;\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n this._pendingConversationFiles = [];\n this._drawerOpen = false;\n this._saveState();\n if (this.load) {\n this.load().then((messages) => {\n this.messages = messages || [];\n // A turn may still be streaming server-side for the conversation we just\n // opened (started in another tab/device) — attach to it if so.\n if (this.conversationId && !this._isStreaming) {\n this._reconnectStream();\n }\n }).catch(() => { });\n }\n }\n /**\n * Start a brand-new conversation (clicked in the history list): unpin the id (the\n * next turn sends `createNew` and the resolved id re-pins), clear the transcript\n * and transient state, and close the drawer back to an empty composer.\n */\n _handleNewConversation() {\n this._handleStop();\n this.conversationId = null;\n // New conversation has no title yet — the header shows the default label until\n // the server generates one at the end of the first turn.\n this._conversationTitle = '';\n this._persistConversationId();\n this.messages = [];\n // Clear the transient, per-conversation state so it doesn't bleed into the new\n // conversation — pending confirmations, context banners, errors, the reconnect\n // counter, and staged composer files.\n this._pendingActions = [];\n this._inlineConfirm = true;\n this._contextWarning = '';\n this._contextLimitReached = false;\n this._contextLimitMessage = '';\n this._error = '';\n this._reconnectAttempts = 0;\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n this._pendingConversationFiles = [];\n this._drawerOpen = false;\n this._saveState();\n }\n /** Close the drawer. `_drawerView` is left intact so its content stays visible\n * while the drawer slides shut. */\n _handleCloseDrawer() {\n this._drawerOpen = false;\n this._saveState();\n }\n /**\n * Open the drawer to a single tool call's full input/output. Called when the\n * user clicks a tool-activity line in the transcript. Independent of the\n * `_showToolInputs` setting — this is the on-demand \"show me everything for\n * THIS call\" peek, so it works even when inline inputs are hidden. `result` is\n * the paired `tool_result` message data (may be absent if the tool hasn't\n * returned yet).\n */\n _openToolDetail(use) {\n // Pair the tool_use to the tool_result that immediately follows it (matched by\n // toolUseId) — the same pairing the transcript render uses for the ⎿ preview.\n const next = this.messages[this.messages.indexOf(use) + 1];\n this._toolDetail = {\n use,\n result: null,\n };\n if (next?.type === 'tool_result' && next.data?.toolUseId === use.data?.toolUseId) {\n this._toolDetail.result = next;\n }\n this._toolDetailCopied = null;\n this._toolDetailInputOpen = true;\n this._toolDetailOutputOpen = true;\n this._drawerView = 'toolDetail';\n this._drawerOpen = true;\n this._saveState();\n // Reset the panel scroll so a newly-opened tool starts at the top, rather\n // than inheriting the previous tool's scroll position. Wait for the render.\n this.updateComplete.then(() => {\n if (this._drawerBodyEl) {\n this._drawerBodyEl.scrollTop = 0;\n }\n });\n }\n /** Toggle the tool-detail Input section open/closed. */\n _handleToggleToolDetailInput() {\n this._toolDetailInputOpen = !this._toolDetailInputOpen;\n }\n /** Toggle the tool-detail Output section open/closed. */\n _handleToggleToolDetailOutput() {\n this._toolDetailOutputOpen = !this._toolDetailOutputOpen;\n }\n /**\n * Pretty-print a tool input/result for the detail view. The values arrive as\n * strings that usually hold JSON; reindent when they do, otherwise show as-is.\n * Never throws — falls back to the original text.\n *\n * A large/overflowing result is stashed server-side and returned as a preview\n * wrapped in `<<<uuid_BEGIN>>> … <<<uuid_END>>>` markers, followed by a paging\n * note. Two things make `JSON.parse` unusable here: the marker wrapper isn't\n * JSON, and the payload between the markers is a truncated SLICE of a bigger\n * blob (cut off mid-string), so it never parses on its own. So we reindent the\n * payload STRUCTURALLY (see `_reindentJson`) rather than parse it, and keep the\n * markers + note exactly where they were so it still reads as a paged response.\n */\n _formatToolJson(value) {\n if (value === undefined || value === null) {\n return '';\n }\n const raw = String(value);\n const marker = raw.match(/(<<<[0-9a-f-]+_BEGIN>>>\\n?)([\\s\\S]*?)(\\n?<<<[0-9a-f-]+_END>>>)/);\n if (marker && marker.index != null) {\n // Splice by index rather than String.replace — the reindented JSON can\n // contain `$` sequences (e.g. \"$dtoRef\") that replace() treats as special.\n const start = marker.index + marker[1].length;\n const end = start + marker[2].length;\n return raw.slice(0, start) + this._reindentJson(marker[2]) + raw.slice(end);\n }\n return this._reindentJson(raw);\n }\n /**\n * Reindent JSON-ish text for display. Tries a strict parse+stringify first (the\n * clean path for complete, valid JSON). If that fails — which it does for the\n * truncated slices returned by the stashed-response pager — it falls back to a\n * structural walk that inserts newlines/indentation around `{}[],:` while\n * tracking string state (so braces and commas INSIDE string values, and escaped\n * quotes, are left alone). This formats even incomplete JSON. Non-JSON text\n * (no leading `{`/`[`) is returned untouched.\n */\n _reindentJson(text) {\n const trimmed = text.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return text;\n }\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n }\n catch {\n // Fall through to the tolerant structural reindent below.\n }\n let out = '';\n let depth = 0;\n let inString = false;\n let escaped = false;\n const pad = (level) => '\\n' + ' '.repeat(Math.max(0, level));\n for (let i = 0; i < trimmed.length; i++) {\n const ch = trimmed[i];\n if (inString) {\n out += ch;\n if (escaped) {\n escaped = false;\n }\n else if (ch === '\\\\') {\n escaped = true;\n }\n else if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n if (ch === '\"') {\n inString = true;\n out += ch;\n }\n else if (ch === '{' || ch === '[') {\n depth++;\n out += ch + pad(depth);\n }\n else if (ch === '}' || ch === ']') {\n depth--;\n out += pad(depth) + ch;\n }\n else if (ch === ',') {\n out += ch + pad(depth);\n }\n else if (ch === ':') {\n out += ': ';\n }\n else if (ch === ' ' || ch === '\\n' || ch === '\\t' || ch === '\\r') {\n // Collapse the source's own whitespace between tokens — our pad() owns layout.\n }\n else {\n out += ch;\n }\n }\n return out;\n }\n /** Copy the tool-detail Input to the clipboard. Stops propagation so the click\n * doesn't also toggle the (parent) section header. */\n _handleCopyToolDetailInput(e) {\n e.stopPropagation();\n this._copyToolDetail('input', this._formatToolJson(this._toolDetail?.use.data?.toolInput));\n }\n /** Copy the tool-detail Output to the clipboard (see input handler). */\n _handleCopyToolDetailOutput(e) {\n e.stopPropagation();\n this._copyToolDetail('output', this._formatToolJson(this._toolDetail?.result?.data?.toolResultString));\n }\n /** Write one tool-detail block to the clipboard and flash \"Copied\" on it. */\n _copyToolDetail(block, content) {\n navigator.clipboard.writeText(content).then(() => {\n this._toolDetailCopied = block;\n setTimeout(() => {\n if (this._toolDetailCopied === block) {\n this._toolDetailCopied = null;\n }\n }, 2000);\n }).catch(() => { });\n }\n _handleDrawerResizeMouseDown(e) {\n this._isDrawerResizing = true;\n this._drawerResizeStartX = e.clientX;\n this._drawerResizeStartW = this._drawerWidth;\n e.preventDefault();\n e.stopPropagation();\n document.addEventListener('mousemove', this._handleDrawerResizeMouseMove);\n document.addEventListener('mouseup', this._handleDrawerResizeMouseUp);\n }\n _readStreamChunk() {\n if (!this._reader) {\n return;\n }\n this._reader.read().then((result) => {\n if (result.done) {\n // The stream closed. Two very different cases:\n // 1. A `finished:true` chunk already arrived (_turnFinishedCleanly) — the\n // turn is genuinely over; finishing was already handled below. Nothing to do.\n // 2. No finished chunk yet — the connection DROPPED mid-turn (5-min emitter\n // timeout, tab backgrounded, network blip) but the server-side turn is\n // still running. Do NOT unlock the composer (that's the old bug that made\n // the input look ready while the AI was still working). Reconnect to the\n // live stream and keep receiving events.\n if (this._turnFinishedCleanly) {\n return;\n }\n this._reconnectStream();\n return;\n }\n this._buffer = this._buffer + this._decoder.decode(result.value, { stream: true });\n const events = this._buffer.split('\\n\\n');\n this._buffer = events.pop() || '';\n for (let i = 0; i < events.length; i++) {\n if (!events[i].trim()) {\n continue;\n }\n const lines = events[i].split('\\n');\n for (let j = 0; j < lines.length; j++) {\n if (!lines[j].startsWith('data:')) {\n continue;\n }\n const raw = lines[j].slice(5).trim();\n if (!raw) {\n continue;\n }\n let data;\n try {\n data = JSON.parse(raw);\n }\n catch {\n continue;\n }\n // Dispatch a generic event for every SSE message so consumers can listen and react\n this.dispatchEvent(new CustomEvent('stream-event', {\n detail: data,\n bubbles: true,\n composed: true,\n }));\n if (data.type === 'REASONING_PART') {\n if (data.message) {\n // Text after a tool line belongs in a NEW assistant bubble — the\n // last message may be a tool line, which text can't append to.\n // _ensureAssistantBubble opens a fresh bubble when needed.\n const target = this._ensureAssistantBubble();\n if (!target.reasoning) {\n target.reasoning = '';\n }\n target.reasoning += String(data.message);\n this.requestUpdate();\n }\n }\n else if (data.type === 'RESPONSE_PART') {\n if (data.message) {\n this._ensureAssistantBubble().content += String(data.message);\n this.requestUpdate();\n }\n }\n else if (data.type === 'tool_use' || data.type === 'tool_result') {\n // Push the event straight into the transcript — the message IS the event\n // ({type, data}). The render reads msg.data.* and pairs a tool_result to\n // its tool_use by data.toolUseId. Same shape the DB persists and reload\n // replays, so live and reload share one representation — no transform.\n this.messages.push(data);\n this.requestUpdate();\n }\n else if (data.type === 'action_decision') {\n // The server accepted the confirmation decision and authored the record\n // (single source of truth). Its arrival is the ack: drop the prompt,\n // stop the buttons' loading, and push the event straight in — the render\n // reads msg.data.{outcome,tools}. Same type + shape the DB persists, so\n // live and reload share one representation.\n this._pendingActions = [];\n this._confirmationHighlighted = -1;\n this._confirmationInFlight = false;\n this.messages.push(data);\n this.requestUpdate();\n }\n else if (data.type === 'ERROR') {\n this._handleStreamError(String(data.message || 'Unknown error'));\n }\n else if (data.type === 'CONVERSATION_STATE') {\n // Turn-start state sync: the server is the source of truth for the\n // conversation's mode (it may have decayed EDIT → NORMAL after idle).\n // Adopt it so the composer's selector reflects the real posture.\n if (data.data?.mode === 'NORMAL' || data.data?.mode === 'EDIT' || data.data?.mode === 'PLAN') {\n this._mode = data.data.mode;\n }\n }\n else if (data.type === 'CONVERSATION_TOKEN_WARNING') {\n // User-facing: friendly \"conversation is getting long\" guidance.\n // Text only, never sent to the model — render verbatim as a banner.\n this._contextWarning = String(data.message || '');\n }\n else if (data.type === 'CONVERSATION_TITLE') {\n // The server generated a real title for a brand-new conversation\n // (it was created with a truncated first-message placeholder that we\n // deliberately never show). Adopt it as the header label and pass it\n // up so consumers can update their own chrome, e.g. a breadcrumb.\n if (data.data?.title) {\n this._conversationTitle = data.data.title;\n this.dispatchEvent(new CustomEvent('conversation-title', {\n detail: { title: data.data.title },\n bubbles: true,\n composed: true,\n }));\n }\n }\n else if (data.type === 'CONVERSATION_LIMIT_REACHED') {\n // User-facing hard stop. Carries finished:true (handled below).\n // Clear any soft warning so we don't double-message the user.\n this._contextLimitReached = true;\n this._contextLimitMessage = String(data.message || '');\n this._contextWarning = '';\n }\n else if (data.type === 'ACTION_CONFIRMATION_REQUIRED') {\n // A guarded tool paused for approval (Rail 3). Carries finished:true\n // (handled below), so the turn lock releases — but the conversation\n // is now awaiting a decision, and a normal chat message would be\n // rejected with awaitingConfirmation. Capture the batch so the\n // composer stays blocked and the approve/deny prompt renders instead;\n // the next call must be a confirmation, not a userText.\n const actions = data.data?.actions;\n if (Array.isArray(actions) && actions.length) {\n this._pendingActions = actions;\n // Default the keyboard highlight to Yes so Enter approves.\n this._confirmationHighlighted = 0;\n }\n }\n else if (data.type === 'TOKEN_USAGE') {\n // INTERNAL-ONLY debug telemetry. Update the panel snapshot and the\n // per-iteration log; never render as a chat bubble.\n if (data.data) {\n const usage = data.data;\n this._telemetry = usage;\n // A new turn starts at iteration 1 — clear the prior turn's log\n // only now (not at send), so it stays visible until fresh data\n // actually arrives rather than blanking out on submit.\n if (usage.iteration === 1) {\n this._iterationLog = [usage];\n this._cacheCheckpoints = {};\n }\n else {\n this._iterationLog = [...this._iterationLog, usage];\n }\n }\n }\n else if (data.type === 'CACHE_CHECKPOINT') {\n // INTERNAL-ONLY debug telemetry. Records when/under which mode the\n // history checkpoint was placed, keyed by iteration for the table.\n if (data.data) {\n const checkpoint = data.data;\n this._cacheCheckpoints = {\n ...this._cacheCheckpoints,\n [checkpoint.iteration]: checkpoint,\n };\n }\n }\n if (data.finished) {\n // Primary unlock signal: the turn is over and the server released\n // the turn lock. The SSE stream closes right after this chunk. Mark\n // it clean so the imminent `result.done` doesn't trigger a reconnect.\n this._turnFinishedCleanly = true;\n this._finishStream();\n }\n }\n }\n // Stop reading once a terminal chunk ended the turn — the reader is nulled\n // by _finishStream and the stream is closing anyway.\n if (!this._reader) {\n return;\n }\n this._readStreamChunk();\n }).catch((err) => {\n if (err.name === 'AbortError') {\n return;\n }\n // A read error mid-turn is a drop, not a completion — reconnect (same as a\n // clean `done` without a finished chunk) unless the turn already finished.\n if (!this._turnFinishedCleanly) {\n this._reconnectStream();\n return;\n }\n this._handleStreamError(err.message);\n });\n }\n /**\n * Reconnect to an in-flight turn after the SSE stream dropped without finishing\n * (5-min emitter timeout, tab backgrounded, network blip). Hits the read-only\n * `/stream/attach/{conversationID}` endpoint, which re-attaches a fresh SSE\n * connection to the still-running server-side turn without starting anything new.\n *\n * - 200 with a body → resume reading; the turn's events keep flowing (events\n * emitted during the gap are not replayed, so the live text may jump forward —\n * the full transcript reconciles from the DB when the turn ends).\n * - 204 → no live turn: it already finished server-side while we were\n * disconnected. Reload the transcript so the final answer appears, then unlock.\n * - failure / retry cap hit → give up and finish so the composer never wedges.\n *\n * The composer stays locked (`_isStreaming` untouched) throughout, so the input\n * never looks ready while the AI is still working.\n */\n _reconnectStream() {\n // Without a pinned conversation there's nothing to re-attach to (a custom\n // `send` owns its own targeting). Fall back to finishing.\n if (!this.conversationId) {\n this._finishStream();\n return;\n }\n // Bound the retries so a genuinely dead turn can't loop forever.\n if (this._reconnectAttempts >= 5) {\n this._handleStreamError('Lost connection to the assistant. Please reload the conversation.');\n return;\n }\n this._reconnectAttempts = this._reconnectAttempts + 1;\n KRHttp.fetch({\n url: `/api/system/integration/aws/bedrock/stream/attach/${this.conversationId}`,\n method: 'GET',\n headers: { Accept: 'text/event-stream' },\n }).then((response) => {\n // 204 No Content: the turn finished server-side during the gap. Pull the\n // final transcript from the DB (via the same `load` callback the component\n // initializes with) so the answer that streamed during the disconnect\n // appears, then unlock.\n if (response.status === 204) {\n this._reconnectAttempts = 0;\n if (this.load) {\n this.load().then((messages) => {\n this.messages = messages;\n this.requestUpdate();\n }).catch(() => {\n // Reload failed — leave the transcript as-is; the user can refresh manually.\n });\n }\n this._finishStream();\n return;\n }\n if (!response.ok || !response.body) {\n // Transient failure — back off and try again on the same drop.\n setTimeout(() => this._reconnectStream(), 1000);\n return;\n }\n // Re-attached to the live turn: reset the retry counter and resume reading\n // into the same buffer/decoder from the fresh stream. Mark streaming so the\n // composer locks and the typing indicator shows — load-triggered attaches (a\n // page reloaded mid-turn) start with _isStreaming false, so this is what\n // surfaces \"the AI is still working\"; on a mid-session drop it's already true\n // (a no-op).\n this._reconnectAttempts = 0;\n this._isStreaming = true;\n this._followStream = true;\n this._reader = response.body.getReader();\n this._decoder = new TextDecoder();\n this._buffer = '';\n // Close the gap: events the turn emitted between the drop and this re-attach\n // aren't replayed on the live stream. Every COMPLETED iteration during the\n // gap was persisted (assistant text, tool_use/tool_result rows), so reload the\n // transcript from the DB to backfill them, THEN start reading live. Ordering\n // matters — the reader buffers incoming bytes until _readStreamChunk runs, so\n // starting live only after the async reload resolves prevents the reload from\n // clobbering freshly-streamed chunks. Only the current in-flight iteration's\n // partial text is missing from the reload; it streams live from here.\n if (this.load) {\n this.load().then((messages) => {\n this.messages = messages;\n this.requestUpdate();\n this._readStreamChunk();\n }).catch(() => {\n // Reload failed — go live anyway; the gap's completed iterations just\n // won't show until the next full reload, but the turn keeps streaming.\n this._readStreamChunk();\n });\n }\n else {\n this._readStreamChunk();\n }\n }).catch(() => {\n // Network error reaching the attach endpoint — back off and retry.\n setTimeout(() => this._reconnectStream(), 1000);\n });\n }\n /**\n * The assistant bubble streamed text should append to. Returns the last message\n * when it's already an assistant bubble; otherwise (the last message is a tool\n * line, or there's nothing yet) opens a fresh assistant bubble so post-tool text\n * doesn't get dropped or glued to a tool line.\n */\n _ensureAssistantBubble() {\n const last = this.messages[this.messages.length - 1];\n if (last && last.type === 'assistant') {\n return last;\n }\n const bubble = {\n type: 'assistant',\n content: '',\n };\n this.messages = [...this.messages, bubble];\n return bubble;\n }\n /**\n * End the current turn: release the turn lock and the reader. Called on the\n * primary unlock signal (`finished:true`) and the fallback (stream close).\n *\n * A turn that paused for confirmation (`_pendingActions` set) leaves the\n * composer blocked even though the lock released — the approve/deny prompt\n * owns the next call. Its trailing empty assistant bubble is dropped so the\n * prompt doesn't sit under an empty message with a typing indicator.\n */\n _finishStream() {\n this._isStreaming = false;\n this._reader = null;\n if (this._pendingActions.length) {\n const lastIndex = this.messages.length - 1;\n // Drop the trailing assistant bubble only when it's truly empty — no\n // streamed text AND no reasoning. A reasoning-only bubble (the model thought\n // out loud, then went straight to the guarded tool) must be kept, else its\n // \"Thinking\" trace is lost when the confirmation card renders.\n if (lastIndex >= 0\n && this.messages[lastIndex].type === 'assistant'\n && !this.messages[lastIndex].content\n && !this.messages[lastIndex].reasoning) {\n this.messages = this.messages.slice(0, -1);\n }\n // Scroll the confirmation into view so the user actually sees the ask — an\n // agentic turn can stream many tool lines past the fold, leaving the prompt\n // below it. `block: 'end'` brings its bottom up to just above the composer.\n if (this._inlineConfirm) {\n this.updateComplete.then(() => {\n this._messagesEl?.querySelector('.confirmation')?.scrollIntoView({\n behavior: 'smooth',\n block: 'end',\n });\n });\n }\n }\n }\n _handleStreamError(message) {\n this._isStreaming = false;\n this._error = message;\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n // Remove the empty assistant message if it has no content\n if (this.messages.length > 0) {\n const lastMessage = this.messages[this.messages.length - 1];\n if (lastMessage.type === 'assistant' && !lastMessage.content) {\n this.messages = this.messages.slice(0, -1);\n }\n }\n }\n // --- Render ---\n /**\n * The composer's mode selector — a Gemini-style inline label + caret sitting\n * just before the mic, that opens a small menu (Ask / Auto / Plan). Inline text\n * rather than a pill so it doesn't grow the single-row composer's height. The\n * menu opens upward above the trigger.\n */\n _renderModeSelector() {\n const active = CHATBOT_MODES.find((m) => m.mode === this._mode) || CHATBOT_MODES[0];\n return html `\n <div class=\"mode\">\n ${this._modeMenuOpened ? html `\n <div class=\"mode-menu\">\n ${CHATBOT_MODES.map((m) => html `\n <button\n class=${classMap({\n 'mode-menu__item': true,\n 'mode-menu__item--active': m.mode === this._mode,\n })}\n @click=${() => this._handleModeSelect(m.mode)}\n >\n <span class=\"mode-menu__label\">${m.label}</span>\n <span class=\"mode-menu__desc\">${m.description}</span>\n </button>\n `)}\n </div>\n ` : nothing}\n <button\n class=\"mode-trigger\"\n aria-haspopup=\"true\"\n aria-expanded=${this._modeMenuOpened ? 'true' : 'false'}\n @click=${this._handleModeToggle}\n >\n <span class=\"mode-trigger__label\">${active.label}</span>\n <svg\n class=\"mode-trigger__caret\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n </div>\n `;\n }\n /**\n * The approve/deny card shown when guarded tools are paused (Rail 3). Floats\n * OVER the messages, anchored just above the composer — not part of the message\n * scroll — so it stays in view while the transcript scrolls behind it.\n *\n * Written for a non-technical user. A single action reads as one plain-language\n * ask (`Run \"{tool}\"?` + the model's `confirmationMessage`). When the model\n * batches several guarded tools, they're listed together under one header and\n * the user accepts or rejects them all at once — the backend decision is\n * all-or-nothing. Either way: NO tool code, NO raw arguments/JSON — those are\n * noise (or alarming) to a normal user.\n */\n _renderConfirmation() {\n // Title: name the single tool, else a generic header for a batch.\n let title = 'Run this action?';\n if (this._pendingActions.length > 1) {\n title = 'These actions need your approval';\n }\n else if (this._pendingActions[0]) {\n title = `Run \"${this._pendingActions[0].displayName || this._pendingActions[0].toolName}\"?`;\n }\n return html `\n <div\n class=${classMap({\n 'confirmation': true,\n 'confirmation--inline': this._inlineConfirm,\n })}\n role=\"alertdialog\"\n aria-label=\"Confirm before continuing\"\n >\n <div class=\"confirmation__title\">${title}</div>\n ${this._pendingActions.length > 1\n ? html `\n <ol class=\"confirmation__list\">\n ${this._pendingActions.map((action) => html `\n <li class=\"confirmation__list-item\">\n <span class=\"confirmation__list-name\">${action.displayName || action.toolName}</span>\n ${action.confirmationMessage\n ? html `<span class=\"confirmation__list-desc\">${action.confirmationMessage}</span>`\n : nothing}\n ${this._showConfirmationInput && this._inlineConfirm && action.input && Object.keys(action.input).length\n ? html `<pre class=\"confirmation__details-input\">${JSON.stringify(action.input, null, 2)}</pre>`\n : nothing}\n </li>\n `)}\n </ol>\n `\n : html `\n <p class=\"confirmation__message\">${this._pendingActions[0]?.confirmationMessage || 'The assistant wants to take an action. Is that OK?'}</p>\n ${this._showConfirmationInput && this._inlineConfirm && this._pendingActions[0]?.input && Object.keys(this._pendingActions[0].input).length\n ? html `<pre class=\"confirmation__details-input\">${JSON.stringify(this._pendingActions[0].input, null, 2)}</pre>`\n : nothing}\n `}\n <div class=\"confirmation__actions\">\n ${CONFIRMATION_DECISIONS.map((option, index) => html `\n <kr-button\n class=${classMap({\n 'confirmation__btn': true,\n 'confirmation__btn--highlighted': index === this._confirmationHighlighted,\n })}\n variant=${option.decision === 'approve' ? 'flat' : 'outline'}\n color=${option.decision === 'reject' ? 'secondary' : 'primary'}\n size=\"small\"\n data-decision=${option.decision}\n @click=${() => this._handleConfirmationDecision(option.decision)}\n >${option.label}</kr-button>\n `)}\n </div>\n </div>\n `;\n }\n /** The `/` skill menu shown above the composer while typing a slash command. */\n _renderSkillMenu() {\n const skills = this._invocableSkills;\n // Debug test triggers are extra actions after Attach Files / Browse. The\n // flat keyboard index counts actions first, then skills, so the skills'\n // index offset is the number of actions shown.\n const debugActions = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let actionCount = 3;\n if (debugActions) {\n actionCount = 5;\n }\n return html `\n <div class=\"skill-menu\">\n <div class=\"skill-menu__actions\">\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 0,\n })}\n @click=${() => this._openFilePicker(true)}\n >\n <span class=\"skill-menu__name\">Attach Files</span>\n <span class=\"skill-menu__desc\">The AI reads these files</span>\n </button>\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 1,\n })}\n @click=${() => this._openFilePicker(false)}\n >\n <span class=\"skill-menu__name\">Attach Files for Reference</span>\n <span class=\"skill-menu__desc\">Attached for a tool — not read by the AI</span>\n </button>\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 2,\n })}\n @click=${this._handleSkillBrowseOpen}\n >\n Browse All Skills\n </button>\n ${debugActions ? html `\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 3,\n })}\n @click=${() => this._activateSkillMenuItem(3)}\n >\n Test Context Warning\n </button>\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 4,\n })}\n @click=${() => this._activateSkillMenuItem(4)}\n >\n Test Context Limit\n </button>\n ` : nothing}\n </div>\n ${skills.length ? html `\n <ul class=\"skill-menu__list\">\n ${skills.map((skill, index) => html `\n <li>\n <button\n class=${classMap({\n 'skill-menu__item': true,\n 'skill-menu__item--highlighted': index + actionCount === this._skillHighlighted,\n })}\n @click=${() => this._handleSkillSelect(skill)}\n >\n <span class=\"skill-menu__name\">${skill.name}</span>\n ${skill.description ? html `\n <span class=\"skill-menu__desc\">${skill.description}</span>\n ` : nothing}\n </button>\n </li>\n `)}\n </ul>\n ` : nothing}\n </div>\n `;\n }\n /**\n * The \"Browse all skills\" dialog — a searchable grid of Org / Kodaris cards.\n *\n * The Kodaris tab is omitted on the registry server (kodaris.com): that instance\n * IS the catalog source, so `globalSkillList` has no remote to pull and always\n * returns `[]`. Its own published skills appear on the Your Org tab instead,\n * carrying a \"Global\" badge.\n */\n _renderSkillBrowse() {\n return html `\n <kr-dialog\n opened\n label=\"Browse Skills\"\n width=\"720px\"\n @close=${this._handleSkillBrowseClose}\n >\n <div class=\"skill-browse\">\n <kr-text-field\n placeholder=\"Search skills...\"\n .value=${this._skillBrowseQuery}\n @input=${this._handleSkillBrowseSearch}\n ></kr-text-field>\n <kr-tab-group\n active-tab-id=${this._skillBrowseSource}\n @tab-change=${this._handleSkillBrowseTabChange}\n >\n <kr-tab id=\"org\" label=\"Your Org\">\n ${this._renderSkillGrid()}\n </kr-tab>\n ${this._aiFrameworkConfig.registryServer === true ? nothing : html `\n <kr-tab id=\"kodaris\" label=\"Kodaris\">\n ${this._renderSkillGrid(true)}\n </kr-tab>\n `}\n </kr-tab-group>\n </div>\n </kr-dialog>\n `;\n }\n /**\n * The card grid of skill search results for the browse dialog. Clicking a card\n * inserts `/code ` into the composer. In the shared-Kodaris (`global`) tab each\n * card also gets a footer row with an Install/Uninstall button.\n *\n * The Kodaris tab is the whole published catalog, deliberately NOT role-filtered so\n * users can discover skills they don't have yet. So a card there can be in one of two\n * non-runnable states — the user's roles don't allow it (`canRun: false`), or it isn't\n * installed here (not `enabled`). Neither looks clickable; clicking either explains\n * why via `_handleSkillSelect`.\n */\n _renderSkillGrid(global = false) {\n let skills = this._orgSkills;\n if (global) {\n skills = this._globalSkills;\n }\n if (!skills.length) {\n return nothing;\n }\n return html `\n <div class=\"skill-browse__grid\">\n ${skills.map((skill) => html `\n <div\n class=${classMap({\n 'skill-card': true,\n 'skill-card--unavailable': skill.canRun === false || (!!skill.global && !skill.enabled),\n })}\n role=\"button\"\n tabindex=\"0\"\n @click=${() => this._handleSkillSelect(skill)}\n @keydown=${(e) => this._handleSkillCardKeydown(e, skill)}\n >\n <span class=\"skill-card__name\">${skill.name}</span>\n ${skill.description ? html `\n <span class=\"skill-card__desc\">${skill.description}</span>\n ` : nothing}\n ${!global && skill.global ? html `\n <span class=\"skill-card__badge\">Global</span>\n ` : nothing}\n ${global ? html `\n <div class=\"skill-card__footer\">\n <span class=\"skill-card__price\">Free</span>\n <kr-button\n class=\"skill-card__install-btn\"\n size=\"small\"\n variant=${skill.enabled ? 'outline' : 'flat'}\n color=${skill.enabled ? 'secondary' : 'primary'}\n @click=${(e) => this._handleGlobalSkillEnable(skill, e)}\n >${skill.enabled ? 'Uninstall' : 'Install'}</kr-button>\n </div>\n ` : nothing}\n </div>\n `)}\n </div>\n `;\n }\n /**\n * Render a user message, highlighting a leading `/skill-code` token (like the\n * way Claude highlights slash commands). The composer only inserts valid skill\n * codes, so any leading slash token is treated as one.\n */\n _renderUserContent(content) {\n const match = content.match(/^\\/(\\S+)(\\s[\\s\\S]*)?$/);\n if (match) {\n return html `<span class=\"message-skill\">/${match[1]}</span>${match[2] || ''}`;\n }\n return content;\n }\n /** Compact integer formatting for the debug panel (e.g. 88928 → \"88,928\"). */\n _fmtTokens(n) {\n if (n == null || isNaN(n)) {\n return '—';\n }\n return n.toLocaleString('en-US');\n }\n /** Approximate USD formatting for the debug panel (e.g. 0.1434 → \"~$0.1434\"). */\n _fmtCost(n) {\n if (n == null || isNaN(n)) {\n return '—';\n }\n return '~$' + n.toFixed(4);\n }\n /**\n * INTERNAL-ONLY debug telemetry panel. Rendered only in the inline variant\n * (guarded by the caller) and only when the user has toggled it open. Shows\n * three scopes from the latest TOKEN_USAGE event — context gauge, this turn,\n * lifetime — plus a verbose per-iteration table. Never customer-facing.\n */\n /**\n * The History view's body — the user's previous conversations (most recent\n * first) plus a \"New conversation\" action. Clicking a row switches the widget to\n * that conversation; the current one is marked so the user sees where they are.\n * Floating-only (opened from the header history button).\n */\n _renderHistoryContent() {\n return html `\n <div class=\"history\">\n ${this._conversationsLoading ? html `\n <div class=\"history__empty\">Loading…</div>\n ` : this._conversations.length === 0 ? html `\n <div class=\"history__empty\">No previous conversations</div>\n ` : html `\n <div class=\"history__list\">\n ${this._conversations.map((conversation) => {\n // Format lastModified for the row: today shows the time, this year\n // shows month/day, older shows month/day/year; the raw value if it\n // isn't a parseable date. Empty when the conversation has no date.\n let dateLabel = '';\n if (conversation.lastModified) {\n const date = new Date(conversation.lastModified);\n const now = new Date();\n if (isNaN(date.getTime())) {\n dateLabel = conversation.lastModified;\n }\n else if (date.toDateString() === now.toDateString()) {\n dateLabel = date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n });\n }\n else if (date.getFullYear() === now.getFullYear()) {\n dateLabel = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n }\n else {\n dateLabel = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n }\n }\n return html `\n <button\n type=\"button\"\n class=${classMap({\n 'history__item': true,\n 'history__item--active': conversation.conversationID === this.conversationId,\n })}\n @click=${() => this._handleSwitchConversation(conversation.conversationID)}\n >\n <span class=\"history__item-title\">${conversation.title || 'Untitled conversation'}</span>\n ${dateLabel ? html `\n <span class=\"history__item-date\">${dateLabel}</span>\n ` : nothing}\n </button>\n `;\n })}\n </div>\n `}\n </div>\n `;\n }\n /**\n * The side drawer — one sliding panel that holds the Settings, Debug, History,\n * and tool-detail views. The header buttons switch `_drawerView`; the title and\n * body swap inside. In inline mode it slides in beside the transcript at a\n * consistent (resizable) width; in floating mode it fills the panel over the\n * transcript with a back button (the panel is too narrow to show both).\n */\n _renderDrawer() {\n // The debug view is gated on the server-side flag (inline variant + debug\n // telemetry enabled); if it's not enabled, the drawer only ever shows settings.\n const isDebug = this._drawerView === 'debug'\n && this.variant === 'inline'\n && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let title = 'Settings';\n let body = this._renderSettingsContent();\n if (isDebug) {\n title = 'Debug';\n body = this._renderDebugContent();\n }\n else if (this._drawerView === 'toolDetail' && this._toolDetail) {\n title = this._toolDetail.use.data?.displayName || this._toolDetail.use.data?.toolName || 'Tool';\n body = this._renderToolDetailContent();\n }\n else if (this._drawerView === 'history') {\n title = 'Conversations';\n body = this._renderHistoryContent();\n }\n // In the floating widget the drawer fills the panel over the transcript (a\n // full-panel view with a back button) rather than sliding in beside it — the\n // panel is too narrow to show both. Inline keeps the side-drawer behavior.\n return html `\n <div\n class=${classMap({\n 'drawer': true,\n 'drawer--open': this._drawerOpen,\n 'drawer--resizing': this._isDrawerResizing,\n 'drawer--full': this.variant === 'floating',\n })}\n style=${styleMap(this.variant === 'floating' ? {} : { width: `${this._drawerWidth}px` })}\n >\n ${this.variant === 'floating' ? nothing : html `\n <div\n class=\"drawer__resize\"\n @mousedown=${this._handleDrawerResizeMouseDown}\n ></div>\n `}\n <div class=\"drawer__header\">\n ${this.variant === 'floating' ? html `\n <button\n class=\"header-action\"\n @click=${this._handleCloseDrawer}\n title=\"Back\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15.75 19.5 8.25 12l7.5-7.5\"\n />\n </svg>\n </button>\n ` : nothing}\n <span class=\"drawer__title\">${title}</span>\n ${this._drawerView === 'history' ? html `\n <kr-button\n class=\"history__new\"\n variant=\"flat\"\n color=\"primary\"\n size=\"small\"\n @click=${this._handleNewConversation}\n >\n <svg\n slot=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.75\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </svg>\n New conversation\n </kr-button>\n ` : nothing}\n ${this.variant === 'floating' ? nothing : html `\n <button\n class=\"header-action\"\n @click=${this._handleCloseDrawer}\n title=\"Close\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n `}\n </div>\n <div class=\"drawer__body\">\n ${body}\n </div>\n </div>\n `;\n }\n /** The Settings view's body — user preferences, grouped in sections. */\n _renderSettingsContent() {\n return html `\n <div class=\"settings-section\">\n <div class=\"settings-section__title\">Tools</div>\n <div class=\"settings-row\">\n <kr-checkbox\n label=\"Show tools\"\n .checked=${this._showTools}\n @change=${this._handleShowToolsChange}\n ></kr-checkbox>\n </div>\n <div class=\"settings-row\">\n <kr-checkbox\n label=\"Show tool inputs\"\n .checked=${this._showToolInputs}\n @change=${this._handleShowToolInputsChange}\n ></kr-checkbox>\n </div>\n <div class=\"settings-row\">\n <kr-checkbox\n label=\"Show tool confirmation inputs\"\n .checked=${this._showConfirmationInput}\n @change=${this._handleShowConfirmationInputChange}\n ></kr-checkbox>\n </div>\n </div>\n `;\n }\n /**\n * The Tool detail view's body — the full input and output for one tool call,\n * pretty-printed in scrollable code blocks with a per-block copy button. This\n * is the \"occasionally see everything\" path: the transcript stays terse, and\n * clicking a tool line drops its complete input/output here, uncapped (the\n * blocks scroll rather than truncating).\n */\n _renderToolDetailContent() {\n return html `\n <div class=\"tool-detail\">\n <div class=\"tool-detail__section\">\n <button\n type=\"button\"\n class=\"tool-detail__section-head\"\n aria-expanded=${this._toolDetailInputOpen}\n @click=${this._handleToggleToolDetailInput}\n >\n <span class=${classMap({\n 'tool-detail__caret': true,\n 'tool-detail__caret--open': this._toolDetailInputOpen,\n })}>›</span>\n <span class=\"tool-detail__section-title\">Input</span>\n <span\n class=\"tool-detail__copy\"\n role=\"button\"\n @click=${this._handleCopyToolDetailInput}\n >\n ${this._toolDetailCopied === 'input'\n ? html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n `\n : html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n `}\n </span>\n </button>\n ${this._toolDetailInputOpen\n ? html `<pre class=\"tool-detail__code\">${this._formatToolJson(this._toolDetail.use.data?.toolInput) || '(no input)'}</pre>`\n : nothing}\n </div>\n <div class=\"tool-detail__section\">\n <button\n type=\"button\"\n class=\"tool-detail__section-head\"\n aria-expanded=${this._toolDetailOutputOpen}\n @click=${this._handleToggleToolDetailOutput}\n >\n <span class=${classMap({\n 'tool-detail__caret': true,\n 'tool-detail__caret--open': this._toolDetailOutputOpen,\n })}>›</span>\n <span class=\"tool-detail__section-title\">Output</span>\n <span\n class=\"tool-detail__copy\"\n role=\"button\"\n @click=${this._handleCopyToolDetailOutput}\n >\n ${this._toolDetailCopied === 'output'\n ? html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n `\n : html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n `}\n </span>\n </button>\n ${this._toolDetailOutputOpen\n ? html `<pre class=\"tool-detail__code\">${this._formatToolJson(this._toolDetail.result?.data?.toolResultString) || '(no output yet)'}</pre>`\n : nothing}\n </div>\n </div>\n `;\n }\n /** The Debug view's body — telemetry scopes and the per-iteration table. */\n _renderDebugContent() {\n return html `\n ${this._telemetry ? html `\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">Context</div>\n <div class=\"debug-gauge\">\n <div class=\"debug-gauge__bar\">\n <div\n class=\"debug-gauge__fill\"\n style=${styleMap({ width: `${Math.min(100, Math.max(0, this._telemetry.contextUsedPercent || 0))}%` })}\n ></div>\n </div>\n <span class=\"debug-gauge__text\">\n ${this._fmtTokens(this._telemetry.currentContextTokens)} / ${this._fmtTokens(this._telemetry.contextWindowTokens)}\n · ${this._telemetry.contextUsedPercent ?? 0}%\n </span>\n </div>\n </div>\n\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">This turn</div>\n <div class=\"debug-metrics\">\n <span class=\"debug-metrics__key\">Input</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.turnInputTokens)}</span>\n <span class=\"debug-metrics__key\">Output</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.turnOutputTokens)}</span>\n <span class=\"debug-metrics__key\">Cache read</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.turnCacheReadTokens)}</span>\n <span class=\"debug-metrics__key\">Hit rate</span>\n <span class=\"debug-metrics__val\">${this._telemetry.turnHitRate ?? '—'}%</span>\n <span class=\"debug-metrics__key\">Cost</span>\n <span class=\"debug-metrics__val debug-cost\">${this._fmtCost(this._telemetry.turnCostUsd)}</span>\n </div>\n </div>\n\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">Lifetime</div>\n <div class=\"debug-metrics\">\n <span class=\"debug-metrics__key\">Input</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationInputTokens)}</span>\n <span class=\"debug-metrics__key\">Output</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationOutputTokens)}</span>\n <span class=\"debug-metrics__key\">Cache read</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationCacheReadTokens)}</span>\n <span class=\"debug-metrics__key\">Cache write</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationCacheWriteTokens)}</span>\n <span class=\"debug-metrics__key\">Cost so far</span>\n <span class=\"debug-metrics__val debug-cost\">${this._fmtCost(this._telemetry.conversationCostUsd)}</span>\n </div>\n </div>\n ` : html `\n <div class=\"debug-empty\">No telemetry yet — send a message to populate.</div>\n `}\n\n ${this._iterationLog.length ? html `\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">Iterations (this turn)</div>\n <div class=\"debug-iterations-scroll\">\n <table class=\"debug-iterations\">\n <thead>\n <tr>\n <th>#</th>\n <th>In</th>\n <th>Out</th>\n <th>Cache R</th>\n <th>Cache W</th>\n <th>Hit</th>\n <th>Cost</th>\n <th>Ckpt</th>\n </tr>\n </thead>\n <tbody>\n ${this._iterationLog.map((it) => {\n const ckpt = this._cacheCheckpoints[it.iteration];\n return html `\n <tr>\n <td>${it.iteration}</td>\n <td>${this._fmtTokens(it.iterationInput)}</td>\n <td>${this._fmtTokens(it.iterationOutput)}</td>\n <td>${this._fmtTokens(it.iterationCacheRead)}</td>\n <td>${this._fmtTokens(it.iterationCacheWrite)}</td>\n <td>${it.iterationHitRate ?? '—'}%</td>\n <td class=\"debug-cost\">${this._fmtCost(it.iterationCostUsd)}</td>\n <td>${ckpt ? ckpt.mode : '—'}</td>\n </tr>\n `;\n })}\n </tbody>\n </table>\n </div>\n </div>\n ` : nothing}\n `;\n }\n render() {\n // Debug affordances (drawer toggle, drawer, /test-* options) require the\n // inline variant AND the server-side debug flag from aiFrameworkConfig.\n const isDebugEnabled = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n // Push the content over by the open drawer's width so the drawer sits beside\n // the content rather than overlaying it. One consistent (resizable) width for\n // both views. Only pushes while the drawer is open, and only inline — the\n // floating drawer fills the panel over the transcript, so it must not push.\n const contentPadding = {};\n if (this._drawerOpen && this.variant === 'inline') {\n contentPadding.paddingRight = `${this._drawerWidth}px`;\n }\n // Group the transcript into runs so an agent turn (its reasoning/tool/text/\n // decision messages, which stream in as separate entries) renders inside ONE\n // wrapper. The scroll-to-top runway goes on that wrapper, so everything the\n // turn appends fills the SAME tall element instead of stacking as siblings\n // below it (which is what stranded tool lines below the fold). A user message\n // is its own group and is unaffected.\n const messageGroups = [];\n this.messages.forEach((msg) => {\n const lastGroup = messageGroups[messageGroups.length - 1];\n if (msg.type === 'user' || !lastGroup || lastGroup[0].type === 'user') {\n messageGroups.push([msg]);\n }\n else {\n lastGroup.push(msg);\n }\n });\n return html `\n ${(this.hideToggle || this.variant === 'inline') ? nothing : html `\n <button\n class=${classMap({\n 'toggle': true,\n 'toggle--hidden': this.opened,\n })}\n @click=${this._handleToggle}\n title=\"Open chat\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n class=\"toggle-icon\"\n >\n <path d=\"M12 2C6.48 2 2 6.03 2 11c0 2.61 1.19 4.94 3.05 6.55L4 22l4.8-2.4C9.82 19.85 10.88 20 12 20c5.52 0 10-4.03 10-9S17.52 2 12 2z\"/>\n <path d=\"M8 11h.01M12 11h.01M16 11h.01\" stroke-width=\"2.5\"/>\n </svg>\n </button>\n `}\n\n <div\n class=${classMap({\n 'panel': true,\n 'panel--opened': this.opened,\n 'panel--resizing-drawer': this._isDrawerResizing,\n })}\n style=${styleMap(contentPadding)}\n @dragenter=${this._handleDragEnter}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n @drop=${this._handleDrop}\n >\n ${this._isDraggingFile ? html `\n <div class=\"drop-overlay\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"\n />\n </svg>\n <span>Drop images to attach</span>\n </div>\n ` : nothing}\n ${this.variant === 'inline' ? nothing : html `\n <div\n class=\"resize resize--n\"\n data-dir=\"n\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--s\"\n data-dir=\"s\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--w\"\n data-dir=\"w\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--e\"\n data-dir=\"e\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--nw\"\n data-dir=\"nw\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--ne\"\n data-dir=\"ne\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--sw\"\n data-dir=\"sw\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--se\"\n data-dir=\"se\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n `}\n <div class=\"header\" @mousedown=${this._handleHeaderMouseDown}>\n <div class=\"header-left\">\n <div class=\"header-info\">\n <span class=\"header-title\">${this._conversationTitle || this.label}</span>\n </div>\n </div>\n <div class=\"header-actions\">\n ${this.variant === 'floating' ? html `\n <button\n class=\"header-action\"\n @click=${this._handleNewConversation}\n title=\"New conversation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.75\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </svg>\n </button>\n <button\n class=\"header-action\"\n @click=${() => this._toggleDrawer('history')}\n title=\"Conversations\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n />\n </svg>\n </button>\n ` : nothing}\n <button\n class=\"header-action\"\n @click=${() => this._toggleDrawer('settings')}\n title=\"Settings\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\"\n />\n </svg>\n </button>\n ${isDebugEnabled ? html `\n <button\n class=\"header-action\"\n @click=${() => this._toggleDrawer('debug')}\n title=\"Debug telemetry\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3.75 3v11.25A2.25 2.25 0 0 0 6 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0 1 18 16.5h-2.25m-7.5 0h7.5m-7.5 0-1 3m8.5-3 1 3m0 0 .5 1.5m-.5-1.5h-9.5m0 0-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6\"\n />\n </svg>\n </button>\n ` : nothing}\n ${this.variant === 'inline' ? nothing : html `\n <button\n class=\"header-action\"\n @click=${this._handleToggle}\n title=\"Close\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n `}\n </div>\n </div>\n\n <div\n class=\"messages\"\n @scroll=${this._handleMessagesScroll}\n @wheel=${this._handleMessagesWheel}\n @touchmove=${this._handleMessagesTouchMove}\n @pointerdown=${this._handleMessagesPointerDown}\n >\n <div class=\"messages-inner\">\n ${this.messages.length === 0 ? html `\n <div class=\"empty\">\n <span class=\"empty-text\">What can I help you with?</span>\n ${this._suggestedActions.length ? html `\n <div class=\"empty-suggestions\">\n ${this._suggestedActions.map((action) => html `\n <button\n type=\"button\"\n class=\"empty-suggestions__chip\"\n @click=${() => this._handleSuggestedActionClick(action)}\n >${action.label}</button>\n `)}\n </div>\n ` : nothing}\n </div>\n ` : nothing}\n ${messageGroups.map((group) => {\n // A user group is a single message rendered bare. An agent group wraps\n // its items in one `.agent-turn` so the scroll-to-top runway sits on\n // that wrapper and the whole turn fills it (no stranded siblings).\n const items = group.map((msg) => {\n const index = this.messages.indexOf(msg);\n // Skip an empty assistant placeholder (no content, no reasoning) —\n // _send and _ensureAssistantBubble append these to stream into,\n // but between tool calls with no text they stay empty. An invisible\n // .message div still occupies a flex-gap slot, doubling the spacing\n // between tool lines. Keep it only while it's the actively-streaming\n // last message (it shows the typing dots).\n if (msg.type === 'assistant'\n && !msg.content\n && !msg.reasoning\n && !(this._isStreaming && msg === this.messages[this.messages.length - 1])) {\n return nothing;\n }\n // Tool visibility is user-controlled (\"Show tools\" in the settings\n // panel). When off, drop the whole tool row so it doesn't leave an\n // empty flex-gap slot in the transcript.\n if ((msg.type === 'tool_use' || msg.type === 'tool_result') && !this._showTools) {\n return nothing;\n }\n // A tool_result renders nothing on its own — its tool_use line pulls\n // it in (matched by data.toolUseId) and renders it under the ⎿ cliff.\n if (msg.type === 'tool_result') {\n return nothing;\n }\n // A tool_use line (Claude-CLI style): header \"› ToolName(input)\" and,\n // when \"Show tool inputs\" is on, the result under a ⎿ cliff pulled\n // from the next tool_result with the same toolUseId. Precompute the\n // result and the two display strings (they need statements — JSON\n // reformat, truncation — that can't live in a template expression).\n let result;\n let inputSummary = '';\n let resultPreview = '';\n let resultRemainder = 0;\n if (msg.type === 'tool_use') {\n if (this.messages[index + 1]?.type === 'tool_result'\n && this.messages[index + 1].data?.toolUseId === msg.data?.toolUseId) {\n result = this.messages[index + 1].data;\n }\n if (this._showToolInputs && msg.data?.toolInput) {\n inputSummary = String(msg.data.toolInput).replace(/\\s+/g, ' ').trim();\n if (inputSummary.length > 80) {\n inputSummary = `${inputSummary.slice(0, 79)}…`;\n }\n }\n if (this._showToolInputs && result?.toolResultString) {\n let formatted;\n try {\n formatted = JSON.stringify(JSON.parse(result.toolResultString), null, 2);\n }\n catch {\n formatted = String(result.toolResultString);\n }\n // Cap the inline preview by BOTH lines and characters. Line-only\n // truncation blows up on results whose first line is huge (e.g. a\n // minified-JSON blob or a stashed-response marker with a 30k-char\n // opening line) — 3 lines then still dumps tens of thousands of\n // chars into the transcript. Char-cap first (content-blind, like\n // the backend chokepoint), then keep at most 3 lines of that.\n const lines = formatted.split('\\n');\n resultPreview = lines.slice(0, 3).join('\\n');\n if (resultPreview.length > 200) {\n resultPreview = `${resultPreview.slice(0, 200)}…`;\n }\n resultRemainder = Math.max(0, lines.length - 3);\n }\n }\n // A resolved-decision line (Rail 3) — reads \"Approved Create AI Tool\"\n // / \"Denied …\" / \"Always allowed …\". Precompute the verb and the\n // friendly tool names (an if/else and a map — not template exprs).\n let decisionVerb = 'Approved';\n let decisionTools = [];\n if (msg.type === 'action_decision') {\n if (msg.data?.outcome === 'denied') {\n decisionVerb = 'Denied';\n }\n else if (msg.data?.outcome === 'alwaysAllowed') {\n decisionVerb = 'Always allowed';\n }\n decisionTools = (msg.data?.tools || []).map((t) => t.displayName || t.toolName);\n }\n // A tool line and a decision line ARE assistant-side messages —\n // render them inside the same .message wrapper as everything else so\n // they share its spacing/structure, not as separate element types.\n return html `\n <div class=${classMap({\n 'message': true,\n 'message--user': msg.type === 'user',\n 'message--assistant': msg.type !== 'user',\n })}>\n ${msg.type === 'tool_use' ? html `\n <div class=\"tool-activity-block\">\n <button\n type=\"button\"\n class=${classMap({\n 'tool-activity': true,\n 'tool-activity--error': result?.toolResultStatus === 'error',\n })}\n @click=${() => this._openToolDetail(msg)}\n >\n <span class=\"tool-activity__chevron\">›</span>\n <span class=\"tool-activity__label\">${msg.data?.displayName || msg.data?.toolName || 'Tool'}</span>\n ${inputSummary ? html `<span class=\"tool-activity__input\">(${inputSummary})</span>` : nothing}\n </button>\n ${this._showToolInputs && result?.toolResultString ? html `\n <button\n type=\"button\"\n class=${classMap({\n 'tool-activity__result': true,\n 'tool-activity__result--error': result.toolResultStatus === 'error',\n })}\n @click=${() => this._openToolDetail(msg)}\n >\n <span class=\"tool-activity__connector\">⎿</span>\n <pre class=\"tool-activity__result-body\">${resultPreview}${resultRemainder > 0\n ? html `\\n<span class=\"tool-activity__more\">… +${resultRemainder} lines</span>`\n : nothing}</pre>\n </button>\n ` : nothing}\n </div>\n ` : nothing}\n ${msg.type === 'action_decision' ? html `\n <div class=${classMap({\n 'decision': true,\n 'decision--denied': msg.data?.outcome === 'denied',\n })}>\n <span class=\"decision__icon\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n ${msg.data?.outcome === 'denied'\n ? html `<path d=\"M18 6 6 18M6 6l12 12\" />`\n : html `<path d=\"M20 6 9 17l-5-5\" />`}\n </svg>\n </span>\n <span class=\"decision__label\">${decisionVerb}${decisionTools.length ? ' ' + decisionTools.join(', ') : nothing}</span>\n </div>\n ` : nothing}\n ${msg.reasoning ? (this._reasoningAsMessage ? html `\n <div class=\"message-content\">${msg.reasoning}</div>\n ` : html `\n <details class=\"reasoning\">\n <summary>Thinking</summary>\n <div class=\"reasoning-content\">${msg.reasoning}</div>\n </details>\n `) : nothing}\n ${msg.conversationFiles && msg.conversationFiles.length ? html `\n <div class=\"attachments\">\n ${msg.conversationFiles.map((file) => {\n const fileName = file.niceName || file.name || 'File';\n // A stored file is an image by its MIME when it has one, else\n // by its extension.\n let isImage = IMAGE_EXTENSIONS.includes(this._getFileExtension(fileName));\n if (file.mimeType) {\n isImage = file.mimeType.startsWith('image/');\n }\n // An image shows its thumbnail; everything else shows a\n // file-type tile. Both open the previewer on click — it renders\n // images, video, PDFs, and text inline, and shows a download\n // tile for the rest (Office formats), so a click always does\n // something useful.\n if (isImage) {\n return html `\n <button\n class=\"attachment\"\n type=\"button\"\n title=${file.niceName || 'View image'}\n @click=${() => this._handleFileOpen(file)}\n >\n <img\n src=${file.previewUrl || `${KRHttp.getBaseUrl()}/api/system/conversationFile/${file.conversationFileID}/view`}\n alt=${file.niceName || ''}\n />\n </button>\n `;\n }\n return html `\n <button\n class=\"attachment attachment--doc attachment--openable\"\n type=\"button\"\n title=${fileName}\n @click=${() => this._handleFileOpen(file)}\n >\n <span class=\"attachment__type\">${this._getFileExtension(fileName) || 'File'}</span>\n <span class=\"attachment__name\">${fileName}</span>\n </button>\n `;\n })}\n </div>\n ` : nothing}\n ${msg.content ? html `\n <div class=\"message-content\">\n ${msg.type === 'user'\n ? this._renderUserContent(msg.content)\n : unsafeHTML(marked.parse(msg.content, { breaks: true }))}\n </div>\n ` : nothing}\n ${msg.type === 'assistant' && this._isStreaming && msg === this.messages[this.messages.length - 1] ? html `\n <div class=\"typing\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n ` : nothing}\n ${msg.content ? html `\n <button\n class=\"message-copy\"\n title=${this._copiedIndex === index ? 'Copied' : 'Copy'}\n @click=${() => this._handleCopyMessage(msg.content, index)}\n >\n ${this._copiedIndex === index ? html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ` : html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n `}\n </button>\n ` : nothing}\n </div>\n `;\n });\n if (group[0].type === 'user') {\n return items;\n }\n // The inline confirmation is this turn's final step, so it renders\n // INSIDE the agent-turn wrapper (not as a sibling) — it sits right\n // after the last message and the runway falls below it naturally.\n // Only on the last group, which is the current (paused) turn.\n const isLastGroup = group === messageGroups[messageGroups.length - 1];\n const showConfirmation = isLastGroup && this._pendingActions.length && this._inlineConfirm;\n // Keep the \"thinking\" indicator visible while a tool is running or\n // the model is between steps with no text yet. The trailing empty\n // assistant bubble shows the dots itself; but once a tool line is\n // the last message, that bubble is gone — so render the dots here\n // at the end of the live turn instead. Not while paused for a\n // confirmation (the ask replaces the indicator).\n const lastMsg = this.messages[this.messages.length - 1];\n const showTyping = isLastGroup\n && this._isStreaming\n && !this._pendingActions.length\n && lastMsg?.type !== 'assistant';\n return html `\n <div class=\"agent-turn\">\n ${items}\n ${showTyping ? html `\n <div class=\"typing\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n ` : nothing}\n ${showConfirmation ? this._renderConfirmation() : nothing}\n </div>\n `;\n })}\n </div>\n </div>\n\n ${this._pendingActions.length && !this._inlineConfirm ? this._renderConfirmation() : nothing}\n\n ${this._error ? html `\n <div class=\"error\">\n <span>${this._error}</span>\n <button class=\"error-dismiss\" @click=${this._handleErrorDismiss}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"error-dismiss-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ` : this._contextLimitReached ? html `\n <div class=\"context-limit\" role=\"alert\">\n ${this._contextLimitMessage\n || 'This conversation has reached its limit. Please start a new one to continue.'}\n </div>\n ` : this._contextWarning ? html `\n <div class=\"context-warning\" role=\"status\">\n <span>${this._contextWarning}</span>\n <button\n class=\"context-warning-dismiss\"\n title=\"Dismiss\"\n @click=${this._handleContextWarningDismiss}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"context-warning-dismiss-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ` : nothing}\n\n <div class=\"footer\">\n ${this._pendingConversationFiles.length ? html `\n <div class=\"composer-attachments\">\n ${repeat(this._pendingConversationFiles, (p) => p.localId, (p) => html `\n <div\n class=${classMap({\n chip: true,\n 'chip--doc': !p.previewUrl,\n })}\n title=${p.name}\n >\n <div\n class=${classMap({\n 'chip-body': true,\n 'chip-body--image': Boolean(p.previewUrl),\n })}\n >\n ${p.previewUrl\n ? html `<img src=${p.previewUrl} alt=${p.name} />`\n : html `\n <span class=\"chip-type\">${this._getFileExtension(p.name) || 'File'}</span>\n <span class=\"chip-name\">${p.name}</span>\n `}\n </div>\n <button\n class=\"chip-remove\"\n title=\"Remove\"\n @click=${() => this._handlePendingRemove(p.localId)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.75\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n `)}\n </div>\n ` : nothing}\n <input\n class=\"file-input\"\n type=\"file\"\n accept=${ACCEPTED_FILE_EXTENSIONS.map((ext) => '.' + ext).join(',')}\n multiple\n hidden\n @change=${this._handleFileInputChange}\n />\n ${this._skillMenuOpened ? this._renderSkillMenu() : nothing}\n <div class=\"input-wrapper\">\n <button\n class=\"input-plus\"\n @click=${this._handlePlusClick}\n >+</button>\n <textarea\n class=\"input\"\n .value=${this._inputValue}\n placeholder=${this.placeholder}\n rows=\"1\"\n @input=${this._handleInputChange}\n @keydown=${this._handleKeyDown}\n @paste=${this._handlePaste}\n ></textarea>\n ${this._renderModeSelector()}\n ${window.SpeechRecognition || window.webkitSpeechRecognition ? html `\n ${this._isDictating ? html `\n <button\n class=\"mic-stop\"\n title=\"Stop dictation\"\n aria-label=\"Stop dictation\"\n @click=${this._handleMicClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n class=\"mic-stop-icon\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"6\"\n y=\"6\"\n width=\"12\"\n height=\"12\"\n rx=\"2\"\n />\n </svg>\n </button>\n ` : html `\n <button\n class=\"mic\"\n title=\"Dictate a message\"\n aria-label=\"Dictate a message\"\n @click=${this._handleMicClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"mic-icon\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 15a3 3 0 0 0 3-3V6a3 3 0 0 0-6 0v6a3 3 0 0 0 3 3Z\"/>\n <path d=\"M19 11a7 7 0 0 1-14 0\"/>\n <path d=\"M12 18v3\"/>\n </svg>\n </button>\n `}\n ` : nothing}\n ${this._isStreaming ? html `\n <button\n class=\"stop\"\n @click=${this._handleStop}\n title=\"Stop generating\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n class=\"stop-icon\"\n >\n <rect\n x=\"6\"\n y=\"6\"\n width=\"12\"\n height=\"12\"\n rx=\"2\"\n />\n </svg>\n </button>\n ` : html `\n <button\n class=${classMap({\n 'send': true,\n 'send--disabled': (!this._inputValue.trim() && !this._pendingConversationFiles.length) || this._pendingActions.length > 0,\n })}\n @click=${this._handleSubmit}\n title=${this._pendingActions.length ? 'Approve or deny the pending action first' : 'Send message'}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n class=\"send-icon\"\n >\n <path d=\"M12 19V5M5 12l7-7 7 7\"/>\n </svg>\n </button>\n `}\n </div>\n </div>\n ${this._skillBrowseOpened ? this._renderSkillBrowse() : nothing}\n ${this._renderDrawer()}\n </div>\n `;\n }\n}\nKRChatbot.styles = css `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host {\n display: block;\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n line-height: 1.6;\n\n --kr-chatbot-primary: #163052;\n --kr-chatbot-primary-hover: #1e4068;\n --kr-chatbot-bg: #ffffff;\n --kr-chatbot-border: #d9d9d9;\n --kr-chatbot-text: #1a1a2e;\n --kr-chatbot-text-secondary: #64668b;\n --kr-chatbot-user-bg: #e9e9e980;\n --kr-chatbot-error-bg: #fef2f2;\n --kr-chatbot-error-text: #dc2626;\n --kr-chatbot-success: #00b894;\n --kr-chatbot-toggle-size: 56px;\n --kr-chatbot-panel-width: 440px;\n --kr-chatbot-panel-height: 620px;\n }\n\n :host {\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 10000;\n }\n\n /* Toggle button */\n .toggle {\n width: var(--kr-chatbot-toggle-size);\n height: var(--kr-chatbot-toggle-size);\n border-radius: 18px;\n background: var(--kr-chatbot-primary);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 24px rgba(22, 48, 82, 0.4);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .toggle:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 32px rgba(22, 48, 82, 0.5);\n }\n\n .toggle--hidden {\n transform: scale(0);\n opacity: 0;\n pointer-events: none;\n }\n\n .toggle-icon {\n width: 26px;\n height: 26px;\n }\n\n /* Panel */\n .panel {\n display: none;\n flex-direction: column;\n background: var(--kr-chatbot-bg);\n overflow: hidden;\n position: absolute;\n bottom: 0;\n right: 0;\n width: var(--kr-chatbot-panel-width);\n height: var(--kr-chatbot-panel-height);\n max-height: calc(100vh - 72px);\n border-radius: 16px;\n box-shadow: 0 8px 40px rgba(0, 0, 0, 0.08), 0 2px 12px rgba(0, 0, 0, 0.04);\n border: 1px solid rgba(0, 0, 0, 0.08);\n animation: chatbot-panel-in 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n transform-origin: bottom right;\n }\n\n .panel--opened {\n display: flex;\n }\n\n /* Inline mode: fill the parent container instead of floating bottom-right. */\n :host([variant='inline']) {\n position: static;\n bottom: auto;\n right: auto;\n z-index: auto;\n height: 100%;\n }\n\n :host([variant='inline']) .panel {\n position: relative;\n bottom: auto;\n right: auto;\n width: 100%;\n height: 100%;\n max-height: none;\n border-radius: 0;\n box-shadow: none;\n border: none;\n animation: none;\n /* Reserve space for the drawer by animating padding-right in sync with the\n drawer's slide, so the chat column shrinks rather than being overlaid. */\n transition: padding-right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n /* Track the cursor 1:1 while dragging the drawer's resize handle. */\n :host([variant='inline']) .panel--resizing-drawer {\n transition: none;\n }\n\n @keyframes chatbot-panel-in {\n from {\n opacity: 0;\n transform: scale(0.92) translateY(20px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n\n /* Header */\n .header {\n padding: 0 16px 0 24px;\n height: 64px;\n background: #ffffff;\n color: #000000;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .header-info {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .header-title {\n font-size: 16px;\n font-weight: 600;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .header-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n }\n\n .header-action {\n width: 32px;\n height: 32px;\n background: transparent;\n border: none;\n color: rgb(0 0 0 / 70%);\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n }\n\n .header-action:hover {\n background: rgba(0, 0, 0, 0.05);\n color: #000000;\n }\n\n .header-action-icon {\n width: 20px;\n height: 20px;\n }\n\n .settings-section {\n padding: 14px 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n }\n\n .settings-section:last-child {\n border-bottom: none;\n }\n\n .settings-section__title {\n font-size: 14px;\n font-weight: 600;\n color: #000000;\n margin-bottom: 12px;\n }\n\n .settings-row {\n padding: 6px 0;\n }\n\n /* Tool detail view — the full input/output for one tool call. */\n .tool-detail {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 16px 20px;\n }\n\n .tool-detail__section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n /* Clickable section header — toggles the code block below. Button chrome is\n stripped so it reads as a heading row. */\n .tool-detail__section-head {\n display: flex;\n align-items: center;\n gap: 8px;\n appearance: none;\n background: none;\n border: none;\n width: 100%;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .tool-detail__section-head:focus-visible {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 2px;\n }\n\n /* Disclosure caret — the same \"›\" used on tool lines; rotates down when open. */\n .tool-detail__caret {\n flex-shrink: 0;\n font-size: 16px;\n color: rgba(0, 0, 0, 0.55);\n transition: transform 0.15s ease;\n }\n\n .tool-detail__caret--open {\n transform: rotate(90deg);\n }\n\n .tool-detail__section-title {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: #000000;\n }\n\n /* Copy icon-button — same treatment as the per-message copy button. */\n .tool-detail__copy {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n background: none;\n border: none;\n border-radius: 6px;\n color: #000000;\n cursor: pointer;\n transition: background-color 0.15s, color 0.15s;\n }\n\n .tool-detail__copy:hover {\n background: rgba(0, 0, 0, 0.06);\n }\n\n .tool-detail__copy svg {\n width: 14px;\n height: 14px;\n }\n\n /* The code block — pretty-printed JSON, shown in full (no inner scroll). The\n drawer body is the only scroll container, so long inputs/outputs extend the\n page and you scroll the panel, not a nested box. */\n .tool-detail__code {\n margin: 0;\n padding: 0 18px;\n font-family: 'SF Mono', 'Fira Code', Monaco, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: #000000;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n /* Messages */\n /* Full-width scroll container — keeps the scrollbar at the panel edge. */\n .messages {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n scroll-behavior: smooth;\n background: white;\n }\n\n /* Centered, width-capped column that actually holds the messages. */\n .messages-inner {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 36px;\n padding: 32px;\n width: 100%;\n max-width: 768px;\n margin-left: auto;\n margin-right: auto;\n }\n\n .empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--kr-chatbot-text-secondary);\n gap: 16px;\n }\n\n .empty-text {\n font-size: 14px;\n color: rgb(0 0 0 / 80%);\n }\n\n /* Context-aware action chips under the empty-state prompt. A row of pills the user can click to\n prefill a skill — capped small server-side so this reads as a few suggestions, not a menu. */\n .empty-suggestions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n max-width: 420px;\n margin-top: 4px;\n }\n\n .empty-suggestions__chip {\n padding: 8px 12px;\n background: rgb(0 0 0 / 6%);\n border: none;\n border-radius: 16px;\n color: #000000;\n font: inherit;\n font-size: 13px;\n line-height: 1.2;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .empty-suggestions__chip:hover {\n background: rgb(0 0 0 / 10%);\n color: #000000;\n }\n\n .message {\n position: relative;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n animation: chatbot-msg-in 0.3s ease-out;\n /* Reserve room for the copy button INSIDE the message box (so the button is\n part of the message's hover region — no dead zone to cross), then cancel\n that space for layout so message spacing is unchanged. */\n padding-bottom: 30px;\n margin-bottom: -30px;\n }\n\n /* The reserved padding overhangs into the next message; lift the hovered one\n so its copy button isn't covered by (or stealing hover from) the sibling. */\n .message:hover {\n z-index: 1;\n }\n\n @keyframes chatbot-msg-in {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .message--user {\n align-self: flex-end;\n align-items: flex-end;\n max-width: 85%;\n }\n\n .message--assistant {\n align-self: flex-start;\n gap: 24px;\n }\n\n /* An agent turn wraps all of its messages (reasoning, tool lines, text,\n decision) so the scroll-to-top runway can sit on the whole turn and content\n streams inside it instead of stacking as siblings below the runway. A flex\n column with the same 36px gap as .messages-inner, so item spacing is\n unchanged whether grouped or not. Full width so its children align exactly\n as before (assistant left, tool/decision left). */\n .agent-turn {\n display: flex;\n flex-direction: column;\n gap: 36px;\n width: 100%;\n }\n\n /* Tool-activity line — \"the assistant ran X\" row in the transcript. Same text\n style as any other message (black, 14px); a leading › chevron marks it as a\n step (in the same text style, not an icon). */\n /* The tool-activity line and its result preview are <button>s (they open the\n tool-detail drawer on click) — strip the native button chrome so they read\n as plain transcript text, then re-add the layout. */\n .tool-activity {\n align-self: flex-start;\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 14px;\n color: #000000;\n /* Keep the chevron + name + input on a single line; input truncates if long. */\n white-space: nowrap;\n /* Button reset */\n appearance: none;\n background: none;\n border: none;\n margin: 0;\n padding: 2px 4px;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: 4px;\n max-width: 100%;\n }\n\n .tool-activity:focus-visible {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 1px;\n }\n\n .tool-activity--error {\n color: var(--kr-chatbot-error-text);\n }\n\n /* Leading chevron — plain text in the same style as the name, so it reads as\n one label rather than an icon. */\n .tool-activity__chevron {\n flex-shrink: 0;\n }\n\n /* The tool name never shrinks — it's the input that truncates if the header\n runs out of room. */\n .tool-activity__label {\n flex-shrink: 0;\n }\n\n /* The tool input rendered inline in the header, Claude-CLI style:\n \"Read(chatbot.ts)\". Same color/font as the tool name — it reads as one\n label. Truncates with an ellipsis so the header stays on one line. */\n .tool-activity__input {\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n /* Header + result grouped as one unit so the parent .message--assistant 24px\n gap doesn't push them apart. Rows sit tight together inside. */\n .tool-activity-block {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n /* One hover for the whole tool block: hovering anywhere over the header or its\n result underlines the tool name, input, and result together as a single\n link, rather than lighting up header and result separately. */\n .tool-activity-block:hover .tool-activity__label,\n .tool-activity-block:hover .tool-activity__input,\n .tool-activity-block:hover .tool-activity__result-body {\n text-decoration: underline;\n text-decoration-color: rgba(0, 0, 0, 0.25);\n }\n\n /* The result block indented under the activity line with a ⎿ tree connector,\n like Claude CLI's tool output preview. Uses the normal message text style\n (14px, black) — only the ⎿ connector is muted. */\n .tool-activity__result {\n align-self: flex-start;\n display: flex;\n gap: 2px;\n /* Align the ⎿ connector's visible stroke under the first character of the\n tool name. The name is preceded by the \"› \" chevron (chevron width + 6px\n gap ≈ 11px), and the ⎿ glyph carries ~5.6px more internal left bearing\n than the name's first letter — so net-shift the block right to land the\n stroke under the name. */\n margin-left: 6px;\n font-size: 14px;\n color: #000000;\n /* Button reset — this preview row is also a click target for the detail view. */\n appearance: none;\n background: none;\n border: none;\n padding: 0;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .tool-activity__result:focus-visible {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 1px;\n border-radius: 4px;\n }\n\n .tool-activity__result--error {\n color: var(--kr-chatbot-error-text);\n }\n\n .tool-activity__connector {\n flex-shrink: 0;\n color: rgba(0, 0, 0, 0.55);\n user-select: none;\n /* The ⎿ arm sits near the baseline, ~6px below the result's first-character\n vertical center. Nudge the glyph up so the arm tip lines up with that center. */\n transform: translateY(-6px);\n }\n\n .tool-activity__result-body {\n /* Small horizontal gap between the ⎿ arm and the result text so they don't\n collide (the ⎿ glyph's own arm already extends most of the way). */\n margin: 0 0 0 6px;\n white-space: pre-wrap;\n word-break: break-word;\n font: inherit;\n }\n\n .tool-activity__more {\n color: rgba(0, 0, 0, 0.4);\n }\n\n /* Decision line — the persistent record of an approve/deny (Rail 3). Uses the\n normal message text style (14px, black); a check/deny icon marks it. */\n .decision {\n align-self: flex-start;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: #000000;\n }\n\n .decision--denied {\n color: var(--kr-chatbot-error-text);\n }\n\n .decision__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n }\n\n .decision__icon svg {\n width: 15px;\n height: 15px;\n }\n\n /* anywhere, NOT break-word: both break a long unbreakable run (a pasted URL) for\n layout, but only anywhere also shrinks the element's intrinsic min-content width.\n With break-word the URL still reports its full unbroken width as the minimum,\n which sizes this shrink-to-fit bubble past .messages-inner's 768px cap and\n overflows the page horizontally. */\n .message-content {\n line-height: 1.7;\n overflow-wrap: anywhere;\n }\n\n .message--user .message-content {\n display: inline-block;\n background: var(--kr-chatbot-user-bg);\n color: #000000;\n padding: 10px 16px;\n border-radius: 20px;\n border-bottom-right-radius: 6px;\n font-size: 14px;\n }\n\n /* Highlighted leading /skill token in a sent user message. Monospace + a\n stronger color makes it read as a distinct command without a pill. */\n .message-skill {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, Menlo, Consolas, monospace;\n font-weight: 600;\n color: #b45309;\n }\n\n /* Per-message copy button. Sits in the message's reserved bottom padding —\n inside the hover box, so moving the cursor down onto it never leaves the\n message. Height is reserved (via the message padding) so spacing doesn't\n jump; only opacity toggles on hover. */\n .message-copy {\n position: absolute;\n bottom: 0;\n left: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n background: none;\n border: none;\n border-radius: 6px;\n color: #000000;\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.15s, background-color 0.15s, color 0.15s;\n }\n\n .message--user .message-copy {\n left: auto;\n right: 0;\n }\n\n .message:hover .message-copy,\n .message-copy:focus-visible {\n opacity: 1;\n }\n\n .message-copy:hover {\n background: rgba(0, 0, 0, 0.06);\n }\n\n .message-copy svg {\n width: 14px;\n height: 14px;\n }\n\n .message--assistant .message-content {\n background: transparent;\n color: #000000;\n padding: 0;\n font-size: 14px;\n }\n\n .message--assistant .message-content pre {\n background: #1e1e1e;\n color: #d4d4d4;\n padding: 12px;\n border-radius: 6px;\n overflow-x: auto;\n margin: 8px 0;\n font-size: 13px;\n line-height: 1.4;\n }\n\n .message--assistant .message-content code {\n font-family: 'SF Mono', 'Fira Code', Monaco, monospace;\n font-size: 13px;\n }\n\n .message--assistant .message-content :not(pre) > code {\n background: rgba(0, 0, 0, 0.06);\n padding: 2px 5px;\n border-radius: 3px;\n }\n\n .message--assistant .message-content strong {\n font-weight: 600;\n }\n\n .message--assistant .message-content p {\n margin: 0 0 8px 0;\n }\n\n .message--assistant .message-content p:last-child {\n margin-bottom: 0;\n }\n\n /* Reasoning */\n .reasoning {\n border-radius: 6px;\n background: rgb(244 244 244 / 80%);\n font-size: 12px;\n }\n\n .reasoning summary {\n cursor: pointer;\n padding: 6px 10px 6px 10px;\n color: black;\n user-select: none;\n }\n\n .reasoning-content {\n padding: 6px 10px 10px;\n color: black;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n .typing {\n display: flex;\n gap: 4px;\n padding: 4px 0;\n }\n\n .typing span {\n width: 6px;\n height: 6px;\n background: var(--kr-chatbot-text-secondary);\n border-radius: 50%;\n animation: chatbot-typing 1.4s infinite;\n opacity: 0.4;\n }\n\n .typing span:nth-child(2) {\n animation-delay: 0.2s;\n }\n\n .typing span:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n @keyframes chatbot-typing {\n 0%, 60%, 100% {\n opacity: 0.4;\n transform: translateY(0);\n }\n 30% {\n opacity: 1;\n transform: translateY(-4px);\n }\n }\n\n /* Error */\n .error {\n padding: 8px 16px;\n background: var(--kr-chatbot-error-bg);\n color: var(--kr-chatbot-error-text);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .error-dismiss {\n background: none;\n border: none;\n color: var(--kr-chatbot-error-text);\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .error-dismiss-icon {\n width: 14px;\n height: 14px;\n }\n\n /* Context warning banner (user-facing, dismissible, non-blocking) */\n .context-warning {\n /* Match the message text column: 768px cap minus its 32px side padding\n (704px), and viewport minus that padding on narrower screens. */\n width: 100%;\n max-width: 735px;\n margin: 8px auto 0;\n padding: 10px 14px;\n border: 1px solid #fde68a;\n border-radius: 8px;\n background: #fffbeb;\n color: #92400e;\n font-size: 13px;\n line-height: 1.4;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-shrink: 0;\n }\n\n .context-warning-dismiss {\n background: none;\n border: none;\n color: #92400e;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n opacity: 0.7;\n }\n\n .context-warning-dismiss:hover {\n opacity: 1;\n }\n\n .context-warning-dismiss-icon {\n width: 14px;\n height: 14px;\n }\n\n /* Context-limit notice (user-facing, blocking — steers to a new conversation) */\n .context-limit {\n /* Match the message text column: 768px cap minus its 32px side padding\n (704px), and viewport minus that padding on narrower screens. */\n width: 100%;\n max-width: 735px;\n margin: 8px auto 0;\n padding: 10px 14px;\n border: 1px solid #fecaca;\n border-radius: 8px;\n background: var(--kr-chatbot-error-bg);\n color: var(--kr-chatbot-error-text);\n font-size: 13px;\n line-height: 1.4;\n flex-shrink: 0;\n }\n\n /* Action-confirmation card (Rail 3). Floats OVER the messages, anchored just\n above the composer — not part of the message scroll — so it stays put and\n in view while the transcript scrolls behind it. Its width matches the\n message text column: .messages-inner is 768px max with 32px padding, so the\n text column is 768 - 64. Plain-language ask + Yes/No for a non-technical\n user; no tool codes, no raw arguments. */\n .confirmation {\n position: absolute;\n left: 32px;\n right: 32px;\n /* Sits above the footer/composer with a clear gap between the two. */\n bottom: 104px;\n z-index: 6;\n max-width: 720px;\n margin: 0 auto;\n padding: 24px;\n border: 1px solid #d8d8d8;\n border-radius: 8px;\n background: var(--kr-chatbot-bg);\n color: var(--kr-chatbot-text);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n /* Never taller than the panel leaves room for — scroll the card itself if a\n batched multi-action ask is long, rather than covering the whole panel. */\n max-height: calc(100% - 176px);\n overflow-y: auto;\n }\n\n /* Inline variant (Claude-CLI style): sits IN the message stream as just\n another assistant message — no card chrome (padding/background/border/\n radius/shadow), no float offsets, no height cap. It flows and scrolls with\n the transcript. */\n .confirmation--inline {\n position: static;\n left: auto;\n right: auto;\n bottom: auto;\n z-index: auto;\n max-width: none;\n margin: 0;\n max-height: none;\n overflow: visible;\n padding: 0;\n border: none;\n border-radius: 0;\n background: none;\n box-shadow: none;\n /* scrollIntoView({ block: 'end' }) aligns the card's bottom to the viewport\n bottom; this margin makes it stop short so the Yes/No buttons aren't flush\n against (or clipped by) the fold. */\n scroll-margin-bottom: 24px;\n }\n\n /* The raw arguments, pretty-printed. Wraps rather than scrolling — the whole\n card grows with the transcript (the point of the inline variant). */\n .confirmation__details-input {\n margin: 8px 0 0;\n border-radius: 6px;\n color: var(--kr-chatbot-text);\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, Menlo, Consolas, monospace;\n font-size: 13px;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n }\n\n /* \"Run {tool}?\" heading — names the tool being run. */\n .confirmation__title {\n font-size: 16px;\n font-weight: 600;\n margin-bottom: 12px;\n }\n\n .confirmation__message {\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n }\n\n /* Batch list: one bullet per pending tool — its name, then the model's\n plain-language intent under it. */\n .confirmation__list {\n margin: 0;\n padding-left: 20px;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .confirmation__list-item:not(:last-child) {\n margin-bottom: 8px;\n }\n\n .confirmation__list-name {\n display: block;\n font-weight: 600;\n }\n\n .confirmation__list-desc {\n display: block;\n }\n\n /* Buttons in a row; wrap on a narrow panel rather than overflowing the card. */\n .confirmation__actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n margin-top: 20px;\n }\n\n /* Keyboard-highlighted decision — a focus ring around the button, drawn\n outside its border so it reads over both the flat (Yes) and outline\n variants without recoloring or reshaping the button. Don't set\n border-radius here: that's the button's own (its pill shape); outline\n follows it and doesn't affect the button's size. */\n .confirmation__btn--highlighted {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 2px;\n }\n\n /*\n * Side drawer, docked to the right of the inline chat, holding the Settings\n * and Debug views. The chat column shrinks (padding-right) to make room; the\n * drawer does not overlay. It stays mounted and slides in/out via a transform,\n * so opening and closing animate; switching views just swaps the content\n * inside (no re-slide, no width change). One consistent resizable width across\n * both views; the width is set inline from _drawerWidth.\n */\n .drawer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n max-width: 100%;\n background: var(--kr-chatbot-bg);\n display: flex;\n flex-direction: column;\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n color: #000000;\n z-index: 5;\n }\n\n /* While dragging the resize handle, suppress the slide transition so the\n drawer tracks the cursor 1:1. */\n .drawer--resizing {\n transition: none;\n }\n\n .drawer--open {\n transform: translateX(0);\n box-shadow: -4px 0 20px rgba(10, 26, 46, 0.07);\n }\n\n /* Left-edge grab handle for resizing the drawer. */\n .drawer__resize {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 10px;\n cursor: ew-resize;\n z-index: 10;\n }\n\n .drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 12px 0 20px;\n height: 64px;\n flex-shrink: 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n }\n\n /* Full-panel (floating) header: back button then title, left-aligned. */\n .drawer--full .drawer__header {\n justify-content: flex-start;\n gap: 8px;\n padding: 0 12px;\n }\n\n .drawer__title {\n font-size: 14px;\n font-weight: 600;\n color: #000000;\n }\n\n .drawer__body {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px 0;\n }\n\n /* Floating variant: the drawer fills the whole panel over the transcript (a\n full-panel view with a back button), rather than sliding in beside it. */\n .drawer--full {\n left: 0;\n width: 100%;\n max-width: 100%;\n z-index: 6;\n }\n\n .drawer--full.drawer--open {\n box-shadow: none;\n }\n\n /* History (previous conversations) view. */\n .history {\n display: flex;\n flex-direction: column;\n }\n\n /* \"New conversation\" action in the Conversations header — pushed to the right. */\n .history__new {\n margin-left: auto;\n }\n\n .history__empty {\n padding: 24px 20px;\n text-align: center;\n font-size: 13px;\n color: rgb(0 0 0 / 50%);\n }\n\n .history__list {\n display: flex;\n flex-direction: column;\n padding: 4px 0;\n }\n\n .history__item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 5px;\n padding: 10px 20px;\n background: transparent;\n border: none;\n text-align: left;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .history__item:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n\n .history__item--active {\n background: rgba(0, 0, 0, 0.06);\n }\n\n .history__item-title {\n font-size: 14px;\n color: #000000;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n .history__item-date {\n font-size: 12px;\n color: rgb(0 0 0 / 60%);\n }\n\n .debug-section {\n padding: 14px 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n }\n\n .debug-section:last-child {\n border-bottom: none;\n }\n\n .debug-section__label {\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: #000000;\n font-size: 11px;\n font-weight: 600;\n margin-bottom: 10px;\n }\n\n /* Context-fullness gauge */\n .debug-gauge {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .debug-gauge__bar {\n flex: 1;\n height: 8px;\n border-radius: 4px;\n background: rgb(244 244 244 / 100%);\n overflow: hidden;\n }\n\n .debug-gauge__fill {\n height: 100%;\n border-radius: 4px;\n background: var(--kr-chatbot-primary);\n transition: width 0.3s ease;\n }\n\n .debug-gauge__text {\n color: #000000;\n font-size: 12px;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n }\n\n /* Metric rows */\n .debug-metrics {\n display: grid;\n grid-template-columns: auto 1fr;\n column-gap: 12px;\n row-gap: 7px;\n font-size: 13px;\n }\n\n .debug-metrics__key {\n color: #000000;\n }\n\n .debug-metrics__val {\n color: #000000;\n text-align: right;\n font-variant-numeric: tabular-nums;\n }\n\n .debug-cost {\n font-weight: 600;\n }\n\n /* Per-iteration table (verbose). The wrapper scrolls horizontally on its own\n so a wide table never forces the whole drawer to scroll sideways. */\n .debug-iterations-scroll {\n overflow-x: auto;\n max-width: 100%;\n }\n\n .debug-iterations {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n font-variant-numeric: tabular-nums;\n }\n\n .debug-iterations th,\n .debug-iterations td {\n padding: 5px 6px;\n text-align: right;\n white-space: nowrap;\n }\n\n .debug-iterations th {\n color: #000000;\n font-weight: 600;\n border-bottom: 1px solid rgba(0, 0, 0, 0.10);\n }\n\n .debug-iterations tbody tr:not(:last-child) td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n }\n\n .debug-iterations td:first-child,\n .debug-iterations th:first-child {\n text-align: left;\n }\n\n .debug-empty {\n color: #000000;\n padding: 20px;\n font-size: 13px;\n text-align: center;\n }\n\n /* Footer / Input */\n .footer {\n padding: 16px 16px 16px;\n flex-shrink: 0;\n background: white;\n width: 100%;\n max-width: 768px;\n margin-left: auto;\n margin-right: auto;\n }\n\n /* Inline mode: keep the composer clear of the bottom edge. */\n :host([variant='inline']) .footer {\n padding-bottom: 40px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n gap: 4px;\n background: white;\n border: 1px solid var(--kr-chatbot-border);\n border-radius: 26px;\n padding: 6px;\n transition: border-color 0.2s, box-shadow 0.2s;\n }\n\n .input-wrapper:focus-within {\n border-color: #b0b0b0;\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.04);\n }\n\n /* Inline mode: keep the border and add a soft floating shadow (ChatGPT/Gemini style). */\n :host([variant='inline']) .input-wrapper {\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06), 0 8px 24px rgba(0, 0, 0, 0.1);\n }\n\n :host([variant='inline']) .input-wrapper:focus-within {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 12px 32px rgba(0, 0, 0, 0.14);\n }\n\n .input-plus {\n width: 34px;\n height: 34px;\n border: none;\n background: transparent;\n color: var(--kr-chatbot-text);\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 20px;\n font-weight: 300;\n transition: background 0.15s;\n }\n\n .input-plus:hover {\n background: #f8f9fc;\n }\n\n .input {\n flex: 1;\n border: none;\n outline: none;\n resize: none;\n font-family: inherit;\n font-size: 15px;\n line-height: 1.5;\n padding: 4px 0;\n min-height: 26px;\n max-height: 120px;\n background: transparent;\n color: black;\n }\n\n .input::placeholder {\n color: #b0b0b0;\n }\n\n /* margin-right rather than a wider .input-wrapper gap, which would also push\n the plus button and textarea apart. Applied to both mic states so the\n spacing doesn't shift when dictation swaps one for the other. */\n .mic,\n .mic-stop {\n margin-right: 4px;\n }\n\n /* Mode selector — Gemini-style inline label + caret before the mic. Anchors\n its upward menu; sized so it never grows the single-row composer height. */\n .mode {\n position: relative;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n }\n\n .mode-trigger {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n height: 34px;\n padding: 0 8px;\n border: none;\n background: transparent;\n color: var(--kr-chatbot-text);\n border-radius: 17px;\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n white-space: nowrap;\n transition: background 0.15s;\n }\n\n .mode-trigger:hover {\n background: #f8f9fc;\n }\n\n .mode-trigger__caret {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n }\n\n /* Menu opens upward, anchored to the trigger's right edge. */\n .mode-menu {\n position: absolute;\n bottom: calc(100% + 8px);\n right: 0;\n min-width: 220px;\n background: white;\n border: 1px solid #b0b0b0;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n padding: 6px 0;\n z-index: 10000;\n display: flex;\n flex-direction: column;\n }\n\n .mode-menu__item {\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 100%;\n padding: 8px 14px;\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font: inherit;\n color: var(--kr-chatbot-text);\n }\n\n .mode-menu__item:hover {\n background: #f3f4f6;\n }\n\n .mode-menu__item--active {\n background: #eef1f6;\n }\n\n .mode-menu__label {\n font-size: 14px;\n font-weight: 500;\n }\n\n .mode-menu__desc {\n font-size: 12px;\n }\n\n .mic {\n width: 34px;\n height: 34px;\n border: none;\n background: transparent;\n color: var(--kr-chatbot-text);\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: background 0.15s, color 0.15s;\n }\n\n .mic:hover {\n background: #f8f9fc;\n }\n\n .mic-icon {\n width: 21px;\n height: 21px;\n }\n\n /* Dictation swaps the mic for this stop button, sitting in the mic's slot so\n the composer's layout is unchanged and the textarea stays visible with the\n transcript streaming into it. Structurally identical to .stop; only the\n colors differ — dictation isn't an error state, so it takes a neutral grey\n instead of the error red, and that also keeps it distinct from the solid\n send button sitting right beside it. The icon is dark rather than white\n because white on this grey wouldn't meet contrast. */\n .mic-stop {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: #eae7e7;\n color: #1f1f1f;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.15s;\n }\n\n .mic-stop:hover {\n background: #ded9d9;\n }\n\n /* Larger than .stop-icon's 14px: the rect fills only half its 24-unit\n viewBox, so the drawn square is half this value. */\n .mic-stop-icon {\n width: 20px;\n height: 20px;\n }\n\n .send {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: var(--kr-chatbot-primary);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.15s;\n }\n\n .send:hover {\n background: var(--kr-chatbot-primary-hover);\n }\n\n .send--disabled {\n opacity: 0.4;\n cursor: default;\n }\n\n .send--disabled:hover {\n background: var(--kr-chatbot-primary);\n }\n\n .send-icon {\n width: 16px;\n height: 16px;\n }\n\n .stop {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: var(--kr-chatbot-error-text);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.15s;\n }\n\n .stop:hover {\n background: #b91c1c;\n }\n\n .stop-icon {\n width: 14px;\n height: 14px;\n }\n\n /* Header drag cursor */\n .header {\n cursor: grab;\n user-select: none;\n }\n\n .header:active {\n cursor: grabbing;\n }\n\n /* Inline mode isn't draggable — don't show the grab/hand cursor. */\n :host([variant='inline']) .header,\n :host([variant='inline']) .header:active {\n cursor: default;\n }\n\n /* Drag / Resize states */\n .panel--dragging,\n .panel--resizing {\n transition: none;\n user-select: none;\n }\n\n .panel--dragging {\n box-shadow: 0 32px 96px rgba(0, 0, 0, 0.18), 0 12px 40px rgba(0, 0, 0, 0.1);\n }\n\n /* Resize handles */\n .resize {\n position: absolute;\n z-index: 10;\n }\n\n .resize--n { top: -4px; left: 12px; right: 12px; height: 8px; cursor: n-resize; }\n .resize--s { bottom: -4px; left: 12px; right: 12px; height: 8px; cursor: s-resize; }\n .resize--w { left: -4px; top: 12px; bottom: 12px; width: 8px; cursor: w-resize; }\n .resize--e { right: -4px; top: 12px; bottom: 12px; width: 8px; cursor: e-resize; }\n .resize--nw { top: -4px; left: -4px; width: 16px; height: 16px; cursor: nw-resize; }\n .resize--ne { top: -4px; right: -4px; width: 16px; height: 16px; cursor: ne-resize; }\n .resize--sw { bottom: -4px; left: -4px; width: 16px; height: 16px; cursor: sw-resize; }\n .resize--se { bottom: -4px; right: -4px; width: 16px; height: 16px; cursor: se-resize; }\n\n /* Attachment thumbnails inside a sent message bubble */\n .attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .message--user .attachments {\n justify-content: flex-end;\n margin-bottom: 24px;\n }\n\n /* A sent attachment is the same tile as the composer chip, so a file looks\n identical before and after sending. */\n .attachment {\n width: 112px;\n height: 112px;\n border-radius: 20px;\n overflow: hidden;\n background: #f2f0f0;\n border: none;\n cursor: zoom-in;\n flex-shrink: 0;\n padding: 0;\n }\n\n .attachment img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n /* Non-image attachment in a sent message — file-type label above the filename. */\n .attachment--doc {\n display: flex;\n flex-direction: column;\n padding: 16px 14px;\n box-sizing: border-box;\n text-align: left;\n }\n\n /* Opens the previewer on click — same affordance as the composer's doc chip. */\n .attachment--openable {\n cursor: pointer;\n }\n\n .attachment--openable:hover {\n background: #dfdddd;\n }\n\n .attachment__type {\n font-size: 13px;\n line-height: 1.2;\n color: #444746;\n text-transform: uppercase;\n flex-shrink: 0;\n }\n\n .attachment__name {\n margin-top: auto;\n font-size: 13px;\n line-height: 1.25;\n color: #000;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n }\n\n /* Skill menu (opened by typing '/'). Fixed + JS-positioned above the\n composer, following the krubble select-field dropdown pattern. */\n .skill-menu {\n position: fixed;\n z-index: 10000;\n background: white;\n border: 1px solid #9ba7b6;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n /* max-height is set dynamically to the space above the composer. */\n }\n\n /* Floating mode is a compact card — use a lighter shadow and softer border. */\n :host(:not([variant='inline'])) .skill-menu {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n border-color: #b0b0b0;\n }\n\n .skill-menu__list {\n list-style: none;\n margin: 0;\n padding: 8px 0;\n overflow-y: auto;\n }\n\n .skill-menu__item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n width: 100%;\n padding: 8px 16px;\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font: inherit;\n color: #000000;\n }\n\n\n /* Floating mode is a compact card — tighten name/description spacing. */\n :host(:not([variant='inline'])) .skill-menu__item {\n gap: 1px;\n }\n\n .skill-menu__name {\n font-weight: 500;\n }\n\n /* Floating mode is a compact card — shrink the skill name a touch. */\n :host(:not([variant='inline'])) .skill-menu__name {\n font-size: 13px;\n }\n\n .skill-menu__desc {\n font-size: 12px;\n color: #000000;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .skill-menu__actions {\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n border-bottom: 1px solid #eee;\n flex-shrink: 0;\n }\n\n .skill-menu__action {\n display: flex;\n flex-direction: column;\n gap: 2px;\n width: 100%;\n padding: 6px 16px;\n background: transparent;\n border: none;\n text-align: left;\n cursor: pointer;\n font: inherit;\n font-size: 13px;\n color: var(--kr-chatbot-primary);\n font-weight: 500;\n }\n\n /* Secondary line on an attach action (e.g. \"reads these files\") — muted,\n not the primary accent, so it reads as a hint under the action label. */\n .skill-menu__action .skill-menu__desc {\n font-weight: 400;\n color: #6b7280;\n }\n\n /* Highlight (keyboard) and hover (mouse) are independent — either shades the\n row. Declared after the base rules so it wins the cascade for both the\n action buttons and the skill items. */\n .skill-menu__action.skill-menu__item--highlighted,\n .skill-menu__item.skill-menu__item--highlighted,\n .skill-menu__action:hover,\n .skill-menu__item:hover {\n background: #f3f4f6;\n }\n\n /* Browse-all dialog body. Owns the height so the dialog is the same size on\n every tab; the search is fixed and the card grid flexes/scrolls to fill. */\n .skill-browse {\n display: flex;\n flex-direction: column;\n height: 70vh;\n }\n\n .skill-browse kr-text-field {\n display: block;\n margin: 20px 20px 16px;\n flex-shrink: 0;\n }\n\n .skill-browse kr-tab-group {\n flex: 1;\n min-height: 0;\n }\n\n /* The grid is the scroller and spans the full width, so its scrollbar sits\n flush against the dialog edge; padding-right insets the cards from it. */\n .skill-browse__grid {\n height: 100%;\n overflow-y: auto;\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-auto-rows: min-content;\n align-content: start;\n gap: 12px;\n padding: 16px 20px 20px;\n }\n\n .skill-card {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n text-align: left;\n cursor: pointer;\n font: inherit;\n color: #000000;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n\n .skill-card:hover {\n border-color: var(--kr-chatbot-primary);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n\n /* A Kodaris-tab card the user can't invoke — not in their roles, or not installed\n here yet. Clicking it does nothing, so it drops the pointer cursor and the hover\n highlight. The Install button inside keeps its own pointer cursor. */\n .skill-card--unavailable {\n cursor: default;\n }\n\n .skill-card--unavailable:hover {\n border-color: #e5e7eb;\n box-shadow: none;\n }\n\n /* Marks a globally-published skill listed on the Your Org tab — only happens on\n kodaris.com, which has no Kodaris tab for its own published skills. */\n .skill-card__badge {\n align-self: flex-start;\n padding: 2px 8px;\n border-radius: 10px;\n background: #f3f4f6;\n font-size: 11px;\n font-weight: 600;\n color: #000000;\n }\n\n /* Footer row on global skill cards: install button on the left, price on the\n right. margin-top:auto pins it to the bottom so cards in a row align their\n footers regardless of description length. Negative horizontal margins\n (matching the card's 14px padding) pull the top border out to the full\n card width; the content is re-padded horizontally to stay inset. */\n .skill-card__footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-top: 8px;\n margin-left: -14px;\n margin-right: -14px;\n padding: 14px 14px 0;\n border-top: 1px solid #e5e7eb;\n }\n\n .skill-card__price {\n font-size: 13px;\n font-weight: 600;\n color: #000000;\n }\n\n .skill-card__name {\n font-weight: 600;\n }\n\n .skill-card__desc {\n font-size: 12px;\n color: #000000;\n /* Clamp to 3 lines so a long description doesn't make one card tower over\n its row-mates in the grid. */\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .skill-browse__empty {\n height: 100%;\n padding: 32px;\n text-align: center;\n color: #000000;\n }\n\n /* Composer attachment chips (pre-send) */\n .composer-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 6px 10px;\n }\n\n /* Every attachment — image or document — is the same square tile, so a mixed\n row reads as one uniform set. */\n .chip {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 112px;\n height: 112px;\n border-radius: 20px;\n overflow: hidden;\n background: #f2f0f0;\n flex-shrink: 0;\n transition: background 0.28s ease;\n }\n\n .chip--doc {\n cursor: pointer;\n }\n\n .chip--doc:hover {\n background: #dfdddd;\n }\n\n /* The preview body — an image fills the tile; a document shows its file-type\n label above the filename, both left-aligned. */\n .chip-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: 16px 14px;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n /* An image fills the whole tile, so it needs no padding around it. */\n .chip-body--image {\n padding: 0;\n }\n\n .chip img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n /* File-type label (PDF, XLSX, …) — sits at the top of the tile. */\n .chip-type {\n font-size: 13px;\n line-height: 1.2;\n color: #444746;\n text-transform: uppercase;\n flex-shrink: 0;\n }\n\n /* Filename — pinned to the bottom of the tile, wrapping to at most three\n lines before it ellipsizes. */\n .chip-name {\n margin-top: auto;\n font-size: 13px;\n line-height: 1.25;\n color: #000;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n }\n\n /* Remove button — a bare X in the tile's top-right corner, revealed only when\n the tile (or the button itself) is hovered or keyboard-focused. */\n .chip-remove {\n position: absolute;\n /* Inset matches .chip-body's padding so the X sits the same distance from\n the right edge as the file-type label does from the left. */\n top: 14px;\n right: 14px;\n width: 15px;\n height: 15px;\n border: none;\n background: none;\n color: #444746;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n line-height: 1;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.28s ease;\n }\n\n .chip:hover .chip-remove,\n .chip-remove:focus-visible {\n opacity: 1;\n }\n\n .chip-remove:hover {\n color: #000;\n }\n\n .chip-remove svg {\n width: 15px;\n height: 15px;\n }\n\n /* Drag-and-drop overlay */\n .drop-overlay {\n position: absolute;\n inset: 0;\n z-index: 20;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n gap: 10px;\n /* Frosted, mostly-opaque surface so the chat content behind is masked\n and doesn't clash with the overlay label. */\n background: rgba(255, 255, 255, 0.92);\n backdrop-filter: blur(3px);\n border: 2px dashed var(--kr-chatbot-primary);\n border-radius: 16px;\n color: var(--kr-chatbot-primary);\n font-weight: 600;\n font-size: 15px;\n pointer-events: none;\n }\n\n .drop-overlay svg {\n width: 32px;\n height: 32px;\n }\n\n `;\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"send\", void 0);\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"load\", void 0);\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"messages\", void 0);\n__decorate([\n property({ type: String })\n], KRChatbot.prototype, \"label\", void 0);\n__decorate([\n property({ type: String })\n], KRChatbot.prototype, \"placeholder\", void 0);\n__decorate([\n property({\n type: Boolean,\n reflect: true\n })\n], KRChatbot.prototype, \"opened\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'hide-toggle',\n reflect: true\n })\n], KRChatbot.prototype, \"hideToggle\", void 0);\n__decorate([\n property({\n type: String,\n reflect: true\n })\n], KRChatbot.prototype, \"variant\", void 0);\n__decorate([\n property({\n type: Number,\n attribute: 'conversation-id',\n reflect: true\n })\n], KRChatbot.prototype, \"conversationId\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_inputValue\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isStreaming\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_error\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_conversationTitle\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_contextWarning\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_contextLimitReached\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_contextLimitMessage\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_pendingActions\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_confirmationHighlighted\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_confirmationInFlight\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_telemetry\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_iterationLog\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_cacheCheckpoints\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_drawerOpen\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_drawerView\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_conversations\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_conversationsLoading\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetail\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetailCopied\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetailInputOpen\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetailOutputOpen\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_drawerWidth\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDrawerResizing\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_pendingConversationFiles\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDraggingFile\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillMenuOpened\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillQuery\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_orgSkills\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_globalSkills\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_invocableSkills\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_suggestedActions\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_aiFrameworkConfig\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillHighlighted\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_copiedIndex\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillBrowseOpened\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillBrowseSource\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillBrowseQuery\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDictating\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_mode\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_modeMenuOpened\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_showTools\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_showToolInputs\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_showConfirmationInput\", void 0);\n__decorate([\n query('.panel')\n], KRChatbot.prototype, \"_panelEl\", void 0);\n__decorate([\n query('.messages')\n], KRChatbot.prototype, \"_messagesEl\", void 0);\n__decorate([\n query('.input')\n], KRChatbot.prototype, \"_inputEl\", void 0);\n__decorate([\n query('.file-input')\n], KRChatbot.prototype, \"_fileInputEl\", void 0);\n__decorate([\n query('.input-wrapper')\n], KRChatbot.prototype, \"_inputWrapperEl\", void 0);\n__decorate([\n query('.skill-menu')\n], KRChatbot.prototype, \"_skillMenuEl\", void 0);\n__decorate([\n query('.drawer__body')\n], KRChatbot.prototype, \"_drawerBodyEl\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-chatbot')) {\n customElements.define('kr-chatbot', KRChatbot);\n}\n//# sourceMappingURL=chatbot.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { KRContextMenu, KRDialog } from '@kodaris/krubble-components';\nimport { KRHttp } from '@kodaris/krubble-http';\nimport { KRNavItemEdit } from './scaffold/nav-item-edit.js';\n// Registers <kr-chatbot>. Only mounted in local dev (see connectedCallback) to mirror the\n// floating AI assistant the Operations shell injects in production — apps run standalone in\n// dev with no shell, so the scaffold provides it there.\nimport './chatbot.js';\n/**\n * Application shell component with nav drawer and main content area.\n *\n * ## Features\n * - Collapsible navigation drawer with hierarchical items (groups and items)\n * - User profile display in footer with customization menu\n * - Edit mode for customizing navigation (rename, reorder, hide items, add custom items)\n * - Drag and drop reordering in edit mode\n * - Persistence of customizations via preference API (global/organization level)\n *\n * ## Nav Customization\n * Users can customize the navigation by clicking their profile and selecting\n * \"Customize Navigation\". This enters edit mode where users can:\n * - Right-click items to edit label, icon, or visibility\n * - Right-click to add new items above/below existing items\n * - Drag and drop to reorder items or move them between groups\n *\n * Customizations are stored globally and apply to all users.\n *\n * ## Preference Storage\n * Preferences are stored as JSON with the following structure:\n * ```json\n * {\n * \"nav\": {\n * \"itemId\": { \"label\": \"Custom Label\", \"icon\": \"...\", \"active\": true, \"order\": 0 },\n * \"custom-123\": { \"type\": \"item\", \"label\": \"New Item\", \"url\": \"/path\", ... }\n * }\n * }\n * ```\n *\n * The `nav` object is a delta - it only contains overrides for existing items\n * or definitions for custom items (prefixed with \"custom-\").\n *\n * ## API Endpoints Used\n * - GET `/api/system/preference/json/scaffold?global=true` - load preferences\n * - POST `/api/system/preference/json/scaffold?global=true` - create new preference\n * - PUT `/api/system/preference/json/scaffold/{uuid}?global=true` - update existing preference\n *\n * @slot - The main content\n *\n * @property {string} logo - URL for the logo image\n * @property {string} label - Title text to display instead of logo\n * @property {'light'|'dark'} scheme - Color scheme: 'light' (default) or 'dark'\n * @property {KRNavItem[]} nav - Navigation items as JSON array\n * @property {KRUser} user - User profile data\n * @property {boolean} navEnabled - Whether to show the nav drawer (menu toggle remains visible when false)\n * @property {'employee'|'customer'} user-type - User type. Customers skip all `/api/system` calls since that endpoint is employee-only. Defaults to 'employee'.\n *\n *\n * TODO\n * - Don't hardcode breadcrumbs\n * - Look at renderNormalFooter and renderEditFooter and see if that is what we want to do\n */\nexport class KRScaffold extends LitElement {\n constructor() {\n super();\n /**\n * Default icon for nav items without an icon (shown at top level)\n */\n this.defaultNavItemIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>';\n this.originalFetch = null;\n this.originalXhrOpen = null;\n this.navItemDragPreview = null;\n this.navItemDragStartY = 0;\n this.isNavItemDragging = false;\n this.navItemDragExpandTimeout = null;\n this.navInitialized = false;\n this.logo = '';\n this.label = '';\n /**\n * URL to navigate to when clicking the logo/title. Defaults to '/'.\n */\n this.homeUrl = '/';\n this.scheme = 'light';\n this.nav = [];\n this.navIconsDisplayed = false;\n this.navExpanded = false;\n this.user = null;\n /**\n * Whether to show the subbar with menu toggle\n */\n this.subbar = false;\n /**\n * Whether to hide the navigation drawer.\n * Menu toggle button remains visible and emits menu-click events.\n */\n this.navEnabled = true;\n /**\n * User type. Set to 'customer' to skip all /api/system calls — customers don't have access to that endpoint.\n */\n this.userType = 'employee';\n /**\n * Breadcrumbs to display in the subbar\n */\n this.breadcrumbs = [];\n // True when the app runs on its own Vite dev server (localhost, but NOT port 8080 — that's the\n // backend serving the real Operations shell, which already provides this chrome). Only then does\n // the scaffold stand in with the dev app-bar/footer + floating AI assistant, so we never double\n // it up with the production shell.\n this.isDev = window.location.hostname === 'localhost' && window.location.port !== '8080';\n this.navItemsExpanded = new Set();\n this.navQuery = '';\n this.activeNavItemId = null;\n this.isNavScrolled = false;\n this.isNavOpened = localStorage.getItem('kr-scaffold-nav-opened') !== 'false';\n this.isEditing = false;\n this.isUserMenuOpen = false;\n this.pref = { nav: {} };\n this.draggedNavItemId = null;\n this.navItemDropTargetId = null;\n this.navItemDropPosition = 'above';\n this.pendingRequests = 0;\n this.boundHandleMouseMove = this.handleMouseMove.bind(this);\n this.boundHandleMouseUp = this.handleMouseUp.bind(this);\n }\n connectedCallback() {\n super.connectedCallback();\n this.installFetchInterceptor();\n // Dev only: mount the floating chatbot on document.body with the same id the production\n // shell gives its <kr-chatbot> (see operationsAppPortalWrapperIndex.ejs). It must live in\n // light DOM, not this template: apps reach it with document.getElementById('k-ai-chatbot')\n // to hand it prompts (KRChatbot.prompt), and an element inside this shadow root would be\n // invisible to that lookup. Same id in both places means apps need no dev/prod branch.\n if (this.isDev && !document.getElementById('k-ai-chatbot')) {\n const chatbot = document.createElement('kr-chatbot');\n chatbot.id = 'k-ai-chatbot';\n chatbot.hideToggle = true;\n document.body.appendChild(chatbot);\n }\n }\n // Attributes are not reflected into properties until after the first update,\n // so loadPref() must run here (not connectedCallback) for user-type to be set.\n firstUpdated() {\n this.loadPref();\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('nav') && this.nav.length > 0) {\n this.updateActiveNavItem();\n if (this.navExpanded && !this.navInitialized) {\n this.navInitialized = true;\n this.getComputedNav()\n .filter(item => item.type === 'group')\n .forEach(group => this.navItemsExpanded.add(group.id));\n }\n }\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.uninstallFetchInterceptor();\n if (this.isDev) {\n document.getElementById('k-ai-chatbot')?.remove();\n }\n }\n /**\n * Installs global interceptors for fetch and XMLHttpRequest to track pending HTTP requests.\n * Updates `pendingRequests` state when requests start/complete.\n */\n installFetchInterceptor() {\n if (this.originalFetch) {\n return;\n }\n const scaffold = this;\n // Intercept fetch\n this.originalFetch = window.fetch.bind(window);\n const originalFetch = this.originalFetch; // Capture in local scope to avoid null reference after uninstall\n window.fetch = function (...args) {\n scaffold.pendingRequests++;\n return originalFetch(...args).finally(() => {\n scaffold.pendingRequests--;\n });\n };\n // Intercept XMLHttpRequest\n this.originalXhrOpen = XMLHttpRequest.prototype.open;\n const originalXhrOpen = this.originalXhrOpen; // Capture in local scope to avoid null reference after uninstall\n XMLHttpRequest.prototype.open = function (method, url, async = true, username, password) {\n scaffold.pendingRequests++;\n this.addEventListener('loadend', () => {\n scaffold.pendingRequests--;\n }, { once: true });\n return originalXhrOpen.call(this, method, url, async, username, password);\n };\n }\n /**\n * Restores the original fetch and XMLHttpRequest functions.\n */\n uninstallFetchInterceptor() {\n if (this.originalFetch) {\n window.fetch = this.originalFetch;\n this.originalFetch = null;\n }\n if (this.originalXhrOpen) {\n XMLHttpRequest.prototype.open = this.originalXhrOpen;\n this.originalXhrOpen = null;\n }\n }\n /**\n * Resolves a navigation URL by prepending the base href.\n *\n * This method is used for:\n * 1. Setting href attributes on anchor elements (so Cmd/Ctrl+click opens correct URL in new tab)\n * 2. Comparing URLs with window.location.pathname in updateActiveNavItem()\n *\n * The original item.url is kept intact (without base href) and passed to Angular\n * via the nav-item-click event. Angular Router expects paths relative to base,\n * so it handles the base href internally.\n *\n * Example with base href \"/operations/\":\n * - item.url = \"/settings\" (used for Angular routing)\n * - resolveUrl(item) = \"/operations/settings\" (used for href and URL comparison)\n */\n resolveUrl(item) {\n if (!item.url) {\n return '#';\n }\n // External URLs - return as-is\n if (item.external) {\n return item.url;\n }\n // Remove leading slash from url if present, then combine with base\n let path = item.url;\n if (item.url.startsWith('/')) {\n path = item.url.slice(1);\n }\n const baseHref = document.querySelector('base')?.getAttribute('href') || '/';\n if (baseHref.endsWith('/')) {\n return baseHref + path;\n }\n return baseHref + '/' + path;\n }\n // =========================================================================\n // Navigation Data\n // =========================================================================\n /**\n * Returns the computed navigation as a flat array with preferences applied.\n *\n * Transforms the hierarchical `nav` property into a flat list where each item\n * has a `parentId` reference instead of nested `children`. Merges user\n * preference overrides (label, icon, url, active, order, parentId) and\n * includes any custom items added via the edit dialog.\n *\n * @returns Flat array of nav items with preferences applied\n */\n getComputedNav() {\n const result = [];\n this.nav.forEach((item, index) => {\n const override = this.pref.nav[item.id];\n result.push({\n ...item,\n ...override,\n order: override?.order ?? item.order ?? index,\n parentId: override?.parentId ?? null,\n });\n // Add children if group\n if (item.type === 'group' && item.children) {\n item.children.forEach((child, childIndex) => {\n const childOverride = this.pref.nav[child.id];\n let parentId = item.id;\n if (childOverride?.parentId !== undefined) {\n parentId = childOverride.parentId;\n }\n result.push({\n ...child,\n ...childOverride,\n order: childOverride?.order ?? child.order ?? childIndex,\n parentId,\n });\n });\n }\n });\n // Add custom items from pref\n Object.entries(this.pref.nav).forEach(([id, item]) => {\n if (id.startsWith('custom') && item.type && item.label) {\n result.push({\n id,\n type: item.type,\n label: item.label,\n icon: item.icon,\n url: item.url,\n active: item.active,\n order: item.order ?? result.length,\n parentId: item.parentId ?? null,\n });\n }\n });\n return result;\n }\n /**\n * Returns nav items for a given parent, filtered and sorted for rendering.\n *\n * Filters the computed nav to items matching the parentId, sorts by order,\n * hides inactive items in normal mode, and applies the search query filter.\n * Groups are shown if their label matches or if they have matching children.\n *\n * @param parentId - The parent ID to filter by (null for top-level items)\n * @returns Filtered and sorted nav items ready for rendering\n */\n getNavItemChildren(parentId) {\n let items = this.getComputedNav()\n .filter(item => item.parentId === parentId)\n .sort((a, b) => a.order - b.order);\n // In normal mode, filter out hidden items\n if (!this.isEditing) {\n items = items.filter(item => item.active !== false);\n }\n // Apply search filter\n if (this.navQuery) {\n const query = this.navQuery.toLowerCase();\n const allItems = this.getComputedNav();\n // If we're getting children of a group, check if parent group name matches query\n // If so, show all children without filtering\n if (parentId !== null) {\n const parentGroup = allItems.find(item => item.id === parentId);\n if (parentGroup?.label.toLowerCase().includes(query)) {\n return items; // Show all children when group name matches\n }\n }\n items = items.filter(item => {\n if (item.type === 'group') {\n // Show group if its label matches OR if it has matching children\n return item.label.toLowerCase().includes(query) || allItems.some(child => child.parentId === item.id &&\n child.active !== false &&\n child.label.toLowerCase().includes(query));\n }\n // Show item if its label matches\n return item.label.toLowerCase().includes(query);\n });\n }\n return items;\n }\n // =========================================================================\n // Navigation Search\n // =========================================================================\n /**\n * Handles search input changes for filtering nav items.\n *\n * When a search query is entered, automatically expands any groups that\n * contain matching children so users can see the results. When the search\n * is cleared, collapses all groups back to their default state.\n *\n * @param e - The input event from the search field\n */\n handleNavQueryChange(e) {\n this.navQuery = e.target.value;\n // Expand all groups when searching so matching children are visible\n // (groups without matching children won't be rendered anyway)\n if (this.navQuery) {\n this.getComputedNav().forEach(item => {\n if (item.type === 'group') {\n this.navItemsExpanded.add(item.id);\n }\n });\n }\n else {\n // Collapse all when search is cleared\n this.navItemsExpanded.clear();\n }\n }\n /**\n * Clears the search query.\n */\n handleNavQueryClear() {\n this.navQuery = '';\n this.navItemsExpanded.clear();\n }\n // =========================================================================\n // Navigation Interaction\n // =========================================================================\n handleMenuClick() {\n this.isNavOpened = !this.isNavOpened;\n localStorage.setItem('kr-scaffold-nav-opened', String(this.isNavOpened));\n }\n // Dev only: the footer \"AI Assistant\" button opens/closes the floating chatbot, mirroring how\n // the production shell drives its own hide-toggle chatbot from the footer.\n handleDevChatClick() {\n document.getElementById('k-ai-chatbot')?.toggle();\n }\n /**\n * Handles click on the nav header (logo/title) to navigate home.\n * Dispatches a nav-item-click event so Angular can intercept and route.\n */\n handleNavHeaderClick() {\n // Clear active state since we're going home\n this.activeNavItemId = null;\n const navEvent = new CustomEvent('nav-item-click', {\n detail: { item: { url: this.homeUrl } },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(navEvent);\n // If no listener prevented default, navigate natively\n if (!navEvent.defaultPrevented) {\n window.location.href = this.homeUrl;\n }\n }\n /**\n * Handles scroll on nav content to show/hide header shadow.\n */\n handleNavScroll(e) {\n this.isNavScrolled = e.target.scrollTop > 0;\n }\n /**\n * Expand a nav group by id. Public so consumers can keep a group open after\n * adding it dynamically — the scaffold only auto-expands groups once at startup,\n * so a group added later (e.g. an async \"Recent\" list) would otherwise stay\n * collapsed. Idempotent; a no-op if the group is already expanded.\n */\n expandNavGroup(groupId) {\n if (this.navItemsExpanded.has(groupId)) {\n return;\n }\n this.navItemsExpanded.add(groupId);\n this.requestUpdate();\n }\n /**\n * Handles click events on navigation items.\n *\n * For groups, toggles the expanded/collapsed state.\n * For items, dispatches a cancelable `nav-item-click` custom event.\n *\n * If a listener calls `preventDefault()` on the custom event, native browser\n * navigation is prevented. Otherwise, the default `<a href>` navigation\n * proceeds normally.\n *\n * The `@krubble/angular` package provides `KRScaffoldDirective` which\n * automatically listens for this event and handles navigation using\n * Angular's router. Import `KrubbleModule` in your Angular app to enable\n * SPA navigation without page reloads.\n *\n * @param e - The original click event\n * @param item - The nav item that was clicked\n */\n handleNavItemClick(e, item) {\n if (item.type === 'group') {\n // Animate the group's height with the Web Animations API. Collapsing removes\n // `nav-group--expanded` only once the animation finishes; expanding adds it\n // up front so there's a height to animate from.\n const navItem = this.shadowRoot?.querySelector(`.nav-item[data-id=\"${item.id}\"]`);\n const groupEl = navItem?.nextElementSibling;\n if (!groupEl) {\n return;\n }\n if (this.navItemsExpanded.has(item.id)) {\n this.navItemsExpanded.delete(item.id);\n groupEl.animate([\n { height: `${groupEl.scrollHeight}px` },\n { height: '0px' }\n ], {\n duration: 300,\n easing: 'ease-in-out'\n }).onfinish = () => {\n groupEl.classList.remove('nav-group--expanded');\n };\n }\n else {\n this.navItemsExpanded.add(item.id);\n groupEl.classList.add('nav-group--expanded');\n groupEl.animate([\n { height: '0px' },\n { height: `${groupEl.scrollHeight}px` }\n ], {\n duration: 300,\n easing: 'ease-in-out'\n });\n }\n this.requestUpdate();\n }\n else {\n // Allow Ctrl/Cmd+click and middle-click to open in new tab without SPA navigation\n if (e.ctrlKey || e.metaKey || e.button === 1) {\n return;\n }\n // Set active item immediately on click for instant visual feedback\n this.activeNavItemId = item.id;\n const navEvent = new CustomEvent('nav-item-click', {\n detail: { item },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(navEvent);\n // If a listener called preventDefault(), prevent the native navigation\n // (e.g., SPA router handles navigation)\n if (navEvent.defaultPrevented) {\n e.preventDefault();\n }\n }\n }\n /**\n * Updates the active nav item highlight based on the current URL.\n *\n * Compares the first path segment of `window.location.pathname` with each\n * nav item's URL to find a match. When found, highlights that item and\n * expands its parent group if nested.\n *\n * Called automatically by `KRScaffoldDirective` on Angular route changes.\n */\n updateActiveNavItem() {\n const currentPath = window.location.pathname;\n const allItems = this.getComputedNav().filter(item => item.type === 'item' && item.url);\n // Find the best match - prefer longer/more specific URL matches\n let activeItem = null;\n let longestMatch = 0;\n for (const item of allItems) {\n // Use resolveUrl because currentPath includes base href\n const url = this.resolveUrl(item);\n if (currentPath.startsWith(url) && url.length > longestMatch) {\n activeItem = item;\n longestMatch = url.length;\n }\n }\n if (activeItem) {\n this.activeNavItemId = activeItem.id;\n if (activeItem.parentId) {\n this.navItemsExpanded.add(activeItem.parentId);\n }\n }\n else {\n this.activeNavItemId = null;\n }\n }\n // =========================================================================\n // Navigation Customization\n // =========================================================================\n handleEditCancel() {\n this.isEditing = false;\n // Reload to revert changes\n this.loadPref();\n }\n handlePrefReset() {\n this.pref.nav = {};\n }\n handlePrefSave() {\n if (this.userType === 'customer') {\n return;\n }\n let url = '/api/system/preference/json/scaffold?global=true';\n let method = 'POST';\n if (this.pref.uuid) {\n url = `/api/system/preference/json/scaffold/${this.pref.uuid}?global=true`;\n method = 'PUT';\n }\n KRHttp.fetch({\n url,\n method,\n body: JSON.stringify({ nav: this.pref.nav }),\n })\n .then((response) => response.json())\n .then((data) => {\n this.pref = data.data;\n this.isEditing = false;\n })\n .catch((error) => {\n console.error('Failed to save nav customizations:', error);\n });\n }\n loadPref() {\n if (this.userType === 'customer') {\n return;\n }\n KRHttp.fetch({\n url: '/api/system/preference/json/scaffold?global=true',\n method: 'GET',\n })\n .then((response) => response.json())\n .then((data) => {\n const pref = data?.data?.[0];\n if (pref) {\n this.pref = pref;\n }\n })\n .catch(() => {\n // No preferences saved yet\n });\n }\n handleNavItemContextMenu(e, item) {\n if (!this.isEditing) {\n return;\n }\n e.preventDefault();\n KRContextMenu.open({\n x: e.clientX,\n y: e.clientY,\n items: [\n {\n id: 'edit',\n label: 'Edit Item'\n },\n {\n id: 'divider-1',\n label: '',\n divider: true\n },\n {\n id: 'add-above',\n label: 'Add Item Above'\n },\n {\n id: 'add-below',\n label: 'Add Item Below'\n },\n ],\n }).then((result) => {\n if (!result) {\n return;\n }\n switch (result.id) {\n case 'edit':\n this.openNavItemEdit(item);\n break;\n case 'add-above':\n this.addNavItem(item, 'above');\n break;\n case 'add-below':\n this.addNavItem(item, 'below');\n break;\n }\n });\n }\n /**\n * Opens the nav item edit dialog for customizing an item's properties.\n *\n * Opens `KRNavItemEdit` dialog pre-populated with the item's current values.\n * When the user saves, merges the result into the nav delta to persist\n * customizations like label, icon, URL, and visibility.\n *\n * @param item - The nav item to edit\n */\n openNavItemEdit(item) {\n KRDialog.open(KRNavItemEdit, { data: item }).afterClosed().then((res) => {\n const result = res;\n if (!result) {\n return;\n }\n if (!this.pref.nav[item.id]) {\n this.pref.nav[item.id] = {};\n }\n this.pref.nav[item.id] = {\n ...this.pref.nav[item.id],\n ...result\n };\n this.requestUpdate();\n });\n }\n /**\n * Adds a new custom nav item relative to an existing item.\n *\n * Creates a placeholder item in the nav delta, shifts existing siblings\n * to make room, then opens the edit dialog so the user can configure\n * the new item's label, icon, and URL.\n *\n * @param targetItem - The existing item to position relative to\n * @param position - Whether to insert 'above' or 'below' the target item\n */\n addNavItem(targetItem, position) {\n const customId = `custom-${Date.now()}`;\n const siblings = this.getComputedNav()\n .filter(i => i.parentId === targetItem.parentId)\n .sort((a, b) => a.order - b.order);\n const targetIndex = siblings.findIndex(i => i.id === targetItem.id);\n let newOrder;\n if (position === 'above') {\n newOrder = targetIndex;\n }\n else {\n newOrder = targetIndex + 1;\n }\n // Shift existing items to make room for the new item\n siblings.forEach((sibling, index) => {\n if (index >= newOrder) {\n if (!this.pref.nav[sibling.id]) {\n this.pref.nav[sibling.id] = {};\n }\n this.pref.nav[sibling.id].order = index + 1;\n }\n });\n // Add the new item and open edit dialog\n const newItem = {\n id: customId,\n type: 'item',\n label: 'New Item',\n order: newOrder,\n parentId: targetItem.parentId,\n active: true,\n };\n this.pref.nav[customId] = newItem;\n this.requestUpdate();\n this.openNavItemEdit(newItem);\n }\n // =========================================================================\n // Navigation Drag & Drop\n // =========================================================================\n /**\n * Initiates a potential drag operation when mouse is pressed on a nav item.\n *\n * Only active in edit mode. Records the starting position and sets up\n * document-level listeners for mouse move and mouse up events. The actual\n * drag doesn't start until the mouse moves more than 5 pixels.\n *\n * @param e - The mouse event\n * @param item - The nav item being pressed\n */\n handleNavItemMouseDown(e, item) {\n if (!this.isEditing) {\n return;\n }\n e.preventDefault();\n this.draggedNavItemId = item.id;\n this.navItemDragStartY = e.clientY;\n this.isNavItemDragging = false;\n document.addEventListener('mousemove', this.boundHandleMouseMove);\n document.addEventListener('mouseup', this.boundHandleMouseUp);\n }\n /**\n * Handles mouse movement during a nav item drag operation.\n *\n * Initiates dragging after the mouse moves more than 5 pixels (to distinguish\n * from clicks), creates a floating preview element that follows the cursor,\n * and updates the drop target indicator based on mouse position.\n *\n * @param e - The mouse event\n */\n handleMouseMove(e) {\n if (!this.draggedNavItemId) {\n return;\n }\n // Start dragging after moving a few pixels (to distinguish from clicks)\n if (!this.isNavItemDragging && Math.abs(e.clientY - this.navItemDragStartY) > 5) {\n this.isNavItemDragging = true;\n this.classList.add('kr-scaffold--dragging');\n // Create drag preview\n const draggedItem = this.getComputedNav().find(i => i.id === this.draggedNavItemId);\n if (draggedItem) {\n this.navItemDragPreview = document.createElement('div');\n this.navItemDragPreview.className = 'nav-item-drag-preview';\n this.navItemDragPreview.textContent = draggedItem.label;\n this.navItemDragPreview.style.left = `${e.clientX + 10}px`;\n this.navItemDragPreview.style.top = `${e.clientY - 20}px`;\n this.shadowRoot?.appendChild(this.navItemDragPreview);\n }\n }\n if (!this.isNavItemDragging) {\n return;\n }\n // Update preview position\n if (this.navItemDragPreview) {\n this.navItemDragPreview.style.left = `${e.clientX + 10}px`;\n this.navItemDragPreview.style.top = `${e.clientY - 20}px`;\n }\n // Find drop target based on mouse position\n this.updateNavItemDropTarget(e);\n }\n /**\n * Handles the end of a nav item drag operation.\n *\n * Removes document-level mouse listeners, executes the drop if there's a valid\n * target, and cleans up all drag-related state.\n */\n handleMouseUp() {\n document.removeEventListener('mousemove', this.boundHandleMouseMove);\n document.removeEventListener('mouseup', this.boundHandleMouseUp);\n if (this.isNavItemDragging && this.navItemDropTargetId) {\n this.executeNavItemDrop();\n }\n // Reset all drag state\n this.draggedNavItemId = null;\n this.navItemDropTargetId = null;\n this.isNavItemDragging = false;\n this.classList.remove('kr-scaffold--dragging');\n if (this.navItemDragPreview) {\n this.navItemDragPreview.remove();\n this.navItemDragPreview = null;\n }\n this.clearNavItemDragExpandTimeout();\n this.requestUpdate();\n }\n /**\n * Determines where a dragged nav item would be dropped based on mouse position.\n *\n * Loops through all nav items and checks if the mouse is hovering over one.\n * For groups, the item is divided into thirds (above/center/below) where\n * \"center\" means drop into the group. For regular items, it's halves (above/below).\n *\n * Also handles auto-expanding collapsed groups when hovering over their center,\n * and validates drops (e.g., prevents dropping a group into another group).\n *\n * Updates `navItemDropTargetId` and `navItemDropPosition` state which are used to render\n * visual drop indicators in the UI.\n *\n * @param e - The mouse event from dragging\n */\n updateNavItemDropTarget(e) {\n // Get all nav items in shadow DOM\n const navItems = this.shadowRoot?.querySelectorAll('.nav-item[data-id]');\n if (!navItems) {\n return;\n }\n let foundTarget = false;\n navItems.forEach((el) => {\n const rect = el.getBoundingClientRect();\n const itemId = el.getAttribute('data-id');\n if (!itemId || itemId === this.draggedNavItemId) {\n return;\n }\n // Skip if mouse is outside this element\n if (e.clientX < rect.left || e.clientX > rect.right ||\n e.clientY < rect.top || e.clientY > rect.bottom) {\n return;\n }\n const item = this.getComputedNav().find(i => i.id === itemId);\n if (!item) {\n return;\n }\n const y = e.clientY - rect.top;\n let position;\n // Determine drop position based on mouse Y position within the item.\n // Groups are divided into thirds: top=above, middle=center (drop into), bottom=below.\n // Regular items are divided in half: top=above, bottom=below.\n if (item.type === 'group') {\n if (y < rect.height / 3) {\n // Top third - drop above the group\n position = 'above';\n this.clearNavItemDragExpandTimeout();\n }\n else if (y > (rect.height * 2) / 3) {\n // Bottom third - drop below the group\n position = 'below';\n this.clearNavItemDragExpandTimeout();\n }\n else {\n // Middle third - drop into the group (as a child)\n position = 'center';\n // Auto-expand collapsed groups after a delay. The 500ms wait keeps groups\n // from expanding too eagerly when the user is just passing over them, and\n // the check inside confirms they're still on this group's center.\n if (!this.navItemsExpanded.has(item.id) && !this.navItemDragExpandTimeout) {\n this.navItemDragExpandTimeout = window.setTimeout(() => {\n if (this.navItemDropTargetId === item.id && this.navItemDropPosition === 'center') {\n this.navItemsExpanded.add(item.id);\n this.requestUpdate();\n }\n this.navItemDragExpandTimeout = null;\n }, 500);\n }\n }\n }\n else {\n // Regular items only support above/below, not center\n if (y < rect.height / 2) {\n position = 'above';\n }\n else {\n position = 'below';\n }\n this.clearNavItemDragExpandTimeout();\n }\n // Determine what the new parent would be\n let newParentId;\n if (position === 'center') {\n newParentId = item.id;\n }\n else {\n newParentId = item.parentId;\n }\n const draggedItem = this.getComputedNav().find(i => i.id === this.draggedNavItemId);\n // Don't show drop indicator if invalid drop:\n // 1. Can't drop an item into itself (newParentId === draggedNavItemId)\n // 2. Groups can only exist at the top level, so prevent dropping a group into another group (newParentId !== null means it would be nested)\n if (newParentId === this.draggedNavItemId || (draggedItem?.type === 'group' && newParentId !== null)) {\n this.navItemDropTargetId = null;\n this.clearNavItemDragExpandTimeout();\n return;\n }\n // Valid drop target found - store the target item and position (above/below/center)\n // so the UI can render the drop indicator in the correct location\n this.navItemDropTargetId = item.id;\n this.navItemDropPosition = position;\n foundTarget = true;\n });\n // Mouse is not over any valid nav item - clear the drop indicator\n // (e.g., user dragged outside the nav area or over empty space)\n if (!foundTarget) {\n this.navItemDropTargetId = null;\n this.clearNavItemDragExpandTimeout();\n }\n this.requestUpdate();\n }\n /**\n * Cancels the pending auto-expand timeout for nav groups during drag.\n * Called when the user moves away from a group's center or stops dragging.\n */\n clearNavItemDragExpandTimeout() {\n if (this.navItemDragExpandTimeout) {\n clearTimeout(this.navItemDragExpandTimeout);\n this.navItemDragExpandTimeout = null;\n }\n }\n /**\n * Executes the drop operation after a nav item drag completes.\n *\n * Calculates the new position and parent for the dragged item based on\n * the drop target and position (above/below/center). Updates the navDelta\n * with new order values for the dragged item and shifts siblings as needed.\n */\n executeNavItemDrop() {\n if (!this.draggedNavItemId || !this.navItemDropTargetId) {\n return;\n }\n const allItems = this.getComputedNav();\n const draggedItem = allItems.find(i => i.id === this.draggedNavItemId);\n const targetItem = allItems.find(i => i.id === this.navItemDropTargetId);\n if (!draggedItem || !targetItem) {\n return;\n }\n // Determine the new parentId for the dragged item\n let newParentId;\n if (this.navItemDropPosition === 'center' && targetItem.type === 'group') {\n if (targetItem.id === this.draggedNavItemId) {\n return;\n }\n newParentId = targetItem.id;\n }\n else {\n newParentId = targetItem.parentId;\n }\n if (newParentId === this.draggedNavItemId) {\n return;\n }\n // Get siblings in the destination parent\n const siblings = allItems\n .filter(i => i.parentId === newParentId && i.id !== this.draggedNavItemId)\n .sort((a, b) => a.order - b.order);\n const navDelta = this.pref.nav;\n // Calculate the new order\n let newOrder;\n if (this.navItemDropPosition === 'center') {\n // Dropping into a group - place at the end of its children\n if (siblings.length > 0) {\n newOrder = Math.max(...siblings.map(s => s.order)) + 1;\n }\n else {\n newOrder = 0;\n }\n }\n else {\n // Find where the target item is in the sorted siblings list\n const targetIndex = siblings.findIndex(i => i.id === targetItem.id);\n // Determine insert position based on drop position (above/below target)\n if (targetIndex === -1) {\n newOrder = 0;\n }\n else if (this.navItemDropPosition === 'above') {\n newOrder = targetIndex;\n }\n else {\n newOrder = targetIndex + 1;\n }\n // Shift existing siblings to make room for the dropped item.\n // Items at or after the insert position get their order bumped up by 1.\n siblings.forEach((sibling, index) => {\n if (!navDelta[sibling.id]) {\n navDelta[sibling.id] = {};\n }\n if (index >= newOrder) {\n navDelta[sibling.id].order = index + 1;\n }\n else {\n navDelta[sibling.id].order = index;\n }\n });\n }\n // Update the dragged item's position and parent in the delta\n if (!navDelta[this.draggedNavItemId]) {\n navDelta[this.draggedNavItemId] = {};\n }\n navDelta[this.draggedNavItemId].order = newOrder;\n navDelta[this.draggedNavItemId].parentId = newParentId;\n // Persist changes and trigger re-render\n this.pref.nav = navDelta;\n this.requestUpdate();\n }\n // =========================================================================\n // User Menu\n // =========================================================================\n handleUserMenuToggle() {\n this.isUserMenuOpen = !this.isUserMenuOpen;\n }\n handleCustomize() {\n this.isUserMenuOpen = false;\n this.isEditing = true;\n }\n // =========================================================================\n // Rendering\n // =========================================================================\n renderNormalFooter() {\n if (!this.user) {\n return nothing;\n }\n const initials = this.user.name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n // todo - use a reusable menu component\n return html `\n <div class=\"user-menu-container\">\n ${this.isUserMenuOpen ? html `\n <div class=\"user-menu\">\n <button class=\"user-menu__item\" @click=${this.handleCustomize}>\n Customize Navigation\n </button>\n </div>\n ` : nothing}\n <div class=\"user\" @click=${this.handleUserMenuToggle}>\n <div class=\"user__avatar\">\n ${this.user.avatar\n ? html `<img src=${this.user.avatar} alt=${this.user.name} />`\n : initials}\n </div>\n <div class=\"user__info\">\n <div class=\"user__name\">${this.user.name}</div>\n ${this.user.email ? html `<div class=\"user__email\">${this.user.email}</div>` : nothing}\n </div>\n </div>\n </div>\n `;\n }\n // todo - review\n renderEditFooter() {\n return html `\n <div class=\"edit-actions\">\n <button class=\"edit-actions__btn edit-actions__btn--primary\" @click=${this.handlePrefSave}>\n Save\n </button>\n <div class=\"edit-actions__secondary\">\n <button class=\"edit-actions__btn\" @click=${this.handlePrefReset}>\n Reset\n </button>\n <button class=\"edit-actions__btn\" @click=${this.handleEditCancel}>\n Cancel\n </button>\n </div>\n </div>\n `;\n }\n /**\n * Renders a navigation item as either a group or a link.\n *\n * Groups render as expandable `<button>` elements with a chevron indicator and\n * nested children. Items render as `<a>` anchor links with href navigation.\n *\n * Both types support drag-and-drop reordering in edit mode, context menus for\n * customization, and visual indicators for active/hidden/drop-target states.\n *\n * Icons use SVG strings and fall back to `defaultNavItemIcon` when not provided.\n * Icons are only rendered for top-level items, not for children nested within groups.\n *\n * @param item - The flat nav item data to render\n * @param isChild - Whether this item is nested within a group (affects icon rendering)\n * @returns Lit HTML template for the nav item\n */\n renderNavItem(item, isChild = false) {\n if (item.type === 'section') {\n return html `\n <div class=\"nav-section\">${item.label}</div>\n `;\n }\n if (item.type === 'group') {\n const children = this.getNavItemChildren(item.id);\n return html `\n <button\n class=${classMap({\n 'nav-item': true,\n 'nav-item--expanded': this.navItemsExpanded.has(item.id),\n 'nav-item--hidden': this.isEditing && item.active === false,\n 'nav-item--drop-above': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'above',\n 'nav-item--drop-below': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'below',\n 'nav-item--drop-center': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'center',\n })}\n data-id=\"${item.id}\"\n @mousedown=${(e) => this.handleNavItemMouseDown(e, item)}\n @click=${(e) => this.handleNavItemClick(e, item)}\n @contextmenu=${(e) => this.handleNavItemContextMenu(e, item)}\n >\n ${this.navIconsDisplayed ? html `<span class=\"nav-item__icon\">${unsafeHTML(item.icon || this.defaultNavItemIcon)}</span>` : nothing}\n <span class=\"nav-item__label\">${item.label}</span>\n <svg\n class=\"nav-item__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n d=\"M6 9l6 6 6-6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <div class=${classMap({\n 'nav-group': true,\n 'nav-group--expanded': this.navItemsExpanded.has(item.id),\n })}>\n ${children.map((child) => this.renderNavItem(child, true))}\n </div>\n `;\n }\n return html `\n <a\n class=${classMap({\n 'nav-item': true,\n 'nav-item--active': this.activeNavItemId === item.id,\n 'nav-item--hidden': this.isEditing && item.active === false,\n 'nav-item--drop-above': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'above',\n 'nav-item--drop-below': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'below',\n })}\n data-id=\"${item.id}\"\n href=${this.resolveUrl(item)}\n target=${item.external ? '_blank' : nothing}\n @mousedown=${(e) => this.handleNavItemMouseDown(e, item)}\n @click=${(e) => this.handleNavItemClick(e, item)}\n @contextmenu=${(e) => this.handleNavItemContextMenu(e, item)}\n >\n ${this.navIconsDisplayed && !isChild ? html `<span class=\"nav-item__icon\">${unsafeHTML(item.icon || this.defaultNavItemIcon)}</span>` : nothing}\n <span class=\"nav-item__label\">${item.label}</span>\n </a>\n `;\n }\n // todo - don't hardcode breadcrumbs\n render() {\n const topLevelItems = this.getNavItemChildren(null);\n // Use unfiltered count to determine if search should show (so it doesn't disappear while typing)\n const totalTopLevelItems = this.getComputedNav().filter(item => item.parentId === null).length;\n // The scaffold's own chrome (progress bar, subbar, nav + main content).\n const body = html `\n <div class=${classMap({\n 'progress': true,\n 'progress--loading': this.pendingRequests > 0,\n })}>\n <div class=\"progress__track\"></div>\n <div class=\"progress__bar progress__bar--primary\">\n <span class=\"progress__bar-inner\"></span>\n </div>\n <div class=\"progress__bar progress__bar--secondary\">\n <span class=\"progress__bar-inner\"></span>\n </div>\n </div>\n \n ${this.subbar ? html `\n <kr-subbar\n menu\n .breadcrumbs=${this.breadcrumbs}\n @menu-click=${this.handleMenuClick}\n >\n <slot name=\"subbar\"></slot>\n </kr-subbar>\n ` : nothing}\n\n <div class=\"wrapper\">\n ${this.navEnabled ? html `\n <nav class=${classMap({\n 'nav': true,\n 'nav--scrolled': this.isNavScrolled,\n 'nav--opened': !this.subbar || this.isNavOpened,\n })}>\n <div class=\"nav-header\" @click=${this.handleNavHeaderClick}>\n ${this.label\n ? html `<span class=\"nav-title\">${this.label}</span>`\n : this.logo\n ? html `<img\n class=\"nav-logo\"\n src=${this.logo}\n alt=\"Logo\"\n />`\n : nothing}\n </div>\n <div class=\"nav-content\" @scroll=${this.handleNavScroll}>\n ${totalTopLevelItems > 20 ? html `\n <div class=\"nav-search\">\n <div class=\"nav-search__wrapper\">\n <span class=\"nav-search__icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\n </svg>\n </span>\n <input\n class=\"nav-search__input\"\n type=\"text\"\n placeholder=\"Search...\"\n .value=${this.navQuery}\n @input=${this.handleNavQueryChange}\n />\n ${this.navQuery ? html `\n <button class=\"nav-search__clear\" @click=${this.handleNavQueryClear}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n ` : nothing}\n </div>\n </div>\n ` : nothing}\n <div class=\"nav-items\">\n ${topLevelItems.map((item) => this.renderNavItem(item))}\n </div>\n </div>\n <!-- <div class=\"nav-footer\">\n ${this.isEditing ? this.renderEditFooter() : this.renderNormalFooter()}\n </div> -->\n </nav>\n ` : nothing}\n\n <main class=\"main\">\n <slot></slot>\n </main>\n </div>\n `;\n // In production the Operations shell wraps the app with the global app bar + footer and the\n // floating AI assistant. Locally the app runs standalone with none of that, so the scaffold\n // stands in with dev-only chrome. Mirror production exactly: the chatbot's built-in launcher\n // is hidden (hide-toggle) and it's opened from an \"AI Assistant\" button in the footer.\n if (this.isDev) {\n return html `\n <div class=\"dev-header\"></div>\n <div class=\"dev-body\">${body}</div>\n <div class=\"dev-footer\">\n <button class=\"dev-footer__chat\" @click=${this.handleDevChatClick}>\n <span class=\"dev-footer__chat-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M12 2l1.9 5.1L19 9l-5.1 1.9L12 16l-1.9-5.1L5 9l5.1-1.9L12 2zm6 10l.95 2.55L21.5 15.5l-2.55.95L18 19l-.95-2.55L14.5 15.5l2.55-.95L18 12z\"/>\n </svg>\n </span>\n AI Assistant\n </button>\n </div>\n `;\n }\n return body;\n }\n}\nKRScaffold.styles = css `\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n font-size: 14px;\n --kr-scaffold-nav-width: 250px;\n\n /* Default to light scheme */\n --kr-scaffold-nav-bg: #F3F7FC;\n --kr-scaffold-nav-text: #000000;\n --kr-scaffold-nav-text-active: #000000;\n --kr-scaffold-nav-hover: #f3f4f6;\n --kr-scaffold-nav-active-bg: #e5e7eb;\n --kr-scaffold-nav-border: rgb(229, 229, 228);\n --kr-scaffold-nav-divider: #e5e7eb;\n --kr-scaffold-nav-search-bg: #ffffff;\n --kr-scaffold-nav-search-border: #d1d5db;\n }\n\n /* Dark scheme */\n :host([scheme=\"dark\"]) {\n --kr-scaffold-nav-bg: #10172a;\n --kr-scaffold-nav-text: rgb(255 255 255 / 80%);\n --kr-scaffold-nav-text-active: #ffffff;\n --kr-scaffold-nav-hover: rgba(255, 255, 255, 0.05);\n --kr-scaffold-nav-active-bg: rgb(255 255 255 / 12%);\n --kr-scaffold-nav-border: transparent;\n --kr-scaffold-nav-divider: rgba(255, 255, 255, 0.06);\n --kr-scaffold-nav-search-bg: rgba(255, 255, 255, 0.15);\n --kr-scaffold-nav-search-border: rgba(255, 255, 255, 0.3);\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n /* Dev-only bars simulating the production Operations shell chrome (top app bar + footer),\n so an app running standalone on its Vite dev server looks like it does in production.\n In production the real shell wraps the app and these are not rendered. */\n .dev-header {\n height: 48px;\n background: #1a1a2e;\n flex-shrink: 0;\n }\n\n .dev-footer {\n background: #1a1a2e;\n flex-shrink: 0;\n padding: 6px 16px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n /* Matches the production shell's footer \"AI Assistant\" button (green accent on dark). */\n .dev-footer__chat {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 14px;\n color: #beea4e;\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 4px;\n font-family: inherit;\n padding: 4px 8px;\n transition: background 0.15s ease;\n }\n\n .dev-footer__chat:hover {\n background: rgba(255, 255, 255, 0.08);\n }\n\n .dev-footer__chat-icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Holds the scaffold's own chrome between the dev bars; grows to fill the space. */\n .dev-body {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n /* Nav */\n .nav {\n width: var(--kr-scaffold-nav-width);\n background: var(--kr-scaffold-nav-bg);\n color: var(--kr-scaffold-nav-text);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-right: 1px solid var(--kr-scaffold-nav-border);\n transition: margin-left 0.3s ease;\n margin-left: calc(-1 * var(--kr-scaffold-nav-width));\n flex: 1;\n max-width: var(--kr-scaffold-nav-width);\n }\n\n .nav--opened {\n margin-left: 0;\n }\n\n .wrapper {\n display: flex;\n flex: 1;\n min-height: 0;\n max-height: 100%;\n height: 100%;\n }\n\n .nav-header {\n padding: 20px;\n display: flex;\n align-items: center;\n position: relative;\n z-index: 1;\n transition: box-shadow 0.2s ease;\n cursor: pointer;\n }\n\n .nav--scrolled .nav-header {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n }\n\n .nav-logo {\n max-width: 100%;\n height: 32px;\n }\n\n .nav-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--kr-scaffold-nav-text-active);\n letter-spacing: .2px;\n }\n\n .nav-search {\n padding: 4px 0 8px;\n }\n\n .nav-search__wrapper {\n display: flex;\n align-items: center;\n background: var(--kr-scaffold-nav-search-bg);\n border-radius: 8px;\n padding: 0 12px;\n height: 40px;\n gap: 8px;\n border: 1px solid var(--kr-scaffold-nav-search-border);\n transition: all 0.15s ease;\n }\n\n .nav-search__icon {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n opacity: 0.6;\n }\n\n .nav-search__icon svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n }\n\n .nav-search__input {\n flex: 1;\n background: none;\n border: none;\n outline: none;\n color: var(--kr-scaffold-nav-text-active);\n font-size: 13px;\n font-family: inherit;\n min-width: 0;\n }\n\n .nav-search__input::placeholder {\n color: var(--kr-scaffold-nav-text);\n opacity: 0.7;\n }\n\n .nav-search__clear {\n width: 18px;\n height: 18px;\n padding: 0;\n background: none;\n border: none;\n color: var(--kr-scaffold-nav-text);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n transition: opacity 0.15s ease;\n }\n\n .nav-search__clear:hover {\n opacity: 1;\n }\n\n .nav-search__clear svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n }\n\n .nav-content {\n flex: 1;\n overflow-y: auto;\n padding: 0 9px 12px 8px;\n }\n\n .nav-footer {\n padding: 12px;\n border-top: 1px solid var(--kr-scaffold-nav-divider);\n }\n\n .user {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .user:hover {\n background: var(--kr-scaffold-nav-hover);\n }\n\n .user__avatar {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--kr-scaffold-avatar-bg, #beea4e);\n color: var(--kr-scaffold-avatar-text, #10172a);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 600;\n flex-shrink: 0;\n overflow: hidden;\n }\n\n .user__avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .user__info {\n flex: 1;\n min-width: 0;\n }\n\n .user__name {\n font-size: 13px;\n font-weight: 500;\n color: var(--kr-scaffold-nav-text-active);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .user__email {\n font-size: 12px;\n color: var(--kr-scaffold-nav-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .user-menu-container {\n position: relative;\n }\n\n .user-menu {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n margin-bottom: 8px;\n background: var(--kr-scaffold-nav-bg);\n border: 1px solid var(--kr-scaffold-nav-divider);\n border-radius: 8px;\n padding: 4px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);\n }\n\n .user-menu__item {\n display: block;\n width: 100%;\n padding: 10px 12px;\n background: none;\n border: none;\n color: var(--kr-scaffold-nav-text);\n font-size: 13px;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n }\n\n .user-menu__item:hover {\n background: var(--kr-scaffold-nav-hover);\n color: var(--kr-scaffold-nav-text-active);\n }\n\n .user-menu__divider {\n height: 1px;\n background: var(--kr-scaffold-nav-divider);\n margin: 4px 0;\n }\n\n /* Main */\n .main {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n background: transparent;\n display: flex;\n flex-direction: column;\n }\n\n .breadcrumbs {\n height: 32px;\n padding: 0 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n\n .breadcrumbs a {\n color: #6b7280;\n text-decoration: none;\n }\n\n .breadcrumbs a:hover {\n color: #111827;\n text-decoration: underline;\n }\n\n .breadcrumbs__separator {\n color: #d1d5db;\n }\n\n .breadcrumbs__current {\n color: #111827;\n font-weight: 500;\n }\n\n .main__content {\n flex: 1;\n overflow-y: auto;\n }\n\n /* Nav Items */\n .nav-items {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .nav-item {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 12px;\n height: 32px;\n border-radius: 8px;\n color: var(--kr-scaffold-nav-text);\n text-decoration: none;\n cursor: pointer;\n border: none;\n background: none;\n width: 100%;\n text-align: left;\n font-size: 13px;\n font-weight: 400;\n font-family: inherit;\n transition: all 0.15s ease;\n }\n\n .nav-item:hover {\n background: #F3F7FC;\n color: var(--kr-scaffold-nav-text-active);\n }\n\n .nav-item--active,\n .nav-item--active:hover {\n background: #e1e9f6;\n color: #1a2332;\n font-weight: 700;\n }\n\n .nav-item__icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .nav-item__icon svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n }\n\n .nav-item__label {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n letter-spacing: 0.14px;\n }\n\n .nav-item__chevron {\n width: 16px;\n height: 16px;\n transition: transform 0.2s ease;\n transform: rotate(-90deg);\n stroke: currentColor;\n }\n\n .nav-item--expanded .nav-item__chevron {\n transform: rotate(0deg);\n }\n\n .nav-group {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 0;\n }\n\n .nav-group--expanded {\n height: auto;\n }\n\n .nav-group .nav-item {\n padding: 0 12px 0 44px;\n height: 32px;\n font-size: 13px;\n font-weight: 400;\n margin-top: 2px;\n flex-shrink: 0;\n }\n\n .nav-group .nav-item--active,\n .nav-group .nav-item--active:hover {\n font-weight: 700;\n }\n\n .nav-group .nav-item:first-child {\n margin-top: 0;\n }\n\n /* Nav items in groups when icons are hidden */\n :host(:not([nav-icons-displayed])) .nav-group .nav-item {\n padding-left: 24px;\n }\n\n /* Sections */\n .nav-section {\n padding: 16px 12px 8px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.55px;\n color: var(--kr-scaffold-nav-text);\n opacity: 0.6;\n }\n\n .nav-section:first-child {\n padding-top: 0;\n }\n\n /* Edit mode actions */\n .edit-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .edit-actions__btn {\n display: block;\n width: 100%;\n padding: 10px 12px;\n background: var(--kr-scaffold-nav-hover);\n border: none;\n color: var(--kr-scaffold-nav-text);\n font-size: 13px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n }\n\n .edit-actions__btn:hover {\n background: var(--kr-scaffold-nav-active-bg);\n color: var(--kr-scaffold-nav-text-active);\n }\n\n .edit-actions__btn--primary {\n background: #beea4e;\n color: #10172a;\n }\n\n .edit-actions__btn--primary:hover {\n background: #d4f472;\n color: #10172a;\n }\n\n .edit-actions__secondary {\n display: flex;\n gap: 8px;\n }\n\n .edit-actions__secondary .edit-actions__btn {\n flex: 1;\n }\n\n /* Hidden/inactive items in edit mode */\n .nav-item--hidden {\n opacity: 0.4;\n font-style: italic;\n }\n\n .nav-item--hidden:hover {\n opacity: 0.6;\n }\n\n /* Dragging state */\n :host(.kr-scaffold--dragging),\n :host(.kr-scaffold--dragging) * {\n cursor: grabbing;\n user-select: none;\n }\n\n .nav-item-drag-preview {\n position: fixed;\n pointer-events: none;\n z-index: 1000;\n opacity: 0.9;\n background: var(--kr-scaffold-nav-bg);\n border: 1px solid var(--kr-scaffold-nav-divider);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);\n padding: 0 12px;\n height: 40px;\n min-width: 200px;\n display: flex;\n align-items: center;\n gap: 16px;\n color: var(--kr-scaffold-nav-text-active);\n font-size: 13px;\n font-weight: 500;\n }\n\n /* Drop indicator */\n .nav-item--drop-above,\n .nav-item--drop-below,\n .nav-item--drop-center {\n position: relative;\n }\n\n .nav-item--drop-above::before,\n .nav-item--drop-below::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: #beea4e;\n }\n\n .nav-item--drop-above::before {\n top: 0;\n }\n\n .nav-item--drop-below::after {\n bottom: 0;\n }\n\n .nav-item--drop-center {\n background: var(--kr-scaffold-nav-active-bg);\n }\n\n .breadcrumbs {\n height: 32px;\n padding: 0 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n //background: #f9fafb;\n background: #beea4e;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n\n .breadcrumbs a {\n //color: #6b7280;\n color: #10172a;\n font-size: 13px;\n font-weight: 600;\n text-decoration: none;\n }\n\n .breadcrumbs a:hover {\n color: #111827;\n text-decoration: underline;\n }\n\n .breadcrumbs__separator {\n color: #d1d5db;\n }\n\n .breadcrumbs__current {\n color: #111827;\n font-weight: 500;\n }\n\n /* Progress bar */\n .progress {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n overflow-x: hidden;\n z-index: 1000;\n display: none;\n }\n\n .progress--loading {\n display: block;\n }\n\n .progress__track {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 100%;\n background: rgba(190, 234, 78, 0.3);\n }\n\n .progress__bar {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 100%;\n transform-origin: left center;\n }\n\n .progress__bar-inner {\n display: inline-block;\n position: absolute;\n width: 100%;\n height: 100%;\n background: #beea4e;\n }\n\n .progress__bar--primary {\n left: -145.166611%;\n }\n\n .progress--loading .progress__bar--primary {\n animation: progress-primary-translate 2s infinite linear;\n }\n\n .progress--loading .progress__bar--primary .progress__bar-inner {\n animation: progress-primary-scale 2s infinite linear;\n }\n\n .progress__bar--secondary {\n left: -54.888891%;\n }\n\n .progress--loading .progress__bar--secondary {\n animation: progress-secondary-translate 2s infinite linear;\n }\n\n .progress--loading .progress__bar--secondary .progress__bar-inner {\n animation: progress-secondary-scale 2s infinite linear;\n }\n\n @keyframes progress-primary-translate {\n 0% {\n transform: translateX(0);\n }\n 20% {\n animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819);\n transform: translateX(0);\n }\n 59.15% {\n animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);\n transform: translateX(83.67142%);\n }\n 100% {\n transform: translateX(200.611057%);\n }\n }\n\n @keyframes progress-primary-scale {\n 0% {\n transform: scaleX(0.08);\n }\n 36.65% {\n animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1);\n transform: scaleX(0.08);\n }\n 69.15% {\n animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1);\n transform: scaleX(0.661479);\n }\n 100% {\n transform: scaleX(0.08);\n }\n }\n\n @keyframes progress-secondary-translate {\n 0% {\n animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685);\n transform: translateX(0);\n }\n 25% {\n animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);\n transform: translateX(37.651913%);\n }\n 48.35% {\n animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026);\n transform: translateX(84.386165%);\n }\n 100% {\n transform: translateX(160.277782%);\n }\n }\n\n @keyframes progress-secondary-scale {\n 0% {\n animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);\n transform: scaleX(0.08);\n }\n 19.15% {\n animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);\n transform: scaleX(0.457104);\n }\n 44.15% {\n animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);\n transform: scaleX(0.72796);\n }\n 100% {\n transform: scaleX(0.08);\n }\n }\n `;\n__decorate([\n property({ type: String })\n], KRScaffold.prototype, \"logo\", void 0);\n__decorate([\n property({ type: String })\n], KRScaffold.prototype, \"label\", void 0);\n__decorate([\n property({\n type: String,\n attribute: 'home-url'\n })\n], KRScaffold.prototype, \"homeUrl\", void 0);\n__decorate([\n property({\n type: String,\n reflect: true\n })\n], KRScaffold.prototype, \"scheme\", void 0);\n__decorate([\n property({ type: Array })\n], KRScaffold.prototype, \"nav\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'nav-icons-displayed',\n reflect: true\n })\n], KRScaffold.prototype, \"navIconsDisplayed\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'nav-expanded'\n })\n], KRScaffold.prototype, \"navExpanded\", void 0);\n__decorate([\n property({ type: Object })\n], KRScaffold.prototype, \"user\", void 0);\n__decorate([\n property({ type: Boolean })\n], KRScaffold.prototype, \"subbar\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'nav-enabled'\n })\n], KRScaffold.prototype, \"navEnabled\", void 0);\n__decorate([\n property({\n type: String,\n attribute: 'user-type'\n })\n], KRScaffold.prototype, \"userType\", void 0);\n__decorate([\n property({ type: Array })\n], KRScaffold.prototype, \"breadcrumbs\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isDev\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navItemsExpanded\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navQuery\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"activeNavItemId\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isNavScrolled\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isNavOpened\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isEditing\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isUserMenuOpen\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"pref\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"draggedNavItemId\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navItemDropTargetId\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navItemDropPosition\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"pendingRequests\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-scaffold')) {\n customElements.define('kr-scaffold', KRScaffold);\n}\n//# sourceMappingURL=scaffold.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n/**\n * Secondary navigation component for screens within the scaffold.\n * Provides a simple nav drawer for sub-navigation within a page/screen.\n * Typically used when viewing details of a specific entity (e.g., Company, Contact).\n *\n * ## Usage\n * ```html\n * <kr-screen-nav\n * label=\"Acme Corporation\"\n * subLabel=\"Company\"\n * .items=${[\n * { id: 'overview', label: 'Overview', url: '/companies/123/overview' },\n * { id: 'contacts', label: 'Contacts', url: '/companies/123/contacts' },\n * { id: 'activity', label: 'Activity', url: '/companies/123/activity' },\n * ]}\n * activeId=\"overview\"\n * .actions=${[\n * { id: 'edit', label: 'Edit', variant: 'flat' },\n * { id: 'preview', label: 'Preview', href: '/s/companies/123', target: '_blank' },\n * { id: 'archive', label: 'Archive' },\n * { id: 'delete', label: 'Delete' },\n * { id: 'export', label: 'Export' },\n * ]}\n * >\n * <div>Screen content here</div>\n * </kr-screen-nav>\n * ```\n *\n * Actions render in a footer at the bottom of the nav column. With more than\n * `maxVisibleActions` (default 5), the overflow collapses into a \"More\" dropdown.\n * Listen for `action-click` to handle a click: `e.detail.action` is the action id. An action with\n * an `href` renders as a link and navigates on its own; it does not fire `action-click`.\n *\n * @slot - The main screen content\n *\n * @property {string} label - Main label (e.g., entity name like \"Acme Corporation\")\n * @property {string} subLabel - Sub label (e.g., entity type like \"Company\")\n * @property {KRScreenNavItem[]} items - Navigation items as JSON array\n * @property {string} activeId - Currently active item ID\n * @property {KRScreenNavAction[]} actions - Action buttons rendered in the nav footer\n * @property {number} maxVisibleActions - Max inline actions before collapsing into a \"More\" dropdown (default 5)\n *\n * @fires action-click - When an action button (inline or overflow) without an `href` is clicked; detail is `{ action: id }`\n */\nexport class KRScreenNav extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Main label (e.g., entity name like \"Acme Corporation\")\n */\n this.label = '';\n /**\n * Sub label (e.g., entity type like \"Company\")\n */\n this.subLabel = '';\n /**\n * Navigation items\n */\n this.items = [];\n /**\n * Currently active item ID. Auto-detected from the URL by default.\n * Can be set explicitly by the parent to override.\n */\n this.activeId = '';\n /**\n * Action buttons rendered in the nav footer.\n */\n this.actions = [];\n /**\n * Max number of inline action buttons before the overflow collapses into a\n * \"More\" dropdown. When actions exceed this count, the last visible slot is\n * used for the \"More\" button so the total footer button count never exceeds\n * this value.\n */\n this.maxVisibleActions = 5;\n this.handlePopstate = () => {\n this.syncActiveFromUrl();\n };\n }\n connectedCallback() {\n super.connectedCallback();\n // Defer so property bindings (.items) have been applied\n requestAnimationFrame(() => this.syncActiveFromUrl());\n window.addEventListener('popstate', this.handlePopstate);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('popstate', this.handlePopstate);\n }\n /**\n * Handles click events on navigation items.\n *\n * Dispatches a cancelable `nav-item-click` custom event.\n * If a listener calls `preventDefault()` on the custom event, native browser\n * navigation is prevented. Otherwise, the default `<a href>` navigation\n * proceeds normally.\n *\n * The `@krubble/angular` package provides `KRScreenNavDirective` which\n * automatically listens for this event and handles navigation using\n * Angular's router.\n *\n * @param e - The original click event\n * @param item - The nav item that was clicked\n */\n handleNavItemClick(e, item) {\n const navEvent = new CustomEvent('nav-item-click', {\n detail: { item },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(navEvent);\n // If a listener called preventDefault(), prevent the native navigation\n if (navEvent.defaultPrevented) {\n e.preventDefault();\n }\n this.activeId = item.id;\n }\n syncActiveFromUrl() {\n const pathname = window.location.pathname;\n const match = this.items.find((item) => {\n if (!item.url) {\n return false;\n }\n // Absolute URL — exact match\n if (item.url.startsWith('/')) {\n return pathname === item.url;\n }\n // Relative URL — match against the end of the pathname\n return pathname.endsWith('/' + item.url);\n });\n if (match) {\n this.activeId = match.id;\n }\n }\n handleActionClick(e, action) {\n // A link action navigates on its own through the kr-button's anchor; it doesn't fire action-click.\n if (action.href) {\n return;\n }\n this.dispatchEvent(new CustomEvent('action-click', {\n detail: { action: action.id },\n bubbles: true,\n composed: true,\n }));\n }\n // Fired by the \"More\" kr-button when an overflow option is chosen; detail is { id, label }.\n handleMoreSelect(e) {\n this.dispatchEvent(new CustomEvent('action-click', {\n detail: { action: e.detail.id },\n bubbles: true,\n composed: true,\n }));\n }\n render() {\n const hasOverflow = this.actions.length > this.maxVisibleActions;\n // When collapsing, the last visible slot is the \"More\" button, so only\n // show the first (maxVisibleActions - 1) actions inline.\n let inlineActions = this.actions;\n let overflowOptions = [];\n if (hasOverflow) {\n inlineActions = this.actions.slice(0, this.maxVisibleActions - 1);\n // Everything past the inline slots goes into the \"More\" dropdown.\n overflowOptions = this.actions.slice(this.maxVisibleActions - 1).map((action) => ({\n id: action.id,\n label: action.label,\n href: action.href,\n hrefTarget: action.target,\n }));\n }\n return html `\n <nav class=\"nav\">\n ${this.label ? html `\n <div class=\"nav-header\">\n <div class=\"nav-header__text\">\n ${this.subLabel ? html `<div class=\"nav-header__subtitle\">${this.subLabel}</div>` : nothing}\n <div class=\"nav-header__title\">${this.label}</div>\n </div>\n </div>\n ` : nothing}\n <div class=\"nav-content\">\n <div class=\"nav-items\">\n ${this.items.map((item) => html `\n <a\n class=${classMap({\n 'nav-item': true,\n 'nav-item--active': item.id === this.activeId\n })}\n href=${item.url || '#'}\n @click=${(e) => this.handleNavItemClick(e, item)}\n >\n ${item.label}\n </a>\n `)}\n </div>\n </div>\n ${this.actions.length ? html `\n <div class=\"nav-actions\">\n ${inlineActions.map((action) => html `\n <kr-button\n class=\"nav-actions__button\"\n variant=${action.variant || 'outline'}\n size=\"small\"\n href=${action.href || nothing}\n target=${action.target || nothing}\n @click=${(e) => this.handleActionClick(e, action)}\n >\n ${action.label}\n </kr-button>\n `)}\n ${hasOverflow ? html `\n <kr-button\n class=\"nav-actions__button\"\n variant=\"outline\"\n size=\"small\"\n .options=${overflowOptions}\n @option-select=${this.handleMoreSelect}\n >\n More\n </kr-button>\n ` : nothing}\n </div>\n ` : nothing}\n </nav>\n <main class=\"content\">\n <div class=\"content__main\">\n <slot></slot>\n </div>\n </main>\n `;\n }\n}\nKRScreenNav.styles = css `\n :host {\n display: flex;\n height: 100%;\n }\n\n .nav {\n width: 200px;\n background: #f3f7fcbf;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n }\n\n .nav-header {\n padding: 20px 16px 16px;\n }\n\n .nav-header__text {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .nav-header__title {\n font-size: 20px;\n font-weight: 600;\n color: #111827;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.3;\n }\n\n .nav-header__subtitle {\n font-size: 12px;\n font-weight: 400;\n color: rgb(0 0 0 / 70%);\n line-height: 1;\n }\n\n .nav-content {\n flex: 1;\n overflow-y: auto;\n padding: 0 0 12px;\n }\n\n .nav-items {\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n }\n\n .nav-item {\n display: block;\n padding: 0 12px;\n height: 32px;\n line-height: 32px;\n letter-spacing: 0.13px;\n color: rgb(32, 33, 36);\n text-decoration: none;\n font-size: 13px;\n font-weight: 400;\n font-family: inherit;\n border-radius: 8px;\n transition: all 0.15s ease;\n }\n\n .nav-item:hover {\n background: rgba(0, 0, 0, 0.04);\n color: #163052;\n }\n\n .nav-item--active {\n background: #e1e9f6;\n color: #1a2332;\n font-weight: 700;\n }\n\n .nav-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid rgba(0, 0, 0, 0.08);\n flex-shrink: 0;\n }\n\n .nav-actions__button {\n width: 100%;\n }\n\n .content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .content__main {\n flex: 1;\n overflow-y: auto;\n }\n `;\n__decorate([\n property({ type: String })\n], KRScreenNav.prototype, \"label\", void 0);\n__decorate([\n property({ type: String })\n], KRScreenNav.prototype, \"subLabel\", void 0);\n__decorate([\n property({ type: Array })\n], KRScreenNav.prototype, \"items\", void 0);\n__decorate([\n property({ type: String })\n], KRScreenNav.prototype, \"activeId\", void 0);\n__decorate([\n property({ type: Array })\n], KRScreenNav.prototype, \"actions\", void 0);\n__decorate([\n property({ type: Number })\n], KRScreenNav.prototype, \"maxVisibleActions\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-screen-nav')) {\n customElements.define('kr-screen-nav', KRScreenNav);\n}\n//# sourceMappingURL=screen-nav.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css } from 'lit';\nimport { property } from 'lit/decorators.js';\n/**\n * Detail screen component for viewing/editing entity details.\n * Displays a form-like layout with labeled fields centered in a single column.\n *\n * ## Usage\n * ```html\n * <kr-screen-detail title=\"Company Details\">\n * <kr-button slot=\"actions\">Save</kr-button>\n * <kr-text-field label=\"Company Name\" value=\"Acme Corporation\"></kr-text-field>\n * <kr-text-field label=\"Industry\" value=\"Technology\"></kr-text-field>\n * <kr-text-field label=\"Website\" value=\"https://acme.com\"></kr-text-field>\n * </kr-screen-detail>\n * ```\n *\n * @slot - Form fields and content (centered, max-width 480px)\n * @slot actions - Action buttons displayed in the header on the right\n *\n * @property {string} title - Section title (e.g., \"Company Details\")\n */\nexport class KRScreenDetail extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Section title\n */\n this.title = '';\n }\n render() {\n return html `\n <div class=\"header\">\n <h2 class=\"header__title\">${this.title}</h2>\n <div class=\"header__actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div class=\"content\">\n <div class=\"content__inner\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\nKRScreenDetail.styles = css `\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n }\n\n .header {\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 24px;\n background: #ffffff;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n\n .header__title {\n font-size: 18px;\n font-weight: 600;\n color: #111827;\n margin: 0;\n }\n\n .header__actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n display: flex;\n justify-content: center;\n }\n\n .content__inner {\n width: 100%;\n max-width: 700px;\n }\n `;\n__decorate([\n property({ type: String })\n], KRScreenDetail.prototype, \"title\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-screen-detail')) {\n customElements.define('kr-screen-detail', KRScreenDetail);\n}\n//# sourceMappingURL=screen-detail.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n/**\n * Secondary bar component that sits below the main app bar.\n *\n * @slot - Content to display in the subbar (right side)\n */\nexport class KRSubbar extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Array of breadcrumb items to display\n */\n this.breadcrumbs = [];\n /**\n * Whether to show the menu icon\n */\n this.menu = false;\n }\n _handleMenuClick() {\n this.dispatchEvent(new CustomEvent('menu-click', {\n bubbles: true,\n composed: true\n }));\n }\n /**\n * Handles click on a breadcrumb link.\n * Dispatches a cancelable event so SPA routers can intercept.\n */\n _handleBreadcrumbClick(e, crumb, isCurrent) {\n // Don't navigate if it's the current/last breadcrumb\n if (isCurrent || !crumb.url) {\n e.preventDefault();\n return;\n }\n // Allow Ctrl/Cmd+click and middle-click to open in new tab without SPA navigation\n if (e.ctrlKey || e.metaKey || e.button === 1) {\n return;\n }\n const breadcrumbEvent = new CustomEvent('breadcrumb-click', {\n detail: { breadcrumb: crumb },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(breadcrumbEvent);\n // If a listener called preventDefault(), prevent the native navigation\n if (breadcrumbEvent.defaultPrevented) {\n e.preventDefault();\n }\n }\n render() {\n return html `\n ${this.menu ? html `\n <div class=\"menu\" @click=${this._handleMenuClick}>\n <svg\n class=\"menu__icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <line\n x1=\"3\"\n y1=\"6\"\n x2=\"21\"\n y2=\"6\"\n ></line>\n <line\n x1=\"3\"\n y1=\"12\"\n x2=\"21\"\n y2=\"12\"\n ></line>\n <line\n x1=\"3\"\n y1=\"18\"\n x2=\"21\"\n y2=\"18\"\n ></line>\n </svg>\n </div>\n ` : nothing}\n <div class=\"breadcrumbs\">\n ${this.breadcrumbs.map((crumb, index) => {\n const isCurrent = index === this.breadcrumbs.length - 1;\n // The href gets the base href prepended so Cmd/Ctrl+click opens the right\n // URL in a new tab. crumb.url itself is left intact (base-relative) and\n // passed to Angular via breadcrumb-click — its Router applies the base\n // itself. e.g. base \"/operations/\" + crumb.url \"/settings\" ->\n // \"/operations/settings\".\n const baseHref = document.querySelector('base')?.getAttribute('href') || '/';\n let href = '#';\n if (crumb.url) {\n let path = crumb.url;\n if (crumb.url.startsWith('/')) {\n path = crumb.url.slice(1);\n }\n href = baseHref + path;\n if (!baseHref.endsWith('/')) {\n href = baseHref + '/' + path;\n }\n }\n return html `\n ${index > 0 ? html `<span class=\"breadcrumb-separator\">/</span>` : ''}\n <a\n class=${classMap({\n 'breadcrumb': true,\n 'breadcrumb--current': isCurrent\n })}\n href=${href}\n @click=${(e) => this._handleBreadcrumbClick(e, crumb, isCurrent)}\n >${crumb.label}</a>\n `;\n })}\n </div>\n <div class=\"content\">\n <slot></slot>\n </div>\n\n `;\n }\n}\nKRSubbar.styles = css `\n :host {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n height: 40px;\n background: #E2E9F6;\n border-bottom: 1px solid rgb(229, 229, 228);\n align-items: center;\n padding: 0 16px;\n width: 100%;\n flex-shrink: 0;\n }\n\n .breadcrumbs {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n flex: 1;\n }\n\n .breadcrumb {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n font-size: 13px;\n }\n\n .breadcrumb:hover {\n text-decoration: underline;\n }\n\n .breadcrumb--current {\n cursor: default;\n }\n\n .breadcrumb--current:hover {\n text-decoration: none;\n }\n\n .breadcrumb-separator {\n color: #9ca3af;\n font-size: 12px;\n }\n\n .content {\n display: flex;\n align-items: center;\n margin-left: auto;\n }\n\n .menu {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n margin-right: 8px;\n cursor: pointer;\n }\n\n .menu__icon {\n width: 18px;\n height: 18px;\n }\n `;\n__decorate([\n property({ type: Array })\n], KRSubbar.prototype, \"breadcrumbs\", void 0);\n__decorate([\n property({ type: Boolean })\n], KRSubbar.prototype, \"menu\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-subbar')) {\n customElements.define('kr-subbar', KRSubbar);\n}\n//# sourceMappingURL=subbar.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, css, html } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nexport class KRRouter {\n /**\n * The current route's resolved data: everything every matched level's static resolve() returned,\n * merged with deeper levels winning on a shared key.\n *\n * Read it in connectedCallback — the router fills it before any element mounts. A child route gets\n * what its parent resolved from here, so a tab component needs no resolve() of its own. Use\n * KRRouter.getParams() for the route's params.\n */\n static getData() {\n return KRRouter.data;\n }\n static configure(config) {\n KRRouter.base = config.base;\n KRRouter.routes = config.routes;\n // Intercept <a> clicks for client-side navigation\n window.addEventListener('click', (e) => {\n const anchor = e.composedPath().find(el => el instanceof HTMLAnchorElement);\n if (!anchor) {\n return;\n }\n if (anchor.origin !== window.location.origin) {\n return;\n }\n if (!anchor.pathname.startsWith(KRRouter.base)) {\n return;\n }\n if (anchor.target === '_blank') {\n return;\n }\n // Cmd/Ctrl-click (new tab), Shift-click (new window) and Alt-click (download) are browser\n // affordances — leave them to the browser rather than hijacking them into an in-app navigation.\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {\n return;\n }\n e.preventDefault();\n KRRouter.navigate(anchor.pathname);\n });\n // Process each navigation. popstate covers every source — a link click, a KRRouter.navigate()\n // call (which dispatches one itself), and the browser's back/forward buttons.\n window.addEventListener('popstate', () => {\n KRRouter.handleNavigation();\n });\n // The initial page load fires no popstate, so process the URL the app booted on. Deferred to a\n // microtask rather than run synchronously: configure() is called while app.js is being evaluated\n // as an import, which happens BEFORE the importing module's body. Navigating synchronously here\n // would fire the first resolve() fetches before main.ts had run KRHttp.configure(), so they'd go\n // to the dev server's own origin (localhost:4201/api/...) instead of devUrl and 404.\n Promise.resolve().then(() => {\n KRRouter.handleNavigation();\n });\n }\n static handleNavigation() {\n const matched = KRRouter.matchRoutes();\n // Nothing matched (a stale or mistyped link). An unrecognized URL\n // shouldn't destroy the state of the screen the user is on.\n if (!matched.routes.length) {\n return;\n }\n // A route with children but no child segment in the URL resolves to its `default` child, so the\n // resolved url is longer than what's in the address bar (/pages/42 resolves pages/42/details).\n // Rewrite it so the URL reflects what's actually on screen.\n let resolvedPath = KRRouter.base;\n if (matched.url) {\n resolvedPath = KRRouter.base + '/' + matched.url;\n }\n if (window.location.pathname !== resolvedPath) {\n window.history.replaceState({}, '', resolvedPath);\n }\n // Drop cached entries for routes DEEPER than the URL we're navigating to — if the user navigates\n // up a level we assume they're moving on to a different task. This is what keeps the cache from\n // growing without bound.\n for (const key of KRRouter.routeCache.keys()) {\n if (matched.url.split('/').filter(s => s).length < key.split('/').filter(s => s).length) {\n KRRouter.routeCache.delete(key);\n }\n }\n const token = ++KRRouter.navToken;\n // Resolve every route's matching component (screen), keeping each level's resolved data alongside\n // its element so the whole chain can be merged once they've all settled.\n Promise.all(matched.routes.map(match => {\n // Reuse the cached element for this url if we have one. Its data is cached with it — resolve()\n // doesn't run again unless the route asks for it with runResolvers: 'always' — but the level still\n // has to contribute to the merge below.\n const cached = KRRouter.routeCache.get(match.url);\n if (cached) {\n const cachedConstructor = customElements.get(match.route.component);\n if (match.route.runResolvers === 'always' && cachedConstructor && typeof cachedConstructor.resolve === 'function') {\n return Promise.resolve(cachedConstructor.resolve(KRRouter.getParams())).then(data => {\n cached.data = data;\n return {\n el: cached.el,\n data,\n };\n });\n }\n return Promise.resolve({\n el: cached.el,\n data: cached.data,\n });\n }\n // Create and cache the screen element\n const el = document.createElement(match.route.component);\n const entry = {\n el,\n scrolls: [],\n data: null,\n };\n KRRouter.routeCache.set(match.url, entry);\n // If the component class defines a static resolve(params), await it. Every level's result is\n // merged into KRRouter.data below before anything mounts, so a component paints with its data\n // already in hand instead of flashing empty.\n const constructor = customElements.get(match.route.component);\n if (constructor && typeof constructor.resolve === 'function') {\n return Promise.resolve(constructor.resolve(KRRouter.getParams())).then(data => {\n entry.data = data;\n return {\n el,\n data,\n };\n });\n }\n return Promise.resolve({\n el,\n data: null,\n });\n }))\n .then(resolved => {\n // A newer navigation started while we were resolving — its elements are the current truth.\n if (token !== KRRouter.navToken) {\n return;\n }\n // Merge the whole chain's resolved data into one object, parents first so a deeper route can\n // override a key it shares with an ancestor. Set BEFORE any element mounts, so every component\n // — at any depth — reads it with KRRouter.getData() in connectedCallback: a tab component gets\n // what its parent resolved with no resolve() of its own and no second request. Mirrors\n // KNNavigator.data() in kodaris-ngx, which searches the Angular route tree by key.\n KRRouter.data = {};\n for (const item of resolved) {\n if (item.data) {\n Object.assign(KRRouter.data, item.data);\n }\n }\n const elements = resolved.map(item => item.el);\n // ---- PASS 1: deactivate, deepest level first ----\n // Remove screen elements that no longer apply to the new current routes for the current url\n const levels = Array.from(KRRouter.outletContexts.keys()).sort((a, b) => b - a);\n for (const level of levels) {\n const context = KRRouter.outletContexts.get(level);\n if (!context?.outlet?.el || context.outlet.el === elements[level]) {\n continue;\n }\n // Capture the outgoing element's scroll positions into its cache entry, then unmount it.\n const outgoing = KRRouter.routeCache.get(context.url);\n if (outgoing) {\n outgoing.scrolls = KRRouter.getScrollableElements(context.outlet.el).map(scrollable => scrollable.scrollTop);\n }\n context.outlet.deactivate();\n context.element = null;\n context.url = '';\n }\n // Put each screen element into the appropriate router outlet\n elements.forEach((el, level) => {\n // First navigation to reach this depth has no context yet.\n let context = KRRouter.outletContexts.get(level);\n if (!context) {\n context = {\n outlet: null,\n element: null,\n url: '',\n };\n KRRouter.outletContexts.set(level, context);\n }\n context.element = el;\n context.url = matched.routes[level].url;\n if (context.outlet && context.outlet.el !== el) {\n context.outlet.activate(el);\n // Put back the scroll positions captured when the user last left this element.\n const cached = KRRouter.routeCache.get(context.url);\n if (cached?.scrolls.length) {\n setTimeout(() => {\n const scrollables = KRRouter.getScrollableElements(cached.el);\n cached.scrolls.forEach((top, index) => {\n if (scrollables[index]) {\n scrollables[index].scrollTop = top;\n }\n });\n }, 0);\n }\n }\n });\n });\n }\n // An outlet announces itself here when it connects and takes whatever element its context holds.\n static registerOutlet(level, outlet) {\n // No context yet when an outlet connects before a navigation\n let context = KRRouter.outletContexts.get(level);\n if (!context) {\n context = {\n outlet: null,\n element: null,\n url: '',\n };\n KRRouter.outletContexts.set(level, context);\n }\n context.outlet = outlet;\n // An outlet re-attached with its element already mounted (a cached parent coming back) must not\n // restore scroll again — that would overwrite the live position with a stale one.\n if (context.element && outlet.el !== context.element) {\n outlet.activate(context.element);\n // Same scroll restore as the activation pass in handleNavigation — this is the path taken when\n // the outlet didn't exist yet at navigation time, which for us is the common case.\n const cached = KRRouter.routeCache.get(context.url);\n if (cached?.scrolls.length) {\n setTimeout(() => {\n const scrollables = KRRouter.getScrollableElements(cached.el);\n cached.scrolls.forEach((top, index) => {\n if (scrollables[index]) {\n scrollables[index].scrollTop = top;\n }\n });\n }, 0);\n }\n }\n }\n static unregisterOutlet(level, outlet) {\n const context = KRRouter.outletContexts.get(level);\n if (context && context.outlet === outlet) {\n context.outlet = null;\n }\n }\n static navigate(path) {\n let fullPath = path;\n if (!path.startsWith('/')) {\n fullPath = KRRouter.base + '/' + path;\n }\n window.history.pushState({}, '', fullPath);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n static getParams() {\n const matched = KRRouter.matchRoutes();\n const params = {};\n for (const match of matched.routes) {\n for (const key in match.params) {\n params[key] = decodeURIComponent(match.params[key]);\n }\n }\n return params;\n }\n // Every scrollable element in and under `root`, in document order — piercing shadow roots.\n static getScrollableElements(root) {\n const scrollables = [];\n // Depth-first pre-order, each node's shadow root before its light children. An explicit stack\n // rather than recursion; pushing children in reverse makes them pop in document order, which keeps\n // the sequence identical to the recursive walk this replaces. The ORDER is load-bearing: capture\n // and restore index into the returned list positionally, so both passes must enumerate the same\n // nodes in the same sequence.\n const stack = [root];\n while (stack.length) {\n const node = stack.pop();\n if (!node) {\n break;\n }\n const style = getComputedStyle(node);\n if (style.overflow === 'auto'\n || style.overflow === 'scroll'\n || style.overflowY === 'auto'\n || style.overflowY === 'scroll') {\n scrollables.push(node);\n }\n // Shadow children first so they occupy the same positions the recursion gave them.\n const children = [];\n if (node.shadowRoot) {\n children.push(...Array.from(node.shadowRoot.children));\n }\n children.push(...Array.from(node.children));\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index]);\n }\n }\n return scrollables;\n }\n // Match the CURRENT browser URL against the route defs.\n //\n // Example, with base '/operations/app/ai-cms' and the routes configured in app.ts:\n //\n // URL /operations/app/ai-cms/pages/42/seo\n // segments ['pages', '42', 'seo'] (base stripped, split on '/')\n // returns {\n // routes: [\n // { route: { path: 'pages/:contentPageID', component: 'kt-page' }, params: { contentPageID: '42' }, url: 'pages/42' },\n // { route: { path: 'seo', component: 'kt-page-seo' }, params: {}, url: 'pages/42/seo' },\n // ],\n // url: 'pages/42/seo',\n // }\n //\n // Three other shapes worth knowing:\n //\n // .../pages/42 a route with children but no child segment resolves its `default` child, so this\n // returns BOTH levels and a url of 'pages/42/details' — longer than the address\n // bar. handleNavigation() is what syncs the URL to it; this function is pure and\n // never touches history.\n // .../ (no segments) matches the path:'' route, returning a single entry for kt-home.\n // .../nope no route matches, returning no routes and an empty url.\n static matchRoutes(routes = KRRouter.routes, segments) {\n // An empty array is a legitimate \"nothing left to match\" from a recursive call and stays as-is —\n // only a genuinely absent argument (the entry call) reaches for the browser URL.\n if (!segments) {\n let relative = window.location.pathname;\n if (relative.startsWith(KRRouter.base)) {\n relative = relative.slice(KRRouter.base.length);\n }\n segments = relative.split('/').filter(s => s);\n }\n for (const route of routes) {\n const routeSegments = route.path.split('/').filter(s => s);\n // index route {path: '', component: kt-home}\n if (routeSegments.length === 0 && segments.length === 0) {\n return {\n routes: [{\n route,\n params: {},\n url: ''\n }],\n url: ''\n };\n }\n if (routeSegments.length === 0) {\n continue;\n }\n if (segments.length < routeSegments.length) {\n continue;\n }\n const params = {};\n let matched = true;\n for (let i = 0; i < routeSegments.length; i++) {\n if (routeSegments[i].startsWith(':')) {\n params[routeSegments[i].slice(1)] = segments[i];\n }\n else if (routeSegments[i] !== segments[i]) {\n matched = false;\n break;\n }\n }\n if (!matched) {\n continue;\n }\n const remaining = segments.slice(routeSegments.length);\n // This level's own resolved URL: the segments it consumed, with :params swapped for their real\n // values. Children come back from the recursion holding only THEIR portion, so we prefix each\n // with this as the recursion unwinds — every entry ends up with the full path from the root.\n const url = segments.slice(0, routeSegments.length).join('/');\n const matchedRoutes = [{\n route,\n params,\n url\n }];\n if (remaining.length > 0) {\n // Segments left over and nowhere to put them — this route doesn't fully match the URL, so try\n // the next one. Without this, a route would be accepted having consumed only part of the URL:\n // /pages/42/seo would match {path: 'pages'} and render the Pages list. It also narrows\n // route.children for the call below, which matters because matchRoutes' first parameter has a\n // DEFAULT — passing undefined would silently re-match from the top-level routes rather than\n // failing.\n if (!route.children) {\n continue;\n }\n const childMatch = KRRouter.matchRoutes(route.children, remaining);\n if (childMatch.routes.length > 0) {\n for (const child of childMatch.routes) {\n child.url = url + '/' + child.url;\n }\n matchedRoutes.push(...childMatch.routes);\n return {\n routes: matchedRoutes,\n url: url + '/' + childMatch.url\n };\n }\n }\n // No remaining segments + a default child — resolve as though that child's segment were in the\n // URL. We do NOT rewrite the address bar here; matching stays pure. handleNavigation() syncs the\n // URL to the resolved `url` this returns.\n if (route.children && remaining.length === 0 && route.default) {\n const childMatch = KRRouter.matchRoutes(route.children, [route.default]);\n if (childMatch.routes.length > 0) {\n for (const child of childMatch.routes) {\n child.url = url + '/' + child.url;\n }\n matchedRoutes.push(...childMatch.routes);\n return {\n routes: matchedRoutes,\n url: url + '/' + childMatch.url\n };\n }\n }\n return {\n routes: matchedRoutes,\n url\n };\n }\n return {\n routes: [],\n url: ''\n };\n }\n}\nKRRouter.base = '';\nKRRouter.routes = [];\nKRRouter.routeCache = new Map();\n// One context per nesting level — Angular's ChildrenOutletContexts, keyed by level rather than by\n// outlet name since we only have one (primary) outlet per level. Outlets are DRIVEN through these;\n// they never ask the router for anything.\nKRRouter.outletContexts = new Map();\n// One token per navigation. A slower navigation that has been superseded must not activate its\n// (stale) elements, so it checks the token before committing anything.\nKRRouter.navToken = 0;\n// Every matched route level's resolved data, merged into one object for the current navigation. This\n// is set before anything mounts — see the merge in handleNavigation.\nKRRouter.data = {};\nlet KRRouterOutlet = class KRRouterOutlet extends LitElement {\n constructor() {\n super(...arguments);\n this.level = -1;\n // The element the router has told this outlet to show.\n this.el = null;\n }\n connectedCallback() {\n super.connectedCallback();\n // This outlet's nesting depth = how many kr-router-outlet ancestors it has, which is only\n // knowable once attached. Walk up through shadow boundaries too (via ShadowRoot.host), since a\n // nested outlet lives inside its parent element's shadow root and parentNode stops at the root.\n let level = 0;\n let node = this;\n while (node) {\n if (node instanceof ShadowRoot) {\n node = node.host;\n continue;\n }\n if (node instanceof HTMLElement && node.tagName === 'KR-ROUTER-OUTLET' && node !== this) {\n level++;\n }\n if (node instanceof HTMLElement) {\n node = node.parentNode;\n }\n else {\n node = null;\n }\n }\n this.level = level;\n KRRouter.registerOutlet(this.level, this);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n KRRouter.unregisterOutlet(this.level, this);\n }\n activate(el) {\n this.el = el;\n }\n deactivate() {\n this.el = null;\n }\n render() {\n if (!this.el) {\n return html ``;\n }\n return html `${this.el}`;\n }\n};\nKRRouterOutlet.styles = css `\n :host {\n display: block;\n height: 100%;\n }\n `;\n__decorate([\n state()\n], KRRouterOutlet.prototype, \"el\", void 0);\nKRRouterOutlet = __decorate([\n customElement('kr-router-outlet')\n], KRRouterOutlet);\nexport { KRRouterOutlet };\n//# sourceMappingURL=router.js.map"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","b","y","v","m","M","__decorate","this","LitElement","html","css","state","classMap","nothing","styleMap","unsafeHTML","repeat","property","query","customElement"],"mappings":"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,IAAI,CAAC,kBAAkB,EAAE,GAAGC,CAAO;AAC7E,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;AACpC;AACA,cAAc,CAAC;AACf,IAAI;AACJ;AACA,SAAS,CAAC,MAAM,GAAGH,GAAG,CAAC;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,EAAE,CAAC;AACHJ,YAAU,CAAC;AACX,IAAIW,GAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;AACjC,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;AACvCX,YAAU,CAAC;AACX,IAAIW,GAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;AACjC,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;AACvCX,YAAU,CAAC;AACX,IAAIW,GAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;AACjC,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC;AAC3CX,YAAU,CAAC;AACX,IAAIW,GAAQ,CAAC,EAAE,IAAI,EAAE,MAA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OJ,CAAI,CAAC;AACxB;AACA,8BAA8B,EAAE,IAAI,CAAC;AACrC;AACA,kDAAkD,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;AACP,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,UAAU,CAAC,MAAM,GAAGC,GAAG,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16]}
1
+ {"version":3,"file":"krubble-app.bundled.js","sources":["../../../node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/lit-html/lit-html.js","../../../node_modules/lit-element/lit-element.js","../../../node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/@lit/reactive-element/decorators/base.js","../../../node_modules/@lit/reactive-element/decorators/query.js","../../../node_modules/lit-html/directive.js","../../../node_modules/lit-html/directives/unsafe-html.js","../../../node_modules/lit-html/directives/class-map.js","scaffold/nav-item-edit.js","../../../node_modules/lit-html/directives/style-map.js","../../../node_modules/lit-html/directive-helpers.js","../../../node_modules/lit-html/directives/repeat.js","../../../node_modules/marked/lib/marked.esm.js","chatbot.js","scaffold.js","screen-nav.js","screen-detail.js","subbar.js","router.js"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==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 s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>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[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){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}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y 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,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.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,s=this.constructor.elementProperties;for(const i of s.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 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,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&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,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}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){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(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!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&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 Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{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 r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{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)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as s,Directive as i,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=s(class extends i{constructor(t){if(super(t),t.type!==r.ATTRIBUTE||\"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(s=>t[s]).join(\" \")+\" \"}update(s,[i]){if(void 0===this.st){this.st=new Set,void 0!==s.strings&&(this.nt=new Set(s.strings.join(\" \").split(/\\s/).filter(t=>\"\"!==t)));for(const t in i)i[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(i)}const r=s.element.classList;for(const t of this.st)t in i||(r.remove(t),this.st.delete(t));for(const t in i){const s=!!i[t];s===this.st.has(t)||this.nt?.has(t)||(s?(r.add(t),this.st.add(t)):(r.remove(t),this.st.delete(t)))}return t}});export{e as classMap};\n//# sourceMappingURL=class-map.js.map\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport '@kodaris/krubble-components';\nexport class KRNavItemEdit extends LitElement {\n constructor() {\n super(...arguments);\n this.label = '';\n this.icon = '';\n this.url = '';\n this.active = true;\n }\n connectedCallback() {\n super.connectedCallback();\n if (this.data) {\n this.label = this.data.label || '';\n this.icon = this.data.icon || '';\n this.url = this.data.url || '';\n this.active = this.data.active !== false;\n }\n }\n handleLabelInput(e) {\n const textField = e.target;\n this.label = textField.value;\n }\n handleIconInput(e) {\n const textField = e.target;\n this.icon = textField.value;\n }\n handleUrlInput(e) {\n const textField = e.target;\n this.url = textField.value;\n }\n handleActiveChange(e) {\n this.active = e.target.checked;\n }\n handleCancel() {\n this.dialogRef.close(undefined);\n }\n handleSave() {\n this.dialogRef.close({\n label: this.label,\n icon: this.icon || undefined,\n url: this.url || undefined,\n active: this.active,\n });\n }\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleSave();\n }\n }\n render() {\n return html `\n <h2>Edit Navigation Item</h2>\n\n <div class=\"form-group\">\n <kr-text-field\n label=\"Label\"\n name=\"label\"\n .value=${this.label}\n @input=${this.handleLabelInput}\n @keydown=${this.handleKeyDown}\n placeholder=\"Enter label\"\n ></kr-text-field>\n </div>\n\n <div class=\"form-group\">\n <kr-text-field\n label=\"Icon (emoji or SVG)\"\n name=\"icon\"\n .value=${this.icon}\n @input=${this.handleIconInput}\n @keydown=${this.handleKeyDown}\n placeholder=\"e.g. 📊 or <svg>...</svg>\"\n ></kr-text-field>\n </div>\n\n <div class=\"form-group\">\n <kr-text-field\n label=\"URL\"\n name=\"url\"\n .value=${this.url}\n @input=${this.handleUrlInput}\n @keydown=${this.handleKeyDown}\n placeholder=\"e.g. /ci/my-page or https://...\"\n ></kr-text-field>\n </div>\n\n <div class=\"form-group\">\n <div class=\"checkbox-group\">\n <input\n type=\"checkbox\"\n id=\"active\"\n .checked=${this.active}\n @change=${this.handleActiveChange}\n />\n <label class=\"checkbox-label\" for=\"active\">Visible in navigation</label>\n </div>\n </div>\n\n <div class=\"actions\">\n <button class=\"btn-cancel\" @click=${this.handleCancel}>Cancel</button>\n <button class=\"btn-save\" @click=${this.handleSave}>Save</button>\n </div>\n `;\n }\n}\nKRNavItemEdit.styles = css `\n :host {\n display: block;\n width: 360px;\n padding: 24px;\n color: rgba(255, 255, 255, 0.9);\n\n /* Dark theme for kr-text-field */\n --kr-text-field-label-color: rgba(255, 255, 255, 0.7);\n --kr-text-field-border-color: rgba(255, 255, 255, 0.1);\n --kr-text-field-bg: rgba(255, 255, 255, 0.05);\n --kr-text-field-color: #ffffff;\n --kr-text-field-focus-border-color: #beea4e;\n --kr-text-field-focus-ring-color: rgba(190, 234, 78, 0.1);\n --kr-text-field-placeholder-color: rgba(255, 255, 255, 0.3);\n --kr-text-field-helper-color: rgba(255, 255, 255, 0.5);\n }\n\n h2 {\n margin: 0 0 24px 0;\n font-size: 18px;\n font-weight: 600;\n color: #ffffff;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .checkbox-group {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n accent-color: #beea4e;\n cursor: pointer;\n }\n\n .checkbox-label {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.9);\n cursor: pointer;\n }\n\n .actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n margin-top: 28px;\n }\n\n button {\n padding: 10px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .btn-cancel {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n }\n\n .btn-cancel:hover {\n background: rgba(255, 255, 255, 0.1);\n color: #ffffff;\n }\n\n .btn-save {\n background: #beea4e;\n border: none;\n color: #10172a;\n }\n\n .btn-save:hover {\n background: #d4f472;\n }\n `;\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"label\", void 0);\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"icon\", void 0);\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"url\", void 0);\n__decorate([\n state()\n], KRNavItemEdit.prototype, \"active\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-nav-item-edit')) {\n customElements.define('kr-nav-item-edit', KRNavItemEdit);\n}\n//# sourceMappingURL=nav-item-edit.js.map","import{noChange as t}from\"../lit-html.js\";import{directive as e,Directive as r,PartType as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const n=\"important\",i=\" !\"+n,o=e(class extends r{constructor(t){if(super(t),t.type!==s.ATTRIBUTE||\"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,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes(\"-\")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${s};`},\"\")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes(\"-\")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r=\"string\"==typeof e&&e.endsWith(i);t.includes(\"-\")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:\"\"):s[t]=e}}return t}});export{o as styleMap};\n//# sourceMappingURL=style-map.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","/**\n * marked v12.0.2 - a markdown parser\n * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape$1(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n // precede setext continuation with 4 spaces so it isn't a setext\n let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1');\n text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (const header of headers) {\n item.header.push({\n text: header,\n tokens: this.lexer.inline(header)\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map(cell => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell)\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape$1(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape$1(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = '\\\\p{P}\\\\p{S}';\nconst punctuation = edit(/^((?![*_])[\\spunctuation])/, 'u')\n .replace(/punctuation/g, _punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n escape: edit(escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\n/**\n * GFM + Line Breaks Inline Grammar\n */\nconst inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n};\n/**\n * exports\n */\nconst block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic\n};\nconst inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic\n};\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = []) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n }\n else {\n src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$1(code, true))\n + '</code></pre>\\n';\n }\n return '<pre><code class=\"language-'\n + escape$1(lang)\n + '\">'\n + (escaped ? code : escape$1(code, true))\n + '</code></pre>\\n';\n }\n blockquote(quote) {\n return `<blockquote>\\n${quote}</blockquote>\\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `<h${level}>${text}</h${level}>\\n`;\n }\n hr() {\n return '<hr>\\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n listitem(text, task, checked) {\n return `<li>${text}</li>\\n`;\n }\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph(text) {\n return `<p>${text}</p>\\n`;\n }\n table(header, body) {\n if (body)\n body = `<tbody>${body}</tbody>`;\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n tablerow(content) {\n return `<tr>\\n${content}</tr>\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `<strong>${text}</strong>`;\n }\n em(text) {\n return `<em>${text}</em>`;\n }\n codespan(text) {\n return `<code>${text}</code>`;\n }\n br() {\n return '<br>';\n }\n del(text) {\n return `<del>${text}</del>`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${title}\"`;\n }\n out += '>';\n return out;\n }\n text(text) {\n return text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n em(text) {\n return text;\n }\n codespan(text) {\n return text;\n }\n del(text) {\n return text;\n }\n html(text) {\n return text;\n }\n text(text) {\n return text;\n }\n link(href, title, text) {\n return '' + text;\n }\n image(href, title, text) {\n return '' + text;\n }\n br() {\n return '';\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n options;\n renderer;\n textRenderer;\n constructor(options) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const genericToken = token;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n const headingToken = token;\n out += this.renderer.heading(this.parseInline(headingToken.tokens), headingToken.depth, unescape(this.parseInline(headingToken.tokens, this.textRenderer)));\n continue;\n }\n case 'code': {\n const codeToken = token;\n out += this.renderer.code(codeToken.text, codeToken.lang, !!codeToken.escaped);\n continue;\n }\n case 'table': {\n const tableToken = token;\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < tableToken.header.length; j++) {\n cell += this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens), { header: true, align: tableToken.align[j] });\n }\n header += this.renderer.tablerow(cell);\n let body = '';\n for (let j = 0; j < tableToken.rows.length; j++) {\n const row = tableToken.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { header: false, align: tableToken.align[k] });\n }\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n const blockquoteToken = token;\n const body = this.parse(blockquoteToken.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n const listToken = token;\n const ordered = listToken.ordered;\n const start = listToken.start;\n const loose = listToken.loose;\n let body = '';\n for (let j = 0; j < listToken.items.length; j++) {\n const item = listToken.items[j];\n const checked = item.checked;\n const task = item.task;\n let itemBody = '';\n if (item.task) {\n const checkbox = this.renderer.checkbox(!!checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n}\n\nclass Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape$1(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { marked } from 'marked';\n// Importing these named exports also registers their custom elements\n// (kr-dialog, kr-tab-group, kr-tab, kr-text-field for the browse dialog;\n// kr-checkbox for the settings panel's Tools toggles).\nimport { KRFilePreview, KRSnackbar } from '@kodaris/krubble-components';\nimport { KRHttp } from '@kodaris/krubble-http';\n/**\n * The action-confirmation decisions, in the left-to-right order they render and\n * the order the arrow keys walk. Yes is first so it's the default highlight.\n * Shared by the render and the keyboard handler so the two never drift.\n */\nconst CONFIRMATION_DECISIONS = [\n {\n decision: 'approve',\n label: 'Yes',\n },\n {\n decision: 'approveAlways',\n label: 'Always allow',\n },\n {\n decision: 'reject',\n label: 'No',\n },\n];\n/**\n * The modes as shown in the composer's mode selector, in menu order. `label` is\n * the short trigger text (Gemini-style inline label); `description` is the menu\n * sublabel. Written for a non-technical user — no \"guarded tool\" jargon.\n */\nconst CHATBOT_MODES = [\n {\n mode: 'NORMAL',\n label: 'Ask',\n description: 'Asks before making changes',\n },\n {\n mode: 'EDIT',\n label: 'Auto',\n description: 'Makes changes automatically',\n },\n {\n mode: 'PLAN',\n label: 'Plan',\n description: 'Suggests a plan, makes no changes',\n },\n];\n/** Image extensions the chatbot renders as thumbnails (used when MIME is absent). */\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp'];\n/**\n * Video extensions the picker accepts. The AI cannot watch video — these upload\n * and store for playback and tool use only, and the backend tells the model so.\n * Matches what kr-file-preview can play back.\n */\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mov'];\n/**\n * File extensions the picker accepts. Mirrors what the backend can read: the\n * document/spreadsheet family Bedrock ingests, the plain-text family read as\n * fallback, and the image formats. Videos are accepted for upload/storage even\n * though the model can't read them. This is a UX convenience — the backend\n * accepts anything and just tells the model when a type can't be read.\n */\nconst ACCEPTED_FILE_EXTENSIONS = [\n 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'csv', 'html', 'md', 'txt', 'json', 'xml', 'vtt', 'srt',\n ...IMAGE_EXTENSIONS,\n ...VIDEO_EXTENSIONS,\n];\n/**\n * AI chatbot component with SSE streaming.\n *\n * Accepts a `send` callback that returns a streaming Response (SSE format).\n * Parses the stream for text tokens, status updates, and errors.\n * Dispatches a `stream-event` custom event for every SSE message so consumers can react.\n *\n * ## SSE Stream Format\n * The component expects `data:` lines with JSON payloads containing a `type` field:\n * - `STATUS` — `{ type: \"STATUS\", message: \"Thinking...\" }`\n * - `RESPONSE_PART` — `{ type: \"RESPONSE_PART\", message: \"token text\" }`\n * - `TOOL_RESULT` — `{ type: \"TOOL_RESULT\", message: \"tool_name\", data: {...} }`\n * - `ERROR` — `{ type: \"ERROR\", message: \"Something went wrong\" }`\n * - `HEARTBEAT` — `{ type: \"HEARTBEAT\" }` (ignored)\n * - `ACTION_CONFIRMATION_REQUIRED` — a guarded tool paused for approval;\n * `{ type, data: { actions: [...] }, finished: true }` (Rail 3).\n *\n * The final event should include `finished: true` to signal stream completion.\n *\n * ## Turn locking (when the composer is free to send)\n * `finished: true` is the single reliable \"turn over, safe to send\" signal — the\n * component unlocks the composer on it, and also on stream close/error as a\n * fallback so a dropped stream never wedges the UI. The one exception is\n * `ACTION_CONFIRMATION_REQUIRED`: it too carries `finished: true`, but the\n * conversation is now awaiting an approve/deny decision, so the composer stays\n * blocked and only a confirmation decision (not a new message) is a valid next\n * call.\n *\n * ## Usage\n * ```html\n * <kr-chatbot\n * label=\"AI Assistant\"\n * .send=${(params) => {\n * return fetch('/api/ai/chat/stream', {\n * method: 'POST',\n * headers: { 'Content-Type': 'application/json', 'Accept': 'text/event-stream' },\n * credentials: 'include',\n * body: JSON.stringify({ userText: params.message })\n * });\n * }}\n * ></kr-chatbot>\n * ```\n *\n * @slot - Optional slot content displayed above the messages area\n *\n * @fires message-submit - When the user sends a message. Cancelable. Detail: `{ message: string }`\n * @fires stream-event - Dispatched for every SSE message received. Detail contains the parsed event data.\n * @fires conversation-created - When a turn with no target creates a new conversation and the chatbot pins it. Detail: `{ conversation }` (the full conversation object).\n * @fires conversation-title - When the server sends the generated title for a new conversation (end of its first turn). The header label is already updated; this is for consumers with their own chrome to sync (breadcrumbs, tab titles). Detail: `{ title }`.\n */\nexport class KRChatbot extends LitElement {\n constructor() {\n super(...arguments);\n // --- Private properties ---\n /**\n * Internal toggle for how the action-confirmation prompt (Rail 3) is presented:\n * - `false`: the compact card that floats over the messages, pinned above the\n * composer — plain-language ask + Yes/Always/No only, no tool arguments.\n * - `true`: the prompt renders inline in the message stream (Claude-CLI style),\n * grows to any height (no inner scroll — the transcript scrolls), and offers a\n * \"Show details\" disclosure of the raw tool input for technical users.\n * Flip here to switch approaches; the floating path is unchanged when false.\n */\n this._inlineConfirm = true;\n /**\n * Internal toggle for how the assistant's reasoning (\"thinking\") is presented:\n * - `false`: the current collapsible grey \"Thinking\" disclosure (kept so we can\n * revert).\n * - `true`: reasoning renders as a plain agentic message — same text style as a\n * normal assistant reply, no box, no collapse.\n * Flip here to switch approaches.\n */\n this._reasoningAsMessage = true;\n this._reader = null;\n this._decoder = new TextDecoder();\n this._buffer = '';\n /**\n * True once the current turn ended cleanly (a `finished:true` chunk arrived).\n * Distinguishes a real completion from a dropped stream: if the SSE stream\n * closes (`result.done`) while this is still false, the turn is NOT over — the\n * connection dropped (5-min emitter timeout, tab was backgrounded, network\n * blip) — so we reconnect instead of unlocking the composer. Reset per turn.\n */\n this._turnFinishedCleanly = false;\n /**\n * Consecutive failed reconnect attempts for the current drop. Bounds the retry\n * loop so a genuinely dead turn (server gone) can't spin forever — after the\n * cap we give up and finish the turn. Reset when a reconnect succeeds or a new\n * turn starts.\n */\n this._reconnectAttempts = 0;\n this._userHasScrolledUp = false;\n /**\n * Keep the end of the streaming response in view. Set at the start of every\n * turn (send, confirmation decision, reconnect); cleared when the user scrolls\n * up on their own (wheel, touch drag, scrollbar drag) and restored when they\n * scroll back to the bottom. Checked in updated() after every streamed chunk.\n */\n this._followStream = false;\n this._isDragging = false;\n this._isResizing = false;\n this._overlay = null;\n this._resizeDir = '';\n this._dragStartX = 0;\n this._dragStartY = 0;\n this._dragStartLeft = 0;\n this._dragStartTop = 0;\n this._resizeStartW = 0;\n this._resizeStartH = 0;\n /** Cursor X at drawer resize start. */\n this._drawerResizeStartX = 0;\n /** Drawer width at resize start. */\n this._drawerResizeStartW = 0;\n /** Counter for depth-aware dragenter/dragleave tracking. */\n this._dragDepth = 0;\n /** Monotonic id source for pending attachments. */\n this._pendingSeq = 0;\n /**\n * The `aiAnalyze` mode for the next picked files — set when the attach action\n * opens the picker (true = \"Attach Files\", false = \"Attach Files for\n * Reference\"), read by the file-input change handler. Not reactive: it's read\n * synchronously in the change handler, never rendered.\n */\n this._pendingAttachAnalyze = true;\n /**\n * Request-id guards for skill searches — bumped on each search so out-of-order\n * responses are dropped (mirrors the kr-combo-box `_requestId` pattern). Org and\n * global searches run concurrently into separate buffers, so each has its own.\n */\n this._orgSkillRequestId = 0;\n this._globalSkillRequestId = 0;\n this._invocableSkillRequestId = 0;\n this._suggestedActionRequestId = 0;\n /**\n * Codes of global skills with an in-flight enable/disable request. The `+`\n * button reads this to show a pending state and ignore repeat clicks. Mutated\n * in place; call requestUpdate() after changing it to re-render.\n */\n this._globalSkillPending = new Set();\n /**\n * The live Web Speech recognizer while dictating, else null. Not reactive —\n * `_isDictating` drives the UI; this is just the handle used to stop it.\n */\n this._speechRecognition = null;\n /**\n * The composer text as it stood when dictation started. Each `result` event\n * re-reports the whole utterance (final + interim), so the value is rebuilt as\n * this base + the transcript rather than appended to — appending would repeat\n * the interim text on every event.\n */\n this._speechBaseValue = '';\n /**\n * Transcript of utterances the recognizer has marked final this session.\n * Held separately because `results` is pruned in continuous mode on some\n * browsers; without this, earlier sentences would vanish mid-dictation.\n */\n this._speechFinalTranscript = '';\n // --- @property (public API) ---\n /**\n * Callback function for sending messages. Receives the user's message and\n * current conversation history. Must return a Response with a streaming SSE body.\n *\n * Optional — when not set, the chatbot uses its built-in default that streams\n * from the Kodaris Bedrock conversation endpoints. Set this to override.\n */\n this.send = null;\n /**\n * Callback function called on init to load existing conversation messages.\n * Must return a Promise that resolves with an array of KRChatbotMessage.\n *\n * Optional — when not set, the chatbot uses its built-in default that loads\n * existing messages from the Kodaris Bedrock conversation. Set this to override.\n */\n this.load = null;\n /**\n * Conversation messages. Can be set externally for initial messages.\n * Updated internally as the conversation progresses.\n */\n this.messages = [];\n /**\n * Header label text.\n */\n this.label = 'Kat';\n /**\n * Input placeholder text.\n */\n this.placeholder = 'Type a message...';\n /**\n * Whether the chat panel is open. Only relevant in floating mode.\n */\n this.opened = false;\n /**\n * Hide the built-in floating toggle button. Use this when an external\n * control (e.g. the site-editor bar) owns opening the chat — the panel is\n * then driven via the `open()` / `close()` / `toggle()` methods.\n */\n this.hideToggle = false;\n /**\n * Layout mode.\n * - `'floating'` (default): the chatbot is a fixed bottom-right widget with a\n * toggle button, and the panel can be dragged and resized. This is the\n * traditional chat-widget appearance.\n * - `'inline'`: the chatbot drops its fixed positioning and fills its parent\n * container (100% width/height, no border radius/shadow, no toggle, no\n * drag/resize). The panel is always open. Use this to embed the chat as a\n * full page or panel region.\n */\n this.variant = 'floating';\n /**\n * The conversation this chatbot's turns target (backend `conversationID`).\n *\n * - Set → every turn is sent with this `conversationID`, so the chat continues\n * that specific conversation.\n * - Unset → the first turn is sent with `createNew: true` (a fresh\n * conversation); the component then resolves the new conversation's id (via\n * `/conversation/last`) and pins it here so the rest of the session stays one\n * conversation instead of spawning a new one per message.\n *\n * Only used by the built-in `send` default; a custom `send` owns its own\n * targeting.\n */\n this.conversationId = null;\n // --- @state (internal) ---\n this._inputValue = '';\n this._isStreaming = false;\n this._error = '';\n /**\n * The current conversation's title. In the floating widget it replaces the\n * static header label so the user sees which conversation they're in. Set from\n * the loaded/switched conversation and from the live `CONVERSATION_TITLE` event\n * (the server generates a title at the end of a new conversation's first turn);\n * empty for a brand-new conversation, where the header falls back to `label`.\n */\n this._conversationTitle = '';\n /**\n * User-facing context warning text (`CONVERSATION_TOKEN_WARNING`). Shown as a\n * dismissible banner in all variants. Carries only friendly guidance, no numbers.\n */\n this._contextWarning = '';\n /**\n * True once the conversation hit the context-window limit\n * (`CONVERSATION_LIMIT_REACHED`, or `contextExceeded` on load). Drives a\n * blocking \"start a new conversation\" notice. User-facing, all variants.\n */\n this._contextLimitReached = false;\n /** Server-provided limit text (`CONVERSATION_LIMIT_REACHED`), if any. */\n this._contextLimitMessage = '';\n /**\n * The guarded tool awaiting the user's decision, from the turn's\n * `ACTION_CONFIRMATION_REQUIRED` event (`data.actions[]`, of which we handle the\n * first — the framework confirms one guarded tool at a time). Non-empty means\n * the conversation is paused on a confirmation: the normal composer is blocked\n * (a new chat message would be rejected by the server with\n * `awaitingConfirmation`) and the approve/deny prompt is shown instead. Cleared\n * once a decision is sent.\n *\n * This is the one case where `finished:true` unlocks the turn lock but does\n * NOT free the composer — the only valid next call is a confirmation decision.\n */\n this._pendingActions = [];\n /**\n * Keyboard-highlighted confirmation option, as an index into the decision list\n * (0 = Yes, 1 = Always allow, 2 = No). Yes is highlighted by default so Enter\n * approves. Arrow Left/Right move it; Enter activates it. -1 when no batch is\n * pending.\n */\n this._confirmationHighlighted = -1;\n /**\n * True while a confirmation decision (approve/deny) is being sent and its\n * follow-up turn streams. Disables the approve/deny buttons so the batch can't\n * be resolved twice.\n */\n this._confirmationInFlight = false;\n /**\n * INTERNAL-ONLY latest telemetry snapshot (last-value-wins). Populated from\n * `TOKEN_USAGE` events during streaming and hydrated from the conversation\n * DTO on load. Only surfaced in the `inline` variant's debug panel.\n */\n this._telemetry = null;\n /**\n * INTERNAL-ONLY per-iteration telemetry log for the debug panel's verbose\n * table. Append-only within a turn; reset at the start of each send. Each row\n * may be augmented with its `CACHE_CHECKPOINT` info.\n */\n this._iterationLog = [];\n /** Latest cache-checkpoint info keyed by iteration, for the verbose table. */\n this._cacheCheckpoints = {};\n /**\n * Whether the side drawer is open (slid in). The drawer stays mounted and\n * animates via a CSS transform, so this drives the slide and the content push.\n */\n this._drawerOpen = false;\n /**\n * Which view the drawer shows — settings, debug, history, or a single tool\n * call's full detail. One drawer holds them all; header buttons switch\n * settings/debug/history and clicking a tool line switches to `toolDetail`. The\n * content/width swap inside. Never null, so the content stays visible while the\n * drawer slides shut. `history` is floating-only (the previous-conversations\n * picker); in floating the drawer fills the panel over the transcript.\n */\n this._drawerView = 'settings';\n /**\n * The user's previous conversations, loaded from `/conversation/list` when the\n * history view opens. Each is the raw ConversationViewDto (we read conversationID,\n * title, lastModified). Empty until the first open; reloaded on each open so a\n * freshly-created or renamed conversation shows.\n */\n this._conversations = [];\n /** True while the history list is being fetched (drives a loading state). */\n this._conversationsLoading = false;\n /**\n * The tool call whose full input/output the `toolDetail` drawer view shows —\n * the clicked `tool_use` message and its paired `tool_result` message, stored\n * whole. The render reads `.data.*` off them (and formats for display) so we\n * don't duplicate the message shape here. Transient — set on click, never\n * persisted (its bytes can be large and the view is a peek). Null when none.\n */\n this._toolDetail = null;\n /** Which tool-detail block ('input' | 'output') just flashed \"Copied\" (null = none). */\n this._toolDetailCopied = null;\n /** Whether the tool-detail Input section is expanded. Both open on open. */\n this._toolDetailInputOpen = true;\n /** Whether the tool-detail Output section is expanded. */\n this._toolDetailOutputOpen = true;\n /** Current width of the drawer in px (user-resizable, persisted). */\n this._drawerWidth = 430;\n /** True while the user is dragging the drawer's resize handle. */\n this._isDrawerResizing = false;\n /** Files staged in the composer, before the message is sent. */\n this._pendingConversationFiles = [];\n /** True while a file is being dragged over the panel (shows the drop overlay). */\n this._isDraggingFile = false;\n /** Whether the `/` skill menu is open above the composer. */\n this._skillMenuOpened = false;\n /** Current `/` query (text after the slash), sent to `_searchOrgSkills`. */\n this._skillQuery = '';\n /**\n * Latest org skill search results (this instance's own skills). Backs the\n * browse dialog's \"Your Org\" tab only — global skills never appear here.\n */\n this._orgSkills = [];\n /**\n * Latest shared-Kodaris (global) skill results, for the browse dialog's\n * \"Kodaris\" tab. Kept separate from `_orgSkills` so switching tabs shows\n * fresh results immediately instead of the other tab's stale list — the browse\n * search fills both buffers at once.\n */\n this._globalSkills = [];\n /**\n * Latest results for the `/` composer menu — everything the current user can\n * actually invoke, merged and role-filtered server-side by\n * `/conversation/availableSkills`. A separate buffer from the two browse-tab lists\n * so installed globals in the menu never leak into the \"Your Org\" tab.\n */\n this._invocableSkills = [];\n /**\n * Context-aware action chips for the empty state, from `/conversation/suggestedActions`.\n * Loaded fresh every time the panel opens on an empty conversation (see `_loadSuggestedActions`);\n * cleared when the first message is sent so they don't linger over a live conversation.\n */\n this._suggestedActions = [];\n /**\n * AI framework UI config flags fetched from `aiFrameworkConfig` on connect.\n * `debugTelemetryEnabled` (same server-side gate as TOKEN_USAGE emission) turns\n * on the debug drawer toggle and the `/test-context-warning` / `/test-context-limit` composer\n * options — known up front, before any message.\n */\n this._aiFrameworkConfig = {};\n /** Highlighted item in the skill menu for keyboard navigation (-1 = none). */\n this._skillHighlighted = 0;\n /** Index of the message whose copy button just flashed \"Copied\" (-1 = none). */\n this._copiedIndex = -1;\n /** Whether the \"Browse all skills\" dialog is open. */\n this._skillBrowseOpened = false;\n /**\n * Active tab in the browse dialog. `org` shows `_orgSkills` (this instance's\n * skills); `kodaris` shows `_globalSkills` (the shared global catalog).\n */\n this._skillBrowseSource = 'org';\n /** Search text in the browse dialog, routed to the active tab's search. */\n this._skillBrowseQuery = '';\n /** True while the mic is live and speech is being transcribed into the composer. */\n this._isDictating = false;\n /**\n * Conversation posture for guarded tools (the composer's mode selector). Sent on\n * each turn's `mode` field and kept in sync with the server's `CONVERSATION_STATE`\n * event. Defaults to NORMAL (ask before each guarded tool).\n */\n this._mode = 'NORMAL';\n /** Whether the composer's mode menu (Ask / Auto / Plan) is open. */\n this._modeMenuOpened = false;\n /**\n * Whether to show the tools the assistant ran, as activity lines in the\n * transcript. On by default; a user can hide them from the settings panel.\n * User-controlled in the settings panel; persisted in localStorage.\n */\n this._showTools = true;\n /**\n * Whether to also show each tool's inputs and results under its line. Only\n * has an effect when `_showTools` is on. Off by default.\n */\n this._showToolInputs = false;\n /**\n * Whether to show the raw tool input inside the confirmation card (the JSON the\n * model proposed for a guarded action). The plain-language ask + Yes/No always\n * show; this only reveals the technical detail. Off by default.\n */\n this._showConfirmationInput = false;\n /**\n * Close the `/` skill menu when the click lands outside it.\n *\n * Bound at the document because a click anywhere — including outside this\n * component entirely — should dismiss the menu. `composedPath()` rather than\n * `e.target` since the menu lives in this component's shadow root, where\n * `target` on a document listener is retargeted to the host element and every\n * inside click would look like an outside one.\n */\n this._handleDocumentClick = (e) => {\n // Close the mode menu on any click outside the mode selector (the trigger\n // owns its own toggle, so exclude the whole `.mode` block).\n if (this._modeMenuOpened) {\n const modePath = e.composedPath();\n if (!modePath.some((el) => el instanceof HTMLElement && el.classList.contains('mode'))) {\n this._modeMenuOpened = false;\n }\n }\n if (!this._skillMenuOpened) {\n return;\n }\n // Excluded: the textarea, since clicking it keeps editing the same `/` command\n // and dismissing there would fight the user still typing it; and the plus\n // button, which owns the menu's open/close itself. The plus exclusion matters\n // in both directions — this listener runs after the button's own handler, so\n // without it a click that just opened the menu would immediately close it\n // again, and a click meant to toggle it shut would be double-handled.\n const path = e.composedPath();\n if (path.some((el) => el instanceof HTMLElement && (el.classList.contains('skill-menu') || el.classList.contains('input') || el.classList.contains('input-plus')))) {\n return;\n }\n this._skillMenuOpened = false;\n };\n this._handleMouseMove = (e) => {\n if (this._isDragging) {\n let newLeft = this._dragStartLeft + (e.clientX - this._dragStartX);\n let newTop = this._dragStartTop + (e.clientY - this._dragStartY);\n const w = this._panelEl.offsetWidth;\n newLeft = Math.max(-w + 48, Math.min(newLeft, window.innerWidth - 48));\n newTop = Math.max(0, Math.min(newTop, window.innerHeight - 48));\n this._panelEl.style.left = newLeft + 'px';\n this._panelEl.style.top = newTop + 'px';\n }\n else if (this._isResizing) {\n const dx = e.clientX - this._dragStartX;\n const dy = e.clientY - this._dragStartY;\n const minW = 340;\n const minH = 380;\n const maxW = window.innerWidth * 0.9;\n const maxH = window.innerHeight - 72;\n let newW = this._resizeStartW;\n let newH = this._resizeStartH;\n let newLeft = this._dragStartLeft;\n let newTop = this._dragStartTop;\n if (this._resizeDir.includes('e')) {\n newW = Math.max(minW, Math.min(this._resizeStartW + dx, maxW));\n }\n if (this._resizeDir.includes('w')) {\n newW = Math.max(minW, Math.min(this._resizeStartW - dx, maxW));\n newLeft = this._dragStartLeft + (this._resizeStartW - newW);\n }\n if (this._resizeDir.includes('s')) {\n newH = Math.max(minH, Math.min(this._resizeStartH + dy, maxH));\n }\n if (this._resizeDir.includes('n')) {\n newH = Math.max(minH, Math.min(this._resizeStartH - dy, maxH));\n newTop = this._dragStartTop + (this._resizeStartH - newH);\n }\n newLeft = Math.max(0, newLeft);\n newTop = Math.max(0, newTop);\n this._panelEl.style.width = newW + 'px';\n this._panelEl.style.height = newH + 'px';\n this._panelEl.style.left = newLeft + 'px';\n this._panelEl.style.top = newTop + 'px';\n }\n };\n this._handleMouseUp = () => {\n if (this._isDragging) {\n this._isDragging = false;\n this._panelEl.classList.remove('panel--dragging');\n }\n if (this._isResizing) {\n this._isResizing = false;\n this._panelEl.classList.remove('panel--resizing');\n }\n if (this._overlay) {\n this._overlay.style.display = 'none';\n }\n document.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n this._saveState();\n };\n /**\n * Keyboard control for the confirmation prompt. Bound at the document so it\n * works even though the composer (where focus usually sits) is blocked while a\n * batch is pending: Left/Right move the highlight across Yes / Always allow /\n * No, Enter activates the highlighted one. No-op when nothing is pending or a\n * decision is already in flight.\n */\n this._handleDocumentKeydown = (e) => {\n if (!this._pendingActions.length || this._confirmationInFlight) {\n return;\n }\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n this._confirmationHighlighted = (this._confirmationHighlighted + 1) % CONFIRMATION_DECISIONS.length;\n return;\n }\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this._confirmationHighlighted =\n (this._confirmationHighlighted - 1 + CONFIRMATION_DECISIONS.length) % CONFIRMATION_DECISIONS.length;\n return;\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n const option = CONFIRMATION_DECISIONS[this._confirmationHighlighted];\n if (option) {\n this._handleConfirmationDecision(option.decision);\n }\n }\n };\n this._handleDrawerResizeMouseMove = (e) => {\n if (!this._isDrawerResizing) {\n return;\n }\n // Handle is on the drawer's left edge; dragging left (negative dx) widens it.\n const dx = e.clientX - this._drawerResizeStartX;\n const minW = 300;\n // Never let the chat column shrink below 300px — cap the drawer at the\n // container width minus that reserved chat width.\n const minChatWidth = 300;\n const maxW = Math.max(minW, this.offsetWidth - minChatWidth);\n this._drawerWidth = Math.max(minW, Math.min(this._drawerResizeStartW - dx, maxW));\n };\n this._handleDrawerResizeMouseUp = () => {\n this._isDrawerResizing = false;\n document.removeEventListener('mousemove', this._handleDrawerResizeMouseMove);\n document.removeEventListener('mouseup', this._handleDrawerResizeMouseUp);\n this._saveState();\n };\n }\n // --- Lifecycle ---\n connectedCallback() {\n super.connectedCallback();\n // Default to loading a conversation's messages when the consumer hasn't\n // provided their own `load`. With `conversationId` set we rebuild that\n // conversation; with none set the user wants a NEW conversation, so we start\n // blank (no resume — the first message creates one via `send`). Rows already\n // match KRChatbotMessage ({ type, content }); we only parse each row's\n // `conversationFileIDs` (a JSON array string of ids) into `conversationFiles`.\n if (!this.load) {\n this.load = () => {\n if (this.conversationId == null) {\n return Promise.resolve([]);\n }\n return KRHttp.fetch({ url: `/api/system/conversation/${this.conversationId}/messages` })\n .then((r) => r.json())\n .then((res) => Promise.all((res?.data || []).map((msg) => {\n // Persisted tool_use / tool_result rows — the message IS the row: keep\n // the type and parse content into `data`, the same {type, data} shape\n // the live stream pushes. The render reads data.* and pairs a result to\n // its use by data.toolUseId. No transform, so live and reload match.\n if (msg.type === 'tool_use' || msg.type === 'tool_result') {\n let data = {};\n try {\n data = JSON.parse(msg.content || '{}');\n }\n catch { /* malformed — render a bare line from what we have */ }\n return Promise.resolve({\n type: msg.type,\n content: '',\n data,\n });\n }\n // Persisted reasoning row — the DB stores the model's thinking as its own\n // row with the text in `content` and type \"reasoning\". Live, reasoning\n // instead arrives as REASONING_PART deltas accumulated onto an assistant\n // bubble's `reasoning` property, which is the ONLY shape the render shows\n // (via msg.reasoning). Map the DB row into that same shape — an assistant\n // bubble carrying the text in `reasoning` — so reloaded/reconciled\n // reasoning renders identically to live instead of vanishing.\n if (msg.type === 'reasoning') {\n return Promise.resolve({\n type: 'assistant',\n content: '',\n reasoning: msg.content || '',\n });\n }\n // A persisted approve/deny record — content is {outcome, tools:[...]}.\n // Keep the type, parse content into `data`; the render reads msg.data.*.\n if (msg.type === 'action_decision') {\n let data = {};\n try {\n data = JSON.parse(msg.content || '{}');\n }\n catch { /* malformed — render a bare line from what we have */ }\n return Promise.resolve({\n type: 'action_decision',\n content: '',\n data,\n });\n }\n // Resolve this message's `conversationFileIDs` (a JSON array string of\n // ids) into full file objects — each fetch response IS the\n // KRChatbotConversationFile (id + niceName + mimeType), and niceName\n // drives the previewer's file-type detection. A failed fetch drops\n // that file rather than rendering a broken thumbnail.\n let ids = [];\n try {\n ids = JSON.parse(msg.conversationFileIDs || '[]');\n }\n catch { /* no/invalid attachments — leave empty */ }\n if (!ids.length) {\n return Promise.resolve(msg);\n }\n return Promise.all(ids.map((id) => KRHttp.fetch({ url: `/api/system/conversationFile/${id}` })\n .then((r) => r.json())\n .then((meta) => meta?.data)\n .catch(() => null)))\n .then((files) => {\n msg.conversationFiles = files.filter((f) => f != null);\n return msg;\n });\n })));\n };\n }\n // Tab-scoped resume (floating only): a reload should redisplay the exact\n // conversation this tab was on, and a brand-new tab should reopen the user's\n // most-recent one. The pinned id lives in sessionStorage (per-tab — unlike\n // localStorage it isn't shared across tabs, so two tabs can sit on different\n // conversations). We resolve the id FIRST, then run the built-in load so it\n // rebuilds the right transcript. Skipped when the consumer owns targeting (an\n // explicit `conversation-id`) or in inline mode (embedded as a page — the host\n // route, not the tab, decides the conversation).\n let resolveConversationId = Promise.resolve();\n if (this.variant === 'floating' && this.conversationId == null) {\n const stored = Number(sessionStorage.getItem('kr-chatbot-conversation-id'));\n if (stored > 0) {\n this.conversationId = stored;\n // Fetch the conversation so the header shows its title on reload (the\n // transcript load doesn't carry it). Best-effort — the header falls back\n // to the default label if this fails.\n resolveConversationId = KRHttp.fetch({ url: `/api/system/conversation/${stored}` })\n .then((r) => r.json())\n .then((res) => {\n this._conversationTitle = res?.data?.title || '';\n })\n .catch(() => { });\n }\n else {\n // Fresh tab, nothing pinned yet — resume the user's most recent conversation\n // (404 when they have none, which leaves us blank for a new one).\n resolveConversationId = KRHttp.fetch({ url: '/api/system/conversation/last' })\n .then((r) => {\n if (!r.ok) {\n return;\n }\n return r.json().then((res) => {\n const id = res?.data?.conversationID;\n if (typeof id === 'number') {\n this.conversationId = id;\n this._conversationTitle = res?.data?.title || '';\n this._persistConversationId();\n }\n });\n })\n .catch(() => { });\n }\n }\n // `this.load` is always set by here (defaulted above when the consumer didn't\n // supply one); the `!` is because TS can't narrow the nullable property across\n // the promise boundary.\n resolveConversationId.then(() => this.load()).then((messages) => {\n if (messages && messages.length) {\n this.messages = messages;\n }\n // A turn may still be running server-side for this conversation (the page was\n // reloaded mid-turn, or opened on another device while a turn streams). After\n // the transcript loads, try to attach to that live turn: _reconnectStream hits\n // the read-only attach endpoint — 200 resumes streaming (locks the composer +\n // shows the typing indicator so the user knows the AI is still working), 204\n // means nothing is running (stays idle). Only meaningful with a pinned\n // conversation and the built-in stream (a custom `send` owns its own turns).\n if (this.conversationId && !this._isStreaming) {\n this._reconnectStream();\n }\n }).catch(() => { });\n // Fetch the framework config on load (debugTelemetryEnabled, v2ChatEnabled,\n // registryServer). debugTelemetryEnabled gates the debug affordances and is\n // known before any message.\n KRHttp.fetch({\n url: '/api/system/integration/aws/bedrock/aiFrameworkConfig',\n })\n .then((r) => r.json())\n .then((res) => {\n this._aiFrameworkConfig = res?.data || {};\n })\n .catch(() => { });\n // Inline mode fills its container and is always open — the floating widget's\n // toggle/drag/resize state doesn't apply, but the composer message and debug\n // drawer state (restored inside _restoreState) do.\n if (this.variant === 'inline') {\n this.opened = true;\n }\n this._restoreState();\n document.addEventListener('click', this._handleDocumentClick);\n // Drive the confirmation prompt from the keyboard even when focus isn't in the\n // (blocked) composer: Left/Right move the highlight, Enter activates it.\n document.addEventListener('keydown', this._handleDocumentKeydown);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n document.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n document.removeEventListener('click', this._handleDocumentClick);\n document.removeEventListener('keydown', this._handleDocumentKeydown);\n // Release the mic if the chatbot is torn down mid-dictation — otherwise the\n // recognizer keeps the browser's recording indicator lit with nothing to\n // transcribe into. abort() (not stop()) since the discarded text has nowhere to go.\n if (this._speechRecognition) {\n this._speechRecognition.abort();\n this._speechRecognition = null;\n this._isDictating = false;\n }\n // Release any object URLs still held by staged attachments.\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n }\n updated(changed) {\n if (changed.has('messages')) {\n if (!this._userHasScrolledUp && !this._isStreaming && this._messagesEl) {\n requestAnimationFrame(() => {\n if (this._messagesEl) {\n this._messagesEl.scrollTop = this._messagesEl.scrollHeight;\n }\n });\n }\n }\n // Streamed chunks mutate the message in place and call requestUpdate(), so\n // `changed` never has 'messages' mid-turn — run the follow on every update\n // instead. The user message stays pinned at the top (Gemini-style) until the\n // response grows past the bottom of the view; from then on the end stays in\n // view. Never scrolls to the empty runway below the content.\n if (this._isStreaming && this._followStream && this._messagesEl) {\n requestAnimationFrame(() => {\n const container = this._messagesEl;\n if (!container || !this._isStreaming || !this._followStream) {\n return;\n }\n const turnEls = container.querySelectorAll('.agent-turn');\n const turnEl = turnEls[turnEls.length - 1];\n const lastEl = turnEl?.lastElementChild;\n if (!lastEl) {\n return;\n }\n // Bottom edge of the turn's last rendered child, in the container's\n // scroll coordinates — the runway (min-height on the turn) sits below it.\n const contentBottom = lastEl.getBoundingClientRect().bottom\n - container.getBoundingClientRect().top\n + container.scrollTop\n + 24;\n const visibleBottom = container.scrollTop + container.clientHeight;\n if (contentBottom > visibleBottom) {\n container.scrollTop = Math.min(contentBottom - container.clientHeight, container.scrollHeight - container.clientHeight);\n }\n });\n }\n if (changed.has('opened') && this.opened && this._inputEl) {\n setTimeout(() => {\n if (this._inputEl) {\n this._inputEl.focus();\n }\n }, 200);\n }\n // Load context-aware action chips every time the panel opens on an empty conversation. Fires for\n // the floating variant on toggle-open and for the inline variant on its first render (which sets\n // `opened` true at connect). Only when empty — a resumed conversation shows its transcript, not chips.\n // The request-id guard inside handles a stale reply if the user closes/reopens quickly.\n if (changed.has('opened') && this.opened && this.messages.length === 0) {\n this._loadSuggestedActions();\n }\n // Position the fixed skill menu above the composer, following the krubble\n // select-field pattern (fixed element positioned from the trigger's rect).\n if (this._skillMenuOpened) {\n this._positionSkillMenu();\n }\n // Keep the keyboard-highlighted skill scrolled into view.\n if (changed.has('_skillHighlighted') && this._skillMenuOpened) {\n this._skillMenuEl\n ?.querySelector('.skill-menu__item--highlighted')\n ?.scrollIntoView({ block: 'nearest' });\n }\n }\n /** Anchor the fixed skill menu to the composer, opening upward above it. */\n _positionSkillMenu() {\n requestAnimationFrame(() => {\n if (!this._skillMenuEl || !this._inputWrapperEl) {\n return;\n }\n const inputRect = this._inputWrapperEl.getBoundingClientRect();\n this._skillMenuEl.style.left = inputRect.left + 'px';\n this._skillMenuEl.style.width = inputRect.width + 'px';\n // Bound the menu by the chat panel's own top edge so it stays within the\n // widget. In floating mode that keeps it inside the card; in inline mode the\n // panel top sits just below the app header/breadcrumb, so it stays clear of\n // those too. An 8px gap keeps it off both edges.\n const topLimit = this._panelEl.getBoundingClientRect().top + 8;\n const spaceAbove = inputRect.top - 8 - topLimit;\n this._skillMenuEl.style.maxHeight = spaceAbove + 'px';\n // Measure after the cap is applied so the upward anchor uses the real\n // height, then clamp the top edge to the panel bound.\n const menuRect = this._skillMenuEl.getBoundingClientRect();\n const top = Math.max(topLimit, inputRect.top - menuRect.height - 8);\n this._skillMenuEl.style.top = top + 'px';\n });\n }\n // --- Public methods ---\n /**\n * Stops the current stream without clearing the conversation.\n */\n stop() {\n this._handleStop();\n }\n /** Whether a turn is in flight — true from send until the stream ends. */\n isStreaming() {\n return this._isStreaming;\n }\n /** Open the chat panel. */\n open() {\n if (!this.opened) {\n this._handleToggle();\n }\n }\n /** Close the chat panel. */\n close() {\n if (this.opened) {\n this._handleToggle();\n }\n }\n /** Toggle the chat panel open/closed. */\n toggle() {\n this._handleToggle();\n }\n /**\n * Open the panel and send `payload.message` as if the user had typed it and pressed Enter.\n *\n * Lets a host app hand the assistant a predefined prompt (e.g. a \"Migrate\" button that\n * starts a skill for the current record). Goes through `_handleSubmit`, not `_send`, so\n * the streaming and pending-confirmation guards and the cancelable `message-submit`\n * event all apply exactly as they do for a typed message. Nothing is sent while a turn\n * is in flight; the message is dropped rather than queued.\n */\n prompt(payload) {\n this.open();\n this._inputValue = payload.message;\n this._handleSubmit();\n }\n // --- Private methods ---\n /**\n * Shows a full-viewport transparent overlay during drag/resize operations.\n *\n * This overlay solves a critical rendering issue when the chatbot is used inside\n * a page that contains iframes (e.g., the AI editor shell where the page content\n * is rendered in an iframe and the chatbot floats on top).\n *\n * Without the overlay, modifying the iframe's `pointer-events` style during drag\n * (to prevent it from swallowing mousemove events) causes Chrome to recalculate\n * compositing layers. This layer recalculation blocks the browser from repainting\n * the chatbot panel's style changes (width/height/position) even though they are\n * correctly applied to the DOM. The result is that the panel appears frozen while\n * the user drags, despite the inline styles updating on every mousemove.\n *\n * The overlay approach avoids this entirely: instead of touching the iframe's styles,\n * we place a transparent div (z-index 9999) above the iframe but below the chatbot\n * (z-index 10000). This div intercepts all mouse events that would otherwise hit the\n * iframe, without triggering any compositing layer changes on the iframe itself.\n */\n _showOverlay() {\n if (!this._overlay) {\n this._overlay = document.createElement('div');\n this._overlay.style.cssText = 'position:fixed; inset:0; z-index:9999; display:none;';\n document.body.appendChild(this._overlay);\n }\n this._overlay.style.display = 'block';\n }\n _handleHeaderMouseDown(e) {\n // Inline mode fills its parent — dragging the panel doesn't apply.\n if (this.variant === 'inline') {\n return;\n }\n // Ignore clicks on buttons inside the header\n if (e.target.closest('button')) {\n return;\n }\n if (!this._panelEl) {\n return;\n }\n this._isDragging = true;\n this._panelEl.classList.add('panel--dragging');\n this._showOverlay();\n const rect = this._panelEl.getBoundingClientRect();\n this._panelEl.style.left = rect.left + 'px';\n this._panelEl.style.top = rect.top + 'px';\n this._panelEl.style.right = 'auto';\n this._panelEl.style.bottom = 'auto';\n this._panelEl.style.position = 'fixed';\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n this._dragStartLeft = rect.left;\n this._dragStartTop = rect.top;\n e.preventDefault();\n document.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n }\n _handleResizeMouseDown(e) {\n // Inline mode fills its parent — resizing the panel doesn't apply.\n if (this.variant === 'inline') {\n return;\n }\n if (!this._panelEl) {\n return;\n }\n this._isResizing = true;\n this._resizeDir = e.currentTarget.dataset.dir || '';\n this._panelEl.classList.add('panel--resizing');\n this._showOverlay();\n const rect = this._panelEl.getBoundingClientRect();\n this._panelEl.style.left = rect.left + 'px';\n this._panelEl.style.top = rect.top + 'px';\n this._panelEl.style.right = 'auto';\n this._panelEl.style.bottom = 'auto';\n this._panelEl.style.position = 'fixed';\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n this._dragStartLeft = rect.left;\n this._dragStartTop = rect.top;\n this._resizeStartW = rect.width;\n this._resizeStartH = rect.height;\n e.preventDefault();\n e.stopPropagation();\n document.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n }\n _handleToggle() {\n this.opened = !this.opened;\n if (this.opened && this._panelEl) {\n this._applyStoredLayout();\n }\n this._saveState();\n }\n /**\n * Persist the pinned conversation id per-tab so a reload redisplays this exact\n * conversation. sessionStorage (not localStorage) is deliberate: it's scoped to\n * the tab, so two tabs can sit on different conversations without clobbering\n * each other. Only meaningful for the floating widget's built-in flow — inline\n * embeds and custom-`load` consumers own their own targeting.\n */\n _persistConversationId() {\n // Floating-only: inline embeds (and custom-`load` consumers) own their own\n // targeting and never resume from this key, so they must not write it either —\n // otherwise an inline chat sharing the page/origin would clobber the floating\n // widget's pinned id.\n if (this.variant !== 'floating') {\n return;\n }\n try {\n if (this.conversationId != null) {\n sessionStorage.setItem('kr-chatbot-conversation-id', String(this.conversationId));\n }\n else {\n sessionStorage.removeItem('kr-chatbot-conversation-id');\n }\n }\n catch { /* sessionStorage not available */ }\n }\n /**\n * The floating widget and inline embeds persist to separate localStorage keys so\n * they can't clobber each other — an inline chat is always `opened`, and writing\n * that into the floating widget's state would pop its panel open on the next\n * page. Floating keeps the original key so existing saved layouts survive.\n */\n _saveState() {\n try {\n // `toolDetail` is a transient peek, not a saved view — persist only the two\n // real preference views so a reload never reopens a stale tool.\n let persistedDrawerView = this._drawerView;\n if (persistedDrawerView === 'toolDetail') {\n persistedDrawerView = 'settings';\n }\n const state = {\n opened: String(this.opened),\n message: this._inputValue,\n mode: this._mode,\n showTools: String(this._showTools),\n showToolInputs: String(this._showToolInputs),\n showConfirmationInput: String(this._showConfirmationInput),\n drawerOpen: String(this._drawerOpen),\n drawerView: persistedDrawerView,\n drawerWidth: String(this._drawerWidth),\n };\n if (this._panelEl) {\n const s = this._panelEl.style;\n if (s.left) {\n state.left = s.left;\n }\n if (s.top) {\n state.top = s.top;\n }\n if (s.width) {\n state.width = s.width;\n }\n if (s.height) {\n state.height = s.height;\n }\n if (s.position) {\n state.position = s.position;\n }\n }\n let storageKey = 'kr-chatbot-state';\n if (this.variant === 'inline') {\n storageKey = 'kr-chatbot-state-inline';\n }\n localStorage.setItem(storageKey, JSON.stringify(state));\n }\n catch { /* localStorage not available */ }\n }\n _restoreState() {\n try {\n let storageKey = 'kr-chatbot-state';\n if (this.variant === 'inline') {\n storageKey = 'kr-chatbot-state-inline';\n }\n const raw = localStorage.getItem(storageKey);\n if (!raw) {\n return;\n }\n const state = JSON.parse(raw);\n // Draft text and the debug drawer are persisted for all variants.\n // A lone `/` is dropped — it's the in-progress half of a menu interaction,\n // not a draft, and restoring it would revive a stale menu the user never\n // used. Anything with an actual command after the slash (`/code`, `/code do\n // the thing`) is a real draft and restores normally. Trimmed before testing\n // so a stray space around the slash doesn't defeat the check.\n if (typeof state.message === 'string' && state.message.trim() !== '/') {\n this._inputValue = state.message;\n }\n if (state.mode === 'NORMAL' || state.mode === 'EDIT' || state.mode === 'PLAN') {\n this._mode = state.mode;\n }\n this._showTools = state.showTools === 'true';\n this._showToolInputs = state.showToolInputs === 'true';\n this._showConfirmationInput = state.showConfirmationInput === 'true';\n this._drawerOpen = state.drawerOpen === 'true';\n if (state.drawerView === 'settings' || state.drawerView === 'debug' || state.drawerView === 'history') {\n this._drawerView = state.drawerView;\n // History's list isn't persisted (it can go stale); refetch it so a reload\n // that was on the conversations panel comes back to a populated list rather\n // than an empty one.\n if (state.drawerView === 'history') {\n this._loadConversations();\n }\n }\n const w = Number(state.drawerWidth);\n if (w >= 300) {\n this._drawerWidth = w;\n }\n // The floating widget's open/layout state doesn't apply to inline mode.\n if (this.variant !== 'inline' && state.opened === 'true') {\n this.opened = true;\n // Apply layout after first render\n this.updateComplete.then(() => this._applyStoredLayout());\n }\n }\n catch { /* localStorage not available */ }\n }\n _applyStoredLayout() {\n try {\n let storageKey = 'kr-chatbot-state';\n if (this.variant === 'inline') {\n storageKey = 'kr-chatbot-state-inline';\n }\n const raw = localStorage.getItem(storageKey);\n if (!raw || !this._panelEl) {\n return;\n }\n const state = JSON.parse(raw);\n if (state.position) {\n this._panelEl.style.position = state.position;\n }\n if (state.left) {\n this._panelEl.style.left = state.left;\n }\n if (state.top) {\n this._panelEl.style.top = state.top;\n }\n if (state.width) {\n this._panelEl.style.width = state.width;\n }\n if (state.height) {\n this._panelEl.style.height = state.height;\n }\n }\n catch { /* localStorage not available */ }\n }\n _handleInputChange(e) {\n this._inputValue = e.target.value;\n this._saveState();\n // Auto-resize textarea\n const textarea = e.target;\n textarea.style.height = 'auto';\n textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px';\n // Open the skill menu while the message is a `/` command being typed (a\n // leading slash with no space yet). The text after the slash is the search\n // query, run server-side via `_searchInvocableSkills`.\n // (org skills + installed globals — everything invocable by /code)\n const slashMatch = this._inputValue.match(/^\\/(\\S*)$/);\n if (slashMatch) {\n this._skillMenuOpened = true;\n this._skillQuery = slashMatch[1];\n this._skillHighlighted = 0;\n this._searchInvocableSkills(this._skillQuery);\n }\n else {\n this._skillMenuOpened = false;\n }\n }\n _handleKeyDown(e) {\n // When the skill menu is open, arrow keys / Enter / Escape drive it. The top\n // actions (Attach Files, Attach Files for Reference, Browse All Skills, plus\n // the two debug test triggers when enabled) come first, then the filtered\n // skills — all one navigable list.\n if (this._skillMenuOpened) {\n const debugActions = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let actionCount = 3;\n if (debugActions) {\n actionCount = 5;\n }\n const count = actionCount + this._invocableSkills.length;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this._skillHighlighted = (this._skillHighlighted + 1) % count;\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n this._skillHighlighted = (this._skillHighlighted - 1 + count) % count;\n return;\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this._activateSkillMenuItem(this._skillHighlighted);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n this._skillMenuOpened = false;\n return;\n }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this._handleSubmit();\n }\n }\n /** Run the skill-menu item at the given flat index (actions first, then skills). */\n _activateSkillMenuItem(index) {\n const debugActions = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let actionCount = 3;\n if (debugActions) {\n actionCount = 5;\n }\n if (index === 0) {\n this._openFilePicker(true);\n return;\n }\n if (index === 1) {\n this._openFilePicker(false);\n return;\n }\n if (index === 2) {\n this._handleSkillBrowseOpen();\n return;\n }\n if (debugActions && index === 3) {\n this._skillMenuOpened = false;\n this._send({\n message: '/test-context-warning',\n conversationFiles: [],\n });\n return;\n }\n if (debugActions && index === 4) {\n this._skillMenuOpened = false;\n this._send({\n message: '/test-context-limit',\n conversationFiles: [],\n });\n return;\n }\n const skill = this._invocableSkills[index - actionCount];\n if (skill) {\n this._handleSkillSelect(skill);\n }\n }\n // --- Skills ---\n /**\n * Load the browse dialog's \"Your Org\" tab into `_orgSkills` from\n * `/conversation/localSkillList` — this instance's own active skills, already\n * role-filtered to what the caller may run and ranked by the server.\n *\n * Not the `aiskills` search endpoint: that requires a skill-authoring role\n * (`skillView`/`skillEdit`), so an ordinary chat user got a 403 and an empty\n * tab. This one only needs a logged-in employee. It also means the query\n * matching, active-only filter and \"exclude globally-published\" rule all live\n * server-side instead of being rebuilt as OpenSearch DSL here.\n *\n * EXCEPTION — on kodaris.com this list also carries that instance's own\n * globally-published skills (flagged `global: true`), because there is no\n * Kodaris tab there for them to appear on.\n *\n * Request-id guard drops responses that arrive out of order (kr-combo-box\n * `_fetch` pattern).\n */\n _searchOrgSkills(query) {\n this._orgSkillRequestId++;\n const requestId = this._orgSkillRequestId;\n KRHttp.fetch({\n url: '/api/system/conversation/localSkillList',\n method: 'POST',\n body: { query: query.trim() },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response superseded by a newer search.\n if (requestId !== this._orgSkillRequestId) {\n return;\n }\n this._orgSkills = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: skill search failed', error);\n });\n }\n /**\n * Load the skills for the `/` composer menu into `_invocableSkills` from\n * `/conversation/availableSkills` — this instance's own skills plus the installed\n * global ones, already merged, role-filtered and ranked by the server. That's the\n * same set the model sees via `list_skills`, so the menu can't offer a skill the\n * chat would then refuse.\n *\n * Not the `aiskills` endpoints the browse dialog's Org tab uses: those require a\n * skill-authoring role, which an ordinary chat user doesn't have.\n *\n * Request-id guard drops responses that arrive out of order (kr-combo-box `_fetch`\n * pattern).\n */\n _searchInvocableSkills(query) {\n this._invocableSkillRequestId++;\n const requestId = this._invocableSkillRequestId;\n KRHttp.fetch({\n url: '/api/system/conversation/availableSkills',\n method: 'POST',\n body: { query: query.trim() },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response superseded by a newer search.\n if (requestId !== this._invocableSkillRequestId) {\n return;\n }\n this._invocableSkills = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: invocable skill search failed', error);\n });\n }\n /**\n * Load the empty-state action chips from `/conversation/suggestedActions`, passing the user's\n * current page/selection context (captured live, same as a send). The server picks a few skills\n * the user can run that fit where they are and writes a label for each. Called every time the\n * panel opens on an empty conversation (per product decision — context can change between opens).\n *\n * AI-only, no fallback: any failure, or v2 chat being off (server returns `[]`), just leaves the\n * empty state with no chips. A request-id guard drops a response superseded by a newer open, so a\n * slow reply from a previous open can't land after the user has started typing.\n */\n _loadSuggestedActions() {\n this._suggestedActionRequestId++;\n const requestId = this._suggestedActionRequestId;\n const context = this._captureContext();\n KRHttp.fetch({\n url: '/api/system/conversation/suggestedActions',\n method: 'POST',\n body: {\n pageContext: context.pageContext,\n selectionContext: context.selectionContext,\n },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response from a prior open, and never overwrite chips once a conversation\n // has started (the user opened, the reply was slow, they typed and sent in the meantime).\n if (requestId !== this._suggestedActionRequestId || this.messages.length > 0) {\n return;\n }\n this._suggestedActions = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: suggested actions load failed', error);\n });\n }\n /**\n * Load the browse dialog's \"Kodaris\" tab into `_globalSkills` — the whole\n * published Kodaris catalog for discovery, installed or not, runnable by this\n * user or not. Each row carries `enabled` (installed here), `canEnable` (may\n * install it) and `canRun` (roles allow invoking it).\n *\n * Uses `/conversation/globalSkillList` rather than the `/aiskills/global/search`\n * twin, which requires a skill-authoring role an ordinary chat user doesn't have.\n *\n * Returns `[]` — not an error — when there's no reachable registry, and always\n * on kodaris.com, which IS the catalog source and so has no remote to pull. The\n * tab itself is hidden there (see `_renderSkillBrowse`).\n */\n _searchGlobalSkills(query) {\n this._globalSkillRequestId++;\n const requestId = this._globalSkillRequestId;\n KRHttp.fetch({\n url: '/api/system/conversation/globalSkillList',\n method: 'POST',\n body: { query: query.trim() },\n })\n .then((r) => r.json())\n .then((res) => {\n // Ignore a stale response superseded by a newer search.\n if (requestId !== this._globalSkillRequestId) {\n return;\n }\n this._globalSkills = (res?.data || []);\n })\n .catch((error) => {\n console.error('kr-chatbot: global skill search failed', error);\n });\n }\n /**\n * Enable or disable a global skill on this instance via\n * `/aiskills/global/{code}/enabled`, then reflect the server's result on the\n * matching card. Ignores clicks while a request for the same code is pending.\n */\n _handleGlobalSkillEnable(skill, e) {\n // The card body inserts the skill; the install button must not also do that.\n e.stopPropagation();\n // The button is shown to everyone so the catalog reads the same for all users,\n // but the enable endpoint requires administrator/superuser/skillEdit. Without\n // it, say who to ask instead of firing a request that comes back 403.\n if (!skill.canEnable) {\n KRSnackbar.show({\n title: 'Permission Required',\n message: 'You do not have permission to install skills. Please contact your site administrator.',\n type: 'error',\n });\n return;\n }\n if (this._globalSkillPending.has(skill.code)) {\n return;\n }\n // Drive the clicked button's own spinner (KRButton disables itself while\n // loading, so a second click can't fire until the request settles).\n const btn = e.currentTarget;\n this._globalSkillPending.add(skill.code);\n btn?.showLoading();\n KRHttp.fetch({\n url: `/api/system/opensearch/aiskills/global/${encodeURIComponent(skill.code)}/enabled`,\n method: 'POST',\n body: { enabled: !skill.enabled },\n })\n .then((r) => r.json())\n .then((res) => {\n // Reflect the server's returned flag on the card. The button label/style\n // re-render from skill.enabled; reset() clears the spinner to idle.\n skill.enabled = res?.data?.enabled;\n btn?.reset();\n this.requestUpdate();\n })\n .catch((error) => {\n console.error('kr-chatbot: global skill enable failed', error);\n btn?.showError('Error');\n })\n .finally(() => {\n this._globalSkillPending.delete(skill.code);\n });\n }\n /** The `+` button toggles the skill/attachment menu open (showing all skills). */\n _handlePlusClick() {\n if (this._skillMenuOpened) {\n this._skillMenuOpened = false;\n return;\n }\n this._skillQuery = '';\n this._skillHighlighted = 0;\n this._skillMenuOpened = true;\n this._searchInvocableSkills('');\n }\n _handleModeToggle() {\n this._modeMenuOpened = !this._modeMenuOpened;\n }\n _handleModeSelect(mode) {\n this._mode = mode;\n this._modeMenuOpened = false;\n // Persist the choice so it survives a reload, alongside the other composer\n // state. The server is still the source of truth on the next turn's\n // CONVERSATION_STATE, but this keeps the selector from flashing the default.\n this._saveState();\n }\n _handleShowToolsChange(e) {\n this._showTools = e.target.checked;\n this._saveState();\n }\n _handleShowToolInputsChange(e) {\n this._showToolInputs = e.target.checked;\n this._saveState();\n }\n _handleShowConfirmationInputChange(e) {\n this._showConfirmationInput = e.target.checked;\n this._saveState();\n }\n /**\n * The mic button toggles dictation. Speech is transcribed straight into the\n * composer as editable text — the user still reviews and presses send, so a\n * misheard word is fixable and nothing is sent by voice alone.\n *\n * Recognition runs entirely in the browser's Web Speech API (Chrome/Edge send\n * audio to Google's service, Safari to Apple's). No audio reaches Kodaris, and\n * there's no backend call or cost on our side.\n */\n _handleMicClick() {\n // Second click stops. `stop()` flushes the pending utterance as a final\n // result, so the last words aren't lost; onend clears the state.\n if (this._speechRecognition) {\n this._speechRecognition.stop();\n return;\n }\n // Prefixed in Chrome/Edge/Safari; the unprefixed name is checked first for\n // whenever they drop the prefix. The mic button isn't rendered without one of\n // these, so reaching here unsupported means a mid-session change — bail quietly.\n const SpeechRecognitionCtor = window.SpeechRecognition || window.webkitSpeechRecognition;\n if (!SpeechRecognitionCtor) {\n return;\n }\n const recognition = new SpeechRecognitionCtor();\n // Keep listening through natural pauses — a chat message is often several\n // sentences, and the default stops at the first one.\n recognition.continuous = true;\n // Show words as they're recognized rather than only at end of utterance.\n recognition.interimResults = true;\n // `lang` is deliberately left unset so the recognizer follows the page/OS\n // language, which is correct for every consumer of this component.\n // Dictation ADDS to whatever is already typed rather than replacing it, so\n // the user can type half a message and speak the rest. The separating space\n // is part of the base so the transcript never runs into the existing word.\n this._speechBaseValue = this._inputValue;\n if (this._speechBaseValue && !this._speechBaseValue.endsWith(' ')) {\n this._speechBaseValue += ' ';\n }\n this._speechFinalTranscript = '';\n recognition.onresult = (e) => {\n // Everything from resultIndex on is new since the last event: finalized\n // pieces move to _speechFinalTranscript permanently, while non-final ones\n // are rebuilt each event because the browser revises its guess as it hears\n // more. Rebuilding the whole value (base + final + interim) is what keeps\n // those revisions from stacking up as duplicated text.\n let interim = '';\n for (let i = e.resultIndex; i < e.results.length; i++) {\n if (e.results[i].isFinal) {\n this._speechFinalTranscript += e.results[i][0].transcript;\n }\n else {\n interim += e.results[i][0].transcript;\n }\n }\n this._inputValue = this._speechBaseValue + this._speechFinalTranscript + interim;\n this._saveState();\n // Grow the textarea as dictated text wraps — the same clamp the typing path\n // uses, since @input doesn't fire for programmatic value changes.\n if (this._inputEl) {\n this._inputEl.style.height = 'auto';\n this._inputEl.style.height = Math.min(this._inputEl.scrollHeight, 120) + 'px';\n }\n };\n recognition.onerror = (e) => {\n // Denied mic permission is the one error worth explaining — the user has to\n // fix it in browser settings, and the button would otherwise look broken.\n if (e.error === 'not-allowed' || e.error === 'service-not-allowed') {\n this._error = 'Microphone access is blocked. Allow it in your browser settings to use voice input.';\n return;\n }\n // `no-speech` (silence) and `aborted` (user stopped) are normal; anything\n // else is a transient service hiccup. onend still runs, so the mic resets.\n };\n // Fires on stop(), on error, and when the browser ends recognition on its own\n // (e.g. a long silence) — the single place the live state is torn down.\n recognition.onend = () => {\n this._speechRecognition = null;\n this._isDictating = false;\n };\n // start() is what triggers the browser's mic permission prompt.\n this._speechRecognition = recognition;\n this._isDictating = true;\n this._error = '';\n recognition.start();\n this._inputEl?.focus();\n }\n /**\n /** Insert `/code ` into the composer and focus it, ready for the message. */\n _handleSkillSelect(skill) {\n // The user's roles don't allow this skill — inserting /code would just fail in the\n // chat. Name the roles that would grant it, so the user knows what to ask for and\n // whoever grants it knows what to give.\n if (skill.canRun === false) {\n let message = `You do not have access to \"${skill.name}\". Ask your site administrator to grant it.`;\n if (skill.allowedRoles?.length) {\n message = `\"${skill.name}\" requires the ${skill.allowedRoles.join(' or ')} role. Ask your site administrator to grant it.`;\n }\n KRSnackbar.show({\n title: 'Access Required',\n message: message,\n type: 'error',\n });\n return;\n }\n // A global skill nobody has installed here yet isn't runnable either — point at the\n // Install button rather than appearing to ignore the click. Local skills carry no\n // install state, so this only applies to global ones.\n if (skill.global && !skill.enabled) {\n KRSnackbar.show({\n title: 'Not Installed',\n message: `\"${skill.name}\" has to be installed on this site before you can use it — use the Install button on the card.`,\n type: 'info',\n });\n return;\n }\n this._inputValue = `/${skill.code} `;\n this._saveState();\n this._skillMenuOpened = false;\n this._skillBrowseOpened = false;\n this._inputEl?.focus();\n }\n /** Activate a skill card via keyboard (Enter/Space), since it's a div role=button. */\n _handleSkillCardKeydown(e, skill) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._handleSkillSelect(skill);\n }\n }\n /**\n * Click an empty-state suggestion chip: prefill `/code ` into the composer, same as picking the\n * skill from the `/` menu, and focus so the user can add details before sending. No permission\n * guards here (unlike `_handleSkillSelect`) — a suggested action's code always comes from the\n * server's role-filtered runnable set, so it's already known to be invokable by this user.\n */\n _handleSuggestedActionClick(action) {\n this._inputValue = `/${action.code} `;\n this._saveState();\n this._inputEl?.focus();\n }\n /** Copy a message's text to the clipboard and briefly flash \"Copied\". */\n _handleCopyMessage(content, index) {\n navigator.clipboard.writeText(content).then(() => {\n this._copiedIndex = index;\n setTimeout(() => {\n if (this._copiedIndex === index) {\n this._copiedIndex = -1;\n }\n }, 2000);\n }).catch(() => { });\n }\n _handleSkillBrowseOpen() {\n this._skillMenuOpened = false;\n this._skillBrowseQuery = '';\n this._skillBrowseOpened = true;\n // Fill both tabs up front so switching between them is instant, not stale.\n // The Kodaris tab isn't rendered on the registry server, so skip its fetch there.\n this._searchOrgSkills('');\n if (this._aiFrameworkConfig.registryServer !== true) {\n this._searchGlobalSkills('');\n }\n }\n _handleSkillBrowseClose() {\n this._skillBrowseOpened = false;\n }\n _handleSkillBrowseSearch(e) {\n this._skillBrowseQuery = e.target.value;\n // Filter both catalogs so whichever tab the user switches to is already current.\n this._searchOrgSkills(this._skillBrowseQuery);\n if (this._aiFrameworkConfig.registryServer !== true) {\n this._searchGlobalSkills(this._skillBrowseQuery);\n }\n }\n _handleSkillBrowseTabChange(e) {\n // Both buffers are kept current by open/search, so switching just swaps which\n // one is shown — no re-search needed.\n this._skillBrowseSource = e.detail.activeTabId;\n }\n // --- Attachments ---\n /**\n * Open the OS file picker. `aiAnalyze` records which attach action was used so\n * the change handler stages the picked files in the right mode: true for\n * \"Attach Files\" (the model reads them), false for \"Attach Files for Reference\"\n * (attached for a tool to act on — the model is told about them but not asked\n * to read them). Chosen once at the picker, so selecting 30 files never means\n * toggling 30 chips.\n */\n _openFilePicker(aiAnalyze = true) {\n // Close the skill/attachment menu — opening the OS file picker is the end of\n // the menu interaction, and the picker is a separate window so the menu would\n // otherwise linger open behind it (and after a file is chosen).\n this._skillMenuOpened = false;\n // A lone `/` was only the means of reaching this action, so it shouldn't be\n // left behind in the composer once the picker opens. Nothing else is touched:\n // a real command (`/code`) stays because `/code` plus an attachment is a valid\n // invocation, and the plus button reaches this same method with an arbitrary\n // draft in the composer, which must survive.\n if (this._inputValue.trim() === '/') {\n this._inputValue = '';\n this._saveState();\n }\n this._pendingAttachAnalyze = aiAnalyze;\n this._fileInputEl?.click();\n }\n _handleFileInputChange(e) {\n const input = e.target;\n if (input.files) {\n this._addFiles(input.files, this._pendingAttachAnalyze);\n }\n // Reset so picking the same file again re-fires change.\n input.value = '';\n }\n _handlePaste(e) {\n const items = e.clipboardData?.items;\n if (!items) {\n return;\n }\n const files = [];\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'file') {\n const file = items[i].getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n if (files.length) {\n e.preventDefault();\n this._addFiles(files);\n }\n }\n _handleDragEnter(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n e.preventDefault();\n this._dragDepth++;\n this._isDraggingFile = true;\n }\n _handleDragOver(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n // Required so the drop event fires.\n e.preventDefault();\n }\n _handleDragLeave(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n this._dragDepth--;\n if (this._dragDepth <= 0) {\n this._dragDepth = 0;\n this._isDraggingFile = false;\n }\n }\n _handleDrop(e) {\n if (!this._hasFiles(e)) {\n return;\n }\n e.preventDefault();\n this._dragDepth = 0;\n this._isDraggingFile = false;\n if (e.dataTransfer?.files) {\n this._addFiles(e.dataTransfer.files);\n }\n }\n _hasFiles(e) {\n return Array.from(e.dataTransfer?.types || []).includes('Files');\n }\n /** Lower-cased extension of a filename (without the dot), or '' if none. */\n _getFileExtension(name) {\n const dot = name.lastIndexOf('.');\n if (dot < 0) {\n return '';\n }\n return name.slice(dot + 1).toLowerCase();\n }\n /**\n * Stage a set of files in the composer (held locally until send). `aiAnalyze`\n * comes from which attach action was used — true for \"Attach Files\" (the model\n * reads them), false for \"Attach Files for Reference\" (tool-only, not read).\n * Drag-and-drop and paste default to analyze.\n */\n _addFiles(fileList, aiAnalyze = true) {\n // Only accept what the picker's `accept` filter allows (extension-based, so a\n // drag/paste can't sneak in a type the picker itself wouldn't offer).\n const files = Array.from(fileList).filter((f) => ACCEPTED_FILE_EXTENSIONS.includes(this._getFileExtension(f.name)));\n if (!files.length) {\n return;\n }\n files.forEach((file) => {\n // Only images get a local preview thumbnail; documents (and videos, which are\n // tiles too) render an icon. Prefer the File's MIME, falling back to the\n // extension when it's absent.\n let previewUrl;\n if (file.type.startsWith('image/') || IMAGE_EXTENSIONS.includes(this._getFileExtension(file.name))) {\n previewUrl = URL.createObjectURL(file);\n }\n const pending = {\n localId: 'att-' + this._pendingSeq++,\n file,\n name: file.name,\n mimeType: file.type,\n previewUrl,\n aiAnalyze,\n };\n this._pendingConversationFiles = [...this._pendingConversationFiles, pending];\n });\n }\n _handlePendingRemove(localId) {\n const target = this._pendingConversationFiles.find((p) => p.localId === localId);\n if (target?.previewUrl) {\n URL.revokeObjectURL(target.previewUrl);\n }\n this._pendingConversationFiles = this._pendingConversationFiles.filter((p) => p.localId !== localId);\n }\n _clearPending() {\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n this._pendingConversationFiles = [];\n }\n /** Open the shared full-screen previewer for a message attachment (image or video). */\n _handleFileOpen(file) {\n // Use the local preview if the upload hasn't finished yet; otherwise the\n // backend view URL (prefixed with the base URL — a raw fetch of a relative\n // path would hit the page origin, e.g. the dev server, not the backend).\n // The previewer picks image vs video playback off the name's extension, so\n // niceName has to carry it — hence the generic fallback keeps no extension\n // only when there's no name at all.\n const src = file.previewUrl\n || `${KRHttp.getBaseUrl()}/api/system/conversationFile/${file.conversationFileID}/view`;\n const preview = KRFilePreview.open({\n src,\n name: file.niceName || 'file',\n });\n // The previewer's download button only fires a `download` event — the\n // consumer performs the actual download. Hit the view endpoint with\n // `?download=true` (Content-Disposition: attachment) in a new tab.\n preview.addEventListener('download', () => {\n window.open(`${KRHttp.getBaseUrl()}/api/system/conversationFile/${file.conversationFileID}/view?download=true`, '_blank');\n });\n }\n _handleSubmit() {\n if (this._isStreaming) {\n return;\n }\n // A guarded-tool batch is awaiting a decision. The turn lock released with\n // its finished:true, but the server rejects a normal chat message with\n // awaitingConfirmation until it's resolved — so the composer stays blocked\n // and the approve/deny prompt owns the next call.\n if (this._pendingActions.length) {\n return;\n }\n const messageText = this._inputValue.trim();\n const pending = this._pendingConversationFiles;\n // Allow sending an image with no text, but require at least one of them.\n if (!messageText && !pending.length) {\n return;\n }\n // The files sent to the backend, each paired with its analyze flag. Sent\n // files are shown once the conversation reloads and they come back as stored\n // conversation files; the just-sent message itself carries text only.\n const conversationFiles = pending.map((p) => ({\n file: p.file,\n aiAnalyze: p.aiAnalyze,\n }));\n const submitEvent = new CustomEvent('message-submit', {\n detail: {\n message: messageText,\n conversationFiles,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(submitEvent);\n if (submitEvent.defaultPrevented) {\n return;\n }\n this._send({\n message: messageText,\n conversationFiles\n });\n }\n /**\n * Append the user message and stream the response. Split out of `_handleSubmit`\n * so debug test triggers can send a specific message without going through the\n * composer input. `_handleSubmit` owns reading/validating the composer and\n * firing the cancelable `message-submit` event; this owns the send + stream.\n */\n _send(params) {\n const userMessage = {\n type: 'user',\n content: params.message,\n };\n // Attach the staged files' local previews to the message so its thumbnails\n // show INSTANTLY, without waiting on the upload. Each carries a temporary\n // previewUrl (images only; documents render an icon from mimeType) and\n // conversationFileID -1 as a placeholder; the built-in send swaps these for\n // the real server files once the upload returns.\n if (this._pendingConversationFiles.length) {\n userMessage.conversationFiles = this._pendingConversationFiles.map((p) => ({\n conversationFileID: -1,\n niceName: p.name,\n mimeType: p.mimeType,\n aiAnalyze: p.aiAnalyze,\n previewUrl: p.previewUrl,\n }));\n }\n // The message is on its way, so stop the mic if it's still live — otherwise\n // it would keep transcribing into the now-cleared composer. abort() rather\n // than stop() because a trailing pending utterance belongs to the message\n // just sent; flushing it would drop stray words into the next one.\n if (this._speechRecognition) {\n this._speechRecognition.abort();\n }\n this.messages = [...this.messages, userMessage];\n this._inputValue = '';\n // The conversation has started — drop the empty-state chips so they don't linger above the\n // transcript. A newer suggestedActions reply is also ignored now (its guard checks messages.length).\n this._suggestedActions = [];\n this._saveState();\n this._error = '';\n this._userHasScrolledUp = false;\n this._followStream = true;\n // Clear the composer, but DON'T revoke the preview object URLs — the sent\n // message now renders them until the upload's real files replace them.\n this._pendingConversationFiles = [];\n // Reset textarea height\n if (this._inputEl) {\n this._inputEl.style.height = 'auto';\n }\n // Add empty assistant message to stream into\n this.messages = [...this.messages, {\n type: 'assistant',\n content: '',\n }];\n this._isStreaming = true;\n // Fresh turn: not yet finished, no reconnects used. These gate the drop-vs-done\n // decision in _readStreamChunk when the stream closes.\n this._turnFinishedCleanly = false;\n this._reconnectAttempts = 0;\n // Scroll user's message to the top (Gemini-style). The runway (min-height =\n // viewport) goes on the agent-turn WRAPPER, not an individual message — the\n // whole turn (reasoning, tool lines, text, decision) streams inside that one\n // element, so nothing strands below it. Enough scroll room below the user\n // message to push it to the top.\n this.updateComplete.then(() => {\n if (!this._messagesEl) {\n return;\n }\n // Clear runway from previous turns.\n this._messagesEl.querySelectorAll('.agent-turn').forEach((el) => {\n el.style.minHeight = '';\n });\n const userEls = this._messagesEl.querySelectorAll('.message--user');\n const userMsgEl = userEls[userEls.length - 1];\n const turnEls = this._messagesEl.querySelectorAll('.agent-turn');\n const turnEl = turnEls[turnEls.length - 1];\n if (turnEl) {\n turnEl.style.minHeight = this._messagesEl.clientHeight + 'px';\n }\n if (userMsgEl) {\n this._messagesEl.scrollTop = userMsgEl.offsetTop - this._messagesEl.offsetTop - 24;\n }\n });\n // Default to streaming from the Kodaris Bedrock conversation endpoints when\n // the consumer hasn't provided their own `send`.\n if (!this.send) {\n this.send = (params) => {\n // Rail-3 confirmation decision: resolve a paused guarded-tool batch by\n // hitting the SAME streaming endpoint with `confirmation` set. There's no\n // userText/files on this path (the server ignores message text here), and\n // the conversation is always already pinned (a batch can't pause before\n // the conversation exists), so no upload and no createNew.\n if (params.confirmation) {\n return KRHttp.fetch({\n url: '/api/system/integration/aws/bedrock/stream/invokeModelForConversationWithState',\n method: 'POST',\n headers: { Accept: 'text/event-stream' },\n body: {\n confirmation: params.confirmation,\n conversationID: this.conversationId,\n },\n });\n }\n // Images are upload-first: each file is stored as a conversation file\n // (type LIBRARY — the format lives in mimeType), then the resulting\n // conversationFileIDs are attached to the message via `fileIds` on the\n // normal JSON stream call. There is no multipart chat endpoint. With no\n // images the upload resolves to an empty list immediately; a failed\n // upload is dropped so an undefined id never reaches `fileIds`.\n let uploaded = Promise.resolve([]);\n if (params.conversationFiles.length) {\n uploaded = Promise.all(params.conversationFiles.map(({ file, aiAnalyze }) => {\n const form = new FormData();\n form.append('file', file);\n form.append('type', 'LIBRARY');\n form.append('niceName', file.name);\n // Reference-only files (from \"Attach Files for Reference\") aren't read\n // by the model — the endpoint defaults aiAnalyze=true, so only send\n // the flag when it's false.\n if (!aiAnalyze) {\n form.append('aiAnalyze', 'false');\n }\n return KRHttp.fetch({\n url: '/api/system/conversationFile/upload',\n method: 'POST',\n body: form,\n })\n .then((r) => r.json())\n // Keep the whole file DTO the upload returns (id + niceName +\n // mimeType + …), not just the id — it's attached to the sent message\n // below so the attachment shows immediately.\n .then((res) => res.data);\n }));\n }\n return uploaded.then((files) => {\n // Replace the just-sent user message's local previews with the real\n // uploaded files (backed by the stored file's view URL). The last user\n // message is the one _send appended before the trailing empty assistant\n // message; revoke its now-defunct preview object URLs first.\n if (files.length) {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].type === 'user') {\n (this.messages[i].conversationFiles || []).forEach((f) => {\n if (f.previewUrl) {\n URL.revokeObjectURL(f.previewUrl);\n }\n });\n this.messages[i].conversationFiles = files;\n this.requestUpdate();\n break;\n }\n }\n }\n // Conversation targeting: continue `conversationId` when set, else\n // start a fresh conversation (createNew) for this turn. The pin below\n // means createNew only fires on the very first untargeted turn.\n const body = {\n userText: params.message,\n fileIds: files.map((f) => f.conversationFileID),\n // Posture for guarded tools this turn (Ask / Auto / Plan). The server\n // validates and persists it, and only re-sets it when it changes.\n mode: this._mode,\n };\n // Ground the model in where the user is and what they've highlighted.\n // Only sent when present so an empty selection / failed capture doesn't\n // add noise to the request.\n if (params.pageContext) {\n body.pageContext = params.pageContext;\n }\n if (params.selectionContext) {\n body.selectionContext = params.selectionContext;\n }\n if (this.conversationId != null) {\n body.conversationID = this.conversationId;\n }\n else {\n body.createNew = true;\n }\n return KRHttp.fetch({\n url: '/api/system/integration/aws/bedrock/stream/invokeModelForConversationWithState',\n method: 'POST',\n headers: { Accept: 'text/event-stream' },\n body,\n }).then((response) => {\n // Pin the session to the conversation this turn used. The stream\n // doesn't echo the resolved id, so when we let the server create one\n // (no conversationId set) we resolve it via `/last` and keep it, so\n // subsequent turns continue this conversation instead of each sending\n // createNew and spawning a new one. Best-effort, fire-and-forget: a\n // failure leaves it unpinned and the next turn resolves server-side.\n if (this.conversationId == null) {\n KRHttp.fetch({ url: '/api/system/conversation/last' })\n .then((r) => r.json())\n .then((res) => {\n const conversation = res?.data;\n const id = conversation?.conversationID;\n if (typeof id === 'number') {\n this.conversationId = id;\n // Pin it to this tab so a reload redisplays this new conversation.\n this._persistConversationId();\n // Announce the newly-created conversation so consumers can react\n // (e.g. update the route from /chat/new to /chat/{id}). The full\n // conversation object is passed, not just the id, so consumers\n // have the title/timestamps too.\n this.dispatchEvent(new CustomEvent('conversation-created', {\n detail: { conversation },\n bubbles: true,\n composed: true,\n }));\n }\n })\n .catch(() => { });\n }\n return response;\n });\n });\n };\n }\n // Capture where the user is and what they've highlighted at send time (not\n // earlier — selection is transient and the route may have changed since the\n // panel opened), so every turn grounds the model in the user's current spot.\n const context = this._captureContext();\n this.send({\n message: params.message,\n messages: this.messages.slice(0, -1),\n conversationFiles: params.conversationFiles,\n pageContext: context.pageContext,\n selectionContext: context.selectionContext,\n }).then((response) => {\n if (!response.ok) {\n this._handleStreamError('Request failed: ' + response.status);\n return;\n }\n if (!response.body) {\n this._handleStreamError('No response body');\n return;\n }\n this._reader = response.body.getReader();\n this._decoder = new TextDecoder();\n this._buffer = '';\n this._readStreamChunk();\n }).catch((err) => {\n if (err.name !== 'AbortError') {\n this._handleStreamError(err.message);\n }\n });\n }\n /**\n * Resolve the paused guarded-tool batch (Rail 3). Hits the SAME streaming\n * endpoint as a normal turn but with a `confirmation` value instead of a\n * message; the server runs (approve/approveAlways) or denies (reject) the batch\n * and continues the turn, streaming the outcome into a fresh assistant bubble.\n *\n * The decision uses the same `send` callback so a custom `send` can own its own\n * targeting — it just receives `confirmation` set and no message.\n */\n _handleConfirmationDecision(decision) {\n if (this._confirmationInFlight) {\n return;\n }\n this._confirmationInFlight = true;\n this._error = '';\n // The decision line is authored by the server (single source of truth): it\n // persists an `action_decision` row AND streams an `ACTION_DECISION` event\n // back. We keep the prompt in place — the clicked button shows a loading\n // spinner — until that event arrives, which is our ack that the server\n // accepted the decision. The event handler then drops the prompt, appends the\n // decision line, and the follow-up turn streams into a new assistant bubble.\n const btn = this._messagesEl?.querySelector(`.confirmation__btn[data-decision=\"${decision}\"]`);\n btn?.showLoading();\n this._isStreaming = true;\n // Fresh turn (confirmation decision runs a model turn too): reset the\n // drop-vs-done gates used by _readStreamChunk.\n this._turnFinishedCleanly = false;\n this._reconnectAttempts = 0;\n this._userHasScrolledUp = false;\n this._followStream = true;\n this.send({\n message: '',\n messages: this.messages,\n conversationFiles: [],\n pageContext: '',\n selectionContext: '',\n confirmation: decision,\n }).then((response) => {\n // Leave _confirmationInFlight true — the buttons stay loading until the\n // streamed ACTION_DECISION event resolves the prompt. Only clear it on an\n // error path, where no such event will arrive.\n if (!response.ok) {\n this._confirmationInFlight = false;\n btn?.reset();\n this._handleStreamError('Request failed: ' + response.status);\n return;\n }\n if (!response.body) {\n this._confirmationInFlight = false;\n btn?.reset();\n this._handleStreamError('No response body');\n return;\n }\n this._reader = response.body.getReader();\n this._decoder = new TextDecoder();\n this._buffer = '';\n this._readStreamChunk();\n }).catch((err) => {\n this._confirmationInFlight = false;\n btn?.reset();\n if (err.name !== 'AbortError') {\n this._handleStreamError(err.message);\n }\n });\n }\n /**\n * Capture ambient \"where is the user / what are they looking at\" context at\n * send time, so the AI is grounded without the host passing anything in.\n *\n * Two universal sources that exist on every page the chatbot mounts in:\n * - `pageContext` — the location (full url, which already carries the path and\n * query) and title, plus, when the page renders the server-side\n * `#kodaris-page` JSON island (storefront content pages do), its parsed\n * contents (page name/type/ids). A page without the island still yields url\n * + title, so context is never empty on a real page.\n * - `selectionContext` — the text the user currently has highlighted, read\n * live here because a selection is transient (it may be gone a moment later).\n *\n * Both are returned as strings because that's what the backend `ModelForText`\n * fields (`pageContext` / `selectionContext`) accept. Capture is best-effort:\n * any failure yields an empty string for that field rather than blocking send.\n */\n _captureContext() {\n let pageContext = '';\n try {\n const page = {\n url: window.location.href,\n title: document.title,\n };\n // Structured page context is opt-in by convention: a page that renders the\n // `#kodaris-page` island gets its name/type/ids folded in for free. The\n // island's text is JSON; a malformed/absent island just leaves it out.\n const island = document.getElementById('kodaris-page');\n if (island && island.textContent) {\n try {\n page.page = JSON.parse(island.textContent);\n }\n catch { /* island present but not valid JSON — location context still stands */ }\n }\n pageContext = JSON.stringify(page);\n }\n catch { /* leave pageContext empty — never block a send on context capture */ }\n let selectionContext = '';\n try {\n const selection = window.getSelection();\n if (selection) {\n selectionContext = selection.toString().trim();\n }\n }\n catch { /* leave selectionContext empty */ }\n return {\n pageContext,\n selectionContext,\n };\n }\n _handleStop() {\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n this._isStreaming = false;\n }\n _handleMessagesScroll(e) {\n const container = e.target;\n const distanceFromBottom = container.scrollHeight - container.scrollTop - container.clientHeight;\n if (distanceFromBottom > 50) {\n this._userHasScrolledUp = true;\n }\n else {\n this._userHasScrolledUp = false;\n // Back at the bottom mid-turn: resume following the stream end.\n if (this._isStreaming) {\n this._followStream = true;\n }\n }\n }\n /**\n * User-driven scroll intent while a response streams. Scroll events alone can't\n * tell the user apart from our own follow-scroll (and from scrollTop clamping\n * when the runway clears), so listen for the gestures instead: a wheel/trackpad\n * move up, any touch drag, or a pointer down on the scrollbar track. Any of\n * these stops the follow; scrolling back to the bottom restores it.\n */\n _handleMessagesWheel(e) {\n if (this._isStreaming && e.deltaY < 0) {\n this._followStream = false;\n }\n }\n _handleMessagesTouchMove() {\n if (this._isStreaming) {\n this._followStream = false;\n }\n }\n _handleMessagesPointerDown(e) {\n const container = e.currentTarget;\n if (this._isStreaming && e.offsetX >= container.clientWidth) {\n this._followStream = false;\n }\n }\n _handleErrorDismiss() {\n this._error = '';\n }\n _handleContextWarningDismiss() {\n this._contextWarning = '';\n }\n /**\n * A header button either opens the drawer to its view, switches the view if the\n * drawer is already open on the other one, or closes the drawer if it's already\n * showing this view. `_drawerView` is left intact on close so the content stays\n * visible while the drawer slides shut.\n */\n _toggleDrawer(view) {\n if (this._drawerOpen && this._drawerView === view) {\n this._drawerOpen = false;\n }\n else {\n this._drawerOpen = true;\n this._drawerView = view;\n // Opening the history view refetches the list so a just-created or renamed\n // conversation shows without a reload.\n if (view === 'history') {\n this._loadConversations();\n }\n }\n this._saveState();\n }\n /**\n * Fetch the user's previous conversations for the history list, most-recently\n * modified first. Ownership is enforced server-side (the endpoint scopes to the\n * current administrator), so we only filter to active ones.\n */\n _loadConversations() {\n this._conversationsLoading = true;\n KRHttp.fetch({\n url: '/api/system/conversation/list',\n method: 'POST',\n body: {\n page: 0,\n size: 50,\n sortBy: 'lastModified',\n sortDirection: 'desc',\n filterFields: [{\n name: 'active',\n operation: 'IS',\n value: 'true',\n }],\n },\n })\n .then((r) => r.json())\n .then((res) => {\n this._conversations = res?.data?.content || [];\n })\n .catch(() => {\n this._conversations = [];\n })\n .then(() => {\n this._conversationsLoading = false;\n });\n }\n /**\n * Switch the floating widget to a previously-created conversation (clicked in the\n * history list): stop any live turn, reset the transient turn/context state, pin\n * the new id (persisted per-tab so a reload stays here), then rebuild its\n * transcript via the built-in `load`. The drawer closes so the user lands back\n * in the conversation.\n */\n _handleSwitchConversation(conversationID) {\n if (conversationID === this.conversationId) {\n this._handleCloseDrawer();\n return;\n }\n this._handleStop();\n this.conversationId = conversationID;\n // Adopt the picked conversation's title for the header (empty for an untitled\n // one, so the header falls back to the default label).\n this._conversationTitle = this._conversations.find((c) => c.conversationID === conversationID)?.title || '';\n this._persistConversationId();\n // Clear the transient, per-conversation state so it doesn't bleed into the one\n // we're switching to — pending confirmations, context banners, errors, the\n // reconnect counter, and staged composer files (the transcript is loaded below).\n this._pendingActions = [];\n this._inlineConfirm = true;\n this._contextWarning = '';\n this._contextLimitReached = false;\n this._contextLimitMessage = '';\n this._error = '';\n this._reconnectAttempts = 0;\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n this._pendingConversationFiles = [];\n this._drawerOpen = false;\n this._saveState();\n if (this.load) {\n this.load().then((messages) => {\n this.messages = messages || [];\n // A turn may still be streaming server-side for the conversation we just\n // opened (started in another tab/device) — attach to it if so.\n if (this.conversationId && !this._isStreaming) {\n this._reconnectStream();\n }\n }).catch(() => { });\n }\n }\n /**\n * Start a brand-new conversation (clicked in the history list): unpin the id (the\n * next turn sends `createNew` and the resolved id re-pins), clear the transcript\n * and transient state, and close the drawer back to an empty composer.\n */\n _handleNewConversation() {\n this._handleStop();\n this.conversationId = null;\n // New conversation has no title yet — the header shows the default label until\n // the server generates one at the end of the first turn.\n this._conversationTitle = '';\n this._persistConversationId();\n this.messages = [];\n // Clear the transient, per-conversation state so it doesn't bleed into the new\n // conversation — pending confirmations, context banners, errors, the reconnect\n // counter, and staged composer files.\n this._pendingActions = [];\n this._inlineConfirm = true;\n this._contextWarning = '';\n this._contextLimitReached = false;\n this._contextLimitMessage = '';\n this._error = '';\n this._reconnectAttempts = 0;\n this._pendingConversationFiles.forEach((p) => {\n if (p.previewUrl) {\n URL.revokeObjectURL(p.previewUrl);\n }\n });\n this._pendingConversationFiles = [];\n this._drawerOpen = false;\n this._saveState();\n }\n /** Close the drawer. `_drawerView` is left intact so its content stays visible\n * while the drawer slides shut. */\n _handleCloseDrawer() {\n this._drawerOpen = false;\n this._saveState();\n }\n /**\n * Open the drawer to a single tool call's full input/output. Called when the\n * user clicks a tool-activity line in the transcript. Independent of the\n * `_showToolInputs` setting — this is the on-demand \"show me everything for\n * THIS call\" peek, so it works even when inline inputs are hidden. `result` is\n * the paired `tool_result` message data (may be absent if the tool hasn't\n * returned yet).\n */\n _openToolDetail(use) {\n // Pair the tool_use to the tool_result that immediately follows it (matched by\n // toolUseId) — the same pairing the transcript render uses for the ⎿ preview.\n const next = this.messages[this.messages.indexOf(use) + 1];\n this._toolDetail = {\n use,\n result: null,\n };\n if (next?.type === 'tool_result' && next.data?.toolUseId === use.data?.toolUseId) {\n this._toolDetail.result = next;\n }\n this._toolDetailCopied = null;\n this._toolDetailInputOpen = true;\n this._toolDetailOutputOpen = true;\n this._drawerView = 'toolDetail';\n this._drawerOpen = true;\n this._saveState();\n // Reset the panel scroll so a newly-opened tool starts at the top, rather\n // than inheriting the previous tool's scroll position. Wait for the render.\n this.updateComplete.then(() => {\n if (this._drawerBodyEl) {\n this._drawerBodyEl.scrollTop = 0;\n }\n });\n }\n /** Toggle the tool-detail Input section open/closed. */\n _handleToggleToolDetailInput() {\n this._toolDetailInputOpen = !this._toolDetailInputOpen;\n }\n /** Toggle the tool-detail Output section open/closed. */\n _handleToggleToolDetailOutput() {\n this._toolDetailOutputOpen = !this._toolDetailOutputOpen;\n }\n /**\n * Pretty-print a tool input/result for the detail view. The values arrive as\n * strings that usually hold JSON; reindent when they do, otherwise show as-is.\n * Never throws — falls back to the original text.\n *\n * A large/overflowing result is stashed server-side and returned as a preview\n * wrapped in `<<<uuid_BEGIN>>> … <<<uuid_END>>>` markers, followed by a paging\n * note. Two things make `JSON.parse` unusable here: the marker wrapper isn't\n * JSON, and the payload between the markers is a truncated SLICE of a bigger\n * blob (cut off mid-string), so it never parses on its own. So we reindent the\n * payload STRUCTURALLY (see `_reindentJson`) rather than parse it, and keep the\n * markers + note exactly where they were so it still reads as a paged response.\n */\n _formatToolJson(value) {\n if (value === undefined || value === null) {\n return '';\n }\n const raw = String(value);\n const marker = raw.match(/(<<<[0-9a-f-]+_BEGIN>>>\\n?)([\\s\\S]*?)(\\n?<<<[0-9a-f-]+_END>>>)/);\n if (marker && marker.index != null) {\n // Splice by index rather than String.replace — the reindented JSON can\n // contain `$` sequences (e.g. \"$dtoRef\") that replace() treats as special.\n const start = marker.index + marker[1].length;\n const end = start + marker[2].length;\n return raw.slice(0, start) + this._reindentJson(marker[2]) + raw.slice(end);\n }\n return this._reindentJson(raw);\n }\n /**\n * Reindent JSON-ish text for display. Tries a strict parse+stringify first (the\n * clean path for complete, valid JSON). If that fails — which it does for the\n * truncated slices returned by the stashed-response pager — it falls back to a\n * structural walk that inserts newlines/indentation around `{}[],:` while\n * tracking string state (so braces and commas INSIDE string values, and escaped\n * quotes, are left alone). This formats even incomplete JSON. Non-JSON text\n * (no leading `{`/`[`) is returned untouched.\n */\n _reindentJson(text) {\n const trimmed = text.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return text;\n }\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n }\n catch {\n // Fall through to the tolerant structural reindent below.\n }\n let out = '';\n let depth = 0;\n let inString = false;\n let escaped = false;\n const pad = (level) => '\\n' + ' '.repeat(Math.max(0, level));\n for (let i = 0; i < trimmed.length; i++) {\n const ch = trimmed[i];\n if (inString) {\n out += ch;\n if (escaped) {\n escaped = false;\n }\n else if (ch === '\\\\') {\n escaped = true;\n }\n else if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n if (ch === '\"') {\n inString = true;\n out += ch;\n }\n else if (ch === '{' || ch === '[') {\n depth++;\n out += ch + pad(depth);\n }\n else if (ch === '}' || ch === ']') {\n depth--;\n out += pad(depth) + ch;\n }\n else if (ch === ',') {\n out += ch + pad(depth);\n }\n else if (ch === ':') {\n out += ': ';\n }\n else if (ch === ' ' || ch === '\\n' || ch === '\\t' || ch === '\\r') {\n // Collapse the source's own whitespace between tokens — our pad() owns layout.\n }\n else {\n out += ch;\n }\n }\n return out;\n }\n /** Copy the tool-detail Input to the clipboard. Stops propagation so the click\n * doesn't also toggle the (parent) section header. */\n _handleCopyToolDetailInput(e) {\n e.stopPropagation();\n this._copyToolDetail('input', this._formatToolJson(this._toolDetail?.use.data?.toolInput));\n }\n /** Copy the tool-detail Output to the clipboard (see input handler). */\n _handleCopyToolDetailOutput(e) {\n e.stopPropagation();\n this._copyToolDetail('output', this._formatToolJson(this._toolDetail?.result?.data?.toolResultString));\n }\n /** Write one tool-detail block to the clipboard and flash \"Copied\" on it. */\n _copyToolDetail(block, content) {\n navigator.clipboard.writeText(content).then(() => {\n this._toolDetailCopied = block;\n setTimeout(() => {\n if (this._toolDetailCopied === block) {\n this._toolDetailCopied = null;\n }\n }, 2000);\n }).catch(() => { });\n }\n _handleDrawerResizeMouseDown(e) {\n this._isDrawerResizing = true;\n this._drawerResizeStartX = e.clientX;\n this._drawerResizeStartW = this._drawerWidth;\n e.preventDefault();\n e.stopPropagation();\n document.addEventListener('mousemove', this._handleDrawerResizeMouseMove);\n document.addEventListener('mouseup', this._handleDrawerResizeMouseUp);\n }\n _readStreamChunk() {\n if (!this._reader) {\n return;\n }\n this._reader.read().then((result) => {\n if (result.done) {\n // The stream closed. Two very different cases:\n // 1. A `finished:true` chunk already arrived (_turnFinishedCleanly) — the\n // turn is genuinely over; finishing was already handled below. Nothing to do.\n // 2. No finished chunk yet — the connection DROPPED mid-turn (5-min emitter\n // timeout, tab backgrounded, network blip) but the server-side turn is\n // still running. Do NOT unlock the composer (that's the old bug that made\n // the input look ready while the AI was still working). Reconnect to the\n // live stream and keep receiving events.\n if (this._turnFinishedCleanly) {\n return;\n }\n this._reconnectStream();\n return;\n }\n this._buffer = this._buffer + this._decoder.decode(result.value, { stream: true });\n const events = this._buffer.split('\\n\\n');\n this._buffer = events.pop() || '';\n for (let i = 0; i < events.length; i++) {\n if (!events[i].trim()) {\n continue;\n }\n const lines = events[i].split('\\n');\n for (let j = 0; j < lines.length; j++) {\n if (!lines[j].startsWith('data:')) {\n continue;\n }\n const raw = lines[j].slice(5).trim();\n if (!raw) {\n continue;\n }\n let data;\n try {\n data = JSON.parse(raw);\n }\n catch {\n continue;\n }\n // Dispatch a generic event for every SSE message so consumers can listen and react\n this.dispatchEvent(new CustomEvent('stream-event', {\n detail: data,\n bubbles: true,\n composed: true,\n }));\n if (data.type === 'REASONING_PART') {\n if (data.message) {\n // Text after a tool line belongs in a NEW assistant bubble — the\n // last message may be a tool line, which text can't append to.\n // _ensureAssistantBubble opens a fresh bubble when needed.\n const target = this._ensureAssistantBubble();\n if (!target.reasoning) {\n target.reasoning = '';\n }\n target.reasoning += String(data.message);\n this.requestUpdate();\n }\n }\n else if (data.type === 'RESPONSE_PART') {\n if (data.message) {\n this._ensureAssistantBubble().content += String(data.message);\n this.requestUpdate();\n }\n }\n else if (data.type === 'tool_use' || data.type === 'tool_result') {\n // Push the event straight into the transcript — the message IS the event\n // ({type, data}). The render reads msg.data.* and pairs a tool_result to\n // its tool_use by data.toolUseId. Same shape the DB persists and reload\n // replays, so live and reload share one representation — no transform.\n this.messages.push(data);\n this.requestUpdate();\n }\n else if (data.type === 'action_decision') {\n // The server accepted the confirmation decision and authored the record\n // (single source of truth). Its arrival is the ack: drop the prompt,\n // stop the buttons' loading, and push the event straight in — the render\n // reads msg.data.{outcome,tools}. Same type + shape the DB persists, so\n // live and reload share one representation.\n this._pendingActions = [];\n this._confirmationHighlighted = -1;\n this._confirmationInFlight = false;\n this.messages.push(data);\n this.requestUpdate();\n }\n else if (data.type === 'ERROR') {\n this._handleStreamError(String(data.message || 'Unknown error'));\n }\n else if (data.type === 'CONVERSATION_STATE') {\n // Turn-start state sync: the server is the source of truth for the\n // conversation's mode (it may have decayed EDIT → NORMAL after idle).\n // Adopt it so the composer's selector reflects the real posture.\n if (data.data?.mode === 'NORMAL' || data.data?.mode === 'EDIT' || data.data?.mode === 'PLAN') {\n this._mode = data.data.mode;\n }\n }\n else if (data.type === 'CONVERSATION_TOKEN_WARNING') {\n // User-facing: friendly \"conversation is getting long\" guidance.\n // Text only, never sent to the model — render verbatim as a banner.\n this._contextWarning = String(data.message || '');\n }\n else if (data.type === 'CONVERSATION_TITLE') {\n // The server generated a real title for a brand-new conversation\n // (it was created with a truncated first-message placeholder that we\n // deliberately never show). Adopt it as the header label and pass it\n // up so consumers can update their own chrome, e.g. a breadcrumb.\n if (data.data?.title) {\n this._conversationTitle = data.data.title;\n this.dispatchEvent(new CustomEvent('conversation-title', {\n detail: { title: data.data.title },\n bubbles: true,\n composed: true,\n }));\n }\n }\n else if (data.type === 'CONVERSATION_LIMIT_REACHED') {\n // User-facing hard stop. Carries finished:true (handled below).\n // Clear any soft warning so we don't double-message the user.\n this._contextLimitReached = true;\n this._contextLimitMessage = String(data.message || '');\n this._contextWarning = '';\n }\n else if (data.type === 'ACTION_CONFIRMATION_REQUIRED') {\n // A guarded tool paused for approval (Rail 3). Carries finished:true\n // (handled below), so the turn lock releases — but the conversation\n // is now awaiting a decision, and a normal chat message would be\n // rejected with awaitingConfirmation. Capture the batch so the\n // composer stays blocked and the approve/deny prompt renders instead;\n // the next call must be a confirmation, not a userText.\n const actions = data.data?.actions;\n if (Array.isArray(actions) && actions.length) {\n this._pendingActions = actions;\n // Default the keyboard highlight to Yes so Enter approves.\n this._confirmationHighlighted = 0;\n }\n }\n else if (data.type === 'TOKEN_USAGE') {\n // INTERNAL-ONLY debug telemetry. Update the panel snapshot and the\n // per-iteration log; never render as a chat bubble.\n if (data.data) {\n const usage = data.data;\n this._telemetry = usage;\n // A new turn starts at iteration 1 — clear the prior turn's log\n // only now (not at send), so it stays visible until fresh data\n // actually arrives rather than blanking out on submit.\n if (usage.iteration === 1) {\n this._iterationLog = [usage];\n this._cacheCheckpoints = {};\n }\n else {\n this._iterationLog = [...this._iterationLog, usage];\n }\n }\n }\n else if (data.type === 'CACHE_CHECKPOINT') {\n // INTERNAL-ONLY debug telemetry. Records when/under which mode the\n // history checkpoint was placed, keyed by iteration for the table.\n if (data.data) {\n const checkpoint = data.data;\n this._cacheCheckpoints = {\n ...this._cacheCheckpoints,\n [checkpoint.iteration]: checkpoint,\n };\n }\n }\n if (data.finished) {\n // Primary unlock signal: the turn is over and the server released\n // the turn lock. The SSE stream closes right after this chunk. Mark\n // it clean so the imminent `result.done` doesn't trigger a reconnect.\n this._turnFinishedCleanly = true;\n this._finishStream();\n }\n }\n }\n // Stop reading once a terminal chunk ended the turn — the reader is nulled\n // by _finishStream and the stream is closing anyway.\n if (!this._reader) {\n return;\n }\n this._readStreamChunk();\n }).catch((err) => {\n if (err.name === 'AbortError') {\n return;\n }\n // A read error mid-turn is a drop, not a completion — reconnect (same as a\n // clean `done` without a finished chunk) unless the turn already finished.\n if (!this._turnFinishedCleanly) {\n this._reconnectStream();\n return;\n }\n this._handleStreamError(err.message);\n });\n }\n /**\n * Reconnect to an in-flight turn after the SSE stream dropped without finishing\n * (5-min emitter timeout, tab backgrounded, network blip). Hits the read-only\n * `/stream/attach/{conversationID}` endpoint, which re-attaches a fresh SSE\n * connection to the still-running server-side turn without starting anything new.\n *\n * - 200 with a body → resume reading; the turn's events keep flowing (events\n * emitted during the gap are not replayed, so the live text may jump forward —\n * the full transcript reconciles from the DB when the turn ends).\n * - 204 → no live turn: it already finished server-side while we were\n * disconnected. Reload the transcript so the final answer appears, then unlock.\n * - failure / retry cap hit → give up and finish so the composer never wedges.\n *\n * The composer stays locked (`_isStreaming` untouched) throughout, so the input\n * never looks ready while the AI is still working.\n */\n _reconnectStream() {\n // Without a pinned conversation there's nothing to re-attach to (a custom\n // `send` owns its own targeting). Fall back to finishing.\n if (!this.conversationId) {\n this._finishStream();\n return;\n }\n // Bound the retries so a genuinely dead turn can't loop forever.\n if (this._reconnectAttempts >= 5) {\n this._handleStreamError('Lost connection to the assistant. Please reload the conversation.');\n return;\n }\n this._reconnectAttempts = this._reconnectAttempts + 1;\n KRHttp.fetch({\n url: `/api/system/integration/aws/bedrock/stream/attach/${this.conversationId}`,\n method: 'GET',\n headers: { Accept: 'text/event-stream' },\n }).then((response) => {\n // 204 No Content: the turn finished server-side during the gap. Pull the\n // final transcript from the DB (via the same `load` callback the component\n // initializes with) so the answer that streamed during the disconnect\n // appears, then unlock.\n if (response.status === 204) {\n this._reconnectAttempts = 0;\n if (this.load) {\n this.load().then((messages) => {\n this.messages = messages;\n this.requestUpdate();\n }).catch(() => {\n // Reload failed — leave the transcript as-is; the user can refresh manually.\n });\n }\n this._finishStream();\n return;\n }\n if (!response.ok || !response.body) {\n // Transient failure — back off and try again on the same drop.\n setTimeout(() => this._reconnectStream(), 1000);\n return;\n }\n // Re-attached to the live turn: reset the retry counter and resume reading\n // into the same buffer/decoder from the fresh stream. Mark streaming so the\n // composer locks and the typing indicator shows — load-triggered attaches (a\n // page reloaded mid-turn) start with _isStreaming false, so this is what\n // surfaces \"the AI is still working\"; on a mid-session drop it's already true\n // (a no-op).\n this._reconnectAttempts = 0;\n this._isStreaming = true;\n this._followStream = true;\n this._reader = response.body.getReader();\n this._decoder = new TextDecoder();\n this._buffer = '';\n // Close the gap: events the turn emitted between the drop and this re-attach\n // aren't replayed on the live stream. Every COMPLETED iteration during the\n // gap was persisted (assistant text, tool_use/tool_result rows), so reload the\n // transcript from the DB to backfill them, THEN start reading live. Ordering\n // matters — the reader buffers incoming bytes until _readStreamChunk runs, so\n // starting live only after the async reload resolves prevents the reload from\n // clobbering freshly-streamed chunks. Only the current in-flight iteration's\n // partial text is missing from the reload; it streams live from here.\n if (this.load) {\n this.load().then((messages) => {\n this.messages = messages;\n this.requestUpdate();\n this._readStreamChunk();\n }).catch(() => {\n // Reload failed — go live anyway; the gap's completed iterations just\n // won't show until the next full reload, but the turn keeps streaming.\n this._readStreamChunk();\n });\n }\n else {\n this._readStreamChunk();\n }\n }).catch(() => {\n // Network error reaching the attach endpoint — back off and retry.\n setTimeout(() => this._reconnectStream(), 1000);\n });\n }\n /**\n * The assistant bubble streamed text should append to. Returns the last message\n * when it's already an assistant bubble; otherwise (the last message is a tool\n * line, or there's nothing yet) opens a fresh assistant bubble so post-tool text\n * doesn't get dropped or glued to a tool line.\n */\n _ensureAssistantBubble() {\n const last = this.messages[this.messages.length - 1];\n if (last && last.type === 'assistant') {\n return last;\n }\n const bubble = {\n type: 'assistant',\n content: '',\n };\n this.messages = [...this.messages, bubble];\n return bubble;\n }\n /**\n * End the current turn: release the turn lock and the reader. Called on the\n * primary unlock signal (`finished:true`) and the fallback (stream close).\n *\n * A turn that paused for confirmation (`_pendingActions` set) leaves the\n * composer blocked even though the lock released — the approve/deny prompt\n * owns the next call. Its trailing empty assistant bubble is dropped so the\n * prompt doesn't sit under an empty message with a typing indicator.\n */\n _finishStream() {\n this._isStreaming = false;\n this._reader = null;\n if (this._pendingActions.length) {\n const lastIndex = this.messages.length - 1;\n // Drop the trailing assistant bubble only when it's truly empty — no\n // streamed text AND no reasoning. A reasoning-only bubble (the model thought\n // out loud, then went straight to the guarded tool) must be kept, else its\n // \"Thinking\" trace is lost when the confirmation card renders.\n if (lastIndex >= 0\n && this.messages[lastIndex].type === 'assistant'\n && !this.messages[lastIndex].content\n && !this.messages[lastIndex].reasoning) {\n this.messages = this.messages.slice(0, -1);\n }\n // Scroll the confirmation into view so the user actually sees the ask — an\n // agentic turn can stream many tool lines past the fold, leaving the prompt\n // below it. `block: 'end'` brings its bottom up to just above the composer.\n if (this._inlineConfirm) {\n this.updateComplete.then(() => {\n this._messagesEl?.querySelector('.confirmation')?.scrollIntoView({\n behavior: 'smooth',\n block: 'end',\n });\n });\n }\n }\n }\n _handleStreamError(message) {\n this._isStreaming = false;\n this._error = message;\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n // Remove the empty assistant message if it has no content\n if (this.messages.length > 0) {\n const lastMessage = this.messages[this.messages.length - 1];\n if (lastMessage.type === 'assistant' && !lastMessage.content) {\n this.messages = this.messages.slice(0, -1);\n }\n }\n }\n // --- Render ---\n /**\n * The composer's mode selector — a Gemini-style inline label + caret sitting\n * just before the mic, that opens a small menu (Ask / Auto / Plan). Inline text\n * rather than a pill so it doesn't grow the single-row composer's height. The\n * menu opens upward above the trigger.\n */\n _renderModeSelector() {\n const active = CHATBOT_MODES.find((m) => m.mode === this._mode) || CHATBOT_MODES[0];\n return html `\n <div class=\"mode\">\n ${this._modeMenuOpened ? html `\n <div class=\"mode-menu\">\n ${CHATBOT_MODES.map((m) => html `\n <button\n class=${classMap({\n 'mode-menu__item': true,\n 'mode-menu__item--active': m.mode === this._mode,\n })}\n @click=${() => this._handleModeSelect(m.mode)}\n >\n <span class=\"mode-menu__label\">${m.label}</span>\n <span class=\"mode-menu__desc\">${m.description}</span>\n </button>\n `)}\n </div>\n ` : nothing}\n <button\n class=\"mode-trigger\"\n aria-haspopup=\"true\"\n aria-expanded=${this._modeMenuOpened ? 'true' : 'false'}\n @click=${this._handleModeToggle}\n >\n <span class=\"mode-trigger__label\">${active.label}</span>\n <svg\n class=\"mode-trigger__caret\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n </div>\n `;\n }\n /**\n * The approve/deny card shown when guarded tools are paused (Rail 3). Floats\n * OVER the messages, anchored just above the composer — not part of the message\n * scroll — so it stays in view while the transcript scrolls behind it.\n *\n * Written for a non-technical user. A single action reads as one plain-language\n * ask (`Run \"{tool}\"?` + the model's `confirmationMessage`). When the model\n * batches several guarded tools, they're listed together under one header and\n * the user accepts or rejects them all at once — the backend decision is\n * all-or-nothing. Either way: NO tool code, NO raw arguments/JSON — those are\n * noise (or alarming) to a normal user.\n */\n _renderConfirmation() {\n // Title: name the single tool, else a generic header for a batch.\n let title = 'Run this action?';\n if (this._pendingActions.length > 1) {\n title = 'These actions need your approval';\n }\n else if (this._pendingActions[0]) {\n title = `Run \"${this._pendingActions[0].displayName || this._pendingActions[0].toolName}\"?`;\n }\n return html `\n <div\n class=${classMap({\n 'confirmation': true,\n 'confirmation--inline': this._inlineConfirm,\n })}\n role=\"alertdialog\"\n aria-label=\"Confirm before continuing\"\n >\n <div class=\"confirmation__title\">${title}</div>\n ${this._pendingActions.length > 1\n ? html `\n <ol class=\"confirmation__list\">\n ${this._pendingActions.map((action) => html `\n <li class=\"confirmation__list-item\">\n <span class=\"confirmation__list-name\">${action.displayName || action.toolName}</span>\n ${action.confirmationMessage\n ? html `<span class=\"confirmation__list-desc\">${action.confirmationMessage}</span>`\n : nothing}\n ${this._showConfirmationInput && this._inlineConfirm && action.input && Object.keys(action.input).length\n ? html `<pre class=\"confirmation__details-input\">${JSON.stringify(action.input, null, 2)}</pre>`\n : nothing}\n </li>\n `)}\n </ol>\n `\n : html `\n <p class=\"confirmation__message\">${this._pendingActions[0]?.confirmationMessage || 'The assistant wants to take an action. Is that OK?'}</p>\n ${this._showConfirmationInput && this._inlineConfirm && this._pendingActions[0]?.input && Object.keys(this._pendingActions[0].input).length\n ? html `<pre class=\"confirmation__details-input\">${JSON.stringify(this._pendingActions[0].input, null, 2)}</pre>`\n : nothing}\n `}\n <div class=\"confirmation__actions\">\n ${CONFIRMATION_DECISIONS.map((option, index) => html `\n <kr-button\n class=${classMap({\n 'confirmation__btn': true,\n 'confirmation__btn--highlighted': index === this._confirmationHighlighted,\n })}\n variant=${option.decision === 'approve' ? 'flat' : 'outline'}\n color=${option.decision === 'reject' ? 'secondary' : 'primary'}\n size=\"small\"\n data-decision=${option.decision}\n @click=${() => this._handleConfirmationDecision(option.decision)}\n >${option.label}</kr-button>\n `)}\n </div>\n </div>\n `;\n }\n /** The `/` skill menu shown above the composer while typing a slash command. */\n _renderSkillMenu() {\n const skills = this._invocableSkills;\n // Debug test triggers are extra actions after Attach Files / Browse. The\n // flat keyboard index counts actions first, then skills, so the skills'\n // index offset is the number of actions shown.\n const debugActions = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let actionCount = 3;\n if (debugActions) {\n actionCount = 5;\n }\n return html `\n <div class=\"skill-menu\">\n <div class=\"skill-menu__actions\">\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 0,\n })}\n @click=${() => this._openFilePicker(true)}\n >\n <span class=\"skill-menu__name\">Attach Files</span>\n <span class=\"skill-menu__desc\">The AI reads these files</span>\n </button>\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 1,\n })}\n @click=${() => this._openFilePicker(false)}\n >\n <span class=\"skill-menu__name\">Attach Files for Reference</span>\n <span class=\"skill-menu__desc\">Attached for a tool — not read by the AI</span>\n </button>\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 2,\n })}\n @click=${this._handleSkillBrowseOpen}\n >\n Browse All Skills\n </button>\n ${debugActions ? html `\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 3,\n })}\n @click=${() => this._activateSkillMenuItem(3)}\n >\n Test Context Warning\n </button>\n <button\n class=${classMap({\n 'skill-menu__action': true,\n 'skill-menu__item--highlighted': this._skillHighlighted === 4,\n })}\n @click=${() => this._activateSkillMenuItem(4)}\n >\n Test Context Limit\n </button>\n ` : nothing}\n </div>\n ${skills.length ? html `\n <ul class=\"skill-menu__list\">\n ${skills.map((skill, index) => html `\n <li>\n <button\n class=${classMap({\n 'skill-menu__item': true,\n 'skill-menu__item--highlighted': index + actionCount === this._skillHighlighted,\n })}\n @click=${() => this._handleSkillSelect(skill)}\n >\n <span class=\"skill-menu__name\">${skill.name}</span>\n ${skill.description ? html `\n <span class=\"skill-menu__desc\">${skill.description}</span>\n ` : nothing}\n </button>\n </li>\n `)}\n </ul>\n ` : nothing}\n </div>\n `;\n }\n /**\n * The \"Browse all skills\" dialog — a searchable grid of Org / Kodaris cards.\n *\n * The Kodaris tab is omitted on the registry server (kodaris.com): that instance\n * IS the catalog source, so `globalSkillList` has no remote to pull and always\n * returns `[]`. Its own published skills appear on the Your Org tab instead,\n * carrying a \"Global\" badge.\n */\n _renderSkillBrowse() {\n return html `\n <kr-dialog\n opened\n label=\"Browse Skills\"\n width=\"720px\"\n @close=${this._handleSkillBrowseClose}\n >\n <div class=\"skill-browse\">\n <kr-text-field\n placeholder=\"Search skills...\"\n .value=${this._skillBrowseQuery}\n @input=${this._handleSkillBrowseSearch}\n ></kr-text-field>\n <kr-tab-group\n active-tab-id=${this._skillBrowseSource}\n @tab-change=${this._handleSkillBrowseTabChange}\n >\n <kr-tab id=\"org\" label=\"Your Org\">\n ${this._renderSkillGrid()}\n </kr-tab>\n ${this._aiFrameworkConfig.registryServer === true ? nothing : html `\n <kr-tab id=\"kodaris\" label=\"Kodaris\">\n ${this._renderSkillGrid(true)}\n </kr-tab>\n `}\n </kr-tab-group>\n </div>\n </kr-dialog>\n `;\n }\n /**\n * The card grid of skill search results for the browse dialog. Clicking a card\n * inserts `/code ` into the composer. In the shared-Kodaris (`global`) tab each\n * card also gets a footer row with an Install/Uninstall button.\n *\n * The Kodaris tab is the whole published catalog, deliberately NOT role-filtered so\n * users can discover skills they don't have yet. So a card there can be in one of two\n * non-runnable states — the user's roles don't allow it (`canRun: false`), or it isn't\n * installed here (not `enabled`). Neither looks clickable; clicking either explains\n * why via `_handleSkillSelect`.\n */\n _renderSkillGrid(global = false) {\n let skills = this._orgSkills;\n if (global) {\n skills = this._globalSkills;\n }\n if (!skills.length) {\n return nothing;\n }\n return html `\n <div class=\"skill-browse__grid\">\n ${skills.map((skill) => html `\n <div\n class=${classMap({\n 'skill-card': true,\n 'skill-card--unavailable': skill.canRun === false || (!!skill.global && !skill.enabled),\n })}\n role=\"button\"\n tabindex=\"0\"\n @click=${() => this._handleSkillSelect(skill)}\n @keydown=${(e) => this._handleSkillCardKeydown(e, skill)}\n >\n <span class=\"skill-card__name\">${skill.name}</span>\n ${skill.description ? html `\n <span class=\"skill-card__desc\">${skill.description}</span>\n ` : nothing}\n ${!global && skill.global ? html `\n <span class=\"skill-card__badge\">Global</span>\n ` : nothing}\n ${global ? html `\n <div class=\"skill-card__footer\">\n <span class=\"skill-card__price\">Free</span>\n <kr-button\n class=\"skill-card__install-btn\"\n size=\"small\"\n variant=${skill.enabled ? 'outline' : 'flat'}\n color=${skill.enabled ? 'secondary' : 'primary'}\n @click=${(e) => this._handleGlobalSkillEnable(skill, e)}\n >${skill.enabled ? 'Uninstall' : 'Install'}</kr-button>\n </div>\n ` : nothing}\n </div>\n `)}\n </div>\n `;\n }\n /**\n * Render a user message, highlighting a leading `/skill-code` token (like the\n * way Claude highlights slash commands). The composer only inserts valid skill\n * codes, so any leading slash token is treated as one.\n */\n _renderUserContent(content) {\n const match = content.match(/^\\/(\\S+)(\\s[\\s\\S]*)?$/);\n if (match) {\n return html `<span class=\"message-skill\">/${match[1]}</span>${match[2] || ''}`;\n }\n return content;\n }\n /** Compact integer formatting for the debug panel (e.g. 88928 → \"88,928\"). */\n _fmtTokens(n) {\n if (n == null || isNaN(n)) {\n return '—';\n }\n return n.toLocaleString('en-US');\n }\n /** Approximate USD formatting for the debug panel (e.g. 0.1434 → \"~$0.1434\"). */\n _fmtCost(n) {\n if (n == null || isNaN(n)) {\n return '—';\n }\n return '~$' + n.toFixed(4);\n }\n /**\n * INTERNAL-ONLY debug telemetry panel. Rendered only in the inline variant\n * (guarded by the caller) and only when the user has toggled it open. Shows\n * three scopes from the latest TOKEN_USAGE event — context gauge, this turn,\n * lifetime — plus a verbose per-iteration table. Never customer-facing.\n */\n /**\n * The History view's body — the user's previous conversations (most recent\n * first) plus a \"New conversation\" action. Clicking a row switches the widget to\n * that conversation; the current one is marked so the user sees where they are.\n * Floating-only (opened from the header history button).\n */\n _renderHistoryContent() {\n return html `\n <div class=\"history\">\n ${this._conversationsLoading ? html `\n <div class=\"history__empty\">Loading…</div>\n ` : this._conversations.length === 0 ? html `\n <div class=\"history__empty\">No previous conversations</div>\n ` : html `\n <div class=\"history__list\">\n ${this._conversations.map((conversation) => {\n // Format lastModified for the row: today shows the time, this year\n // shows month/day, older shows month/day/year; the raw value if it\n // isn't a parseable date. Empty when the conversation has no date.\n let dateLabel = '';\n if (conversation.lastModified) {\n const date = new Date(conversation.lastModified);\n const now = new Date();\n if (isNaN(date.getTime())) {\n dateLabel = conversation.lastModified;\n }\n else if (date.toDateString() === now.toDateString()) {\n dateLabel = date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n });\n }\n else if (date.getFullYear() === now.getFullYear()) {\n dateLabel = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n }\n else {\n dateLabel = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n }\n }\n return html `\n <button\n type=\"button\"\n class=${classMap({\n 'history__item': true,\n 'history__item--active': conversation.conversationID === this.conversationId,\n })}\n @click=${() => this._handleSwitchConversation(conversation.conversationID)}\n >\n <span class=\"history__item-title\">${conversation.title || 'Untitled conversation'}</span>\n ${dateLabel ? html `\n <span class=\"history__item-date\">${dateLabel}</span>\n ` : nothing}\n </button>\n `;\n })}\n </div>\n `}\n </div>\n `;\n }\n /**\n * The side drawer — one sliding panel that holds the Settings, Debug, History,\n * and tool-detail views. The header buttons switch `_drawerView`; the title and\n * body swap inside. In inline mode it slides in beside the transcript at a\n * consistent (resizable) width; in floating mode it fills the panel over the\n * transcript with a back button (the panel is too narrow to show both).\n */\n _renderDrawer() {\n // The debug view is gated on the server-side flag (inline variant + debug\n // telemetry enabled); if it's not enabled, the drawer only ever shows settings.\n const isDebug = this._drawerView === 'debug'\n && this.variant === 'inline'\n && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n let title = 'Settings';\n let body = this._renderSettingsContent();\n if (isDebug) {\n title = 'Debug';\n body = this._renderDebugContent();\n }\n else if (this._drawerView === 'toolDetail' && this._toolDetail) {\n title = this._toolDetail.use.data?.displayName || this._toolDetail.use.data?.toolName || 'Tool';\n body = this._renderToolDetailContent();\n }\n else if (this._drawerView === 'history') {\n title = 'Conversations';\n body = this._renderHistoryContent();\n }\n // In the floating widget the drawer fills the panel over the transcript (a\n // full-panel view with a back button) rather than sliding in beside it — the\n // panel is too narrow to show both. Inline keeps the side-drawer behavior.\n return html `\n <div\n class=${classMap({\n 'drawer': true,\n 'drawer--open': this._drawerOpen,\n 'drawer--resizing': this._isDrawerResizing,\n 'drawer--full': this.variant === 'floating',\n })}\n style=${styleMap(this.variant === 'floating' ? {} : { width: `${this._drawerWidth}px` })}\n >\n ${this.variant === 'floating' ? nothing : html `\n <div\n class=\"drawer__resize\"\n @mousedown=${this._handleDrawerResizeMouseDown}\n ></div>\n `}\n <div class=\"drawer__header\">\n ${this.variant === 'floating' ? html `\n <button\n class=\"header-action\"\n @click=${this._handleCloseDrawer}\n title=\"Back\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15.75 19.5 8.25 12l7.5-7.5\"\n />\n </svg>\n </button>\n ` : nothing}\n <span class=\"drawer__title\">${title}</span>\n ${this._drawerView === 'history' ? html `\n <kr-button\n class=\"history__new\"\n variant=\"flat\"\n color=\"primary\"\n size=\"small\"\n @click=${this._handleNewConversation}\n >\n <svg\n slot=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.75\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </svg>\n New conversation\n </kr-button>\n ` : nothing}\n ${this.variant === 'floating' ? nothing : html `\n <button\n class=\"header-action\"\n @click=${this._handleCloseDrawer}\n title=\"Close\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n `}\n </div>\n <div class=\"drawer__body\">\n ${body}\n </div>\n </div>\n `;\n }\n /** The Settings view's body — user preferences, grouped in sections. */\n _renderSettingsContent() {\n return html `\n <div class=\"settings-section\">\n <div class=\"settings-section__title\">Tools</div>\n <div class=\"settings-row\">\n <kr-checkbox\n label=\"Show tools\"\n .checked=${this._showTools}\n @change=${this._handleShowToolsChange}\n ></kr-checkbox>\n </div>\n <div class=\"settings-row\">\n <kr-checkbox\n label=\"Show tool inputs\"\n .checked=${this._showToolInputs}\n @change=${this._handleShowToolInputsChange}\n ></kr-checkbox>\n </div>\n <div class=\"settings-row\">\n <kr-checkbox\n label=\"Show tool confirmation inputs\"\n .checked=${this._showConfirmationInput}\n @change=${this._handleShowConfirmationInputChange}\n ></kr-checkbox>\n </div>\n </div>\n `;\n }\n /**\n * The Tool detail view's body — the full input and output for one tool call,\n * pretty-printed in scrollable code blocks with a per-block copy button. This\n * is the \"occasionally see everything\" path: the transcript stays terse, and\n * clicking a tool line drops its complete input/output here, uncapped (the\n * blocks scroll rather than truncating).\n */\n _renderToolDetailContent() {\n return html `\n <div class=\"tool-detail\">\n <div class=\"tool-detail__section\">\n <button\n type=\"button\"\n class=\"tool-detail__section-head\"\n aria-expanded=${this._toolDetailInputOpen}\n @click=${this._handleToggleToolDetailInput}\n >\n <span class=${classMap({\n 'tool-detail__caret': true,\n 'tool-detail__caret--open': this._toolDetailInputOpen,\n })}>›</span>\n <span class=\"tool-detail__section-title\">Input</span>\n <span\n class=\"tool-detail__copy\"\n role=\"button\"\n @click=${this._handleCopyToolDetailInput}\n >\n ${this._toolDetailCopied === 'input'\n ? html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n `\n : html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n `}\n </span>\n </button>\n ${this._toolDetailInputOpen\n ? html `<pre class=\"tool-detail__code\">${this._formatToolJson(this._toolDetail.use.data?.toolInput) || '(no input)'}</pre>`\n : nothing}\n </div>\n <div class=\"tool-detail__section\">\n <button\n type=\"button\"\n class=\"tool-detail__section-head\"\n aria-expanded=${this._toolDetailOutputOpen}\n @click=${this._handleToggleToolDetailOutput}\n >\n <span class=${classMap({\n 'tool-detail__caret': true,\n 'tool-detail__caret--open': this._toolDetailOutputOpen,\n })}>›</span>\n <span class=\"tool-detail__section-title\">Output</span>\n <span\n class=\"tool-detail__copy\"\n role=\"button\"\n @click=${this._handleCopyToolDetailOutput}\n >\n ${this._toolDetailCopied === 'output'\n ? html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n `\n : html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n `}\n </span>\n </button>\n ${this._toolDetailOutputOpen\n ? html `<pre class=\"tool-detail__code\">${this._formatToolJson(this._toolDetail.result?.data?.toolResultString) || '(no output yet)'}</pre>`\n : nothing}\n </div>\n </div>\n `;\n }\n /** The Debug view's body — telemetry scopes and the per-iteration table. */\n _renderDebugContent() {\n return html `\n ${this._telemetry ? html `\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">Context</div>\n <div class=\"debug-gauge\">\n <div class=\"debug-gauge__bar\">\n <div\n class=\"debug-gauge__fill\"\n style=${styleMap({ width: `${Math.min(100, Math.max(0, this._telemetry.contextUsedPercent || 0))}%` })}\n ></div>\n </div>\n <span class=\"debug-gauge__text\">\n ${this._fmtTokens(this._telemetry.currentContextTokens)} / ${this._fmtTokens(this._telemetry.contextWindowTokens)}\n · ${this._telemetry.contextUsedPercent ?? 0}%\n </span>\n </div>\n </div>\n\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">This turn</div>\n <div class=\"debug-metrics\">\n <span class=\"debug-metrics__key\">Input</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.turnInputTokens)}</span>\n <span class=\"debug-metrics__key\">Output</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.turnOutputTokens)}</span>\n <span class=\"debug-metrics__key\">Cache read</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.turnCacheReadTokens)}</span>\n <span class=\"debug-metrics__key\">Hit rate</span>\n <span class=\"debug-metrics__val\">${this._telemetry.turnHitRate ?? '—'}%</span>\n <span class=\"debug-metrics__key\">Cost</span>\n <span class=\"debug-metrics__val debug-cost\">${this._fmtCost(this._telemetry.turnCostUsd)}</span>\n </div>\n </div>\n\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">Lifetime</div>\n <div class=\"debug-metrics\">\n <span class=\"debug-metrics__key\">Input</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationInputTokens)}</span>\n <span class=\"debug-metrics__key\">Output</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationOutputTokens)}</span>\n <span class=\"debug-metrics__key\">Cache read</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationCacheReadTokens)}</span>\n <span class=\"debug-metrics__key\">Cache write</span>\n <span class=\"debug-metrics__val\">${this._fmtTokens(this._telemetry.conversationCacheWriteTokens)}</span>\n <span class=\"debug-metrics__key\">Cost so far</span>\n <span class=\"debug-metrics__val debug-cost\">${this._fmtCost(this._telemetry.conversationCostUsd)}</span>\n </div>\n </div>\n ` : html `\n <div class=\"debug-empty\">No telemetry yet — send a message to populate.</div>\n `}\n\n ${this._iterationLog.length ? html `\n <div class=\"debug-section\">\n <div class=\"debug-section__label\">Iterations (this turn)</div>\n <div class=\"debug-iterations-scroll\">\n <table class=\"debug-iterations\">\n <thead>\n <tr>\n <th>#</th>\n <th>In</th>\n <th>Out</th>\n <th>Cache R</th>\n <th>Cache W</th>\n <th>Hit</th>\n <th>Cost</th>\n <th>Ckpt</th>\n </tr>\n </thead>\n <tbody>\n ${this._iterationLog.map((it) => {\n const ckpt = this._cacheCheckpoints[it.iteration];\n return html `\n <tr>\n <td>${it.iteration}</td>\n <td>${this._fmtTokens(it.iterationInput)}</td>\n <td>${this._fmtTokens(it.iterationOutput)}</td>\n <td>${this._fmtTokens(it.iterationCacheRead)}</td>\n <td>${this._fmtTokens(it.iterationCacheWrite)}</td>\n <td>${it.iterationHitRate ?? '—'}%</td>\n <td class=\"debug-cost\">${this._fmtCost(it.iterationCostUsd)}</td>\n <td>${ckpt ? ckpt.mode : '—'}</td>\n </tr>\n `;\n })}\n </tbody>\n </table>\n </div>\n </div>\n ` : nothing}\n `;\n }\n render() {\n // Debug affordances (drawer toggle, drawer, /test-* options) require the\n // inline variant AND the server-side debug flag from aiFrameworkConfig.\n const isDebugEnabled = this.variant === 'inline' && this._aiFrameworkConfig.debugTelemetryEnabled === true;\n // Push the content over by the open drawer's width so the drawer sits beside\n // the content rather than overlaying it. One consistent (resizable) width for\n // both views. Only pushes while the drawer is open, and only inline — the\n // floating drawer fills the panel over the transcript, so it must not push.\n const contentPadding = {};\n if (this._drawerOpen && this.variant === 'inline') {\n contentPadding.paddingRight = `${this._drawerWidth}px`;\n }\n // Group the transcript into runs so an agent turn (its reasoning/tool/text/\n // decision messages, which stream in as separate entries) renders inside ONE\n // wrapper. The scroll-to-top runway goes on that wrapper, so everything the\n // turn appends fills the SAME tall element instead of stacking as siblings\n // below it (which is what stranded tool lines below the fold). A user message\n // is its own group and is unaffected.\n const messageGroups = [];\n this.messages.forEach((msg) => {\n const lastGroup = messageGroups[messageGroups.length - 1];\n if (msg.type === 'user' || !lastGroup || lastGroup[0].type === 'user') {\n messageGroups.push([msg]);\n }\n else {\n lastGroup.push(msg);\n }\n });\n return html `\n ${(this.hideToggle || this.variant === 'inline') ? nothing : html `\n <button\n class=${classMap({\n 'toggle': true,\n 'toggle--hidden': this.opened,\n })}\n @click=${this._handleToggle}\n title=\"Open chat\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n class=\"toggle-icon\"\n >\n <path d=\"M12 2C6.48 2 2 6.03 2 11c0 2.61 1.19 4.94 3.05 6.55L4 22l4.8-2.4C9.82 19.85 10.88 20 12 20c5.52 0 10-4.03 10-9S17.52 2 12 2z\"/>\n <path d=\"M8 11h.01M12 11h.01M16 11h.01\" stroke-width=\"2.5\"/>\n </svg>\n </button>\n `}\n\n <div\n class=${classMap({\n 'panel': true,\n 'panel--opened': this.opened,\n 'panel--resizing-drawer': this._isDrawerResizing,\n })}\n style=${styleMap(contentPadding)}\n @dragenter=${this._handleDragEnter}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n @drop=${this._handleDrop}\n >\n ${this._isDraggingFile ? html `\n <div class=\"drop-overlay\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"\n />\n </svg>\n <span>Drop images to attach</span>\n </div>\n ` : nothing}\n ${this.variant === 'inline' ? nothing : html `\n <div\n class=\"resize resize--n\"\n data-dir=\"n\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--s\"\n data-dir=\"s\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--w\"\n data-dir=\"w\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--e\"\n data-dir=\"e\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--nw\"\n data-dir=\"nw\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--ne\"\n data-dir=\"ne\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--sw\"\n data-dir=\"sw\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n <div\n class=\"resize resize--se\"\n data-dir=\"se\"\n @mousedown=${this._handleResizeMouseDown}\n ></div>\n `}\n <div class=\"header\" @mousedown=${this._handleHeaderMouseDown}>\n <div class=\"header-left\">\n <div class=\"header-info\">\n <span class=\"header-title\">${this._conversationTitle || this.label}</span>\n </div>\n </div>\n <div class=\"header-actions\">\n ${this.variant === 'floating' ? html `\n <button\n class=\"header-action\"\n @click=${this._handleNewConversation}\n title=\"New conversation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.75\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </svg>\n </button>\n <button\n class=\"header-action\"\n @click=${() => this._toggleDrawer('history')}\n title=\"Conversations\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n />\n </svg>\n </button>\n ` : nothing}\n <button\n class=\"header-action\"\n @click=${() => this._toggleDrawer('settings')}\n title=\"Settings\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\"\n />\n </svg>\n </button>\n ${isDebugEnabled ? html `\n <button\n class=\"header-action\"\n @click=${() => this._toggleDrawer('debug')}\n title=\"Debug telemetry\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3.75 3v11.25A2.25 2.25 0 0 0 6 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0 1 18 16.5h-2.25m-7.5 0h7.5m-7.5 0-1 3m8.5-3 1 3m0 0 .5 1.5m-.5-1.5h-9.5m0 0-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6\"\n />\n </svg>\n </button>\n ` : nothing}\n ${this.variant === 'inline' ? nothing : html `\n <button\n class=\"header-action\"\n @click=${this._handleToggle}\n title=\"Close\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n `}\n </div>\n </div>\n\n <div\n class=\"messages\"\n @scroll=${this._handleMessagesScroll}\n @wheel=${this._handleMessagesWheel}\n @touchmove=${this._handleMessagesTouchMove}\n @pointerdown=${this._handleMessagesPointerDown}\n >\n <div class=\"messages-inner\">\n ${this.messages.length === 0 ? html `\n <div class=\"empty\">\n <span class=\"empty-text\">What can I help you with?</span>\n ${this._suggestedActions.length ? html `\n <div class=\"empty-suggestions\">\n ${this._suggestedActions.map((action) => html `\n <button\n type=\"button\"\n class=\"empty-suggestions__chip\"\n @click=${() => this._handleSuggestedActionClick(action)}\n >${action.label}</button>\n `)}\n </div>\n ` : nothing}\n </div>\n ` : nothing}\n ${messageGroups.map((group) => {\n // A user group is a single message rendered bare. An agent group wraps\n // its items in one `.agent-turn` so the scroll-to-top runway sits on\n // that wrapper and the whole turn fills it (no stranded siblings).\n const items = group.map((msg) => {\n const index = this.messages.indexOf(msg);\n // Skip an empty assistant placeholder (no content, no reasoning) —\n // _send and _ensureAssistantBubble append these to stream into,\n // but between tool calls with no text they stay empty. An invisible\n // .message div still occupies a flex-gap slot, doubling the spacing\n // between tool lines. Keep it only while it's the actively-streaming\n // last message (it shows the typing dots).\n if (msg.type === 'assistant'\n && !msg.content\n && !msg.reasoning\n && !(this._isStreaming && msg === this.messages[this.messages.length - 1])) {\n return nothing;\n }\n // Tool visibility is user-controlled (\"Show tools\" in the settings\n // panel). When off, drop the whole tool row so it doesn't leave an\n // empty flex-gap slot in the transcript.\n if ((msg.type === 'tool_use' || msg.type === 'tool_result') && !this._showTools) {\n return nothing;\n }\n // A tool_result renders nothing on its own — its tool_use line pulls\n // it in (matched by data.toolUseId) and renders it under the ⎿ cliff.\n if (msg.type === 'tool_result') {\n return nothing;\n }\n // A tool_use line (Claude-CLI style): header \"› ToolName(input)\" and,\n // when \"Show tool inputs\" is on, the result under a ⎿ cliff pulled\n // from the next tool_result with the same toolUseId. Precompute the\n // result and the two display strings (they need statements — JSON\n // reformat, truncation — that can't live in a template expression).\n let result;\n let inputSummary = '';\n let resultPreview = '';\n let resultRemainder = 0;\n if (msg.type === 'tool_use') {\n if (this.messages[index + 1]?.type === 'tool_result'\n && this.messages[index + 1].data?.toolUseId === msg.data?.toolUseId) {\n result = this.messages[index + 1].data;\n }\n if (this._showToolInputs && msg.data?.toolInput) {\n inputSummary = String(msg.data.toolInput).replace(/\\s+/g, ' ').trim();\n if (inputSummary.length > 80) {\n inputSummary = `${inputSummary.slice(0, 79)}…`;\n }\n }\n if (this._showToolInputs && result?.toolResultString) {\n let formatted;\n try {\n formatted = JSON.stringify(JSON.parse(result.toolResultString), null, 2);\n }\n catch {\n formatted = String(result.toolResultString);\n }\n // Cap the inline preview by BOTH lines and characters. Line-only\n // truncation blows up on results whose first line is huge (e.g. a\n // minified-JSON blob or a stashed-response marker with a 30k-char\n // opening line) — 3 lines then still dumps tens of thousands of\n // chars into the transcript. Char-cap first (content-blind, like\n // the backend chokepoint), then keep at most 3 lines of that.\n const lines = formatted.split('\\n');\n resultPreview = lines.slice(0, 3).join('\\n');\n if (resultPreview.length > 200) {\n resultPreview = `${resultPreview.slice(0, 200)}…`;\n }\n resultRemainder = Math.max(0, lines.length - 3);\n }\n }\n // A resolved-decision line (Rail 3) — reads \"Approved Create AI Tool\"\n // / \"Denied …\" / \"Always allowed …\". Precompute the verb and the\n // friendly tool names (an if/else and a map — not template exprs).\n let decisionVerb = 'Approved';\n let decisionTools = [];\n if (msg.type === 'action_decision') {\n if (msg.data?.outcome === 'denied') {\n decisionVerb = 'Denied';\n }\n else if (msg.data?.outcome === 'alwaysAllowed') {\n decisionVerb = 'Always allowed';\n }\n decisionTools = (msg.data?.tools || []).map((t) => t.displayName || t.toolName);\n }\n // A tool line and a decision line ARE assistant-side messages —\n // render them inside the same .message wrapper as everything else so\n // they share its spacing/structure, not as separate element types.\n return html `\n <div class=${classMap({\n 'message': true,\n 'message--user': msg.type === 'user',\n 'message--assistant': msg.type !== 'user',\n })}>\n ${msg.type === 'tool_use' ? html `\n <div class=\"tool-activity-block\">\n <button\n type=\"button\"\n class=${classMap({\n 'tool-activity': true,\n 'tool-activity--error': result?.toolResultStatus === 'error',\n })}\n @click=${() => this._openToolDetail(msg)}\n >\n <span class=\"tool-activity__chevron\">›</span>\n <span class=\"tool-activity__label\">${msg.data?.displayName || msg.data?.toolName || 'Tool'}</span>\n ${inputSummary ? html `<span class=\"tool-activity__input\">(${inputSummary})</span>` : nothing}\n </button>\n ${this._showToolInputs && result?.toolResultString ? html `\n <button\n type=\"button\"\n class=${classMap({\n 'tool-activity__result': true,\n 'tool-activity__result--error': result.toolResultStatus === 'error',\n })}\n @click=${() => this._openToolDetail(msg)}\n >\n <span class=\"tool-activity__connector\">⎿</span>\n <pre class=\"tool-activity__result-body\">${resultPreview}${resultRemainder > 0\n ? html `\\n<span class=\"tool-activity__more\">… +${resultRemainder} lines</span>`\n : nothing}</pre>\n </button>\n ` : nothing}\n </div>\n ` : nothing}\n ${msg.type === 'action_decision' ? html `\n <div class=${classMap({\n 'decision': true,\n 'decision--denied': msg.data?.outcome === 'denied',\n })}>\n <span class=\"decision__icon\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n ${msg.data?.outcome === 'denied'\n ? html `<path d=\"M18 6 6 18M6 6l12 12\" />`\n : html `<path d=\"M20 6 9 17l-5-5\" />`}\n </svg>\n </span>\n <span class=\"decision__label\">${decisionVerb}${decisionTools.length ? ' ' + decisionTools.join(', ') : nothing}</span>\n </div>\n ` : nothing}\n ${msg.reasoning ? (this._reasoningAsMessage ? html `\n <div class=\"message-content\">${msg.reasoning}</div>\n ` : html `\n <details class=\"reasoning\">\n <summary>Thinking</summary>\n <div class=\"reasoning-content\">${msg.reasoning}</div>\n </details>\n `) : nothing}\n ${msg.conversationFiles && msg.conversationFiles.length ? html `\n <div class=\"attachments\">\n ${msg.conversationFiles.map((file) => {\n const fileName = file.niceName || file.name || 'File';\n // A stored file is an image by its MIME when it has one, else\n // by its extension.\n let isImage = IMAGE_EXTENSIONS.includes(this._getFileExtension(fileName));\n if (file.mimeType) {\n isImage = file.mimeType.startsWith('image/');\n }\n // An image shows its thumbnail; everything else shows a\n // file-type tile. Both open the previewer on click — it renders\n // images, video, PDFs, and text inline, and shows a download\n // tile for the rest (Office formats), so a click always does\n // something useful.\n if (isImage) {\n return html `\n <button\n class=\"attachment\"\n type=\"button\"\n title=${file.niceName || 'View image'}\n @click=${() => this._handleFileOpen(file)}\n >\n <img\n src=${file.previewUrl || `${KRHttp.getBaseUrl()}/api/system/conversationFile/${file.conversationFileID}/view`}\n alt=${file.niceName || ''}\n />\n </button>\n `;\n }\n return html `\n <button\n class=\"attachment attachment--doc attachment--openable\"\n type=\"button\"\n title=${fileName}\n @click=${() => this._handleFileOpen(file)}\n >\n <span class=\"attachment__type\">${this._getFileExtension(fileName) || 'File'}</span>\n <span class=\"attachment__name\">${fileName}</span>\n </button>\n `;\n })}\n </div>\n ` : nothing}\n ${msg.content ? html `\n <div class=\"message-content\">\n ${msg.type === 'user'\n ? this._renderUserContent(msg.content)\n : unsafeHTML(marked.parse(msg.content, { breaks: true }))}\n </div>\n ` : nothing}\n ${msg.type === 'assistant' && this._isStreaming && msg === this.messages[this.messages.length - 1] ? html `\n <div class=\"typing\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n ` : nothing}\n ${msg.content ? html `\n <button\n class=\"message-copy\"\n title=${this._copiedIndex === index ? 'Copied' : 'Copy'}\n @click=${() => this._handleCopyMessage(msg.content, index)}\n >\n ${this._copiedIndex === index ? html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ` : html `\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n `}\n </button>\n ` : nothing}\n </div>\n `;\n });\n if (group[0].type === 'user') {\n return items;\n }\n // The inline confirmation is this turn's final step, so it renders\n // INSIDE the agent-turn wrapper (not as a sibling) — it sits right\n // after the last message and the runway falls below it naturally.\n // Only on the last group, which is the current (paused) turn.\n const isLastGroup = group === messageGroups[messageGroups.length - 1];\n const showConfirmation = isLastGroup && this._pendingActions.length && this._inlineConfirm;\n // Keep the \"thinking\" indicator visible while a tool is running or\n // the model is between steps with no text yet. The trailing empty\n // assistant bubble shows the dots itself; but once a tool line is\n // the last message, that bubble is gone — so render the dots here\n // at the end of the live turn instead. Not while paused for a\n // confirmation (the ask replaces the indicator).\n const lastMsg = this.messages[this.messages.length - 1];\n const showTyping = isLastGroup\n && this._isStreaming\n && !this._pendingActions.length\n && lastMsg?.type !== 'assistant';\n return html `\n <div class=\"agent-turn\">\n ${items}\n ${showTyping ? html `\n <div class=\"typing\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n ` : nothing}\n ${showConfirmation ? this._renderConfirmation() : nothing}\n </div>\n `;\n })}\n </div>\n </div>\n\n ${this._pendingActions.length && !this._inlineConfirm ? this._renderConfirmation() : nothing}\n\n ${this._error ? html `\n <div class=\"error\">\n <span>${this._error}</span>\n <button class=\"error-dismiss\" @click=${this._handleErrorDismiss}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"error-dismiss-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ` : this._contextLimitReached ? html `\n <div class=\"context-limit\" role=\"alert\">\n ${this._contextLimitMessage\n || 'This conversation has reached its limit. Please start a new one to continue.'}\n </div>\n ` : this._contextWarning ? html `\n <div class=\"context-warning\" role=\"status\">\n <span>${this._contextWarning}</span>\n <button\n class=\"context-warning-dismiss\"\n title=\"Dismiss\"\n @click=${this._handleContextWarningDismiss}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2\"\n stroke=\"currentColor\"\n class=\"context-warning-dismiss-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ` : nothing}\n\n <div class=\"footer\">\n ${this._pendingConversationFiles.length ? html `\n <div class=\"composer-attachments\">\n ${repeat(this._pendingConversationFiles, (p) => p.localId, (p) => html `\n <div\n class=${classMap({\n chip: true,\n 'chip--doc': !p.previewUrl,\n })}\n title=${p.name}\n >\n <div\n class=${classMap({\n 'chip-body': true,\n 'chip-body--image': Boolean(p.previewUrl),\n })}\n >\n ${p.previewUrl\n ? html `<img src=${p.previewUrl} alt=${p.name} />`\n : html `\n <span class=\"chip-type\">${this._getFileExtension(p.name) || 'File'}</span>\n <span class=\"chip-name\">${p.name}</span>\n `}\n </div>\n <button\n class=\"chip-remove\"\n title=\"Remove\"\n @click=${() => this._handlePendingRemove(p.localId)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.75\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n `)}\n </div>\n ` : nothing}\n <input\n class=\"file-input\"\n type=\"file\"\n accept=${ACCEPTED_FILE_EXTENSIONS.map((ext) => '.' + ext).join(',')}\n multiple\n hidden\n @change=${this._handleFileInputChange}\n />\n ${this._skillMenuOpened ? this._renderSkillMenu() : nothing}\n <div class=\"input-wrapper\">\n <button\n class=\"input-plus\"\n @click=${this._handlePlusClick}\n >+</button>\n <textarea\n class=\"input\"\n .value=${this._inputValue}\n placeholder=${this.placeholder}\n rows=\"1\"\n @input=${this._handleInputChange}\n @keydown=${this._handleKeyDown}\n @paste=${this._handlePaste}\n ></textarea>\n ${this._renderModeSelector()}\n ${window.SpeechRecognition || window.webkitSpeechRecognition ? html `\n ${this._isDictating ? html `\n <button\n class=\"mic-stop\"\n title=\"Stop dictation\"\n aria-label=\"Stop dictation\"\n @click=${this._handleMicClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n class=\"mic-stop-icon\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"6\"\n y=\"6\"\n width=\"12\"\n height=\"12\"\n rx=\"2\"\n />\n </svg>\n </button>\n ` : html `\n <button\n class=\"mic\"\n title=\"Dictate a message\"\n aria-label=\"Dictate a message\"\n @click=${this._handleMicClick}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"mic-icon\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 15a3 3 0 0 0 3-3V6a3 3 0 0 0-6 0v6a3 3 0 0 0 3 3Z\"/>\n <path d=\"M19 11a7 7 0 0 1-14 0\"/>\n <path d=\"M12 18v3\"/>\n </svg>\n </button>\n `}\n ` : nothing}\n ${this._isStreaming ? html `\n <button\n class=\"stop\"\n @click=${this._handleStop}\n title=\"Stop generating\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n class=\"stop-icon\"\n >\n <rect\n x=\"6\"\n y=\"6\"\n width=\"12\"\n height=\"12\"\n rx=\"2\"\n />\n </svg>\n </button>\n ` : html `\n <button\n class=${classMap({\n 'send': true,\n 'send--disabled': (!this._inputValue.trim() && !this._pendingConversationFiles.length) || this._pendingActions.length > 0,\n })}\n @click=${this._handleSubmit}\n title=${this._pendingActions.length ? 'Approve or deny the pending action first' : 'Send message'}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n class=\"send-icon\"\n >\n <path d=\"M12 19V5M5 12l7-7 7 7\"/>\n </svg>\n </button>\n `}\n </div>\n </div>\n ${this._skillBrowseOpened ? this._renderSkillBrowse() : nothing}\n ${this._renderDrawer()}\n </div>\n `;\n }\n}\nKRChatbot.styles = css `\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host {\n display: block;\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n line-height: 1.6;\n\n --kr-chatbot-primary: #163052;\n --kr-chatbot-primary-hover: #1e4068;\n --kr-chatbot-bg: #ffffff;\n --kr-chatbot-border: #d9d9d9;\n --kr-chatbot-text: #1a1a2e;\n --kr-chatbot-text-secondary: #64668b;\n --kr-chatbot-user-bg: #e9e9e980;\n --kr-chatbot-error-bg: #fef2f2;\n --kr-chatbot-error-text: #dc2626;\n --kr-chatbot-success: #00b894;\n --kr-chatbot-toggle-size: 56px;\n --kr-chatbot-panel-width: 440px;\n --kr-chatbot-panel-height: 620px;\n }\n\n :host {\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 10000;\n }\n\n /* Toggle button */\n .toggle {\n width: var(--kr-chatbot-toggle-size);\n height: var(--kr-chatbot-toggle-size);\n border-radius: 18px;\n background: var(--kr-chatbot-primary);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 24px rgba(22, 48, 82, 0.4);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .toggle:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 32px rgba(22, 48, 82, 0.5);\n }\n\n .toggle--hidden {\n transform: scale(0);\n opacity: 0;\n pointer-events: none;\n }\n\n .toggle-icon {\n width: 26px;\n height: 26px;\n }\n\n /* Panel */\n .panel {\n display: none;\n flex-direction: column;\n background: var(--kr-chatbot-bg);\n overflow: hidden;\n position: absolute;\n bottom: 0;\n right: 0;\n width: var(--kr-chatbot-panel-width);\n height: var(--kr-chatbot-panel-height);\n max-height: calc(100vh - 72px);\n border-radius: 16px;\n box-shadow: 0 8px 40px rgba(0, 0, 0, 0.08), 0 2px 12px rgba(0, 0, 0, 0.04);\n border: 1px solid rgba(0, 0, 0, 0.08);\n animation: chatbot-panel-in 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n transform-origin: bottom right;\n }\n\n .panel--opened {\n display: flex;\n }\n\n /* Inline mode: fill the parent container instead of floating bottom-right. */\n :host([variant='inline']) {\n position: static;\n bottom: auto;\n right: auto;\n z-index: auto;\n height: 100%;\n }\n\n :host([variant='inline']) .panel {\n position: relative;\n bottom: auto;\n right: auto;\n width: 100%;\n height: 100%;\n max-height: none;\n border-radius: 0;\n box-shadow: none;\n border: none;\n animation: none;\n /* Reserve space for the drawer by animating padding-right in sync with the\n drawer's slide, so the chat column shrinks rather than being overlaid. */\n transition: padding-right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n /* Track the cursor 1:1 while dragging the drawer's resize handle. */\n :host([variant='inline']) .panel--resizing-drawer {\n transition: none;\n }\n\n @keyframes chatbot-panel-in {\n from {\n opacity: 0;\n transform: scale(0.92) translateY(20px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n\n /* Header */\n .header {\n padding: 0 16px 0 24px;\n height: 64px;\n background: #ffffff;\n color: #000000;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .header-info {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .header-title {\n font-size: 16px;\n font-weight: 600;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .header-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n }\n\n .header-action {\n width: 32px;\n height: 32px;\n background: transparent;\n border: none;\n color: rgb(0 0 0 / 70%);\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n }\n\n .header-action:hover {\n background: rgba(0, 0, 0, 0.05);\n color: #000000;\n }\n\n .header-action-icon {\n width: 20px;\n height: 20px;\n }\n\n .settings-section {\n padding: 14px 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n }\n\n .settings-section:last-child {\n border-bottom: none;\n }\n\n .settings-section__title {\n font-size: 14px;\n font-weight: 600;\n color: #000000;\n margin-bottom: 12px;\n }\n\n .settings-row {\n padding: 6px 0;\n }\n\n /* Tool detail view — the full input/output for one tool call. */\n .tool-detail {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 16px 20px;\n }\n\n .tool-detail__section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n /* Clickable section header — toggles the code block below. Button chrome is\n stripped so it reads as a heading row. */\n .tool-detail__section-head {\n display: flex;\n align-items: center;\n gap: 8px;\n appearance: none;\n background: none;\n border: none;\n width: 100%;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .tool-detail__section-head:focus-visible {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 2px;\n }\n\n /* Disclosure caret — the same \"›\" used on tool lines; rotates down when open. */\n .tool-detail__caret {\n flex-shrink: 0;\n font-size: 16px;\n color: rgba(0, 0, 0, 0.55);\n transition: transform 0.15s ease;\n }\n\n .tool-detail__caret--open {\n transform: rotate(90deg);\n }\n\n .tool-detail__section-title {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: #000000;\n }\n\n /* Copy icon-button — same treatment as the per-message copy button. */\n .tool-detail__copy {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n background: none;\n border: none;\n border-radius: 6px;\n color: #000000;\n cursor: pointer;\n transition: background-color 0.15s, color 0.15s;\n }\n\n .tool-detail__copy:hover {\n background: rgba(0, 0, 0, 0.06);\n }\n\n .tool-detail__copy svg {\n width: 14px;\n height: 14px;\n }\n\n /* The code block — pretty-printed JSON, shown in full (no inner scroll). The\n drawer body is the only scroll container, so long inputs/outputs extend the\n page and you scroll the panel, not a nested box. */\n .tool-detail__code {\n margin: 0;\n padding: 0 18px;\n font-family: 'SF Mono', 'Fira Code', Monaco, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: #000000;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n /* Messages */\n /* Full-width scroll container — keeps the scrollbar at the panel edge. */\n .messages {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n scroll-behavior: smooth;\n background: white;\n }\n\n /* Centered, width-capped column that actually holds the messages. */\n .messages-inner {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 36px;\n padding: 32px;\n width: 100%;\n max-width: 768px;\n margin-left: auto;\n margin-right: auto;\n }\n\n .empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--kr-chatbot-text-secondary);\n gap: 16px;\n }\n\n .empty-text {\n font-size: 14px;\n color: rgb(0 0 0 / 80%);\n }\n\n /* Context-aware action chips under the empty-state prompt. A row of pills the user can click to\n prefill a skill — capped small server-side so this reads as a few suggestions, not a menu. */\n .empty-suggestions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n max-width: 420px;\n margin-top: 4px;\n }\n\n .empty-suggestions__chip {\n padding: 8px 12px;\n background: rgb(0 0 0 / 6%);\n border: none;\n border-radius: 16px;\n color: #000000;\n font: inherit;\n font-size: 13px;\n line-height: 1.2;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .empty-suggestions__chip:hover {\n background: rgb(0 0 0 / 10%);\n color: #000000;\n }\n\n .message {\n position: relative;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n animation: chatbot-msg-in 0.3s ease-out;\n /* Reserve room for the copy button INSIDE the message box (so the button is\n part of the message's hover region — no dead zone to cross), then cancel\n that space for layout so message spacing is unchanged. */\n padding-bottom: 30px;\n margin-bottom: -30px;\n }\n\n /* The reserved padding overhangs into the next message; lift the hovered one\n so its copy button isn't covered by (or stealing hover from) the sibling. */\n .message:hover {\n z-index: 1;\n }\n\n @keyframes chatbot-msg-in {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .message--user {\n align-self: flex-end;\n align-items: flex-end;\n max-width: 85%;\n }\n\n .message--assistant {\n align-self: flex-start;\n gap: 24px;\n }\n\n /* An agent turn wraps all of its messages (reasoning, tool lines, text,\n decision) so the scroll-to-top runway can sit on the whole turn and content\n streams inside it instead of stacking as siblings below the runway. A flex\n column with the same 36px gap as .messages-inner, so item spacing is\n unchanged whether grouped or not. Full width so its children align exactly\n as before (assistant left, tool/decision left). */\n .agent-turn {\n display: flex;\n flex-direction: column;\n gap: 36px;\n width: 100%;\n }\n\n /* Tool-activity line — \"the assistant ran X\" row in the transcript. Same text\n style as any other message (black, 14px); a leading › chevron marks it as a\n step (in the same text style, not an icon). */\n /* The tool-activity line and its result preview are <button>s (they open the\n tool-detail drawer on click) — strip the native button chrome so they read\n as plain transcript text, then re-add the layout. */\n .tool-activity {\n align-self: flex-start;\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 14px;\n color: #000000;\n /* Keep the chevron + name + input on a single line; input truncates if long. */\n white-space: nowrap;\n /* Button reset */\n appearance: none;\n background: none;\n border: none;\n margin: 0;\n padding: 2px 4px;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: 4px;\n max-width: 100%;\n }\n\n .tool-activity:focus-visible {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 1px;\n }\n\n .tool-activity--error {\n color: var(--kr-chatbot-error-text);\n }\n\n /* Leading chevron — plain text in the same style as the name, so it reads as\n one label rather than an icon. */\n .tool-activity__chevron {\n flex-shrink: 0;\n }\n\n /* The tool name never shrinks — it's the input that truncates if the header\n runs out of room. */\n .tool-activity__label {\n flex-shrink: 0;\n }\n\n /* The tool input rendered inline in the header, Claude-CLI style:\n \"Read(chatbot.ts)\". Same color/font as the tool name — it reads as one\n label. Truncates with an ellipsis so the header stays on one line. */\n .tool-activity__input {\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n /* Header + result grouped as one unit so the parent .message--assistant 24px\n gap doesn't push them apart. Rows sit tight together inside. */\n .tool-activity-block {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n /* One hover for the whole tool block: hovering anywhere over the header or its\n result underlines the tool name, input, and result together as a single\n link, rather than lighting up header and result separately. */\n .tool-activity-block:hover .tool-activity__label,\n .tool-activity-block:hover .tool-activity__input,\n .tool-activity-block:hover .tool-activity__result-body {\n text-decoration: underline;\n text-decoration-color: rgba(0, 0, 0, 0.25);\n }\n\n /* The result block indented under the activity line with a ⎿ tree connector,\n like Claude CLI's tool output preview. Uses the normal message text style\n (14px, black) — only the ⎿ connector is muted. */\n .tool-activity__result {\n align-self: flex-start;\n display: flex;\n gap: 2px;\n /* Align the ⎿ connector's visible stroke under the first character of the\n tool name. The name is preceded by the \"› \" chevron (chevron width + 6px\n gap ≈ 11px), and the ⎿ glyph carries ~5.6px more internal left bearing\n than the name's first letter — so net-shift the block right to land the\n stroke under the name. */\n margin-left: 6px;\n font-size: 14px;\n color: #000000;\n /* Button reset — this preview row is also a click target for the detail view. */\n appearance: none;\n background: none;\n border: none;\n padding: 0;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .tool-activity__result:focus-visible {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 1px;\n border-radius: 4px;\n }\n\n .tool-activity__result--error {\n color: var(--kr-chatbot-error-text);\n }\n\n .tool-activity__connector {\n flex-shrink: 0;\n color: rgba(0, 0, 0, 0.55);\n user-select: none;\n /* The ⎿ arm sits near the baseline, ~6px below the result's first-character\n vertical center. Nudge the glyph up so the arm tip lines up with that center. */\n transform: translateY(-6px);\n }\n\n .tool-activity__result-body {\n /* Small horizontal gap between the ⎿ arm and the result text so they don't\n collide (the ⎿ glyph's own arm already extends most of the way). */\n margin: 0 0 0 6px;\n white-space: pre-wrap;\n word-break: break-word;\n font: inherit;\n }\n\n .tool-activity__more {\n color: rgba(0, 0, 0, 0.4);\n }\n\n /* Decision line — the persistent record of an approve/deny (Rail 3). Uses the\n normal message text style (14px, black); a check/deny icon marks it. */\n .decision {\n align-self: flex-start;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: #000000;\n }\n\n .decision--denied {\n color: var(--kr-chatbot-error-text);\n }\n\n .decision__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n }\n\n .decision__icon svg {\n width: 15px;\n height: 15px;\n }\n\n /* anywhere, NOT break-word: both break a long unbreakable run (a pasted URL) for\n layout, but only anywhere also shrinks the element's intrinsic min-content width.\n With break-word the URL still reports its full unbroken width as the minimum,\n which sizes this shrink-to-fit bubble past .messages-inner's 768px cap and\n overflows the page horizontally. */\n .message-content {\n line-height: 1.7;\n overflow-wrap: anywhere;\n }\n\n .message--user .message-content {\n display: inline-block;\n background: var(--kr-chatbot-user-bg);\n color: #000000;\n padding: 10px 16px;\n border-radius: 20px;\n border-bottom-right-radius: 6px;\n font-size: 14px;\n }\n\n /* Highlighted leading /skill token in a sent user message. Monospace + a\n stronger color makes it read as a distinct command without a pill. */\n .message-skill {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, Menlo, Consolas, monospace;\n font-weight: 600;\n color: #b45309;\n }\n\n /* Per-message copy button. Sits in the message's reserved bottom padding —\n inside the hover box, so moving the cursor down onto it never leaves the\n message. Height is reserved (via the message padding) so spacing doesn't\n jump; only opacity toggles on hover. */\n .message-copy {\n position: absolute;\n bottom: 0;\n left: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n background: none;\n border: none;\n border-radius: 6px;\n color: #000000;\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.15s, background-color 0.15s, color 0.15s;\n }\n\n .message--user .message-copy {\n left: auto;\n right: 0;\n }\n\n .message:hover .message-copy,\n .message-copy:focus-visible {\n opacity: 1;\n }\n\n .message-copy:hover {\n background: rgba(0, 0, 0, 0.06);\n }\n\n .message-copy svg {\n width: 14px;\n height: 14px;\n }\n\n .message--assistant .message-content {\n background: transparent;\n color: #000000;\n padding: 0;\n font-size: 14px;\n }\n\n .message--assistant .message-content pre {\n background: #1e1e1e;\n color: #d4d4d4;\n padding: 12px;\n border-radius: 6px;\n overflow-x: auto;\n margin: 8px 0;\n font-size: 13px;\n line-height: 1.4;\n }\n\n .message--assistant .message-content code {\n font-family: 'SF Mono', 'Fira Code', Monaco, monospace;\n font-size: 13px;\n }\n\n .message--assistant .message-content :not(pre) > code {\n background: rgba(0, 0, 0, 0.06);\n padding: 2px 5px;\n border-radius: 3px;\n }\n\n .message--assistant .message-content strong {\n font-weight: 600;\n }\n\n .message--assistant .message-content p {\n margin: 0 0 8px 0;\n }\n\n .message--assistant .message-content p:last-child {\n margin-bottom: 0;\n }\n\n /* Reasoning */\n .reasoning {\n border-radius: 6px;\n background: rgb(244 244 244 / 80%);\n font-size: 12px;\n }\n\n .reasoning summary {\n cursor: pointer;\n padding: 6px 10px 6px 10px;\n color: black;\n user-select: none;\n }\n\n .reasoning-content {\n padding: 6px 10px 10px;\n color: black;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n .typing {\n display: flex;\n gap: 4px;\n padding: 4px 0;\n }\n\n .typing span {\n width: 6px;\n height: 6px;\n background: var(--kr-chatbot-text-secondary);\n border-radius: 50%;\n animation: chatbot-typing 1.4s infinite;\n opacity: 0.4;\n }\n\n .typing span:nth-child(2) {\n animation-delay: 0.2s;\n }\n\n .typing span:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n @keyframes chatbot-typing {\n 0%, 60%, 100% {\n opacity: 0.4;\n transform: translateY(0);\n }\n 30% {\n opacity: 1;\n transform: translateY(-4px);\n }\n }\n\n /* Error */\n .error {\n padding: 8px 16px;\n background: var(--kr-chatbot-error-bg);\n color: var(--kr-chatbot-error-text);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .error-dismiss {\n background: none;\n border: none;\n color: var(--kr-chatbot-error-text);\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .error-dismiss-icon {\n width: 14px;\n height: 14px;\n }\n\n /* Context warning banner (user-facing, dismissible, non-blocking) */\n .context-warning {\n /* Match the message text column: 768px cap minus its 32px side padding\n (704px), and viewport minus that padding on narrower screens. */\n width: 100%;\n max-width: 735px;\n margin: 8px auto 0;\n padding: 10px 14px;\n border: 1px solid #fde68a;\n border-radius: 8px;\n background: #fffbeb;\n color: #92400e;\n font-size: 13px;\n line-height: 1.4;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-shrink: 0;\n }\n\n .context-warning-dismiss {\n background: none;\n border: none;\n color: #92400e;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n opacity: 0.7;\n }\n\n .context-warning-dismiss:hover {\n opacity: 1;\n }\n\n .context-warning-dismiss-icon {\n width: 14px;\n height: 14px;\n }\n\n /* Context-limit notice (user-facing, blocking — steers to a new conversation) */\n .context-limit {\n /* Match the message text column: 768px cap minus its 32px side padding\n (704px), and viewport minus that padding on narrower screens. */\n width: 100%;\n max-width: 735px;\n margin: 8px auto 0;\n padding: 10px 14px;\n border: 1px solid #fecaca;\n border-radius: 8px;\n background: var(--kr-chatbot-error-bg);\n color: var(--kr-chatbot-error-text);\n font-size: 13px;\n line-height: 1.4;\n flex-shrink: 0;\n }\n\n /* Action-confirmation card (Rail 3). Floats OVER the messages, anchored just\n above the composer — not part of the message scroll — so it stays put and\n in view while the transcript scrolls behind it. Its width matches the\n message text column: .messages-inner is 768px max with 32px padding, so the\n text column is 768 - 64. Plain-language ask + Yes/No for a non-technical\n user; no tool codes, no raw arguments. */\n .confirmation {\n position: absolute;\n left: 32px;\n right: 32px;\n /* Sits above the footer/composer with a clear gap between the two. */\n bottom: 104px;\n z-index: 6;\n max-width: 720px;\n margin: 0 auto;\n padding: 24px;\n border: 1px solid #d8d8d8;\n border-radius: 8px;\n background: var(--kr-chatbot-bg);\n color: var(--kr-chatbot-text);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n /* Never taller than the panel leaves room for — scroll the card itself if a\n batched multi-action ask is long, rather than covering the whole panel. */\n max-height: calc(100% - 176px);\n overflow-y: auto;\n }\n\n /* Inline variant (Claude-CLI style): sits IN the message stream as just\n another assistant message — no card chrome (padding/background/border/\n radius/shadow), no float offsets, no height cap. It flows and scrolls with\n the transcript. */\n .confirmation--inline {\n position: static;\n left: auto;\n right: auto;\n bottom: auto;\n z-index: auto;\n max-width: none;\n margin: 0;\n max-height: none;\n overflow: visible;\n padding: 0;\n border: none;\n border-radius: 0;\n background: none;\n box-shadow: none;\n /* scrollIntoView({ block: 'end' }) aligns the card's bottom to the viewport\n bottom; this margin makes it stop short so the Yes/No buttons aren't flush\n against (or clipped by) the fold. */\n scroll-margin-bottom: 24px;\n }\n\n /* The raw arguments, pretty-printed. Wraps rather than scrolling — the whole\n card grows with the transcript (the point of the inline variant). */\n .confirmation__details-input {\n margin: 8px 0 0;\n border-radius: 6px;\n color: var(--kr-chatbot-text);\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, Menlo, Consolas, monospace;\n font-size: 13px;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n }\n\n /* \"Run {tool}?\" heading — names the tool being run. */\n .confirmation__title {\n font-size: 16px;\n font-weight: 600;\n margin-bottom: 12px;\n }\n\n .confirmation__message {\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n }\n\n /* Batch list: one bullet per pending tool — its name, then the model's\n plain-language intent under it. */\n .confirmation__list {\n margin: 0;\n padding-left: 20px;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .confirmation__list-item:not(:last-child) {\n margin-bottom: 8px;\n }\n\n .confirmation__list-name {\n display: block;\n font-weight: 600;\n }\n\n .confirmation__list-desc {\n display: block;\n }\n\n /* Buttons in a row; wrap on a narrow panel rather than overflowing the card. */\n .confirmation__actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n margin-top: 20px;\n }\n\n /* Keyboard-highlighted decision — a focus ring around the button, drawn\n outside its border so it reads over both the flat (Yes) and outline\n variants without recoloring or reshaping the button. Don't set\n border-radius here: that's the button's own (its pill shape); outline\n follows it and doesn't affect the button's size. */\n .confirmation__btn--highlighted {\n outline: 2px solid var(--kr-chatbot-primary);\n outline-offset: 2px;\n }\n\n /*\n * Side drawer, docked to the right of the inline chat, holding the Settings\n * and Debug views. The chat column shrinks (padding-right) to make room; the\n * drawer does not overlay. It stays mounted and slides in/out via a transform,\n * so opening and closing animate; switching views just swaps the content\n * inside (no re-slide, no width change). One consistent resizable width across\n * both views; the width is set inline from _drawerWidth.\n */\n .drawer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n max-width: 100%;\n background: var(--kr-chatbot-bg);\n display: flex;\n flex-direction: column;\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n color: #000000;\n z-index: 5;\n }\n\n /* While dragging the resize handle, suppress the slide transition so the\n drawer tracks the cursor 1:1. */\n .drawer--resizing {\n transition: none;\n }\n\n .drawer--open {\n transform: translateX(0);\n box-shadow: -4px 0 20px rgba(10, 26, 46, 0.07);\n }\n\n /* Left-edge grab handle for resizing the drawer. */\n .drawer__resize {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 10px;\n cursor: ew-resize;\n z-index: 10;\n }\n\n .drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 12px 0 20px;\n height: 64px;\n flex-shrink: 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n }\n\n /* Full-panel (floating) header: back button then title, left-aligned. */\n .drawer--full .drawer__header {\n justify-content: flex-start;\n gap: 8px;\n padding: 0 12px;\n }\n\n .drawer__title {\n font-size: 14px;\n font-weight: 600;\n color: #000000;\n }\n\n .drawer__body {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px 0;\n }\n\n /* Floating variant: the drawer fills the whole panel over the transcript (a\n full-panel view with a back button), rather than sliding in beside it. */\n .drawer--full {\n left: 0;\n width: 100%;\n max-width: 100%;\n z-index: 6;\n }\n\n .drawer--full.drawer--open {\n box-shadow: none;\n }\n\n /* History (previous conversations) view. */\n .history {\n display: flex;\n flex-direction: column;\n }\n\n /* \"New conversation\" action in the Conversations header — pushed to the right. */\n .history__new {\n margin-left: auto;\n }\n\n .history__empty {\n padding: 24px 20px;\n text-align: center;\n font-size: 13px;\n color: rgb(0 0 0 / 50%);\n }\n\n .history__list {\n display: flex;\n flex-direction: column;\n padding: 4px 0;\n }\n\n .history__item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 5px;\n padding: 10px 20px;\n background: transparent;\n border: none;\n text-align: left;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .history__item:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n\n .history__item--active {\n background: rgba(0, 0, 0, 0.06);\n }\n\n .history__item-title {\n font-size: 14px;\n color: #000000;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n .history__item-date {\n font-size: 12px;\n color: rgb(0 0 0 / 60%);\n }\n\n .debug-section {\n padding: 14px 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n }\n\n .debug-section:last-child {\n border-bottom: none;\n }\n\n .debug-section__label {\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: #000000;\n font-size: 11px;\n font-weight: 600;\n margin-bottom: 10px;\n }\n\n /* Context-fullness gauge */\n .debug-gauge {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .debug-gauge__bar {\n flex: 1;\n height: 8px;\n border-radius: 4px;\n background: rgb(244 244 244 / 100%);\n overflow: hidden;\n }\n\n .debug-gauge__fill {\n height: 100%;\n border-radius: 4px;\n background: var(--kr-chatbot-primary);\n transition: width 0.3s ease;\n }\n\n .debug-gauge__text {\n color: #000000;\n font-size: 12px;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n }\n\n /* Metric rows */\n .debug-metrics {\n display: grid;\n grid-template-columns: auto 1fr;\n column-gap: 12px;\n row-gap: 7px;\n font-size: 13px;\n }\n\n .debug-metrics__key {\n color: #000000;\n }\n\n .debug-metrics__val {\n color: #000000;\n text-align: right;\n font-variant-numeric: tabular-nums;\n }\n\n .debug-cost {\n font-weight: 600;\n }\n\n /* Per-iteration table (verbose). The wrapper scrolls horizontally on its own\n so a wide table never forces the whole drawer to scroll sideways. */\n .debug-iterations-scroll {\n overflow-x: auto;\n max-width: 100%;\n }\n\n .debug-iterations {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n font-variant-numeric: tabular-nums;\n }\n\n .debug-iterations th,\n .debug-iterations td {\n padding: 5px 6px;\n text-align: right;\n white-space: nowrap;\n }\n\n .debug-iterations th {\n color: #000000;\n font-weight: 600;\n border-bottom: 1px solid rgba(0, 0, 0, 0.10);\n }\n\n .debug-iterations tbody tr:not(:last-child) td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n }\n\n .debug-iterations td:first-child,\n .debug-iterations th:first-child {\n text-align: left;\n }\n\n .debug-empty {\n color: #000000;\n padding: 20px;\n font-size: 13px;\n text-align: center;\n }\n\n /* Footer / Input */\n .footer {\n padding: 16px 16px 16px;\n flex-shrink: 0;\n background: white;\n width: 100%;\n max-width: 768px;\n margin-left: auto;\n margin-right: auto;\n }\n\n /* Inline mode: keep the composer clear of the bottom edge. */\n :host([variant='inline']) .footer {\n padding-bottom: 40px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n gap: 4px;\n background: white;\n border: 1px solid var(--kr-chatbot-border);\n border-radius: 26px;\n padding: 6px;\n transition: border-color 0.2s, box-shadow 0.2s;\n }\n\n .input-wrapper:focus-within {\n border-color: #b0b0b0;\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.04);\n }\n\n /* Inline mode: keep the border and add a soft floating shadow (ChatGPT/Gemini style). */\n :host([variant='inline']) .input-wrapper {\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06), 0 8px 24px rgba(0, 0, 0, 0.1);\n }\n\n :host([variant='inline']) .input-wrapper:focus-within {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 12px 32px rgba(0, 0, 0, 0.14);\n }\n\n .input-plus {\n width: 34px;\n height: 34px;\n border: none;\n background: transparent;\n color: var(--kr-chatbot-text);\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 20px;\n font-weight: 300;\n transition: background 0.15s;\n }\n\n .input-plus:hover {\n background: #f8f9fc;\n }\n\n .input {\n flex: 1;\n border: none;\n outline: none;\n resize: none;\n font-family: inherit;\n font-size: 15px;\n line-height: 1.5;\n padding: 4px 0;\n min-height: 26px;\n max-height: 120px;\n background: transparent;\n color: black;\n }\n\n .input::placeholder {\n color: #b0b0b0;\n }\n\n /* margin-right rather than a wider .input-wrapper gap, which would also push\n the plus button and textarea apart. Applied to both mic states so the\n spacing doesn't shift when dictation swaps one for the other. */\n .mic,\n .mic-stop {\n margin-right: 4px;\n }\n\n /* Mode selector — Gemini-style inline label + caret before the mic. Anchors\n its upward menu; sized so it never grows the single-row composer height. */\n .mode {\n position: relative;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n }\n\n .mode-trigger {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n height: 34px;\n padding: 0 8px;\n border: none;\n background: transparent;\n color: var(--kr-chatbot-text);\n border-radius: 17px;\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n white-space: nowrap;\n transition: background 0.15s;\n }\n\n .mode-trigger:hover {\n background: #f8f9fc;\n }\n\n .mode-trigger__caret {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n }\n\n /* Menu opens upward, anchored to the trigger's right edge. */\n .mode-menu {\n position: absolute;\n bottom: calc(100% + 8px);\n right: 0;\n min-width: 220px;\n background: white;\n border: 1px solid #b0b0b0;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n padding: 6px 0;\n z-index: 10000;\n display: flex;\n flex-direction: column;\n }\n\n .mode-menu__item {\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 100%;\n padding: 8px 14px;\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font: inherit;\n color: var(--kr-chatbot-text);\n }\n\n .mode-menu__item:hover {\n background: #f3f4f6;\n }\n\n .mode-menu__item--active {\n background: #eef1f6;\n }\n\n .mode-menu__label {\n font-size: 14px;\n font-weight: 500;\n }\n\n .mode-menu__desc {\n font-size: 12px;\n }\n\n .mic {\n width: 34px;\n height: 34px;\n border: none;\n background: transparent;\n color: var(--kr-chatbot-text);\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: background 0.15s, color 0.15s;\n }\n\n .mic:hover {\n background: #f8f9fc;\n }\n\n .mic-icon {\n width: 21px;\n height: 21px;\n }\n\n /* Dictation swaps the mic for this stop button, sitting in the mic's slot so\n the composer's layout is unchanged and the textarea stays visible with the\n transcript streaming into it. Structurally identical to .stop; only the\n colors differ — dictation isn't an error state, so it takes a neutral grey\n instead of the error red, and that also keeps it distinct from the solid\n send button sitting right beside it. The icon is dark rather than white\n because white on this grey wouldn't meet contrast. */\n .mic-stop {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: #eae7e7;\n color: #1f1f1f;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.15s;\n }\n\n .mic-stop:hover {\n background: #ded9d9;\n }\n\n /* Larger than .stop-icon's 14px: the rect fills only half its 24-unit\n viewBox, so the drawn square is half this value. */\n .mic-stop-icon {\n width: 20px;\n height: 20px;\n }\n\n .send {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: var(--kr-chatbot-primary);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.15s;\n }\n\n .send:hover {\n background: var(--kr-chatbot-primary-hover);\n }\n\n .send--disabled {\n opacity: 0.4;\n cursor: default;\n }\n\n .send--disabled:hover {\n background: var(--kr-chatbot-primary);\n }\n\n .send-icon {\n width: 16px;\n height: 16px;\n }\n\n .stop {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: var(--kr-chatbot-error-text);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.15s;\n }\n\n .stop:hover {\n background: #b91c1c;\n }\n\n .stop-icon {\n width: 14px;\n height: 14px;\n }\n\n /* Header drag cursor */\n .header {\n cursor: grab;\n user-select: none;\n }\n\n .header:active {\n cursor: grabbing;\n }\n\n /* Inline mode isn't draggable — don't show the grab/hand cursor. */\n :host([variant='inline']) .header,\n :host([variant='inline']) .header:active {\n cursor: default;\n }\n\n /* Drag / Resize states */\n .panel--dragging,\n .panel--resizing {\n transition: none;\n user-select: none;\n }\n\n .panel--dragging {\n box-shadow: 0 32px 96px rgba(0, 0, 0, 0.18), 0 12px 40px rgba(0, 0, 0, 0.1);\n }\n\n /* Resize handles */\n .resize {\n position: absolute;\n z-index: 10;\n }\n\n .resize--n { top: -4px; left: 12px; right: 12px; height: 8px; cursor: n-resize; }\n .resize--s { bottom: -4px; left: 12px; right: 12px; height: 8px; cursor: s-resize; }\n .resize--w { left: -4px; top: 12px; bottom: 12px; width: 8px; cursor: w-resize; }\n .resize--e { right: -4px; top: 12px; bottom: 12px; width: 8px; cursor: e-resize; }\n .resize--nw { top: -4px; left: -4px; width: 16px; height: 16px; cursor: nw-resize; }\n .resize--ne { top: -4px; right: -4px; width: 16px; height: 16px; cursor: ne-resize; }\n .resize--sw { bottom: -4px; left: -4px; width: 16px; height: 16px; cursor: sw-resize; }\n .resize--se { bottom: -4px; right: -4px; width: 16px; height: 16px; cursor: se-resize; }\n\n /* Attachment thumbnails inside a sent message bubble */\n .attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .message--user .attachments {\n justify-content: flex-end;\n margin-bottom: 24px;\n }\n\n /* A sent attachment is the same tile as the composer chip, so a file looks\n identical before and after sending. */\n .attachment {\n width: 112px;\n height: 112px;\n border-radius: 20px;\n overflow: hidden;\n background: #f2f0f0;\n border: none;\n cursor: zoom-in;\n flex-shrink: 0;\n padding: 0;\n }\n\n .attachment img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n /* Non-image attachment in a sent message — file-type label above the filename. */\n .attachment--doc {\n display: flex;\n flex-direction: column;\n padding: 16px 14px;\n box-sizing: border-box;\n text-align: left;\n }\n\n /* Opens the previewer on click — same affordance as the composer's doc chip. */\n .attachment--openable {\n cursor: pointer;\n }\n\n .attachment--openable:hover {\n background: #dfdddd;\n }\n\n .attachment__type {\n font-size: 13px;\n line-height: 1.2;\n color: #444746;\n text-transform: uppercase;\n flex-shrink: 0;\n }\n\n .attachment__name {\n margin-top: auto;\n font-size: 13px;\n line-height: 1.25;\n color: #000;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n }\n\n /* Skill menu (opened by typing '/'). Fixed + JS-positioned above the\n composer, following the krubble select-field dropdown pattern. */\n .skill-menu {\n position: fixed;\n z-index: 10000;\n background: white;\n border: 1px solid #9ba7b6;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n /* max-height is set dynamically to the space above the composer. */\n }\n\n /* Floating mode is a compact card — use a lighter shadow and softer border. */\n :host(:not([variant='inline'])) .skill-menu {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n border-color: #b0b0b0;\n }\n\n .skill-menu__list {\n list-style: none;\n margin: 0;\n padding: 8px 0;\n overflow-y: auto;\n }\n\n .skill-menu__item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n width: 100%;\n padding: 8px 16px;\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font: inherit;\n color: #000000;\n }\n\n\n /* Floating mode is a compact card — tighten name/description spacing. */\n :host(:not([variant='inline'])) .skill-menu__item {\n gap: 1px;\n }\n\n .skill-menu__name {\n font-weight: 500;\n }\n\n /* Floating mode is a compact card — shrink the skill name a touch. */\n :host(:not([variant='inline'])) .skill-menu__name {\n font-size: 13px;\n }\n\n .skill-menu__desc {\n font-size: 12px;\n color: #000000;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .skill-menu__actions {\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n border-bottom: 1px solid #eee;\n flex-shrink: 0;\n }\n\n .skill-menu__action {\n display: flex;\n flex-direction: column;\n gap: 2px;\n width: 100%;\n padding: 6px 16px;\n background: transparent;\n border: none;\n text-align: left;\n cursor: pointer;\n font: inherit;\n font-size: 13px;\n color: var(--kr-chatbot-primary);\n font-weight: 500;\n }\n\n /* Secondary line on an attach action (e.g. \"reads these files\") — muted,\n not the primary accent, so it reads as a hint under the action label. */\n .skill-menu__action .skill-menu__desc {\n font-weight: 400;\n color: #6b7280;\n }\n\n /* Highlight (keyboard) and hover (mouse) are independent — either shades the\n row. Declared after the base rules so it wins the cascade for both the\n action buttons and the skill items. */\n .skill-menu__action.skill-menu__item--highlighted,\n .skill-menu__item.skill-menu__item--highlighted,\n .skill-menu__action:hover,\n .skill-menu__item:hover {\n background: #f3f4f6;\n }\n\n /* Browse-all dialog body. Owns the height so the dialog is the same size on\n every tab; the search is fixed and the card grid flexes/scrolls to fill. */\n .skill-browse {\n display: flex;\n flex-direction: column;\n height: 70vh;\n }\n\n .skill-browse kr-text-field {\n display: block;\n margin: 20px 20px 16px;\n flex-shrink: 0;\n }\n\n .skill-browse kr-tab-group {\n flex: 1;\n min-height: 0;\n }\n\n /* The grid is the scroller and spans the full width, so its scrollbar sits\n flush against the dialog edge; padding-right insets the cards from it. */\n .skill-browse__grid {\n height: 100%;\n overflow-y: auto;\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-auto-rows: min-content;\n align-content: start;\n gap: 12px;\n padding: 16px 20px 20px;\n }\n\n .skill-card {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n text-align: left;\n cursor: pointer;\n font: inherit;\n color: #000000;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n\n .skill-card:hover {\n border-color: var(--kr-chatbot-primary);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n\n /* A Kodaris-tab card the user can't invoke — not in their roles, or not installed\n here yet. Clicking it does nothing, so it drops the pointer cursor and the hover\n highlight. The Install button inside keeps its own pointer cursor. */\n .skill-card--unavailable {\n cursor: default;\n }\n\n .skill-card--unavailable:hover {\n border-color: #e5e7eb;\n box-shadow: none;\n }\n\n /* Marks a globally-published skill listed on the Your Org tab — only happens on\n kodaris.com, which has no Kodaris tab for its own published skills. */\n .skill-card__badge {\n align-self: flex-start;\n padding: 2px 8px;\n border-radius: 10px;\n background: #f3f4f6;\n font-size: 11px;\n font-weight: 600;\n color: #000000;\n }\n\n /* Footer row on global skill cards: install button on the left, price on the\n right. margin-top:auto pins it to the bottom so cards in a row align their\n footers regardless of description length. Negative horizontal margins\n (matching the card's 14px padding) pull the top border out to the full\n card width; the content is re-padded horizontally to stay inset. */\n .skill-card__footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-top: 8px;\n margin-left: -14px;\n margin-right: -14px;\n padding: 14px 14px 0;\n border-top: 1px solid #e5e7eb;\n }\n\n .skill-card__price {\n font-size: 13px;\n font-weight: 600;\n color: #000000;\n }\n\n .skill-card__name {\n font-weight: 600;\n }\n\n .skill-card__desc {\n font-size: 12px;\n color: #000000;\n /* Clamp to 3 lines so a long description doesn't make one card tower over\n its row-mates in the grid. */\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .skill-browse__empty {\n height: 100%;\n padding: 32px;\n text-align: center;\n color: #000000;\n }\n\n /* Composer attachment chips (pre-send) */\n .composer-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 6px 10px;\n }\n\n /* Every attachment — image or document — is the same square tile, so a mixed\n row reads as one uniform set. */\n .chip {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 112px;\n height: 112px;\n border-radius: 20px;\n overflow: hidden;\n background: #f2f0f0;\n flex-shrink: 0;\n transition: background 0.28s ease;\n }\n\n .chip--doc {\n cursor: pointer;\n }\n\n .chip--doc:hover {\n background: #dfdddd;\n }\n\n /* The preview body — an image fills the tile; a document shows its file-type\n label above the filename, both left-aligned. */\n .chip-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: 16px 14px;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n /* An image fills the whole tile, so it needs no padding around it. */\n .chip-body--image {\n padding: 0;\n }\n\n .chip img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n /* File-type label (PDF, XLSX, …) — sits at the top of the tile. */\n .chip-type {\n font-size: 13px;\n line-height: 1.2;\n color: #444746;\n text-transform: uppercase;\n flex-shrink: 0;\n }\n\n /* Filename — pinned to the bottom of the tile, wrapping to at most three\n lines before it ellipsizes. */\n .chip-name {\n margin-top: auto;\n font-size: 13px;\n line-height: 1.25;\n color: #000;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n }\n\n /* Remove button — a bare X in the tile's top-right corner, revealed only when\n the tile (or the button itself) is hovered or keyboard-focused. */\n .chip-remove {\n position: absolute;\n /* Inset matches .chip-body's padding so the X sits the same distance from\n the right edge as the file-type label does from the left. */\n top: 14px;\n right: 14px;\n width: 15px;\n height: 15px;\n border: none;\n background: none;\n color: #444746;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n line-height: 1;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.28s ease;\n }\n\n .chip:hover .chip-remove,\n .chip-remove:focus-visible {\n opacity: 1;\n }\n\n .chip-remove:hover {\n color: #000;\n }\n\n .chip-remove svg {\n width: 15px;\n height: 15px;\n }\n\n /* Drag-and-drop overlay */\n .drop-overlay {\n position: absolute;\n inset: 0;\n z-index: 20;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n gap: 10px;\n /* Frosted, mostly-opaque surface so the chat content behind is masked\n and doesn't clash with the overlay label. */\n background: rgba(255, 255, 255, 0.92);\n backdrop-filter: blur(3px);\n border: 2px dashed var(--kr-chatbot-primary);\n border-radius: 16px;\n color: var(--kr-chatbot-primary);\n font-weight: 600;\n font-size: 15px;\n pointer-events: none;\n }\n\n .drop-overlay svg {\n width: 32px;\n height: 32px;\n }\n\n `;\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"send\", void 0);\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"load\", void 0);\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"messages\", void 0);\n__decorate([\n property({ type: String })\n], KRChatbot.prototype, \"label\", void 0);\n__decorate([\n property({ type: String })\n], KRChatbot.prototype, \"placeholder\", void 0);\n__decorate([\n property({\n type: Boolean,\n reflect: true\n })\n], KRChatbot.prototype, \"opened\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'hide-toggle',\n reflect: true\n })\n], KRChatbot.prototype, \"hideToggle\", void 0);\n__decorate([\n property({\n type: String,\n reflect: true\n })\n], KRChatbot.prototype, \"variant\", void 0);\n__decorate([\n property({\n type: Number,\n attribute: 'conversation-id',\n reflect: true\n })\n], KRChatbot.prototype, \"conversationId\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_inputValue\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isStreaming\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_error\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_conversationTitle\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_contextWarning\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_contextLimitReached\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_contextLimitMessage\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_pendingActions\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_confirmationHighlighted\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_confirmationInFlight\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_telemetry\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_iterationLog\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_cacheCheckpoints\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_drawerOpen\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_drawerView\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_conversations\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_conversationsLoading\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetail\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetailCopied\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetailInputOpen\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_toolDetailOutputOpen\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_drawerWidth\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDrawerResizing\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_pendingConversationFiles\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDraggingFile\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillMenuOpened\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillQuery\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_orgSkills\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_globalSkills\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_invocableSkills\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_suggestedActions\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_aiFrameworkConfig\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillHighlighted\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_copiedIndex\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillBrowseOpened\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillBrowseSource\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_skillBrowseQuery\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDictating\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_mode\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_modeMenuOpened\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_showTools\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_showToolInputs\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_showConfirmationInput\", void 0);\n__decorate([\n query('.panel')\n], KRChatbot.prototype, \"_panelEl\", void 0);\n__decorate([\n query('.messages')\n], KRChatbot.prototype, \"_messagesEl\", void 0);\n__decorate([\n query('.input')\n], KRChatbot.prototype, \"_inputEl\", void 0);\n__decorate([\n query('.file-input')\n], KRChatbot.prototype, \"_fileInputEl\", void 0);\n__decorate([\n query('.input-wrapper')\n], KRChatbot.prototype, \"_inputWrapperEl\", void 0);\n__decorate([\n query('.skill-menu')\n], KRChatbot.prototype, \"_skillMenuEl\", void 0);\n__decorate([\n query('.drawer__body')\n], KRChatbot.prototype, \"_drawerBodyEl\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-chatbot')) {\n customElements.define('kr-chatbot', KRChatbot);\n}\n//# sourceMappingURL=chatbot.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { KRContextMenu, KRDialog } from '@kodaris/krubble-components';\nimport { KRHttp } from '@kodaris/krubble-http';\nimport { KRNavItemEdit } from './scaffold/nav-item-edit.js';\n// Registers <kr-chatbot>. Only mounted in local dev (see connectedCallback) to mirror the\n// floating AI assistant the Operations shell injects in production — apps run standalone in\n// dev with no shell, so the scaffold provides it there.\nimport './chatbot.js';\n/**\n * Application shell component with nav drawer and main content area.\n *\n * ## Features\n * - Collapsible navigation drawer with hierarchical items (groups and items)\n * - User profile display in footer with customization menu\n * - Edit mode for customizing navigation (rename, reorder, hide items, add custom items)\n * - Drag and drop reordering in edit mode\n * - Persistence of customizations via preference API (global/organization level)\n *\n * ## Nav Customization\n * Users can customize the navigation by clicking their profile and selecting\n * \"Customize Navigation\". This enters edit mode where users can:\n * - Right-click items to edit label, icon, or visibility\n * - Right-click to add new items above/below existing items\n * - Drag and drop to reorder items or move them between groups\n *\n * Customizations are stored globally and apply to all users.\n *\n * ## Preference Storage\n * Preferences are stored as JSON with the following structure:\n * ```json\n * {\n * \"nav\": {\n * \"itemId\": { \"label\": \"Custom Label\", \"icon\": \"...\", \"active\": true, \"order\": 0 },\n * \"custom-123\": { \"type\": \"item\", \"label\": \"New Item\", \"url\": \"/path\", ... }\n * }\n * }\n * ```\n *\n * The `nav` object is a delta - it only contains overrides for existing items\n * or definitions for custom items (prefixed with \"custom-\").\n *\n * ## API Endpoints Used\n * - GET `/api/system/preference/json/scaffold?global=true` - load preferences\n * - POST `/api/system/preference/json/scaffold?global=true` - create new preference\n * - PUT `/api/system/preference/json/scaffold/{uuid}?global=true` - update existing preference\n *\n * @slot - The main content\n *\n * @property {string} logo - URL for the logo image\n * @property {string} label - Title text to display instead of logo\n * @property {'light'|'dark'} scheme - Color scheme: 'light' (default) or 'dark'\n * @property {KRNavItem[]} nav - Navigation items as JSON array\n * @property {KRUser} user - User profile data\n * @property {boolean} navEnabled - Whether to show the nav drawer (menu toggle remains visible when false)\n * @property {'employee'|'customer'} user-type - User type. Customers skip all `/api/system` calls since that endpoint is employee-only. Defaults to 'employee'.\n *\n *\n * TODO\n * - Don't hardcode breadcrumbs\n * - Look at renderNormalFooter and renderEditFooter and see if that is what we want to do\n */\nexport class KRScaffold extends LitElement {\n constructor() {\n super();\n /**\n * Default icon for nav items without an icon (shown at top level)\n */\n this.defaultNavItemIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>';\n this.originalFetch = null;\n this.originalXhrOpen = null;\n this.navItemDragPreview = null;\n this.navItemDragStartY = 0;\n this.isNavItemDragging = false;\n this.navItemDragExpandTimeout = null;\n this.navInitialized = false;\n this.logo = '';\n this.label = '';\n /**\n * URL to navigate to when clicking the logo/title. Defaults to '/'.\n */\n this.homeUrl = '/';\n this.scheme = 'light';\n this.nav = [];\n this.navIconsDisplayed = false;\n this.navExpanded = false;\n this.user = null;\n /**\n * Whether to show the subbar with menu toggle\n */\n this.subbar = false;\n /**\n * Whether to hide the navigation drawer.\n * Menu toggle button remains visible and emits menu-click events.\n */\n this.navEnabled = true;\n /**\n * User type. Set to 'customer' to skip all /api/system calls — customers don't have access to that endpoint.\n */\n this.userType = 'employee';\n /**\n * Breadcrumbs to display in the subbar\n */\n this.breadcrumbs = [];\n // True when the app runs on its own Vite dev server (localhost, but NOT port 8080 — that's the\n // backend serving the real Operations shell, which already provides this chrome). Only then does\n // the scaffold stand in with the dev app-bar/footer + floating AI assistant, so we never double\n // it up with the production shell.\n this.isDev = window.location.hostname === 'localhost' && window.location.port !== '8080';\n this.navItemsExpanded = new Set();\n this.navQuery = '';\n this.activeNavItemId = null;\n this.isNavScrolled = false;\n this.isNavOpened = localStorage.getItem('kr-scaffold-nav-opened') !== 'false';\n this.isEditing = false;\n this.isUserMenuOpen = false;\n this.pref = { nav: {} };\n this.draggedNavItemId = null;\n this.navItemDropTargetId = null;\n this.navItemDropPosition = 'above';\n this.pendingRequests = 0;\n this.boundHandleMouseMove = this.handleMouseMove.bind(this);\n this.boundHandleMouseUp = this.handleMouseUp.bind(this);\n }\n connectedCallback() {\n super.connectedCallback();\n this.installFetchInterceptor();\n // Dev only: mount the floating chatbot on document.body with the same id the production\n // shell gives its <kr-chatbot> (see operationsAppPortalWrapperIndex.ejs). It must live in\n // light DOM, not this template: apps reach it with document.getElementById('k-ai-chatbot')\n // to hand it prompts (KRChatbot.prompt), and an element inside this shadow root would be\n // invisible to that lookup. Same id in both places means apps need no dev/prod branch.\n if (this.isDev && !document.getElementById('k-ai-chatbot')) {\n const chatbot = document.createElement('kr-chatbot');\n chatbot.id = 'k-ai-chatbot';\n chatbot.hideToggle = true;\n document.body.appendChild(chatbot);\n }\n }\n // Attributes are not reflected into properties until after the first update,\n // so loadPref() must run here (not connectedCallback) for user-type to be set.\n firstUpdated() {\n this.loadPref();\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('nav') && this.nav.length > 0) {\n this.updateActiveNavItem();\n if (this.navExpanded && !this.navInitialized) {\n this.navInitialized = true;\n this.getComputedNav()\n .filter(item => item.type === 'group')\n .forEach(group => this.navItemsExpanded.add(group.id));\n }\n }\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.uninstallFetchInterceptor();\n if (this.isDev) {\n document.getElementById('k-ai-chatbot')?.remove();\n }\n }\n /**\n * Installs global interceptors for fetch and XMLHttpRequest to track pending HTTP requests.\n * Updates `pendingRequests` state when requests start/complete.\n */\n installFetchInterceptor() {\n if (this.originalFetch) {\n return;\n }\n const scaffold = this;\n // Intercept fetch\n this.originalFetch = window.fetch.bind(window);\n const originalFetch = this.originalFetch; // Capture in local scope to avoid null reference after uninstall\n window.fetch = function (...args) {\n scaffold.pendingRequests++;\n return originalFetch(...args).finally(() => {\n scaffold.pendingRequests--;\n });\n };\n // Intercept XMLHttpRequest\n this.originalXhrOpen = XMLHttpRequest.prototype.open;\n const originalXhrOpen = this.originalXhrOpen; // Capture in local scope to avoid null reference after uninstall\n XMLHttpRequest.prototype.open = function (method, url, async = true, username, password) {\n scaffold.pendingRequests++;\n this.addEventListener('loadend', () => {\n scaffold.pendingRequests--;\n }, { once: true });\n return originalXhrOpen.call(this, method, url, async, username, password);\n };\n }\n /**\n * Restores the original fetch and XMLHttpRequest functions.\n */\n uninstallFetchInterceptor() {\n if (this.originalFetch) {\n window.fetch = this.originalFetch;\n this.originalFetch = null;\n }\n if (this.originalXhrOpen) {\n XMLHttpRequest.prototype.open = this.originalXhrOpen;\n this.originalXhrOpen = null;\n }\n }\n /**\n * Resolves a navigation URL by prepending the base href.\n *\n * This method is used for:\n * 1. Setting href attributes on anchor elements (so Cmd/Ctrl+click opens correct URL in new tab)\n * 2. Comparing URLs with window.location.pathname in updateActiveNavItem()\n *\n * The original item.url is kept intact (without base href) and passed to Angular\n * via the nav-item-click event. Angular Router expects paths relative to base,\n * so it handles the base href internally.\n *\n * Example with base href \"/operations/\":\n * - item.url = \"/settings\" (used for Angular routing)\n * - resolveUrl(item) = \"/operations/settings\" (used for href and URL comparison)\n */\n resolveUrl(item) {\n if (!item.url) {\n return '#';\n }\n // External URLs - return as-is\n if (item.external) {\n return item.url;\n }\n // Remove leading slash from url if present, then combine with base\n let path = item.url;\n if (item.url.startsWith('/')) {\n path = item.url.slice(1);\n }\n const baseHref = document.querySelector('base')?.getAttribute('href') || '/';\n if (baseHref.endsWith('/')) {\n return baseHref + path;\n }\n return baseHref + '/' + path;\n }\n // =========================================================================\n // Navigation Data\n // =========================================================================\n /**\n * Returns the computed navigation as a flat array with preferences applied.\n *\n * Transforms the hierarchical `nav` property into a flat list where each item\n * has a `parentId` reference instead of nested `children`. Merges user\n * preference overrides (label, icon, url, active, order, parentId) and\n * includes any custom items added via the edit dialog.\n *\n * @returns Flat array of nav items with preferences applied\n */\n getComputedNav() {\n const result = [];\n this.nav.forEach((item, index) => {\n const override = this.pref.nav[item.id];\n result.push({\n ...item,\n ...override,\n order: override?.order ?? item.order ?? index,\n parentId: override?.parentId ?? null,\n });\n // Add children if group\n if (item.type === 'group' && item.children) {\n item.children.forEach((child, childIndex) => {\n const childOverride = this.pref.nav[child.id];\n let parentId = item.id;\n if (childOverride?.parentId !== undefined) {\n parentId = childOverride.parentId;\n }\n result.push({\n ...child,\n ...childOverride,\n order: childOverride?.order ?? child.order ?? childIndex,\n parentId,\n });\n });\n }\n });\n // Add custom items from pref\n Object.entries(this.pref.nav).forEach(([id, item]) => {\n if (id.startsWith('custom') && item.type && item.label) {\n result.push({\n id,\n type: item.type,\n label: item.label,\n icon: item.icon,\n url: item.url,\n active: item.active,\n order: item.order ?? result.length,\n parentId: item.parentId ?? null,\n });\n }\n });\n return result;\n }\n /**\n * Returns nav items for a given parent, filtered and sorted for rendering.\n *\n * Filters the computed nav to items matching the parentId, sorts by order,\n * hides inactive items in normal mode, and applies the search query filter.\n * Groups are shown if their label matches or if they have matching children.\n *\n * @param parentId - The parent ID to filter by (null for top-level items)\n * @returns Filtered and sorted nav items ready for rendering\n */\n getNavItemChildren(parentId) {\n let items = this.getComputedNav()\n .filter(item => item.parentId === parentId)\n .sort((a, b) => a.order - b.order);\n // In normal mode, filter out hidden items\n if (!this.isEditing) {\n items = items.filter(item => item.active !== false);\n }\n // Apply search filter\n if (this.navQuery) {\n const query = this.navQuery.toLowerCase();\n const allItems = this.getComputedNav();\n // If we're getting children of a group, check if parent group name matches query\n // If so, show all children without filtering\n if (parentId !== null) {\n const parentGroup = allItems.find(item => item.id === parentId);\n if (parentGroup?.label.toLowerCase().includes(query)) {\n return items; // Show all children when group name matches\n }\n }\n items = items.filter(item => {\n if (item.type === 'group') {\n // Show group if its label matches OR if it has matching children\n return item.label.toLowerCase().includes(query) || allItems.some(child => child.parentId === item.id &&\n child.active !== false &&\n child.label.toLowerCase().includes(query));\n }\n // Show item if its label matches\n return item.label.toLowerCase().includes(query);\n });\n }\n return items;\n }\n // =========================================================================\n // Navigation Search\n // =========================================================================\n /**\n * Handles search input changes for filtering nav items.\n *\n * When a search query is entered, automatically expands any groups that\n * contain matching children so users can see the results. When the search\n * is cleared, collapses all groups back to their default state.\n *\n * @param e - The input event from the search field\n */\n handleNavQueryChange(e) {\n this.navQuery = e.target.value;\n // Expand all groups when searching so matching children are visible\n // (groups without matching children won't be rendered anyway)\n if (this.navQuery) {\n this.getComputedNav().forEach(item => {\n if (item.type === 'group') {\n this.navItemsExpanded.add(item.id);\n }\n });\n }\n else {\n // Collapse all when search is cleared\n this.navItemsExpanded.clear();\n }\n }\n /**\n * Clears the search query.\n */\n handleNavQueryClear() {\n this.navQuery = '';\n this.navItemsExpanded.clear();\n }\n // =========================================================================\n // Navigation Interaction\n // =========================================================================\n handleMenuClick() {\n this.isNavOpened = !this.isNavOpened;\n localStorage.setItem('kr-scaffold-nav-opened', String(this.isNavOpened));\n }\n // Dev only: the footer \"AI Assistant\" button opens/closes the floating chatbot, mirroring how\n // the production shell drives its own hide-toggle chatbot from the footer.\n handleDevChatClick() {\n document.getElementById('k-ai-chatbot')?.toggle();\n }\n /**\n * Handles click on the nav header (logo/title) to navigate home.\n * Dispatches a nav-item-click event so Angular can intercept and route.\n */\n handleNavHeaderClick() {\n // Clear active state since we're going home\n this.activeNavItemId = null;\n const navEvent = new CustomEvent('nav-item-click', {\n detail: { item: { url: this.homeUrl } },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(navEvent);\n // If no listener prevented default, navigate natively\n if (!navEvent.defaultPrevented) {\n window.location.href = this.homeUrl;\n }\n }\n /**\n * Handles scroll on nav content to show/hide header shadow.\n */\n handleNavScroll(e) {\n this.isNavScrolled = e.target.scrollTop > 0;\n }\n /**\n * Expand a nav group by id. Public so consumers can keep a group open after\n * adding it dynamically — the scaffold only auto-expands groups once at startup,\n * so a group added later (e.g. an async \"Recent\" list) would otherwise stay\n * collapsed. Idempotent; a no-op if the group is already expanded.\n */\n expandNavGroup(groupId) {\n if (this.navItemsExpanded.has(groupId)) {\n return;\n }\n this.navItemsExpanded.add(groupId);\n this.requestUpdate();\n }\n /**\n * Handles click events on navigation items.\n *\n * For groups, toggles the expanded/collapsed state.\n * For items, dispatches a cancelable `nav-item-click` custom event.\n *\n * If a listener calls `preventDefault()` on the custom event, native browser\n * navigation is prevented. Otherwise, the default `<a href>` navigation\n * proceeds normally.\n *\n * The `@krubble/angular` package provides `KRScaffoldDirective` which\n * automatically listens for this event and handles navigation using\n * Angular's router. Import `KrubbleModule` in your Angular app to enable\n * SPA navigation without page reloads.\n *\n * @param e - The original click event\n * @param item - The nav item that was clicked\n */\n handleNavItemClick(e, item) {\n if (item.type === 'group') {\n // Animate the group's height with the Web Animations API. Collapsing removes\n // `nav-group--expanded` only once the animation finishes; expanding adds it\n // up front so there's a height to animate from.\n const navItem = this.shadowRoot?.querySelector(`.nav-item[data-id=\"${item.id}\"]`);\n const groupEl = navItem?.nextElementSibling;\n if (!groupEl) {\n return;\n }\n if (this.navItemsExpanded.has(item.id)) {\n this.navItemsExpanded.delete(item.id);\n groupEl.animate([\n { height: `${groupEl.scrollHeight}px` },\n { height: '0px' }\n ], {\n duration: 300,\n easing: 'ease-in-out'\n }).onfinish = () => {\n groupEl.classList.remove('nav-group--expanded');\n };\n }\n else {\n this.navItemsExpanded.add(item.id);\n groupEl.classList.add('nav-group--expanded');\n groupEl.animate([\n { height: '0px' },\n { height: `${groupEl.scrollHeight}px` }\n ], {\n duration: 300,\n easing: 'ease-in-out'\n });\n }\n this.requestUpdate();\n }\n else {\n // Allow Ctrl/Cmd+click and middle-click to open in new tab without SPA navigation\n if (e.ctrlKey || e.metaKey || e.button === 1) {\n return;\n }\n // Set active item immediately on click for instant visual feedback\n this.activeNavItemId = item.id;\n const navEvent = new CustomEvent('nav-item-click', {\n detail: { item },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(navEvent);\n // If a listener called preventDefault(), prevent the native navigation\n // (e.g., SPA router handles navigation)\n if (navEvent.defaultPrevented) {\n e.preventDefault();\n }\n }\n }\n /**\n * Updates the active nav item highlight based on the current URL.\n *\n * Compares the first path segment of `window.location.pathname` with each\n * nav item's URL to find a match. When found, highlights that item and\n * expands its parent group if nested.\n *\n * Called automatically by `KRScaffoldDirective` on Angular route changes.\n */\n updateActiveNavItem() {\n const currentPath = window.location.pathname;\n const allItems = this.getComputedNav().filter(item => item.type === 'item' && item.url);\n // Find the best match - prefer longer/more specific URL matches\n let activeItem = null;\n let longestMatch = 0;\n for (const item of allItems) {\n // Use resolveUrl because currentPath includes base href\n const url = this.resolveUrl(item);\n if (currentPath.startsWith(url) && url.length > longestMatch) {\n activeItem = item;\n longestMatch = url.length;\n }\n }\n if (activeItem) {\n this.activeNavItemId = activeItem.id;\n if (activeItem.parentId) {\n this.navItemsExpanded.add(activeItem.parentId);\n }\n }\n else {\n this.activeNavItemId = null;\n }\n }\n // =========================================================================\n // Navigation Customization\n // =========================================================================\n handleEditCancel() {\n this.isEditing = false;\n // Reload to revert changes\n this.loadPref();\n }\n handlePrefReset() {\n this.pref.nav = {};\n }\n handlePrefSave() {\n if (this.userType === 'customer') {\n return;\n }\n let url = '/api/system/preference/json/scaffold?global=true';\n let method = 'POST';\n if (this.pref.uuid) {\n url = `/api/system/preference/json/scaffold/${this.pref.uuid}?global=true`;\n method = 'PUT';\n }\n KRHttp.fetch({\n url,\n method,\n body: JSON.stringify({ nav: this.pref.nav }),\n })\n .then((response) => response.json())\n .then((data) => {\n this.pref = data.data;\n this.isEditing = false;\n })\n .catch((error) => {\n console.error('Failed to save nav customizations:', error);\n });\n }\n loadPref() {\n if (this.userType === 'customer') {\n return;\n }\n KRHttp.fetch({\n url: '/api/system/preference/json/scaffold?global=true',\n method: 'GET',\n })\n .then((response) => response.json())\n .then((data) => {\n const pref = data?.data?.[0];\n if (pref) {\n this.pref = pref;\n }\n })\n .catch(() => {\n // No preferences saved yet\n });\n }\n handleNavItemContextMenu(e, item) {\n if (!this.isEditing) {\n return;\n }\n e.preventDefault();\n KRContextMenu.open({\n x: e.clientX,\n y: e.clientY,\n items: [\n {\n id: 'edit',\n label: 'Edit Item'\n },\n {\n id: 'divider-1',\n label: '',\n divider: true\n },\n {\n id: 'add-above',\n label: 'Add Item Above'\n },\n {\n id: 'add-below',\n label: 'Add Item Below'\n },\n ],\n }).then((result) => {\n if (!result) {\n return;\n }\n switch (result.id) {\n case 'edit':\n this.openNavItemEdit(item);\n break;\n case 'add-above':\n this.addNavItem(item, 'above');\n break;\n case 'add-below':\n this.addNavItem(item, 'below');\n break;\n }\n });\n }\n /**\n * Opens the nav item edit dialog for customizing an item's properties.\n *\n * Opens `KRNavItemEdit` dialog pre-populated with the item's current values.\n * When the user saves, merges the result into the nav delta to persist\n * customizations like label, icon, URL, and visibility.\n *\n * @param item - The nav item to edit\n */\n openNavItemEdit(item) {\n KRDialog.open(KRNavItemEdit, { data: item }).afterClosed().then((res) => {\n const result = res;\n if (!result) {\n return;\n }\n if (!this.pref.nav[item.id]) {\n this.pref.nav[item.id] = {};\n }\n this.pref.nav[item.id] = {\n ...this.pref.nav[item.id],\n ...result\n };\n this.requestUpdate();\n });\n }\n /**\n * Adds a new custom nav item relative to an existing item.\n *\n * Creates a placeholder item in the nav delta, shifts existing siblings\n * to make room, then opens the edit dialog so the user can configure\n * the new item's label, icon, and URL.\n *\n * @param targetItem - The existing item to position relative to\n * @param position - Whether to insert 'above' or 'below' the target item\n */\n addNavItem(targetItem, position) {\n const customId = `custom-${Date.now()}`;\n const siblings = this.getComputedNav()\n .filter(i => i.parentId === targetItem.parentId)\n .sort((a, b) => a.order - b.order);\n const targetIndex = siblings.findIndex(i => i.id === targetItem.id);\n let newOrder;\n if (position === 'above') {\n newOrder = targetIndex;\n }\n else {\n newOrder = targetIndex + 1;\n }\n // Shift existing items to make room for the new item\n siblings.forEach((sibling, index) => {\n if (index >= newOrder) {\n if (!this.pref.nav[sibling.id]) {\n this.pref.nav[sibling.id] = {};\n }\n this.pref.nav[sibling.id].order = index + 1;\n }\n });\n // Add the new item and open edit dialog\n const newItem = {\n id: customId,\n type: 'item',\n label: 'New Item',\n order: newOrder,\n parentId: targetItem.parentId,\n active: true,\n };\n this.pref.nav[customId] = newItem;\n this.requestUpdate();\n this.openNavItemEdit(newItem);\n }\n // =========================================================================\n // Navigation Drag & Drop\n // =========================================================================\n /**\n * Initiates a potential drag operation when mouse is pressed on a nav item.\n *\n * Only active in edit mode. Records the starting position and sets up\n * document-level listeners for mouse move and mouse up events. The actual\n * drag doesn't start until the mouse moves more than 5 pixels.\n *\n * @param e - The mouse event\n * @param item - The nav item being pressed\n */\n handleNavItemMouseDown(e, item) {\n if (!this.isEditing) {\n return;\n }\n e.preventDefault();\n this.draggedNavItemId = item.id;\n this.navItemDragStartY = e.clientY;\n this.isNavItemDragging = false;\n document.addEventListener('mousemove', this.boundHandleMouseMove);\n document.addEventListener('mouseup', this.boundHandleMouseUp);\n }\n /**\n * Handles mouse movement during a nav item drag operation.\n *\n * Initiates dragging after the mouse moves more than 5 pixels (to distinguish\n * from clicks), creates a floating preview element that follows the cursor,\n * and updates the drop target indicator based on mouse position.\n *\n * @param e - The mouse event\n */\n handleMouseMove(e) {\n if (!this.draggedNavItemId) {\n return;\n }\n // Start dragging after moving a few pixels (to distinguish from clicks)\n if (!this.isNavItemDragging && Math.abs(e.clientY - this.navItemDragStartY) > 5) {\n this.isNavItemDragging = true;\n this.classList.add('kr-scaffold--dragging');\n // Create drag preview\n const draggedItem = this.getComputedNav().find(i => i.id === this.draggedNavItemId);\n if (draggedItem) {\n this.navItemDragPreview = document.createElement('div');\n this.navItemDragPreview.className = 'nav-item-drag-preview';\n this.navItemDragPreview.textContent = draggedItem.label;\n this.navItemDragPreview.style.left = `${e.clientX + 10}px`;\n this.navItemDragPreview.style.top = `${e.clientY - 20}px`;\n this.shadowRoot?.appendChild(this.navItemDragPreview);\n }\n }\n if (!this.isNavItemDragging) {\n return;\n }\n // Update preview position\n if (this.navItemDragPreview) {\n this.navItemDragPreview.style.left = `${e.clientX + 10}px`;\n this.navItemDragPreview.style.top = `${e.clientY - 20}px`;\n }\n // Find drop target based on mouse position\n this.updateNavItemDropTarget(e);\n }\n /**\n * Handles the end of a nav item drag operation.\n *\n * Removes document-level mouse listeners, executes the drop if there's a valid\n * target, and cleans up all drag-related state.\n */\n handleMouseUp() {\n document.removeEventListener('mousemove', this.boundHandleMouseMove);\n document.removeEventListener('mouseup', this.boundHandleMouseUp);\n if (this.isNavItemDragging && this.navItemDropTargetId) {\n this.executeNavItemDrop();\n }\n // Reset all drag state\n this.draggedNavItemId = null;\n this.navItemDropTargetId = null;\n this.isNavItemDragging = false;\n this.classList.remove('kr-scaffold--dragging');\n if (this.navItemDragPreview) {\n this.navItemDragPreview.remove();\n this.navItemDragPreview = null;\n }\n this.clearNavItemDragExpandTimeout();\n this.requestUpdate();\n }\n /**\n * Determines where a dragged nav item would be dropped based on mouse position.\n *\n * Loops through all nav items and checks if the mouse is hovering over one.\n * For groups, the item is divided into thirds (above/center/below) where\n * \"center\" means drop into the group. For regular items, it's halves (above/below).\n *\n * Also handles auto-expanding collapsed groups when hovering over their center,\n * and validates drops (e.g., prevents dropping a group into another group).\n *\n * Updates `navItemDropTargetId` and `navItemDropPosition` state which are used to render\n * visual drop indicators in the UI.\n *\n * @param e - The mouse event from dragging\n */\n updateNavItemDropTarget(e) {\n // Get all nav items in shadow DOM\n const navItems = this.shadowRoot?.querySelectorAll('.nav-item[data-id]');\n if (!navItems) {\n return;\n }\n let foundTarget = false;\n navItems.forEach((el) => {\n const rect = el.getBoundingClientRect();\n const itemId = el.getAttribute('data-id');\n if (!itemId || itemId === this.draggedNavItemId) {\n return;\n }\n // Skip if mouse is outside this element\n if (e.clientX < rect.left || e.clientX > rect.right ||\n e.clientY < rect.top || e.clientY > rect.bottom) {\n return;\n }\n const item = this.getComputedNav().find(i => i.id === itemId);\n if (!item) {\n return;\n }\n const y = e.clientY - rect.top;\n let position;\n // Determine drop position based on mouse Y position within the item.\n // Groups are divided into thirds: top=above, middle=center (drop into), bottom=below.\n // Regular items are divided in half: top=above, bottom=below.\n if (item.type === 'group') {\n if (y < rect.height / 3) {\n // Top third - drop above the group\n position = 'above';\n this.clearNavItemDragExpandTimeout();\n }\n else if (y > (rect.height * 2) / 3) {\n // Bottom third - drop below the group\n position = 'below';\n this.clearNavItemDragExpandTimeout();\n }\n else {\n // Middle third - drop into the group (as a child)\n position = 'center';\n // Auto-expand collapsed groups after a delay. The 500ms wait keeps groups\n // from expanding too eagerly when the user is just passing over them, and\n // the check inside confirms they're still on this group's center.\n if (!this.navItemsExpanded.has(item.id) && !this.navItemDragExpandTimeout) {\n this.navItemDragExpandTimeout = window.setTimeout(() => {\n if (this.navItemDropTargetId === item.id && this.navItemDropPosition === 'center') {\n this.navItemsExpanded.add(item.id);\n this.requestUpdate();\n }\n this.navItemDragExpandTimeout = null;\n }, 500);\n }\n }\n }\n else {\n // Regular items only support above/below, not center\n if (y < rect.height / 2) {\n position = 'above';\n }\n else {\n position = 'below';\n }\n this.clearNavItemDragExpandTimeout();\n }\n // Determine what the new parent would be\n let newParentId;\n if (position === 'center') {\n newParentId = item.id;\n }\n else {\n newParentId = item.parentId;\n }\n const draggedItem = this.getComputedNav().find(i => i.id === this.draggedNavItemId);\n // Don't show drop indicator if invalid drop:\n // 1. Can't drop an item into itself (newParentId === draggedNavItemId)\n // 2. Groups can only exist at the top level, so prevent dropping a group into another group (newParentId !== null means it would be nested)\n if (newParentId === this.draggedNavItemId || (draggedItem?.type === 'group' && newParentId !== null)) {\n this.navItemDropTargetId = null;\n this.clearNavItemDragExpandTimeout();\n return;\n }\n // Valid drop target found - store the target item and position (above/below/center)\n // so the UI can render the drop indicator in the correct location\n this.navItemDropTargetId = item.id;\n this.navItemDropPosition = position;\n foundTarget = true;\n });\n // Mouse is not over any valid nav item - clear the drop indicator\n // (e.g., user dragged outside the nav area or over empty space)\n if (!foundTarget) {\n this.navItemDropTargetId = null;\n this.clearNavItemDragExpandTimeout();\n }\n this.requestUpdate();\n }\n /**\n * Cancels the pending auto-expand timeout for nav groups during drag.\n * Called when the user moves away from a group's center or stops dragging.\n */\n clearNavItemDragExpandTimeout() {\n if (this.navItemDragExpandTimeout) {\n clearTimeout(this.navItemDragExpandTimeout);\n this.navItemDragExpandTimeout = null;\n }\n }\n /**\n * Executes the drop operation after a nav item drag completes.\n *\n * Calculates the new position and parent for the dragged item based on\n * the drop target and position (above/below/center). Updates the navDelta\n * with new order values for the dragged item and shifts siblings as needed.\n */\n executeNavItemDrop() {\n if (!this.draggedNavItemId || !this.navItemDropTargetId) {\n return;\n }\n const allItems = this.getComputedNav();\n const draggedItem = allItems.find(i => i.id === this.draggedNavItemId);\n const targetItem = allItems.find(i => i.id === this.navItemDropTargetId);\n if (!draggedItem || !targetItem) {\n return;\n }\n // Determine the new parentId for the dragged item\n let newParentId;\n if (this.navItemDropPosition === 'center' && targetItem.type === 'group') {\n if (targetItem.id === this.draggedNavItemId) {\n return;\n }\n newParentId = targetItem.id;\n }\n else {\n newParentId = targetItem.parentId;\n }\n if (newParentId === this.draggedNavItemId) {\n return;\n }\n // Get siblings in the destination parent\n const siblings = allItems\n .filter(i => i.parentId === newParentId && i.id !== this.draggedNavItemId)\n .sort((a, b) => a.order - b.order);\n const navDelta = this.pref.nav;\n // Calculate the new order\n let newOrder;\n if (this.navItemDropPosition === 'center') {\n // Dropping into a group - place at the end of its children\n if (siblings.length > 0) {\n newOrder = Math.max(...siblings.map(s => s.order)) + 1;\n }\n else {\n newOrder = 0;\n }\n }\n else {\n // Find where the target item is in the sorted siblings list\n const targetIndex = siblings.findIndex(i => i.id === targetItem.id);\n // Determine insert position based on drop position (above/below target)\n if (targetIndex === -1) {\n newOrder = 0;\n }\n else if (this.navItemDropPosition === 'above') {\n newOrder = targetIndex;\n }\n else {\n newOrder = targetIndex + 1;\n }\n // Shift existing siblings to make room for the dropped item.\n // Items at or after the insert position get their order bumped up by 1.\n siblings.forEach((sibling, index) => {\n if (!navDelta[sibling.id]) {\n navDelta[sibling.id] = {};\n }\n if (index >= newOrder) {\n navDelta[sibling.id].order = index + 1;\n }\n else {\n navDelta[sibling.id].order = index;\n }\n });\n }\n // Update the dragged item's position and parent in the delta\n if (!navDelta[this.draggedNavItemId]) {\n navDelta[this.draggedNavItemId] = {};\n }\n navDelta[this.draggedNavItemId].order = newOrder;\n navDelta[this.draggedNavItemId].parentId = newParentId;\n // Persist changes and trigger re-render\n this.pref.nav = navDelta;\n this.requestUpdate();\n }\n // =========================================================================\n // User Menu\n // =========================================================================\n handleUserMenuToggle() {\n this.isUserMenuOpen = !this.isUserMenuOpen;\n }\n handleCustomize() {\n this.isUserMenuOpen = false;\n this.isEditing = true;\n }\n // =========================================================================\n // Rendering\n // =========================================================================\n renderNormalFooter() {\n if (!this.user) {\n return nothing;\n }\n const initials = this.user.name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n // todo - use a reusable menu component\n return html `\n <div class=\"user-menu-container\">\n ${this.isUserMenuOpen ? html `\n <div class=\"user-menu\">\n <button class=\"user-menu__item\" @click=${this.handleCustomize}>\n Customize Navigation\n </button>\n </div>\n ` : nothing}\n <div class=\"user\" @click=${this.handleUserMenuToggle}>\n <div class=\"user__avatar\">\n ${this.user.avatar\n ? html `<img src=${this.user.avatar} alt=${this.user.name} />`\n : initials}\n </div>\n <div class=\"user__info\">\n <div class=\"user__name\">${this.user.name}</div>\n ${this.user.email ? html `<div class=\"user__email\">${this.user.email}</div>` : nothing}\n </div>\n </div>\n </div>\n `;\n }\n // todo - review\n renderEditFooter() {\n return html `\n <div class=\"edit-actions\">\n <button class=\"edit-actions__btn edit-actions__btn--primary\" @click=${this.handlePrefSave}>\n Save\n </button>\n <div class=\"edit-actions__secondary\">\n <button class=\"edit-actions__btn\" @click=${this.handlePrefReset}>\n Reset\n </button>\n <button class=\"edit-actions__btn\" @click=${this.handleEditCancel}>\n Cancel\n </button>\n </div>\n </div>\n `;\n }\n /**\n * Renders a navigation item as either a group or a link.\n *\n * Groups render as expandable `<button>` elements with a chevron indicator and\n * nested children. Items render as `<a>` anchor links with href navigation.\n *\n * Both types support drag-and-drop reordering in edit mode, context menus for\n * customization, and visual indicators for active/hidden/drop-target states.\n *\n * Icons use SVG strings and fall back to `defaultNavItemIcon` when not provided.\n * Icons are only rendered for top-level items, not for children nested within groups.\n *\n * @param item - The flat nav item data to render\n * @param isChild - Whether this item is nested within a group (affects icon rendering)\n * @returns Lit HTML template for the nav item\n */\n renderNavItem(item, isChild = false) {\n if (item.type === 'section') {\n return html `\n <div class=\"nav-section\">${item.label}</div>\n `;\n }\n if (item.type === 'group') {\n const children = this.getNavItemChildren(item.id);\n return html `\n <button\n class=${classMap({\n 'nav-item': true,\n 'nav-item--expanded': this.navItemsExpanded.has(item.id),\n 'nav-item--hidden': this.isEditing && item.active === false,\n 'nav-item--drop-above': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'above',\n 'nav-item--drop-below': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'below',\n 'nav-item--drop-center': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'center',\n })}\n data-id=\"${item.id}\"\n @mousedown=${(e) => this.handleNavItemMouseDown(e, item)}\n @click=${(e) => this.handleNavItemClick(e, item)}\n @contextmenu=${(e) => this.handleNavItemContextMenu(e, item)}\n >\n ${this.navIconsDisplayed ? html `<span class=\"nav-item__icon\">${unsafeHTML(item.icon || this.defaultNavItemIcon)}</span>` : nothing}\n <span class=\"nav-item__label\">${item.label}</span>\n <svg\n class=\"nav-item__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n d=\"M6 9l6 6 6-6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <div class=${classMap({\n 'nav-group': true,\n 'nav-group--expanded': this.navItemsExpanded.has(item.id),\n })}>\n ${children.map((child) => this.renderNavItem(child, true))}\n </div>\n `;\n }\n return html `\n <a\n class=${classMap({\n 'nav-item': true,\n 'nav-item--active': this.activeNavItemId === item.id,\n 'nav-item--hidden': this.isEditing && item.active === false,\n 'nav-item--drop-above': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'above',\n 'nav-item--drop-below': this.navItemDropTargetId === item.id && this.navItemDropPosition === 'below',\n })}\n data-id=\"${item.id}\"\n href=${this.resolveUrl(item)}\n target=${item.external ? '_blank' : nothing}\n @mousedown=${(e) => this.handleNavItemMouseDown(e, item)}\n @click=${(e) => this.handleNavItemClick(e, item)}\n @contextmenu=${(e) => this.handleNavItemContextMenu(e, item)}\n >\n ${this.navIconsDisplayed && !isChild ? html `<span class=\"nav-item__icon\">${unsafeHTML(item.icon || this.defaultNavItemIcon)}</span>` : nothing}\n <span class=\"nav-item__label\">${item.label}</span>\n </a>\n `;\n }\n // todo - don't hardcode breadcrumbs\n render() {\n const topLevelItems = this.getNavItemChildren(null);\n // Use unfiltered count to determine if search should show (so it doesn't disappear while typing)\n const totalTopLevelItems = this.getComputedNav().filter(item => item.parentId === null).length;\n // The scaffold's own chrome (progress bar, subbar, nav + main content).\n const body = html `\n <div class=${classMap({\n 'progress': true,\n 'progress--loading': this.pendingRequests > 0,\n })}>\n <div class=\"progress__track\"></div>\n <div class=\"progress__bar progress__bar--primary\">\n <span class=\"progress__bar-inner\"></span>\n </div>\n <div class=\"progress__bar progress__bar--secondary\">\n <span class=\"progress__bar-inner\"></span>\n </div>\n </div>\n \n ${this.subbar ? html `\n <kr-subbar\n menu\n .breadcrumbs=${this.breadcrumbs}\n @menu-click=${this.handleMenuClick}\n >\n <slot name=\"subbar\"></slot>\n </kr-subbar>\n ` : nothing}\n\n <div class=\"wrapper\">\n ${this.navEnabled ? html `\n <nav class=${classMap({\n 'nav': true,\n 'nav--scrolled': this.isNavScrolled,\n 'nav--opened': !this.subbar || this.isNavOpened,\n })}>\n <div class=\"nav-header\" @click=${this.handleNavHeaderClick}>\n ${this.label\n ? html `<span class=\"nav-title\">${this.label}</span>`\n : this.logo\n ? html `<img\n class=\"nav-logo\"\n src=${this.logo}\n alt=\"Logo\"\n />`\n : nothing}\n </div>\n <div class=\"nav-content\" @scroll=${this.handleNavScroll}>\n ${totalTopLevelItems > 20 ? html `\n <div class=\"nav-search\">\n <div class=\"nav-search__wrapper\">\n <span class=\"nav-search__icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\n </svg>\n </span>\n <input\n class=\"nav-search__input\"\n type=\"text\"\n placeholder=\"Search...\"\n .value=${this.navQuery}\n @input=${this.handleNavQueryChange}\n />\n ${this.navQuery ? html `\n <button class=\"nav-search__clear\" @click=${this.handleNavQueryClear}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n ` : nothing}\n </div>\n </div>\n ` : nothing}\n <div class=\"nav-items\">\n ${topLevelItems.map((item) => this.renderNavItem(item))}\n </div>\n </div>\n <!-- <div class=\"nav-footer\">\n ${this.isEditing ? this.renderEditFooter() : this.renderNormalFooter()}\n </div> -->\n </nav>\n ` : nothing}\n\n <main class=\"main\">\n <slot></slot>\n </main>\n </div>\n `;\n // In production the Operations shell wraps the app with the global app bar + footer and the\n // floating AI assistant. Locally the app runs standalone with none of that, so the scaffold\n // stands in with dev-only chrome. Mirror production exactly: the chatbot's built-in launcher\n // is hidden (hide-toggle) and it's opened from an \"AI Assistant\" button in the footer.\n if (this.isDev) {\n return html `\n <div class=\"dev-header\"></div>\n <div class=\"dev-body\">${body}</div>\n <div class=\"dev-footer\">\n <button class=\"dev-footer__chat\" @click=${this.handleDevChatClick}>\n <span class=\"dev-footer__chat-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M12 2l1.9 5.1L19 9l-5.1 1.9L12 16l-1.9-5.1L5 9l5.1-1.9L12 2zm6 10l.95 2.55L21.5 15.5l-2.55.95L18 19l-.95-2.55L14.5 15.5l2.55-.95L18 12z\"/>\n </svg>\n </span>\n AI Assistant\n </button>\n </div>\n `;\n }\n return body;\n }\n}\nKRScaffold.styles = css `\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n font-size: 14px;\n --kr-scaffold-nav-width: 250px;\n\n /* Default to light scheme */\n --kr-scaffold-nav-bg: #F3F7FC;\n --kr-scaffold-nav-text: #000000;\n --kr-scaffold-nav-text-active: #000000;\n --kr-scaffold-nav-hover: #f3f4f6;\n --kr-scaffold-nav-active-bg: #e5e7eb;\n --kr-scaffold-nav-border: rgb(229, 229, 228);\n --kr-scaffold-nav-divider: #e5e7eb;\n --kr-scaffold-nav-search-bg: #ffffff;\n --kr-scaffold-nav-search-border: #d1d5db;\n }\n\n /* Dark scheme */\n :host([scheme=\"dark\"]) {\n --kr-scaffold-nav-bg: #10172a;\n --kr-scaffold-nav-text: rgb(255 255 255 / 80%);\n --kr-scaffold-nav-text-active: #ffffff;\n --kr-scaffold-nav-hover: rgba(255, 255, 255, 0.05);\n --kr-scaffold-nav-active-bg: rgb(255 255 255 / 12%);\n --kr-scaffold-nav-border: transparent;\n --kr-scaffold-nav-divider: rgba(255, 255, 255, 0.06);\n --kr-scaffold-nav-search-bg: rgba(255, 255, 255, 0.15);\n --kr-scaffold-nav-search-border: rgba(255, 255, 255, 0.3);\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n /* Dev-only bars simulating the production Operations shell chrome (top app bar + footer),\n so an app running standalone on its Vite dev server looks like it does in production.\n In production the real shell wraps the app and these are not rendered. */\n .dev-header {\n height: 48px;\n background: #1a1a2e;\n flex-shrink: 0;\n }\n\n .dev-footer {\n background: #1a1a2e;\n flex-shrink: 0;\n padding: 6px 16px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n /* Matches the production shell's footer \"AI Assistant\" button (green accent on dark). */\n .dev-footer__chat {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 14px;\n color: #beea4e;\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 4px;\n font-family: inherit;\n padding: 4px 8px;\n transition: background 0.15s ease;\n }\n\n .dev-footer__chat:hover {\n background: rgba(255, 255, 255, 0.08);\n }\n\n .dev-footer__chat-icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Holds the scaffold's own chrome between the dev bars; grows to fill the space. */\n .dev-body {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n /* Nav */\n .nav {\n width: var(--kr-scaffold-nav-width);\n background: var(--kr-scaffold-nav-bg);\n color: var(--kr-scaffold-nav-text);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-right: 1px solid var(--kr-scaffold-nav-border);\n transition: margin-left 0.3s ease;\n margin-left: calc(-1 * var(--kr-scaffold-nav-width));\n flex: 1;\n max-width: var(--kr-scaffold-nav-width);\n }\n\n .nav--opened {\n margin-left: 0;\n }\n\n .wrapper {\n display: flex;\n flex: 1;\n min-height: 0;\n max-height: 100%;\n height: 100%;\n }\n\n .nav-header {\n padding: 20px;\n display: flex;\n align-items: center;\n position: relative;\n z-index: 1;\n transition: box-shadow 0.2s ease;\n cursor: pointer;\n }\n\n .nav--scrolled .nav-header {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n }\n\n .nav-logo {\n max-width: 100%;\n height: 32px;\n }\n\n .nav-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--kr-scaffold-nav-text-active);\n letter-spacing: .2px;\n }\n\n .nav-search {\n padding: 4px 0 8px;\n }\n\n .nav-search__wrapper {\n display: flex;\n align-items: center;\n background: var(--kr-scaffold-nav-search-bg);\n border-radius: 8px;\n padding: 0 12px;\n height: 40px;\n gap: 8px;\n border: 1px solid var(--kr-scaffold-nav-search-border);\n transition: all 0.15s ease;\n }\n\n .nav-search__icon {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n opacity: 0.6;\n }\n\n .nav-search__icon svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n }\n\n .nav-search__input {\n flex: 1;\n background: none;\n border: none;\n outline: none;\n color: var(--kr-scaffold-nav-text-active);\n font-size: 13px;\n font-family: inherit;\n min-width: 0;\n }\n\n .nav-search__input::placeholder {\n color: var(--kr-scaffold-nav-text);\n opacity: 0.7;\n }\n\n .nav-search__clear {\n width: 18px;\n height: 18px;\n padding: 0;\n background: none;\n border: none;\n color: var(--kr-scaffold-nav-text);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n transition: opacity 0.15s ease;\n }\n\n .nav-search__clear:hover {\n opacity: 1;\n }\n\n .nav-search__clear svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n }\n\n .nav-content {\n flex: 1;\n overflow-y: auto;\n padding: 0 9px 12px 8px;\n }\n\n .nav-footer {\n padding: 12px;\n border-top: 1px solid var(--kr-scaffold-nav-divider);\n }\n\n .user {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .user:hover {\n background: var(--kr-scaffold-nav-hover);\n }\n\n .user__avatar {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--kr-scaffold-avatar-bg, #beea4e);\n color: var(--kr-scaffold-avatar-text, #10172a);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 600;\n flex-shrink: 0;\n overflow: hidden;\n }\n\n .user__avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .user__info {\n flex: 1;\n min-width: 0;\n }\n\n .user__name {\n font-size: 13px;\n font-weight: 500;\n color: var(--kr-scaffold-nav-text-active);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .user__email {\n font-size: 12px;\n color: var(--kr-scaffold-nav-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .user-menu-container {\n position: relative;\n }\n\n .user-menu {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n margin-bottom: 8px;\n background: var(--kr-scaffold-nav-bg);\n border: 1px solid var(--kr-scaffold-nav-divider);\n border-radius: 8px;\n padding: 4px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);\n }\n\n .user-menu__item {\n display: block;\n width: 100%;\n padding: 10px 12px;\n background: none;\n border: none;\n color: var(--kr-scaffold-nav-text);\n font-size: 13px;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n }\n\n .user-menu__item:hover {\n background: var(--kr-scaffold-nav-hover);\n color: var(--kr-scaffold-nav-text-active);\n }\n\n .user-menu__divider {\n height: 1px;\n background: var(--kr-scaffold-nav-divider);\n margin: 4px 0;\n }\n\n /* Main */\n .main {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n background: transparent;\n display: flex;\n flex-direction: column;\n }\n\n .breadcrumbs {\n height: 32px;\n padding: 0 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n\n .breadcrumbs a {\n color: #6b7280;\n text-decoration: none;\n }\n\n .breadcrumbs a:hover {\n color: #111827;\n text-decoration: underline;\n }\n\n .breadcrumbs__separator {\n color: #d1d5db;\n }\n\n .breadcrumbs__current {\n color: #111827;\n font-weight: 500;\n }\n\n .main__content {\n flex: 1;\n overflow-y: auto;\n }\n\n /* Nav Items */\n .nav-items {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .nav-item {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 12px;\n height: 32px;\n border-radius: 8px;\n color: var(--kr-scaffold-nav-text);\n text-decoration: none;\n cursor: pointer;\n border: none;\n background: none;\n width: 100%;\n text-align: left;\n font-size: 13px;\n font-weight: 400;\n font-family: inherit;\n transition: all 0.15s ease;\n }\n\n .nav-item:hover {\n background: #F3F7FC;\n color: var(--kr-scaffold-nav-text-active);\n }\n\n .nav-item--active,\n .nav-item--active:hover {\n background: #e1e9f6;\n color: #1a2332;\n font-weight: 700;\n }\n\n .nav-item__icon {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .nav-item__icon svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n }\n\n .nav-item__label {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n letter-spacing: 0.14px;\n }\n\n .nav-item__chevron {\n width: 16px;\n height: 16px;\n transition: transform 0.2s ease;\n transform: rotate(-90deg);\n stroke: currentColor;\n }\n\n .nav-item--expanded .nav-item__chevron {\n transform: rotate(0deg);\n }\n\n .nav-group {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 0;\n }\n\n .nav-group--expanded {\n height: auto;\n }\n\n .nav-group .nav-item {\n padding: 0 12px 0 44px;\n height: 32px;\n font-size: 13px;\n font-weight: 400;\n margin-top: 2px;\n flex-shrink: 0;\n }\n\n .nav-group .nav-item--active,\n .nav-group .nav-item--active:hover {\n font-weight: 700;\n }\n\n .nav-group .nav-item:first-child {\n margin-top: 0;\n }\n\n /* Nav items in groups when icons are hidden */\n :host(:not([nav-icons-displayed])) .nav-group .nav-item {\n padding-left: 24px;\n }\n\n /* Sections */\n .nav-section {\n padding: 16px 12px 8px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.55px;\n color: var(--kr-scaffold-nav-text);\n opacity: 0.6;\n }\n\n .nav-section:first-child {\n padding-top: 0;\n }\n\n /* Edit mode actions */\n .edit-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .edit-actions__btn {\n display: block;\n width: 100%;\n padding: 10px 12px;\n background: var(--kr-scaffold-nav-hover);\n border: none;\n color: var(--kr-scaffold-nav-text);\n font-size: 13px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n }\n\n .edit-actions__btn:hover {\n background: var(--kr-scaffold-nav-active-bg);\n color: var(--kr-scaffold-nav-text-active);\n }\n\n .edit-actions__btn--primary {\n background: #beea4e;\n color: #10172a;\n }\n\n .edit-actions__btn--primary:hover {\n background: #d4f472;\n color: #10172a;\n }\n\n .edit-actions__secondary {\n display: flex;\n gap: 8px;\n }\n\n .edit-actions__secondary .edit-actions__btn {\n flex: 1;\n }\n\n /* Hidden/inactive items in edit mode */\n .nav-item--hidden {\n opacity: 0.4;\n font-style: italic;\n }\n\n .nav-item--hidden:hover {\n opacity: 0.6;\n }\n\n /* Dragging state */\n :host(.kr-scaffold--dragging),\n :host(.kr-scaffold--dragging) * {\n cursor: grabbing;\n user-select: none;\n }\n\n .nav-item-drag-preview {\n position: fixed;\n pointer-events: none;\n z-index: 1000;\n opacity: 0.9;\n background: var(--kr-scaffold-nav-bg);\n border: 1px solid var(--kr-scaffold-nav-divider);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);\n padding: 0 12px;\n height: 40px;\n min-width: 200px;\n display: flex;\n align-items: center;\n gap: 16px;\n color: var(--kr-scaffold-nav-text-active);\n font-size: 13px;\n font-weight: 500;\n }\n\n /* Drop indicator */\n .nav-item--drop-above,\n .nav-item--drop-below,\n .nav-item--drop-center {\n position: relative;\n }\n\n .nav-item--drop-above::before,\n .nav-item--drop-below::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: #beea4e;\n }\n\n .nav-item--drop-above::before {\n top: 0;\n }\n\n .nav-item--drop-below::after {\n bottom: 0;\n }\n\n .nav-item--drop-center {\n background: var(--kr-scaffold-nav-active-bg);\n }\n\n .breadcrumbs {\n height: 32px;\n padding: 0 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n //background: #f9fafb;\n background: #beea4e;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n\n .breadcrumbs a {\n //color: #6b7280;\n color: #10172a;\n font-size: 13px;\n font-weight: 600;\n text-decoration: none;\n }\n\n .breadcrumbs a:hover {\n color: #111827;\n text-decoration: underline;\n }\n\n .breadcrumbs__separator {\n color: #d1d5db;\n }\n\n .breadcrumbs__current {\n color: #111827;\n font-weight: 500;\n }\n\n /* Progress bar */\n .progress {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n overflow-x: hidden;\n z-index: 1000;\n display: none;\n }\n\n .progress--loading {\n display: block;\n }\n\n .progress__track {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 100%;\n background: rgba(190, 234, 78, 0.3);\n }\n\n .progress__bar {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 100%;\n transform-origin: left center;\n }\n\n .progress__bar-inner {\n display: inline-block;\n position: absolute;\n width: 100%;\n height: 100%;\n background: #beea4e;\n }\n\n .progress__bar--primary {\n left: -145.166611%;\n }\n\n .progress--loading .progress__bar--primary {\n animation: progress-primary-translate 2s infinite linear;\n }\n\n .progress--loading .progress__bar--primary .progress__bar-inner {\n animation: progress-primary-scale 2s infinite linear;\n }\n\n .progress__bar--secondary {\n left: -54.888891%;\n }\n\n .progress--loading .progress__bar--secondary {\n animation: progress-secondary-translate 2s infinite linear;\n }\n\n .progress--loading .progress__bar--secondary .progress__bar-inner {\n animation: progress-secondary-scale 2s infinite linear;\n }\n\n @keyframes progress-primary-translate {\n 0% {\n transform: translateX(0);\n }\n 20% {\n animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819);\n transform: translateX(0);\n }\n 59.15% {\n animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);\n transform: translateX(83.67142%);\n }\n 100% {\n transform: translateX(200.611057%);\n }\n }\n\n @keyframes progress-primary-scale {\n 0% {\n transform: scaleX(0.08);\n }\n 36.65% {\n animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1);\n transform: scaleX(0.08);\n }\n 69.15% {\n animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1);\n transform: scaleX(0.661479);\n }\n 100% {\n transform: scaleX(0.08);\n }\n }\n\n @keyframes progress-secondary-translate {\n 0% {\n animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685);\n transform: translateX(0);\n }\n 25% {\n animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);\n transform: translateX(37.651913%);\n }\n 48.35% {\n animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026);\n transform: translateX(84.386165%);\n }\n 100% {\n transform: translateX(160.277782%);\n }\n }\n\n @keyframes progress-secondary-scale {\n 0% {\n animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);\n transform: scaleX(0.08);\n }\n 19.15% {\n animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);\n transform: scaleX(0.457104);\n }\n 44.15% {\n animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);\n transform: scaleX(0.72796);\n }\n 100% {\n transform: scaleX(0.08);\n }\n }\n `;\n__decorate([\n property({ type: String })\n], KRScaffold.prototype, \"logo\", void 0);\n__decorate([\n property({ type: String })\n], KRScaffold.prototype, \"label\", void 0);\n__decorate([\n property({\n type: String,\n attribute: 'home-url'\n })\n], KRScaffold.prototype, \"homeUrl\", void 0);\n__decorate([\n property({\n type: String,\n reflect: true\n })\n], KRScaffold.prototype, \"scheme\", void 0);\n__decorate([\n property({ type: Array })\n], KRScaffold.prototype, \"nav\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'nav-icons-displayed',\n reflect: true\n })\n], KRScaffold.prototype, \"navIconsDisplayed\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'nav-expanded'\n })\n], KRScaffold.prototype, \"navExpanded\", void 0);\n__decorate([\n property({ type: Object })\n], KRScaffold.prototype, \"user\", void 0);\n__decorate([\n property({ type: Boolean })\n], KRScaffold.prototype, \"subbar\", void 0);\n__decorate([\n property({\n type: Boolean,\n attribute: 'nav-enabled'\n })\n], KRScaffold.prototype, \"navEnabled\", void 0);\n__decorate([\n property({\n type: String,\n attribute: 'user-type'\n })\n], KRScaffold.prototype, \"userType\", void 0);\n__decorate([\n property({ type: Array })\n], KRScaffold.prototype, \"breadcrumbs\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isDev\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navItemsExpanded\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navQuery\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"activeNavItemId\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isNavScrolled\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isNavOpened\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isEditing\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"isUserMenuOpen\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"pref\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"draggedNavItemId\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navItemDropTargetId\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"navItemDropPosition\", void 0);\n__decorate([\n state()\n], KRScaffold.prototype, \"pendingRequests\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-scaffold')) {\n customElements.define('kr-scaffold', KRScaffold);\n}\n//# sourceMappingURL=scaffold.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n/**\n * Secondary navigation component for screens within the scaffold.\n * Provides a simple nav drawer for sub-navigation within a page/screen.\n * Typically used when viewing details of a specific entity (e.g., Company, Contact).\n *\n * ## Usage\n * ```html\n * <kr-screen-nav\n * label=\"Acme Corporation\"\n * subLabel=\"Company\"\n * .items=${[\n * { id: 'overview', label: 'Overview', url: '/companies/123/overview' },\n * { id: 'contacts', label: 'Contacts', url: '/companies/123/contacts' },\n * { id: 'activity', label: 'Activity', url: '/companies/123/activity' },\n * ]}\n * activeId=\"overview\"\n * .actions=${[\n * { id: 'edit', label: 'Edit', variant: 'flat' },\n * { id: 'preview', label: 'Preview', href: '/s/companies/123', target: '_blank' },\n * { id: 'archive', label: 'Archive' },\n * { id: 'delete', label: 'Delete' },\n * { id: 'export', label: 'Export' },\n * ]}\n * >\n * <div>Screen content here</div>\n * </kr-screen-nav>\n * ```\n *\n * Actions render in a footer at the bottom of the nav column. With more than\n * `maxVisibleActions` (default 5), the overflow collapses into a \"More\" dropdown.\n * Listen for `action-click` to handle a click: `e.detail.action` is the action id. An action with\n * an `href` renders as a link and navigates on its own; it does not fire `action-click`.\n *\n * @slot - The main screen content\n *\n * @property {string} label - Main label (e.g., entity name like \"Acme Corporation\")\n * @property {string} subLabel - Sub label (e.g., entity type like \"Company\")\n * @property {KRScreenNavItem[]} items - Navigation items as JSON array\n * @property {string} activeId - Currently active item ID\n * @property {KRScreenNavAction[]} actions - Action buttons rendered in the nav footer\n * @property {number} maxVisibleActions - Max inline actions before collapsing into a \"More\" dropdown (default 5)\n *\n * @fires action-click - When an action button (inline or overflow) without an `href` is clicked; detail is `{ action: id }`\n */\nexport class KRScreenNav extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Main label (e.g., entity name like \"Acme Corporation\")\n */\n this.label = '';\n /**\n * Sub label (e.g., entity type like \"Company\")\n */\n this.subLabel = '';\n /**\n * Navigation items\n */\n this.items = [];\n /**\n * Currently active item ID. Auto-detected from the URL by default.\n * Can be set explicitly by the parent to override.\n */\n this.activeId = '';\n /**\n * Action buttons rendered in the nav footer.\n */\n this.actions = [];\n /**\n * Max number of inline action buttons before the overflow collapses into a\n * \"More\" dropdown. When actions exceed this count, the last visible slot is\n * used for the \"More\" button so the total footer button count never exceeds\n * this value.\n */\n this.maxVisibleActions = 5;\n this.handlePopstate = () => {\n this.syncActiveFromUrl();\n };\n }\n connectedCallback() {\n super.connectedCallback();\n // Defer so property bindings (.items) have been applied\n requestAnimationFrame(() => this.syncActiveFromUrl());\n window.addEventListener('popstate', this.handlePopstate);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('popstate', this.handlePopstate);\n }\n /**\n * Handles click events on navigation items.\n *\n * Dispatches a cancelable `nav-item-click` custom event.\n * If a listener calls `preventDefault()` on the custom event, native browser\n * navigation is prevented. Otherwise, the default `<a href>` navigation\n * proceeds normally.\n *\n * The `@krubble/angular` package provides `KRScreenNavDirective` which\n * automatically listens for this event and handles navigation using\n * Angular's router.\n *\n * @param e - The original click event\n * @param item - The nav item that was clicked\n */\n handleNavItemClick(e, item) {\n const navEvent = new CustomEvent('nav-item-click', {\n detail: { item },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(navEvent);\n // If a listener called preventDefault(), prevent the native navigation\n if (navEvent.defaultPrevented) {\n e.preventDefault();\n }\n this.activeId = item.id;\n }\n syncActiveFromUrl() {\n const pathname = window.location.pathname;\n const match = this.items.find((item) => {\n if (!item.url) {\n return false;\n }\n // Absolute URL — exact match\n if (item.url.startsWith('/')) {\n return pathname === item.url;\n }\n // Relative URL — match against the end of the pathname\n return pathname.endsWith('/' + item.url);\n });\n if (match) {\n this.activeId = match.id;\n }\n }\n handleActionClick(e, action) {\n // A link action navigates on its own through the kr-button's anchor; it doesn't fire action-click.\n if (action.href) {\n return;\n }\n this.dispatchEvent(new CustomEvent('action-click', {\n detail: { action: action.id },\n bubbles: true,\n composed: true,\n }));\n }\n // Fired by the \"More\" kr-button when an overflow option is chosen; detail is { id, label }.\n handleMoreSelect(e) {\n this.dispatchEvent(new CustomEvent('action-click', {\n detail: { action: e.detail.id },\n bubbles: true,\n composed: true,\n }));\n }\n render() {\n const hasOverflow = this.actions.length > this.maxVisibleActions;\n // When collapsing, the last visible slot is the \"More\" button, so only\n // show the first (maxVisibleActions - 1) actions inline.\n let inlineActions = this.actions;\n let overflowOptions = [];\n if (hasOverflow) {\n inlineActions = this.actions.slice(0, this.maxVisibleActions - 1);\n // Everything past the inline slots goes into the \"More\" dropdown.\n overflowOptions = this.actions.slice(this.maxVisibleActions - 1).map((action) => ({\n id: action.id,\n label: action.label,\n href: action.href,\n hrefTarget: action.target,\n }));\n }\n return html `\n <nav class=\"nav\">\n ${this.label ? html `\n <div class=\"nav-header\">\n <div class=\"nav-header__text\">\n ${this.subLabel ? html `<div class=\"nav-header__subtitle\">${this.subLabel}</div>` : nothing}\n <div class=\"nav-header__title\">${this.label}</div>\n </div>\n </div>\n ` : nothing}\n <div class=\"nav-content\">\n <div class=\"nav-items\">\n ${this.items.map((item) => html `\n <a\n class=${classMap({\n 'nav-item': true,\n 'nav-item--active': item.id === this.activeId\n })}\n href=${item.url || '#'}\n @click=${(e) => this.handleNavItemClick(e, item)}\n >\n ${item.label}\n </a>\n `)}\n </div>\n </div>\n ${this.actions.length ? html `\n <div class=\"nav-actions\">\n ${inlineActions.map((action) => html `\n <kr-button\n class=\"nav-actions__button\"\n variant=${action.variant || 'outline'}\n size=\"small\"\n href=${action.href || nothing}\n target=${action.target || nothing}\n @click=${(e) => this.handleActionClick(e, action)}\n >\n ${action.label}\n </kr-button>\n `)}\n ${hasOverflow ? html `\n <kr-button\n class=\"nav-actions__button\"\n variant=\"outline\"\n size=\"small\"\n .options=${overflowOptions}\n @option-select=${this.handleMoreSelect}\n >\n More\n </kr-button>\n ` : nothing}\n </div>\n ` : nothing}\n </nav>\n <main class=\"content\">\n <div class=\"content__main\">\n <slot></slot>\n </div>\n </main>\n `;\n }\n}\nKRScreenNav.styles = css `\n :host {\n display: flex;\n height: 100%;\n }\n\n .nav {\n width: 200px;\n background: #f3f7fcbf;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n }\n\n .nav-header {\n padding: 20px 16px 16px;\n }\n\n .nav-header__text {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .nav-header__title {\n font-size: 20px;\n font-weight: 600;\n color: #111827;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.3;\n }\n\n .nav-header__subtitle {\n font-size: 12px;\n font-weight: 400;\n color: rgb(0 0 0 / 70%);\n line-height: 1;\n }\n\n .nav-content {\n flex: 1;\n overflow-y: auto;\n padding: 0 0 12px;\n }\n\n .nav-items {\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n }\n\n .nav-item {\n display: block;\n padding: 0 12px;\n height: 32px;\n line-height: 32px;\n letter-spacing: 0.13px;\n color: rgb(32, 33, 36);\n text-decoration: none;\n font-size: 13px;\n font-weight: 400;\n font-family: inherit;\n border-radius: 8px;\n transition: all 0.15s ease;\n }\n\n .nav-item:hover {\n background: rgba(0, 0, 0, 0.04);\n color: #163052;\n }\n\n .nav-item--active {\n background: #e1e9f6;\n color: #1a2332;\n font-weight: 700;\n }\n\n .nav-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid rgba(0, 0, 0, 0.08);\n flex-shrink: 0;\n }\n\n .nav-actions__button {\n width: 100%;\n }\n\n .content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .content__main {\n flex: 1;\n overflow-y: auto;\n }\n `;\n__decorate([\n property({ type: String })\n], KRScreenNav.prototype, \"label\", void 0);\n__decorate([\n property({ type: String })\n], KRScreenNav.prototype, \"subLabel\", void 0);\n__decorate([\n property({ type: Array })\n], KRScreenNav.prototype, \"items\", void 0);\n__decorate([\n property({ type: String })\n], KRScreenNav.prototype, \"activeId\", void 0);\n__decorate([\n property({ type: Array })\n], KRScreenNav.prototype, \"actions\", void 0);\n__decorate([\n property({ type: Number })\n], KRScreenNav.prototype, \"maxVisibleActions\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-screen-nav')) {\n customElements.define('kr-screen-nav', KRScreenNav);\n}\n//# sourceMappingURL=screen-nav.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css } from 'lit';\nimport { property } from 'lit/decorators.js';\n/**\n * Detail screen component for viewing/editing entity details.\n * Displays a form-like layout with labeled fields centered in a single column.\n *\n * ## Usage\n * ```html\n * <kr-screen-detail title=\"Company Details\">\n * <kr-button slot=\"actions\">Save</kr-button>\n * <kr-text-field label=\"Company Name\" value=\"Acme Corporation\"></kr-text-field>\n * <kr-text-field label=\"Industry\" value=\"Technology\"></kr-text-field>\n * <kr-text-field label=\"Website\" value=\"https://acme.com\"></kr-text-field>\n * </kr-screen-detail>\n * ```\n *\n * @slot - Form fields and content (centered, max-width 480px)\n * @slot actions - Action buttons displayed in the header on the right\n *\n * @property {string} title - Section title (e.g., \"Company Details\")\n */\nexport class KRScreenDetail extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Section title\n */\n this.title = '';\n }\n render() {\n return html `\n <div class=\"header\">\n <h2 class=\"header__title\">${this.title}</h2>\n <div class=\"header__actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div class=\"content\">\n <div class=\"content__inner\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\nKRScreenDetail.styles = css `\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n }\n\n .header {\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 24px;\n background: #ffffff;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n }\n\n .header__title {\n font-size: 18px;\n font-weight: 600;\n color: #111827;\n margin: 0;\n }\n\n .header__actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n display: flex;\n justify-content: center;\n }\n\n .content__inner {\n width: 100%;\n max-width: 700px;\n }\n `;\n__decorate([\n property({ type: String })\n], KRScreenDetail.prototype, \"title\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-screen-detail')) {\n customElements.define('kr-screen-detail', KRScreenDetail);\n}\n//# sourceMappingURL=screen-detail.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n/**\n * Secondary bar component that sits below the main app bar.\n *\n * @slot - Content to display in the subbar (right side)\n */\nexport class KRSubbar extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Array of breadcrumb items to display\n */\n this.breadcrumbs = [];\n /**\n * Whether to show the menu icon\n */\n this.menu = false;\n }\n _handleMenuClick() {\n this.dispatchEvent(new CustomEvent('menu-click', {\n bubbles: true,\n composed: true\n }));\n }\n /**\n * Handles click on a breadcrumb link.\n * Dispatches a cancelable event so SPA routers can intercept.\n */\n _handleBreadcrumbClick(e, crumb, isCurrent) {\n // Don't navigate if it's the current/last breadcrumb\n if (isCurrent || !crumb.url) {\n e.preventDefault();\n return;\n }\n // Allow Ctrl/Cmd+click and middle-click to open in new tab without SPA navigation\n if (e.ctrlKey || e.metaKey || e.button === 1) {\n return;\n }\n const breadcrumbEvent = new CustomEvent('breadcrumb-click', {\n detail: { breadcrumb: crumb },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(breadcrumbEvent);\n // If a listener called preventDefault(), prevent the native navigation\n if (breadcrumbEvent.defaultPrevented) {\n e.preventDefault();\n }\n }\n render() {\n return html `\n ${this.menu ? html `\n <div class=\"menu\" @click=${this._handleMenuClick}>\n <svg\n class=\"menu__icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <line\n x1=\"3\"\n y1=\"6\"\n x2=\"21\"\n y2=\"6\"\n ></line>\n <line\n x1=\"3\"\n y1=\"12\"\n x2=\"21\"\n y2=\"12\"\n ></line>\n <line\n x1=\"3\"\n y1=\"18\"\n x2=\"21\"\n y2=\"18\"\n ></line>\n </svg>\n </div>\n ` : nothing}\n <div class=\"breadcrumbs\">\n ${this.breadcrumbs.map((crumb, index) => {\n const isCurrent = index === this.breadcrumbs.length - 1;\n // The href gets the base href prepended so Cmd/Ctrl+click opens the right\n // URL in a new tab. crumb.url itself is left intact (base-relative) and\n // passed to Angular via breadcrumb-click — its Router applies the base\n // itself. e.g. base \"/operations/\" + crumb.url \"/settings\" ->\n // \"/operations/settings\".\n const baseHref = document.querySelector('base')?.getAttribute('href') || '/';\n let href = '#';\n if (crumb.url) {\n let path = crumb.url;\n if (crumb.url.startsWith('/')) {\n path = crumb.url.slice(1);\n }\n href = baseHref + path;\n if (!baseHref.endsWith('/')) {\n href = baseHref + '/' + path;\n }\n }\n return html `\n ${index > 0 ? html `<span class=\"breadcrumb-separator\">/</span>` : ''}\n <a\n class=${classMap({\n 'breadcrumb': true,\n 'breadcrumb--current': isCurrent\n })}\n href=${href}\n @click=${(e) => this._handleBreadcrumbClick(e, crumb, isCurrent)}\n >${crumb.label}</a>\n `;\n })}\n </div>\n <div class=\"content\">\n <slot></slot>\n </div>\n\n `;\n }\n}\nKRSubbar.styles = css `\n :host {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n height: 40px;\n background: #E2E9F6;\n border-bottom: 1px solid rgb(229, 229, 228);\n align-items: center;\n padding: 0 16px;\n width: 100%;\n flex-shrink: 0;\n }\n\n .breadcrumbs {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n flex: 1;\n }\n\n .breadcrumb {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n font-size: 13px;\n }\n\n .breadcrumb:hover {\n text-decoration: underline;\n }\n\n .breadcrumb--current {\n cursor: default;\n }\n\n .breadcrumb--current:hover {\n text-decoration: none;\n }\n\n .breadcrumb-separator {\n color: #9ca3af;\n font-size: 12px;\n }\n\n .content {\n display: flex;\n align-items: center;\n margin-left: auto;\n }\n\n .menu {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n margin-right: 8px;\n cursor: pointer;\n }\n\n .menu__icon {\n width: 18px;\n height: 18px;\n }\n `;\n__decorate([\n property({ type: Array })\n], KRSubbar.prototype, \"breadcrumbs\", void 0);\n__decorate([\n property({ type: Boolean })\n], KRSubbar.prototype, \"menu\", void 0);\n// Guarded registration: no-op if the tag is already defined, so a second copy of krubble on\n// the page (e.g. the Operations shell loads krubble globally while an embedded app bundled its\n// own copy) doesn't throw. First definition wins.\nif (!customElements.get('kr-subbar')) {\n customElements.define('kr-subbar', KRSubbar);\n}\n//# sourceMappingURL=subbar.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { LitElement, css, html } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nexport class KRRouter {\n /**\n * The current route's resolved data: everything every matched level's static resolve() returned,\n * merged with deeper levels winning on a shared key.\n *\n * Read it in connectedCallback — the router fills it before any element mounts. A child route gets\n * what its parent resolved from here, so a tab component needs no resolve() of its own. Use\n * KRRouter.getParams() for the route's params.\n */\n static getData() {\n return KRRouter.data;\n }\n static configure(config) {\n KRRouter.base = config.base;\n KRRouter.routes = config.routes;\n // Intercept <a> clicks for client-side navigation\n window.addEventListener('click', (e) => {\n const anchor = e.composedPath().find(el => el instanceof HTMLAnchorElement);\n if (!anchor) {\n return;\n }\n if (anchor.origin !== window.location.origin) {\n return;\n }\n if (!anchor.pathname.startsWith(KRRouter.base)) {\n return;\n }\n if (anchor.target === '_blank') {\n return;\n }\n // Cmd/Ctrl-click (new tab), Shift-click (new window) and Alt-click (download) are browser\n // affordances — leave them to the browser rather than hijacking them into an in-app navigation.\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {\n return;\n }\n e.preventDefault();\n KRRouter.navigate(anchor.pathname);\n });\n // Process each navigation. popstate covers every source — a link click, a KRRouter.navigate()\n // call (which dispatches one itself), and the browser's back/forward buttons.\n window.addEventListener('popstate', () => {\n KRRouter.handleNavigation();\n });\n // The initial page load fires no popstate, so process the URL the app booted on. Deferred to a\n // microtask rather than run synchronously: configure() is called while app.js is being evaluated\n // as an import, which happens BEFORE the importing module's body. Navigating synchronously here\n // would fire the first resolve() fetches before main.ts had run KRHttp.configure(), so they'd go\n // to the dev server's own origin (localhost:4201/api/...) instead of devUrl and 404.\n Promise.resolve().then(() => {\n KRRouter.handleNavigation();\n });\n }\n static handleNavigation() {\n const matched = KRRouter.matchRoutes();\n // Nothing matched (a stale or mistyped link). An unrecognized URL\n // shouldn't destroy the state of the screen the user is on.\n if (!matched.routes.length) {\n return;\n }\n // A route with children but no child segment in the URL resolves to its `default` child, so the\n // resolved url is longer than what's in the address bar (/pages/42 resolves pages/42/details).\n // Rewrite it so the URL reflects what's actually on screen.\n let resolvedPath = KRRouter.base;\n if (matched.url) {\n resolvedPath = KRRouter.base + '/' + matched.url;\n }\n if (window.location.pathname !== resolvedPath) {\n window.history.replaceState({}, '', resolvedPath);\n }\n // Drop cached entries for routes DEEPER than the URL we're navigating to — if the user navigates\n // up a level we assume they're moving on to a different task. This is what keeps the cache from\n // growing without bound.\n for (const key of KRRouter.routeCache.keys()) {\n if (matched.url.split('/').filter(s => s).length < key.split('/').filter(s => s).length) {\n KRRouter.routeCache.delete(key);\n }\n }\n const token = ++KRRouter.navToken;\n // Resolve every route's matching component (screen), keeping each level's resolved data alongside\n // its element so the whole chain can be merged once they've all settled.\n Promise.all(matched.routes.map(match => {\n // Reuse the cached element for this url if we have one. Its data is cached with it — resolve()\n // doesn't run again unless the route asks for it with runResolvers: 'always' — but the level still\n // has to contribute to the merge below.\n const cached = KRRouter.routeCache.get(match.url);\n if (cached) {\n const cachedConstructor = customElements.get(match.route.component);\n if (match.route.runResolvers === 'always' && cachedConstructor && typeof cachedConstructor.resolve === 'function') {\n return Promise.resolve(cachedConstructor.resolve(KRRouter.getParams())).then(data => {\n cached.data = data;\n return {\n el: cached.el,\n data,\n };\n });\n }\n return Promise.resolve({\n el: cached.el,\n data: cached.data,\n });\n }\n // Create and cache the screen element\n const el = document.createElement(match.route.component);\n const entry = {\n el,\n scrolls: [],\n data: null,\n };\n KRRouter.routeCache.set(match.url, entry);\n // If the component class defines a static resolve(params), await it. Every level's result is\n // merged into KRRouter.data below before anything mounts, so a component paints with its data\n // already in hand instead of flashing empty.\n const constructor = customElements.get(match.route.component);\n if (constructor && typeof constructor.resolve === 'function') {\n return Promise.resolve(constructor.resolve(KRRouter.getParams())).then(data => {\n entry.data = data;\n return {\n el,\n data,\n };\n });\n }\n return Promise.resolve({\n el,\n data: null,\n });\n }))\n .then(resolved => {\n // A newer navigation started while we were resolving — its elements are the current truth.\n if (token !== KRRouter.navToken) {\n return;\n }\n // Merge the whole chain's resolved data into one object, parents first so a deeper route can\n // override a key it shares with an ancestor. Set BEFORE any element mounts, so every component\n // — at any depth — reads it with KRRouter.getData() in connectedCallback: a tab component gets\n // what its parent resolved with no resolve() of its own and no second request. Mirrors\n // KNNavigator.data() in kodaris-ngx, which searches the Angular route tree by key.\n KRRouter.data = {};\n for (const item of resolved) {\n if (item.data) {\n Object.assign(KRRouter.data, item.data);\n }\n }\n const elements = resolved.map(item => item.el);\n // ---- PASS 1: deactivate, deepest level first ----\n // Remove screen elements that no longer apply to the new current routes for the current url\n const levels = Array.from(KRRouter.outletContexts.keys()).sort((a, b) => b - a);\n for (const level of levels) {\n const context = KRRouter.outletContexts.get(level);\n if (!context?.outlet?.el || context.outlet.el === elements[level]) {\n continue;\n }\n // Capture the outgoing element's scroll positions into its cache entry, then unmount it.\n const outgoing = KRRouter.routeCache.get(context.url);\n if (outgoing) {\n outgoing.scrolls = KRRouter.getScrollableElements(context.outlet.el).map(scrollable => scrollable.scrollTop);\n }\n context.outlet.deactivate();\n context.element = null;\n context.url = '';\n }\n // Put each screen element into the appropriate router outlet\n elements.forEach((el, level) => {\n // First navigation to reach this depth has no context yet.\n let context = KRRouter.outletContexts.get(level);\n if (!context) {\n context = {\n outlet: null,\n element: null,\n url: '',\n };\n KRRouter.outletContexts.set(level, context);\n }\n context.element = el;\n context.url = matched.routes[level].url;\n if (context.outlet && context.outlet.el !== el) {\n context.outlet.activate(el);\n // Put back the scroll positions captured when the user last left this element.\n const cached = KRRouter.routeCache.get(context.url);\n if (cached?.scrolls.length) {\n setTimeout(() => {\n const scrollables = KRRouter.getScrollableElements(cached.el);\n cached.scrolls.forEach((top, index) => {\n if (scrollables[index]) {\n scrollables[index].scrollTop = top;\n }\n });\n }, 0);\n }\n }\n });\n });\n }\n // An outlet announces itself here when it connects and takes whatever element its context holds.\n static registerOutlet(level, outlet) {\n // No context yet when an outlet connects before a navigation\n let context = KRRouter.outletContexts.get(level);\n if (!context) {\n context = {\n outlet: null,\n element: null,\n url: '',\n };\n KRRouter.outletContexts.set(level, context);\n }\n context.outlet = outlet;\n // An outlet re-attached with its element already mounted (a cached parent coming back) must not\n // restore scroll again — that would overwrite the live position with a stale one.\n if (context.element && outlet.el !== context.element) {\n outlet.activate(context.element);\n // Same scroll restore as the activation pass in handleNavigation — this is the path taken when\n // the outlet didn't exist yet at navigation time, which for us is the common case.\n const cached = KRRouter.routeCache.get(context.url);\n if (cached?.scrolls.length) {\n setTimeout(() => {\n const scrollables = KRRouter.getScrollableElements(cached.el);\n cached.scrolls.forEach((top, index) => {\n if (scrollables[index]) {\n scrollables[index].scrollTop = top;\n }\n });\n }, 0);\n }\n }\n }\n static unregisterOutlet(level, outlet) {\n const context = KRRouter.outletContexts.get(level);\n if (context && context.outlet === outlet) {\n context.outlet = null;\n }\n }\n static navigate(path) {\n let fullPath = path;\n if (!path.startsWith('/')) {\n fullPath = KRRouter.base + '/' + path;\n }\n window.history.pushState({}, '', fullPath);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n static getParams() {\n const matched = KRRouter.matchRoutes();\n const params = {};\n for (const match of matched.routes) {\n for (const key in match.params) {\n params[key] = decodeURIComponent(match.params[key]);\n }\n }\n return params;\n }\n // Every scrollable element in and under `root`, in document order — piercing shadow roots.\n static getScrollableElements(root) {\n const scrollables = [];\n // Depth-first pre-order, each node's shadow root before its light children. An explicit stack\n // rather than recursion; pushing children in reverse makes them pop in document order, which keeps\n // the sequence identical to the recursive walk this replaces. The ORDER is load-bearing: capture\n // and restore index into the returned list positionally, so both passes must enumerate the same\n // nodes in the same sequence.\n const stack = [root];\n while (stack.length) {\n const node = stack.pop();\n if (!node) {\n break;\n }\n const style = getComputedStyle(node);\n if (style.overflow === 'auto'\n || style.overflow === 'scroll'\n || style.overflowY === 'auto'\n || style.overflowY === 'scroll') {\n scrollables.push(node);\n }\n // Shadow children first so they occupy the same positions the recursion gave them.\n const children = [];\n if (node.shadowRoot) {\n children.push(...Array.from(node.shadowRoot.children));\n }\n children.push(...Array.from(node.children));\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index]);\n }\n }\n return scrollables;\n }\n // Match the CURRENT browser URL against the route defs.\n //\n // Example, with base '/operations/app/ai-cms' and the routes configured in app.ts:\n //\n // URL /operations/app/ai-cms/pages/42/seo\n // segments ['pages', '42', 'seo'] (base stripped, split on '/')\n // returns {\n // routes: [\n // { route: { path: 'pages/:contentPageID', component: 'kt-page' }, params: { contentPageID: '42' }, url: 'pages/42' },\n // { route: { path: 'seo', component: 'kt-page-seo' }, params: {}, url: 'pages/42/seo' },\n // ],\n // url: 'pages/42/seo',\n // }\n //\n // Three other shapes worth knowing:\n //\n // .../pages/42 a route with children but no child segment resolves its `default` child, so this\n // returns BOTH levels and a url of 'pages/42/details' — longer than the address\n // bar. handleNavigation() is what syncs the URL to it; this function is pure and\n // never touches history.\n // .../ (no segments) matches the path:'' route, returning a single entry for kt-home.\n // .../nope no route matches, returning no routes and an empty url.\n static matchRoutes(routes = KRRouter.routes, segments) {\n // An empty array is a legitimate \"nothing left to match\" from a recursive call and stays as-is —\n // only a genuinely absent argument (the entry call) reaches for the browser URL.\n if (!segments) {\n let relative = window.location.pathname;\n if (relative.startsWith(KRRouter.base)) {\n relative = relative.slice(KRRouter.base.length);\n }\n segments = relative.split('/').filter(s => s);\n }\n for (const route of routes) {\n const routeSegments = route.path.split('/').filter(s => s);\n // index route {path: '', component: kt-home}\n if (routeSegments.length === 0 && segments.length === 0) {\n return {\n routes: [{\n route,\n params: {},\n url: ''\n }],\n url: ''\n };\n }\n if (routeSegments.length === 0) {\n continue;\n }\n if (segments.length < routeSegments.length) {\n continue;\n }\n const params = {};\n let matched = true;\n for (let i = 0; i < routeSegments.length; i++) {\n if (routeSegments[i].startsWith(':')) {\n params[routeSegments[i].slice(1)] = segments[i];\n }\n else if (routeSegments[i] !== segments[i]) {\n matched = false;\n break;\n }\n }\n if (!matched) {\n continue;\n }\n const remaining = segments.slice(routeSegments.length);\n // This level's own resolved URL: the segments it consumed, with :params swapped for their real\n // values. Children come back from the recursion holding only THEIR portion, so we prefix each\n // with this as the recursion unwinds — every entry ends up with the full path from the root.\n const url = segments.slice(0, routeSegments.length).join('/');\n const matchedRoutes = [{\n route,\n params,\n url\n }];\n if (remaining.length > 0) {\n // Segments left over and nowhere to put them — this route doesn't fully match the URL, so try\n // the next one. Without this, a route would be accepted having consumed only part of the URL:\n // /pages/42/seo would match {path: 'pages'} and render the Pages list. It also narrows\n // route.children for the call below, which matters because matchRoutes' first parameter has a\n // DEFAULT — passing undefined would silently re-match from the top-level routes rather than\n // failing.\n if (!route.children) {\n continue;\n }\n const childMatch = KRRouter.matchRoutes(route.children, remaining);\n if (childMatch.routes.length > 0) {\n for (const child of childMatch.routes) {\n child.url = url + '/' + child.url;\n }\n matchedRoutes.push(...childMatch.routes);\n return {\n routes: matchedRoutes,\n url: url + '/' + childMatch.url\n };\n }\n }\n // No remaining segments + a default child — resolve as though that child's segment were in the\n // URL. We do NOT rewrite the address bar here; matching stays pure. handleNavigation() syncs the\n // URL to the resolved `url` this returns.\n if (route.children && remaining.length === 0 && route.default) {\n const childMatch = KRRouter.matchRoutes(route.children, [route.default]);\n if (childMatch.routes.length > 0) {\n for (const child of childMatch.routes) {\n child.url = url + '/' + child.url;\n }\n matchedRoutes.push(...childMatch.routes);\n return {\n routes: matchedRoutes,\n url: url + '/' + childMatch.url\n };\n }\n }\n return {\n routes: matchedRoutes,\n url\n };\n }\n return {\n routes: [],\n url: ''\n };\n }\n}\nKRRouter.base = '';\nKRRouter.routes = [];\nKRRouter.routeCache = new Map();\n// One context per nesting level — Angular's ChildrenOutletContexts, keyed by level rather than by\n// outlet name since we only have one (primary) outlet per level. Outlets are DRIVEN through these;\n// they never ask the router for anything.\nKRRouter.outletContexts = new Map();\n// One token per navigation. A slower navigation that has been superseded must not activate its\n// (stale) elements, so it checks the token before committing anything.\nKRRouter.navToken = 0;\n// Every matched route level's resolved data, merged into one object for the current navigation. This\n// is set before anything mounts — see the merge in handleNavigation.\nKRRouter.data = {};\nlet KRRouterOutlet = class KRRouterOutlet extends LitElement {\n constructor() {\n super(...arguments);\n this.level = -1;\n // The element the router has told this outlet to show.\n this.el = null;\n }\n connectedCallback() {\n super.connectedCallback();\n // This outlet's nesting depth = how many kr-router-outlet ancestors it has, which is only\n // knowable once attached. Walk up through shadow boundaries too (via ShadowRoot.host), since a\n // nested outlet lives inside its parent element's shadow root and parentNode stops at the root.\n let level = 0;\n let node = this;\n while (node) {\n if (node instanceof ShadowRoot) {\n node = node.host;\n continue;\n }\n if (node instanceof HTMLElement && node.tagName === 'KR-ROUTER-OUTLET' && node !== this) {\n level++;\n }\n if (node instanceof HTMLElement) {\n node = node.parentNode;\n }\n else {\n node = null;\n }\n }\n this.level = level;\n KRRouter.registerOutlet(this.level, this);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n KRRouter.unregisterOutlet(this.level, this);\n }\n activate(el) {\n this.el = el;\n }\n deactivate() {\n this.el = null;\n }\n render() {\n if (!this.el) {\n return html ``;\n }\n return html `${this.el}`;\n }\n};\nKRRouterOutlet.styles = css `\n :host {\n display: block;\n height: 100%;\n }\n `;\n__decorate([\n state()\n], KRRouterOutlet.prototype, \"el\", void 0);\nKRRouterOutlet = __decorate([\n customElement('kr-router-outlet')\n], KRRouterOutlet);\nexport { KRRouterOutlet };\n//# sourceMappingURL=router.js.map"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","b","y","v","m","M","__decorate","this","LitElement","html","css","state","classMap","nothing","styleMap","unsafeHTML","repeat","property","query","customElement"],"mappings":"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A;AACA,YAAY,EAAE,IAAI,CAAC,OAAO,KAAK,UAAU,GAAGA,CAAI,CAAC;AACjD;AACA;AACA,uBAAuB,EAAE,IAAI,CAAC,sBAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,GAAGI,CAAO;AACvB;AACA;AACA,qBAAqB,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,EAAE,cAAc,GAAGJ,CAAI,CAAC;AACpC;AACA;AACA,uBAAuB,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,GAAGI,CAAO;AACvB,YAAY,EAAE,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAGA,CAAO,GAAGJ,CAAI,CAAC;AACzD;AACA;AACA,uBAAuB,EAAE,IAAI,CAAC,aAAa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC;AACb;AACA;;AAEA;AACA;AACA,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;AAC9C,iBAAiB,EAAE,IAAI,CAAC,oBAAoB;AAC5C,qBAAqB,EAAE,IAAI,CAAC,wBAAwB;AACpD,uBAAuB,EAAE,IAAI,CAAC,0BAA0B;AACxD;AACA;AACA,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAGA,CAAI,CAAC;AAC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B,YAAY,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;AACrI,SAAS,CAAC;AACV,uBAAuB,EAAE,IAAI,CAAC,aAAa;AAC3C,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,0CAA0C,GAAG,cAAc;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC;AACb;AACA;AACA,cAAc,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAGC,CAAO;AAC7E,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;AACpC;AACA,cAAc,CAAC;AACf,IAAI;AACJ;AACA,SAAS,CAAC,MAAM,GAAGH,GAAG,CAAC;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,EAAE,CAAC;AACHJ,YAAU,CAAC;AACX,IAAIW,GAAQ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GI,CAAO;AAC/B;AACA;AACA,cAAc,CAAC,GAAGA,CAAO;AACzB;AACA,gBAAgB,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvE;AACA;AACA;AACA,cAAc,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACpF;AACA;AACA,QAAQ,CAAC,GAAGA,CAAO;;AAEnB;AACA;AACA;AACA;AACA,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY,OAAOJ,CAAI,CAAC;AACxB;AACA,8BAA8B,EAAE,IAAI,CAAC;AACrC;AACA,kDAAkD,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC;AACP,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,UAAU,CAAC,MAAM,GAAGC,GAAG,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16]}