obi-sdk 0.1.2 → 0.1.3

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":"ui.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/property.js","../../node_modules/@lit/reactive-element/decorators/state.js","../../src/ui/components/nav-icon.ts","../../src/ui/components/icons.ts","../../src/ui/components/navigation-bar.ts","../../src/ui/components/courses/courses.ts","../../src/ui/components/courses/course-modal.ts","../../node_modules/lit-html/directive-helpers.js","../../node_modules/lit-html/directive.js","../../node_modules/lit-html/async-directive.js","../../node_modules/lit-html/directives/ref.js","../../src/ui/components/audio-equalizer.ts","../../src/ui/components/dot-loader.ts","../../src/ui/components/searching-loader.ts","../../src/ui/components/obi-widget.ts","../../src/ui/components/status-widget.ts","../../src/ui/components/control-panel.ts","../../src/ui/components/index.ts"],"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,this[e]=h.fromAttribute(s,t.type)??this._$Ej?.get(e)??null,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$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.0\");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.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=\"$lit$\",h=`lit$${Math.random().toFixed(9).slice(2)}$`,o=\"?\"+h,n=`<${o}>`,r=document,l=()=>r.createComment(\"\"),c=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,a=Array.isArray,u=t=>a(t)||\"function\"==typeof t?.[Symbol.iterator],d=\"[ \\t\\n\\f\\r]\",f=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\\\s\"'>=/]+)(${d}*=${d}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),p=/'/g,g=/\"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),b=y(2),w=y(3),T=Symbol.for(\"lit-noChange\"),E=Symbol.for(\"lit-nothing\"),A=new WeakMap,C=r.createTreeWalker(r,129);function P(t,i){if(!a(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==s?s.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=f;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,y=0;for(;y<s.length&&(c.lastIndex=y,u=c.exec(s),null!==u);)y=c.lastIndex,c===f?\"!--\"===u[1]?c=v:void 0!==u[1]?c=_:void 0!==u[2]?($.test(u[2])&&(r=RegExp(\"</\"+u[2],\"g\")),c=m):void 0!==u[3]&&(c=m):c===m?\">\"===u[0]?(c=r??f,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'\"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===f?s+n:d>=0?(o.push(a),s.slice(0,d)+e+s.slice(d)+h+x):s+h+(-2===d?i:x)}return[P(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),o]};class N{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=V(t,s);if(this.el=N.createElement(f,n),C.currentNode=this.el.content,2===s||3===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=C.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(e)){const i=v[a++],s=r.getAttribute(t).split(h),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:c,name:e[2],strings:s,ctor:\".\"===e[1]?H:\"?\"===e[1]?I:\"@\"===e[1]?L:k}),r.removeAttribute(t)}else t.startsWith(h)&&(d.push({type:6,index:c}),r.removeAttribute(t));if($.test(r.tagName)){const t=r.textContent.split(h),s=t.length-1;if(s>0){r.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)r.append(t[i],l()),C.nextNode(),d.push({type:2,index:++c});r.append(t[s],l())}}}else if(8===r.nodeType)if(r.data===o)d.push({type:2,index:c});else{let t=-1;for(;-1!==(t=r.data.indexOf(h,t+1));)d.push({type:7,index:c}),t+=h.length-1}c++}}static createElement(t,i){const s=r.createElement(\"template\");return s.innerHTML=t,s}}function S(t,i,s=t,e){if(i===T)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=c(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=S(t,h._$AS(t,i.values),h,e)),i}class M{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??r).importNode(i,!0);C.currentNode=e;let h=C.nextNode(),o=0,n=0,l=s[0];for(;void 0!==l;){if(o===l.index){let i;2===l.type?i=new R(h,h.nextSibling,this,t):1===l.type?i=new l.ctor(h,l.name,l.strings,this,t):6===l.type&&(i=new z(h,this,t)),this._$AV.push(i),l=s[++n]}o!==l?.index&&(h=C.nextNode(),o++)}return C.currentNode=r,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 R{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=E,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=S(this,t,i),c(t)?t===E||null==t||\"\"===t?(this._$AH!==E&&this._$AR(),this._$AH=E):t!==this._$AH&&t!==T&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):u(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!==E&&c(this._$AH)?this._$AA.nextSibling.data=t:this.T(r.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=N.createElement(P(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new M(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new N(t)),i}k(t){a(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 R(this.O(l()),this.O(l()),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,i){for(this._$AP?.(!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class k{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=E,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=E}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=S(this,t,i,0),o=!c(t)||t!==this._$AH&&t!==T,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=S(this,e[s+n],i,n),r===T&&(r=this._$AH[n]),o||=!c(r)||r!==this._$AH[n],r===E?t=E:t!==E&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class H extends k{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===E?void 0:t}}class I extends k{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==E)}}class L extends k{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=S(this,t,i,0)??E)===T)return;const s=this._$AH,e=t===E&&s!==E||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==E&&(s===E||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){S(this,t)}}const Z={M:e,P:h,A:o,C:1,L:V,R:M,D:u,V:S,I:R,H:k,N:I,U:L,B:H,F:z},j=t.litHtmlPolyfillSupport;j?.(N,R),(t.litHtmlVersions??=[]).push(\"3.3.0\");const B=(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 R(i.insertBefore(l(),t),t,void 0,s??{})}return h._$AI(t),h};export{Z as _$LH,x as html,w as mathml,T as noChange,E as nothing,B as render,b 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.0\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{defaultConverter as t,notEqual 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:t,reflect:!1,hasChanged:e},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)},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)}}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 { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nexport class NavIcon extends LitElement {\n static styles = css`\n :host {\n display: block;\n }\n\n button {\n display: flex;\n height: 40px;\n width: 40px;\n align-items: center;\n justify-content: center;\n border-radius: 2px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n transition: all 0.2s;\n cursor: pointer;\n margin: 4px 0;\n padding: 0;\n border: none;\n color: black;\n }\n\n button.special {\n color: #fff;\n background-color: #000;\n }\n\n button.special svg {\n stroke: #fff;\n }\n\n button.special.active {\n background-color: black;\n color: white;\n }\n\n button.special.active:hover {\n background-color: #27272a;\n }\n\n button:not(.special) {\n background-color: white;\n color: black;\n }\n\n button:not(.special):hover {\n background-color: #e5e5e5;\n }\n\n ::slotted(*) {\n width: 18px;\n height: 18px;\n }\n `\n\n @property({ type: String })\n id: string = \"\"\n\n @property({ type: Boolean })\n isActive: boolean = false\n\n @property({ type: Boolean })\n isSpecial: boolean = false\n\n @property({ type: Function })\n onClick?: (id: string, isActive: boolean) => void\n\n private handleClick(e: Event) {\n e.preventDefault()\n e.stopPropagation()\n\n const event = new CustomEvent(\"click\", {\n detail: {\n id: this.id,\n isActive: !this.isActive,\n },\n bubbles: true,\n composed: true,\n })\n this.dispatchEvent(event)\n\n if (this.onClick) {\n this.onClick(this.id, !this.isActive)\n }\n }\n\n render() {\n return html`\n <button\n id=\"obi-nav-${this.id}\"\n class=${this.isSpecial ? \"special\" : \"\"}\n ?active=${this.isActive}\n @click=${this.handleClick}\n aria-label=\"${this.id} control\"\n >\n <slot></slot>\n </button>\n `\n }\n}\n\nif (!customElements.get(\"obi-nav-icon\")) {\n customElements.define(\"obi-nav-icon\", NavIcon)\n}\n","import { html, svg } from \"lit\"\n\n// Icon utilities\nconst svgWrapper = (content: any) => html`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide\"\n style=\"display: block;\"\n >\n ${content}\n </svg>\n`\n\n// Icons\nexport const pauseIcon = svgWrapper(svg`\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\"/><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\"/>\n`)\n\nexport const playIcon = svgWrapper(svg`<polygon points=\"6 3 20 12 6 21 6 3\"/>`)\n\nexport const powerIcon = svgWrapper(svg`\n <path d=\"M12 2v10\"/><path d=\"M18.4 6.6a9 9 0 1 1-12.77.04\"/>\n`)\n\nexport const closeIcon = svgWrapper(svg`\n <path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>\n`)\n\nexport const bookOpenIcon = svgWrapper(svg`\n <path d=\"M12 7v14\" />\n <path\n d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"\n />\n`)\n\nexport const obiIcon = html`\n <img\n class=\"widget-icon\"\n src=\"data:image/svg+xml;base64,${btoa(`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"obi-icon\">\n <g id=\"Subtract\">\n <path d=\"M15.5845 9.29177L8.20527 5.00637L8.20527 13.4502L15.5845 17.7356L15.5845 9.29177Z\" fill=\"white\" />\n <path d=\"M15.5896 27.7146L8.21035 31.9994L8.21032 23.4698L15.5896 19.1843L15.5896 27.7146Z\" fill=\"white\" />\n <path d=\"M16.4104 27.7146L16.4104 19.1786L23.7897 23.4641L23.7897 32L16.4104 27.7146Z\" fill=\"white\" />\n <path d=\"M32 27.7142L24.6207 31.9996L24.6207 23.47L32 19.1846L32 27.7142Z\" fill=\"white\" />\n <path d=\"M24.2048 22.748L31.5911 18.4585L24.2845 14.2154L16.8983 18.5048L24.2048 22.748Z\" fill=\"white\" />\n <path d=\"M23.7948 5.01235L23.7948 13.4564L16.4156 17.7418L16.4156 9.29775L23.7948 5.01235Z\" fill=\"white\" />\n <path d=\"M16.0052 0L23.3865 4.2866L16.0003 8.57606L8.61897 4.28946L16.0052 0Z\" fill=\"white\" />\n <path d=\"M7.72042 14.2182L15.1017 18.5048L7.79445 22.7477L0.413699 18.4615L7.72042 14.2182Z\" fill=\"white\" />\n <path d=\"M7.37926 31.9997L7.37926 23.4638L0 19.1784L3.79636e-05 27.7143L7.37926 31.9997Z\" fill=\"white\" />\n </g>\n </g>\n </svg>`)}\"\n alt=\"Obi Icon\"\n />\n`\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\nimport { SDKState } from \"../../core/types\"\nimport \"./nav-icon\"\nimport { pauseIcon, playIcon, powerIcon, closeIcon, bookOpenIcon } from \"./icons\"\n\nexport class NavigationBar extends LitElement {\n static styles = css`\n :host {\n display: flex;\n position: absolute;\n z-index: 10000;\n width: 40px;\n transition: all 0.2s ease-in-out;\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n background-color: #fff;\n }\n\n :host([data-direction=\"up\"]) {\n bottom: 64px;\n top: auto;\n flex-direction: column-reverse;\n }\n\n :host([data-direction=\"down\"]) {\n top: 64px;\n bottom: auto;\n flex-direction: column;\n }\n `\n\n @property({ type: Boolean })\n isActive = false\n\n @property({ type: Boolean })\n isScreenActive = false\n\n @property({ type: Object })\n position = { top: 0, left: 0 }\n\n @property({ type: String })\n currentState: SDKState = SDKState.READY\n\n @property({ type: String })\n direction: \"up\" | \"down\" = \"up\"\n\n @property({ type: Function })\n onItemSelect?: (id: string, isActive: boolean) => void\n\n constructor() {\n super()\n }\n\n connectedCallback() {\n super.connectedCallback()\n }\n\n private handleIconClick(id: string, isActive: boolean) {\n if (this.onItemSelect) {\n this.onItemSelect(id, isActive)\n }\n }\n\n render() {\n return html`\n ${this.isActive\n ? html`\n <obi-nav-icon\n id=\"pause\"\n ?isActive=${this.currentState === SDKState.PAUSED}\n @click=${() =>\n this.handleIconClick(\"pause\", this.currentState === SDKState.PAUSED ? false : true)}\n >\n ${this.currentState === SDKState.PAUSED ? playIcon : pauseIcon}\n </obi-nav-icon>\n <obi-nav-icon\n id=\"activate\"\n ?isActive=${this.isActive}\n ?isSpecial=${true}\n @click=${() => this.handleIconClick(\"activate\", this.isActive ? false : true)}\n >\n ${this.isActive ? closeIcon : powerIcon}\n </obi-nav-icon>\n `\n : html`\n <obi-nav-icon\n id=\"experiences\"\n @click=${() => this.handleIconClick(\"experiences\", true)}\n >\n ${bookOpenIcon}\n </obi-nav-icon>\n `}\n `\n }\n}\n\nif (!customElements.get(\"obi-navigation-bar\")) {\n customElements.define(\"obi-navigation-bar\", NavigationBar)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nexport type CourseData = {\n id: string\n name: string\n description: string\n imageSrc: string\n}\n\nexport class Course extends LitElement {\n static styles = css`\n :host {\n display: block;\n }\n\n .course-container {\n padding: 16px 12px;\n gap: 12px;\n border-radius: 4px;\n border: 1px solid #e5e7eb;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .course-container:hover {\n background-color: #f9fafb;\n border-color: #d1d5db;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n\n .course-container:active {\n transform: scale(0.98);\n }\n\n .course-image {\n max-height: 160px;\n border-radius: 2px;\n border: 1px solid #e5e7eb;\n object-fit: cover;\n width: 100%;\n margin-bottom: 12px;\n }\n\n .course-title {\n font-size: 14px;\n font-weight: bold;\n margin: 0;\n margin-bottom: 12px;\n }\n\n .course-description {\n font-size: 14px;\n color: #71717a;\n margin: 0;\n }\n `\n\n @property({ type: String })\n id: string = \"\"\n\n @property({ type: String })\n name: string = \"\"\n\n @property({ type: String })\n description: string = \"\"\n\n @property({ type: String })\n imageSrc: string = \"\"\n\n @property({ type: Function })\n onSelect?: (id: string) => void\n\n private handleClick() {\n if (this.onSelect) {\n this.onSelect(this.id)\n }\n\n this.dispatchEvent(\n new CustomEvent(\"course-select\", {\n detail: { id: this.id },\n bubbles: true,\n composed: true,\n })\n )\n }\n\n render() {\n return html`\n <div class=\"course-container\" @click=${this.handleClick}>\n <img src=${this.imageSrc} alt=\"Course Preview\" class=\"course-image\" />\n <h2 class=\"course-title\">${this.name}</h2>\n ${this.description ? html`<p class=\"course-description\">${this.description}</p>` : \"\"}\n </div>\n `\n }\n}\n\nexport class CourseList extends LitElement {\n static styles = css`\n :host {\n display: block;\n }\n\n .course-grid {\n display: grid;\n gap: 12px;\n margin-top: 24px;\n }\n\n .course-grid.grid-cols-1 {\n grid-template-columns: 1fr;\n }\n\n .course-grid.grid-cols-2 {\n grid-template-columns: 1fr 1fr;\n }\n\n .course-grid.grid-cols-3 {\n grid-template-columns: 1fr 1fr 1fr;\n }\n\n .loading,\n .error,\n .empty {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 16px;\n }\n\n .error {\n color: #ef4444;\n }\n `\n\n @property({ type: Array })\n courses: CourseData[] = []\n\n @property({ type: Boolean })\n loading = false\n\n @property({ type: String })\n error = \"\"\n\n @property({ type: Function })\n onCourseSelect?: (id: string) => void\n\n private handleCourseSelect(e: CustomEvent) {\n if (this.onCourseSelect) {\n this.onCourseSelect(e.detail.id)\n }\n }\n\n render() {\n if (this.loading) {\n return html`<div class=\"loading\">Loading...</div>`\n }\n\n if (this.error) {\n return html`<div class=\"error\">${this.error}</div>`\n }\n\n if (!this.courses || this.courses.length === 0) {\n return html`<div class=\"empty\">No courses available</div>`\n }\n\n const gridClass =\n this.courses.length === 1\n ? \"grid-cols-1\"\n : this.courses.length === 2\n ? \"grid-cols-2\"\n : \"grid-cols-3\"\n\n return html`\n <div class=\"course-grid ${gridClass}\">\n ${this.courses.map(\n (course: CourseData) => html`\n <obi-course\n id=${course.id}\n name=${course.name}\n description=${course.description || \"\"}\n imageSrc=${course.imageSrc}\n @course-select=${this.handleCourseSelect}\n ></obi-course>\n `\n )}\n </div>\n `\n }\n}\n\n// Register the custom elements\nif (!customElements.get(\"obi-course\")) {\n customElements.define(\"obi-course\", Course)\n}\n\nif (!customElements.get(\"obi-course-list\")) {\n customElements.define(\"obi-course-list\", CourseList)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { CourseData } from \"./courses\"\nimport \"./courses\"\n\nexport class CourseModal extends LitElement {\n static styles = css`\n :host {\n display: block;\n font-family: \"Syne\", sans-serif;\n }\n\n .backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: black;\n opacity: 0.7;\n z-index: 40;\n }\n\n .container {\n position: fixed;\n background-color: white;\n color: black;\n border: 1px solid #e5e7eb;\n width: 640px;\n max-height: 80vh;\n overflow-y: auto;\n padding: 48px;\n gap: 12px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 4px;\n z-index: 50;\n display: flex;\n flex-direction: column;\n text-align: center;\n }\n\n .container:hover {\n cursor: auto;\n }\n\n .container::-webkit-scrollbar {\n width: 0.5rem;\n }\n\n .container::-webkit-scrollbar-track {\n background-color: #f3f4f6;\n border-radius: 9999px;\n }\n\n .container::-webkit-scrollbar-thumb {\n background-color: #d1d5db;\n border-radius: 9999px;\n }\n\n .header {\n margin-bottom: 24px;\n text-align: center;\n }\n\n h1 {\n font-size: 32px;\n font-weight: 700;\n margin: 0;\n margin-bottom: 8px;\n }\n\n .subtitle {\n font-size: 20px;\n color: rgb(113 113 122 / 1);\n margin: 0;\n }\n\n .close-button {\n position: absolute;\n top: 16px;\n right: 16px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 24px;\n color: #6b7280;\n }\n `\n\n @property({ type: Array })\n courses: CourseData[] = []\n\n @property({ type: Boolean })\n loading = true\n\n @property({ type: String })\n error = \"\"\n\n @property({ type: String })\n apiBaseUrl = \"\"\n\n @property({ type: String })\n apiKey = \"\"\n\n @property({ type: Function })\n onCourseSelect?: (id: string) => void\n\n @property({ type: Function })\n onClose?: () => void\n\n private handleCourseSelect(e: CustomEvent) {\n if (this.onCourseSelect) {\n this.onCourseSelect(e.detail.id)\n }\n }\n\n private handleClose() {\n if (this.onClose) {\n this.onClose()\n }\n }\n\n private async fetchCourses() {\n try {\n this.loading = true\n const raw_response = await fetch(`${this.apiBaseUrl}/sessions?token=${this.apiKey}`)\n const response = await raw_response.json()\n const mappedCourses = response.map((session: any) => ({\n id: session.uuid,\n name: session.onboarding_plan.name,\n description: session.onboarding_plan.description,\n imageSrc:\n session.onboarding_plan.screen_url ||\n \"https://corproductionsydney-storagebucket5cb7c8ea-atg4gmftc6sk.s3.amazonaws.com/static/generic-course.png\",\n }))\n const filteredCourses = mappedCourses.filter((course: CourseData) => !!course.name)\n this.courses = [...filteredCourses] // Create a new array to ensure property update detection\n this.requestUpdate() // Explicitly request an update\n } catch (err) {\n console.error(\"Fetch error:\", err)\n this.error = \"Failed to fetch courses\"\n } finally {\n this.loading = false\n this.requestUpdate() // Ensure UI updates after loading changes\n }\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n // Get the API key from window.obiWidgetConfig if available\n if (window.obiWidgetConfig?.apiKey) {\n this.apiKey = window.obiWidgetConfig.apiKey\n }\n\n // Get the API base URL from window.obiWidgetConfig if available\n if (window.obiWidgetConfig?.apiBaseUrl) {\n this.apiBaseUrl = window.obiWidgetConfig.apiBaseUrl\n }\n\n if (this.apiBaseUrl && this.apiKey) {\n this.fetchCourses()\n } else {\n this.loading = false\n this.error = \"API base URL or API key is missing\"\n }\n }\n\n render() {\n return html`\n <div class=\"backdrop\" @click=${this.handleClose}></div>\n <div class=\"container\">\n <button class=\"close-button\" @click=${this.handleClose}>×</button>\n <div class=\"header\">\n <h1>Give Obi a try!</h1>\n <p class=\"subtitle\">Pick a tour, share your screen, and Obi will take it from there.</p>\n </div>\n\n <obi-course-list\n .courses=${this.courses}\n .loading=${this.loading}\n .error=${this.error}\n @course-select=${this.handleCourseSelect}\n ></obi-course-list>\n </div>\n `\n }\n}\n\nif (!customElements.get(\"obi-course-modal\")) {\n customElements.define(\"obi-course-modal\", CourseModal)\n}\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,n={HTML:1,SVG:2,MATHML:3},e=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,l=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,d=o=>o?._$litDirective$,f=o=>void 0===o.strings,s=()=>document.createComment(\"\"),r=(o,i,n)=>{const e=o._$AA.parentNode,l=void 0===i?o._$AB:i._$AA;if(void 0===n){const i=e.insertBefore(s(),l),c=e.insertBefore(s(),l);n=new t(i,c,o,o.options)}else{const t=n._$AB.nextSibling,i=n._$AM,c=i!==o;if(c){let t;n._$AQ?.(o),n._$AM=o,void 0!==n._$AP&&(t=o._$AU)!==i._$AU&&n._$AP(t)}if(t!==l||c){let o=n._$AA;for(;o!==t;){const t=o.nextSibling;e.insertBefore(o,l),o=t}}}return n},v=(o,t,i=o)=>(o._$AI(t,i),o),u={},m=(o,t=u)=>o._$AH=t,p=o=>o._$AH,M=o=>{o._$AP?.(!1,!0);let t=o._$AA;const i=o._$AB.nextSibling;for(;t!==i;){const o=t.nextSibling;t.remove(),t=o}},h=o=>{o._$AR()};export{n as TemplateResultType,h as clearPart,p as getCommittedValue,d as getDirectiveClass,r as insertPart,l as isCompiledTemplateResult,c as isDirectiveResult,i as isPrimitive,f as isSingleExpression,e as isTemplateResult,M as removePart,v as setChildPartValue,m as setCommittedValue};\n//# sourceMappingURL=directive-helpers.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{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new h;class h{}const o=new WeakMap,n=s(class extends i{render(i){return t}update(i,[s]){const e=s!==this.G;return e&&void 0!==this.G&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=s,this.ht=i.options?.host,this.rt(this.ct=i.element)),t}rt(t){if(this.isConnected||(t=void 0),\"function\"==typeof this.G){const i=this.ht??globalThis;let s=o.get(i);void 0===s&&(s=new WeakMap,o.set(i,s)),void 0!==s.get(this.G)&&this.G.call(this.ht,void 0),s.set(this.G,t),void 0!==t&&this.G.call(this.ht,t)}else this.G.value=t}get lt(){return\"function\"==typeof this.G?o.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","import { LitElement, html, css } from \"lit\"\nimport { property, state } from \"lit/decorators.js\"\nimport { ref, createRef, Ref } from \"lit/directives/ref.js\"\n\ninterface VolumeData {\n speaker: \"USER\" | \"ASSISTANT\"\n volume: number\n spectrum: number[]\n}\n\nexport class AudioEqualizer extends LitElement {\n @property({ type: Object })\n volume: VolumeData = { speaker: \"ASSISTANT\", volume: 0, spectrum: [] }\n\n @state()\n private canvasRef: Ref<HTMLCanvasElement> = createRef()\n\n private barCount = 8\n private animationFrame: number | null = null\n\n static styles = css`\n :host {\n display: block;\n width: 40px;\n height: 40px;\n margin: 4px;\n }\n\n canvas {\n width: 100%;\n height: 100%;\n }\n `\n\n connectedCallback() {\n super.connectedCallback()\n this.startAnimation()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.stopAnimation()\n }\n\n private startAnimation() {\n const animate = () => {\n this.drawEqualizer()\n this.animationFrame = requestAnimationFrame(animate)\n }\n this.animationFrame = requestAnimationFrame(animate)\n }\n\n private stopAnimation() {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame)\n this.animationFrame = null\n }\n }\n\n private drawEqualizer() {\n const canvas = this.canvasRef.value\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n // Handle high DPI displays\n const dpr = window.devicePixelRatio || 1\n const displayWidth = canvas.clientWidth\n const displayHeight = canvas.clientHeight\n\n // Set canvas size to match display size * DPR\n canvas.width = displayWidth * dpr\n canvas.height = displayHeight * dpr\n\n // Scale context to match DPR\n ctx.scale(dpr, dpr)\n\n // Clear the canvas\n ctx.clearRect(0, 0, displayWidth, displayHeight)\n\n // Calculate bar dimensions\n const gap = 3\n const barWidth = Math.max(1, (displayWidth - (this.barCount - 1) * gap) / this.barCount)\n const barMaxHeight = displayHeight / 2\n\n // Determine current volume and spectrum based on who is speaking\n const currentVolume = this.volume.speaker === \"USER\" ? this.volume.volume : this.volume.volume\n const currentSpectrum =\n this.volume.speaker === \"USER\" ? this.volume.spectrum : this.volume.spectrum\n\n if (currentVolume === 0) return\n\n // Process spectrum to match our bar count\n let processedSpectrum: number[] = []\n if (currentSpectrum && currentSpectrum.length > 0) {\n const spectrumLength = currentSpectrum.length\n const regionSize = Math.ceil(spectrumLength / 10)\n let energyByRegion = []\n\n for (let i = 0; i < 10; i++) {\n const start = i * regionSize\n const end = Math.min((i + 1) * regionSize, spectrumLength)\n let regionEnergy = 0\n for (let j = start; j < end; j++) {\n regionEnergy += currentSpectrum[j] || 0\n }\n energyByRegion.push({ region: i, startIdx: start, endIdx: end, energy: regionEnergy })\n }\n\n energyByRegion.sort((a, b) => b.energy - a.energy)\n const topRegions = energyByRegion.slice(0, 3)\n const startIdx = Math.min(...topRegions.map((r) => r.startIdx))\n const endIdx = Math.max(...topRegions.map((r) => r.endIdx))\n\n if (endIdx > startIdx) {\n for (let i = 0; i < this.barCount; i++) {\n const position = startIdx + (i / (this.barCount - 1)) * (endIdx - startIdx)\n const index = Math.min(spectrumLength - 1, Math.floor(position))\n processedSpectrum[i] = currentSpectrum[index] || 0\n }\n } else {\n for (let i = 0; i < this.barCount; i++) {\n const position = (i / (this.barCount - 1)) * (spectrumLength / 2)\n const index = Math.min(spectrumLength - 1, Math.floor(position))\n processedSpectrum[i] = currentSpectrum[index] || 0\n }\n }\n\n const maxSpectrumValue = Math.max(...processedSpectrum, 1)\n const amplificationFactorRoot = this.volume.speaker === \"USER\" ? 0.7 : 0.6\n\n processedSpectrum = processedSpectrum.map((value, index) => {\n const relativeValue = value / maxSpectrumValue\n const amplificationFactor = amplificationFactorRoot + (index / (this.barCount - 1)) * 0.3\n return Math.min(1, relativeValue * amplificationFactor)\n })\n } else {\n if (this.volume.speaker !== \"USER\") {\n for (let i = 0; i < this.barCount; i++) {\n const time = Date.now() * 0.002\n const value = 0.3 + 0.2 * Math.sin(time + i * 0.7)\n processedSpectrum[i] = value\n }\n }\n }\n\n // Draw each bar\n for (let i = 0; i < this.barCount; i++) {\n const spectrumValue =\n processedSpectrum.length > 0\n ? processedSpectrum[i] !== undefined\n ? processedSpectrum[i]\n : currentVolume\n : currentVolume\n\n if (this.volume.speaker === \"USER\") {\n ctx.fillStyle = `rgba(109, 40, 217, ${spectrumValue * 0.5 + 0.5})`\n } else {\n ctx.fillStyle = `rgba(255, 255, 255, ${spectrumValue * 0.5 + 0.5})`\n }\n\n const barHeight = Math.max(2, spectrumValue * 0.8 * barMaxHeight)\n const x = displayWidth - (this.barCount - i) * (barWidth + gap)\n const radius = barWidth / 2\n\n // Top bar\n ctx.beginPath()\n ctx.moveTo(x + radius, displayHeight / 2 - barHeight)\n ctx.lineTo(x + barWidth - radius, displayHeight / 2 - barHeight)\n ctx.quadraticCurveTo(\n x + barWidth,\n displayHeight / 2 - barHeight,\n x + barWidth,\n displayHeight / 2 - barHeight + radius\n )\n ctx.lineTo(x + barWidth, displayHeight / 2)\n ctx.lineTo(x, displayHeight / 2)\n ctx.lineTo(x, displayHeight / 2 - barHeight + radius)\n ctx.quadraticCurveTo(\n x,\n displayHeight / 2 - barHeight,\n x + radius,\n displayHeight / 2 - barHeight\n )\n ctx.fill()\n\n // Bottom bar\n ctx.beginPath()\n ctx.moveTo(x, displayHeight / 2)\n ctx.lineTo(x + barWidth, displayHeight / 2)\n ctx.lineTo(x + barWidth, displayHeight / 2 + barHeight - radius)\n ctx.quadraticCurveTo(\n x + barWidth,\n displayHeight / 2 + barHeight,\n x + barWidth - radius,\n displayHeight / 2 + barHeight\n )\n ctx.lineTo(x + radius, displayHeight / 2 + barHeight)\n ctx.quadraticCurveTo(\n x,\n displayHeight / 2 + barHeight,\n x,\n displayHeight / 2 + barHeight - radius\n )\n ctx.lineTo(x, displayHeight / 2)\n ctx.fill()\n }\n }\n\n render() {\n return html` <canvas ${ref(this.canvasRef)} width=\"52\" height=\"52\"></canvas> `\n }\n}\n\nif (!customElements.get(\"obi-audio-equalizer\")) {\n customElements.define(\"obi-audio-equalizer\", AudioEqualizer)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { state } from \"lit/decorators.js\"\n\nexport class DotLoader extends LitElement {\n @state()\n private activeDots: boolean[] = Array(5).fill(false)\n\n private numDots = 5\n private containerWidth = 32\n private dotSize = 2\n private bounceHeight = 12\n private animationDuration = 200\n private pauseDuration = 300\n private overlapFactor = 0.7\n private color = \"#FFF\"\n private timeoutIds: number[] = []\n\n static styles = css`\n :host {\n display: block;\n }\n\n .dot-loader {\n display: flex;\n flex-direction: row;\n width: var(--dot-loader-width, 32px);\n height: 14px;\n justify-content: center;\n align-items: center;\n padding: 0;\n margin: 0;\n gap: 4px;\n }\n\n .dot {\n width: var(--dot-size, 2px);\n height: var(--dot-size, 2px);\n border-radius: 50%;\n background-color: var(--dot-color, #fff);\n margin: 0;\n padding: 0;\n transition: transform 0.2s ease-in-out;\n opacity: 1;\n }\n `\n\n connectedCallback() {\n super.connectedCallback()\n this.startAnimation()\n // Set CSS custom properties\n this.style.setProperty(\"--dot-loader-width\", `${this.containerWidth}px`)\n this.style.setProperty(\"--dot-size\", `${this.dotSize}px`)\n this.style.setProperty(\"--dot-color\", this.color)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.stopAnimation()\n }\n\n private startAnimation() {\n this.animateSequence()\n }\n\n private stopAnimation() {\n this.timeoutIds.forEach((id) => window.clearTimeout(id))\n this.timeoutIds = []\n }\n\n private animateSequence() {\n // Reset all dots\n this.activeDots = Array(this.numDots).fill(false)\n\n // Animate each dot with overlap\n for (let i = 0; i < this.numDots; i++) {\n const delay = i * (this.animationDuration * this.overlapFactor)\n\n // Start the dot's bounce\n const bounceStartId = window.setTimeout(() => {\n this.activeDots = [...this.activeDots]\n this.activeDots[i] = true\n\n // End the dot's bounce\n const bounceEndId = window.setTimeout(() => {\n this.activeDots = [...this.activeDots]\n this.activeDots[i] = false\n }, this.animationDuration)\n\n this.timeoutIds.push(bounceEndId)\n }, delay)\n\n this.timeoutIds.push(bounceStartId)\n }\n\n // Schedule the next sequence\n const nextSequenceId = window.setTimeout(\n () => {\n this.animateSequence()\n },\n this.numDots * this.animationDuration * this.overlapFactor + this.pauseDuration\n )\n\n this.timeoutIds.push(nextSequenceId)\n }\n\n render() {\n return html`\n <div class=\"dot-loader\">\n ${this.activeDots.map(\n (isActive) => html`\n <div\n class=\"dot\"\n style=\"transform: ${isActive\n ? `translateY(-${this.bounceHeight}px)`\n : \"translateY(0)\"}\"\n ></div>\n `\n )}\n </div>\n `\n }\n}\n\nif (!customElements.get(\"obi-dot-loader\")) {\n customElements.define(\"obi-dot-loader\", DotLoader)\n}\n","import { LitElement, html, css } from \"lit\"\n\nexport class SearchingLoader extends LitElement {\n static styles = css`\n :host {\n display: flex;\n align-items: center;\n gap: 12px;\n background-color: #7c3aed;\n border-radius: 12px;\n padding: 8px 12px;\n }\n\n .text {\n color: white;\n font-weight: 500;\n font-size: 14px;\n }\n `\n\n render() {\n return html`\n <obi-dot-loader loading style=\"margin-left: 2px\"></obi-dot-loader>\n <span class=\"text\">Searching the knowledge base</span>\n `\n }\n}\n\nif (!customElements.get(\"obi-searching-loader\")) {\n customElements.define(\"obi-searching-loader\", SearchingLoader)\n}\n","import { LitElement, html, css, nothing } from \"lit\"\nimport { property, state } from \"lit/decorators.js\"\nimport { match, P } from \"ts-pattern\"\n\nimport type { ObiSession } from \"../../core/session\"\nimport { SDKState } from \"../../core/types\"\n\nimport \"./navigation-bar\"\nimport \"./courses\"\nimport \"./audio-equalizer\"\nimport \"./dot-loader\"\nimport \"./searching-loader\"\nimport { obiIcon } from \"./icons\"\n\nconst API_BASE_URL = \"https://iamobi.ai/api\"\n\nexport class ObiWidget extends LitElement {\n @property({ type: String }) apiBaseUrl = API_BASE_URL\n @property({ type: String }) apiKey = \"\"\n @property({ type: String }) position = \"bottom-right\"\n\n @state() private state: SDKState = SDKState.READY\n @state() private showCourseModal = false\n @state() private isHovering = false\n @state() private navVisible = false\n @state() private activeSession: ObiSession | null = null\n @state() private volume: { speaker: \"USER\" | \"ASSISTANT\"; volume: number; spectrum: number[] } = {\n speaker: \"ASSISTANT\",\n volume: 0,\n spectrum: [],\n }\n\n calculateScreenPosition() {\n return match(this.position)\n .with(\"top-right\", () => ({ top: 20, left: window.innerWidth - 100 }))\n .with(\"bottom-right\", () => ({\n top: window.innerHeight - 100,\n left: window.innerWidth - 100,\n }))\n .with(\"top-left\", () => ({ top: 20, left: 20 }))\n .with(\"bottom-left\", () => ({ top: window.innerHeight - 100, left: 20 }))\n .otherwise(() => ({ top: window.innerHeight - 100, left: window.innerWidth - 100 }))\n }\n\n @state() private screenPosition = this.calculateScreenPosition()\n\n private closeNavTimeoutRef: number | null = null\n\n constructor() {\n super()\n if (window.obiWidgetConfig) {\n if (window.obiWidgetConfig.apiKey) {\n this.apiKey = window.obiWidgetConfig.apiKey\n }\n\n if (window.obiWidgetConfig.apiBaseUrl) {\n this.apiBaseUrl = window.obiWidgetConfig.apiBaseUrl\n }\n\n if (window.obiWidgetConfig.position) {\n this.position = window.obiWidgetConfig.position\n }\n }\n }\n\n static styles = css`\n :host {\n display: block;\n position: fixed;\n z-index: 9999;\n font-family: Arial, sans-serif;\n --obi-primary: #7c3aed;\n --obi-danger: #ef4444;\n --obi-gray: #6b7280;\n }\n\n .widget-container {\n position: fixed;\n width: 56px;\n height: 56px;\n border-radius: 28px;\n border-color: transparent;\n background-color: var(--obi-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: all 0.2s ease-out;\n }\n\n .widget-container.user-speaking {\n background:\n linear-gradient(0deg, #c4b5fd, #c4b5fd),\n linear-gradient(195.84deg, rgba(192, 132, 252, 0) 11.05%, #c084fc 117.01%);\n }\n\n .widget-container:hover {\n border-radius: 12px;\n }\n\n .widget-container.rounded {\n border-radius: 12px;\n }\n\n .widget-container.researching {\n width: 265px;\n border-radius: 12px;\n }\n\n .widget-icon {\n width: 32px;\n height: 32px;\n transition: transform 0.5s ease-in-out;\n }\n\n .widget-container.rounded .widget-icon {\n transform: rotate(110deg);\n }\n\n @keyframes pulse-shadow {\n 0% {\n box-shadow: 0 0 0 0 rgba(124, 58, 237, 0.4);\n }\n 70% {\n box-shadow: 0 0 0 10px rgba(124, 58, 237, 0);\n }\n 100% {\n box-shadow: 0 0 0 0 rgba(124, 58, 237, 0);\n }\n }\n\n .pulse {\n animation: pulse-shadow 2s ease-in-out infinite;\n }\n `\n\n connectedCallback() {\n super.connectedCallback()\n window.addEventListener(\"resize\", this.handleResize)\n\n // Update window.obiWidgetConfig with our values\n if (!window.obiWidgetConfig) {\n window.obiWidgetConfig = {}\n }\n\n window.obiWidgetConfig.apiBaseUrl = this.apiBaseUrl\n\n if (this.apiKey) {\n window.obiWidgetConfig.apiKey = this.apiKey\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n window.removeEventListener(\"resize\", this.handleResize)\n if (this.closeNavTimeoutRef !== null) {\n window.clearTimeout(this.closeNavTimeoutRef)\n }\n\n // Disconnect active session when component is removed\n if (this.activeSession) {\n this.activeSession.disconnect()\n this.activeSession = null\n }\n }\n\n private handleResize = () => {\n this.screenPosition = this.calculateScreenPosition()\n }\n\n private handleMouseEnter() {\n this.isHovering = true\n this.navVisible = true\n }\n\n private handleMouseLeave() {\n this.isHovering = false\n if (this.closeNavTimeoutRef !== null) {\n window.clearTimeout(this.closeNavTimeoutRef)\n }\n this.closeNavTimeoutRef = window.setTimeout(() => {\n if (!this.isHovering) {\n this.navVisible = false\n }\n this.closeNavTimeoutRef = null\n }, 300)\n }\n\n private handleItemSelect(id: string, itemIsActive: boolean) {\n if (id === \"experiences\") {\n this.showCourseModal = true\n return\n }\n\n match([id, itemIsActive])\n .with([\"pause\", true], () => {\n this.activeSession?.pauseRecording()\n })\n .with([\"pause\", false], () => {\n this.activeSession?.resumeRecording()\n })\n .with([\"activate\", false], () => {\n this.activeSession?.disconnect()\n })\n .otherwise(() => {\n return\n })\n }\n\n private async handleSessionStart(sessionToken: string) {\n // Initialize session\n this.showCourseModal = false\n this.state = SDKState.LOADING\n\n try {\n // Dynamically import the ObiSession implementation\n const { ObiSession } = await import(\"../../core/session\")\n\n const session = new ObiSession({ token: sessionToken, apiBaseUrl: this.apiBaseUrl })\n\n session.on(\"stateChanged\", (data) => {\n this.state = data.newState\n })\n\n session.on(\"volume\", (data) => {\n this.volume = data\n })\n\n // Handle errors\n session.on(\"error\", (data) => {\n console.error(\"Session error:\", data.error)\n this.state = SDKState.ERROR\n this.activeSession = null\n })\n\n await session.connect()\n this.activeSession = session\n } catch (error) {\n console.error(\"Failed to connect to session:\", error)\n this.state = SDKState.ERROR\n }\n }\n\n render() {\n const { top, left } = this.screenPosition\n const actualLeft = this.state === SDKState.RESEARCHING ? left - 265 + 56 : left\n\n const stateRender = match(this.state)\n .with(SDKState.LOADING, () => html`<obi-dot-loader></obi-dot-loader>`)\n .with(SDKState.RESEARCHING, () => html`<obi-searching-loader></obi-searching-loader>`)\n .with(\n P.union(SDKState.USER_SPEAKING, SDKState.AGENT_SPEAKING),\n () => html`<obi-audio-equalizer .volume=${this.volume}></obi-audio-equalizer>`\n )\n .with(SDKState.PAUSED, () => obiIcon)\n .otherwise(() => obiIcon)\n\n return html`\n <div\n class=\"widget-container ${this.state === SDKState.USER_SPEAKING ||\n this.state === SDKState.AGENT_SPEAKING\n ? \"pulse\"\n : \"\"} ${this.state !== SDKState.READY || this.navVisible ? \"rounded\" : \"\"} ${this\n .state === SDKState.RESEARCHING\n ? \"researching\"\n : \"\"} ${this.state === SDKState.USER_SPEAKING ? \"user-speaking\" : \"\"}\"\n style=\"top: ${top}px; left: ${actualLeft}px;\"\n @mouseenter=${this.handleMouseEnter}\n @mouseleave=${this.handleMouseLeave}\n >\n ${stateRender}\n ${this.navVisible && this.state !== SDKState.RESEARCHING\n ? html`\n <obi-navigation-bar\n ?isActive=${this.state !== SDKState.READY}\n .position=${{ top, left: actualLeft }}\n data-direction=\"up\"\n .currentState=${this.state}\n .onItemSelect=${this.handleItemSelect.bind(this)}\n ></obi-navigation-bar>\n `\n : nothing}\n </div>\n ${this.showCourseModal\n ? html`<obi-course-modal\n .onClose=${() => (this.showCourseModal = false)}\n .onCourseSelect=${this.handleSessionStart.bind(this)}\n .apiBaseUrl=${this.apiBaseUrl}\n .apiKey=${this.apiKey}\n ></obi-course-modal>`\n : nothing}\n `\n }\n}\n\nif (!customElements.get(\"obi-widget\")) {\n customElements.define(\"obi-widget\", ObiWidget)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { SDKState } from \"../../core/types\"\n\nexport class ObiStatusWidget extends LitElement {\n @property({ type: String })\n state: SDKState = SDKState.READY\n\n static styles = css`\n :host {\n display: inline-block;\n font-family: Arial, sans-serif;\n }\n\n .status-container {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n border-radius: 16px;\n background-color: #f3f4f6;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n\n .status-indicator {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n margin-right: 8px;\n }\n\n .ready {\n background-color: #10b981;\n }\n\n .active {\n background-color: #3b82f6;\n }\n\n .error {\n background-color: #ef4444;\n }\n\n .status-text {\n font-size: 14px;\n font-weight: 500;\n color: #1f2937;\n }\n `\n\n render() {\n return html`\n <div class=\"status-container\">\n <div class=\"status-indicator ${this.state}\"></div>\n <div class=\"status-text\">${this.getStatusText()}</div>\n </div>\n `\n }\n\n private getStatusText(): string {\n switch (this.state) {\n case SDKState.READY:\n return \"Ready\"\n case SDKState.ERROR:\n return \"Error\"\n default:\n return \"Unknown\"\n }\n }\n}\n\nif (!customElements.get(\"obi-status-widget\")) {\n customElements.define(\"obi-status-widget\", ObiStatusWidget)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { SDKState } from \"../../core/types\"\n\nexport class ObiControlPanel extends LitElement {\n @property({ type: String })\n state: SDKState = SDKState.READY\n\n @property({ type: Boolean })\n voiceEnabled: boolean = true\n\n @property({ type: Boolean })\n screenEnabled: boolean = true\n\n static styles = css`\n :host {\n display: block;\n font-family: Arial, sans-serif;\n --obi-primary: #3b82f6;\n --obi-danger: #ef4444;\n --obi-gray: #6b7280;\n }\n\n .control-container {\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 8px;\n background-color: #ffffff;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n max-width: 300px;\n }\n\n .control-header {\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: 600;\n color: #111827;\n }\n\n .control-buttons {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n button {\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition:\n background-color 0.2s,\n opacity 0.2s;\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-voice {\n background-color: var(--obi-primary);\n color: white;\n }\n\n .btn-screen {\n background-color: var(--obi-primary);\n color: white;\n }\n\n .btn-stop {\n background-color: var(--obi-danger);\n color: white;\n }\n `\n\n render() {\n const isActive = this.state === SDKState.AGENT_SPEAKING\n const isReady = this.state === SDKState.READY\n\n return html`\n <div class=\"control-container\">\n <div class=\"control-header\">Obi Controls</div>\n <div class=\"control-buttons\">\n <button\n class=\"btn-voice\"\n ?disabled=${!isReady || !this.voiceEnabled}\n @click=${this.handleVoiceClick}\n >\n Start Voice\n </button>\n\n <button\n class=\"btn-screen\"\n ?disabled=${!isReady || !this.screenEnabled}\n @click=${this.handleScreenClick}\n >\n Capture Screen\n </button>\n\n <button class=\"btn-stop\" ?disabled=${!isActive} @click=${this.handleStopClick}>\n Stop\n </button>\n </div>\n </div>\n `\n }\n\n private handleVoiceClick() {\n this.dispatchEvent(new CustomEvent(\"voice-start\"))\n }\n\n private handleScreenClick() {\n this.dispatchEvent(new CustomEvent(\"screen-start\"))\n }\n\n private handleStopClick() {\n this.dispatchEvent(new CustomEvent(\"stop\"))\n }\n}\n\nif (!customElements.get(\"obi-control-panel\")) {\n customElements.define(\"obi-control-panel\", ObiControlPanel)\n}\n","export * from \"./status-widget\"\nexport * from \"./control-panel\"\nexport * from \"./obi-widget\"\nexport * from \"./audio-equalizer\"\nexport * from \"./dot-loader\"\nexport * from \"./nav-icon\"\nexport * from \"./navigation-bar\"\nexport * from \"./searching-loader\"\nexport * from \"./courses/courses\"\nexport * from \"./courses/course-modal\"\n\n// Function to define all custom elements at once for development\nexport function defineCustomElements() {\n // Import all components to ensure they're registered\n // This is primarily useful for development\n import(\"./status-widget\")\n import(\"./control-panel\")\n import(\"./obi-widget\")\n import(\"./audio-equalizer\")\n import(\"./dot-loader\")\n import(\"./nav-icon\")\n import(\"./navigation-bar\")\n import(\"./searching-loader\")\n import(\"./courses/courses\")\n import(\"./courses/course-modal\")\n}\n"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","b","y","x","v","LitElement","html","css","__decorateClass","property","svg","createRef","j","ref","state","match","P","nothing"],"mappings":";AAKA,MAAMA,MAAE,YAAWC,MAAED,IAAE,eAAa,WAASA,IAAE,YAAUA,IAAE,SAAS,iBAAe,wBAAuB,SAAS,aAAW,aAAY,cAAc,WAAUE,MAAE,OAAM,GAAGC,MAAE,oBAAI;AAAQ,IAAA,MAAA,MAAM,EAAC;AAAA,EAAC,YAAYH,IAAEC,IAAEE,IAAE;AAAC,QAAG,KAAK,eAAa,MAAGA,OAAID;AAAE,YAAM,MAAM,mEAAmE;AAAE,SAAK,UAAQF,IAAE,KAAK,IAAEC;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,QAAID,KAAE,KAAK;AAAE,UAAME,KAAE,KAAK;AAAE,QAAGD,OAAG,WAASD,IAAE;AAAC,YAAMC,KAAE,WAASC,MAAG,MAAIA,GAAE;AAAO,MAAAD,OAAID,KAAEG,IAAE,IAAID,EAAC,IAAG,WAASF,QAAK,KAAK,IAAEA,KAAE,IAAI,iBAAe,YAAY,KAAK,OAAO,GAAEC,MAAGE,IAAE,IAAID,IAAEF,EAAC;AAAA,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK;AAAA,EAAO;AAAC;AAAC,MAAMI,MAAE,CAAAJ,OAAG,IAAIK,IAAE,YAAU,OAAOL,KAAEA,KAAEA,KAAE,IAAG,QAAOE,GAAC,GAAEI,MAAE,CAACN,OAAKC,OAAI;AAAC,QAAME,KAAE,MAAIH,GAAE,SAAOA,GAAE,CAAC,IAAEC,GAAE,OAAQ,CAACA,IAAEC,IAAEC,OAAIF,MAAG,CAAAD,OAAG;AAAC,QAAG,SAAKA,GAAE;AAAa,aAAOA,GAAE;AAAQ,QAAG,YAAU,OAAOA;AAAE,aAAOA;AAAE,UAAM,MAAM,qEAAmEA,KAAE,sFAAsF;AAAA,EAAC,GAAGE,EAAC,IAAEF,GAAEG,KAAE,CAAC,GAAGH,GAAE,CAAC,CAAC;AAAE,SAAO,IAAIK,IAAEF,IAAEH,IAAEE,GAAC;AAAC,GAAEK,MAAE,CAACL,IAAEC,OAAI;AAAC,MAAGF;AAAE,IAAAC,GAAE,qBAAmBC,GAAE,IAAK,CAAAH,OAAGA,cAAa,gBAAcA,KAAEA,GAAE;;AAAkB,eAAUC,MAAKE,IAAE;AAAC,YAAMA,KAAE,SAAS,cAAc,OAAO,GAAEE,KAAEL,IAAE;AAAS,iBAASK,MAAGF,GAAE,aAAa,SAAQE,EAAC,GAAEF,GAAE,cAAYF,GAAE,SAAQC,GAAE,YAAYC,EAAC;AAAA,IAAC;AAAC,GAAEK,MAAEP,MAAE,CAAAD,OAAGA,KAAE,CAAAA,OAAGA,cAAa,iBAAe,CAAAA,OAAG;AAAC,MAAIC,KAAE;AAAG,aAAUC,MAAKF,GAAE;AAAS,IAAAC,MAAGC,GAAE;AAAQ,SAAOE,IAAEH,EAAC;AAAC,GAAGD,EAAC,IAAEA;ACAxzC,MAAK,EAAC,IAAGM,KAAE,gBAAeL,KAAE,0BAAyBQ,KAAE,qBAAoBL,KAAE,uBAAsBD,KAAE,gBAAeE,IAAC,IAAE,QAAOK,MAAE,YAAWF,MAAEE,IAAE,cAAaC,MAAEH,MAAEA,IAAE,cAAY,IAAGI,MAAEF,IAAE,gCAA+BG,MAAE,CAACb,IAAEE,OAAIF,IAAEc,MAAE,EAAC,YAAYd,IAAEE,IAAE;AAAC,UAAOA,IAAC;AAAA,IAAE,KAAK;AAAQ,MAAAF,KAAEA,KAAEW,MAAE;AAAK;AAAA,IAAM,KAAK;AAAA,IAAO,KAAK;AAAM,MAAAX,KAAE,QAAMA,KAAEA,KAAE,KAAK,UAAUA,EAAC;AAAA,EAAC;AAAC,SAAOA;AAAC,GAAE,cAAcA,IAAEE,IAAE;AAAC,MAAII,KAAEN;AAAE,UAAOE,IAAG;AAAA,IAAA,KAAK;AAAQ,MAAAI,KAAE,SAAON;AAAE;AAAA,IAAM,KAAK;AAAO,MAAAM,KAAE,SAAON,KAAE,OAAK,OAAOA,EAAC;AAAE;AAAA,IAAM,KAAK;AAAA,IAAO,KAAK;AAAM,UAAG;AAAC,QAAAM,KAAE,KAAK,MAAMN,EAAC;AAAA,MAAC,SAAOA,IAAE;AAAC,QAAAM,KAAE;AAAA,MAAI;AAAA,EAAC;AAAC,SAAOA;AAAC,EAAC,GAAES,MAAE,CAACf,IAAEE,OAAI,CAACI,IAAEN,IAAEE,EAAC,GAAEc,MAAE,EAAC,WAAU,MAAG,MAAK,QAAO,WAAUF,KAAE,SAAQ,OAAG,YAAW,OAAG,YAAWC,IAAC;AAAE,OAAO,aAAP,OAAO,WAAW,OAAO,UAAU,IAAEL,IAAE,wBAAFA,IAAE,sBAAsB,oBAAI;AAAO,IAAA,MAAC,MAAM,UAAU,YAAW;AAAA,EAAC,OAAO,eAAeV,IAAE;AAAC,SAAK,KAAI,IAAI,KAAK,MAAL,KAAK,IAAI,CAAA,IAAI,KAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,WAAW,qBAAoB;AAAC,WAAO,KAAK,SAAU,GAAC,KAAK,QAAM,CAAC,GAAG,KAAK,KAAK,KAAI,CAAE;AAAA,EAAC;AAAA,EAAC,OAAO,eAAeA,IAAEE,KAAEc,KAAE;AAAC,QAAGd,GAAE,UAAQA,GAAE,YAAU,QAAI,KAAK,KAAM,GAAC,KAAK,UAAU,eAAeF,EAAC,OAAKE,KAAE,OAAO,OAAOA,EAAC,GAAG,UAAQ,OAAI,KAAK,kBAAkB,IAAIF,IAAEE,EAAC,GAAE,CAACA,GAAE,YAAW;AAAC,YAAMI,KAAE,OAAM,GAAGG,KAAE,KAAK,sBAAsBT,IAAEM,IAAEJ,EAAC;AAAE,iBAASO,MAAGR,IAAE,KAAK,WAAUD,IAAES,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAO,sBAAsBT,IAAEE,IAAEI,IAAE;AAAC,UAAK,EAAC,KAAIL,IAAE,KAAIG,GAAC,IAAEK,IAAE,KAAK,WAAUT,EAAC,KAAG,EAAC,MAAK;AAAC,aAAO,KAAKE,EAAC;AAAA,IAAC,GAAE,IAAIF,IAAE;AAAC,WAAKE,EAAC,IAAEF;AAAA,IAAC,EAAC;AAAE,WAAM,EAAC,KAAIC,IAAE,IAAIC,IAAE;AAAC,YAAMO,KAAER,IAAG,KAAK,IAAI;AAAE,MAAAG,IAAG,KAAK,MAAKF,EAAC,GAAE,KAAK,cAAcF,IAAES,IAAEH,EAAC;AAAA,IAAC,GAAE,cAAa,MAAG,YAAW,KAAE;AAAA,EAAC;AAAA,EAAC,OAAO,mBAAmBN,IAAE;AAAC,WAAO,KAAK,kBAAkB,IAAIA,EAAC,KAAGgB;AAAAA,EAAC;AAAA,EAAC,OAAO,OAAM;AAAC,QAAG,KAAK,eAAeH,IAAE,mBAAmB,CAAC;AAAE;AAAO,UAAMb,KAAEK,IAAE,IAAI;AAAE,IAAAL,GAAE,SAAU,GAAC,WAASA,GAAE,MAAI,KAAK,IAAE,CAAC,GAAGA,GAAE,CAAC,IAAG,KAAK,oBAAkB,IAAI,IAAIA,GAAE,iBAAiB;AAAA,EAAC;AAAA,EAAC,OAAO,WAAU;AAAC,QAAG,KAAK,eAAea,IAAE,WAAW,CAAC;AAAE;AAAO,QAAG,KAAK,YAAU,MAAG,KAAK,KAAI,GAAG,KAAK,eAAeA,IAAE,YAAY,CAAC,GAAE;AAAC,YAAMb,KAAE,KAAK,YAAWE,KAAE,CAAC,GAAGE,IAAEJ,EAAC,GAAE,GAAGG,IAAEH,EAAC,CAAC;AAAE,iBAAUM,MAAKJ;AAAE,aAAK,eAAeI,IAAEN,GAAEM,EAAC,CAAC;AAAA,IAAC;AAAC,UAAMN,KAAE,KAAK,OAAO,QAAQ;AAAE,QAAG,SAAOA,IAAE;AAAC,YAAME,KAAE,oBAAoB,IAAIF,EAAC;AAAE,UAAG,WAASE;AAAE,mBAAS,CAACF,IAAEM,EAAC,KAAIJ;AAAE,eAAK,kBAAkB,IAAIF,IAAEM,EAAC;AAAA,IAAC;AAAC,SAAK,OAAK,oBAAI;AAAI,eAAS,CAACN,IAAEE,EAAC,KAAI,KAAK,mBAAkB;AAAC,YAAMI,KAAE,KAAK,KAAKN,IAAEE,EAAC;AAAE,iBAASI,MAAG,KAAK,KAAK,IAAIA,IAAEN,EAAC;AAAA,IAAC;AAAC,SAAK,gBAAc,KAAK,eAAe,KAAK,MAAM;AAAA,EAAC;AAAA,EAAC,OAAO,eAAeE,IAAE;AAAC,UAAMI,KAAE,CAAA;AAAG,QAAG,MAAM,QAAQJ,EAAC,GAAE;AAAC,YAAMD,KAAE,IAAI,IAAIC,GAAE,KAAK,IAAE,CAAC,EAAE,QAAO,CAAE;AAAE,iBAAUA,MAAKD;AAAE,QAAAK,GAAE,QAAQN,IAAEE,EAAC,CAAC;AAAA,IAAC;AAAM,iBAASA,MAAGI,GAAE,KAAKN,IAAEE,EAAC,CAAC;AAAE,WAAOI;AAAA,EAAC;AAAA,EAAC,OAAO,KAAKN,IAAEE,IAAE;AAAC,UAAMI,KAAEJ,GAAE;AAAU,WAAM,UAAKI,KAAE,SAAO,YAAU,OAAOA,KAAEA,KAAE,YAAU,OAAON,KAAEA,GAAE,YAAW,IAAG;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,aAAQ,KAAK,OAAK,QAAO,KAAK,kBAAgB,OAAG,KAAK,aAAW,OAAG,KAAK,OAAK,MAAK,KAAK,KAAM;AAAA,EAAA;AAAA,EAAC,OAAM;AAAC,SAAK,OAAK,IAAI,QAAS,CAAAA,OAAG,KAAK,iBAAeA,KAAI,KAAK,OAAK,oBAAI,OAAI,KAAK,KAAI,GAAG,KAAK,iBAAgB,KAAK,YAAY,GAAG,QAAS,CAAAA,OAAGA,GAAE,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAcA,IAAE;AAAC,KAAC,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIA,EAAC,GAAE,WAAS,KAAK,cAAY,KAAK,eAAaA,GAAE,gBAAa;AAAA,EAAI;AAAA,EAAC,iBAAiBA,IAAE;AAAC,SAAK,MAAM,OAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,UAAMA,KAAE,oBAAI,OAAIE,KAAE,KAAK,YAAY;AAAkB,eAAUI,MAAKJ,GAAE,KAAM;AAAC,WAAK,eAAeI,EAAC,MAAIN,GAAE,IAAIM,IAAE,KAAKA,EAAC,CAAC,GAAE,OAAO,KAAKA,EAAC;AAAG,IAAAN,GAAE,OAAK,MAAI,KAAK,OAAKA;AAAA,EAAE;AAAA,EAAC,mBAAkB;AAAC,UAAMA,KAAE,KAAK,cAAY,KAAK,aAAa,KAAK,YAAY,iBAAiB;AAAE,WAAOE,IAAEF,IAAE,KAAK,YAAY,aAAa,GAAEA;AAAA,EAAC;AAAA,EAAC,oBAAmB;AAAC,SAAK,eAAL,KAAK,aAAa,KAAK,iBAAkB,IAAC,KAAK,eAAe,IAAE,GAAE,KAAK,MAAM,QAAS,CAAAA,OAAGA,GAAE,gBAAiB,CAAA;AAAA,EAAE;AAAA,EAAC,eAAeA,IAAE;AAAA,EAAE;AAAA,EAAA,uBAAsB;AAAC,SAAK,MAAM,QAAS,CAAAA,OAAGA,GAAE,mBAAgB;EAAM;AAAA,EAAC,yBAAyBA,IAAEE,IAAEI,IAAE;AAAC,SAAK,KAAKN,IAAEM,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKN,IAAEE,IAAE;AAAC,UAAMI,KAAE,KAAK,YAAY,kBAAkB,IAAIN,EAAC,GAAEC,KAAE,KAAK,YAAY,KAAKD,IAAEM,EAAC;AAAE,QAAG,WAASL,MAAG,SAAKK,GAAE,SAAQ;AAAC,YAAMG,MAAG,WAASH,GAAE,WAAW,cAAYA,GAAE,YAAUQ,KAAG,YAAYZ,IAAEI,GAAE,IAAI;AAAE,WAAK,OAAKN,IAAE,QAAMS,KAAE,KAAK,gBAAgBR,EAAC,IAAE,KAAK,aAAaA,IAAEQ,EAAC,GAAE,KAAK,OAAK;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,KAAKT,IAAEE,IAAE;AAAC,UAAMI,KAAE,KAAK,aAAYL,KAAEK,GAAE,KAAK,IAAIN,EAAC;AAAE,QAAG,WAASC,MAAG,KAAK,SAAOA,IAAE;AAAC,YAAMD,KAAEM,GAAE,mBAAmBL,EAAC,GAAEQ,KAAE,cAAY,OAAOT,GAAE,YAAU,EAAC,eAAcA,GAAE,UAAS,IAAE,WAASA,GAAE,WAAW,gBAAcA,GAAE,YAAUc;AAAE,WAAK,OAAKb,IAAE,KAAKA,EAAC,IAAEQ,GAAE,cAAcP,IAAEF,GAAE,IAAI,KAAG,KAAK,MAAM,IAAIC,EAAC,KAAG,MAAK,KAAK,OAAK;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,cAAcD,IAAEE,IAAEI,IAAE;AAAC,QAAG,WAASN,IAAE;AAAC,YAAMC,KAAE,KAAK,aAAYQ,KAAE,KAAKT,EAAC;AAAE,UAAGM,YAAIL,GAAE,mBAAmBD,EAAC,IAAE,GAAGM,GAAE,cAAYS,KAAGN,IAAEP,EAAC,KAAGI,GAAE,cAAYA,GAAE,WAASG,OAAI,KAAK,MAAM,IAAIT,EAAC,KAAG,CAAC,KAAK,aAAaC,GAAE,KAAKD,IAAEM,EAAC,CAAC;AAAG;AAAO,WAAK,EAAEN,IAAEE,IAAEI,EAAC;AAAA,IAAC;AAAC,cAAK,KAAK,oBAAkB,KAAK,OAAK,KAAK,KAAM;AAAA,EAAC;AAAA,EAAC,EAAEN,IAAEE,IAAE,EAAC,YAAWI,IAAE,SAAQL,IAAE,SAAQQ,GAAC,GAAEL,IAAE;AAAC,IAAAE,MAAG,EAAE,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIN,EAAC,MAAI,KAAK,KAAK,IAAIA,IAAEI,MAAGF,MAAG,KAAKF,EAAC,CAAC,GAAE,SAAKS,MAAG,WAASL,QAAK,KAAK,KAAK,IAAIJ,EAAC,MAAI,KAAK,cAAYM,OAAIJ,KAAE,SAAQ,KAAK,KAAK,IAAIF,IAAEE,EAAC,IAAG,SAAKD,MAAG,KAAK,SAAOD,OAAI,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIA,EAAC;AAAA,EAAE;AAAA,EAAC,MAAM,OAAM;AAAC,SAAK,kBAAgB;AAAG,QAAG;AAAC,YAAM,KAAK;AAAA,IAAI,SAAOA,IAAE;AAAC,cAAQ,OAAOA,EAAC;AAAA,IAAC;AAAC,UAAMA,KAAE,KAAK,eAAc;AAAG,WAAO,QAAMA,MAAG,MAAMA,IAAE,CAAC,KAAK;AAAA,EAAe;AAAA,EAAC,iBAAgB;AAAC,WAAO,KAAK,cAAe;AAAA,EAAA;AAAA,EAAC,gBAAe;AAAC,QAAG,CAAC,KAAK;AAAgB;AAAO,QAAG,CAAC,KAAK,YAAW;AAAC,UAAG,KAAK,eAAL,KAAK,aAAa,KAAK,qBAAmB,KAAK,MAAK;AAAC,mBAAS,CAACA,IAAEE,EAAC,KAAI,KAAK;AAAK,eAAKF,EAAC,IAAEE;AAAE,aAAK,OAAK;AAAA,MAAM;AAAC,YAAMF,KAAE,KAAK,YAAY;AAAkB,UAAGA,GAAE,OAAK;AAAE,mBAAS,CAACE,IAAEI,EAAC,KAAIN,IAAE;AAAC,gBAAK,EAAC,SAAQA,GAAC,IAAEM,IAAEL,KAAE,KAAKC,EAAC;AAAE,mBAAKF,MAAG,KAAK,KAAK,IAAIE,EAAC,KAAG,WAASD,MAAG,KAAK,EAAEC,IAAE,QAAOI,IAAEL,EAAC;AAAA,QAAC;AAAA,IAAC;AAAC,QAAID,KAAE;AAAG,UAAME,KAAE,KAAK;AAAK,QAAG;AAAC,MAAAF,KAAE,KAAK,aAAaE,EAAC,GAAEF,MAAG,KAAK,WAAWE,EAAC,GAAE,KAAK,MAAM,QAAS,CAAAF,OAAGA,GAAE,aAAc,CAAA,GAAG,KAAK,OAAOE,EAAC,KAAG,KAAK,KAAI;AAAA,IAAE,SAAOA,IAAE;AAAC,YAAMF,KAAE,OAAG,KAAK,KAAI,GAAGE;AAAA,IAAC;AAAC,IAAAF,MAAG,KAAK,KAAKE,EAAC;AAAA,EAAC;AAAA,EAAC,WAAWF,IAAE;AAAA,EAAA;AAAA,EAAE,KAAKA,IAAE;AAAC,SAAK,MAAM,QAAS,CAAAA,OAAGA,GAAE,cAAW,CAAM,GAAC,KAAK,eAAa,KAAK,aAAW,MAAG,KAAK,aAAaA,EAAC,IAAG,KAAK,QAAQA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,SAAK,OAAK,oBAAI,OAAI,KAAK,kBAAgB;AAAA,EAAE;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK,kBAAmB;AAAA,EAAA;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAI;AAAA,EAAC,aAAaA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,OAAOA,IAAE;AAAC,SAAK,SAAL,KAAK,OAAO,KAAK,KAAK,QAAS,CAAAA,OAAG,KAAK,KAAKA,IAAE,KAAKA,EAAC,CAAC,CAAG,IAAC,KAAK,KAAI;AAAA,EAAE;AAAA,EAAC,QAAQA,IAAE;AAAA,EAAE;AAAA,EAAA,aAAaA,IAAE;AAAA,EAAA;AAAE;AAACiB,IAAE,gBAAc,CAAA,GAAGA,IAAE,oBAAkB,EAAC,MAAK,OAAM,GAAEA,IAAEJ,IAAE,mBAAmB,CAAC,IAAE,oBAAI,OAAII,IAAEJ,IAAE,WAAW,CAAC,IAAE,oBAAI,OAAID,MAAI,EAAC,iBAAgBK,IAAC,CAAC,IAAGP,IAAE,4BAAFA,IAAE,0BAA0B,CAAE,IAAE,KAAK,OAAO;ACAjxL,MAACV,MAAE,YAAWM,MAAEN,IAAE,cAAaE,MAAEI,MAAEA,IAAE,aAAa,YAAW,EAAC,YAAW,CAAAN,OAAGA,GAAC,CAAC,IAAE,QAAOC,MAAE,SAAQQ,MAAE,OAAO,KAAK,OAAM,EAAG,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,KAAIN,MAAE,MAAIM,KAAEJ,MAAE,IAAIF,GAAC,KAAIC,MAAE,UAAS,IAAE,MAAIA,IAAE,cAAc,EAAE,GAAEI,MAAE,CAAAR,OAAG,SAAOA,MAAG,YAAU,OAAOA,MAAG,cAAY,OAAOA,IAAE,IAAE,MAAM,SAAQ,IAAE,CAAAA,OAAG,EAAEA,EAAC,KAAG,cAAY,OAAOA,KAAI,OAAO,QAAQ,GAAE,IAAE,cAAce,MAAE,uDAAsD,IAAE,QAAO,IAAE,MAAK,IAAE,OAAO,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAAA,2BAAsC,GAAG,GAAE,IAAE,MAAK,IAAE,MAAK,IAAE,sCAAqCE,KAAE,CAAAjB,OAAG,CAACM,OAAKJ,QAAK,EAAC,YAAWF,IAAE,SAAQM,IAAE,QAAOJ,GAAC,IAAG,IAAEe,GAAE,CAAC,GAAE,IAAEA,GAAE,CAAC,GAAS,IAAE,OAAO,IAAI,cAAc,GAAE,IAAE,OAAO,IAAI,aAAa,GAAE,IAAE,oBAAI,WAAQ,IAAEb,IAAE,iBAAiBA,KAAE,GAAG;AAAE,SAAS,EAAEJ,IAAEM,IAAE;AAAC,MAAG,CAAC,EAAEN,EAAC,KAAG,CAACA,GAAE,eAAe,KAAK;AAAE,UAAM,MAAM,gCAAgC;AAAE,SAAO,WAASE,MAAEA,IAAE,WAAWI,EAAC,IAAEA;AAAC;AAAC,MAAM,IAAE,CAACN,IAAEM,OAAI;AAAC,QAAMJ,KAAEF,GAAE,SAAO,GAAEG,KAAE,CAAE;AAAC,MAAIC,IAAEO,KAAE,MAAIL,KAAE,UAAQ,MAAIA,KAAE,WAAS,IAAGE,KAAEO;AAAE,WAAQT,KAAE,GAAEA,KAAEJ,IAAEI,MAAI;AAAC,UAAMJ,KAAEF,GAAEM,EAAC;AAAE,QAAII,IAAEI,IAAED,KAAE,IAAGI,KAAE;AAAE,WAAKA,KAAEf,GAAE,WAASM,GAAE,YAAUS,IAAEH,KAAEN,GAAE,KAAKN,EAAC,GAAE,SAAOY;AAAI,MAAAG,KAAET,GAAE,WAAUA,OAAIO,MAAE,UAAQD,GAAE,CAAC,IAAEN,KAAE,IAAE,WAASM,GAAE,CAAC,IAAEN,KAAE,IAAE,WAASM,GAAE,CAAC,KAAG,EAAE,KAAKA,GAAE,CAAC,CAAC,MAAIV,KAAE,OAAO,OAAKU,GAAE,CAAC,GAAE,GAAG,IAAGN,KAAE,KAAG,WAASM,GAAE,CAAC,MAAIN,KAAE,KAAGA,OAAI,IAAE,QAAMM,GAAE,CAAC,KAAGN,KAAEJ,MAAGW,KAAEF,KAAE,MAAI,WAASC,GAAE,CAAC,IAAED,KAAE,MAAIA,KAAEL,GAAE,YAAUM,GAAE,CAAC,EAAE,QAAOJ,KAAEI,GAAE,CAAC,GAAEN,KAAE,WAASM,GAAE,CAAC,IAAE,IAAE,QAAMA,GAAE,CAAC,IAAE,IAAE,KAAGN,OAAI,KAAGA,OAAI,IAAEA,KAAE,IAAEA,OAAI,KAAGA,OAAI,IAAEA,KAAEO,OAAGP,KAAE,GAAEJ,KAAE;AAAQ,UAAMc,KAAEV,OAAI,KAAGR,GAAEM,KAAE,CAAC,EAAE,WAAW,IAAI,IAAE,MAAI;AAAG,IAAAK,MAAGH,OAAIO,MAAEb,KAAEG,MAAEQ,MAAG,KAAGV,GAAE,KAAKO,EAAC,GAAER,GAAE,MAAM,GAAEW,EAAC,IAAEZ,MAAEC,GAAE,MAAMW,EAAC,IAAEJ,MAAES,MAAGhB,KAAEO,OAAG,OAAKI,KAAEP,KAAEY;AAAA,EAAE;AAAC,SAAM,CAAC,EAAElB,IAAEW,MAAGX,GAAEE,EAAC,KAAG,UAAQ,MAAII,KAAE,WAAS,MAAIA,KAAE,YAAU,GAAG,GAAEH,EAAC;AAAC;AAAE,MAAM,EAAC;AAAA,EAAC,YAAY,EAAC,SAAQH,IAAE,YAAWE,GAAC,GAAEG,IAAE;AAAC,QAAID;AAAE,SAAK,QAAM,CAAE;AAAC,QAAII,KAAE,GAAEE,KAAE;AAAE,UAAMI,KAAEd,GAAE,SAAO,GAAEa,KAAE,KAAK,OAAM,CAACE,IAAEI,EAAC,IAAE,EAAEnB,IAAEE,EAAC;AAAE,QAAG,KAAK,KAAG,EAAE,cAAca,IAAEV,EAAC,GAAE,EAAE,cAAY,KAAK,GAAG,SAAQ,MAAIH,MAAG,MAAIA,IAAE;AAAC,YAAMF,KAAE,KAAK,GAAG,QAAQ;AAAW,MAAAA,GAAE,YAAY,GAAGA,GAAE,UAAU;AAAA,IAAC;AAAC,WAAK,UAAQI,KAAE,EAAE,SAAQ,MAAKS,GAAE,SAAOC,MAAG;AAAC,UAAG,MAAIV,GAAE,UAAS;AAAC,YAAGA,GAAE,cAAa;AAAG,qBAAUJ,MAAKI,GAAE,kBAAmB;AAAC,gBAAGJ,GAAE,SAASC,GAAC,GAAE;AAAC,oBAAMK,KAAEa,GAAET,IAAG,GAAER,KAAEE,GAAE,aAAaJ,EAAC,EAAE,MAAMS,GAAC,GAAER,KAAE,eAAe,KAAKK,EAAC;AAAE,cAAAO,GAAE,KAAK,EAAC,MAAK,GAAE,OAAML,IAAE,MAAKP,GAAE,CAAC,GAAE,SAAQC,IAAE,MAAK,QAAMD,GAAE,CAAC,IAAE,IAAE,QAAMA,GAAE,CAAC,IAAE,IAAE,QAAMA,GAAE,CAAC,IAAE,IAAE,EAAC,CAAC,GAAEG,GAAE,gBAAgBJ,EAAC;AAAA,YAAC;AAAM,cAAAA,GAAE,WAAWS,GAAC,MAAII,GAAE,KAAK,EAAC,MAAK,GAAE,OAAML,GAAC,CAAC,GAAEJ,GAAE,gBAAgBJ,EAAC;AAAG,YAAG,EAAE,KAAKI,GAAE,OAAO,GAAE;AAAC,gBAAMJ,KAAEI,GAAE,YAAY,MAAMK,GAAC,GAAEP,KAAEF,GAAE,SAAO;AAAE,cAAGE,KAAE,GAAE;AAAC,YAAAE,GAAE,cAAYE,MAAEA,IAAE,cAAY;AAAG,qBAAQA,KAAE,GAAEA,KAAEJ,IAAEI;AAAI,cAAAF,GAAE,OAAOJ,GAAEM,EAAC,GAAE,EAAG,CAAA,GAAE,EAAE,SAAQ,GAAGO,GAAE,KAAK,EAAC,MAAK,GAAE,OAAM,EAAEL,GAAC,CAAC;AAAE,YAAAJ,GAAE,OAAOJ,GAAEE,EAAC,GAAE,EAAG,CAAA;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,WAAS,MAAIE,GAAE;AAAS,YAAGA,GAAE,SAAOD;AAAE,UAAAU,GAAE,KAAK,EAAC,MAAK,GAAE,OAAML,GAAC,CAAC;AAAA,aAAM;AAAC,cAAIR,KAAE;AAAG,iBAAK,QAAMA,KAAEI,GAAE,KAAK,QAAQK,KAAET,KAAE,CAAC;AAAI,YAAAa,GAAE,KAAK,EAAC,MAAK,GAAE,OAAML,GAAC,CAAC,GAAER,MAAGS,IAAE,SAAO;AAAA,QAAC;AAAC,MAAAD;AAAA,IAAG;AAAA,EAAC;AAAA,EAAC,OAAO,cAAcR,IAAEM,IAAE;AAAC,UAAMJ,KAAEE,IAAE,cAAc,UAAU;AAAE,WAAOF,GAAE,YAAUF,IAAEE;AAAA,EAAC;AAAC;AAAC,SAAS,EAAEF,IAAEM,IAAEJ,KAAEF,IAAEC,IAAE;AAAC,MAAGK,OAAI;AAAE,WAAOA;AAAE,MAAIG,KAAE,WAASR,KAAEC,GAAE,OAAOD,EAAC,IAAEC,GAAE;AAAK,QAAMC,KAAEK,IAAEF,EAAC,IAAE,SAAOA,GAAE;AAAgB,SAAOG,IAAG,gBAAcN,OAAIM,IAAG,OAAO,KAAE,GAAE,WAASN,KAAEM,KAAE,UAAQA,KAAE,IAAIN,GAAEH,EAAC,GAAES,GAAE,KAAKT,IAAEE,IAAED,EAAC,IAAG,WAASA,MAAGC,GAAE,SAAFA,GAAE,OAAO,CAAA,IAAID,EAAC,IAAEQ,KAAEP,GAAE,OAAKO,KAAG,WAASA,OAAIH,KAAE,EAAEN,IAAES,GAAE,KAAKT,IAAEM,GAAE,MAAM,GAAEG,IAAER,EAAC,IAAGK;AAAC;AAAC,MAAM,EAAC;AAAA,EAAC,YAAYN,IAAEM,IAAE;AAAC,SAAK,OAAK,CAAA,GAAG,KAAK,OAAK,QAAO,KAAK,OAAKN,IAAE,KAAK,OAAKM;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,KAAK;AAAA,EAAU;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,KAAK;AAAA,EAAI;AAAA,EAAC,EAAEN,IAAE;AAAC,UAAK,EAAC,IAAG,EAAC,SAAQM,GAAC,GAAE,OAAMJ,GAAC,IAAE,KAAK,MAAKD,MAAGD,IAAG,iBAAeI,KAAG,WAAWE,IAAE,IAAE;AAAE,MAAE,cAAYL;AAAE,QAAIQ,KAAE,EAAE,SAAU,GAACN,KAAE,GAAEE,KAAE,GAAEM,KAAET,GAAE,CAAC;AAAE,WAAK,WAASS,MAAG;AAAC,UAAGR,OAAIQ,GAAE,OAAM;AAAC,YAAIL;AAAE,cAAIK,GAAE,OAAKL,KAAE,IAAI,EAAEG,IAAEA,GAAE,aAAY,MAAKT,EAAC,IAAE,MAAIW,GAAE,OAAKL,KAAE,IAAIK,GAAE,KAAKF,IAAEE,GAAE,MAAKA,GAAE,SAAQ,MAAKX,EAAC,IAAE,MAAIW,GAAE,SAAOL,KAAE,IAAI,EAAEG,IAAE,MAAKT,EAAC,IAAG,KAAK,KAAK,KAAKM,EAAC,GAAEK,KAAET,GAAE,EAAEG,EAAC;AAAA,MAAC;AAAC,MAAAF,OAAIQ,IAAG,UAAQF,KAAE,EAAE,SAAU,GAACN;AAAA,IAAI;AAAC,WAAO,EAAE,cAAYC,KAAEH;AAAA,EAAC;AAAA,EAAC,EAAED,IAAE;AAAC,QAAIM,KAAE;AAAE,eAAUJ,MAAK,KAAK;AAAK,iBAASA,OAAI,WAASA,GAAE,WAASA,GAAE,KAAKF,IAAEE,IAAEI,EAAC,GAAEA,MAAGJ,GAAE,QAAQ,SAAO,KAAGA,GAAE,KAAKF,GAAEM,EAAC,CAAC,IAAGA;AAAA,EAAG;AAAC;AAAC,MAAM,EAAC;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,MAAM,QAAM,KAAK;AAAA,EAAI;AAAA,EAAC,YAAYN,IAAEM,IAAEJ,IAAED,IAAE;AAAC,SAAK,OAAK,GAAE,KAAK,OAAK,GAAE,KAAK,OAAK,QAAO,KAAK,OAAKD,IAAE,KAAK,OAAKM,IAAE,KAAK,OAAKJ,IAAE,KAAK,UAAQD,IAAE,KAAK,OAAKA,IAAG,eAAa;AAAA,EAAE;AAAA,EAAC,IAAI,aAAY;AAAC,QAAID,KAAE,KAAK,KAAK;AAAW,UAAMM,KAAE,KAAK;AAAK,WAAO,WAASA,MAAG,OAAKN,IAAG,aAAWA,KAAEM,GAAE,aAAYN;AAAA,EAAC;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,KAAK;AAAA,EAAI;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK;AAAA,EAAI;AAAA,EAAC,KAAKA,IAAEM,KAAE,MAAK;AAAC,IAAAN,KAAE,EAAE,MAAKA,IAAEM,EAAC,GAAEE,IAAER,EAAC,IAAEA,OAAI,KAAG,QAAMA,MAAG,OAAKA,MAAG,KAAK,SAAO,KAAG,KAAK,KAAM,GAAC,KAAK,OAAK,KAAGA,OAAI,KAAK,QAAMA,OAAI,KAAG,KAAK,EAAEA,EAAC,IAAE,WAASA,GAAE,aAAW,KAAK,EAAEA,EAAC,IAAE,WAASA,GAAE,WAAS,KAAK,EAAEA,EAAC,IAAE,EAAEA,EAAC,IAAE,KAAK,EAAEA,EAAC,IAAE,KAAK,EAAEA,EAAC;AAAA,EAAC;AAAA,EAAC,EAAEA,IAAE;AAAC,WAAO,KAAK,KAAK,WAAW,aAAaA,IAAE,KAAK,IAAI;AAAA,EAAC;AAAA,EAAC,EAAEA,IAAE;AAAC,SAAK,SAAOA,OAAI,KAAK,KAAI,GAAG,KAAK,OAAK,KAAK,EAAEA,EAAC;AAAA,EAAE;AAAA,EAAC,EAAEA,IAAE;AAAC,SAAK,SAAO,KAAGQ,IAAE,KAAK,IAAI,IAAE,KAAK,KAAK,YAAY,OAAKR,KAAE,KAAK,EAAEI,IAAE,eAAeJ,EAAC,CAAC,GAAE,KAAK,OAAKA;AAAA,EAAC;AAAA,EAAC,EAAEA,IAAE;AAAC,UAAK,EAAC,QAAOM,IAAE,YAAWJ,GAAC,IAAEF,IAAEC,KAAE,YAAU,OAAOC,KAAE,KAAK,KAAKF,EAAC,KAAG,WAASE,GAAE,OAAKA,GAAE,KAAG,EAAE,cAAc,EAAEA,GAAE,GAAEA,GAAE,EAAE,CAAC,CAAC,GAAE,KAAK,OAAO,IAAGA;AAAG,QAAG,KAAK,MAAM,SAAOD;AAAE,WAAK,KAAK,EAAEK,EAAC;AAAA,SAAM;AAAC,YAAMN,KAAE,IAAI,EAAEC,IAAE,IAAI,GAAEC,KAAEF,GAAE,EAAE,KAAK,OAAO;AAAE,MAAAA,GAAE,EAAEM,EAAC,GAAE,KAAK,EAAEJ,EAAC,GAAE,KAAK,OAAKF;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE;AAAC,QAAIM,KAAE,EAAE,IAAIN,GAAE,OAAO;AAAE,WAAO,WAASM,MAAG,EAAE,IAAIN,GAAE,SAAQM,KAAE,IAAI,EAAEN,EAAC,CAAC,GAAEM;AAAA,EAAC;AAAA,EAAC,EAAEN,IAAE;AAAC,MAAE,KAAK,IAAI,MAAI,KAAK,OAAK,CAAE,GAAC,KAAK;AAAQ,UAAMM,KAAE,KAAK;AAAK,QAAIJ,IAAED,KAAE;AAAE,eAAUQ,MAAKT;AAAE,MAAAC,OAAIK,GAAE,SAAOA,GAAE,KAAKJ,KAAE,IAAI,EAAE,KAAK,EAAE,EAAG,CAAA,GAAE,KAAK,EAAE,GAAG,GAAE,MAAK,KAAK,OAAO,CAAC,IAAEA,KAAEI,GAAEL,EAAC,GAAEC,GAAE,KAAKO,EAAC,GAAER;AAAI,IAAAA,KAAEK,GAAE,WAAS,KAAK,KAAKJ,MAAGA,GAAE,KAAK,aAAYD,EAAC,GAAEK,GAAE,SAAOL;AAAA,EAAE;AAAA,EAAC,KAAKD,KAAE,KAAK,KAAK,aAAYM,IAAE;AAAC,SAAI,KAAK,OAAO,OAAG,MAAGA,EAAC,GAAEN,MAAGA,OAAI,KAAK,QAAM;AAAC,YAAMM,KAAEN,GAAE;AAAY,MAAAA,GAAE,OAAM,GAAGA,KAAEM;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,aAAaN,IAAE;AAAC,eAAS,KAAK,SAAO,KAAK,OAAKA,IAAE,KAAK,OAAOA,EAAC;AAAA,EAAE;AAAC;AAAC,MAAM,EAAC;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,QAAQ;AAAA,EAAO;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,KAAK;AAAA,EAAI;AAAA,EAAC,YAAYA,IAAEM,IAAEJ,IAAED,IAAEQ,IAAE;AAAC,SAAK,OAAK,GAAE,KAAK,OAAK,GAAE,KAAK,OAAK,QAAO,KAAK,UAAQT,IAAE,KAAK,OAAKM,IAAE,KAAK,OAAKL,IAAE,KAAK,UAAQQ,IAAEP,GAAE,SAAO,KAAG,OAAKA,GAAE,CAAC,KAAG,OAAKA,GAAE,CAAC,KAAG,KAAK,OAAK,MAAMA,GAAE,SAAO,CAAC,EAAE,KAAK,IAAI,QAAM,GAAE,KAAK,UAAQA,MAAG,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,KAAKF,IAAEM,KAAE,MAAKJ,IAAED,IAAE;AAAC,UAAMQ,KAAE,KAAK;AAAQ,QAAIN,KAAE;AAAG,QAAG,WAASM;AAAE,MAAAT,KAAE,EAAE,MAAKA,IAAEM,IAAE,CAAC,GAAEH,KAAE,CAACK,IAAER,EAAC,KAAGA,OAAI,KAAK,QAAMA,OAAI,GAAEG,OAAI,KAAK,OAAKH;AAAA,SAAO;AAAC,YAAMC,KAAED;AAAE,UAAIK,IAAED;AAAE,WAAIJ,KAAES,GAAE,CAAC,GAAEJ,KAAE,GAAEA,KAAEI,GAAE,SAAO,GAAEJ;AAAI,QAAAD,KAAE,EAAE,MAAKH,GAAEC,KAAEG,EAAC,GAAEC,IAAED,EAAC,GAAED,OAAI,MAAIA,KAAE,KAAK,KAAKC,EAAC,IAAGF,YAAI,CAACK,IAAEJ,EAAC,KAAGA,OAAI,KAAK,KAAKC,EAAC,IAAED,OAAI,IAAEJ,KAAE,IAAEA,OAAI,MAAIA,OAAII,MAAG,MAAIK,GAAEJ,KAAE,CAAC,IAAG,KAAK,KAAKA,EAAC,IAAED;AAAA,IAAC;AAAC,IAAAD,MAAG,CAACF,MAAG,KAAK,EAAED,EAAC;AAAA,EAAC;AAAA,EAAC,EAAEA,IAAE;AAAC,IAAAA,OAAI,IAAE,KAAK,QAAQ,gBAAgB,KAAK,IAAI,IAAE,KAAK,QAAQ,aAAa,KAAK,MAAKA,MAAG,EAAE;AAAA,EAAC;AAAC;AAAC,MAAM,UAAU,EAAC;AAAA,EAAC,cAAa;AAAC,UAAM,GAAG,SAAS,GAAE,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,EAAEA,IAAE;AAAC,SAAK,QAAQ,KAAK,IAAI,IAAEA,OAAI,IAAE,SAAOA;AAAA,EAAC;AAAC;AAAC,MAAM,UAAU,EAAC;AAAA,EAAC,cAAa;AAAC,UAAM,GAAG,SAAS,GAAE,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,EAAEA,IAAE;AAAC,SAAK,QAAQ,gBAAgB,KAAK,MAAK,CAAC,CAACA,MAAGA,OAAI,CAAC;AAAA,EAAC;AAAC;AAAC,MAAM,UAAU,EAAC;AAAA,EAAC,YAAYA,IAAEM,IAAEJ,IAAED,IAAEQ,IAAE;AAAC,UAAMT,IAAEM,IAAEJ,IAAED,IAAEQ,EAAC,GAAE,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,KAAKT,IAAEM,KAAE,MAAK;AAAC,SAAIN,KAAE,EAAE,MAAKA,IAAEM,IAAE,CAAC,KAAG,OAAK;AAAE;AAAO,UAAMJ,KAAE,KAAK,MAAKD,KAAED,OAAI,KAAGE,OAAI,KAAGF,GAAE,YAAUE,GAAE,WAASF,GAAE,SAAOE,GAAE,QAAMF,GAAE,YAAUE,GAAE,SAAQO,KAAET,OAAI,MAAIE,OAAI,KAAGD;AAAG,IAAAA,MAAG,KAAK,QAAQ,oBAAoB,KAAK,MAAK,MAAKC,EAAC,GAAEO,MAAG,KAAK,QAAQ,iBAAiB,KAAK,MAAK,MAAKT,EAAC,GAAE,KAAK,OAAKA;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,kBAAY,OAAO,KAAK,OAAK,KAAK,KAAK,KAAK,KAAK,SAAS,QAAM,KAAK,SAAQA,EAAC,IAAE,KAAK,KAAK,YAAYA,EAAC;AAAA,EAAC;AAAC;AAAC,MAAM,EAAC;AAAA,EAAC,YAAYA,IAAEM,IAAEJ,IAAE;AAAC,SAAK,UAAQF,IAAE,KAAK,OAAK,GAAE,KAAK,OAAK,QAAO,KAAK,OAAKM,IAAE,KAAK,UAAQJ;AAAA,EAAC;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,KAAK;AAAA,EAAI;AAAA,EAAC,KAAKF,IAAE;AAAC,MAAE,MAAKA,EAAC;AAAA,EAAC;AAAC;AAAM,MAA6D,IAAEA,IAAE;AAAuB,IAAI,GAAE,CAAC,IAAGA,IAAE,oBAAFA,IAAE,kBAAkB,CAAE,IAAE,KAAK,OAAO;AAAE,MAAM,IAAE,CAACA,IAAEM,IAAEJ,OAAI;AAAC,QAAMD,KAAEC,IAAG,gBAAcI;AAAE,MAAIG,KAAER,GAAE;AAAW,MAAG,WAASQ,IAAE;AAAC,UAAMT,KAAEE,IAAG,gBAAc;AAAK,IAAAD,GAAE,aAAWQ,KAAE,IAAI,EAAEH,GAAE,aAAa,KAAIN,EAAC,GAAEA,IAAE,QAAOE,MAAG,CAAA,CAAE;AAAA,EAAC;AAAC,SAAOO,GAAE,KAAKT,EAAC,GAAES;AAAC;ACA16N,MAAMP,MAAE;UAAW,MAAM,UAAUF,IAAC;AAAA,EAAC,cAAa;AAAC,UAAM,GAAG,SAAS,GAAE,KAAK,gBAAc,EAAC,MAAK,KAAI,GAAE,KAAK,OAAK;AAAA,EAAM;AAAA,EAAC,mBAAkB;;AAAC,UAAMA,KAAE,MAAM,iBAAgB;AAAG,YAAO,UAAK,eAAc,iBAAnB,GAAmB,eAAeA,GAAE,aAAWA;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,UAAMI,KAAE,KAAK,OAAM;AAAG,SAAK,eAAa,KAAK,cAAc,cAAY,KAAK,cAAa,MAAM,OAAOJ,EAAC,GAAE,KAAK,OAAKC,EAAEG,IAAE,KAAK,YAAW,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,oBAAmB;AAAC,UAAM,kBAAiB,GAAG,KAAK,MAAM,aAAa,IAAE;AAAA,EAAC;AAAA,EAAC,uBAAsB;AAAC,UAAM,qBAAsB,GAAC,KAAK,MAAM,aAAa,KAAE;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAOA;AAAAA,EAAC;AAAC;AAACE,IAAE,gBAAc,MAAGA,IAAE,WAAW,IAAE,MAAGJ,IAAE,2BAA2B,EAAC,YAAWI,IAAC,CAAC;AAAE,MAAMH,MAAED,IAAE;AAA0BC,MAAI,EAAC,YAAWG,IAAC,CAAC;AAAA,CAAwDJ,IAAE,uBAAFA,IAAE,qBAAqB,KAAI,KAAK,OAAO;ACA5xB,MAAMC,MAAE,EAAC,WAAU,MAAG,MAAK,QAAO,WAAUH,KAAE,SAAQ,OAAG,YAAWC,IAAC,GAAEG,MAAE,CAACJ,KAAEG,KAAEF,IAAEG,OAAI;AAAC,QAAK,EAAC,MAAKC,IAAE,UAASC,GAAC,IAAEF;AAAE,MAAIF,KAAE,WAAW,oBAAoB,IAAII,EAAC;AAAE,MAAG,WAASJ,MAAG,WAAW,oBAAoB,IAAII,IAAEJ,KAAE,oBAAI,KAAG,GAAE,aAAWG,QAAKL,KAAE,OAAO,OAAOA,EAAC,GAAG,UAAQ,OAAIE,GAAE,IAAIE,GAAE,MAAKJ,EAAC,GAAE,eAAaK,IAAE;AAAC,UAAK,EAAC,MAAKF,GAAC,IAAEC;AAAE,WAAM,EAAC,IAAIA,IAAE;AAAC,YAAMC,KAAEJ,GAAE,IAAI,KAAK,IAAI;AAAE,MAAAA,GAAE,IAAI,KAAK,MAAKG,EAAC,GAAE,KAAK,cAAcD,IAAEE,IAAEL,EAAC;AAAA,IAAC,GAAE,KAAKC,IAAE;AAAC,aAAO,WAASA,MAAG,KAAK,EAAEE,IAAE,QAAOH,IAAEC,EAAC,GAAEA;AAAA,IAAC,EAAC;AAAA,EAAC;AAAC,MAAG,aAAWI,IAAE;AAAC,UAAK,EAAC,MAAKF,GAAC,IAAEC;AAAE,WAAO,SAASA,IAAE;AAAC,YAAMC,KAAE,KAAKF,EAAC;AAAE,MAAAF,GAAE,KAAK,MAAKG,EAAC,GAAE,KAAK,cAAcD,IAAEE,IAAEL,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,QAAM,MAAM,qCAAmCK,EAAC;AAAC;AAAE,SAASA,IAAEL,IAAE;AAAC,SAAM,CAACC,IAAEE,OAAI,YAAU,OAAOA,KAAEC,IAAEJ,IAAEC,IAAEE,EAAC,KAAG,CAACH,IAAEC,IAAEE,OAAI;AAAC,UAAMC,KAAEH,GAAE,eAAeE,EAAC;AAAE,WAAOF,GAAE,YAAY,eAAeE,IAAEH,EAAC,GAAEI,KAAE,OAAO,yBAAyBH,IAAEE,EAAC,IAAE;AAAA,EAAM,GAAGH,IAAEC,IAAEE,EAAC;AAAC;ACAlyB,SAASC,IAAEA,IAAE;AAAC,SAAOJ,IAAE,EAAC,GAAGI,IAAE,OAAM,MAAG,WAAU,MAAE,CAAC;AAAC;;;;;;;;;;;;ACFhD,MAAM,gBAAgBgB,IAAW;AAAA,EAAjC,cAAA;AAAA,UAAA,GAAA,SAAA;AAwDQ,SAAA,KAAA;AAGO,SAAA,WAAA;AAGC,SAAA,YAAA;AAAA,EAAA;AAAA,EAKb,YAAYnB,IAAU;AAC5B,IAAAA,GAAE,eAAe;AACjB,IAAAA,GAAE,gBAAgB;AAEZ,UAAA,QAAQ,IAAI,YAAY,SAAS;AAAA,MACrC,QAAQ;AAAA,QACN,IAAI,KAAK;AAAA,QACT,UAAU,CAAC,KAAK;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,CACX;AACD,SAAK,cAAc,KAAK;AAExB,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,KAAK,IAAI,CAAC,KAAK,QAAQ;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,SAAS;AACA,WAAAoB;AAAAA;AAAAA,sBAEW,KAAK,EAAE;AAAA,gBACb,KAAK,YAAY,YAAY,EAAE;AAAA,kBAC7B,KAAK,QAAQ;AAAA,iBACd,KAAK,WAAW;AAAA,sBACX,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B;AACF;AAnGa,QACJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAuDhBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAvDf,QAwDX,WAAA,MAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,SAAS;AAAA,GA1DhB,QA2DX,WAAA,YAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,SAAS;AAAA,GA7DhB,QA8DX,WAAA,aAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,UAAU;AAAA,GAhEjB,QAiEX,WAAA,WAAA,CAAA;AAoCF,IAAI,CAAC,eAAe,IAAI,cAAc,GAAG;AACxB,iBAAA,OAAO,gBAAgB,OAAO;AAC/C;;;;;ACvGA,MAAM,aAAa,CAAC,YAAiBH;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MAc/B,OAAO;AAAA;AAAA;AAKN,MAAM,YAAY,WAAWI;AAAAA;AAAAA,CAEnC;AAEY,MAAA,WAAW,WAAWA,yCAA2C;AAEvE,MAAM,YAAY,WAAWA;AAAAA;AAAAA,CAEnC;AAEM,MAAM,YAAY,WAAWA;AAAAA;AAAAA,CAEnC;AAEM,MAAM,eAAe,WAAWA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAKtC;AAEM,MAAM,UAAUJ;AAAAA;AAAAA;AAAAA,qCAGc,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAevB,CAAC;AAAA;AAAA;AAAA;;;;;;;;;;;;ACvDb,MAAM,sBAAsBD,IAAW;AAAA,EA6C5C,cAAc;AACN;AAlBG,SAAA,WAAA;AAGM,SAAA,iBAAA;AAGjB,SAAA,WAAW,EAAE,KAAK,GAAG,MAAM;AAG3B,SAAA,eAAyB,SAAS;AAGP,SAAA,YAAA;AAAA,EAO3B;AAAA,EAEA,oBAAoB;AAClB,UAAM,kBAAkB;AAAA,EAC1B;AAAA,EAEQ,gBAAgB,IAAY,UAAmB;AACrD,QAAI,KAAK,cAAc;AAChB,WAAA,aAAa,IAAI,QAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,SAAS;AACA,WAAAC;AAAAA,QACH,KAAK,WACHA;AAAAA;AAAAA;AAAAA,0BAGgB,KAAK,iBAAiB,SAAS,MAAM;AAAA,uBACxC,MACP,KAAK,gBAAgB,SAAS,KAAK,iBAAiB,SAAS,SAAS,QAAQ,IAAI,CAAC;AAAA;AAAA,gBAEnF,KAAK,iBAAiB,SAAS,SAAS,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA,0BAIlD,KAAK,QAAQ;AAAA,2BACZ,IAAI;AAAA,uBACR,MAAM,KAAK,gBAAgB,YAAY,KAAK,WAAW,QAAQ,IAAI,CAAC;AAAA;AAAA,gBAE3E,KAAK,WAAW,YAAY,SAAS;AAAA;AAAA,cAG3CA;AAAAA;AAAAA;AAAAA,uBAGa,MAAM,KAAK,gBAAgB,eAAe,IAAI,CAAC;AAAA;AAAA,gBAEtD,YAAY;AAAA;AAAA,WAEjB;AAAA;AAAA,EAET;AACF;AA1Fa,cACJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AA2BhBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,SAAS;AAAA,GA3BhB,cA4BX,WAAA,YAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,SAAS;AAAA,GA9BhB,cA+BX,WAAA,kBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAjCf,cAkCX,WAAA,YAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GApCf,cAqCX,WAAA,gBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAvCf,cAwCX,WAAA,aAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,UAAU;AAAA,GA1CjB,cA2CX,WAAA,gBAAA,CAAA;AAiDF,IAAI,CAAC,eAAe,IAAI,oBAAoB,GAAG;AAC9B,iBAAA,OAAO,sBAAsB,aAAa;AAC3D;;;;;;;;;;;;;;;;AC1FO,MAAM,eAAeJ,IAAW;AAAA,EAAhC,cAAA;AAAA,UAAA,GAAA,SAAA;AAiDQ,SAAA,KAAA;AAGE,SAAA,OAAA;AAGO,SAAA,cAAA;AAGH,SAAA,WAAA;AAAA,EAAA;AAAA,EAKX,cAAc;AACpB,QAAI,KAAK,UAAU;AACZ,WAAA,SAAS,KAAK,EAAE;AAAA,IACvB;AAEK,SAAA;AAAA,MACH,IAAI,YAAY,iBAAiB;AAAA,QAC/B,QAAQ,EAAE,IAAI,KAAK,GAAG;AAAA,QACtB,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA,EAEA,SAAS;AACA,WAAAC;AAAAA,6CACkC,KAAK,WAAW;AAAA,mBAC1C,KAAK,QAAQ;AAAA,mCACG,KAAK,IAAI;AAAA,UAClC,KAAK,cAAcA,kCAAqC,KAAK,WAAW,SAAS,EAAE;AAAA;AAAA;AAAA,EAG3F;AACF;AAtFa,OACJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAgDhBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAhDf,OAiDX,WAAA,MAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAnDf,OAoDX,WAAA,QAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAtDf,OAuDX,WAAA,eAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAzDf,OA0DX,WAAA,YAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,UAAU;AAAA,GA5DjB,OA6DX,WAAA,YAAA,CAAA;AA2BK,MAAM,mBAAmBJ,IAAW;AAAA,EAApC,cAAA;AAAA,UAAA,GAAA,SAAA;AAuCL,SAAA,UAAwB;AAGd,SAAA,UAAA;AAGF,SAAA,QAAA;AAAA,EAAA;AAAA,EAKA,mBAAmBnB,IAAgB;AACzC,QAAI,KAAK,gBAAgB;AAClB,WAAA,eAAeA,GAAE,OAAO,EAAE;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,SAAS;AACT,aAAAoB;AAAAA,IACT;AAEA,QAAI,KAAK,OAAO;AACP,aAAAA,uBAA0B,KAAK,KAAK;AAAA,IAC7C;AAEA,QAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,WAAW,GAAG;AACvC,aAAAA;AAAAA,IACT;AAEM,UAAA,YACJ,KAAK,QAAQ,WAAW,IACpB,gBACA,KAAK,QAAQ,WAAW,IACtB,gBACA;AAED,WAAAA;AAAAA,gCACqB,SAAS;AAAA,UAC/B,KAAK,QAAQ;AAAA,MACb,CAAC,WAAuBA;AAAAA;AAAAA,mBAEf,OAAO,EAAE;AAAA,qBACP,OAAO,IAAI;AAAA,4BACJ,OAAO,eAAe,EAAE;AAAA,yBAC3B,OAAO,QAAQ;AAAA,+BACT,KAAK,kBAAkB;AAAA;AAAA;AAAA,IAAA,CAG7C;AAAA;AAAA;AAAA,EAGP;AACF;AA5Fa,WACJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAsChBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,OAAO;AAAA,GAtCd,WAuCX,WAAA,WAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,SAAS;AAAA,GAzChB,WA0CX,WAAA,WAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GA5Cf,WA6CX,WAAA,SAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,UAAU;AAAA,GA/CjB,WAgDX,WAAA,kBAAA,CAAA;AA+CF,IAAI,CAAC,eAAe,IAAI,YAAY,GAAG;AACtB,iBAAA,OAAO,cAAc,MAAM;AAC5C;AAEA,IAAI,CAAC,eAAe,IAAI,iBAAiB,GAAG;AAC3B,iBAAA,OAAO,mBAAmB,UAAU;AACrD;;;;;;;;;;;;;;;;;ACjMO,MAAM,oBAAoBJ,IAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA;AAuFL,SAAA,UAAwB;AAGd,SAAA,UAAA;AAGF,SAAA,QAAA;AAGK,SAAA,aAAA;AAGJ,SAAA,SAAA;AAAA,EAAA;AAAA,EAQD,mBAAmBnB,IAAgB;AACzC,QAAI,KAAK,gBAAgB;AAClB,WAAA,eAAeA,GAAE,OAAO,EAAE;AAAA,IACjC;AAAA,EACF;AAAA,EAEQ,cAAc;AACpB,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAc,eAAe;AACvB,QAAA;AACF,WAAK,UAAU;AACT,YAAA,eAAe,MAAM,MAAM,GAAG,KAAK,UAAU,mBAAmB,KAAK,MAAM,EAAE;AAC7E,YAAA,WAAW,MAAM,aAAa;AACpC,YAAM,gBAAgB,SAAS,IAAI,CAAC,aAAkB;AAAA,QACpD,IAAI,QAAQ;AAAA,QACZ,MAAM,QAAQ,gBAAgB;AAAA,QAC9B,aAAa,QAAQ,gBAAgB;AAAA,QACrC,UACE,QAAQ,gBAAgB,cACxB;AAAA,MACF,EAAA;AACI,YAAA,kBAAkB,cAAc,OAAO,CAAC,WAAuB,CAAC,CAAC,OAAO,IAAI;AAC7E,WAAA,UAAU,CAAC,GAAG,eAAe;AAClC,WAAK,cAAc;AAAA,aACZ,KAAK;AACJ,cAAA,MAAM,gBAAgB,GAAG;AACjC,WAAK,QAAQ;AAAA,IAAA,UACb;AACA,WAAK,UAAU;AACf,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,oBAAoB;AAClB,UAAM,kBAAkB;AAGpB,QAAA,OAAO,iBAAiB,QAAQ;AAC7B,WAAA,SAAS,OAAO,gBAAgB;AAAA,IACvC;AAGI,QAAA,OAAO,iBAAiB,YAAY;AACjC,WAAA,aAAa,OAAO,gBAAgB;AAAA,IAC3C;AAEI,QAAA,KAAK,cAAc,KAAK,QAAQ;AAClC,WAAK,aAAa;AAAA,IAAA,OACb;AACL,WAAK,UAAU;AACf,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,SAAS;AACA,WAAAoB;AAAAA,qCAC0B,KAAK,WAAW;AAAA;AAAA,8CAEP,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAOzC,KAAK,OAAO;AAAA,qBACZ,KAAK,OAAO;AAAA,mBACd,KAAK,KAAK;AAAA,2BACF,KAAK,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAIhD;AACF;AAxLa,YACJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAsFhBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,OAAO;AAAA,GAtFd,YAuFX,WAAA,WAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,SAAS;AAAA,GAzFhB,YA0FX,WAAA,WAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GA5Ff,YA6FX,WAAA,SAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GA/Ff,YAgGX,WAAA,cAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAlGf,YAmGX,WAAA,UAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,UAAU;AAAA,GArGjB,YAsGX,WAAA,kBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,UAAU;AAAA,GAxGjB,YAyGX,WAAA,WAAA,CAAA;AAiFF,IAAI,CAAC,eAAe,IAAI,kBAAkB,GAAG;AAC5B,iBAAA,OAAO,oBAAoB,WAAW;AACvD;;;;;AC7LO,MAA6OT,MAAE,CAAAZ,OAAG,WAASA,GAAE;ACApQ,MAAM,IAAE,EAAC,WAAU,GAAE,OAAM,GAAE,UAAS,GAAE,mBAAkB,GAAE,OAAM,GAAE,SAAQ,EAAC,GAAEF,MAAE,CAAAD,OAAG,IAAIC,QAAK,EAAC,iBAAgBD,IAAE,QAAOC,GAAC;AAAG,MAAMK,GAAC;AAAA,EAAC,YAAYN,IAAE;AAAA,EAAE;AAAA,EAAA,IAAI,OAAM;AAAC,WAAO,KAAK,KAAK;AAAA,EAAI;AAAA,EAAC,KAAKA,IAAEC,IAAEK,IAAE;AAAC,SAAK,OAAKN,IAAE,KAAK,OAAKC,IAAE,KAAK,OAAKK;AAAA,EAAC;AAAA,EAAC,KAAKN,IAAEC,IAAE;AAAC,WAAO,KAAK,OAAOD,IAAEC,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOD,IAAEC,IAAE;AAAC,WAAO,KAAK,OAAO,GAAGA,EAAC;AAAA,EAAC;AAAC;ACAxS,MAAM,IAAE,CAACK,IAAEN,OAAI;AAAC,QAAMC,KAAEK,GAAE;AAAK,MAAG,WAASL;AAAE,WAAM;AAAG,aAAUK,MAAKL;AAAE,IAAAK,GAAE,OAAON,IAAE,KAAE,GAAE,EAAEM,IAAEN,EAAC;AAAE,SAAM;AAAE,GAAEG,MAAE,CAAAG,OAAG;AAAC,MAAIN,IAAEC;AAAE,KAAE;AAAC,QAAG,YAAUD,KAAEM,GAAE;AAAM;AAAM,IAAAL,KAAED,GAAE,MAAKC,GAAE,OAAOK,EAAC,GAAEA,KAAEN;AAAA,EAAC,SAAO,MAAIC,IAAG;AAAK,GAAE,IAAE,CAAAK,OAAG;AAAC,WAAQN,IAAEA,KAAEM,GAAE,MAAKA,KAAEN,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAK,QAAG,WAASC;AAAE,MAAAD,GAAE,OAAKC,KAAE,oBAAI;AAAA,aAAYA,GAAE,IAAIK,EAAC;AAAE;AAAM,IAAAL,GAAE,IAAIK,EAAC,GAAE,EAAEN,EAAC;AAAA,EAAC;AAAC;AAAE,SAASS,IAAEH,IAAE;AAAC,aAAS,KAAK,QAAMH,IAAE,IAAI,GAAE,KAAK,OAAKG,IAAE,EAAE,IAAI,KAAG,KAAK,OAAKA;AAAC;AAAC,SAASD,IAAEC,IAAEN,KAAE,OAAGC,KAAE,GAAE;AAAC,QAAMG,KAAE,KAAK,MAAKK,KAAE,KAAK;AAAK,MAAG,WAASA,MAAG,MAAIA,GAAE;AAAK,QAAGT;AAAE,UAAG,MAAM,QAAQI,EAAC;AAAE,iBAAQE,KAAEL,IAAEK,KAAEF,GAAE,QAAOE;AAAI,YAAEF,GAAEE,EAAC,GAAE,KAAE,GAAEH,IAAEC,GAAEE,EAAC,CAAC;AAAA;AAAO,gBAAMF,OAAI,EAAEA,IAAE,KAAE,GAAED,IAAEC,EAAC;AAAA;AAAQ,QAAE,MAAKE,EAAC;AAAC;AAAC,MAAM,IAAE,CAAAA,OAAG;AAAC,EAAAA,GAAE,QAAML,EAAE,UAAQK,GAAE,SAAFA,GAAE,OAAOD,MAAEC,GAAE,SAAFA,GAAE,OAAOG;AAAE;AAAE,MAAM,UAAUT,GAAC;AAAA,EAAC,cAAa;AAAC,UAAM,GAAG,SAAS,GAAE,KAAK,OAAK;AAAA,EAAM;AAAA,EAAC,KAAKM,IAAEN,IAAEC,IAAE;AAAC,UAAM,KAAKK,IAAEN,IAAEC,EAAC,GAAE,EAAE,IAAI,GAAE,KAAK,cAAYK,GAAE;AAAA,EAAI;AAAA,EAAC,KAAKA,IAAEN,KAAE,MAAG;AAAC,IAAAM,OAAI,KAAK,gBAAc,KAAK,cAAYA,IAAEA,KAAE,KAAK,cAAW,IAAK,KAAK,eAAgB,IAAEN,OAAI,EAAE,MAAKM,EAAC,GAAEH,IAAE,IAAI;AAAA,EAAE;AAAA,EAAC,SAASH,IAAE;AAAC,QAAGM,IAAE,KAAK,IAAI;AAAE,WAAK,KAAK,KAAKN,IAAE,IAAI;AAAA,SAAM;AAAC,YAAMM,KAAE,CAAC,GAAG,KAAK,KAAK,IAAI;AAAE,MAAAA,GAAE,KAAK,IAAI,IAAEN,IAAE,KAAK,KAAK,KAAKM,IAAE,MAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,eAAc;AAAA,EAAE;AAAA,EAAA,cAAa;AAAA,EAAE;AAAA;ACAjhC,MAAM,IAAE,MAAI,IAAI;AAAE,MAAM,EAAC;;AAAE,MAAM,IAAE,oBAAI,WAAQD,KAAEH,IAAE,cAAcI,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,WAAON;AAAAA,EAAC;AAAA,EAAC,OAAOM,IAAE,CAACJ,EAAC,GAAE;AAAC,UAAMD,KAAEC,OAAI,KAAK;AAAE,WAAOD,MAAG,WAAS,KAAK,KAAG,KAAK,GAAG,MAAM,IAAGA,MAAG,KAAK,OAAK,KAAK,QAAM,KAAK,IAAEC,IAAE,KAAK,KAAGI,GAAE,SAAS,MAAK,KAAK,GAAG,KAAK,KAAGA,GAAE,OAAO,IAAGN;AAAAA,EAAC;AAAA,EAAC,GAAGA,IAAE;AAAC,QAAG,KAAK,gBAAcA,KAAE,SAAQ,cAAY,OAAO,KAAK,GAAE;AAAC,YAAMM,KAAE,KAAK,MAAI;AAAW,UAAIJ,KAAE,EAAE,IAAII,EAAC;AAAE,iBAASJ,OAAIA,KAAE,oBAAI,WAAQ,EAAE,IAAII,IAAEJ,EAAC,IAAG,WAASA,GAAE,IAAI,KAAK,CAAC,KAAG,KAAK,EAAE,KAAK,KAAK,IAAG,MAAM,GAAEA,GAAE,IAAI,KAAK,GAAEF,EAAC,GAAE,WAASA,MAAG,KAAK,EAAE,KAAK,KAAK,IAAGA,EAAC;AAAA,IAAC;AAAM,WAAK,EAAE,QAAMA;AAAA,EAAC;AAAA,EAAC,IAAI,KAAI;AAAC,WAAM,cAAY,OAAO,KAAK,IAAE,EAAE,IAAI,KAAK,MAAI,UAAU,GAAG,IAAI,KAAK,CAAC,IAAE,KAAK,GAAG;AAAA,EAAK;AAAA,EAAC,eAAc;AAAC,SAAK,OAAK,KAAK,MAAI,KAAK,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,SAAK,GAAG,KAAK,EAAE;AAAA,EAAC;AAAC,CAAC;;;;;;;;;;;;ACKrrB,MAAM,uBAAuBoB,IAAW;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AAEL,SAAA,SAAqB,EAAE,SAAS,aAAa,QAAQ,GAAG,UAAU,CAAA;AAGlE,SAAQ,YAAoCM;AAE5C,SAAQ,WAAW;AACnB,SAAQ,iBAAgC;AAAA,EAAA;AAAA,EAgBxC,oBAAoB;AAClB,UAAM,kBAAkB;AACxB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,uBAAuB;AACrB,UAAM,qBAAqB;AAC3B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEQ,iBAAiB;AACvB,UAAM,UAAU,MAAM;AACpB,WAAK,cAAc;AACd,WAAA,iBAAiB,sBAAsB,OAAO;AAAA,IAAA;AAEhD,SAAA,iBAAiB,sBAAsB,OAAO;AAAA,EACrD;AAAA,EAEQ,gBAAgB;AACtB,QAAI,KAAK,gBAAgB;AACvB,2BAAqB,KAAK,cAAc;AACxC,WAAK,iBAAiB;AAAA,IACxB;AAAA,EACF;AAAA,EAEQ,gBAAgB;AAChB,UAAA,SAAS,KAAK,UAAU;AAC9B,QAAI,CAAC;AAAQ;AAEP,UAAA,MAAM,OAAO,WAAW,IAAI;AAClC,QAAI,CAAC;AAAK;AAGJ,UAAA,MAAM,OAAO,oBAAoB;AACvC,UAAM,eAAe,OAAO;AAC5B,UAAM,gBAAgB,OAAO;AAG7B,WAAO,QAAQ,eAAe;AAC9B,WAAO,SAAS,gBAAgB;AAG5B,QAAA,MAAM,KAAK,GAAG;AAGlB,QAAI,UAAU,GAAG,GAAG,cAAc,aAAa;AAG/C,UAAM,MAAM;AACN,UAAA,WAAW,KAAK,IAAI,IAAI,gBAAgB,KAAK,WAAW,KAAK,OAAO,KAAK,QAAQ;AACvF,UAAM,eAAe,gBAAgB;AAG/B,UAAA,gBAAgB,KAAK,OAAO,YAAY,SAAS,KAAK,OAAO,SAAS,KAAK,OAAO;AAClF,UAAA,kBACJ,KAAK,OAAO,YAAY,SAAS,KAAK,OAAO,WAAW,KAAK,OAAO;AAEtE,QAAI,kBAAkB;AAAG;AAGzB,QAAI,oBAA8B,CAAA;AAC9B,QAAA,mBAAmB,gBAAgB,SAAS,GAAG;AACjD,YAAM,iBAAiB,gBAAgB;AACvC,YAAM,aAAa,KAAK,KAAK,iBAAiB,EAAE;AAChD,UAAI,iBAAiB,CAAA;AAErB,eAASpB,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,cAAM,QAAQA,KAAI;AAClB,cAAM,MAAM,KAAK,KAAKA,KAAI,KAAK,YAAY,cAAc;AACzD,YAAI,eAAe;AACnB,iBAASqB,KAAI,OAAOA,KAAI,KAAKA,MAAK;AAChB,0BAAA,gBAAgBA,EAAC,KAAK;AAAA,QACxC;AACe,uBAAA,KAAK,EAAE,QAAQrB,IAAG,UAAU,OAAO,QAAQ,KAAK,QAAQ,aAAc,CAAA;AAAA,MACvF;AAEA,qBAAe,KAAK,CAACI,IAAGM,OAAMA,GAAE,SAASN,GAAE,MAAM;AACjD,YAAM,aAAa,eAAe,MAAM,GAAG,CAAC;AACtC,YAAA,WAAW,KAAK,IAAI,GAAG,WAAW,IAAI,CAACN,OAAMA,GAAE,QAAQ,CAAC;AACxD,YAAA,SAAS,KAAK,IAAI,GAAG,WAAW,IAAI,CAACA,OAAMA,GAAE,MAAM,CAAC;AAE1D,UAAI,SAAS,UAAU;AACrB,iBAASE,KAAI,GAAGA,KAAI,KAAK,UAAUA,MAAK;AACtC,gBAAM,WAAW,WAAYA,MAAK,KAAK,WAAW,MAAO,SAAS;AAC5D,gBAAA,QAAQ,KAAK,IAAI,iBAAiB,GAAG,KAAK,MAAM,QAAQ,CAAC;AAC/D,4BAAkBA,EAAC,IAAI,gBAAgB,KAAK,KAAK;AAAA,QACnD;AAAA,MAAA,OACK;AACL,iBAASA,KAAI,GAAGA,KAAI,KAAK,UAAUA,MAAK;AACtC,gBAAM,WAAYA,MAAK,KAAK,WAAW,MAAO,iBAAiB;AACzD,gBAAA,QAAQ,KAAK,IAAI,iBAAiB,GAAG,KAAK,MAAM,QAAQ,CAAC;AAC/D,4BAAkBA,EAAC,IAAI,gBAAgB,KAAK,KAAK;AAAA,QACnD;AAAA,MACF;AAEA,YAAM,mBAAmB,KAAK,IAAI,GAAG,mBAAmB,CAAC;AACzD,YAAM,0BAA0B,KAAK,OAAO,YAAY,SAAS,MAAM;AAEvE,0BAAoB,kBAAkB,IAAI,CAAC,OAAO,UAAU;AAC1D,cAAM,gBAAgB,QAAQ;AAC9B,cAAM,sBAAsB,0BAA2B,SAAS,KAAK,WAAW,KAAM;AACtF,eAAO,KAAK,IAAI,GAAG,gBAAgB,mBAAmB;AAAA,MAAA,CACvD;AAAA,IAAA,OACI;AACD,UAAA,KAAK,OAAO,YAAY,QAAQ;AAClC,iBAASA,KAAI,GAAGA,KAAI,KAAK,UAAUA,MAAK;AAChC,gBAAA,OAAO,KAAK,IAAA,IAAQ;AAC1B,gBAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,OAAOA,KAAI,GAAG;AACjD,4BAAkBA,EAAC,IAAI;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAGA,aAASA,KAAI,GAAGA,KAAI,KAAK,UAAUA,MAAK;AAChC,YAAA,gBACJ,kBAAkB,SAAS,IACvB,kBAAkBA,EAAC,MAAM,SACvB,kBAAkBA,EAAC,IACnB,gBACF;AAEF,UAAA,KAAK,OAAO,YAAY,QAAQ;AAClC,YAAI,YAAY,sBAAsB,gBAAgB,MAAM,GAAG;AAAA,MAAA,OAC1D;AACL,YAAI,YAAY,uBAAuB,gBAAgB,MAAM,GAAG;AAAA,MAClE;AAEA,YAAM,YAAY,KAAK,IAAI,GAAG,gBAAgB,MAAM,YAAY;AAChE,YAAMY,KAAI,gBAAgB,KAAK,WAAWZ,OAAM,WAAW;AAC3D,YAAM,SAAS,WAAW;AAG1B,UAAI,UAAU;AACd,UAAI,OAAOY,KAAI,QAAQ,gBAAgB,IAAI,SAAS;AACpD,UAAI,OAAOA,KAAI,WAAW,QAAQ,gBAAgB,IAAI,SAAS;AAC3D,UAAA;AAAA,QACFA,KAAI;AAAA,QACJ,gBAAgB,IAAI;AAAA,QACpBA,KAAI;AAAA,QACJ,gBAAgB,IAAI,YAAY;AAAA,MAAA;AAElC,UAAI,OAAOA,KAAI,UAAU,gBAAgB,CAAC;AACtC,UAAA,OAAOA,IAAG,gBAAgB,CAAC;AAC/B,UAAI,OAAOA,IAAG,gBAAgB,IAAI,YAAY,MAAM;AAChD,UAAA;AAAA,QACFA;AAAA,QACA,gBAAgB,IAAI;AAAA,QACpBA,KAAI;AAAA,QACJ,gBAAgB,IAAI;AAAA,MAAA;AAEtB,UAAI,KAAK;AAGT,UAAI,UAAU;AACV,UAAA,OAAOA,IAAG,gBAAgB,CAAC;AAC/B,UAAI,OAAOA,KAAI,UAAU,gBAAgB,CAAC;AAC1C,UAAI,OAAOA,KAAI,UAAU,gBAAgB,IAAI,YAAY,MAAM;AAC3D,UAAA;AAAA,QACFA,KAAI;AAAA,QACJ,gBAAgB,IAAI;AAAA,QACpBA,KAAI,WAAW;AAAA,QACf,gBAAgB,IAAI;AAAA,MAAA;AAEtB,UAAI,OAAOA,KAAI,QAAQ,gBAAgB,IAAI,SAAS;AAChD,UAAA;AAAA,QACFA;AAAA,QACA,gBAAgB,IAAI;AAAA,QACpBA;AAAA,QACA,gBAAgB,IAAI,YAAY;AAAA,MAAA;AAE9B,UAAA,OAAOA,IAAG,gBAAgB,CAAC;AAC/B,UAAI,KAAK;AAAA,IACX;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAOG,aAAgBO,GAAI,KAAK,SAAS,CAAC;AAAA,EAC5C;AACF;AA3Ma,eAUJ,SAASN;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AARhBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GADf,eAEX,WAAA,UAAA,CAAA;AAGQD,kBAAA;AAAA,EADPM,IAAM;AAAA,GAJI,eAKH,WAAA,aAAA,CAAA;AAwMV,IAAI,CAAC,eAAe,IAAI,qBAAqB,GAAG;AAC/B,iBAAA,OAAO,uBAAuB,cAAc;AAC7D;;;;;;;;;;;;;;;;ACtNO,MAAM,kBAAkBT,IAAW;AAAA,EAAnC,cAAA;AAAA,UAAA,GAAA,SAAA;AAEL,SAAQ,aAAwB,MAAM,CAAC,EAAE,KAAK,KAAK;AAEnD,SAAQ,UAAU;AAClB,SAAQ,iBAAiB;AACzB,SAAQ,UAAU;AAClB,SAAQ,eAAe;AACvB,SAAQ,oBAAoB;AAC5B,SAAQ,gBAAgB;AACxB,SAAQ,gBAAgB;AACxB,SAAQ,QAAQ;AAChB,SAAQ,aAAuB;EAAC;AAAA,EA+BhC,oBAAoB;AAClB,UAAM,kBAAkB;AACxB,SAAK,eAAe;AAEpB,SAAK,MAAM,YAAY,sBAAsB,GAAG,KAAK,cAAc,IAAI;AACvE,SAAK,MAAM,YAAY,cAAc,GAAG,KAAK,OAAO,IAAI;AACxD,SAAK,MAAM,YAAY,eAAe,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,uBAAuB;AACrB,UAAM,qBAAqB;AAC3B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEQ,iBAAiB;AACvB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEQ,gBAAgB;AACtB,SAAK,WAAW,QAAQ,CAAC,OAAO,OAAO,aAAa,EAAE,CAAC;AACvD,SAAK,aAAa;EACpB;AAAA,EAEQ,kBAAkB;AAExB,SAAK,aAAa,MAAM,KAAK,OAAO,EAAE,KAAK,KAAK;AAGhD,aAASd,KAAI,GAAGA,KAAI,KAAK,SAASA,MAAK;AACrC,YAAM,QAAQA,MAAK,KAAK,oBAAoB,KAAK;AAG3C,YAAA,gBAAgB,OAAO,WAAW,MAAM;AAC5C,aAAK,aAAa,CAAC,GAAG,KAAK,UAAU;AAChC,aAAA,WAAWA,EAAC,IAAI;AAGf,cAAA,cAAc,OAAO,WAAW,MAAM;AAC1C,eAAK,aAAa,CAAC,GAAG,KAAK,UAAU;AAChC,eAAA,WAAWA,EAAC,IAAI;AAAA,QAAA,GACpB,KAAK,iBAAiB;AAEpB,aAAA,WAAW,KAAK,WAAW;AAAA,SAC/B,KAAK;AAEH,WAAA,WAAW,KAAK,aAAa;AAAA,IACpC;AAGA,UAAM,iBAAiB,OAAO;AAAA,MAC5B,MAAM;AACJ,aAAK,gBAAgB;AAAA,MACvB;AAAA,MACA,KAAK,UAAU,KAAK,oBAAoB,KAAK,gBAAgB,KAAK;AAAA,IAAA;AAG/D,SAAA,WAAW,KAAK,cAAc;AAAA,EACrC;AAAA,EAEA,SAAS;AACA,WAAAe;AAAAA;AAAAA,UAED,KAAK,WAAW;AAAA,MAChB,CAAC,aAAaA;AAAAA;AAAAA;AAAAA,kCAGU,WAChB,eAAe,KAAK,YAAY,QAChC,eAAe;AAAA;AAAA;AAAA,IAAA,CAGxB;AAAA;AAAA;AAAA,EAGP;AACF;AAtHa,UAcJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAZRC,kBAAA;AAAA,EADPM,IAAM;AAAA,GADI,UAEH,WAAA,cAAA,CAAA;AAsHV,IAAI,CAAC,eAAe,IAAI,gBAAgB,GAAG;AAC1B,iBAAA,OAAO,kBAAkB,SAAS;AACnD;;;;;AC3HO,MAAM,wBAAwBT,IAAW;AAAA,EAkB9C,SAAS;AACA,WAAAC;AAAAA;AAAAA;AAAAA;AAAAA,EAIT;AACF;AAxBa,gBACJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAyBlB,IAAI,CAAC,eAAe,IAAI,sBAAsB,GAAG;AAChC,iBAAA,OAAO,wBAAwB,eAAe;AAC/D;;;;;;;;;;;;;;;;AChBA,MAAM,eAAe;AAEd,MAAM,kBAAkBF,IAAW;AAAA,EAgCxC,cAAc;AACN;AAhCiC,SAAA,aAAA;AACJ,SAAA,SAAA;AACE,SAAA,WAAA;AAE9B,SAAQ,QAAkB,SAAS;AACnC,SAAQ,kBAAkB;AAC1B,SAAQ,aAAa;AACrB,SAAQ,aAAa;AACrB,SAAQ,gBAAmC;AAC3C,SAAQ,SAAgF;AAAA,MAC/F,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAAC;AAAA,IAAA;AAeI,SAAA,iBAAiB,KAAK;AAEvC,SAAQ,qBAAoC;AAwH5C,SAAQ,eAAe,MAAM;AACtB,WAAA,iBAAiB,KAAK;IAAwB;AArHnD,QAAI,OAAO,iBAAiB;AACtB,UAAA,OAAO,gBAAgB,QAAQ;AAC5B,aAAA,SAAS,OAAO,gBAAgB;AAAA,MACvC;AAEI,UAAA,OAAO,gBAAgB,YAAY;AAChC,aAAA,aAAa,OAAO,gBAAgB;AAAA,MAC3C;AAEI,UAAA,OAAO,gBAAgB,UAAU;AAC9B,aAAA,WAAW,OAAO,gBAAgB;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EA/BA,0BAA0B;AACxB,WAAOU,IAAM,KAAK,QAAQ,EACvB,KAAK,aAAa,OAAO,EAAE,KAAK,IAAI,MAAM,OAAO,aAAa,MAAM,EACpE,KAAK,gBAAgB,OAAO;AAAA,MAC3B,KAAK,OAAO,cAAc;AAAA,MAC1B,MAAM,OAAO,aAAa;AAAA,IAAA,EAC1B,EACD,KAAK,YAAY,OAAO,EAAE,KAAK,IAAI,MAAM,GAAK,EAAA,EAC9C,KAAK,eAAe,OAAO,EAAE,KAAK,OAAO,cAAc,KAAK,MAAM,GAAK,EAAA,EACvE,UAAU,OAAO,EAAE,KAAK,OAAO,cAAc,KAAK,MAAM,OAAO,aAAa,IAAM,EAAA;AAAA,EACvF;AAAA,EA8FA,oBAAoB;AAClB,UAAM,kBAAkB;AACjB,WAAA,iBAAiB,UAAU,KAAK,YAAY;AAG/C,QAAA,CAAC,OAAO,iBAAiB;AAC3B,aAAO,kBAAkB;IAC3B;AAEO,WAAA,gBAAgB,aAAa,KAAK;AAEzC,QAAI,KAAK,QAAQ;AACR,aAAA,gBAAgB,SAAS,KAAK;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,uBAAuB;AACrB,UAAM,qBAAqB;AACpB,WAAA,oBAAoB,UAAU,KAAK,YAAY;AAClD,QAAA,KAAK,uBAAuB,MAAM;AAC7B,aAAA,aAAa,KAAK,kBAAkB;AAAA,IAC7C;AAGA,QAAI,KAAK,eAAe;AACtB,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAMQ,mBAAmB;AACzB,SAAK,aAAa;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEQ,mBAAmB;AACzB,SAAK,aAAa;AACd,QAAA,KAAK,uBAAuB,MAAM;AAC7B,aAAA,aAAa,KAAK,kBAAkB;AAAA,IAC7C;AACK,SAAA,qBAAqB,OAAO,WAAW,MAAM;AAC5C,UAAA,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa;AAAA,MACpB;AACA,WAAK,qBAAqB;AAAA,OACzB,GAAG;AAAA,EACR;AAAA,EAEQ,iBAAiB,IAAY,cAAuB;AAC1D,QAAI,OAAO,eAAe;AACxB,WAAK,kBAAkB;AACvB;AAAA,IACF;AAEMA,QAAA,CAAC,IAAI,YAAY,CAAC,EACrB,KAAK,CAAC,SAAS,IAAI,GAAG,MAAM;AAC3B,WAAK,eAAe;IACrB,CAAA,EACA,KAAK,CAAC,SAAS,KAAK,GAAG,MAAM;AAC5B,WAAK,eAAe;IACrB,CAAA,EACA,KAAK,CAAC,YAAY,KAAK,GAAG,MAAM;AAC/B,WAAK,eAAe;IAAW,CAChC,EACA,UAAU,MAAM;AACf;AAAA,IAAA,CACD;AAAA,EACL;AAAA,EAEA,MAAc,mBAAmB,cAAsB;AAErD,SAAK,kBAAkB;AACvB,SAAK,QAAQ,SAAS;AAElB,QAAA;AAEF,YAAM,EAAE,WAAA,IAAe,MAAM,OAAO,8BAAoB,EAAA,KAAA,CAAAzB,OAAAA,GAAA,CAAA;AAElD,YAAA,UAAU,IAAI,WAAW,EAAE,OAAO,cAAc,YAAY,KAAK,WAAA,CAAY;AAE3E,cAAA,GAAG,gBAAgB,CAAC,SAAS;AACnC,aAAK,QAAQ,KAAK;AAAA,MAAA,CACnB;AAEO,cAAA,GAAG,UAAU,CAAC,SAAS;AAC7B,aAAK,SAAS;AAAA,MAAA,CACf;AAGO,cAAA,GAAG,SAAS,CAAC,SAAS;AACpB,gBAAA,MAAM,kBAAkB,KAAK,KAAK;AAC1C,aAAK,QAAQ,SAAS;AACtB,aAAK,gBAAgB;AAAA,MAAA,CACtB;AAED,YAAM,QAAQ;AACd,WAAK,gBAAgB;AAAA,aACd,OAAO;AACN,cAAA,MAAM,iCAAiC,KAAK;AACpD,WAAK,QAAQ,SAAS;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,KAAK,SAAS,KAAK;AAC3B,UAAM,aAAa,KAAK,UAAU,SAAS,cAAc,OAAO,MAAM,KAAK;AAE3E,UAAM,cAAcyB,IAAM,KAAK,KAAK,EACjC,KAAK,SAAS,SAAS,MAAMT,oCAAuC,EACpE,KAAK,SAAS,aAAa,MAAMA,gDAAmD,EACpF;AAAA,MACCU,IAAE,MAAM,SAAS,eAAe,SAAS,cAAc;AAAA,MACvD,MAAMV,iCAAoC,KAAK,MAAM;AAAA,IAAA,EAEtD,KAAK,SAAS,QAAQ,MAAM,OAAO,EACnC,UAAU,MAAM,OAAO;AAEnB,WAAAA;AAAAA;AAAAA,kCAEuB,KAAK,UAAU,SAAS,iBAClD,KAAK,UAAU,SAAS,iBACpB,UACA,EAAE,IAAI,KAAK,UAAU,SAAS,SAAS,KAAK,aAAa,YAAY,EAAE,IAAI,KAC5E,UAAU,SAAS,cAClB,gBACA,EAAE,IAAI,KAAK,UAAU,SAAS,gBAAgB,kBAAkB,EAAE;AAAA,sBACxD,GAAG,aAAa,UAAU;AAAA,sBAC1B,KAAK,gBAAgB;AAAA,sBACrB,KAAK,gBAAgB;AAAA;AAAA,UAEjC,WAAW;AAAA,UACX,KAAK,cAAc,KAAK,UAAU,SAAS,cACzCA;AAAAA;AAAAA,4BAEgB,KAAK,UAAU,SAAS,KAAK;AAAA,4BAC7B,EAAE,KAAK,MAAM,YAAY;AAAA;AAAA,gCAErB,KAAK,KAAK;AAAA,gCACV,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA;AAAA,gBAGpDW,CAAO;AAAA;AAAA,QAEX,KAAK,kBACHX;AAAAA,uBACa,MAAO,KAAK,kBAAkB,KAAM;AAAA,8BAC7B,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAAA,0BACtC,KAAK,UAAU;AAAA,sBACnB,KAAK,MAAM;AAAA,kCAEvBW,CAAO;AAAA;AAAA,EAEf;AACF;AArRa,UAiDJ,SAASV;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAhDYC,kBAAA;AAAA,EAA3BC,IAAS,EAAE,MAAM,QAAQ;AAAA,GADf,UACiB,WAAA,cAAA,CAAA;AACAD,kBAAA;AAAA,EAA3BC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAFf,UAEiB,WAAA,UAAA,CAAA;AACAD,kBAAA;AAAA,EAA3BC,IAAS,EAAE,MAAM,QAAQ;AAAA,GAHf,UAGiB,WAAA,YAAA,CAAA;AAEXD,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GALI,UAKM,WAAA,SAAA,CAAA;AACAN,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GANI,UAMM,WAAA,mBAAA,CAAA;AACAN,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GAPI,UAOM,WAAA,cAAA,CAAA;AACAN,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GARI,UAQM,WAAA,cAAA,CAAA;AACAN,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GATI,UASM,WAAA,iBAAA,CAAA;AACAN,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GAVI,UAUM,WAAA,UAAA,CAAA;AAkBAN,kBAAA;AAAA,EAAhBM,IAAM;AAAA,GA5BI,UA4BM,WAAA,kBAAA,CAAA;AA2PnB,IAAI,CAAC,eAAe,IAAI,YAAY,GAAG;AACtB,iBAAA,OAAO,cAAc,SAAS;AAC/C;;;;;;;;;;;;;;;;ACpSO,MAAM,wBAAwBT,IAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAEL,SAAA,QAAkB,SAAS;AAAA,EAAA;AAAA,EA2C3B,SAAS;AACA,WAAAC;AAAAA;AAAAA,uCAE4B,KAAK,KAAK;AAAA,mCACd,KAAK,eAAe;AAAA;AAAA;AAAA,EAGrD;AAAA,EAEQ,gBAAwB;AAC9B,YAAQ,KAAK,OAAO;AAAA,MAClB,KAAK,SAAS;AACL,eAAA;AAAA,MACT,KAAK,SAAS;AACL,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EACF;AACF;AAhEa,gBAIJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAFhBC,kBAAA;AAAA,EADCC,IAAS,EAAE,MAAM,QAAQ;AAAA,GADf,gBAEX,WAAA,SAAA,CAAA;AAgEF,IAAI,CAAC,eAAe,IAAI,mBAAmB,GAAG;AAC7B,iBAAA,OAAO,qBAAqB,eAAe;AAC5D;;;;;;;;;;;;;;;;ACpEO,MAAM,wBAAwBJ,IAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAEL,SAAA,QAAkB,SAAS;AAGH,SAAA,eAAA;AAGC,SAAA,gBAAA;AAAA,EAAA;AAAA,EAmEzB,SAAS;AACD,UAAA,WAAW,KAAK,UAAU,SAAS;AACnC,UAAA,UAAU,KAAK,UAAU,SAAS;AAEjC,WAAAC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,wBAMa,CAAC,WAAW,CAAC,KAAK,YAAY;AAAA,qBACjC,KAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOlB,CAAC,WAAW,CAAC,KAAK,aAAa;AAAA,qBAClC,KAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,+CAKI,CAAC,QAAQ,WAAW,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrF;AAAA,EAEQ,mBAAmB;AACzB,SAAK,cAAc,IAAI,YAAY,aAAa,CAAC;AAAA,EACnD;AAAA,EAEQ,oBAAoB;AAC1B,SAAK,cAAc,IAAI,YAAY,cAAc,CAAC;AAAA,EACpD;AAAA,EAEQ,kBAAkB;AACxB,SAAK,cAAc,IAAI,YAAY,MAAM,CAAC;AAAA,EAC5C;AACF;AAtHa,gBAUJ,SAASC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AARhB,gBAAA;AAAA,EADCE,IAAS,EAAE,MAAM,QAAQ;AAAA,GADf,gBAEX,WAAA,SAAA,CAAA;AAGA,gBAAA;AAAA,EADCA,IAAS,EAAE,MAAM,SAAS;AAAA,GAJhB,gBAKX,WAAA,gBAAA,CAAA;AAGA,gBAAA;AAAA,EADCA,IAAS,EAAE,MAAM,SAAS;AAAA,GAPhB,gBAQX,WAAA,iBAAA,CAAA;AAgHF,IAAI,CAAC,eAAe,IAAI,mBAAmB,GAAG;AAC7B,iBAAA,OAAO,qBAAqB,eAAe;AAC5D;;;;;ACnHO,SAAS,uBAAuB;AAGrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF;","x_google_ignoreList":[0,1,2,3,4,5,11,12,13,14]}
1
+ {"version":3,"file":"ui.js","sources":["../../src/ui/components/status-widget.ts","../../src/ui/components/control-panel.ts","../../src/ui/components/index.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { SDKState } from \"../../core/types\"\n\nexport class ObiStatusWidget extends LitElement {\n @property({ type: String })\n state: SDKState = SDKState.READY\n\n static styles = css`\n :host {\n display: inline-block;\n font-family: Arial, sans-serif;\n }\n\n .status-container {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n border-radius: 16px;\n background-color: #f3f4f6;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n\n .status-indicator {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n margin-right: 8px;\n }\n\n .ready {\n background-color: #10b981;\n }\n\n .active {\n background-color: #3b82f6;\n }\n\n .error {\n background-color: #ef4444;\n }\n\n .status-text {\n font-size: 14px;\n font-weight: 500;\n color: #1f2937;\n }\n `\n\n render() {\n return html`\n <div class=\"status-container\">\n <div class=\"status-indicator ${this.state}\"></div>\n <div class=\"status-text\">${this.getStatusText()}</div>\n </div>\n `\n }\n\n private getStatusText(): string {\n switch (this.state) {\n case SDKState.READY:\n return \"Ready\"\n case SDKState.ERROR:\n return \"Error\"\n default:\n return \"Unknown\"\n }\n }\n}\n\nif (!customElements.get(\"obi-status-widget\")) {\n customElements.define(\"obi-status-widget\", ObiStatusWidget)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { SDKState } from \"../../core/types\"\n\nexport class ObiControlPanel extends LitElement {\n @property({ type: String })\n state: SDKState = SDKState.READY\n\n @property({ type: Boolean })\n voiceEnabled: boolean = true\n\n @property({ type: Boolean })\n screenEnabled: boolean = true\n\n static styles = css`\n :host {\n display: block;\n font-family: Arial, sans-serif;\n --obi-primary: #3b82f6;\n --obi-danger: #ef4444;\n --obi-gray: #6b7280;\n }\n\n .control-container {\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 8px;\n background-color: #ffffff;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n max-width: 300px;\n }\n\n .control-header {\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: 600;\n color: #111827;\n }\n\n .control-buttons {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n button {\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition:\n background-color 0.2s,\n opacity 0.2s;\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-voice {\n background-color: var(--obi-primary);\n color: white;\n }\n\n .btn-screen {\n background-color: var(--obi-primary);\n color: white;\n }\n\n .btn-stop {\n background-color: var(--obi-danger);\n color: white;\n }\n `\n\n render() {\n const isActive = this.state === SDKState.AGENT_SPEAKING\n const isReady = this.state === SDKState.READY\n\n return html`\n <div class=\"control-container\">\n <div class=\"control-header\">Obi Controls</div>\n <div class=\"control-buttons\">\n <button\n class=\"btn-voice\"\n ?disabled=${!isReady || !this.voiceEnabled}\n @click=${this.handleVoiceClick}\n >\n Start Voice\n </button>\n\n <button\n class=\"btn-screen\"\n ?disabled=${!isReady || !this.screenEnabled}\n @click=${this.handleScreenClick}\n >\n Capture Screen\n </button>\n\n <button class=\"btn-stop\" ?disabled=${!isActive} @click=${this.handleStopClick}>\n Stop\n </button>\n </div>\n </div>\n `\n }\n\n private handleVoiceClick() {\n this.dispatchEvent(new CustomEvent(\"voice-start\"))\n }\n\n private handleScreenClick() {\n this.dispatchEvent(new CustomEvent(\"screen-start\"))\n }\n\n private handleStopClick() {\n this.dispatchEvent(new CustomEvent(\"stop\"))\n }\n}\n\nif (!customElements.get(\"obi-control-panel\")) {\n customElements.define(\"obi-control-panel\", ObiControlPanel)\n}\n","export * from \"./status-widget\"\nexport * from \"./control-panel\"\nexport * from \"./obi-widget\"\nexport * from \"./audio-equalizer\"\nexport * from \"./dot-loader\"\nexport * from \"./nav-icon\"\nexport * from \"./navigation-bar\"\nexport * from \"./searching-loader\"\nexport * from \"./courses/courses\"\nexport * from \"./courses/course-modal\"\n\n// Function to define all custom elements at once for development\nexport function defineCustomElements() {\n // Import all components to ensure they're registered\n // This is primarily useful for development\n import(\"./status-widget\")\n import(\"./control-panel\")\n import(\"./obi-widget\")\n import(\"./audio-equalizer\")\n import(\"./dot-loader\")\n import(\"./nav-icon\")\n import(\"./navigation-bar\")\n import(\"./searching-loader\")\n import(\"./courses/courses\")\n import(\"./courses/course-modal\")\n}\n"],"names":["LitElement","html","css","__decorateClass","property","n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var ObiWidgetLoader=function(o){"use strict";const r={position:"bottom-right",apiBaseUrl:"https://www.iamobi.ai/api/",sdkVersion:"latest"};class n{constructor(t={}){this.config={...r,...t},this.widget=null,this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,i)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}const e=document.createElement("script");e.type="text/javascript";const a=`https://unpkg.com/obi-sdk@${this.config.sdkVersion||"latest"}/dist/obi-sdk.standalone.iife.js`;e.src=a,e.dataset.obiSdk="true",e.onload=()=>t(),e.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(e)})}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");switch(this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),this.config.apiBaseUrl&&t.setAttribute("api-base-url",this.config.apiBaseUrl),t.style.position="fixed",t.style.zIndex="9999",this.config.position){case"bottom-right":t.style.bottom="20px",t.style.right="20px";break;case"bottom-left":t.style.bottom="20px",t.style.left="20px";break;case"top-right":t.style.top="20px",t.style.right="20px";break;case"top-left":t.style.top="20px",t.style.left="20px";break}document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:this.config.apiBaseUrl};try{const i=new window.ObiSDK(t);window.obiSDKInstance=i}catch(i){console.error("Failed to initialize SDK:",i)}}}getWidget(){return this.widget}}return document.addEventListener("DOMContentLoaded",()=>{const s=window.obiWidgetConfig||{};new n(s)}),o.ObiWidgetLoader=n,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),o}({});
1
+ var ObiWidgetLoader=function(n){"use strict";const r="https://www.iamobi.ai/api/",d={position:"bottom-right",autoInit:!0};class s{constructor(t={}){this.config={...d,...t},this.widget=null,this.config.autoInit!==!1&&this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,e)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}this.fetchLatestVersion().then(i=>{const o=document.createElement("script");o.type="text/javascript";const c=`https://unpkg.com/obi-sdk@${i||"latest"}/dist/obi-sdk.standalone.iife.js`;o.src=c,o.dataset.obiSdk="true",o.onload=()=>t(),o.onerror=()=>e(new Error("Failed to load Obi SDK script")),document.head.appendChild(o)}).catch(()=>{const i=document.createElement("script");i.type="text/javascript",i.src="https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js",i.dataset.obiSdk="true",i.onload=()=>t(),i.onerror=()=>e(new Error("Failed to load Obi SDK script")),document.head.appendChild(i)})})}async fetchLatestVersion(){try{const t=await fetch("https://registry.npmjs.org/obi-sdk/latest");return t.ok?(await t.json()).version:null}catch(t){return console.warn("Failed to fetch latest version:",t),null}}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),t.setAttribute("api-base-url",r),this.config.position&&t.setAttribute("position",this.config.position),this.config.user&&t.setAttribute("user",JSON.stringify(this.config.user)),document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:r};try{const e=new window.ObiSDK(t);window.obiSDKInstance=e}catch(e){console.error("Failed to initialize SDK:",e)}}}initialize(){this.init()}getWidget(){return this.widget}}return document.addEventListener("DOMContentLoaded",()=>{const a=window.obiWidgetConfig||{};new s(a)}),n.ObiWidgetLoader=s,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),n}({});
2
2
  //# sourceMappingURL=obi-loader.iife.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"obi-loader.iife.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Custom endpoint URL if needed\n apiBaseUrl?: string\n // SDK version to load\n sdkVersion?: string\n}\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n apiBaseUrl: \"https://www.iamobi.ai/api/\",\n sdkVersion: \"latest\",\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n this.init()\n }\n\n private async init() {\n try {\n // Load the SDK script\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use unpkg.com for production\n const version = this.config.sdkVersion || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${version}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Pass endpoint if provided\n if (this.config.apiBaseUrl) {\n widget.setAttribute(\"api-base-url\", this.config.apiBaseUrl)\n }\n\n // Apply positioning styles based on config\n widget.style.position = \"fixed\"\n widget.style.zIndex = \"9999\"\n\n switch (this.config.position) {\n case \"bottom-right\":\n widget.style.bottom = \"20px\"\n widget.style.right = \"20px\"\n break\n case \"bottom-left\":\n widget.style.bottom = \"20px\"\n widget.style.left = \"20px\"\n break\n case \"top-right\":\n widget.style.top = \"20px\"\n widget.style.right = \"20px\"\n break\n case \"top-left\":\n widget.style.top = \"20px\"\n widget.style.left = \"20px\"\n break\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n // This is assuming the SDK exposes a global variable or method\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: this.config.apiBaseUrl,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","script","cdnUrl","widget","sdk"],"mappings":"6CAoBA,MAAMA,EAAkC,CACtC,SAAU,eACV,WAAY,6BACZ,WAAY,QACd,EAEA,MAAMC,CAAgB,CAIpB,YAAYC,EAA0B,GAAI,CACxC,KAAK,OAAS,CAAE,GAAGF,EAAgB,GAAGE,CAAO,EAC7C,KAAK,OAAS,KACd,KAAK,KAAK,CACZ,CAEA,MAAc,MAAO,CACf,GAAA,CAEF,MAAM,KAAK,aAGX,KAAK,aAAa,EAGlB,KAAK,cAAc,QACZC,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAEA,MAAc,YAAa,CACzB,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAExC,GAAA,SAAS,cAAc,sBAAsB,EAAG,CAC1CD,IACR,MACF,CAEM,MAAAE,EAAS,SAAS,cAAc,QAAQ,EAE9CA,EAAO,KAAO,kBAIR,MAAAC,EAAS,6BADC,KAAK,OAAO,YAAc,QACS,mCAEnDD,EAAO,IAAMC,EACbD,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMF,IACtBE,EAAO,QAAU,IAAMD,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAE/D,SAAA,KAAK,YAAYC,CAAM,CAAA,CACjC,CACH,CAEQ,cAAe,CAEjB,GAAA,SAAS,cAAc,YAAY,EAAG,CACnC,KAAA,OAAS,SAAS,cAAc,YAAY,EACjD,MACF,CAGA,GAAI,CAAC,eAAe,IAAI,YAAY,EAAG,CAC7B,QAAA,KACN,oFAAA,EAEF,MACF,CAEM,MAAAE,EAAS,SAAS,cAAc,YAAY,EAgB1C,OAbJ,KAAK,OAAO,QACdA,EAAO,aAAa,UAAW,KAAK,OAAO,MAAM,EAI/C,KAAK,OAAO,YACdA,EAAO,aAAa,eAAgB,KAAK,OAAO,UAAU,EAI5DA,EAAO,MAAM,SAAW,QACxBA,EAAO,MAAM,OAAS,OAEd,KAAK,OAAO,SAAU,CAC5B,IAAK,eACHA,EAAO,MAAM,OAAS,OACtBA,EAAO,MAAM,MAAQ,OACrB,MACF,IAAK,cACHA,EAAO,MAAM,OAAS,OACtBA,EAAO,MAAM,KAAO,OACpB,MACF,IAAK,YACHA,EAAO,MAAM,IAAM,OACnBA,EAAO,MAAM,MAAQ,OACrB,MACF,IAAK,WACHA,EAAO,MAAM,IAAM,OACnBA,EAAO,MAAM,KAAO,OACpB,KACJ,CAGS,SAAA,KAAK,YAAYA,CAAM,EAChC,KAAK,OAASA,EACd,QAAQ,IAAI,iCAAiC,CAC/C,CAEQ,eAAgB,CAGlB,GAAA,OAAQ,OAAe,OAAW,IAAa,CAQjD,MAAMN,EAAS,CACb,OAAQ,KAAK,OAAO,OACpB,WAAY,KAAK,OAAO,UAAA,EAGtB,GAAA,CACF,MAAMO,EAAmB,IAAK,OAAe,OAAOP,CAAM,EAExD,OAAe,eAAiBO,QAC3BN,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAClD,CACF,CACF,CAGO,WAAgC,CACrC,OAAO,KAAK,MACd,CACF,CAGA,gBAAS,iBAAiB,mBAAoB,IAAM,CAC5C,MAAAD,EAAU,OAAe,iBAAmB,GAClD,IAAID,EAAgBC,CAAM,CAC5B,CAAC"}
