@kodaris/krubble-app-components 1.0.69 → 1.0.70

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.min.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/query.js","../../../node_modules/@lit/reactive-element/decorators/base.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","scaffold.js","screen-nav.js","screen-detail.js","subbar.js","router.js","../../../node_modules/marked/lib/marked.esm.js","chatbot.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","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 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","/**\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 { customElement, state } from 'lit/decorators.js';\nimport '@kodaris/krubble-components';\nlet KRNavItemEdit = 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);\nKRNavItemEdit = __decorate([\n customElement('kr-nav-item-edit')\n], KRNavItemEdit);\nexport { KRNavItemEdit };\n//# sourceMappingURL=nav-item-edit.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 { customElement, 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/**\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 */\nlet KRScaffold = 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 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 }\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 }\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 /**\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 * Toggles the expanded/collapsed state of a nav group with animation.\n * Uses the Web Animations API to animate height transitions.\n * When collapsing, the `nav-group--expanded` class is removed after animation completes.\n * When expanding, the class is added immediately before animation starts.\n *\n * @param itemId - The unique identifier of the nav group to toggle\n */\n toggleNavItem(itemId) {\n const navItem = this.shadowRoot?.querySelector(`.nav-item[data-id=\"${itemId}\"]`);\n const groupEl = navItem?.nextElementSibling;\n if (!groupEl) {\n return;\n }\n if (this.navItemsExpanded.has(itemId)) {\n this.navItemsExpanded.delete(itemId);\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(itemId);\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 /**\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 this.toggleNavItem(item.id);\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 startEditing() {\n this.isEditing = true;\n }\n cancelEditing() {\n this.isEditing = false;\n // Reload to revert changes\n this.loadPref();\n }\n resetPref() {\n this.pref.nav = {};\n }\n savePref() {\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\n if (!this.navItemsExpanded.has(item.id) && !this.navItemDragExpandTimeout) {\n this.expandNavGroupOnDrag(item.id);\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 * Auto-expands a collapsed nav group after a delay while dragging over it.\n *\n * Uses a 500ms timeout to prevent groups from expanding too eagerly when the\n * user is just passing over them. Only expands if the user is still hovering\n * over the group's center when the timeout fires.\n *\n * @param itemId - The ID of the group to expand\n */\n expandNavGroupOnDrag(itemId) {\n this.navItemDragExpandTimeout = window.setTimeout(() => {\n if (this.navItemDropTargetId === itemId && this.navItemDropPosition === 'center') {\n this.navItemsExpanded.add(itemId);\n this.requestUpdate();\n }\n this.navItemDragExpandTimeout = null;\n }, 500);\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 toggleUserMenu() {\n this.isUserMenuOpen = !this.isUserMenuOpen;\n }\n closeUserMenu() {\n this.isUserMenuOpen = false;\n }\n handleCustomize() {\n this.closeUserMenu();\n this.startEditing();\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.toggleUserMenu}>\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.savePref}>\n Save\n </button>\n <div class=\"edit-actions__secondary\">\n <button class=\"edit-actions__btn\" @click=${this.resetPref}>\n Reset\n </button>\n <button class=\"edit-actions__btn\" @click=${this.cancelEditing}>\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 return 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 `;\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 /* 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, \"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);\nKRScaffold = __decorate([\n customElement('kr-scaffold')\n], KRScaffold);\nexport { KRScaffold };\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 { customElement, 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 * >\n * <div>Screen content here</div>\n * </kr-screen-nav>\n * ```\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 */\nlet KRScreenNav = 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 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 render() {\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 </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: white;\n border-right: 1px solid #e5e7eb;\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 .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);\nKRScreenNav = __decorate([\n customElement('kr-screen-nav')\n], KRScreenNav);\nexport { KRScreenNav };\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 { customElement, 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 */\nlet KRScreenDetail = 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);\nKRScreenDetail = __decorate([\n customElement('kr-screen-detail')\n], KRScreenDetail);\nexport { KRScreenDetail };\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 { customElement, 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 */\nlet KRSubbar = 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 * Resolves a breadcrumb URL by prepending the base href.\n *\n * This method is used for setting href attributes on anchor elements\n * (so Cmd/Ctrl+click opens correct URL in new tab).\n *\n * The original crumb.url is kept intact (without base href) and passed to Angular\n * via the breadcrumb-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 * - crumb.url = \"/settings\" (used for Angular routing)\n * - resolveUrl(crumb) = \"/operations/settings\" (used for href)\n */\n resolveUrl(crumb) {\n if (!crumb.url) {\n return '#';\n }\n // Remove leading slash from url if present, then combine with base\n let path = crumb.url;\n if (crumb.url.startsWith('/')) {\n path = crumb.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 * 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 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=${this.resolveUrl(crumb)}\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);\nKRSubbar = __decorate([\n customElement('kr-subbar')\n], KRSubbar);\nexport { KRSubbar };\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 } from 'lit/decorators.js';\nexport class KRRouter {\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 e.preventDefault();\n KRRouter.navigate(anchor.pathname);\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.matchAll();\n const params = {};\n for (const match of matched) {\n for (const key in match.params) {\n params[key] = decodeURIComponent(match.params[key]);\n }\n }\n return params;\n }\n static outlet(level) {\n const matched = KRRouter.matchAll();\n if (level >= matched.length) {\n return null;\n }\n const match = matched[level];\n const tag = match.route.component;\n const cached = KRRouter.elementCache.get(level + ':' + tag);\n if (cached) {\n return cached;\n }\n // Clear old cache entry for this level\n for (const key of KRRouter.elementCache.keys()) {\n if (key.startsWith(level + ':')) {\n KRRouter.elementCache.delete(key);\n }\n }\n const el = document.createElement(tag);\n KRRouter.elementCache.set(level + ':' + tag, el);\n return el;\n }\n static matchAll() {\n const path = window.location.pathname;\n let relative = path;\n if (path.startsWith(KRRouter.base)) {\n relative = path.slice(KRRouter.base.length);\n }\n const segments = relative.split('/').filter(s => s);\n return KRRouter.matchRoutes(KRRouter.routes, segments);\n }\n static matchRoutes(routes, segments) {\n for (const route of routes) {\n const routeSegments = route.path.split('/').filter(s => s);\n if (routeSegments.length === 0 && segments.length === 0) {\n return [{\n route,\n params: {}\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 // If there are remaining segments but no children, this route doesn't fully match — try next route\n if (remaining.length > 0 && !route.children) {\n continue;\n }\n const result = [{\n route,\n params\n }];\n if (route.children && remaining.length > 0) {\n const childMatches = KRRouter.matchRoutes(route.children, remaining);\n if (childMatches.length > 0) {\n result.push(...childMatches);\n return result;\n }\n }\n // No remaining segments + default child — redirect\n if (route.children && remaining.length === 0 && route.default) {\n window.history.replaceState({}, '', window.location.pathname + '/' + route.default);\n const childMatches = KRRouter.matchRoutes(route.children, [route.default]);\n if (childMatches.length > 0) {\n result.push(...childMatches);\n return result;\n }\n }\n return result;\n }\n return [];\n }\n}\nKRRouter.base = '';\nKRRouter.routes = [];\nKRRouter.elementCache = new Map();\nlet KRRouterOutlet = class KRRouterOutlet extends LitElement {\n constructor() {\n super(...arguments);\n this.level = -1;\n this.handlePopState = () => {\n this.requestUpdate();\n };\n }\n connectedCallback() {\n super.connectedCallback();\n this.level = this.detectLevel();\n window.addEventListener('popstate', this.handlePopState);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('popstate', this.handlePopState);\n }\n detectLevel() {\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 return level;\n }\n render() {\n const el = KRRouter.outlet(this.level);\n if (!el) {\n return html ``;\n }\n return html `${el}`;\n }\n};\nKRRouterOutlet.styles = css `\n :host {\n display: block;\n height: 100%;\n }\n `;\nKRRouterOutlet = __decorate([\n customElement('kr-router-outlet')\n], KRRouterOutlet);\nexport { KRRouterOutlet };\n//# sourceMappingURL=router.js.map","/**\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 { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { marked } from 'marked';\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 *\n * The final event should include `finished: true` to signal stream completion.\n *\n * ## Usage\n * ```html\n * <kr-chatbot\n * title=\"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 */\nlet KRChatbot = class KRChatbot extends LitElement {\n constructor() {\n super(...arguments);\n // --- Private properties ---\n this._reader = null;\n this._decoder = new TextDecoder();\n this._buffer = '';\n this._userHasScrolledUp = 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 // --- @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 this.send = null;\n /**\n * Callback function called when the user clears the conversation.\n * Must return a Promise — messages are only cleared if it resolves.\n */\n this.clear = 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 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 title text.\n */\n this.title = 'Kat';\n /**\n * Header subtitle text (shown below title with a green status dot).\n */\n this.subtitle = '';\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 // --- @state (internal) ---\n this._inputValue = '';\n this._isStreaming = false;\n this._statusText = '';\n this._error = '';\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 this._hideOverlay();\n document.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n this._saveState();\n };\n }\n // --- Lifecycle ---\n connectedCallback() {\n super.connectedCallback();\n if (this.load) {\n this.load().then((messages) => {\n if (messages && messages.length) {\n this.messages = messages;\n }\n }).catch(() => { });\n }\n this._restoreState();\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 }\n updated(changed) {\n if (changed.has('messages') || changed.has('_statusText')) {\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 if (changed.has('opened') && this.opened && this._inputEl) {\n setTimeout(() => {\n if (this._inputEl) {\n this._inputEl.focus();\n }\n }, 200);\n }\n }\n // --- Public methods ---\n /**\n * Stops the current stream without clearing the conversation.\n */\n stop() {\n this._handleStop();\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 _hideOverlay() {\n if (this._overlay) {\n this._overlay.style.display = 'none';\n }\n }\n _handleHeaderMouseDown(e) {\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 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 _saveState() {\n try {\n const state = { opened: String(this.opened) };\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 if (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 // Auto-resize textarea\n const textarea = e.target;\n textarea.style.height = 'auto';\n textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px';\n }\n _handleKeyDown(e) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this._handleSubmit();\n }\n }\n _handleSubmit() {\n if (!this._inputValue.trim() || !this.send || this._isStreaming) {\n return;\n }\n const messageText = this._inputValue.trim();\n const submitEvent = new CustomEvent('message-submit', {\n detail: {\n message: messageText,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(submitEvent);\n if (submitEvent.defaultPrevented) {\n return;\n }\n this.messages = [...this.messages, {\n role: 'user',\n content: messageText,\n }];\n this._inputValue = '';\n this._error = '';\n this._userHasScrolledUp = false;\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 role: 'assistant',\n content: '',\n }];\n this._isStreaming = true;\n this._statusText = '';\n // Scroll user's message to the top (Gemini-style).\n // Set min-height on the assistant message = container height so there's enough\n // scroll room below the user message to push it to the top.\n this.updateComplete.then(() => {\n if (!this._messagesEl) {\n return;\n }\n // Clear min-height from previous responses\n this._messagesEl.querySelectorAll('.message--assistant').forEach((el) => {\n el.style.minHeight = '';\n });\n const allMsgEls = this._messagesEl.querySelectorAll('.message');\n const userMsgEl = allMsgEls[this.messages.length - 2];\n const assistantMsgEl = allMsgEls[this.messages.length - 1];\n if (assistantMsgEl) {\n assistantMsgEl.style.minHeight = this._messagesEl.clientHeight + 'px';\n }\n if (userMsgEl) {\n this._messagesEl.scrollTop = userMsgEl.offsetTop - this._messagesEl.offsetTop - 24;\n }\n });\n this.send({\n message: messageText,\n messages: this.messages.slice(0, -1),\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 _handleStop() {\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n this._isStreaming = false;\n this._statusText = '';\n }\n _handleClear() {\n if (!this.clear) {\n return;\n }\n this.clear().then(() => {\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n this.messages = [];\n this._isStreaming = false;\n this._statusText = '';\n this._error = '';\n this._inputValue = '';\n this._userHasScrolledUp = false;\n });\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 }\n }\n _handleErrorDismiss() {\n this._error = '';\n }\n _readStreamChunk() {\n if (!this._reader) {\n return;\n }\n this._reader.read().then((result) => {\n if (result.done) {\n this._isStreaming = false;\n this._statusText = '';\n this._reader = null;\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 === 'STATUS') {\n if (data.message) {\n this._statusText = String(data.message);\n }\n }\n else if (data.type === 'REASONING_PART') {\n if (data.message) {\n const lastIndex = this.messages.length - 1;\n if (lastIndex >= 0 && this.messages[lastIndex].role === 'assistant') {\n if (!this.messages[lastIndex].reasoning) {\n this.messages[lastIndex].reasoning = '';\n }\n this.messages[lastIndex].reasoning += String(data.message);\n this.requestUpdate();\n }\n }\n }\n else if (data.type === 'RESPONSE_PART') {\n if (data.message) {\n this._statusText = '';\n const lastIndex = this.messages.length - 1;\n if (lastIndex >= 0 && this.messages[lastIndex].role === 'assistant') {\n this.messages[lastIndex].content += String(data.message);\n this.requestUpdate();\n }\n }\n }\n else if (data.type === 'ERROR') {\n this._handleStreamError(String(data.message || 'Unknown error'));\n }\n if (data.finished) {\n this._isStreaming = false;\n this._statusText = '';\n this._reader = null;\n }\n }\n }\n this._readStreamChunk();\n }).catch((err) => {\n if (err.name !== 'AbortError') {\n this._handleStreamError(err.message);\n }\n });\n }\n _handleStreamError(message) {\n this._isStreaming = false;\n this._statusText = '';\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.role === 'assistant' && !lastMessage.content) {\n this.messages = this.messages.slice(0, -1);\n }\n }\n }\n // --- Render ---\n render() {\n return 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 <div class=${classMap({\n 'panel': true,\n 'panel--opened': this.opened,\n })}>\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 <div class=\"header\" @mousedown=${this._handleHeaderMouseDown}>\n <div class=\"header-left\">\n <div class=\"header-info\">\n <span class=\"header-title\">${this.title}</span>\n ${this.subtitle ? html `\n <span class=\"header-subtitle\">${this.subtitle}</span>\n ` : nothing}\n </div>\n </div>\n <div class=\"header-actions\">\n ${this.messages.length > 0 ? html `\n <button\n class=\"header-action\"\n @click=${this._handleClear}\n title=\"Clear 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.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0\"\n />\n </svg>\n </button>\n ` : nothing}\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 </div>\n </div>\n\n <div class=\"messages\" @scroll=${this._handleMessagesScroll}>\n ${this.messages.length === 0 ? html `\n <div class=\"empty\">\n <span class=\"empty-text\">What can I help you with?</span>\n </div>\n ` : nothing}\n ${this.messages.map((msg) => html `\n <div class=${classMap({\n 'message': true,\n 'message--user': msg.role === 'user',\n 'message--assistant': msg.role === 'assistant',\n })}>\n ${msg.reasoning ? html `\n <details class=\"reasoning\">\n <summary>Thinking</summary>\n <div class=\"reasoning-content\">${msg.reasoning}</div>\n </details>\n ` : nothing}\n ${msg.content ? html `\n <div class=\"message-content\">\n ${msg.role === 'user'\n ? msg.content\n : unsafeHTML(marked.parse(msg.content, { breaks: true }))}\n </div>\n ` : nothing}\n ${msg.role === '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 </div>\n `)}\n </div>\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 ` : nothing}\n\n <div class=\"footer\">\n <div class=\"input-wrapper\">\n <button class=\"input-plus\" title=\"Attach\">+</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 ></textarea>\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(),\n })}\n @click=${this._handleSubmit}\n title=\"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 </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 @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 }\n\n.header-info {\n display: flex;\n flex-direction: column;\n }\n\n .header-title {\n font-size: 16px;\n font-weight: 600;\n }\n\n .header-subtitle {\n color: rgba(255, 255, 255, 0.5);\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .header-subtitle::before {\n content: '';\n width: 5px;\n height: 5px;\n background: var(--kr-chatbot-success);\n border-radius: 50%;\n }\n\n .header-actions {\n display: flex;\n align-items: center;\n gap: 4px;\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 /* Messages */\n .messages {\n flex: 1;\n overflow-y: auto;\n padding: 32px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n scroll-behavior: smooth;\n background: white;\n }\n\n .messages::-webkit-scrollbar {\n width: 4px;\n }\n\n .messages::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .messages::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.08);\n border-radius: 2px;\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: 8px;\n }\n\n.empty-text {\n font-size: 14px;\n color: rgb(0 0 0 / 80%);\n }\n\n .message {\n display: flex;\n flex-direction: column;\n max-width: 100%;\n animation: chatbot-msg-in 0.3s ease-out;\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 .message-content {\n line-height: 1.7;\n word-wrap: break-word;\n overflow-wrap: break-word;\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 .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 /* Footer / Input */\n .footer {\n padding: 16px 16px 16px;\n flex-shrink: 0;\n background: white;\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 .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 .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 /* 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 `;\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"send\", void 0);\n__decorate([\n property({ attribute: false })\n], KRChatbot.prototype, \"clear\", 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, \"title\", void 0);\n__decorate([\n property({ type: String })\n], KRChatbot.prototype, \"subtitle\", 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 state()\n], KRChatbot.prototype, \"_inputValue\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isStreaming\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_statusText\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_error\", 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);\nKRChatbot = __decorate([\n customElement('kr-chatbot')\n], KRChatbot);\nexport { KRChatbot };\n//# sourceMappingURL=chatbot.js.map"],"names":["t","globalThis","e","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","o","WeakMap","n$3","constructor","this","_$cssResult$","Error","cssText","styleSheet","length","get","replaceSync","set","toString","i","reduce","n","c","cssRules","r","is","defineProperty","getOwnPropertyDescriptor","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","Object","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","d","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","b","attribute","type","String","converter","reflect","useDefault","hasChanged","metadata","litPropertyMetadata","y$1","HTMLElement","addInitializer","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","y","mode","ReactiveElement","reactiveElementVersions","createPolicy","createHTML","Math","random","toFixed","slice","createComment","v","_","m","RegExp","g","$","_$litType$","strings","values","x","E","for","A","P","createTreeWalker","V","N","lastIndex","exec","test","startsWith","S","parts","el","currentNode","content","firstChild","replaceWith","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","index","name","ctor","I","L","z","H","tagName","append","data","indexOf","innerHTML","M","_$Co","_$Cl","_$litDirective$","_$AO","_$AT","_$AS","R","_$AV","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","k","nextSibling","Z","_$AI","_$Cv","_$AH","_$AA","_$AB","options","startNode","endNode","_$AR","T","iterator","O","insertBefore","createTextNode","_$AC","_$AP","remove","setConnected","element","fill","j","arguments","toggleAttribute","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","B","litHtmlPolyfillSupport","litHtmlVersions","renderOptions","_$Do","renderBefore","render","_$litPart$","_$litElement$","litElementHydrateSupport","LitElement","litElementPolyfillSupport","litElementVersions","customElements","define","kind","init","Reflect","decorate","querySelector","_$Ct","_$Ci","e$1","it","directiveName","_t","raw","resultType","filter","join","st","nt","classList","__decorate","decorators","target","key","desc","KRNavItemEdit","label","icon","url","active","handleLabelInput","textField","value","handleIconInput","handleUrlInput","handleActiveChange","checked","handleCancel","dialogRef","close","undefined","handleSave","handleKeyDown","html","css","customElement","KRScaffold","defaultNavItemIcon","originalFetch","originalXhrOpen","navItemDragPreview","navItemDragStartY","isNavItemDragging","navItemDragExpandTimeout","navInitialized","logo","homeUrl","scheme","nav","navIconsDisplayed","navExpanded","user","subbar","navEnabled","userType","breadcrumbs","navItemsExpanded","navQuery","activeNavItemId","isNavScrolled","isNavOpened","localStorage","getItem","isEditing","isUserMenuOpen","pref","draggedNavItemId","navItemDropTargetId","navItemDropPosition","pendingRequests","boundHandleMouseMove","handleMouseMove","bind","boundHandleMouseUp","handleMouseUp","installFetchInterceptor","loadPref","changedProperties","updateActiveNavItem","getComputedNav","item","group","id","uninstallFetchInterceptor","scaffold","window","fetch","args","finally","XMLHttpRequest","open","method","async","username","password","resolveUrl","external","path","baseHref","result","override","order","parentId","children","child","childIndex","childOverride","entries","getNavItemChildren","items","sort","query","allItems","parentGroup","find","includes","some","handleNavQueryChange","clear","handleNavQueryClear","handleMenuClick","setItem","handleNavHeaderClick","navEvent","CustomEvent","detail","bubbles","composed","cancelable","dispatchEvent","defaultPrevented","location","href","handleNavScroll","scrollTop","toggleNavItem","itemId","navItem","groupEl","nextElementSibling","animate","height","scrollHeight","duration","easing","onfinish","handleNavItemClick","ctrlKey","metaKey","button","preventDefault","currentPath","pathname","activeItem","longestMatch","startEditing","cancelEditing","resetPref","savePref","uuid","KRHttp","body","then","response","json","catch","error","console","handleNavItemContextMenu","KRContextMenu","clientX","clientY","divider","openNavItemEdit","addNavItem","KRDialog","afterClosed","res","targetItem","position","customId","Date","now","siblings","targetIndex","findIndex","newOrder","sibling","newItem","handleNavItemMouseDown","abs","draggedItem","className","style","left","top","updateNavItemDropTarget","executeNavItemDrop","clearNavItemDragExpandTimeout","navItems","querySelectorAll","foundTarget","rect","getBoundingClientRect","right","bottom","newParentId","expandNavGroupOnDrag","clearTimeout","setTimeout","navDelta","max","toggleUserMenu","closeUserMenu","handleCustomize","renderNormalFooter","nothing","initials","part","toUpperCase","avatar","email","renderEditFooter","renderNavItem","isChild","classMap","unsafeHTML","topLevelItems","totalTopLevelItems","progress","property","KRScreenNav","subLabel","activeId","handlePopstate","syncActiveFromUrl","requestAnimationFrame","match","KRScreenDetail","title","KRSubbar","menu","_handleMenuClick","crumb","_handleBreadcrumbClick","isCurrent","breadcrumbEvent","breadcrumb","KRRouter","configure","config","base","routes","anchor","composedPath","HTMLAnchorElement","origin","navigate","fullPath","history","pushState","PopStateEvent","getParams","matched","matchAll","params","decodeURIComponent","outlet","level","tag","route","component","cached","elementCache","relative","segments","matchRoutes","routeSegments","remaining","childMatches","default","replaceState","KRRouterOutlet","handlePopState","detectLevel","node","_getDefaults","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","_defaults","changeDefaults","newDefaults","escapeTest","escapeReplace","source","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","escape$1","encode","replace","unescapeTest","unescape","charAt","fromCharCode","parseInt","substring","caret","edit","regex","opt","obj","val","valSource","getRegex","cleanUrl","encodeURI","noopTest","splitCells","tableRow","count","cells","offset","str","escaped","curr","trim","shift","pop","splice","rtrim","invert","suffLen","outputLink","cap","link","lexer","text","inLink","token","tokens","inlineTokens","_Tokenizer","rules","space","src","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","lang","inline","anyPunctuation","heading","trimmed","depth","hr","blockquote","blockTokens","list","bull","isordered","ordered","start","loose","itemRegex","itemContents","endsWithBlankLine","endEarly","line","repeat","nextLine","indent","trimStart","search","blankLine","nextBulletRegex","min","hrRegex","fencesBeginRegex","headingBeginRegex","rawLine","ischecked","istask","task","trimEnd","spacers","hasMultipleLineBreaks","pre","def","table","headers","aligns","rows","header","align","row","cell","lheading","paragraph","escape","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","findClosingBracket","linkLen","reflink","links","nolink","emStrong","maskedSrc","prevChar","emStrongLDelim","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","emStrongRDelimAst","emStrongRDelimUnd","lastCharLength","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","prevCapZero","_backpedal","inlineText","bullet","_paragraph","_blockLabel","_tag","_comment","blockNormal","gfmTable","blockGfm","blockPedantic","_punctuation","_inlineComment","_inlineLabel","inlineNormal","blockSkip","reflinkSearch","inlinePedantic","inlineGfm","inlineBreaks","normal","_Lexer","inlineQueue","lex","lexInline","next","lastToken","cutSrc","lastParagraphClipped","leading","tabs","extTokenizer","startBlock","startIndex","Infinity","tempSrc","tempStart","getStartIndex","errMsg","charCodeAt","keepPrevChar","lastIndexOf","startInline","_Renderer","infostring","quote","listitem","checkbox","tablerow","tablecell","flags","strong","em","cleanHref","out","image","_TextRenderer","_Parser","textRenderer","parseInline","renderers","genericToken","ret","parser","headingToken","codeToken","tableToken","blockquoteToken","listToken","itemBody","htmlToken","paragraphToken","textToken","escapeToken","tagToken","linkToken","imageToken","strongToken","emToken","codespanToken","delToken","_Hooks","static","preprocess","markdown","postprocess","processAllTokens","markedInstance","defaults","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","callback","concat","childTokens","pack","opts","ext","prevRenderer","apply","extLevel","prop","rendererProp","rendererFunc","tokenizerProp","tokenizerFunc","prevTokenizer","hooksProp","hooksFunc","prevHook","passThroughHooks","arg","resolve","packWalktokens","origOpt","warn","throwError","onError","all","message","msg","marked","getDefaults","KRChatbot","_reader","_decoder","TextDecoder","_buffer","_userHasScrolledUp","_isDragging","_isResizing","_overlay","_resizeDir","_dragStartX","_dragStartY","_dragStartLeft","_dragStartTop","_resizeStartW","_resizeStartH","send","load","messages","subtitle","placeholder","opened","_inputValue","_isStreaming","_statusText","_error","_handleMouseMove","newLeft","newTop","w","_panelEl","offsetWidth","innerWidth","innerHeight","dx","dy","minW","minH","maxW","maxH","newW","newH","width","_handleMouseUp","_hideOverlay","_saveState","_restoreState","cancel","changed","_messagesEl","_inputEl","focus","stop","_handleStop","_showOverlay","display","_handleHeaderMouseDown","closest","_handleResizeMouseDown","currentTarget","dataset","dir","stopPropagation","_handleToggle","_applyStoredLayout","_handleInputChange","textarea","_handleKeyDown","shiftKey","_handleSubmit","messageText","submitEvent","role","minHeight","allMsgEls","userMsgEl","assistantMsgEl","clientHeight","offsetTop","ok","getReader","_readStreamChunk","_handleStreamError","status","err","_handleClear","_handleMessagesScroll","container","distanceFromBottom","_handleErrorDismiss","read","done","decode","stream","events","lines","reasoning","finished","lastMessage","toggle","panel"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,18]}
1
+ {"version":3,"file":"krubble-app.bundled.min.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/query.js","../../../node_modules/@lit/reactive-element/decorators/base.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","scaffold.js","screen-nav.js","screen-detail.js","subbar.js","router.js","../../../node_modules/lit-html/directive-helpers.js","../../../node_modules/lit-html/directives/repeat.js","../../../node_modules/marked/lib/marked.esm.js","chatbot.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","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 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","/**\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 { customElement, state } from 'lit/decorators.js';\nimport '@kodaris/krubble-components';\nlet KRNavItemEdit = 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);\nKRNavItemEdit = __decorate([\n customElement('kr-nav-item-edit')\n], KRNavItemEdit);\nexport { KRNavItemEdit };\n//# sourceMappingURL=nav-item-edit.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 { customElement, 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/**\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 */\nlet KRScaffold = 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 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 }\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 }\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 /**\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 * Toggles the expanded/collapsed state of a nav group with animation.\n * Uses the Web Animations API to animate height transitions.\n * When collapsing, the `nav-group--expanded` class is removed after animation completes.\n * When expanding, the class is added immediately before animation starts.\n *\n * @param itemId - The unique identifier of the nav group to toggle\n */\n toggleNavItem(itemId) {\n const navItem = this.shadowRoot?.querySelector(`.nav-item[data-id=\"${itemId}\"]`);\n const groupEl = navItem?.nextElementSibling;\n if (!groupEl) {\n return;\n }\n if (this.navItemsExpanded.has(itemId)) {\n this.navItemsExpanded.delete(itemId);\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(itemId);\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 /**\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 this.toggleNavItem(item.id);\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 startEditing() {\n this.isEditing = true;\n }\n cancelEditing() {\n this.isEditing = false;\n // Reload to revert changes\n this.loadPref();\n }\n resetPref() {\n this.pref.nav = {};\n }\n savePref() {\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\n if (!this.navItemsExpanded.has(item.id) && !this.navItemDragExpandTimeout) {\n this.expandNavGroupOnDrag(item.id);\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 * Auto-expands a collapsed nav group after a delay while dragging over it.\n *\n * Uses a 500ms timeout to prevent groups from expanding too eagerly when the\n * user is just passing over them. Only expands if the user is still hovering\n * over the group's center when the timeout fires.\n *\n * @param itemId - The ID of the group to expand\n */\n expandNavGroupOnDrag(itemId) {\n this.navItemDragExpandTimeout = window.setTimeout(() => {\n if (this.navItemDropTargetId === itemId && this.navItemDropPosition === 'center') {\n this.navItemsExpanded.add(itemId);\n this.requestUpdate();\n }\n this.navItemDragExpandTimeout = null;\n }, 500);\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 toggleUserMenu() {\n this.isUserMenuOpen = !this.isUserMenuOpen;\n }\n closeUserMenu() {\n this.isUserMenuOpen = false;\n }\n handleCustomize() {\n this.closeUserMenu();\n this.startEditing();\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.toggleUserMenu}>\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.savePref}>\n Save\n </button>\n <div class=\"edit-actions__secondary\">\n <button class=\"edit-actions__btn\" @click=${this.resetPref}>\n Reset\n </button>\n <button class=\"edit-actions__btn\" @click=${this.cancelEditing}>\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 return 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 `;\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 /* 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, \"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);\nKRScaffold = __decorate([\n customElement('kr-scaffold')\n], KRScaffold);\nexport { KRScaffold };\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 { customElement, 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 * >\n * <div>Screen content here</div>\n * </kr-screen-nav>\n * ```\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 */\nlet KRScreenNav = 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 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 render() {\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 </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: white;\n border-right: 1px solid #e5e7eb;\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 .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);\nKRScreenNav = __decorate([\n customElement('kr-screen-nav')\n], KRScreenNav);\nexport { KRScreenNav };\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 { customElement, 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 */\nlet KRScreenDetail = 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);\nKRScreenDetail = __decorate([\n customElement('kr-screen-detail')\n], KRScreenDetail);\nexport { KRScreenDetail };\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 { customElement, 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 */\nlet KRSubbar = 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 * Resolves a breadcrumb URL by prepending the base href.\n *\n * This method is used for setting href attributes on anchor elements\n * (so Cmd/Ctrl+click opens correct URL in new tab).\n *\n * The original crumb.url is kept intact (without base href) and passed to Angular\n * via the breadcrumb-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 * - crumb.url = \"/settings\" (used for Angular routing)\n * - resolveUrl(crumb) = \"/operations/settings\" (used for href)\n */\n resolveUrl(crumb) {\n if (!crumb.url) {\n return '#';\n }\n // Remove leading slash from url if present, then combine with base\n let path = crumb.url;\n if (crumb.url.startsWith('/')) {\n path = crumb.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 * 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 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=${this.resolveUrl(crumb)}\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);\nKRSubbar = __decorate([\n customElement('kr-subbar')\n], KRSubbar);\nexport { KRSubbar };\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 } from 'lit/decorators.js';\nexport class KRRouter {\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 e.preventDefault();\n KRRouter.navigate(anchor.pathname);\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.matchAll();\n const params = {};\n for (const match of matched) {\n for (const key in match.params) {\n params[key] = decodeURIComponent(match.params[key]);\n }\n }\n return params;\n }\n static outlet(level) {\n const matched = KRRouter.matchAll();\n if (level >= matched.length) {\n return null;\n }\n const match = matched[level];\n const tag = match.route.component;\n const cached = KRRouter.elementCache.get(level + ':' + tag);\n if (cached) {\n return cached;\n }\n // Clear old cache entry for this level\n for (const key of KRRouter.elementCache.keys()) {\n if (key.startsWith(level + ':')) {\n KRRouter.elementCache.delete(key);\n }\n }\n const el = document.createElement(tag);\n KRRouter.elementCache.set(level + ':' + tag, el);\n return el;\n }\n static matchAll() {\n const path = window.location.pathname;\n let relative = path;\n if (path.startsWith(KRRouter.base)) {\n relative = path.slice(KRRouter.base.length);\n }\n const segments = relative.split('/').filter(s => s);\n return KRRouter.matchRoutes(KRRouter.routes, segments);\n }\n static matchRoutes(routes, segments) {\n for (const route of routes) {\n const routeSegments = route.path.split('/').filter(s => s);\n if (routeSegments.length === 0 && segments.length === 0) {\n return [{\n route,\n params: {}\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 // If there are remaining segments but no children, this route doesn't fully match — try next route\n if (remaining.length > 0 && !route.children) {\n continue;\n }\n const result = [{\n route,\n params\n }];\n if (route.children && remaining.length > 0) {\n const childMatches = KRRouter.matchRoutes(route.children, remaining);\n if (childMatches.length > 0) {\n result.push(...childMatches);\n return result;\n }\n }\n // No remaining segments + default child — redirect\n if (route.children && remaining.length === 0 && route.default) {\n window.history.replaceState({}, '', window.location.pathname + '/' + route.default);\n const childMatches = KRRouter.matchRoutes(route.children, [route.default]);\n if (childMatches.length > 0) {\n result.push(...childMatches);\n return result;\n }\n }\n return result;\n }\n return [];\n }\n}\nKRRouter.base = '';\nKRRouter.routes = [];\nKRRouter.elementCache = new Map();\nlet KRRouterOutlet = class KRRouterOutlet extends LitElement {\n constructor() {\n super(...arguments);\n this.level = -1;\n this.handlePopState = () => {\n this.requestUpdate();\n };\n }\n connectedCallback() {\n super.connectedCallback();\n this.level = this.detectLevel();\n window.addEventListener('popstate', this.handlePopState);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('popstate', this.handlePopState);\n }\n detectLevel() {\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 return level;\n }\n render() {\n const el = KRRouter.outlet(this.level);\n if (!el) {\n return html ``;\n }\n return html `${el}`;\n }\n};\nKRRouterOutlet.styles = css `\n :host {\n display: block;\n height: 100%;\n }\n `;\nKRRouterOutlet = __decorate([\n customElement('kr-router-outlet')\n], KRRouterOutlet);\nexport { KRRouterOutlet };\n//# sourceMappingURL=router.js.map","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 { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { marked } from 'marked';\nimport { KRFilePreview } from '@kodaris/krubble-components';\n/** Image MIME types the chatbot accepts (matches what Bedrock can ingest). */\nconst ACCEPTED_IMAGE_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];\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 *\n * The final event should include `finished: true` to signal stream completion.\n *\n * ## Usage\n * ```html\n * <kr-chatbot\n * title=\"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 */\nlet KRChatbot = class KRChatbot extends LitElement {\n constructor() {\n super(...arguments);\n // --- Private properties ---\n this._reader = null;\n this._decoder = new TextDecoder();\n this._buffer = '';\n this._userHasScrolledUp = 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 /** Counter for depth-aware dragenter/dragleave tracking. */\n this._dragDepth = 0;\n /** Monotonic id source for pending attachments. */\n this._pendingSeq = 0;\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 this.send = null;\n /**\n * Callback function called when the user clears the conversation.\n * Must return a Promise — messages are only cleared if it resolves.\n */\n this.clear = 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 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 title text.\n */\n this.title = 'Kat';\n /**\n * Header subtitle text (shown below title with a green status dot).\n */\n this.subtitle = '';\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 // --- @state (internal) ---\n this._inputValue = '';\n this._isStreaming = false;\n this._statusText = '';\n this._error = '';\n /** Images staged in the composer, before the message is sent. */\n this._pendingAttachments = [];\n /** True while a file is being dragged over the panel (shows the drop overlay). */\n this._isDraggingFile = false;\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 this._hideOverlay();\n document.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n this._saveState();\n };\n }\n // --- Lifecycle ---\n connectedCallback() {\n super.connectedCallback();\n if (this.load) {\n this.load().then((messages) => {\n if (messages && messages.length) {\n this.messages = messages;\n }\n }).catch(() => { });\n }\n this._restoreState();\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 // Release any object URLs still held by staged attachments.\n this._pendingAttachments.forEach((p) => URL.revokeObjectURL(p.previewUrl));\n }\n updated(changed) {\n if (changed.has('messages') || changed.has('_statusText')) {\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 if (changed.has('opened') && this.opened && this._inputEl) {\n setTimeout(() => {\n if (this._inputEl) {\n this._inputEl.focus();\n }\n }, 200);\n }\n }\n // --- Public methods ---\n /**\n * Stops the current stream without clearing the conversation.\n */\n stop() {\n this._handleStop();\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 // --- 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 _hideOverlay() {\n if (this._overlay) {\n this._overlay.style.display = 'none';\n }\n }\n _handleHeaderMouseDown(e) {\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 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 _saveState() {\n try {\n const state = { opened: String(this.opened) };\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 if (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 // Auto-resize textarea\n const textarea = e.target;\n textarea.style.height = 'auto';\n textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px';\n }\n _handleKeyDown(e) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this._handleSubmit();\n }\n }\n // --- Attachments ---\n _openFilePicker() {\n this._fileInputEl?.click();\n }\n _handleFileInputChange(e) {\n const input = e.target;\n if (input.files) {\n this._addFiles(input.files);\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 /** Stage a set of image files in the composer (held locally until send). */\n _addFiles(fileList) {\n const files = Array.from(fileList).filter((f) => ACCEPTED_IMAGE_TYPES.includes(f.type));\n if (!files.length) {\n return;\n }\n files.forEach((file) => {\n const pending = {\n localId: 'att-' + this._pendingSeq++,\n file,\n name: file.name,\n previewUrl: URL.createObjectURL(file),\n };\n this._pendingAttachments = [...this._pendingAttachments, pending];\n });\n }\n _removePending(localId) {\n const target = this._pendingAttachments.find((p) => p.localId === localId);\n if (target) {\n URL.revokeObjectURL(target.previewUrl);\n }\n this._pendingAttachments = this._pendingAttachments.filter((p) => p.localId !== localId);\n }\n _clearPending() {\n this._pendingAttachments.forEach((p) => URL.revokeObjectURL(p.previewUrl));\n this._pendingAttachments = [];\n }\n /** Open the shared full-screen previewer for an attachment. */\n _openAttachment(att) {\n KRFilePreview.open({\n src: att.url,\n name: att.name || 'image',\n });\n }\n /** Whether the send button is active: needs text or at least one image. */\n _canSend() {\n return Boolean(this._inputValue.trim()) || this._pendingAttachments.length > 0;\n }\n _handleSubmit() {\n if (!this.send || this._isStreaming) {\n return;\n }\n const messageText = this._inputValue.trim();\n const pending = this._pendingAttachments;\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 raw files sent to the backend, and the display attachments for the\n // sent message. The message reuses each preview object URL, so ownership of\n // those URLs transfers to the message (we don't revoke them here).\n const files = pending.map((p) => p.file);\n const attachments = pending.map((p) => ({\n url: p.previewUrl,\n name: p.name,\n mimeType: p.file.type,\n }));\n const submitEvent = new CustomEvent('message-submit', {\n detail: {\n message: messageText,\n files,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n this.dispatchEvent(submitEvent);\n if (submitEvent.defaultPrevented) {\n return;\n }\n const userMessage = {\n role: 'user',\n content: messageText,\n };\n if (attachments.length) {\n userMessage.attachments = attachments;\n }\n this.messages = [...this.messages, userMessage];\n this._inputValue = '';\n this._error = '';\n this._userHasScrolledUp = false;\n // Clear the composer without revoking the object URLs — the sent message now\n // owns them for display.\n this._pendingAttachments = [];\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 role: 'assistant',\n content: '',\n }];\n this._isStreaming = true;\n this._statusText = '';\n // Scroll user's message to the top (Gemini-style).\n // Set min-height on the assistant message = container height so there's enough\n // scroll room below the user message to push it to the top.\n this.updateComplete.then(() => {\n if (!this._messagesEl) {\n return;\n }\n // Clear min-height from previous responses\n this._messagesEl.querySelectorAll('.message--assistant').forEach((el) => {\n el.style.minHeight = '';\n });\n const allMsgEls = this._messagesEl.querySelectorAll('.message');\n const userMsgEl = allMsgEls[this.messages.length - 2];\n const assistantMsgEl = allMsgEls[this.messages.length - 1];\n if (assistantMsgEl) {\n assistantMsgEl.style.minHeight = this._messagesEl.clientHeight + 'px';\n }\n if (userMsgEl) {\n this._messagesEl.scrollTop = userMsgEl.offsetTop - this._messagesEl.offsetTop - 24;\n }\n });\n this.send({\n message: messageText,\n messages: this.messages.slice(0, -1),\n files,\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 _handleStop() {\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n this._isStreaming = false;\n this._statusText = '';\n }\n _handleClear() {\n if (!this.clear) {\n return;\n }\n this.clear().then(() => {\n if (this._reader) {\n this._reader.cancel();\n this._reader = null;\n }\n this.messages = [];\n this._isStreaming = false;\n this._statusText = '';\n this._error = '';\n this._inputValue = '';\n this._userHasScrolledUp = false;\n });\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 }\n }\n _handleErrorDismiss() {\n this._error = '';\n }\n _readStreamChunk() {\n if (!this._reader) {\n return;\n }\n this._reader.read().then((result) => {\n if (result.done) {\n this._isStreaming = false;\n this._statusText = '';\n this._reader = null;\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 === 'STATUS') {\n if (data.message) {\n this._statusText = String(data.message);\n }\n }\n else if (data.type === 'REASONING_PART') {\n if (data.message) {\n const lastIndex = this.messages.length - 1;\n if (lastIndex >= 0 && this.messages[lastIndex].role === 'assistant') {\n if (!this.messages[lastIndex].reasoning) {\n this.messages[lastIndex].reasoning = '';\n }\n this.messages[lastIndex].reasoning += String(data.message);\n this.requestUpdate();\n }\n }\n }\n else if (data.type === 'RESPONSE_PART') {\n if (data.message) {\n this._statusText = '';\n const lastIndex = this.messages.length - 1;\n if (lastIndex >= 0 && this.messages[lastIndex].role === 'assistant') {\n this.messages[lastIndex].content += String(data.message);\n this.requestUpdate();\n }\n }\n }\n else if (data.type === 'ERROR') {\n this._handleStreamError(String(data.message || 'Unknown error'));\n }\n if (data.finished) {\n this._isStreaming = false;\n this._statusText = '';\n this._reader = null;\n }\n }\n }\n this._readStreamChunk();\n }).catch((err) => {\n if (err.name !== 'AbortError') {\n this._handleStreamError(err.message);\n }\n });\n }\n _handleStreamError(message) {\n this._isStreaming = false;\n this._statusText = '';\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.role === 'assistant' && !lastMessage.content) {\n this.messages = this.messages.slice(0, -1);\n }\n }\n }\n // --- Render ---\n render() {\n return html `\n ${this.hideToggle ? 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 })}\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 <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 <div class=\"header\" @mousedown=${this._handleHeaderMouseDown}>\n <div class=\"header-left\">\n <div class=\"header-info\">\n <span class=\"header-title\">${this.title}</span>\n ${this.subtitle ? html `\n <span class=\"header-subtitle\">${this.subtitle}</span>\n ` : nothing}\n </div>\n </div>\n <div class=\"header-actions\">\n ${this.messages.length > 0 ? html `\n <button\n class=\"header-action\"\n @click=${this._handleClear}\n title=\"Clear 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.5\"\n stroke=\"currentColor\"\n class=\"header-action-icon\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0\"\n />\n </svg>\n </button>\n ` : nothing}\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 </div>\n </div>\n\n <div class=\"messages\" @scroll=${this._handleMessagesScroll}>\n ${this.messages.length === 0 ? html `\n <div class=\"empty\">\n <span class=\"empty-text\">What can I help you with?</span>\n </div>\n ` : nothing}\n ${this.messages.map((msg) => html `\n <div class=${classMap({\n 'message': true,\n 'message--user': msg.role === 'user',\n 'message--assistant': msg.role === 'assistant',\n })}>\n ${msg.reasoning ? html `\n <details class=\"reasoning\">\n <summary>Thinking</summary>\n <div class=\"reasoning-content\">${msg.reasoning}</div>\n </details>\n ` : nothing}\n ${msg.attachments && msg.attachments.length ? html `\n <div class=\"attachments\">\n ${msg.attachments.map((att) => html `\n <button\n class=\"attachment\"\n type=\"button\"\n title=${att.name || 'View image'}\n @click=${() => this._openAttachment(att)}\n >\n <img src=${att.url} alt=${att.name || ''} />\n </button>\n `)}\n </div>\n ` : nothing}\n ${msg.content ? html `\n <div class=\"message-content\">\n ${msg.role === 'user'\n ? msg.content\n : unsafeHTML(marked.parse(msg.content, { breaks: true }))}\n </div>\n ` : nothing}\n ${msg.role === '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 </div>\n `)}\n </div>\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 ` : nothing}\n\n <div class=\"footer\">\n ${this._pendingAttachments.length ? html `\n <div class=\"composer-attachments\">\n ${repeat(this._pendingAttachments, (p) => p.localId, (p) => html `\n <div class=\"chip\">\n <img src=${p.previewUrl} alt=${p.name} />\n <button\n class=\"chip-remove\"\n title=\"Remove\"\n @click=${() => this._removePending(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=\"3\"\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=\"image/png,image/jpeg,image/gif,image/webp\"\n multiple\n hidden\n @change=${this._handleFileInputChange}\n />\n <div class=\"input-wrapper\">\n <button\n class=\"input-plus\"\n title=\"Attach image\"\n @click=${this._openFilePicker}\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._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._canSend(),\n })}\n @click=${this._handleSubmit}\n title=\"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 </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 @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 }\n\n.header-info {\n display: flex;\n flex-direction: column;\n }\n\n .header-title {\n font-size: 16px;\n font-weight: 600;\n }\n\n .header-subtitle {\n color: rgba(255, 255, 255, 0.5);\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .header-subtitle::before {\n content: '';\n width: 5px;\n height: 5px;\n background: var(--kr-chatbot-success);\n border-radius: 50%;\n }\n\n .header-actions {\n display: flex;\n align-items: center;\n gap: 4px;\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 /* Messages */\n .messages {\n flex: 1;\n overflow-y: auto;\n padding: 32px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n scroll-behavior: smooth;\n background: white;\n }\n\n .messages::-webkit-scrollbar {\n width: 4px;\n }\n\n .messages::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .messages::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.08);\n border-radius: 2px;\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: 8px;\n }\n\n.empty-text {\n font-size: 14px;\n color: rgb(0 0 0 / 80%);\n }\n\n .message {\n display: flex;\n flex-direction: column;\n max-width: 100%;\n animation: chatbot-msg-in 0.3s ease-out;\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 .message-content {\n line-height: 1.7;\n word-wrap: break-word;\n overflow-wrap: break-word;\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 .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 /* Footer / Input */\n .footer {\n padding: 16px 16px 16px;\n flex-shrink: 0;\n background: white;\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 .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 .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 /* 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 }\n\n .attachment {\n width: 120px;\n height: 120px;\n border-radius: 12px;\n overflow: hidden;\n background: #f2f2f4;\n border: 1px solid rgba(0, 0, 0, 0.08);\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 /* 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 .chip {\n position: relative;\n width: 56px;\n height: 56px;\n border-radius: 10px;\n overflow: hidden;\n background: #f2f2f4;\n border: 1px solid var(--kr-chatbot-border);\n flex-shrink: 0;\n }\n\n .chip img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n .chip-remove {\n position: absolute;\n top: 2px;\n right: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n border: none;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n line-height: 1;\n }\n\n .chip-remove:hover {\n background: rgba(0, 0, 0, 0.8);\n }\n\n .chip-remove svg {\n width: 10px;\n height: 10px;\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, \"clear\", 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, \"title\", void 0);\n__decorate([\n property({ type: String })\n], KRChatbot.prototype, \"subtitle\", 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 state()\n], KRChatbot.prototype, \"_inputValue\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isStreaming\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_statusText\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_error\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_pendingAttachments\", void 0);\n__decorate([\n state()\n], KRChatbot.prototype, \"_isDraggingFile\", 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);\nKRChatbot = __decorate([\n customElement('kr-chatbot')\n], KRChatbot);\nexport { KRChatbot };\n//# sourceMappingURL=chatbot.js.map"],"names":["t","globalThis","e","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","o","WeakMap","n$3","constructor","this","_$cssResult$","Error","cssText","styleSheet","length","get","replaceSync","set","toString","i","reduce","n","c","cssRules","r","is","defineProperty","getOwnPropertyDescriptor","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","Object","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","d","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","b","attribute","type","String","converter","reflect","useDefault","hasChanged","metadata","litPropertyMetadata","y$1","HTMLElement","addInitializer","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","y","mode","ReactiveElement","reactiveElementVersions","createPolicy","createHTML","Math","random","toFixed","slice","createComment","v","_","m","RegExp","g","$","_$litType$","strings","values","x","E","for","A","P","createTreeWalker","V","S","parts","lastIndex","exec","test","startsWith","N","el","currentNode","content","firstChild","replaceWith","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","index","name","ctor","I","L","z","H","tagName","append","data","indexOf","innerHTML","M","_$Co","_$Cl","_$litDirective$","_$AO","_$AT","_$AS","R","_$AV","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","k","nextSibling","Z","_$AI","_$Cv","_$AH","_$AA","_$AB","options","startNode","endNode","_$AR","T","iterator","O","insertBefore","createTextNode","_$AC","_$AP","remove","setConnected","element","fill","j","arguments","toggleAttribute","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","B","litHtmlPolyfillSupport","litHtmlVersions","renderOptions","_$Do","renderBefore","render","_$litPart$","_$litElement$","litElementHydrateSupport","LitElement","litElementPolyfillSupport","litElementVersions","customElements","define","kind","init","Reflect","decorate","querySelector","i$1","_$Ct","_$Ci","e$1","it","directiveName","_t","raw","resultType","filter","join","st","nt","classList","__decorate","decorators","target","key","desc","KRNavItemEdit","label","icon","url","active","handleLabelInput","textField","value","handleIconInput","handleUrlInput","handleActiveChange","checked","handleCancel","dialogRef","close","undefined","handleSave","handleKeyDown","html","css","customElement","KRScaffold","defaultNavItemIcon","originalFetch","originalXhrOpen","navItemDragPreview","navItemDragStartY","isNavItemDragging","navItemDragExpandTimeout","navInitialized","logo","homeUrl","scheme","nav","navIconsDisplayed","navExpanded","user","subbar","navEnabled","userType","breadcrumbs","navItemsExpanded","navQuery","activeNavItemId","isNavScrolled","isNavOpened","localStorage","getItem","isEditing","isUserMenuOpen","pref","draggedNavItemId","navItemDropTargetId","navItemDropPosition","pendingRequests","boundHandleMouseMove","handleMouseMove","bind","boundHandleMouseUp","handleMouseUp","installFetchInterceptor","loadPref","changedProperties","updateActiveNavItem","getComputedNav","item","group","id","uninstallFetchInterceptor","scaffold","window","fetch","args","finally","XMLHttpRequest","open","method","async","username","password","resolveUrl","external","path","baseHref","result","override","order","parentId","children","child","childIndex","childOverride","entries","getNavItemChildren","items","sort","query","allItems","parentGroup","find","includes","some","handleNavQueryChange","clear","handleNavQueryClear","handleMenuClick","setItem","handleNavHeaderClick","navEvent","CustomEvent","detail","bubbles","composed","cancelable","dispatchEvent","defaultPrevented","location","href","handleNavScroll","scrollTop","toggleNavItem","itemId","navItem","groupEl","nextElementSibling","animate","height","scrollHeight","duration","easing","onfinish","handleNavItemClick","ctrlKey","metaKey","button","preventDefault","currentPath","pathname","activeItem","longestMatch","startEditing","cancelEditing","resetPref","savePref","uuid","KRHttp","body","then","response","json","catch","error","console","handleNavItemContextMenu","KRContextMenu","clientX","clientY","divider","openNavItemEdit","addNavItem","KRDialog","afterClosed","res","targetItem","position","customId","Date","now","siblings","targetIndex","findIndex","newOrder","sibling","newItem","handleNavItemMouseDown","abs","draggedItem","className","style","left","top","updateNavItemDropTarget","executeNavItemDrop","clearNavItemDragExpandTimeout","navItems","querySelectorAll","foundTarget","rect","getBoundingClientRect","right","bottom","newParentId","expandNavGroupOnDrag","clearTimeout","setTimeout","navDelta","max","toggleUserMenu","closeUserMenu","handleCustomize","renderNormalFooter","nothing","initials","part","toUpperCase","avatar","email","renderEditFooter","renderNavItem","isChild","classMap","unsafeHTML","topLevelItems","totalTopLevelItems","progress","property","KRScreenNav","subLabel","activeId","handlePopstate","syncActiveFromUrl","requestAnimationFrame","match","KRScreenDetail","title","KRSubbar","menu","_handleMenuClick","crumb","_handleBreadcrumbClick","isCurrent","breadcrumbEvent","breadcrumb","KRRouter","configure","config","base","routes","anchor","composedPath","HTMLAnchorElement","origin","navigate","fullPath","history","pushState","PopStateEvent","getParams","matched","matchAll","params","decodeURIComponent","outlet","level","tag","route","component","cached","elementCache","relative","segments","matchRoutes","routeSegments","remaining","childMatches","default","replaceState","KRRouterOutlet","handlePopState","detectLevel","node","_$AQ","dt","ut","w","_getDefaults","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","_defaults","changeDefaults","newDefaults","escapeTest","escapeReplace","source","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","escape$1","encode","replace","unescapeTest","unescape","charAt","fromCharCode","parseInt","substring","caret","edit","regex","opt","obj","val","valSource","getRegex","cleanUrl","encodeURI","noopTest","splitCells","tableRow","count","cells","offset","str","escaped","curr","trim","shift","pop","splice","rtrim","invert","suffLen","outputLink","cap","link","lexer","text","inLink","token","tokens","inlineTokens","_Tokenizer","rules","space","src","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","lang","inline","anyPunctuation","heading","trimmed","depth","hr","blockquote","blockTokens","list","bull","isordered","ordered","start","loose","itemRegex","itemContents","endsWithBlankLine","endEarly","line","repeat","nextLine","indent","trimStart","search","blankLine","nextBulletRegex","min","hrRegex","fencesBeginRegex","headingBeginRegex","rawLine","ischecked","istask","task","trimEnd","spacers","hasMultipleLineBreaks","pre","def","table","headers","aligns","rows","header","align","row","cell","lheading","paragraph","escape","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","findClosingBracket","linkLen","reflink","links","nolink","emStrong","maskedSrc","prevChar","emStrongLDelim","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","emStrongRDelimAst","emStrongRDelimUnd","lastCharLength","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","prevCapZero","_backpedal","inlineText","bullet","_paragraph","_blockLabel","_tag","_comment","blockNormal","gfmTable","blockGfm","blockPedantic","_punctuation","_inlineComment","_inlineLabel","inlineNormal","blockSkip","reflinkSearch","inlinePedantic","inlineGfm","inlineBreaks","normal","_Lexer","inlineQueue","lex","lexInline","next","lastToken","cutSrc","lastParagraphClipped","leading","tabs","extTokenizer","startBlock","startIndex","Infinity","tempSrc","tempStart","getStartIndex","errMsg","charCodeAt","keepPrevChar","lastIndexOf","startInline","_Renderer","infostring","quote","listitem","checkbox","tablerow","tablecell","flags","strong","em","cleanHref","out","image","_TextRenderer","_Parser","textRenderer","parseInline","renderers","genericToken","ret","parser","headingToken","codeToken","tableToken","blockquoteToken","listToken","itemBody","htmlToken","paragraphToken","textToken","escapeToken","tagToken","linkToken","imageToken","strongToken","emToken","codespanToken","delToken","_Hooks","static","preprocess","markdown","postprocess","processAllTokens","markedInstance","defaults","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","callback","concat","childTokens","pack","opts","ext","prevRenderer","apply","extLevel","prop","rendererProp","rendererFunc","tokenizerProp","tokenizerFunc","prevTokenizer","hooksProp","hooksFunc","prevHook","passThroughHooks","arg","resolve","packWalktokens","origOpt","warn","throwError","onError","all","message","msg","marked","getDefaults","ACCEPTED_IMAGE_TYPES","KRChatbot","_reader","_decoder","TextDecoder","_buffer","_userHasScrolledUp","_isDragging","_isResizing","_overlay","_resizeDir","_dragStartX","_dragStartY","_dragStartLeft","_dragStartTop","_resizeStartW","_resizeStartH","_dragDepth","_pendingSeq","send","load","messages","subtitle","placeholder","opened","hideToggle","_inputValue","_isStreaming","_statusText","_error","_pendingAttachments","_isDraggingFile","_handleMouseMove","newLeft","newTop","_panelEl","offsetWidth","innerWidth","innerHeight","dx","dy","minW","minH","maxW","maxH","newW","newH","width","_handleMouseUp","_hideOverlay","_saveState","_restoreState","cancel","URL","revokeObjectURL","previewUrl","changed","_messagesEl","_inputEl","focus","stop","_handleStop","_handleToggle","toggle","_showOverlay","display","_handleHeaderMouseDown","closest","_handleResizeMouseDown","currentTarget","dataset","dir","stopPropagation","_applyStoredLayout","_handleInputChange","textarea","_handleKeyDown","shiftKey","_handleSubmit","_openFilePicker","_fileInputEl","click","_handleFileInputChange","input","files","_addFiles","_handlePaste","clipboardData","file","getAsFile","_handleDragEnter","_hasFiles","_handleDragOver","_handleDragLeave","_handleDrop","dataTransfer","from","types","fileList","pending","localId","createObjectURL","_removePending","_clearPending","_openAttachment","att","KRFilePreview","_canSend","messageText","attachments","mimeType","submitEvent","userMessage","role","minHeight","allMsgEls","userMsgEl","assistantMsgEl","clientHeight","offsetTop","ok","getReader","_readStreamChunk","_handleStreamError","status","err","_handleClear","_handleMessagesScroll","container","distanceFromBottom","_handleErrorDismiss","read","done","decode","stream","events","lines","reasoning","finished","lastMessage","panel"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,18,19,20]}