1
+ {"version":3,"file":"obi-loader.iife.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"6CAwBA,MAAMA,EAAe,6BAGfC,EAAkC,CACtC,SAAU,eACV,SAAU,EACZ,EAEA,MAAMC,CAAgB,CAIpB,YAAYC,EAA0B,GAAI,CACxC,KAAK,OAAS,CAAE,GAAGF,EAAgB,GAAGE,CAAO,EAC7C,KAAK,OAAS,KAGV,KAAK,OAAO,WAAa,IAC3B,KAAK,KAAK,CAEd,CAEA,MAAc,MAAO,CACf,GAAA,CACF,MAAM,KAAK,aAGX,KAAK,aAAa,EAGlB,KAAK,cAAc,QACZC,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAEA,MAAc,YAAa,CACzB,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAExC,GAAA,SAAS,cAAc,sBAAsB,EAAG,CAC1CD,IACR,MACF,CAGA,KAAK,mBAAmB,EACrB,KAAME,GAAY,CACX,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAE9CA,EAAO,KAAO,kBAIR,MAAAC,EAAS,6BADMF,GAAW,QACwB,mCAExDC,EAAO,IAAMC,EACbD,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAE/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,EACA,MAAM,IAAM,CAEL,MAAAA,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBACdA,EAAO,IAAM,mEACbA,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAC/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,CAAA,CACJ,CACH,CAGA,MAAc,oBAA6C,CACrD,GAAA,CACI,MAAAE,EAAW,MAAM,MAAM,2CAA2C,EACxE,OAAIA,EAAS,IACE,MAAMA,EAAS,QAChB,QAEP,WACAN,EAAO,CACN,eAAA,KAAK,kCAAmCA,CAAK,EAC9C,IACT,CACF,CAEQ,cAAe,CAEjB,GAAA,SAAS,cAAc,YAAY,EAAG,CACnC,KAAA,OAAS,SAAS,cAAc,YAAY,EACjD,MACF,CAGA,GAAI,CAAC,eAAe,IAAI,YAAY,EAAG,CAC7B,QAAA,KACN,oFAAA,EAEF,MACF,CAEM,MAAAO,EAAS,SAAS,cAAc,YAAY,EAG9C,KAAK,OAAO,QACdA,EAAO,aAAa,UAAW,KAAK,OAAO,MAAM,EAI5CA,EAAA,aAAa,eAAgBX,CAAY,EAG5C,KAAK,OAAO,UACdW,EAAO,aAAa,WAAY,KAAK,OAAO,QAAQ,EAIlD,KAAK,OAAO,MACdA,EAAO,aAAa,OAAQ,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,EAIrD,SAAA,KAAK,YAAYA,CAAM,EAChC,KAAK,OAASA,EACd,QAAQ,IAAI,iCAAiC,CAC/C,CAEQ,eAAgB,CAElB,GAAA,OAAQ,OAAe,OAAW,IAAa,CAQjD,MAAMR,EAAS,CACb,OAAQ,KAAK,OAAO,OACpB,WAAYH,CAAA,EAGV,GAAA,CACF,MAAMY,EAAmB,IAAK,OAAe,OAAOT,CAAM,EAExD,OAAe,eAAiBS,QAC3BR,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAClD,CACF,CACF,CAGO,YAAmB,CACxB,KAAK,KAAK,CACZ,CAGO,WAAgC,CACrC,OAAO,KAAK,MACd,CACF,CAGA,gBAAS,iBAAiB,mBAAoB,IAAM,CAC5C,MAAAD,EAAU,OAAe,iBAAmB,GAClD,IAAID,EAAgBC,CAAM,CAC5B,CAAC"}
@@ -1,11 +1,10 @@
1
- const s = {
1
+ const s = "https://www.iamobi.ai/api/", a = {
2
2
  position: "bottom-right",
3
- apiBaseUrl: "https://www.iamobi.ai/api/",
4
- sdkVersion: "latest"
3
+ autoInit: !0
5
4
  };
6
- class r {
5
+ class c {
7
6
  constructor(t = {}) {
8
- this.config = { ...s, ...t }, this.widget = null, this.init();
7
+ this.config = { ...a, ...t }, this.widget = null, this.config.autoInit !== !1 && this.init();
9
8
  }
10
9
  async init() {
11
10
  try {
@@ -15,17 +14,31 @@ class r {
15
14
  }
16
15
  }
17
16
  async loadScript() {
18
- return new Promise((t, i) => {
17
+ return new Promise((t, e) => {
19
18
  if (document.querySelector("script[data-obi-sdk]")) {
20
19
  t();
21
20
  return;
22
21
  }
23
- const e = document.createElement("script");
24
- e.type = "text/javascript";
25
- const n = `https://unpkg.com/obi-sdk@${this.config.sdkVersion || "latest"}/dist/obi-sdk.standalone.iife.js`;
26
- e.src = n, e.dataset.obiSdk = "true", e.onload = () => t(), e.onerror = () => i(new Error("Failed to load Obi SDK script")), document.head.appendChild(e);
22
+ this.fetchLatestVersion().then((i) => {
23
+ const o = document.createElement("script");
24
+ o.type = "text/javascript";
25
+ const r = `https://unpkg.com/obi-sdk@${i || "latest"}/dist/obi-sdk.standalone.iife.js`;
26
+ o.src = r, o.dataset.obiSdk = "true", o.onload = () => t(), o.onerror = () => e(new Error("Failed to load Obi SDK script")), document.head.appendChild(o);
27
+ }).catch(() => {
28
+ const i = document.createElement("script");
29
+ i.type = "text/javascript", i.src = "https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js", i.dataset.obiSdk = "true", i.onload = () => t(), i.onerror = () => e(new Error("Failed to load Obi SDK script")), document.head.appendChild(i);
30
+ });
27
31
  });
28
32
  }
33
+ // Fetch the latest version from npm registry
34
+ async fetchLatestVersion() {
35
+ try {
36
+ const t = await fetch("https://registry.npmjs.org/obi-sdk/latest");
37
+ return t.ok ? (await t.json()).version : null;
38
+ } catch (t) {
39
+ return console.warn("Failed to fetch latest version:", t), null;
40
+ }
41
+ }
29
42
  createWidget() {
30
43
  if (document.querySelector("obi-widget")) {
31
44
  this.widget = document.querySelector("obi-widget");
@@ -38,46 +51,36 @@ class r {
38
51
  return;
39
52
  }
40
53
  const t = document.createElement("obi-widget");
41
- switch (this.config.apiKey && t.setAttribute("api-key", this.config.apiKey), this.config.apiBaseUrl && t.setAttribute("api-base-url", this.config.apiBaseUrl), t.style.position = "fixed", t.style.zIndex = "9999", this.config.position) {
42
- case "bottom-right":
43
- t.style.bottom = "20px", t.style.right = "20px";
44
- break;
45
- case "bottom-left":
46
- t.style.bottom = "20px", t.style.left = "20px";
47
- break;
48
- case "top-right":
49
- t.style.top = "20px", t.style.right = "20px";
50
- break;
51
- case "top-left":
52
- t.style.top = "20px", t.style.left = "20px";
53
- break;
54
- }
55
- document.body.appendChild(t), this.widget = t, console.log("Widget created and added to DOM");
54
+ this.config.apiKey && t.setAttribute("api-key", this.config.apiKey), t.setAttribute("api-base-url", s), this.config.position && t.setAttribute("position", this.config.position), this.config.user && t.setAttribute("user", JSON.stringify(this.config.user)), document.body.appendChild(t), this.widget = t, console.log("Widget created and added to DOM");
56
55
  }
57
56
  initializeSDK() {
58
57
  if (typeof window.ObiSDK < "u") {
59
58
  const t = {
60
59
  apiKey: this.config.apiKey,
61
- apiBaseUrl: this.config.apiBaseUrl
60
+ apiBaseUrl: s
62
61
  };
63
62
  try {
64
- const i = new window.ObiSDK(t);
65
- window.obiSDKInstance = i;
66
- } catch (i) {
67
- console.error("Failed to initialize SDK:", i);
63
+ const e = new window.ObiSDK(t);
64
+ window.obiSDKInstance = e;
65
+ } catch (e) {
66
+ console.error("Failed to initialize SDK:", e);
68
67
  }
69
68
  }
70
69
  }
70
+ // Public method to manually initialize the widget
71
+ initialize() {
72
+ this.init();
73
+ }
71
74
  // Add a public method to get the widget element
72
75
  getWidget() {
73
76
  return this.widget;
74
77
  }
75
78
  }
76
79
  document.addEventListener("DOMContentLoaded", () => {
77
- const o = window.obiWidgetConfig || {};
78
- new r(o);
80
+ const n = window.obiWidgetConfig || {};
81
+ new c(n);
79
82
  });
80
83
  export {
81
- r as ObiWidgetLoader
84
+ c as ObiWidgetLoader
82
85
  };
83
86
  //# sourceMappingURL=obi-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"obi-loader.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Custom endpoint URL if needed\n apiBaseUrl?: string\n // SDK version to load\n sdkVersion?: string\n}\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n apiBaseUrl: \"https://www.iamobi.ai/api/\",\n sdkVersion: \"latest\",\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n this.init()\n }\n\n private async init() {\n try {\n // Load the SDK script\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use unpkg.com for production\n const version = this.config.sdkVersion || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${version}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Pass endpoint if provided\n if (this.config.apiBaseUrl) {\n widget.setAttribute(\"api-base-url\", this.config.apiBaseUrl)\n }\n\n // Apply positioning styles based on config\n widget.style.position = \"fixed\"\n widget.style.zIndex = \"9999\"\n\n switch (this.config.position) {\n case \"bottom-right\":\n widget.style.bottom = \"20px\"\n widget.style.right = \"20px\"\n break\n case \"bottom-left\":\n widget.style.bottom = \"20px\"\n widget.style.left = \"20px\"\n break\n case \"top-right\":\n widget.style.top = \"20px\"\n widget.style.right = \"20px\"\n break\n case \"top-left\":\n widget.style.top = \"20px\"\n widget.style.left = \"20px\"\n break\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n // This is assuming the SDK exposes a global variable or method\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: this.config.apiBaseUrl,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","script","cdnUrl","widget","sdk"],"mappings":"AAoBA,MAAMA,IAAkC;AAAA,EACtC,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AACd;AAEA,MAAMC,EAAgB;AAAA,EAIpB,YAAYC,IAA0B,IAAI;AACxC,SAAK,SAAS,EAAE,GAAGF,GAAgB,GAAGE,EAAO,GAC7C,KAAK,SAAS,MACd,KAAK,KAAK;AAAA,EACZ;AAAA,EAEA,MAAc,OAAO;AACf,QAAA;AAEF,YAAM,KAAK,cAGX,KAAK,aAAa,GAGlB,KAAK,cAAc;AAAA,aACZC,GAAO;AACN,cAAA,MAAM,oCAAoCA,CAAK;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAc,aAAa;AACzB,WAAO,IAAI,QAAc,CAACC,GAASC,MAAW;AAExC,UAAA,SAAS,cAAc,sBAAsB,GAAG;AAC1C,QAAAD;AACR;AAAA,MACF;AAEM,YAAAE,IAAS,SAAS,cAAc,QAAQ;AAE9C,MAAAA,EAAO,OAAO;AAIR,YAAAC,IAAS,6BADC,KAAK,OAAO,cAAc,QACS;AAEnD,MAAAD,EAAO,MAAMC,GACbD,EAAO,QAAQ,SAAS,QACjBA,EAAA,SAAS,MAAMF,KACtBE,EAAO,UAAU,MAAMD,EAAO,IAAI,MAAM,+BAA+B,CAAC,GAE/D,SAAA,KAAK,YAAYC,CAAM;AAAA,IAAA,CACjC;AAAA,EACH;AAAA,EAEQ,eAAe;AAEjB,QAAA,SAAS,cAAc,YAAY,GAAG;AACnC,WAAA,SAAS,SAAS,cAAc,YAAY;AACjD;AAAA,IACF;AAGA,QAAI,CAAC,eAAe,IAAI,YAAY,GAAG;AAC7B,cAAA;AAAA,QACN;AAAA,MAAA;AAEF;AAAA,IACF;AAEM,UAAAE,IAAS,SAAS,cAAc,YAAY;AAgB1C,YAbJ,KAAK,OAAO,UACdA,EAAO,aAAa,WAAW,KAAK,OAAO,MAAM,GAI/C,KAAK,OAAO,cACdA,EAAO,aAAa,gBAAgB,KAAK,OAAO,UAAU,GAI5DA,EAAO,MAAM,WAAW,SACxBA,EAAO,MAAM,SAAS,QAEd,KAAK,OAAO,UAAU;AAAA,MAC5B,KAAK;AACH,QAAAA,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,QAAQ;AACrB;AAAA,MACF,KAAK;AACH,QAAAA,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,OAAO;AACpB;AAAA,MACF,KAAK;AACH,QAAAA,EAAO,MAAM,MAAM,QACnBA,EAAO,MAAM,QAAQ;AACrB;AAAA,MACF,KAAK;AACH,QAAAA,EAAO,MAAM,MAAM,QACnBA,EAAO,MAAM,OAAO;AACpB;AAAA,IACJ;AAGS,aAAA,KAAK,YAAYA,CAAM,GAChC,KAAK,SAASA,GACd,QAAQ,IAAI,iCAAiC;AAAA,EAC/C;AAAA,EAEQ,gBAAgB;AAGlB,QAAA,OAAQ,OAAe,SAAW,KAAa;AAQjD,YAAMN,IAAS;AAAA,QACb,QAAQ,KAAK,OAAO;AAAA,QACpB,YAAY,KAAK,OAAO;AAAA,MAAA;AAGtB,UAAA;AACF,cAAMO,IAAmB,IAAK,OAAe,OAAOP,CAAM;AAExD,eAAe,iBAAiBO;AAAA,eAC3BN,GAAO;AACN,gBAAA,MAAM,6BAA6BA,CAAK;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGO,YAAgC;AACrC,WAAO,KAAK;AAAA,EACd;AACF;AAGA,SAAS,iBAAiB,oBAAoB,MAAM;AAC5C,QAAAD,IAAU,OAAe,mBAAmB;AAClD,MAAID,EAAgBC,CAAM;AAC5B,CAAC;"}
1
+ {"version":3,"file":"obi-loader.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"AAwBA,MAAMA,IAAe,8BAGfC,IAAkC;AAAA,EACtC,UAAU;AAAA,EACV,UAAU;AACZ;AAEA,MAAMC,EAAgB;AAAA,EAIpB,YAAYC,IAA0B,IAAI;AACxC,SAAK,SAAS,EAAE,GAAGF,GAAgB,GAAGE,EAAO,GAC7C,KAAK,SAAS,MAGV,KAAK,OAAO,aAAa,MAC3B,KAAK,KAAK;AAAA,EAEd;AAAA,EAEA,MAAc,OAAO;AACf,QAAA;AACF,YAAM,KAAK,cAGX,KAAK,aAAa,GAGlB,KAAK,cAAc;AAAA,aACZC,GAAO;AACN,cAAA,MAAM,oCAAoCA,CAAK;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAc,aAAa;AACzB,WAAO,IAAI,QAAc,CAACC,GAASC,MAAW;AAExC,UAAA,SAAS,cAAc,sBAAsB,GAAG;AAC1C,QAAAD;AACR;AAAA,MACF;AAGA,WAAK,mBAAmB,EACrB,KAAK,CAACE,MAAY;AACX,cAAAC,IAAS,SAAS,cAAc,QAAQ;AAE9C,QAAAA,EAAO,OAAO;AAIR,cAAAC,IAAS,6BADMF,KAAW,QACwB;AAExD,QAAAC,EAAO,MAAMC,GACbD,EAAO,QAAQ,SAAS,QACjBA,EAAA,SAAS,MAAMH,KACtBG,EAAO,UAAU,MAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,GAE/D,SAAA,KAAK,YAAYE,CAAM;AAAA,MAAA,CACjC,EACA,MAAM,MAAM;AAEL,cAAAA,IAAS,SAAS,cAAc,QAAQ;AAC9C,QAAAA,EAAO,OAAO,mBACdA,EAAO,MAAM,oEACbA,EAAO,QAAQ,SAAS,QACjBA,EAAA,SAAS,MAAMH,KACtBG,EAAO,UAAU,MAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,GAC/D,SAAA,KAAK,YAAYE,CAAM;AAAA,MAAA,CACjC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA;AAAA,EAGA,MAAc,qBAA6C;AACrD,QAAA;AACI,YAAAE,IAAW,MAAM,MAAM,2CAA2C;AACxE,aAAIA,EAAS,MACE,MAAMA,EAAS,QAChB,UAEP;AAAA,aACAN,GAAO;AACN,qBAAA,KAAK,mCAAmCA,CAAK,GAC9C;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,eAAe;AAEjB,QAAA,SAAS,cAAc,YAAY,GAAG;AACnC,WAAA,SAAS,SAAS,cAAc,YAAY;AACjD;AAAA,IACF;AAGA,QAAI,CAAC,eAAe,IAAI,YAAY,GAAG;AAC7B,cAAA;AAAA,QACN;AAAA,MAAA;AAEF;AAAA,IACF;AAEM,UAAAO,IAAS,SAAS,cAAc,YAAY;AAG9C,IAAA,KAAK,OAAO,UACdA,EAAO,aAAa,WAAW,KAAK,OAAO,MAAM,GAI5CA,EAAA,aAAa,gBAAgBX,CAAY,GAG5C,KAAK,OAAO,YACdW,EAAO,aAAa,YAAY,KAAK,OAAO,QAAQ,GAIlD,KAAK,OAAO,QACdA,EAAO,aAAa,QAAQ,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,GAIrD,SAAA,KAAK,YAAYA,CAAM,GAChC,KAAK,SAASA,GACd,QAAQ,IAAI,iCAAiC;AAAA,EAC/C;AAAA,EAEQ,gBAAgB;AAElB,QAAA,OAAQ,OAAe,SAAW,KAAa;AAQjD,YAAMR,IAAS;AAAA,QACb,QAAQ,KAAK,OAAO;AAAA,QACpB,YAAYH;AAAA,MAAA;AAGV,UAAA;AACF,cAAMY,IAAmB,IAAK,OAAe,OAAOT,CAAM;AAExD,eAAe,iBAAiBS;AAAA,eAC3BR,GAAO;AACN,gBAAA,MAAM,6BAA6BA,CAAK;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGO,aAAmB;AACxB,SAAK,KAAK;AAAA,EACZ;AAAA;AAAA,EAGO,YAAgC;AACrC,WAAO,KAAK;AAAA,EACd;AACF;AAGA,SAAS,iBAAiB,oBAAoB,MAAM;AAC5C,QAAAD,IAAU,OAAe,mBAAmB;AAClD,MAAID,EAAgBC,CAAM;AAC5B,CAAC;"}
@@ -1,2 +1,2 @@
1
- (function(e,o){typeof exports=="object"&&typeof module<"u"?o(exports):typeof define=="function"&&define.amd?define(["exports"],o):(e=typeof globalThis<"u"?globalThis:e||self,o(e.ObiWidgetLoader={}))})(this,function(e){"use strict";const o={position:"bottom-right",apiBaseUrl:"https://www.iamobi.ai/api/",sdkVersion:"latest"};class s{constructor(t={}){this.config={...o,...t},this.widget=null,this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,n)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}const i=document.createElement("script");i.type="text/javascript";const d=`https://unpkg.com/obi-sdk@${this.config.sdkVersion||"latest"}/dist/obi-sdk.standalone.iife.js`;i.src=d,i.dataset.obiSdk="true",i.onload=()=>t(),i.onerror=()=>n(new Error("Failed to load Obi SDK script")),document.head.appendChild(i)})}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");switch(this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),this.config.apiBaseUrl&&t.setAttribute("api-base-url",this.config.apiBaseUrl),t.style.position="fixed",t.style.zIndex="9999",this.config.position){case"bottom-right":t.style.bottom="20px",t.style.right="20px";break;case"bottom-left":t.style.bottom="20px",t.style.left="20px";break;case"top-right":t.style.top="20px",t.style.right="20px";break;case"top-left":t.style.top="20px",t.style.left="20px";break}document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:this.config.apiBaseUrl};try{const n=new window.ObiSDK(t);window.obiSDKInstance=n}catch(n){console.error("Failed to initialize SDK:",n)}}}getWidget(){return this.widget}}document.addEventListener("DOMContentLoaded",()=>{const r=window.obiWidgetConfig||{};new s(r)}),e.ObiWidgetLoader=s,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
1
+ (function(o,n){typeof exports=="object"&&typeof module<"u"?n(exports):typeof define=="function"&&define.amd?define(["exports"],n):(o=typeof globalThis<"u"?globalThis:o||self,n(o.ObiWidgetLoader={}))})(this,function(o){"use strict";const n="https://www.iamobi.ai/api/",a={position:"bottom-right",autoInit:!0};class r{constructor(t={}){this.config={...a,...t},this.widget=null,this.config.autoInit!==!1&&this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,i)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}this.fetchLatestVersion().then(e=>{const s=document.createElement("script");s.type="text/javascript";const c=`https://unpkg.com/obi-sdk@${e||"latest"}/dist/obi-sdk.standalone.iife.js`;s.src=c,s.dataset.obiSdk="true",s.onload=()=>t(),s.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(s)}).catch(()=>{const e=document.createElement("script");e.type="text/javascript",e.src="https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js",e.dataset.obiSdk="true",e.onload=()=>t(),e.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(e)})})}async fetchLatestVersion(){try{const t=await fetch("https://registry.npmjs.org/obi-sdk/latest");return t.ok?(await t.json()).version:null}catch(t){return console.warn("Failed to fetch latest version:",t),null}}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),t.setAttribute("api-base-url",n),this.config.position&&t.setAttribute("position",this.config.position),this.config.user&&t.setAttribute("user",JSON.stringify(this.config.user)),document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:n};try{const i=new window.ObiSDK(t);window.obiSDKInstance=i}catch(i){console.error("Failed to initialize SDK:",i)}}}initialize(){this.init()}getWidget(){return this.widget}}document.addEventListener("DOMContentLoaded",()=>{const d=window.obiWidgetConfig||{};new r(d)}),o.ObiWidgetLoader=r,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=obi-loader.umd.cjs.map