@kosdev-code/kos-ui-sdk 0.1.0-dev.5070 → 0.1.0-dev.5072

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.
package/index.cjs CHANGED
@@ -1,83 +1,83 @@
1
- "use strict";var Ih=Object.defineProperty;var Oh=(t,e,s)=>e in t?Ih(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var l=(t,e,s)=>(Oh(t,typeof e!="symbol"?e+"":e,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("loglevel"),M=require("mobx"),b=require("robot3"),Ke=require("date-fns"),T=require("@emotion/react/jsx-runtime"),Ko=require("@emotion/styled"),ua=require("react-dom"),Ze=require("@emotion/react"),g=require("react"),Ho=require("mobx-react-lite"),$h=require("@use-gesture/react"),xr="method",da="topic",kt="url",Cs="request-id",Dr="response-id",zo="status",Ue="dst-addr",ha="src-addr",Oe="type",Vo="ordered",Go="tracker",fa="Content-Type",pa="Cache-Control",ga="requestId",ma=process.env.KOS_LOGIN_URL||"http://localhost",ya=process.env.KOS_APP_PORT||"8080",Ch=`${ma}:${ya}`,tr="{MODEL_ID}";var xs=(t=>(t.SEND="/ws/log/msg/send",t.RECEIVED="/ws/log/msg/receive",t))(xs||{}),ba=(t=>(t.MSG_RECEIVE="/mock/msg/receive",t))(ba||{});const qo="/kos/model/ready/";x.info("Initializing event bus");globalThis.kos=globalThis.kos||{};globalThis.kos.subscriptions=globalThis.kos.subscriptions||{};const V=globalThis.kos.subscriptions,xh=()=>Symbol("eventKey");function Yo(t){return V[t]&&Object.getOwnPropertySymbols(V[t]).length>0}function C(t,e){const s=xh();return V[t]||(x.debug(`Initializing subscription for ${t}`),V[t]={}),x.debug(`Subscribing to ${t} with id ${s.toString()}`),V[t][s]=e,{count:V[t]?Object.getOwnPropertySymbols(V[t]).length:0,unsubscribe:()=>(x.debug(`Unsubscribing from ${t} with id ${s.toString()}`),V[t]&&V[t][s]&&delete V[t][s],V[t]&&Object.getOwnPropertySymbols(V[t]).length===0&&delete V[t],{count:V[t]?Object.getOwnPropertySymbols(V[t]).length:0})}}function G(t,e,s={}){if(!V[t]||Object.getOwnPropertySymbols(V[t]).length===0)return x.debug(`No subscriptions for ${t}. Not publishing.`),{eventType:t,subscribers:0};const r=Object.getOwnPropertySymbols(V[t]).length;return Object.getOwnPropertySymbols(V[t]).forEach(o=>{if(s.sync){const n=s.sync;x.debug(`Performing sync publish for ${t} with sync id ${n}`),V[t][o]({body:e,headers:s}).then(i=>{x.debug(`Response recieved for ${n}, publishing back to source.`),G(n,i)})}else x.debug(`Performing async publish for ${t}`),V[t][o]({body:e,headers:s})}),{eventType:t,subscribers:r}}function Dh(){x.warn("Resetting event bus"),Object.keys(V).forEach(t=>delete V[t])}function va(t,e){const s=C(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function Wo(t,e){return new Promise((s,r)=>{let o=null;const n=va(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}const Ah=Object.freeze(Object.defineProperty({__proto__:null,hasEventSubscriptions:Yo,once:va,publish:G,reset:Dh,subscribe:C,waitFor:Wo},Symbol.toStringTag,{value:"Module"}));function Ar(t,e){const s=C(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function Pr(t,e){return new Promise((s,r)=>{let o=null;const n=Ar(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}function wa(t,e){const s=t.map(r=>Pr(r,e));return Promise.all(s)}function Ea(t,e){return new Promise((s,r)=>{const o=[];let n=null,i=!1;const a=()=>{o.forEach(c=>c()),n&&clearTimeout(n)};t.forEach(c=>{const u=Ar(c,d=>{i||(i=!0,a(),s({eventType:c,data:d}))});o.push(u)}),e&&(n=setTimeout(()=>{i||(i=!0,a(),r(new Error(`Timeout waiting for any event: ${t.join(", ")}`)))},e))})}function Ma(t,e,s){return C(t,o=>{o&&e(o)&&s(o)}).unsubscribe}function Ta(t,e,s){return C(t,o=>{if(o){const n=e(o);s(n)}}).unsubscribe}function _a(t,e,s){let r=null;const o=C(t,n=>{r&&clearTimeout(r),r=setTimeout(()=>{s(n)},e)});return()=>{r&&clearTimeout(r),o.unsubscribe()}}function Sa(t,e,s){let r=0,o=null;const n=C(t,i=>{const a=Date.now(),c=a-r;c>=e?(r=a,s(i)):o||(o=setTimeout(()=>{r=Date.now(),s(i),o=null},e-c))});return()=>{o&&clearTimeout(o),n.unsubscribe()}}function Ia(t,e,s){let r=[],o=null;const n=()=>{r.length>0&&(s([...r]),r=[])},i=C(t,a=>{a&&(r.push(a),o||(o=setTimeout(()=>{n(),o=null},e)))});return()=>{o&&(clearTimeout(o),n()),i.unsubscribe()}}function Qo(t,e=1){const s=[];return C(t,r=>{r&&(s.push(r),s.length>e&&s.shift())}),{subscribe:r=>(s.forEach(o=>r(o)),C(t,r))}}function Oa(t,e){const s=t.map(r=>C(r,o=>{o&&e(r,o)}));return()=>{s.forEach(r=>r.unsubscribe())}}function $a(t,e){let s=t;const r=[],o=new Set;return Object.values(e).forEach(n=>{Object.keys(n).forEach(i=>{o.add(i)})}),o.forEach(n=>{const{unsubscribe:i}=C(n,a=>{const c=e[s];c&&c[n]&&(s=c[n](a))});r.push(i)}),{get state(){return s},unsubscribe:()=>{r.forEach(n=>n())}}}function Ca(t,e,s,r){const o=Pr(e,r);return G(t,s),o}async function*xa(t){const e=[],s=[],r=C(t,o=>{o&&(s.length>0?s.shift()(o):e.push(o))});try{for(;;)e.length>0?yield e.shift():yield await new Promise(o=>{s.push(o)})}finally{r.unsubscribe()}}const Ph={once:Ar,waitFor:Pr,waitForAll:wa,race:Ea,filter:Ma,map:Ta,debounce:_a,throttle:Sa,buffer:Ia,replay:Qo,merge:Oa,stateMachine:$a,request:Ca,eventIterator:xa},Rh=Object.freeze(Object.defineProperty({__proto__:null,EventBusFunctional:Ph,buffer:Ia,debounce:_a,eventIterator:xa,filter:Ma,map:Ta,merge:Oa,once:Ar,race:Ea,replay:Qo,request:Ca,stateMachine:$a,throttle:Sa,waitFor:Pr,waitForAll:wa},Symbol.toStringTag,{value:"Module"}));async function Rr(t,e){const{getCurrentState:s,transformState:r,shouldUseFetchedState:o,timeout:n}=e,i=Wo(t,n),a=await s(),c=r?r(a):a;return o&&o(c)?(i.catch(()=>{}),c):await Promise.race([i,new Promise(d=>{setTimeout(()=>d(c),100)})])}function Da(t,e,s){const{getCurrentState:r,transformState:o}=s;let n=!1;const i=C(t,a=>{a&&(n=!0,e(a))});return Promise.resolve(r()).then(a=>{const c=o?o(a):a;n||e(c)}).catch(a=>{console.error("Failed to fetch initial state:",a)}),i.unsubscribe}function Aa(t,e){let s;const r=new Set,o=async()=>{try{typeof e=="string"?s=await(await fetch(e)).json():s=await e(),r.forEach(a=>a(s))}catch(a){throw console.error("Failed to fetch initial state:",a),a}};C(t,a=>{a!=null&&a.body&&(s=a.body,r.forEach(c=>c(s)))});let n=!1;const i=()=>{n||(n=!0,o())};return{get state(){return s},async getState(){return i(),s===void 0&&await new Promise(a=>{const c=()=>{s!==void 0?a():setTimeout(c,10)};c()}),s},subscribe(a){return i(),r.add(a),s!==void 0&&a(s),()=>{r.delete(a)}},async refresh(){return await o(),s}}}async function Zo(t,e){if(typeof t=="string")return Rr(t,e);const s=t,{getCurrentState:r,shouldUseFetchedState:o,timeout:n}=e,i=await r(),a=e.transformState?e.transformState(i):i;if(o&&o(a))return a;const c=s.map(d=>Wo(d,n)),u=await Promise.all(c);return u[u.length-1]}function Pa(t,e,s){const{fetchMissedEvents:r,checkInterval:o=3e4,deduplicateById:n}=s,i=new Set,a=C(t,async u=>{if(u){if(n){const d=n(u);if(i.has(d))return;i.add(d),i.size>1e3&&Array.from(i).slice(0,500).forEach(f=>i.delete(f))}await e(u)}}),c=setInterval(async()=>{try{const u=await r(),d=Array.isArray(u)?u:[u];for(const h of d)if(n){const f=n(h);i.has(f)||(i.add(f),await e(h))}else await e(h)}catch(u){console.error("Failed to fetch missed events:",u)}},o);return()=>{a.unsubscribe(),clearInterval(c)}}function Ra(t){const{connectEvent:e,disconnectEvent:s,errorEvent:r,dataEvent:o,fetchInitialState:n,reconnectDelay:i=5e3}=t,a={state:"disconnected",data:void 0,async waitForConnection(d){if(a.state==="connected"&&a.data)return a.data;const h=await Rr(e,{getCurrentState:n,shouldUseFetchedState:f=>!!f,timeout:d});return a.state="connected",a.data=h,u(),h},subscribe(d){return c.add(d),d(a),()=>{c.delete(d)}},async reconnect(){a.state="connecting",u();try{const d=await n();a.state="connected",a.data=d,u()}catch{a.state="error",u(),setTimeout(()=>{a.state==="error"&&a.reconnect()},i)}}},c=new Set,u=()=>{c.forEach(d=>d(a))};return C(e,d=>{a.state="connected",d!=null&&d.body&&(a.data=d.body),u()}),C(s,()=>{a.state="disconnected",u(),setTimeout(()=>{a.state==="disconnected"&&a.reconnect()},i)}),r&&C(r,()=>{a.state="error",u()}),o&&C(o,d=>{d!=null&&d.body&&a.state==="connected"&&(a.data=d.body,u())}),a.reconnect(),a}const kh={waitForOrGetState:Rr,subscribeWithInitialState:Da,createStatefulEventStream:Aa,waitForAllWithState:Zo,createResilientEventHandler:Pa,createConnectionStateManager:Ra},Lh=Object.freeze(Object.defineProperty({__proto__:null,EventBusState:kh,createConnectionStateManager:Ra,createResilientEventHandler:Pa,createStatefulEventStream:Aa,subscribeWithInitialState:Da,waitForAllWithState:Zo,waitForOrGetState:Rr},Symbol.toStringTag,{value:"Module"})),Fh=(t,e=0)=>{if(!+t)return{value:0,scale:"bytes",toString:()=>"0 bytes"};const s=1024,r=e<0?0:e,o=["bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(s)),i=parseFloat((t/Math.pow(s,n)).toFixed(r)),a=o[n];return{value:i,scale:a,toString:()=>`${i} ${a}`}};function Xo(t){let e="pending",s;const r=t.then(n=>{e="success",s=n},n=>{e="error",s=n});return{read:()=>{switch(e){case"pending":throw r;case"error":throw s;default:return s}}}}function nt(){return"xxxxxxxx-xxxx-4xxx-2xxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=Math.random()*16|0;return(t=="x"?e:e&3|8).toString(16)})}function Nh(t,e){e.forEach(s=>{Object.getOwnPropertyNames(s.prototype).forEach(r=>{const o=Object.getOwnPropertyDescriptor(s.prototype,r);Object.defineProperty(t.prototype,r,o)})})}function Uh(t,e){const s=t??[],r=e??[];return s.length!==r.length?!1:s.every((o,n)=>o===r[n])}const Jo=(t,e)=>{const s=t.map(n=>n.id);return e.map(n=>n.id).filter(n=>!s.includes(n))},ka=t=>t,La=t=>t,jh=({container:t,onAddItem:e,onUpdateItem:s,onRemoveItem:r=ka,idMapper:o=La})=>n=>{const i=n.map(o),c=Jo(i,t.data).map(r).filter(Boolean);t.removeAll(c);const u=i.map(d=>{const h=t.getModel(d.id);return h&&s?s(d,h):e(d)}).filter(Boolean);t.addAll(u)},Bh=({container:t,onAddItem:e,onRemoveItem:s=ka,idMapper:r=La})=>o=>{const n=o.map(r);Jo(n,t.models).forEach(s),n.forEach(e)},Kh=({items:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r);Jo(n,t).forEach(s),n.forEach(e)},Hh=(t,e="parent-")=>{let s=t;return s.startsWith(e)&&(s=s.replace(e,"")),s},vi=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),wi=[{amount:60,name:"seconds"},{amount:60,name:"minutes"},{amount:24,name:"hours"},{amount:7,name:"days"},{amount:4.34524,name:"weeks"},{amount:12,name:"months"},{amount:Number.POSITIVE_INFINITY,name:"years"}];function Fa(t){let e=(t.getTime()-Date.now())/1e3;for(let s=0;s<=wi.length;s++){const r=wi[s];if(Math.abs(e)<r.amount)return vi.format(Math.round(e),r.name);e/=r.amount}return vi.format(Math.round(e),"years")}const en=t=>t%4===0&&t%100!==0||t%400===0,tn=(t,e)=>[31,en(t)?29:28,31,30,31,30,31,31,30,31,30,31][e],Na=(t,e)=>{const s=new Date(t),r=t.getDate();return s.setDate(1),s.setMonth(s.getMonth()+e),s.setDate(Math.min(r,tn(s.getFullYear(),s.getMonth()))),s},Ua=(t,e)=>{const s=new Date(t);return s.setDate(s.getDate()+e),s},Et="en-US",ja={short:{year:"numeric",month:"2-digit",day:"2-digit"},medium:{year:"numeric",month:"short",day:"2-digit"},long:{year:"numeric",month:"long",day:"numeric"},full:{year:"numeric",month:"long",day:"numeric",weekday:"long"}},Ba={short:{hour:"2-digit",minute:"2-digit",hour12:!0},medium:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0},long:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0,timeZoneName:"short"},full:{hour:"2-digit",minute:"2-digit",hour12:!0,timeZoneName:"long"}},Ka=(t,{dateStyle:e="short",locales:s=Et}={dateStyle:"short",locales:Et})=>{const r=e==="short"?ja.short:{dateStyle:e};return new Intl.DateTimeFormat(s,r).format(t)},Ha=(t,{locales:e=Et,timeStyle:s="short"}={locales:Et,timeStyle:"short"})=>{const r=Ba[s];return new Intl.DateTimeFormat(e,r).format(t)},za=(t,{dateStyle:e="short",locales:s=Et,timeStyle:r="short"}={dateStyle:"short",locales:Et,timeStyle:"short"})=>{const o={...e&&ja[e],...r&&Ba[r]};return new Intl.DateTimeFormat(s,o).format(t)},zh=Object.freeze(Object.defineProperty({__proto__:null,addDaysToDate:Ua,addMonthsToDate:Na,formatDate:Ka,formatDateSince:Fa,formatDateTime:za,formatTime:Ha,getDaysInMonth:tn,isLeapYear:en},Symbol.toStringTag,{value:"Module"}));function Va(t,e,s=300){let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>{e.apply(t,o)},s)}}const te="canvas-renderer",so=new Map,Ei=new Map,ro=new Map,oo=new Map,Ds=(t,e)=>{Ga[t]=e},Ga={indexExtension:{registerIndexExtension:(t,e)=>{const s=oo.get(t)||{};Object.assign(s,e),oo.set(t,e)},loadIndexExtensions:t=>oo.get(t)||{}},loader:{registerLoader:(t,e)=>{Ei.set(t,e)},executeLoader:async(t,e)=>{const s=Ei.get(t);if(s)return await s(e)}},propertyMapper:{registerPropertyMapper:(t,e)=>{ro.set(t,e)},hasMapper:t=>ro.has(t),executeMapper:(t,e,s)=>{const r=ro.get(t);return r?r(e,s):""}},dataMapper:{registerDataMapper:(t,e)=>{const s=so.get(t)||[];s.push(e),so.set(t,s)},executeMapper:async(t,e,s)=>{const r=so.get(t);if(!r)return{};const o={};for(const n of r){const i=await n(e,s);Object.assign(o,i)}return o}},canvas:{registerRenderer:(t,e)=>{if(!$[te]){console.warn(`Canvas renderer extension point is not registered. Cannot register renderer "${t}".`);return}$[te].register(t,e)}}},$=Ga,Vh=async({context:t,extension:e})=>{const s=await $.loader.executeLoader(e,{});return t==null||t.set(e,s),s},Gh=async({extension:t,contextData:e,data:s})=>await $.dataMapper.executeMapper(t,s,e),qh=async({extension:t,contextData:e,data:s})=>await $.propertyMapper.executeMapper(t,s,e),Yh=Object.freeze(Object.defineProperty({__proto__:null,executeDataMapperExtension:Gh,executeLoaderExtension:Vh,executePropertyMapperExtension:qh},Symbol.toStringTag,{value:"Module"})),Wh="Extensions";class Qh{constructor(){l(this,"extensions");this.extensions={}}register(e,s,r){this.extensions[e]={},this.extensions[e][s]={component:r}}get(e,s){if(!this.extensions[e])throw new Error(`Extension point ${e} not found`);return this.extensions[e][s]}get allExtensions(){return this.extensions}}const me=(t=null)=>(t||window.location.search.replace("?","")).split("&").map(e=>{const[s,r]=e.split("=");return[s,decodeURIComponent(r||"")]}).reduce((e,[s,r])=>(e[s]=r,e),{}),qa="studio.tools.preview",Zh="studio.relax.store.validation",Ya="studio.log.debug",Wa="studio.log.info",Xh={profiles:[qa]};var la;const Jh=((la=globalThis.getKosConfig)==null?void 0:la.call(globalThis))||JSON.stringify(Xh),Qa=JSON.parse(Jh);globalThis.kosConfig=Qa;const sn=Qa,Za=()=>sn.profiles||[],Eo=t=>Za().includes(t),ef=()=>sn.logging||!1,tf=()=>{const t=Eo(Ya),e=Eo(Wa);return t?"DEBUG":e?"INFO":void 0},Xa=()=>{const t=me(),e=tf(),r=t.kosLogLevel??e??window.kosLogLevel??process.env.KOS_LOG_LEVEL;return r||"WARN"},Ja=()=>window.kosMessageLogging||process.env.KOS_MESSAGE_LOGGING==="true",ec=()=>window.kosMessageStudioLogging||process.env.KOS_MESSAGE_STUDIO_LOGGING==="true",tc="ws-log",sf=x.methodFactory,sc=Ja(),rf=ec();x.methodFactory=function(t,e,s){const r=sf(t,e,s);return function(...o){var c;const n=s?String(s):"",i=n?`[${String(n).substring(n.lastIndexOf(":")+1)}] | `:"[root] | ",a=o.map(u=>typeof u=="object"?JSON.stringify(u):String(u)).join(" ");r(`${i}${a}`),(c=globalThis==null?void 0:globalThis.kosConfig)!=null&&c.logging&&globalThis.kosLog&&(s!==tc||sc&&rf)&&globalThis.kosLog(`UI: ${i}${a}`)}};let rc=Xa();x.setLevel(rc);window.setKosLogLevel=t=>{rc=t,x.setLevel(t)};const sr=x.getLogger(tc);window.enableKosMessageLog=()=>{sr.setLevel(x.levels.INFO)};window.disableKosMessageLog=()=>{sr.setLevel(x.levels.ERROR)};sc?window.enableKosMessageLog():window.disableKosMessageLog();const of=["color: black","display: block","background-color: lightgreen","padding: 4px","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),nf=["color: black","display: block","padding: 4px","background-color: yellow","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),Ns=t=>e=>{x.getLevel()<=t&&e()},m={...x,ifDebug:Ns(x.levels.DEBUG),ifInfo:Ns(x.levels.INFO),ifWarn:Ns(x.levels.WARN),ifError:Ns(x.levels.ERROR),getLogger:t=>x.getLogger(`kos::${t}`),getLoggers:()=>x.getLoggers(),createLogger:({name:t,group:e})=>{var n,i,a,c;const s=`${e?`${e}:`:"kos"}::${t}`,r=x.getLogger(s);let o=(i=(n=globalThis.kos.logOverrides)==null?void 0:n.find(u=>u.name===s))==null?void 0:i.level;return o?r.setLevel(o):(o=(c=(a=globalThis.kos.logOverrides)==null?void 0:a.find(u=>s.startsWith(u.name)))==null?void 0:c.level,o&&r.setLevel(o)),r},wsSend:(...t)=>{const e=String(t).replace(/\n/g,"\\n");sr.info(`%c⬆ ${e}`,of)},wsReceive:(...t)=>{const e=String(t).replace(/\n/g,"\\n");sr.info(`%c⬇ ${e}`,nf)}},oc="featureFlagResolver",Us=new Map;Ds(oc,{register:(t,e)=>{var s;Us.has(t)||Us.set(t,[]),(s=Us.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=Us.get(t);if(!s)return[];const r=s.map(a=>a(e)),n=(await Promise.allSettled(r)).map(a=>a.status==="fulfilled"?a.value:(m.info(`Feature flag resolver ${t} failed: ${a.reason}`),[])).flat(),i=Array.from(new Set(n)).reduce((a,c)=>(a[c]=!0,a),{});return ic.updateFlags(i),Object.keys(i)}});const af="kos.loader.featureFlag";class nc{constructor(e={}){l(this,"flags",{});this.flags=e}isFeatureEnabled(e){return!!this.flags[e]}enableFeature(e){this.flags[e]=!0}disableFeature(e){this.flags[e]=!1}toggleFeature(e){this.flags[e]=!this.flags[e]}updateFlags(e){this.flags={...this.flags,...e}}}window.KosFeatureFlags=window.KosFeatureFlags??new nc;const ic=window.KosFeatureFlags,ac=(t,e,s)=>{s/=100;const r=e*Math.min(s,1-s)/100,o=n=>{const i=(n+t/30)%12,a=s-r*Math.max(Math.min(i-3,9-i,1),-1);return Math.round(255*a).toString(16).padStart(2,"0")};return`#${o(0)}${o(8)}${o(4)}`},cc=t=>{const s=new RegExp("hsl\\((\\d+),\\s+(\\d+)\\%,\\s+(\\d+)\\%\\)").exec(t);if(!s)throw Error("Invalid HSL string");return ac(parseInt(s[1]),parseInt(s[2]),parseInt(s[3]))},lc=(t,e)=>getComputedStyle(t).getPropertyValue(e),cf=(t,e)=>cc(lc(t,e)),lf=(t,e)=>{const s={...t};return s.id&&delete s.id,s},Mo=(t,e,s=lf)=>{const r=s(t,e);M.runInAction(()=>{Object.assign(e,r)})},no=new Map,uc={addToDeletionQueue:(t,e)=>{const s=no.get(t)||[];s.push(e),no.set(t,s)},cancelDeletion:t=>{const e=no.get(t);e&&e.forEach(s=>{clearTimeout(s)})}},uf=m.createLogger({name:"kos-dependency-manager"});class df{constructor(){l(this,"_usedByCache",new Map);l(this,"_usesCache",new Map)}add(e,s){uc.cancelDeletion(s);const r=this._usedByCache.get(s)||[];r.includes(e)||r.push(e),this._usedByCache.set(s,r);const o=this._usesCache.get(e)||[];o.includes(s)||o.push(s),this._usesCache.set(e,o)}remove(e,s){const r=this._usedByCache.get(s)||[];this._usedByCache.set(s,r.filter(n=>n!==e));const o=this._usesCache.get(e)||[];this._usesCache.set(e,o.filter(n=>n!==s))}canDestroy(e){const s=this._usedByCache.get(e);return s!=null&&s.length?(uf.info(`Model ${e} is still used by: ${s.join(", ")}`),!1):!0}clear(){this._usedByCache.clear(),this._usesCache.clear()}}var v=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.READY_FAILED="ready_failed",t.RESETTING="resetting",t.RESET="reset",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.FAILED="failed",t.INACTIVE="inactive",t.ACTIVE="active",t.ACTIVATING="activating",t.DEACTIVATING="deactivating",t))(v||{}),L=(t=>(t.CREATE="create",t.INITIALIZE="init",t.LOAD="load",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.RESET="go_offline",t.UNLOAD="unload",t.FAILED="failed",t.GO_ACTIVE="go_active",t.GO_INACTIVE="go_inactive",t.TIMEOUT="timeout",t))(L||{});const Mi=m.createLogger({name:"kos-model-cache"});class hf{constructor(e=[]){l(this,"_modelsById",M.observable.map(new Map));l(this,"_toDelete",new Map);l(this,"_preloaded",[]);l(this,"_isPreloaded",!1);this.preloadKeys=e}get models(){return Array.from(this._modelsById.values()).map(e=>e).filter(e=>!this._toDelete.has(e.modelId))}getModelById(e){if(e&&!this._toDelete.has(e))return this._modelsById.get(e)}addModel(e){const s=this.getModelById(e.modelId)||e;return this._modelsById.set(s.modelId,s),s}removeModel(e){this._modelsById.delete(e),this._toDelete.delete(e)}hasModel(e){return!!e&&this._modelsById.has(e)&&!this._toDelete.has(e)}restoreFromDeleteCache(e){if(e&&this._toDelete.has(e)){const s=this._toDelete.get(e);this._toDelete.delete(e),this._modelsById.set(e,s)}}markForDeletion(e){this._modelsById.delete(e.modelId),this._toDelete.set(e.modelId,e)}preload(e){return this._isPreloaded?(Mi.debug("Returning cached preloaded models"),this._preloaded):(this._preloaded=this.preloadKeys.map(s=>(Mi.debug(`Preloading model: ${typeof s=="string"?s:s.modelType}`),e(s))).filter(s=>!!s),this._isPreloaded=!0,this._preloaded)}}const ee=Symbol("SubscriptionHandlers"),F=Symbol("DependencyModels"),as=Symbol("FutureService"),He=Symbol("ChildModels"),cs=Symbol("ParentModel"),ls=Symbol("LogConfig"),Ws=Symbol("ReferenceConfig"),rn=Symbol("KosModelSymbol"),et=Symbol("ModelEffects"),Mt=Symbol("CompanionParentModel"),on=Symbol("FutureContainerSetup"),nn=Symbol("MultipleFutureContainerSetup"),us=Symbol("FutureAliases"),an=Symbol("TroubleAwareSetup"),cn=Symbol("LoggerSetup"),ln=Symbol("ContainerAwareSetup"),$e=(t,e)=>{t[He]=t[He]||{},t[He][e]=!0},it=t=>`{PROP_${String(t)}}`,ff=t=>`{PROP_${String(t)}}`,pf=it("kosParentId"),kr=t=>e=>{e[cs]=e[cs]||{};const s=(t==null?void 0:t.parentId)||pf;e[cs]={parentId:s}};function gf(t){return e=>{const s=(t==null?void 0:t.mode)||"decorator",r=(t==null?void 0:t.parentProperty)||"companionParent",o=(t==null?void 0:t.excludeProperties)||[];return kr()(e),e.prototype[Mt]={mode:s,parentProperty:r,excludeProperties:o},e}}function dc(t){return e=>{const s=t!=null&&t.legacy?"_models":(t==null?void 0:t.containerProperty)||"container",r=(t==null?void 0:t.includeMethods)!==!1,o=(t==null?void 0:t.includeGetters)!==!1,n=(t==null?void 0:t.modelsProperty)||"models",i=(t==null?void 0:t.containerOptions)||{};return e.prototype[ln]={containerProperty:s,includeMethods:r,includeGetters:o,modelsProperty:n,containerOptions:i,legacy:(t==null?void 0:t.legacy)||!1},e}}function mf(t,e,s){const r=s.value;s.value=function(...o){const n=Y.getContext(this.id);return o.push(n),r.apply(this,o)}}const Lr=Symbol("KosExecutionContext");function un(t){return t&&typeof t=="object"&&Lr in t}function yf(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[on]={mode:s,handlerProperty:r},e}}function bf(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[nn]={mode:s,handlerProperty:r},e}}var j=(t=>(t.INIT="init",t.LOAD="load",t.READY="ready",t.ACTIVATE="activate",t.ONLINE="online",t))(j||{});const vf=Object.freeze(Object.defineProperty({__proto__:null,DependencyLifecycle:j},Symbol.toStringTag,{value:"Module"})),Re=Symbol("HttpRouteHandlers"),Ti="__httpBrowserRouter";function Fr(t){return function(s){return function(r,o,n){r[Re]=r[Re]||[];const i={method:t,path:s,handler:o};return r[Re].push(i),r[F]=r[F]||{},r[F][Ti]||(r[F][Ti]={modelType:"browser-router-model",lifecycle:j.INIT}),n}}}const hc=Fr("GET"),As=Fr("POST"),wf=Fr("PUT"),fc=Fr("DELETE"),Ef=fc;function rr(t){return!!(t!=null&&t[Re])&&t[Re].length>0}function pc(t){return(t==null?void 0:t[Re])||[]}const Mf=({group:t}={group:""})=>e=>{e[ls]=e[ls]||{},e[ls]={group:t}};class gc{static create({modelId:e,modelTypeName:s,component:r}){const o=[r??"kos",s,e].filter(Boolean).join(".");return m.createLogger({name:o})}}function mc(t){return e=>{const s=(t==null?void 0:t.loggerProperty)||"logger",r=t==null?void 0:t.loggerContext;e.prototype[cn]={loggerProperty:s,loggerContext:r};const o=()=>{var i;return(i=e.prototype[rn])==null?void 0:i.type};let n;return Object.defineProperty(e.prototype,s,{get(){if(!n){const i=o();n=gc.create({modelTypeName:r||i,component:"kos-model"})}return n},enumerable:!1,configurable:!1}),e}}function yc(t){return(e,s,r)=>{e[et]=e[et]||{},e[et][s]={dependencies:t==null?void 0:t.dependencies,value:r.value},r.value=function(){throw new Error(`Method ${s} cannot be called directly.`)}}}const Tf=t=>(e,s)=>{e[Ws]=e[Ws]||{},e[Ws][s]=t},io=m.createLogger({name:"resolve-parameters"}),Ee=({value:t,modelId:e,modelData:s})=>{let r=t;if(Array.isArray(r))return[...t];if(typeof r!="string"&&typeof r!="object")return r;if(typeof r=="object")r=Object.keys(r).reduce((o,n)=>(o[n]=Ee({value:r[n],modelId:e,modelData:s}),o),{});else if(typeof r=="string"){const o=new RegExp("{PROP_(.+?)}","g");let n=r!=null&&r.includes(tr)?r.replace(tr,e):r;if(s){let i=!1;const a=/^{PROP_.+?}$/.test(n);if(n=n.replace(o,(c,u)=>{if(Object.getOwnPropertyNames(s).includes(u)||Object.getOwnPropertyNames(Object.getPrototypeOf(s)).includes(u)){const h=s[u];return h?(io.debug(`Resolved ${c} to ${h}`),h):(io[a?"debug":"warn"](`Property ${u} is falsy${a?"":" in composite string"}, marking for undefined return`),i=!0,c)}return io[a?"debug":"warn"](`Property ${u} not found in modelData${a?"":" for composite string"}`),c}),i)return}return n}else return r;return r},tt=Symbol("ServiceRequestHandlers"),_i=new WeakMap;function _f(t){return(e,s,r)=>{var a;e[tt]=e[tt]||{};const o=r.value,n={...t,handlerMethod:s,originalHandler:o},i=`${((a=t.method)==null?void 0:a.toUpperCase())||"GET"}:${String(t.path)}`;if(e[tt][i]=n,!t.lifecycle){const c=function(...u){const d=u[u.length-1],h=async f=>{const p=_i.get(c);if(!p)throw new Error("Service request metadata not found for method");try{const{default:y}=await Promise.resolve().then(()=>Vc),w=Ee({value:p.path,modelId:this.id,modelData:this}),E={...typeof p.pathParams=="function"?p.pathParams(this):p.pathParams||{},...(f==null?void 0:f.pathParams)||{}},_={...typeof p.queryParams=="function"?p.queryParams(this):p.queryParams||{},...(f==null?void 0:f.queryParams)||{}},k=(f==null?void 0:f.body)||(typeof p.body=="function"?p.body(this):p.body),P={};Object.keys(E).length>0&&(P.path=E),Object.keys(_).length>0&&(P.query=_);const O=(p.method||"get").toLowerCase(),S=y,[H,U]=O==="get"?await S.get(w,P):O==="post"?await S.post(w,P,k):O==="put"?await S.put(w,P,k):O==="delete"?await S.delete(w,P,k):await S.get(w,P);if(H){if(p.errorHandler)switch(p.errorHandler.strategy){case"log":return console.error(`Service request error: ${H}`),p.errorHandler.onError&&p.errorHandler.onError(new Error(H),this),[null,p.errorHandler.defaultValue];case"ignore":return[null,p.errorHandler.defaultValue];case"default":return[null,p.errorHandler.defaultValue];case"throw":default:return[H,null]}return[H,null]}let Z=U;return p.transform&&(Z=p.transform(U)),[null,Z]}catch(y){return[y.message||"Unknown error",null]}};if(un(d))return d.$request=h,o.apply(this,u);{const f={[Lr]:!0,$request:h};return o.apply(this,[...u,f])}};_i.set(c,n),r.value=c}return r}}function Sf(t){return e=>{const s=(t==null?void 0:t.pathProperty)||"path";return e.prototype[an]={pathProperty:s},e.prototype[F]=e.prototype[F]||{},e.prototype[F].troubleContainer={modelType:"trouble-container-model",id:"trouble-container-model",options:{},lazy:!1},e}}const Lt=({modelType:t,id:e,options:s,lifecycle:r})=>(o,n)=>{o[F]=o[F]||{},o[F][n]={modelType:t,id:e,options:s,lifecycle:r||j.INIT}};class bc{constructor(e,s){l(this,"futures");l(this,"defaultContext");l(this,"context");l(this,"disposers",new Map);l(this,"container");this.futures=En.map(new Map),this.context="",this.defaultContext=s||"",this.container=e,M.makeAutoObservable(this)}get allFutures(){return Array.from(this.futures.values())}get future(){return this.futures.get(this.defaultContext)}addFuture(e,s){this.futures.set(s||e.id,e),this.context=s||e.id;const r=W(()=>{var o,n;(e.endState||e.progress)&&((n=(o=this.container)==null?void 0:o.onFutureUpdate)==null||n.call(o,e))});this.disposers.set(s||e.id,r)}removeFuture(e){var s;this.futures.delete(e||this.context),(s=this.disposers.get(e||this.context))==null||s(),this.disposers.delete(e||this.context)}getFuture(e){return this.futures.get(e||this.context)}get futureMap(){return this.futures}}class Nr{constructor(e){l(this,"disposer");l(this,"_future");l(this,"container");l(this,"onFutureUpdate");this._future=void 0,this.container=e,M.makeAutoObservable(this)}removeFuture(){var e;this._future=void 0,(e=this.disposer)==null||e.call(this),this.disposer=void 0}get future(){return this._future}getFuture(){return this._future}addFuture(e){this._future=e;const s=W(()=>{var r,o;(e.endState||e.progress)&&((o=(r=this.container)==null?void 0:r.onFutureUpdate)==null||o.call(r,e))});this.disposer=s}get allFutures(){return this._future?[this._future]:[]}get timeRemaining(){var e;return((e=this._future)==null?void 0:e.timeRemaining)||""}get status(){var e;return((e=this._future)==null?void 0:e.status)||"NOT_RESOLVED"}get progress(){var e;return((e=this._future)==null?void 0:e.progress)||-1}async cancel(){if(this._future)try{await this._future.cancelFuture()}catch(e){throw m.error(e),e}}}const vc=(t,e)=>{const s=e.type;return t[s]||(t[s]=[]),t[s].push(e),t},wc=Symbol("KosObservableData");class Ec{constructor(){l(this,"map");l(this,"_revision",1);l(this,"atomMap",new Map);l(this,"proxyHandler",{get:(e,s)=>{var r;return s==="_revision"||e[s]!==void 0?e[s]:this.atomMap.has(s)&&(r=this.atomMap.get(s))!=null&&r.reportObserved()?this.getValue(s):this.getValue(s)},set:(e,s,r)=>{var o;return this.map.has(s),this.setValue(s,r),this.atomMap.has(s)||this.atomMap.set(s,M.createAtom(s.toString())),(o=this.atomMap.get(s))==null||o.reportChanged(),!0},ownKeys:()=>[...Array.from(this.map.keys()),"_revision"]});this.map=M.observable.map(new Map),M.makeObservable(this,{_revision:M.observable})}setValue(e,s){const r=this.map.has(e);this.map.set(e,s),r||M.action(()=>{this._revision++})()}getValue(e){return this.map.get(e)}has(e){return this.map.has(e)}get entries(){return Array.from(this.map.entries())}get keys(){return this._revision,Array.from(this.map.keys())}get values(){return Array.from(this.map.values())}setValues(e){e&&Object.keys(e).forEach(s=>{this.setValue(s,e[s])})}get proxy(){return new Proxy(this,this.proxyHandler)}}Ec.prototype[wc]=!0;function If(t,e){return new Proxy(t,{construct:(s,r)=>{const o=new t(...r);return o.setValues(e),o.proxy}})}const Se=t=>{const e=If(Ec,t);return new e(t)};function Of(t,e){return t.length!==e.length?!1:t.every(s=>e.includes(s))}class dn{constructor({container:e,key:s}){l(this,"_container");l(this,"_map");l(this,"_key");l(this,"data");this._container=e,this._map=M.observable.map(new Map),this._key=s,this.data=Se(),this.generateIndex(),M.autorun(()=>{this._container.revision&&this.generateIndex()}),M.makeAutoObservable(this)}refresh(){this.generateIndex()}addItemToIndex(e,s,r=this._map,o=this.data){const n=r.get(e)||new Set;n.add(s),r.set(e,n),o[e]=Array.from(n)}resolveIndex(e,s){this.data.keys.filter(o=>!Object.keys(s).includes(o)).forEach(o=>{delete this.data[o],this._map.delete(o)}),Object.keys(s).forEach(o=>{const n=s[o],i=this.data[o]||[];if(Of(n,i))m.debug(`KosContainerIndex - Index ${o} is the same`);else{this.data[o]=n;const a=e.get(o)||new Set;this._map.set(o,a)}})}generateIndex(){M.runInAction(async()=>{const e=new Map,s={};for(const r of this._container.data){const o=typeof this._key=="function"?await this._key(r):r[this._key];Array.isArray(o)?o.forEach(n=>{this.addItemToIndex(n,r,e,s)}):typeof o=="string"||typeof o=="number"?this.addItemToIndex(String(o),r,e,s):typeof o=="boolean"&&this.addItemToIndex(String(o),r,e,s)}this.resolveIndex(e,s)})}get keys(){return Array.from(this._map.keys())}get index(){return this._map}getByKey(e){const s=this._map.get(e);return s?Array.from(s):[]}}function $f(t,e,s=[]){const r=Object.getOwnPropertyDescriptors(t);return Object.keys(r).filter(i=>M.isComputedProp(t,i)).filter(i=>s.includes(i)).map(i=>M.reaction(()=>t[i],(a,c)=>{e({name:i,newValue:a,oldValue:c})}))}const Vt=m.createLogger({name:"kos-container-model"});class Ce{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"_parentId");l(this,"idx");this._data=M.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1;const s=e!=null&&e.extensionId?$.indexExtension.loadIndexExtensions(e.extensionId):{},r=(e==null?void 0:e.indexMap)||{};this._optionsMap={...r,...s};const o=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((n,i)=>(n[i]=void 0,n),{}):{};this._index=M.observable.map(o),this.idx=Se(),this._parentId=e==null?void 0:e.parentId,M.makeAutoObservable(this),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new dn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get revision(){return this._revision}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){M.runInAction(()=>{this._revision=this._revision+1})}addAll(e){M.runInAction(()=>{e.forEach(s=>this.addModel(s,!0))}),this.increment()}removeAll(e){M.runInAction(()=>{e.forEach(s=>this.removeModel(s,!0)),this.increment()})}addModel(e,s){this._data.set(e.id||"",e),e.id&&this._parentId&&Y.setParentContext(e.id,this._parentId),s||this.increment();const r=this._disposerMap.get(e.id);r&&(r(),this._disposerMap.delete(e.id));const o=Object.entries(this._optionsMap||{}),n=Object.values(this._optionsMap||{}),i=new Map(o.map(([d,h])=>[h,d])),a=d=>{var f,p;n.includes(d.name)&&((f=this.index.get(i.get(d.name)))==null||f.refresh());const h=o.filter(([,y])=>typeof y=="function");for(const[y]of h)(p=this.index.get(y))==null||p.refresh()},c=$f(e,a,n.filter(d=>typeof d=="string")),u=M.observe(e,a);this._disposerMap.set(e.id||"",()=>[u,...c].forEach(d=>d()))}removeModel(e,s){this._data.delete(e),s||this.increment();const r=this._disposerMap.get(e);r&&(r(),this._disposerMap.delete(e))}updateModel(e){this._data.set(e.id||"",e),this.increment()}getModel(e){return this._data.get(e)}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(Vt.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(Vt.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return Vt.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async clear(){this._data.forEach(e=>{const s=e.id;st(e).then(()=>{Vt.debug(`${s} destroyed, removing from map`),this.removeModel(s,!0)}).catch(r=>Vt.error(r))}),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id,type:s.constructor.name}))}}}const de=async t=>{if(t.id){const e=I.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error(`Model with ID ${t.id} not found`);await(e==null?void 0:e.whenReady())}else throw new Error("Data model must have a valid ID");return t},st=async t=>{await I.getInstance().whenReady(),await I.getInstance().modelManager.initiateDestroyModel(t)},Cf=async t=>{if(await I.getInstance().whenReady(),!t.id)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t.id);e&&await e.fsm.transitionTo(L.UNLOAD,v.UNLOADED)},xf=async t=>{await I.getInstance().whenReady(),await I.getInstance().modelManager.reloadModel(t),m.debug(`reload model initiated for model ${t.id}, model ready: ${or(t)} - ${Date.now()} `),await de(t),m.debug(`reload model complete for model ${t.id}, model ready: ${or(t)} - ${Date.now()} `)},Df=async t=>{if(await I.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);return e==null?void 0:e.modelTypeName},Mc=async t=>{if(await I.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Ie=t=>{if(!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Tc=(t,e)=>{if(!t)throw new Error("Model type is required");return I.getInstance().modelManager.getModelsByType(t).filter(o=>Object.keys(e).every(n=>o[n]===e[n]))},Af=(t,e)=>Tc(t,e)[0],Pf=(t,e)=>{if(!t.id)throw new Error("Model ID is required");const s=I.getInstance().modelManager.getModelById(t.id);if(!s)throw new Error("Model not found");const r=s.companionModels.get(e);return r==null?void 0:r.modelData},_c=t=>{if(!t.id)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return Array.from(e.companionModels.all()).map(r=>r.modelData)},Rf=t=>{if(!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);if(!e)throw new Error("Model not found");return e.companionModels.data},To=(t,e)=>{const s=I.getInstance().modelManager.getModelById(t);if(!s){m.info(`Model not found for id ${t}`);return}return Array.from(s.companionModels.all()).find(o=>e(o.modelData))},Te=t=>e=>Object.getPrototypeOf(e).modelTypeId===t,or=t=>{const e=I.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return e.isReady()},kf=m.createLogger({name:"kos-model-factory"}),ds={byModelType:t=>I.getInstance().modelManager.getModelFactory(t),getModelInstance:(t,e,s)=>{const r=ds.byModelType(e);if(!r)throw kf.error(`No registered factory found for model type ${e}. Please register a factory for this model type. `),Error(`No factory found for model type ${e}`);return r.build(t,s)}},ie={Factory:{create:t=>e=>(s,r)=>(r&&Y.setParentContext(e,r),ds.getModelInstance(e,t,s))},Singleton:{create:t=>(e,s)=>(s&&Y.setParentContext(t,s),ds.getModelInstance(t,t,e))},Model:{instance:t=>e=>ds.getModelInstance(e,t)}};window.KosRegistry=window.KosRegistry||{coreModels:new Map,preloadModels:[],companionModels:new Map,models:new Map};const Si=window.KosRegistry.coreModels,ao=window.KosRegistry.preloadModels,co=window.KosRegistry.companionModels,js=window.KosRegistry.models,D={model:{registerLegacyModel:t=>(e,s)=>(Si.set(e,s),{preload:D.model.preloadModel(t),model:D.model.register(t),companion:D.companion.register(t),legacy:D.model.registerLegacyModel(t),root:t}),preloadModel:t=>e=>(ao.includes(e)||ao.push(e),{preload:D.model.preloadModel(t),model:D.model.register(t),companion:D.companion.register(t),legacy:D.model.registerLegacyModel(t),root:t}),register:t=>(e,s)=>{const r=lo(e)?e.registration():e;return js.set(r.type,r),lo(e)&&e.relatedModels.forEach(o=>js.set(o.type,o.registration())),I.getInstance().isReady&&(I.getInstance().modelManager.registry.models[r.type]||(console.info(`Model with type ${r.type} doesn't exist. Adding new registration`),I.getInstance().modelManager.registry.models[r.type]=r.registration[r.type],lo(e)&&e.relatedModels.forEach(o=>I.getInstance().modelManager.registry.models[o.type]=o.registration().registration))),s&&D.model.preloadModel(t)(r.type),{preload:D.model.preloadModel(t),model:D.model.register(t),companion:D.companion.register(t),legacy:D.model.registerLegacyModel(t),root:t}},get:t=>js.get(t),getAll:()=>Array.from(js.entries()),getPreloadModels:()=>ao,getLegacyModels:()=>Array.from(Si.entries()).reduce((t,[e,s])=>(t[e]=s,t),{})},companion:{register:t=>(e,s)=>{const r=co.get(e)||[];return r.push(s),co.set(e,r),{preload:D.model.preloadModel(t),model:D.model.register(t),companion:D.companion.register(t),legacy:D.model.registerLegacyModel(t),root:t}},getAll:()=>Array.from(co.entries())}},Sc=D.model.registerLegacyModel,Ic=D.model.register,Lf=D.companion.register,Ff=D.model.preloadModel,hn=t=>typeof t.updateModel=="function",lo=t=>t.registration!==void 0&&typeof t.registration=="function";class Oc{constructor(e){l(this,"singleton");l(this,"type");l(this,"loader");l(this,"class");l(this,"guard");l(this,"factory");l(this,"relatedModels",[]);this.singleton=e.singleton,this.guard=Te(e.type),this.type=e.type,this.loader=`kos.extension.model.loader.${e.type}`,this.factory=e.factory,this.class=e.class}addRelatedModel(e){this.relatedModels.push(e)}registerRelatedModels(){this.relatedModels.forEach(e=>e.register())}register(){D.model.register({})(this.registration()),this.registerRelatedModels()}}class ye extends Oc{constructor(e){super({...e,singleton:!1,factory:ie.Factory.create(e.type)})}instance(e){const s=this.factory(e);return{get:()=>{const r=Ie(e);if(!r)throw new Error("Model not found with id "+e);if(this.guard(r))return r;throw new Error("Model is not of type "+this.type)},forceUpdate:{options:r=>({build:()=>{const o=s(r);if(this.guard(o)){if(hn(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error("Model is not of type "+this.type)}})},options:r=>({build:()=>{const o=s(r);if(this.guard(o))return o;throw new Error("Model is not of type "+this.type)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!1}},factory:this.factory}}}class _e extends Oc{constructor(e){super({...e,singleton:!0,factory:ie.Singleton.create(e.type)})}instance(){const e=this.factory;return{get:()=>{const r=Ie(this.type);if(!r)throw new Error("Model not found with id "+this.type);if(this.guard(r))return r;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(r).modelTypeId}`)},forceUpdate:{options:r=>({build:()=>{const o=e(r);if(this.guard(o)){if(hn(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})},options:r=>({build:()=>{const o=e(r);if(this.guard(o))return o;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!0}},factory:this.factory}}}const _o=m.createLogger({group:"decorators",name:"kos-model"});function Nf(t,e,s){var n;const r=(n=t[cs])==null?void 0:n.parentId;if(!r)return;const o=Ee({value:r,modelData:s,modelId:e});o&&typeof o=="string"&&Y.setParentContext(e,o)}function Uf(t){const e=t[as];e&&Object.entries(e).forEach(([s,{handler:r}])=>{t[s]=r})}function jf(t,e){const s=t[F]||{};Object.entries(s).forEach(([r,o])=>{const n=Ee({value:o.id||o.modelType,modelData:t,modelId:e}),i=Object.entries((o==null?void 0:o.options)||{}).reduce((a,[c,u])=>(a[c]=Ee({value:u,modelData:t,modelId:e}),a),{});if(typeof n=="string"){if(!o.lazy){const a=I.getInstance().modelManager.createModelInstance(o.modelType,n,i);t[r]=a.data}I.getInstance().modelManager.addDependency(e,n)}})}function Bf(t){const e=t[on];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new Nr(t);t[r]=o,s==="full"&&(Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0}),Object.defineProperty(t,"progress",{get(){var n;return((n=o.future)==null?void 0:n.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var n;return((n=o.future)==null?void 0:n.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var n;return((n=o.future)==null?void 0:n.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Kf(t){const e=t[nn];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new bc(t);t[r]=o,Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0});const n=t[us];n instanceof Map&&n.forEach(i=>{const a=`${i}Future`;Object.defineProperty(t,a,{get(){return o.futureMap.get(i)},enumerable:!0,configurable:!0}),s==="full"&&(Object.defineProperty(t,`${i}Progress`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}Status`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsRunning`,{get(){const c=o.futureMap.get(i);return c?!c.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsCancelled`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t[`cancel${i.charAt(0).toUpperCase()}${i.slice(1)}`]=async()=>{const c=o.futureMap.get(i);c&&await c.cancelFuture()})}),s==="full"&&(Object.defineProperty(t,"progress",{get(){var i;return((i=o.future)==null?void 0:i.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var i;return((i=o.future)==null?void 0:i.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var i;return((i=o.future)==null?void 0:i.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Hf(t){const e=t[an];if(!e)return;const{pathProperty:s}=e;Object.defineProperty(t,"troubles",{get(){const r=this[s];if(r==null){const o=`@kosTroubleAware: Path property '${s}' is undefined on model ${this.id||"unknown"}. Returning empty troubles array.`;return this.logger&&typeof this.logger.warn=="function"?this.logger.warn(o):console.warn(o),[]}return this.troubleContainer.troubles.getIndexByKey("byIface",r).sort((o,n)=>n.rank-o.rank)},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troubleStatus",{get(){return""},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troublesByType",{get(){return this.troubles.reduce(vc,{})},enumerable:!0,configurable:!0})}function zf(t,e){const s=t[ln];if(!s)return;const{containerProperty:r,includeMethods:o,includeGetters:n,modelsProperty:i,containerOptions:a,legacy:c}=s,u={...a,parentId:a.parentId||e},d=new Ce(u);t[r]=d,t[He]||(t[He]={}),t[He][r]=d,o&&(t.getModel=h=>d.getModel(h),t.addModel=h=>{d.addModel(h)},t.removeModel=h=>{d.removeModel(h)}),n&&(Object.defineProperty(t,i,{get(){return d},enumerable:!0,configurable:!0}),Object.defineProperty(t,"data",{get(){return d.data},enumerable:!0,configurable:!0}))}function Vf(t,e){const s=t.constructor.prototype[Mt];if(!s)return;const{mode:r,parentProperty:o,excludeProperties:n}=s,i=e[o];if(!i){_o.warn(`Companion decorator configured but no parent model found at '${o}'`);return}if(t.getCompanionParent=()=>i,r==="composition")return;const a=["init","load","unload","ready","dispose","destroy","activate"],c=["getDependencies","getChildren","update","toJSON","forceUpdate","makeAutoObservable","runInAction","transaction","observe","unobserve","intercept","spy","trace","getCompanionParent"],u=p=>{const y=i.constructor.prototype[ee]||{};return Object.values(y).some(w=>{const E=w==null?void 0:w.handler;return E===i[p]||E===i.constructor.prototype[p]})},d=p=>p==="constructor"||p.startsWith("_")||p.startsWith("__")||a.includes(p)||c.includes(p)||n.includes(p)||u(p)||p in t,h=new Set;Object.getOwnPropertyNames(i).filter(p=>!d(p)).forEach(p=>h.add(p));let f=Object.getPrototypeOf(i);for(;f&&f!==Object.prototype;)Object.getOwnPropertyNames(f).filter(p=>!d(p)).forEach(p=>h.add(p)),f=Object.getPrototypeOf(f);for(const p of h)try{const y=i[p];typeof y=="function"?t[p]=(...w)=>y.apply(i,w):Object.defineProperty(t,p,{get:()=>i[p],set:w=>{i[p]=w},enumerable:!0,configurable:!0})}catch(y){_o.debug(`Skipping companion proxy for property ${p}:`,y)}}function Gf(t){try{return M.makeAutoObservable(t)}catch(e){return _o.error("Failed to make observable:",e),t}}const qf={construct(t,e){var c;const[s,r={}]=e,o=Y.createContext(s);Nf(t,s,r);const i=!!t.prototype[cn]?null:m.createLogger({name:t.prototype.modelTypeId,group:((c=t[ls])==null?void 0:c.group)??"kos-model"}),a=new t(s,r,{logger:i,kosContext:o});return Uf(a),Bf(a),Kf(a),Hf(a),zf(a,s),Vf(a,r),jf(a,s),Gf(a)}};function A(t){return e=>{var n,i;const s=e,r=typeof t=="string"?{modelTypeId:t,autoRegister:!1}:{autoRegister:!1,...t};s.prototype.modelTypeId=r.modelTypeId,s.prototype[rn]=!0,(n=s.prototype)[ee]??(n[ee]={}),(i=s.prototype)[F]??(i[F]={}),m.ifDebug(()=>{m.debug(`Registering model with id ${r.modelTypeId}`)});const o=new Proxy(s,qf);if(r.singleton!==void 0){let a;r.singleton?a=new _e({class:o,type:r.modelTypeId}):a=new ye({class:o,type:r.modelTypeId}),Object.defineProperty(o,"Registration",{value:a,writable:!1,enumerable:!0,configurable:!1}),r.autoRegister&&a.register()}return o}}const Yf=({topic:t,handler:e,websocket:s=!1,condition:r=()=>!0})=>o=>{o[ee]=o[ee]||{},Array.isArray(t)?t.forEach(n=>{o[ee][n]={websocket:s,handler:e,condition:r}}):o[ee][t]={websocket:s,handler:Va(o,M.action(e),200),condition:r}};function $c(t,e,s){const r={};if(!t.endsWith("/*"))return r;const o=t.slice(0,-2);if(e.startsWith(o)){const n=e.slice(o.length+1),i=s||"path";r[i]=n}return r}function Cc(t){return t.endsWith("/*")}function K({topic:t,condition:e=(_,k)=>!0,transform:s=_=>_,websocket:r=!1,fos:o=!1,bridge:n=!1,skipParse:i=!1,lifecycle:a,destinationAddress:c,debounce:u,throttle:d,buffer:h,filter:f,once:p,replay:y,wildcardName:w,flow:E}){return(_,k,P)=>{_[ee]=_[ee]||{};let S=P.value;const H=typeof u=="number"?u:u==null?void 0:u.delay,U=typeof d=="number"?d:d==null?void 0:d.interval;H&&H>0?S=Wf(S,u):U&&U>0?S=Qf(S,d):h?S=Zf(S,h):p&&(S=Xf(S));let Z=e;if(f){const De=e;Z=(yi,bi,to)=>f(to)?De(yi,bi,to):!1}const Be={websocket:r,fos:o,bridge:n,handler:S,condition:Z,transform:s,lifecycle:a,skipParse:i,destinationAddress:c,wildcardName:w,flow:E};Array.isArray(t)?t.forEach(De=>{_[ee][De]=Be}):_[ee][t]=Be,y&&Jf(t,y.bufferSize)}}function Wf(t,e){const s=typeof e=="number"?e:e.delay,r=typeof e=="object"?e.discardIntermediate:!1;let o=null,n=[];return function(i){r?(o&&clearTimeout(o),o=setTimeout(()=>{t.call(this,i),o=null},s)):(n.push(i),o&&clearTimeout(o),o=setTimeout(()=>{const a=[...n];n=[],t.call(this,a),o=null},s))}}function Qf(t,e){const s=typeof e=="number"?e:e.interval,r=typeof e=="object"?e.discardIntermediate:!1;let o=0,n=null,i=[],a=!1;const c=function(){if(i.length>0){const u=[...i];i=[],t.call(this,u)}};return function(u){const d=Date.now(),h=d-o;r?h>=s?(o=d,t.call(this,u)):n||(n=setTimeout(()=>{o=Date.now(),t.call(this,u),n=null},s-h)):(i.push(u),h>=s?(o=d,c.call(this)):a||(a=!0,n=setTimeout(()=>{o=Date.now(),c.call(this),n=null,a=!1},s-h)))}}function Zf(t,e){const s=[];let r=null;const o=e.maxSize||1e3,n=i=>{s.length>0&&(t.call(i,[...s]),s.length=0)};return function(i){if(s.push(i),s.length>=o){r&&(clearTimeout(r),r=null),n(this);return}r||(r=setTimeout(()=>{n(this),r=null},e.time))}}function Xf(t){let e=!1;return function(s){e||(e=!0,t.call(this,s))}}function Jf(t,e){(Array.isArray(t)?t:[t]).forEach(r=>{Qo(r,e)})}function xc(t,e){return`${qo}${t}${e?`/${e}`:`/${t}`}`}function Dc(t){return`${qo}${t}`}function uo(t){const e=[];return new Promise((s,r)=>{for(const{condition:o,onMatch:n}of t){const i=M.when(o,()=>{e.forEach(a=>a());try{n==null||n(),s()}catch(a){r(a)}});e.push(i)}})}const Ac=5e3;class ep extends Error{constructor(s,r){super(s);l(this,"model");this.model=r}}const Pc=(t,e,s)=>{let r;return{promise:new Promise((i,a)=>{r=setTimeout(()=>{m.error(`Model ${e.modelId} - ${e.modelTypeName} - ${s} timed out after ${t}ms`),a(new ep(`${e.modelId} - ${e.modelTypeName} - ${s}`,e))},t)}),cancel:()=>{r&&clearTimeout(r)}}},Rc=t=>t.fsm.transitionTo(L.GO_ACTIVE,v.ACTIVE),kc=t=>t.whenReady(),Lc=t=>t.fsm.transitionTo(L.LOAD,v.LOADED),tp=t=>t.fsm.transitionTo(L.UNLOAD,v.UNLOADED),Fc=t=>t.fsm.transitionTo(L.INITIALIZE,v.INITIALIZED);var fn=(t=>(t.ACTIVE="active",t.READY="ready",t.LOAD="load",t.UNLOAD="unload",t.INIT="init",t))(fn||{});const Qs={active:Rc,ready:kc,load:Lc,init:Fc},Nc=(t,e)=>{const s=e.id||e.modelType,r=Ee({value:s,modelData:t.modelData,modelId:t.modelId});m.debug(`activating dependent model ${e.modelType} with id ${r}`);const o=Object.keys((e==null?void 0:e.options)||{}).reduce((i,a)=>{const c=e.options[a];return i[a]=Ee({value:c,modelData:t.modelData,modelId:t.modelId}),i},{});return{dependentModel:I.getInstance().modelManager.createModelInstance(e.modelType,r,o),dataModelId:r}},Uc=(t,e=j.READY)=>{var o;const s=((o=t.modelData)==null?void 0:o[F])||{};return Object.keys(s).length===0?(m.debug(`${t.modelId} has no dependencies. Returning`),[]):Object.keys(s).filter(n=>s[n].lifecycle===e).map(n=>{const i=s[n],{dependentModel:a,dataModelId:c}=Nc(t,i);t.modelData[n]=a.data,m.debug(`waiting for dependent model ${i.modelType} with id ${c} - waiting for WHENREADY`);const u=async(f,p,y)=>{var w;await((w=f.whenReady)==null?void 0:w.call(f)),m.debug(`dependent model ${p} with id ${y} - READY`)},{promise:d,cancel:h}=Pc(Ac,t,t.status);return Promise.race([u(a.model,i.modelType,c).then(()=>{h()}).catch(f=>{console.error(`Error waiting for dependent model ${i.modelType} with id ${c}:`,f),h()}),d])}).filter(n=>!!n)},jc=async(t,e,s,r)=>{if(m.debug(`Execute lifecycle with ${e.length} models`),e.length===0){m.debug(`${t.modelId} has no children. Returning`);return}if(!s){m.error(`${t.modelId} is not transitioning with a valid target ${s}`);return}const o=e.map(a=>{let c;return Qs[s]&&a?c=Qs[s](a):(a||m.error("model is undefined. This shouldn't happen"),Qs[s]||m.error(`There is no promise in the Transition Map for ${s}`)),{promise:c,modelId:a==null?void 0:a.modelId,model:a,type:a==null?void 0:a.modelTypeName,status:a==null?void 0:a.status}}).filter(a=>a.promise?a.model?!0:(m.error(`No model found ${a.modelId}`),!1):(m.error(`No promise found ${a.modelId}`),!1)),i=(await Promise.allSettled(o.map(a=>{var d;const{promise:c,cancel:u}=Pc(Ac,a.model,a.status);return Promise.race([(d=a.promise)==null?void 0:d.then(()=>{u()}).catch(h=>{m.error(`Model ${a.modelId} - ${a.type} failed to transition to ${s}: ${h.message}`),u()}),c])}))).filter(a=>a.status==="rejected");i.length>0&&m.error(`Model ${t.modelId} had ${i.length} failed child models on ${r}`)},Bc=async(t,e,s)=>{await jc(t,t.getChildren().filter(r=>!!r),e,s)},qt=async(t,e)=>{const r=(await Promise.allSettled(Uc(t,e))).filter(o=>o.status==="rejected");r.length&&(m.error(`There were ${r.length} failed dependent models on ${e}`),m.error(r))},sp=t=>typeof t.toJSON=="function",hs=t=>t[F]!==void 0,pn=t=>t.revision!==void 0&&t.index!==void 0,Kc=t=>{if(t){if(hs(t))return t;if(pn(t))return t.data;if(t instanceof Map||t instanceof M.ObservableMap||t instanceof Set)return Array.from(t.values()).filter(hs);if(Array.isArray(t))return t.filter(hs)}};function rp(t){const e=`KosModel(${t.modelTypeName}:${t.modelId})`;try{Object.defineProperty(t,Symbol.toStringTag,{value:e,configurable:!0})}catch{t.toString=()=>e}try{Object.defineProperty(t.constructor,"name",{value:`KosModel_${t.modelTypeName}`,configurable:!0})}catch{t.constructor.name=`KosModel_${t.modelTypeName}`}const s=["fsm","effectManager","subscriptionManager","onlineLifecycleManager","companionManager","childResolver","_offlineQueue"];for(const r of s)r in t&&Object.defineProperty(t,r,{enumerable:!1});Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var r,o,n;return{id:t.modelId,type:t.modelTypeName,initialized:t.initialized,loaded:t.loaded,status:t.status,onlineStatus:t.onlineStatus,activeStatus:t.activeStatus,companions:(o=(r=t.companionManager)==null?void 0:r.all())==null?void 0:o.map(i=>i.modelTypeName),children:(n=t.getChildren)==null?void 0:n.call(t).map(i=>i.modelId),effects:!!t.effectManager,subs:!!t.subscriptionManager}}}),op(t.modelData,t.modelTypeName,t.modelId,t)}function op(t,e,s,r){Object.defineProperty(t,Symbol.toStringTag,{value:`KosModelData(${e}:${s})`,configurable:!0});try{Object.defineProperty(t.constructor,"name",{value:`${e}ModelData`,configurable:!0})}catch{t.constructor.name=`${e}ModelData`}Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var a,c,u;const o=((a=r.getChildren)==null?void 0:a.call(r))||[],n=((c=r.companionManager)==null?void 0:c.all())||[],i=r.modelData[F]||{};return{id:s,type:e,companions:{count:n.length,data:n.map(d=>({type:d.modelTypeName,id:d.modelId}))},dependencies:{count:Object.keys(i).length,data:Object.values(i).map(d=>({id:d.id||d.modelType,type:d.modelType,options:d.options,lifecycle:d.lifecycle}))},children:{count:o.length,data:o.map(d=>({id:d.modelId,type:d.modelTypeName}))},data:((u=t.toJSON)==null?void 0:u.call(t))||{},subs:!!r.subscriptionManager}}}),Object.defineProperty(t,"toJSON",{configurable:!0,enumerable:!1,writable:!0,value:()=>{const o={};for(const n of Object.keys(t))if(!(n.startsWith("_")||typeof t[n]=="function"))try{const i=t[n];hs(i)?o[`[KOS Model] ${n}`]=typeof i.toJSON=="function"?i.toJSON():{id:i.id,type:i.constructor.name}:pn(i)?o[`[KOS Container] ${n}`]=typeof i.toJSON=="function"?i.toJSON():["Container"]:Array.isArray(i)?o[n]=`[Array(${i.length})]`:typeof i=="object"&&i!==null?o[n]=JSON.parse(JSON.stringify(i)):o[n]=i}catch{o[n]="[unreadable]"}return o}})}class np{constructor(e){this.model=e}resolve(){const e=new Set([...this.getResolvedDecoratedChildren(),...this.getAdditionalChildren(),...this.model.companionModels.all()]),s=Array.from(e).map(r=>this.model.modelManager.getModelById(r.id||"")).filter(r=>r&&r.status!==v.FAILED).filter(r=>!!r);return s.forEach(r=>{try{Y.setParentContext(r.modelId,this.model.modelId)}catch(o){console.error(`Failed to set parent context for ${r.modelId} under ${this.model.modelId}`,o)}}),s}getResolvedDecoratedChildren(){var s;const e=((s=this.model.modelData)==null?void 0:s[He])||{};return Object.keys(e).map(r=>Kc(this.model.modelData[r])).filter(r=>!!r).flat()}getAdditionalChildren(){var e,s;return((s=(e=this.model.modelData)==null?void 0:e.getChildren)==null?void 0:s.call(e))||[]}}class ip{constructor(e){l(this,"companions",new M.ObservableMap);this.hostModel=e}add(e){this.companions.set(e.modelTypeName,e)}clear(){this.companions.clear()}get(e){return this.companions.get(e)}all(){return[...this.companions.values()]}get data(){return this.companions}}class ap{constructor(e,s,r,o){l(this,"disposers",[]);this.modelTypeName=e,this.modelId=s,this.modelData=r,this.log=o}setup(){var s;const e=((s=this.modelData)==null?void 0:s[et])||{};for(const r of Object.keys(e)){const{value:o,dependencies:n,options:i}=e[r],a=o.bind(this.modelData),c=()=>{this.log.info(`Running effect ${r} for ${this.modelTypeName} (${this.modelId})`),M.runInAction(()=>a())},u=n?M.reaction(()=>n(this.modelData),c,{fireImmediately:!!(i!=null&&i.fireImmediately)}):M.autorun(c);this.disposers.push(u)}}disposeAll(){for(const e of this.disposers)try{e()}catch(s){this.log.info(`Failed to dispose effect for ${this.modelId}`,s)}this.disposers=[]}}const cp=m.createLogger({name:"model-active-machine"}),lp=t=>{const e=b.createMachine(v.INACTIVE,{[v.FAILED]:b.state(b.transition(L.GO_ACTIVE,v.ACTIVATING)),[v.INACTIVE]:b.state(b.transition(L.GO_ACTIVE,v.ACTIVATING)),[v.ACTIVATING]:b.invoke(()=>(t.activeStatus=v.ACTIVATING,t.activate()),b.transition("done",v.ACTIVE,b.action(()=>{t.activeStatus=v.ACTIVE})),b.transition("error",v.FAILED,b.action(()=>{t.activeStatus=v.FAILED}))),[v.ACTIVE]:b.state(b.transition(L.GO_INACTIVE,v.DEACTIVATING)),[v.DEACTIVATING]:b.invoke(()=>(t.activeStatus=v.DEACTIVATING,t.deactivate()),b.transition("done",v.INACTIVE,b.action(()=>{t.activeStatus=v.INACTIVE})),b.transition("error",v.FAILED,b.action(()=>{t.activeStatus=v.FAILED})))});return{service:b.interpret(e,r=>cp.debug(r.machine.current)),machine:e}},Ii=m.createLogger({name:"model-online-machine"}),up=t=>{const e=b.createMachine(v.OFFLINE,{[v.ONLINE]:b.state(b.transition(L.GO_OFFLINE,v.OFFLINE,b.action(async()=>{await t.offline(),t.onlineStatus=v.OFFLINE}))),[v.OFFLINE]:b.state(b.transition(L.GO_ONLINE,v.ONLINE,b.action(async()=>{Ii.debug(`Going online with model ${t.modelId}`),await t.online(),t.onlineStatus=v.ONLINE,await t.fsm.transitionTo(L.INITIALIZE,v.INITIALIZED)})))}),s=b.interpret(e,r=>Ii.debug(r.machine.current));return{machine:e,service:s}},dp=t=>{var r;const e=lp(t).service,s=up(t).service;return b.createMachine(v.CREATING,{[v.CREATING]:b.state(b.transition(L.CREATE,v.CREATED)),[v.CREATED]:b.state(b.immediate(v.INITIALIZING)),[v.INITIALIZING]:b.invoke(()=>(J(()=>{t.status=v.INITIALIZING}),t.init()),b.transition("done",v.INITIALIZED,b.action(()=>{t.status=v.INITIALIZED})),b.transition("error",v.FAILED,b.action(()=>{m.error(`Model ${t.modelId} - ${t.modelTypeName} failed to initialize. Transitioning to FAILED state.`),t.status=v.FAILED}))),[v.INITIALIZED]:b.state(b.immediate(v.LOADING)),[v.LOADING]:b.invoke(()=>(J(()=>{t.status=v.LOADING}),t.load()),b.transition("done",v.LOADED,b.action(()=>{t.status=v.LOADED})),b.transition("error",v.FAILED,b.action(()=>{t.status=v.FAILED}))),[v.LOADED]:b.state(b.immediate(v.READYING),b.transition(L.UNLOAD,v.UNLOADING)),[v.RESETTING]:b.invoke(()=>{var o;return J(()=>{t.status=v.RESETTING}),(o=t.unload)==null||o.call(t),t.load()},b.transition("done",v.LOADED,b.action(()=>{t.status=v.LOADED}))),[v.READYING]:b.invoke(()=>(J(()=>{t.status=v.READYING}),t.ready()),b.transition("done",v.READY,b.action(()=>{J(()=>{t.status=v.READY}),s.send(L.GO_ONLINE)})),b.transition("error",v.FAILED,b.action(()=>{t.status=v.FAILED}))),[v.READY]:b.state(b.transition(L.UNLOAD,v.UNLOADED,b.action((r=t.unload)==null?void 0:r.bind(t))),b.transition(L.RESET,v.RESETTING),b.transition(L.GO_ONLINE,v.READY,b.action(()=>{s.send(L.GO_ONLINE)})),b.transition(L.GO_OFFLINE,v.READY,b.action(()=>{s.send(L.GO_OFFLINE)})),b.transition(L.GO_ACTIVE,v.READY,b.action(()=>{e.send(L.GO_ACTIVE)})),b.transition(L.GO_INACTIVE,v.READY,b.action(()=>{e.send(L.GO_INACTIVE)}))),[v.UNLOADED]:b.state(),[v.FAILED]:b.state()})},hp=m.createLogger({name:"kos-model-lifecycle"}),fp=t=>({service:b.interpret(dp(t),s=>hp.debug(`state machine for model ${t.modelId}: ${s.machine.current});`))});class pp{constructor(e,s){l(this,"disposer");l(this,"service");this.model=e,this.log=s;const r=fp(e);this.service=r.service,this.service.send(L.CREATE)}get current(){return this.service.machine.current}async transitionTo(e,s,r=v.FAILED){return this.getTransitionStatusFor(s)===s?(this.log.debug(`Model ${this.model.modelId} already in state ${s}, skipping transition`),Promise.resolve()):(this.log.debug(`Transitioning model ${this.model.modelId} with event ${e} toward target ${s}`),new Promise((n,i)=>{var a;(a=this.disposer)==null||a.call(this),this.disposer=M.when(()=>{const c=this.getTransitionStatusFor(s);return c===s||c===r},()=>{this.getTransitionStatusFor(s)===r?(this.log.error(`Model ${this.model.modelId} entered error state ${r} during transition`),i(new Error(`FSM transition failed for model ${this.model.modelId} with event ${e}`))):(this.log.debug(`Model ${this.model.modelId} reached target state ${s}`),n())}),this.service.send(e)}).finally(()=>{var n;(n=this.disposer)==null||n.call(this),this.disposer=void 0}))}getTransitionStatusFor(e){return[v.ACTIVE,v.INACTIVE].includes(e)?this.model.activeStatus:this.model.status}}const Hc="browser-router-model";class gn{constructor(e,s){l(this,"logger");l(this,"model");l(this,"router",null);l(this,"registered",!1);l(this,"registeredRoutes",[]);this.model=e,this.logger=s}registerAll(){var s;if(!rr(this.model))return;let e=this.model.__httpBrowserRouter;if(!e)for(const r of Object.keys(this.model)){const o=this.model[r];if(o&&typeof o=="object"&&"use"in o&&typeof o.use=="function"){e=o;break}}if(e||(e=(s=Ie(Hc))==null?void 0:s.model),!e)throw this.logger.error("Cannot register HTTP routes: BrowserRouter not found. The HTTP decorators should have auto-injected it, but something went wrong."),new Error("BrowserRouter is required for HTTP route decorators but was not found. This should not happen as HTTP decorators auto-inject the dependency.");this.setRouter(e)}setRouter(e){this.router=e,this.registered||this.registerRoutes()}hasRoutes(){return rr(this.model)}registerRoutes(){if(!this.router){this.logger.warn("Cannot register routes: router not set");return}if(this.registered){this.logger.debug("Routes already registered");return}const e=pc(this.model);e.length!==0&&(this.logger.debug(`Registering ${e.length} HTTP routes`),e.forEach(s=>{this.registerRoute(s)}),this.registered=!0)}resolvePropKey(e){const s=/\{PROP_([^}]+)\}/g;let r=e;if(r.includes("{MODEL_ID}")){const n=this.model.id||this.model._id||"unknown";r=r.replace(/\{MODEL_ID\}/g,n)}let o;for(;(o=s.exec(e))!==null;){const n=o[1];if(n in this.model){const i=this.model[n];r=r.replace(o[0],String(i))}else this.logger.warn(`Property '${n}' not found on model for PropKey resolution in path: ${e}`)}return r}registerRoute(e){if(!this.router)return;const s=this.model[e.handler];if(!s||typeof s!="function"){this.logger.error(`Handler method '${e.handler}' not found on model`);return}const r=this.resolvePropKey(e.path);this.logger.debug(`Registering ${e.method} ${r} -> ${e.handler}`+(r!==e.path?` (resolved from ${e.path})`:""));const o=async(n,i)=>{var a;try{await s.call(this.model,n,i)}catch(c){this.logger.error(`Error in route handler ${e.method} ${r}:`,c),(a=i.status)==null||a.call(i,500).send({error:"Internal server error",message:c instanceof Error?c.message:String(c)})}};this.checkForDuplicateRoute(e.method,r),this.router.use(e.method,r,o),this.registeredRoutes.push({method:e.method,path:r})}checkForDuplicateRoute(e,s){if(!this.router)return;this.router.getRoutes().find(n=>n.method===e&&n.path===s)&&this.logger.warn(`Duplicate route detected: ${e} ${s}. This route is already registered by another model. The new handler from model '${this.model.id||"unknown"}' will override the existing one. Only the last registered handler will receive requests. Consider using different paths or namespacing to avoid conflicts.`)}dispose(){if(this.router&&this.registeredRoutes.length>0){this.logger.debug(`Removing ${this.registeredRoutes.length} HTTP routes for model ${this.model.id||"unknown"}`);let e=0;for(const s of this.registeredRoutes){const r=this.router.remove(s.method,s.path);e+=r,r>0?this.logger.debug(`Removed route: ${s.method} ${s.path}`):this.logger.warn(`Failed to remove route: ${s.method} ${s.path} (not found)`)}this.logger.debug(`Successfully removed ${e} routes from browser router`)}this.registered=!1,this.registeredRoutes=[],this.router=null}getRegisteredRoutes(){return[...this.registeredRoutes]}}function gp(t,e){if(!rr(t))return;const s=Ie(Hc);if(!(s!=null&&s.model))throw e.error("Cannot register HTTP routes: BrowserRouter not found. Make sure to include BrowserRouter in your model dependencies or create an instance."),new Error("BrowserRouter is required for HTTP route decorators but was not found. Add it as a dependency using @kosDependency or ensure an instance exists.");new gn(t,e).setRouter(s.model)}class mp{constructor(e){l(this,"queue",[]);this.log=e}enqueue(e){this.queue.push(e)}flush(){if(this.queue.length!==0){this.log.warn(`Processing ${this.queue.length} offline message(s)`);for(const e of this.queue)try{e()}catch(s){this.log.error("Error while processing offline message:",s)}this.queue=[],this.log.info("Offline queue flushed")}}clear(){this.queue=[]}get length(){return this.queue.length}get isEmpty(){return this.queue.length===0}}class yp{constructor(e,s){l(this,"unsubscribers",[]);this.model=e,this.log=s}register(){const e=this.model.modelId,s=C("/kosCore/online",async()=>{this.log.debug(`Online event received for ${e}, waiting for readiness...`),await this.model.whenReady(),this.log.debug(`${e} is ready — sending GO_ONLINE`),await this.model.fsm.transitionTo(L.GO_ONLINE,v.ONLINE)}),r=C("/kosCore/offline",async()=>{this.log.debug(`Offline event received for ${e} — sending GO_OFFLINE`),await this.model.fsm.transitionTo(L.GO_OFFLINE,v.OFFLINE)});this.unsubscribers.push(s.unsubscribe),this.unsubscribers.push(r.unsubscribe)}dispose(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[]}}const zc=()=>({isMock:!1,URL:exports.BASE_URL}),bp=m.createLogger({name:"kos-service-request"}),vp="errUnknown";async function Bs(t,e,s,r,o){const n=r!=null&&r.path?Object.keys(r.path).reduce((h,f)=>String(h).replace(`{${f}}`,r==null?void 0:r.path[f]),String(t)):String(t),i=r!=null&&r.query?Object.keys(r.query).map(h=>`${h}=${r.query[h]}`).join("&"):"",a=`${zc().URL}${n}${i?`?${encodeURIComponent(i)}`:""}`;bp.debug(`fullUrl: ${a}`);const c={method:String(e).toUpperCase(),body:null,...s};o&&(c.body=JSON.stringify(o));const u=await exports.kosFetch(a,c);return u.status<200||u.status>=400?[`${u.statusText||vp}`,null]:[null,(await u.json()).data]}function mn(){return{get:(t,e,s)=>Bs(t,"get",s,e),post:(t,e,s,r)=>Bs(t,"post",r,e,s),put:(t,e,s,r)=>Bs(t,"put",r,e,s),delete:(t,e,s,r)=>Bs(t,"delete",r,e,s)}}const xe=mn(),Vc=Object.freeze(Object.defineProperty({__proto__:null,default:xe},Symbol.toStringTag,{value:"Module"}));var ue=(t=>(t.IMMEDIATE="immediate",t.SINGLE="single",t.TTL="ttl",t.PERMANENT="permanent",t.MANUAL="manual",t))(ue||{});const Qe=m.createLogger({name:"kos-service-request-manager",group:"Model"});function wp(t,e){return!t.condition||t.condition(e)}function Ep(t,e){return Ee({value:t.path,modelId:e.id,modelData:e})}function Mp(t,e){if(t.pathParams)return Ee({value:typeof t.pathParams=="function"?t.pathParams(e):t.pathParams,modelId:e.id,modelData:e})}function Tp(t,e){if(t.queryParams)return Ee({value:typeof t.queryParams=="function"?t.queryParams(e):t.queryParams,modelId:e.id,modelData:e})}function _p(t,e){if(t.body)return Ee({value:typeof t.body=="function"?t.body(e):t.body,modelId:e.id,modelData:e})}function Sp(t){return(t||"get").toLowerCase()}function Oi(t,e){return`${e.toUpperCase()}:${t}`}function Gc(t){return t==null}function Ip(t,e,s,r){r&&Gc(t)&&Qe.warn(`Required field '${e}' is missing in response for ${s}`)}function Op(t,e){return Gc(t)&&e!==void 0?e:t}class $p{constructor(e,s){l(this,"model");l(this,"responseStore");l(this,"handlers");this.model=e,this.responseStore=s,this.handlers=new Map,this.discoverHandlers()}discoverHandlers(){const s=Object.getPrototypeOf(this.model)[tt]||{};Object.values(s).forEach(r=>{const o=r.lifecycle;this.handlers.has(o)||this.handlers.set(o,[]),this.handlers.get(o).push(r)}),Object.keys(s).length>0&&Qe.debug(`Discovered ${Object.keys(s).length} service request handlers for model ${this.model.id}`)}async executeForLifecycle(e){const s=this.handlers.get(e);!s||s.length===0||(Qe.debug(`Executing ${s.length} service requests for lifecycle ${e}`),await Promise.all(s.map(r=>this.executeHandler(r))))}async executeHandler(e){try{if(!wp(e,this.model)){Qe.debug(`Skipping request ${e.path} - condition returned false`);return}const s=this.prepareRequest(e),[r,o]=await this.performRequest(s);if(r){await this.handleError(new Error(r),e);return}const n=await this.processResponse(o,e);await this.storeAndInvokeHandler(n,e,s.resolvedPath)}catch(s){const r=s instanceof Error?s:new Error(String(s));await this.handleError(r,e)}}prepareRequest(e){const s=Ep(e,this.model),r=Mp(e,this.model),o=Tp(e,this.model),n=_p(e,this.model),i=Sp(e.method);return{resolvedPath:s,method:i,pathParams:r,queryParams:o,body:n}}async performRequest(e){return await this.makeRequest(e.resolvedPath,e.method,{path:e.pathParams,query:e.queryParams},e.body)}async processResponse(e,s){let r=e;return s.transform&&(r=s.transform(e)),s.mappings&&s.mappings.length>0&&(r=this.applyMappings(r,s)),s.iterateOver&&(r=await this.handleIteration(r,s)),r}async storeAndInvokeHandler(e,s,r){const o=s.cache||{retention:ue.SINGLE},n=Oi(r,s.method||"get");this.responseStore.set(n,e,o),await s.originalHandler.call(this.model,e),this.responseStore.shouldCleanupAfterHandler(n)&&this.responseStore.delete(n)}async makeRequest(e,s,r,o){const n=xe;switch(s){case"get":return await n.get(e,r);case"post":return await n.post(e,r,o);case"put":return await n.put(e,r,o);case"delete":return await n.delete(e,r,o);default:return[`Unsupported HTTP method: ${s}`,null]}}applyMappings(e,s){if(!s.mappings||s.mappings.length===0)return e;const r={};return s.mappings.forEach(o=>{const n=this.getNestedValue(e,o.from),i=o.transform?this.applyTransform(n,o.transform):n;Ip(i,o.from,s.path,o.required||!1);const a=Op(i,o.default);r[o.to]=a}),r}getNestedValue(e,s){return s.split(".").reduce((r,o)=>r==null?void 0:r[o],e)}applyTransform(e,s){if(typeof s=="function")return s(e);switch(s){case"string":return String(e);case"number":return Number(e);case"boolean":return!!e;case"date":return e?new Date(e):void 0;case"json":return typeof e=="string"?JSON.parse(e):e;default:return Qe.warn(`Unknown transformer: ${s}`),e}}async handleIteration(e,s){if(!s.iterateOver)return e;const r=this.getNestedValue(e,s.iterateOver);return Array.isArray(r)?s.modelFactory?r.map(o=>{const n=o.id||o.ingredientId||String(Math.random());return s.modelFactory(n)(o)}):r.map(o=>s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o):(Qe.warn(`iterateOver path '${s.iterateOver}' did not resolve to an array`),[])}async handleError(e,s){const r=s.errorHandler||{strategy:"throw"};switch(r.onError&&r.onError(e,this.model),r.strategy){case"throw":throw e;case"log":Qe.error(`Service request failed for ${s.path}:`,e.message);break;case"ignore":break;case"default":if(r.defaultValue!==void 0){const o=Oi(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:ue.SINGLE})}break}}}class Cp{constructor(e){l(this,"subscription");l(this,"unsubscribe");l(this,"eventType");this.eventType=e,this.subscription={queue:[],resolvers:[],closed:!1};const s=C(e,r=>{if(!this.subscription.closed&&r!==void 0){const o=this.subscription.resolvers.shift();o?o(r):this.subscription.queue.push(r)}});this.unsubscribe=s.unsubscribe}async next(){return this.subscription.closed&&this.subscription.queue.length===0?{done:!0,value:void 0}:this.subscription.queue.length>0?{done:!1,value:this.subscription.queue.shift()}:new Promise(e=>{this.subscription.closed?e({done:!0,value:void 0}):this.subscription.resolvers.push(s=>{e({done:!1,value:s})})})}async return(){return this.subscription.closed=!0,this.unsubscribe(),this.subscription.resolvers.forEach(e=>{e(void 0)}),this.subscription.resolvers=[],{done:!0,value:void 0}}async throw(e){throw this.subscription.closed=!0,this.unsubscribe(),e}[Symbol.asyncIterator](){return this}}function $i(t){return new Cp(t)}var qc=(t=>(t.GET="GET",t.PUT="PUT",t.POST="POST",t.DELETE="DELETE",t))(qc||{});const Yc=({path:t,requestId:e,method:s,destinationAddress:r})=>{let o=`${xr}:${s}
1
+ "use strict";var _h=Object.defineProperty;var Sh=(t,e,s)=>e in t?_h(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var l=(t,e,s)=>(Sh(t,typeof e!="symbol"?e+"":e,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("loglevel"),M=require("mobx"),b=require("robot3"),je=require("date-fns"),T=require("@emotion/react/jsx-runtime"),Ko=require("@emotion/styled"),ca=require("react-dom"),We=require("@emotion/react"),g=require("react"),Ho=require("mobx-react-lite"),Oh=require("@use-gesture/react"),xr="method",la="topic",Pt="url",Ds="request-id",Ar="response-id",qo="status",Ne="dst-addr",ua="src-addr",Ie="type",zo="ordered",Vo="tracker",da="Content-Type",ha="Cache-Control",fa="requestId",pa=process.env.KOS_LOGIN_URL||"http://localhost",ga=process.env.KOS_APP_PORT||"8080",Ih=`${pa}:${ga}`,sr="{MODEL_ID}";var xs=(t=>(t.SEND="/ws/log/msg/send",t.RECEIVED="/ws/log/msg/receive",t))(xs||{}),ma=(t=>(t.MSG_RECEIVE="/mock/msg/receive",t))(ma||{});const Go="/kos/model/ready/";D.info("Initializing event bus");globalThis.kos=globalThis.kos||{};globalThis.kos.subscriptions=globalThis.kos.subscriptions||{};const z=globalThis.kos.subscriptions,$h=()=>Symbol("eventKey");function Yo(t){return z[t]&&Object.getOwnPropertySymbols(z[t]).length>0}function C(t,e){const s=$h();return z[t]||(D.debug(`Initializing subscription for ${t}`),z[t]={}),D.debug(`Subscribing to ${t} with id ${s.toString()}`),z[t][s]=e,{count:z[t]?Object.getOwnPropertySymbols(z[t]).length:0,unsubscribe:()=>(D.debug(`Unsubscribing from ${t} with id ${s.toString()}`),z[t]&&z[t][s]&&delete z[t][s],z[t]&&Object.getOwnPropertySymbols(z[t]).length===0&&delete z[t],{count:z[t]?Object.getOwnPropertySymbols(z[t]).length:0})}}function V(t,e,s={}){if(!z[t]||Object.getOwnPropertySymbols(z[t]).length===0)return D.debug(`No subscriptions for ${t}. Not publishing.`),{eventType:t,subscribers:0};const r=Object.getOwnPropertySymbols(z[t]).length;return Object.getOwnPropertySymbols(z[t]).forEach(o=>{if(s.sync){const n=s.sync;D.debug(`Performing sync publish for ${t} with sync id ${n}`),z[t][o]({body:e,headers:s}).then(i=>{D.debug(`Response recieved for ${n}, publishing back to source.`),V(n,i)})}else D.debug(`Performing async publish for ${t}`),z[t][o]({body:e,headers:s})}),{eventType:t,subscribers:r}}function Ch(){D.warn("Resetting event bus"),Object.keys(z).forEach(t=>delete z[t])}function ya(t,e){const s=C(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function Wo(t,e){return new Promise((s,r)=>{let o=null;const n=ya(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}const Dh=Object.freeze(Object.defineProperty({__proto__:null,hasEventSubscriptions:Yo,once:ya,publish:V,reset:Ch,subscribe:C,waitFor:Wo},Symbol.toStringTag,{value:"Module"}));function Rr(t,e){const s=C(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function Pr(t,e){return new Promise((s,r)=>{let o=null;const n=Rr(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}function ba(t,e){const s=t.map(r=>Pr(r,e));return Promise.all(s)}function va(t,e){return new Promise((s,r)=>{const o=[];let n=null,i=!1;const a=()=>{o.forEach(c=>c()),n&&clearTimeout(n)};t.forEach(c=>{const u=Rr(c,d=>{i||(i=!0,a(),s({eventType:c,data:d}))});o.push(u)}),e&&(n=setTimeout(()=>{i||(i=!0,a(),r(new Error(`Timeout waiting for any event: ${t.join(", ")}`)))},e))})}function wa(t,e,s){return C(t,o=>{o&&e(o)&&s(o)}).unsubscribe}function Ea(t,e,s){return C(t,o=>{if(o){const n=e(o);s(n)}}).unsubscribe}function Ma(t,e,s){let r=null;const o=C(t,n=>{r&&clearTimeout(r),r=setTimeout(()=>{s(n)},e)});return()=>{r&&clearTimeout(r),o.unsubscribe()}}function Ta(t,e,s){let r=0,o=null;const n=C(t,i=>{const a=Date.now(),c=a-r;c>=e?(r=a,s(i)):o||(o=setTimeout(()=>{r=Date.now(),s(i),o=null},e-c))});return()=>{o&&clearTimeout(o),n.unsubscribe()}}function _a(t,e,s){let r=[],o=null;const n=()=>{r.length>0&&(s([...r]),r=[])},i=C(t,a=>{a&&(r.push(a),o||(o=setTimeout(()=>{n(),o=null},e)))});return()=>{o&&(clearTimeout(o),n()),i.unsubscribe()}}function Qo(t,e=1){const s=[];return C(t,r=>{r&&(s.push(r),s.length>e&&s.shift())}),{subscribe:r=>(s.forEach(o=>r(o)),C(t,r))}}function Sa(t,e){const s=t.map(r=>C(r,o=>{o&&e(r,o)}));return()=>{s.forEach(r=>r.unsubscribe())}}function Oa(t,e){let s=t;const r=[],o=new Set;return Object.values(e).forEach(n=>{Object.keys(n).forEach(i=>{o.add(i)})}),o.forEach(n=>{const{unsubscribe:i}=C(n,a=>{const c=e[s];c&&c[n]&&(s=c[n](a))});r.push(i)}),{get state(){return s},unsubscribe:()=>{r.forEach(n=>n())}}}function Ia(t,e,s,r){const o=Pr(e,r);return V(t,s),o}async function*$a(t){const e=[],s=[],r=C(t,o=>{o&&(s.length>0?s.shift()(o):e.push(o))});try{for(;;)e.length>0?yield e.shift():yield await new Promise(o=>{s.push(o)})}finally{r.unsubscribe()}}const xh={once:Rr,waitFor:Pr,waitForAll:ba,race:va,filter:wa,map:Ea,debounce:Ma,throttle:Ta,buffer:_a,replay:Qo,merge:Sa,stateMachine:Oa,request:Ia,eventIterator:$a},Ah=Object.freeze(Object.defineProperty({__proto__:null,EventBusFunctional:xh,buffer:_a,debounce:Ma,eventIterator:$a,filter:wa,map:Ea,merge:Sa,once:Rr,race:va,replay:Qo,request:Ia,stateMachine:Oa,throttle:Ta,waitFor:Pr,waitForAll:ba},Symbol.toStringTag,{value:"Module"}));async function kr(t,e){const{getCurrentState:s,transformState:r,shouldUseFetchedState:o,timeout:n}=e,i=Wo(t,n),a=await s(),c=r?r(a):a;return o&&o(c)?(i.catch(()=>{}),c):await Promise.race([i,new Promise(d=>{setTimeout(()=>d(c),100)})])}function Ca(t,e,s){const{getCurrentState:r,transformState:o}=s;let n=!1;const i=C(t,a=>{a&&(n=!0,e(a))});return Promise.resolve(r()).then(a=>{const c=o?o(a):a;n||e(c)}).catch(a=>{console.error("Failed to fetch initial state:",a)}),i.unsubscribe}function Da(t,e){let s;const r=new Set,o=async()=>{try{typeof e=="string"?s=await(await fetch(e)).json():s=await e(),r.forEach(a=>a(s))}catch(a){throw console.error("Failed to fetch initial state:",a),a}};C(t,a=>{a!=null&&a.body&&(s=a.body,r.forEach(c=>c(s)))});let n=!1;const i=()=>{n||(n=!0,o())};return{get state(){return s},async getState(){return i(),s===void 0&&await new Promise(a=>{const c=()=>{s!==void 0?a():setTimeout(c,10)};c()}),s},subscribe(a){return i(),r.add(a),s!==void 0&&a(s),()=>{r.delete(a)}},async refresh(){return await o(),s}}}async function Zo(t,e){if(typeof t=="string")return kr(t,e);const s=t,{getCurrentState:r,shouldUseFetchedState:o,timeout:n}=e,i=await r(),a=e.transformState?e.transformState(i):i;if(o&&o(a))return a;const c=s.map(d=>Wo(d,n)),u=await Promise.all(c);return u[u.length-1]}function xa(t,e,s){const{fetchMissedEvents:r,checkInterval:o=3e4,deduplicateById:n}=s,i=new Set,a=C(t,async u=>{if(u){if(n){const d=n(u);if(i.has(d))return;i.add(d),i.size>1e3&&Array.from(i).slice(0,500).forEach(f=>i.delete(f))}await e(u)}}),c=setInterval(async()=>{try{const u=await r(),d=Array.isArray(u)?u:[u];for(const h of d)if(n){const f=n(h);i.has(f)||(i.add(f),await e(h))}else await e(h)}catch(u){console.error("Failed to fetch missed events:",u)}},o);return()=>{a.unsubscribe(),clearInterval(c)}}function Aa(t){const{connectEvent:e,disconnectEvent:s,errorEvent:r,dataEvent:o,fetchInitialState:n,reconnectDelay:i=5e3}=t,a={state:"disconnected",data:void 0,async waitForConnection(d){if(a.state==="connected"&&a.data)return a.data;const h=await kr(e,{getCurrentState:n,shouldUseFetchedState:f=>!!f,timeout:d});return a.state="connected",a.data=h,u(),h},subscribe(d){return c.add(d),d(a),()=>{c.delete(d)}},async reconnect(){a.state="connecting",u();try{const d=await n();a.state="connected",a.data=d,u()}catch{a.state="error",u(),setTimeout(()=>{a.state==="error"&&a.reconnect()},i)}}},c=new Set,u=()=>{c.forEach(d=>d(a))};return C(e,d=>{a.state="connected",d!=null&&d.body&&(a.data=d.body),u()}),C(s,()=>{a.state="disconnected",u(),setTimeout(()=>{a.state==="disconnected"&&a.reconnect()},i)}),r&&C(r,()=>{a.state="error",u()}),o&&C(o,d=>{d!=null&&d.body&&a.state==="connected"&&(a.data=d.body,u())}),a.reconnect(),a}const Rh={waitForOrGetState:kr,subscribeWithInitialState:Ca,createStatefulEventStream:Da,waitForAllWithState:Zo,createResilientEventHandler:xa,createConnectionStateManager:Aa},Ph=Object.freeze(Object.defineProperty({__proto__:null,EventBusState:Rh,createConnectionStateManager:Aa,createResilientEventHandler:xa,createStatefulEventStream:Da,subscribeWithInitialState:Ca,waitForAllWithState:Zo,waitForOrGetState:kr},Symbol.toStringTag,{value:"Module"})),kh=(t,e=0)=>{if(!+t)return{value:0,scale:"bytes",toString:()=>"0 bytes"};const s=1024,r=e<0?0:e,o=["bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(s)),i=parseFloat((t/Math.pow(s,n)).toFixed(r)),a=o[n];return{value:i,scale:a,toString:()=>`${i} ${a}`}};function Xo(t){let e="pending",s;const r=t.then(n=>{e="success",s=n},n=>{e="error",s=n});return{read:()=>{switch(e){case"pending":throw r;case"error":throw s;default:return s}}}}function ot(){return"xxxxxxxx-xxxx-4xxx-2xxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=Math.random()*16|0;return(t=="x"?e:e&3|8).toString(16)})}function Lh(t,e){e.forEach(s=>{Object.getOwnPropertyNames(s.prototype).forEach(r=>{const o=Object.getOwnPropertyDescriptor(s.prototype,r);Object.defineProperty(t.prototype,r,o)})})}function Fh(t,e){const s=t??[],r=e??[];return s.length!==r.length?!1:s.every((o,n)=>o===r[n])}const Jo=(t,e)=>{const s=t.map(n=>n.id);return e.map(n=>n.id).filter(n=>!s.includes(n))},Ra=t=>t,Pa=t=>t,Nh=({container:t,onAddItem:e,onUpdateItem:s,onRemoveItem:r=Ra,idMapper:o=Pa})=>n=>{const i=n.map(o),c=Jo(i,t.data).map(r).filter(Boolean);t.removeAll(c);const u=i.map(d=>{const h=t.getModel(d.id);return h&&s?s(d,h):e(d)}).filter(Boolean);t.addAll(u)},Uh=({container:t,onAddItem:e,onRemoveItem:s=Ra,idMapper:r=Pa})=>o=>{const n=o.map(r);Jo(n,t.models).forEach(s),n.forEach(e)},jh=({items:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r);Jo(n,t).forEach(s),n.forEach(e)},Bh=(t,e="parent-")=>{let s=t;return s.startsWith(e)&&(s=s.replace(e,"")),s},yi=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),bi=[{amount:60,name:"seconds"},{amount:60,name:"minutes"},{amount:24,name:"hours"},{amount:7,name:"days"},{amount:4.34524,name:"weeks"},{amount:12,name:"months"},{amount:Number.POSITIVE_INFINITY,name:"years"}];function ka(t){let e=(t.getTime()-Date.now())/1e3;for(let s=0;s<=bi.length;s++){const r=bi[s];if(Math.abs(e)<r.amount)return yi.format(Math.round(e),r.name);e/=r.amount}return yi.format(Math.round(e),"years")}const en=t=>t%4===0&&t%100!==0||t%400===0,tn=(t,e)=>[31,en(t)?29:28,31,30,31,30,31,31,30,31,30,31][e],La=(t,e)=>{const s=new Date(t),r=t.getDate();return s.setDate(1),s.setMonth(s.getMonth()+e),s.setDate(Math.min(r,tn(s.getFullYear(),s.getMonth()))),s},Fa=(t,e)=>{const s=new Date(t);return s.setDate(s.getDate()+e),s},wt="en-US",Na={short:{year:"numeric",month:"2-digit",day:"2-digit"},medium:{year:"numeric",month:"short",day:"2-digit"},long:{year:"numeric",month:"long",day:"numeric"},full:{year:"numeric",month:"long",day:"numeric",weekday:"long"}},Ua={short:{hour:"2-digit",minute:"2-digit",hour12:!0},medium:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0},long:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0,timeZoneName:"short"},full:{hour:"2-digit",minute:"2-digit",hour12:!0,timeZoneName:"long"}},ja=(t,{dateStyle:e="short",locales:s=wt}={dateStyle:"short",locales:wt})=>{const r=e==="short"?Na.short:{dateStyle:e};return new Intl.DateTimeFormat(s,r).format(t)},Ba=(t,{locales:e=wt,timeStyle:s="short"}={locales:wt,timeStyle:"short"})=>{const r=Ua[s];return new Intl.DateTimeFormat(e,r).format(t)},Ka=(t,{dateStyle:e="short",locales:s=wt,timeStyle:r="short"}={dateStyle:"short",locales:wt,timeStyle:"short"})=>{const o={...e&&Na[e],...r&&Ua[r]};return new Intl.DateTimeFormat(s,o).format(t)},Kh=Object.freeze(Object.defineProperty({__proto__:null,addDaysToDate:Fa,addMonthsToDate:La,formatDate:ja,formatDateSince:ka,formatDateTime:Ka,formatTime:Ba,getDaysInMonth:tn,isLeapYear:en},Symbol.toStringTag,{value:"Module"}));function Ha(t,e,s=300){let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>{e.apply(t,o)},s)}}const te="canvas-renderer",so=new Map,vi=new Map,ro=new Map,oo=new Map,As=(t,e)=>{qa[t]=e},qa={indexExtension:{registerIndexExtension:(t,e)=>{const s=oo.get(t)||{};Object.assign(s,e),oo.set(t,e)},loadIndexExtensions:t=>oo.get(t)||{}},loader:{registerLoader:(t,e)=>{vi.set(t,e)},executeLoader:async(t,e)=>{const s=vi.get(t);if(s)return await s(e)}},propertyMapper:{registerPropertyMapper:(t,e)=>{ro.set(t,e)},hasMapper:t=>ro.has(t),executeMapper:(t,e,s)=>{const r=ro.get(t);return r?r(e,s):""}},dataMapper:{registerDataMapper:(t,e)=>{const s=so.get(t)||[];s.push(e),so.set(t,s)},executeMapper:async(t,e,s)=>{const r=so.get(t);if(!r)return{};const o={};for(const n of r){const i=await n(e,s);Object.assign(o,i)}return o}},canvas:{registerRenderer:(t,e)=>{if(!$[te]){console.warn(`Canvas renderer extension point is not registered. Cannot register renderer "${t}".`);return}$[te].register(t,e)}}},$=qa,Hh=async({context:t,extension:e})=>{const s=await $.loader.executeLoader(e,{});return t==null||t.set(e,s),s},qh=async({extension:t,contextData:e,data:s})=>await $.dataMapper.executeMapper(t,s,e),zh=async({extension:t,contextData:e,data:s})=>await $.propertyMapper.executeMapper(t,s,e),Vh=Object.freeze(Object.defineProperty({__proto__:null,executeDataMapperExtension:qh,executeLoaderExtension:Hh,executePropertyMapperExtension:zh},Symbol.toStringTag,{value:"Module"})),Gh="Extensions";class Yh{constructor(){l(this,"extensions");this.extensions={}}register(e,s,r){this.extensions[e]={},this.extensions[e][s]={component:r}}get(e,s){if(!this.extensions[e])throw new Error(`Extension point ${e} not found`);return this.extensions[e][s]}get allExtensions(){return this.extensions}}const me=(t=null)=>(t||window.location.search.replace("?","")).split("&").map(e=>{const[s,r]=e.split("=");return[s,decodeURIComponent(r||"")]}).reduce((e,[s,r])=>(e[s]=r,e),{}),za="studio.tools.preview",Wh="studio.relax.store.validation",Va="studio.log.debug",Ga="studio.log.info",Qh={profiles:[za]};var aa;const Zh=((aa=globalThis.getKosConfig)==null?void 0:aa.call(globalThis))||JSON.stringify(Qh),Ya=JSON.parse(Zh);globalThis.kosConfig=Ya;const sn=Ya,Wa=()=>sn.profiles||[],Eo=t=>Wa().includes(t),Xh=()=>sn.logging||!1,Jh=()=>{const t=Eo(Va),e=Eo(Ga);return t?"DEBUG":e?"INFO":void 0},Qa=()=>{const t=me(),e=Jh(),r=t.kosLogLevel??e??window.kosLogLevel??process.env.KOS_LOG_LEVEL;return r||"WARN"},Za=()=>window.kosMessageLogging||process.env.KOS_MESSAGE_LOGGING==="true",Xa=()=>window.kosMessageStudioLogging||process.env.KOS_MESSAGE_STUDIO_LOGGING==="true",Ja="ws-log",ef=D.methodFactory,ec=Za(),tf=Xa();D.methodFactory=function(t,e,s){const r=ef(t,e,s);return function(...o){var c;const n=s?String(s):"",i=n?`[${String(n).substring(n.lastIndexOf(":")+1)}] | `:"[root] | ",a=o.map(u=>typeof u=="object"?JSON.stringify(u):String(u)).join(" ");r(`${i}${a}`),(c=globalThis==null?void 0:globalThis.kosConfig)!=null&&c.logging&&globalThis.kosLog&&(s!==Ja||ec&&tf)&&globalThis.kosLog(`UI: ${i}${a}`)}};let tc=Qa();D.setLevel(tc);window.setKosLogLevel=t=>{tc=t,D.setLevel(t)};const rr=D.getLogger(Ja);window.enableKosMessageLog=()=>{rr.setLevel(D.levels.INFO)};window.disableKosMessageLog=()=>{rr.setLevel(D.levels.ERROR)};ec?window.enableKosMessageLog():window.disableKosMessageLog();const sf=["color: black","display: block","background-color: lightgreen","padding: 4px","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),rf=["color: black","display: block","padding: 4px","background-color: yellow","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),Us=t=>e=>{D.getLevel()<=t&&e()},m={...D,ifDebug:Us(D.levels.DEBUG),ifInfo:Us(D.levels.INFO),ifWarn:Us(D.levels.WARN),ifError:Us(D.levels.ERROR),getLogger:t=>D.getLogger(`kos::${t}`),getLoggers:()=>D.getLoggers(),createLogger:({name:t,group:e})=>{var n,i,a,c;const s=`${e?`${e}:`:"kos"}::${t}`,r=D.getLogger(s);let o=(i=(n=globalThis.kos.logOverrides)==null?void 0:n.find(u=>u.name===s))==null?void 0:i.level;return o?r.setLevel(o):(o=(c=(a=globalThis.kos.logOverrides)==null?void 0:a.find(u=>s.startsWith(u.name)))==null?void 0:c.level,o&&r.setLevel(o)),r},wsSend:(...t)=>{const e=String(t).replace(/\n/g,"\\n");rr.info(`%c⬆ ${e}`,sf)},wsReceive:(...t)=>{const e=String(t).replace(/\n/g,"\\n");rr.info(`%c⬇ ${e}`,rf)}},sc="featureFlagResolver",js=new Map;As(sc,{register:(t,e)=>{var s;js.has(t)||js.set(t,[]),(s=js.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=js.get(t);if(!s)return[];const r=s.map(a=>a(e)),n=(await Promise.allSettled(r)).map(a=>a.status==="fulfilled"?a.value:(m.info(`Feature flag resolver ${t} failed: ${a.reason}`),[])).flat(),i=Array.from(new Set(n)).reduce((a,c)=>(a[c]=!0,a),{});return oc.updateFlags(i),Object.keys(i)}});const of="kos.loader.featureFlag";class rc{constructor(e={}){l(this,"flags",{});this.flags=e}isFeatureEnabled(e){return!!this.flags[e]}enableFeature(e){this.flags[e]=!0}disableFeature(e){this.flags[e]=!1}toggleFeature(e){this.flags[e]=!this.flags[e]}updateFlags(e){this.flags={...this.flags,...e}}}window.KosFeatureFlags=window.KosFeatureFlags??new rc;const oc=window.KosFeatureFlags,nc=(t,e,s)=>{s/=100;const r=e*Math.min(s,1-s)/100,o=n=>{const i=(n+t/30)%12,a=s-r*Math.max(Math.min(i-3,9-i,1),-1);return Math.round(255*a).toString(16).padStart(2,"0")};return`#${o(0)}${o(8)}${o(4)}`},ic=t=>{const s=new RegExp("hsl\\((\\d+),\\s+(\\d+)\\%,\\s+(\\d+)\\%\\)").exec(t);if(!s)throw Error("Invalid HSL string");return nc(parseInt(s[1]),parseInt(s[2]),parseInt(s[3]))},ac=(t,e)=>getComputedStyle(t).getPropertyValue(e),nf=(t,e)=>ic(ac(t,e)),af=(t,e)=>{const s={...t};return s.id&&delete s.id,s},Mo=(t,e,s=af)=>{const r=s(t,e);M.runInAction(()=>{Object.assign(e,r)})},no=new Map,cc={addToDeletionQueue:(t,e)=>{const s=no.get(t)||[];s.push(e),no.set(t,s)},cancelDeletion:t=>{const e=no.get(t);e&&e.forEach(s=>{clearTimeout(s)})}},cf=m.createLogger({name:"kos-dependency-manager"});class lf{constructor(){l(this,"_usedByCache",new Map);l(this,"_usesCache",new Map)}add(e,s){cc.cancelDeletion(s);const r=this._usedByCache.get(s)||[];r.includes(e)||r.push(e),this._usedByCache.set(s,r);const o=this._usesCache.get(e)||[];o.includes(s)||o.push(s),this._usesCache.set(e,o)}remove(e,s){const r=this._usedByCache.get(s)||[];this._usedByCache.set(s,r.filter(n=>n!==e));const o=this._usesCache.get(e)||[];this._usesCache.set(e,o.filter(n=>n!==s))}canDestroy(e){const s=this._usedByCache.get(e);return s!=null&&s.length?(cf.info(`Model ${e} is still used by: ${s.join(", ")}`),!1):!0}clear(){this._usedByCache.clear(),this._usesCache.clear()}}var v=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.READY_FAILED="ready_failed",t.RESETTING="resetting",t.RESET="reset",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.FAILED="failed",t.INACTIVE="inactive",t.ACTIVE="active",t.ACTIVATING="activating",t.DEACTIVATING="deactivating",t))(v||{}),L=(t=>(t.CREATE="create",t.INITIALIZE="init",t.LOAD="load",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.RESET="go_offline",t.UNLOAD="unload",t.FAILED="failed",t.GO_ACTIVE="go_active",t.GO_INACTIVE="go_inactive",t.TIMEOUT="timeout",t))(L||{});const wi=m.createLogger({name:"kos-model-cache"});class uf{constructor(e=[]){l(this,"_modelsById",M.observable.map(new Map));l(this,"_toDelete",new Map);l(this,"_preloaded",[]);l(this,"_isPreloaded",!1);this.preloadKeys=e}get models(){return Array.from(this._modelsById.values()).map(e=>e).filter(e=>!this._toDelete.has(e.modelId))}getModelById(e){if(e&&!this._toDelete.has(e))return this._modelsById.get(e)}addModel(e){const s=this.getModelById(e.modelId)||e;return this._modelsById.set(s.modelId,s),s}removeModel(e){this._modelsById.delete(e),this._toDelete.delete(e)}hasModel(e){return!!e&&this._modelsById.has(e)&&!this._toDelete.has(e)}restoreFromDeleteCache(e){if(e&&this._toDelete.has(e)){const s=this._toDelete.get(e);this._toDelete.delete(e),this._modelsById.set(e,s)}}markForDeletion(e){this._modelsById.delete(e.modelId),this._toDelete.set(e.modelId,e)}preload(e){return this._isPreloaded?(wi.debug("Returning cached preloaded models"),this._preloaded):(this._preloaded=this.preloadKeys.map(s=>(wi.debug(`Preloading model: ${typeof s=="string"?s:s.modelType}`),e(s))).filter(s=>!!s),this._isPreloaded=!0,this._preloaded)}}const ee=Symbol("SubscriptionHandlers"),F=Symbol("DependencyModels"),cs=Symbol("FutureService"),Be=Symbol("ChildModels"),ls=Symbol("ParentModel"),us=Symbol("LogConfig"),Qs=Symbol("ReferenceConfig"),rn=Symbol("KosModelSymbol"),Je=Symbol("ModelEffects"),Et=Symbol("CompanionParentModel"),on=Symbol("FutureContainerSetup"),nn=Symbol("MultipleFutureContainerSetup"),ds=Symbol("FutureAliases"),an=Symbol("TroubleAwareSetup"),cn=Symbol("LoggerSetup"),ln=Symbol("ContainerAwareSetup"),$e=(t,e)=>{t[Be]=t[Be]||{},t[Be][e]=!0},nt=t=>`{PROP_${String(t)}}`,df=t=>`{PROP_${String(t)}}`,hf=nt("kosParentId"),Lr=t=>e=>{e[ls]=e[ls]||{};const s=(t==null?void 0:t.parentId)||hf;e[ls]={parentId:s}};function ff(t){return e=>{const s=(t==null?void 0:t.mode)||"decorator",r=(t==null?void 0:t.parentProperty)||"companionParent",o=(t==null?void 0:t.excludeProperties)||[];return Lr()(e),e.prototype[Et]={mode:s,parentProperty:r,excludeProperties:o},e}}function lc(t){return e=>{const s=t!=null&&t.legacy?"_models":(t==null?void 0:t.containerProperty)||"container",r=(t==null?void 0:t.includeMethods)!==!1,o=(t==null?void 0:t.includeGetters)!==!1,n=(t==null?void 0:t.modelsProperty)||"models",i=(t==null?void 0:t.containerOptions)||{};return e.prototype[ln]={containerProperty:s,includeMethods:r,includeGetters:o,modelsProperty:n,containerOptions:i,legacy:(t==null?void 0:t.legacy)||!1},e}}function pf(t,e,s){const r=s.value;s.value=function(...o){const n=Y.getContext(this.id);return o.push(n),r.apply(this,o)}}const Fr=Symbol("KosExecutionContext");function un(t){return t&&typeof t=="object"&&Fr in t}function gf(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[on]={mode:s,handlerProperty:r},e}}function mf(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[nn]={mode:s,handlerProperty:r},e}}var U=(t=>(t.INIT="init",t.LOAD="load",t.READY="ready",t.ACTIVATE="activate",t.ONLINE="online",t))(U||{});const yf=Object.freeze(Object.defineProperty({__proto__:null,DependencyLifecycle:U},Symbol.toStringTag,{value:"Module"})),Re=Symbol("HttpRouteHandlers"),Ei="__httpBrowserRouter";function Nr(t){return function(s){return function(r,o,n){r[Re]=r[Re]||[];const i={method:t,path:s,handler:o};return r[Re].push(i),r[F]=r[F]||{},r[F][Ei]||(r[F][Ei]={modelType:"browser-router-model",lifecycle:U.INIT}),n}}}const uc=Nr("GET"),Rs=Nr("POST"),bf=Nr("PUT"),dc=Nr("DELETE"),vf=dc;function or(t){return!!(t!=null&&t[Re])&&t[Re].length>0}function hc(t){return(t==null?void 0:t[Re])||[]}const wf=({group:t}={group:""})=>e=>{e[us]=e[us]||{},e[us]={group:t}};class fc{static create({modelId:e,modelTypeName:s,component:r}){const o=[r??"kos",s,e].filter(Boolean).join(".");return m.createLogger({name:o})}}function pc(t){return e=>{const s=(t==null?void 0:t.loggerProperty)||"logger",r=t==null?void 0:t.loggerContext;e.prototype[cn]={loggerProperty:s,loggerContext:r};const o=()=>{var i;return(i=e.prototype[rn])==null?void 0:i.type};let n;return Object.defineProperty(e.prototype,s,{get(){if(!n){const i=o();n=fc.create({modelTypeName:r||i,component:"kos-model"})}return n},enumerable:!1,configurable:!1}),e}}function gc(t){return(e,s,r)=>{e[Je]=e[Je]||{},e[Je][s]={dependencies:t==null?void 0:t.dependencies,value:r.value},r.value=function(){throw new Error(`Method ${s} cannot be called directly.`)}}}const Ef=t=>(e,s)=>{e[Qs]=e[Qs]||{},e[Qs][s]=t},io=m.createLogger({name:"resolve-parameters"}),Ee=({value:t,modelId:e,modelData:s})=>{let r=t;if(Array.isArray(r))return[...t];if(typeof r!="string"&&typeof r!="object")return r;if(typeof r=="object")r=Object.keys(r).reduce((o,n)=>(o[n]=Ee({value:r[n],modelId:e,modelData:s}),o),{});else if(typeof r=="string"){const o=new RegExp("{PROP_(.+?)}","g");let n=r!=null&&r.includes(sr)?r.replace(sr,e):r;if(s){let i=!1;const a=/^{PROP_.+?}$/.test(n);if(n=n.replace(o,(c,u)=>{if(Object.getOwnPropertyNames(s).includes(u)||Object.getOwnPropertyNames(Object.getPrototypeOf(s)).includes(u)){const h=s[u];return h?(io.debug(`Resolved ${c} to ${h}`),h):(io[a?"debug":"warn"](`Property ${u} is falsy${a?"":" in composite string"}, marking for undefined return`),i=!0,c)}return io[a?"debug":"warn"](`Property ${u} not found in modelData${a?"":" for composite string"}`),c}),i)return}return n}else return r;return r},et=Symbol("ServiceRequestHandlers"),Mi=new WeakMap;function Mf(t){return(e,s,r)=>{var a;e[et]=e[et]||{};const o=r.value,n={...t,handlerMethod:s,originalHandler:o},i=`${((a=t.method)==null?void 0:a.toUpperCase())||"GET"}:${String(t.path)}`;if(e[et][i]=n,!t.lifecycle){const c=function(...u){const d=u[u.length-1],h=async f=>{const p=Mi.get(c);if(!p)throw new Error("Service request metadata not found for method");try{const{default:y}=await Promise.resolve().then(()=>Hc),w=Ee({value:p.path,modelId:this.id,modelData:this}),E={...typeof p.pathParams=="function"?p.pathParams(this):p.pathParams||{},...(f==null?void 0:f.pathParams)||{}},_={...typeof p.queryParams=="function"?p.queryParams(this):p.queryParams||{},...(f==null?void 0:f.queryParams)||{}},k=(f==null?void 0:f.body)||(typeof p.body=="function"?p.body(this):p.body),R={};Object.keys(E).length>0&&(R.path=E),Object.keys(_).length>0&&(R.query=_);const I=(p.method||"get").toLowerCase(),S=y,[H,q]=I==="get"?await S.get(w,R):I==="post"?await S.post(w,R,k):I==="put"?await S.put(w,R,k):I==="delete"?await S.delete(w,R,k):await S.get(w,R);if(H){if(p.errorHandler)switch(p.errorHandler.strategy){case"log":return console.error(`Service request error: ${H}`),p.errorHandler.onError&&p.errorHandler.onError(new Error(H),this),[null,p.errorHandler.defaultValue];case"ignore":return[null,p.errorHandler.defaultValue];case"default":return[null,p.errorHandler.defaultValue];case"throw":default:return[H,null]}return[H,null]}let J=q;return p.transform&&(J=p.transform(q)),[null,J]}catch(y){return[y.message||"Unknown error",null]}};if(un(d))return d.$request=h,o.apply(this,u);{const f={[Fr]:!0,$request:h};return o.apply(this,[...u,f])}};Mi.set(c,n),r.value=c}return r}}function Tf(t){return e=>{const s=(t==null?void 0:t.pathProperty)||"path";return e.prototype[an]={pathProperty:s},e.prototype[F]=e.prototype[F]||{},e.prototype[F].troubleContainer={modelType:"trouble-container-model",id:"trouble-container-model",options:{},lazy:!1},e}}const kt=({modelType:t,id:e,options:s,lifecycle:r})=>(o,n)=>{o[F]=o[F]||{},o[F][n]={modelType:t,id:e,options:s,lifecycle:r||U.INIT}};class mc{constructor(e,s){l(this,"futures");l(this,"defaultContext");l(this,"context");l(this,"disposers",new Map);l(this,"container");this.futures=En.map(new Map),this.context="",this.defaultContext=s||"",this.container=e,M.makeAutoObservable(this)}get allFutures(){return Array.from(this.futures.values())}get future(){return this.futures.get(this.defaultContext)}addFuture(e,s){this.futures.set(s||e.id,e),this.context=s||e.id;const r=W(()=>{var o,n;(e.endState||e.progress)&&((n=(o=this.container)==null?void 0:o.onFutureUpdate)==null||n.call(o,e))});this.disposers.set(s||e.id,r)}removeFuture(e){var s;this.futures.delete(e||this.context),(s=this.disposers.get(e||this.context))==null||s(),this.disposers.delete(e||this.context)}getFuture(e){return this.futures.get(e||this.context)}get futureMap(){return this.futures}}class Ur{constructor(e){l(this,"disposer");l(this,"_future");l(this,"container");l(this,"onFutureUpdate");this._future=void 0,this.container=e,M.makeAutoObservable(this)}removeFuture(){var e;this._future=void 0,(e=this.disposer)==null||e.call(this),this.disposer=void 0}get future(){return this._future}getFuture(){return this._future}addFuture(e){this._future=e;const s=W(()=>{var r,o;(e.endState||e.progress)&&((o=(r=this.container)==null?void 0:r.onFutureUpdate)==null||o.call(r,e))});this.disposer=s}get allFutures(){return this._future?[this._future]:[]}get timeRemaining(){var e;return((e=this._future)==null?void 0:e.timeRemaining)||""}get status(){var e;return((e=this._future)==null?void 0:e.status)||"NOT_RESOLVED"}get progress(){var e;return((e=this._future)==null?void 0:e.progress)||-1}async cancel(){if(this._future)try{await this._future.cancelFuture()}catch(e){throw m.error(e),e}}}const yc=(t,e)=>{const s=e.type;return t[s]||(t[s]=[]),t[s].push(e),t},bc=Symbol("KosObservableData");class vc{constructor(){l(this,"map");l(this,"_revision",1);l(this,"atomMap",new Map);l(this,"proxyHandler",{get:(e,s)=>{var r;return s==="_revision"||e[s]!==void 0?e[s]:this.atomMap.has(s)&&(r=this.atomMap.get(s))!=null&&r.reportObserved()?this.getValue(s):this.getValue(s)},set:(e,s,r)=>{var o;return this.map.has(s),this.setValue(s,r),this.atomMap.has(s)||this.atomMap.set(s,M.createAtom(s.toString())),(o=this.atomMap.get(s))==null||o.reportChanged(),!0},ownKeys:()=>[...Array.from(this.map.keys()),"_revision"]});this.map=M.observable.map(new Map),M.makeObservable(this,{_revision:M.observable})}setValue(e,s){const r=this.map.has(e);this.map.set(e,s),r||M.action(()=>{this._revision++})()}getValue(e){return this.map.get(e)}has(e){return this.map.has(e)}get entries(){return Array.from(this.map.entries())}get keys(){return this._revision,Array.from(this.map.keys())}get values(){return Array.from(this.map.values())}setValues(e){e&&Object.keys(e).forEach(s=>{this.setValue(s,e[s])})}get proxy(){return new Proxy(this,this.proxyHandler)}}vc.prototype[bc]=!0;function _f(t,e){return new Proxy(t,{construct:(s,r)=>{const o=new t(...r);return o.setValues(e),o.proxy}})}const Se=t=>{const e=_f(vc,t);return new e(t)};function Sf(t,e){return t.length!==e.length?!1:t.every(s=>e.includes(s))}class dn{constructor({container:e,key:s}){l(this,"_container");l(this,"_map");l(this,"_key");l(this,"data");this._container=e,this._map=M.observable.map(new Map),this._key=s,this.data=Se(),this.generateIndex(),M.autorun(()=>{this._container.revision&&this.generateIndex()}),M.makeAutoObservable(this)}refresh(){this.generateIndex()}addItemToIndex(e,s,r=this._map,o=this.data){const n=r.get(e)||new Set;n.add(s),r.set(e,n),o[e]=Array.from(n)}resolveIndex(e,s){this.data.keys.filter(o=>!Object.keys(s).includes(o)).forEach(o=>{delete this.data[o],this._map.delete(o)}),Object.keys(s).forEach(o=>{const n=s[o],i=this.data[o]||[];if(Sf(n,i))m.debug(`KosContainerIndex - Index ${o} is the same`);else{this.data[o]=n;const a=e.get(o)||new Set;this._map.set(o,a)}})}generateIndex(){M.runInAction(async()=>{const e=new Map,s={};for(const r of this._container.data){const o=typeof this._key=="function"?await this._key(r):r[this._key];Array.isArray(o)?o.forEach(n=>{this.addItemToIndex(n,r,e,s)}):typeof o=="string"||typeof o=="number"?this.addItemToIndex(String(o),r,e,s):typeof o=="boolean"&&this.addItemToIndex(String(o),r,e,s)}this.resolveIndex(e,s)})}get keys(){return Array.from(this._map.keys())}get index(){return this._map}getByKey(e){const s=this._map.get(e);return s?Array.from(s):[]}}function Of(t,e,s=[]){const r=Object.getOwnPropertyDescriptors(t);return Object.keys(r).filter(i=>M.isComputedProp(t,i)).filter(i=>s.includes(i)).map(i=>M.reaction(()=>t[i],(a,c)=>{e({name:i,newValue:a,oldValue:c})}))}const Vt=m.createLogger({name:"kos-container-model"});class Ce{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"_parentId");l(this,"idx");this._data=M.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1;const s=e!=null&&e.extensionId?$.indexExtension.loadIndexExtensions(e.extensionId):{},r=(e==null?void 0:e.indexMap)||{};this._optionsMap={...r,...s};const o=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((n,i)=>(n[i]=void 0,n),{}):{};this._index=M.observable.map(o),this.idx=Se(),this._parentId=e==null?void 0:e.parentId,M.makeAutoObservable(this),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new dn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get revision(){return this._revision}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){M.runInAction(()=>{this._revision=this._revision+1})}addAll(e){M.runInAction(()=>{e.forEach(s=>this.addModel(s,!0))}),this.increment()}removeAll(e){M.runInAction(()=>{e.forEach(s=>this.removeModel(s,!0)),this.increment()})}addModel(e,s){this._data.set(e.id||"",e),e.id&&this._parentId&&Y.setParentContext(e.id,this._parentId),s||this.increment();const r=this._disposerMap.get(e.id);r&&(r(),this._disposerMap.delete(e.id));const o=Object.entries(this._optionsMap||{}),n=Object.values(this._optionsMap||{}),i=new Map(o.map(([d,h])=>[h,d])),a=d=>{var f,p;n.includes(d.name)&&((f=this.index.get(i.get(d.name)))==null||f.refresh());const h=o.filter(([,y])=>typeof y=="function");for(const[y]of h)(p=this.index.get(y))==null||p.refresh()},c=Of(e,a,n.filter(d=>typeof d=="string")),u=M.observe(e,a);this._disposerMap.set(e.id||"",()=>[u,...c].forEach(d=>d()))}removeModel(e,s){this._data.delete(e),s||this.increment();const r=this._disposerMap.get(e);r&&(r(),this._disposerMap.delete(e))}updateModel(e){this._data.set(e.id||"",e),this.increment()}getModel(e){return this._data.get(e)}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(Vt.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(Vt.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return Vt.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async clear(){this._data.forEach(e=>{const s=e.id;tt(e).then(()=>{Vt.debug(`${s} destroyed, removing from map`),this.removeModel(s,!0)}).catch(r=>Vt.error(r))}),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id,type:s.constructor.name}))}}}const de=async t=>{if(t.id){const e=O.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error(`Model with ID ${t.id} not found`);await(e==null?void 0:e.whenReady())}else throw new Error("Data model must have a valid ID");return t},tt=async t=>{await O.getInstance().whenReady(),await O.getInstance().modelManager.initiateDestroyModel(t)},If=async t=>{if(await O.getInstance().whenReady(),!t.id)throw new Error("Model ID is required");const e=O.getInstance().modelManager.getModelById(t.id);e&&await e.fsm.transitionTo(L.UNLOAD,v.UNLOADED)},$f=async t=>{await O.getInstance().whenReady(),await O.getInstance().modelManager.reloadModel(t),m.debug(`reload model initiated for model ${t.id}, model ready: ${nr(t)} - ${Date.now()} `),await de(t),m.debug(`reload model complete for model ${t.id}, model ready: ${nr(t)} - ${Date.now()} `)},Cf=async t=>{if(await O.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=O.getInstance().modelManager.getModelById(t);return e==null?void 0:e.modelTypeName},wc=async t=>{if(await O.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=O.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Oe=t=>{if(!t)throw new Error("Model ID is required");const e=O.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Ec=(t,e)=>{if(!t)throw new Error("Model type is required");return O.getInstance().modelManager.getModelsByType(t).filter(o=>Object.keys(e).every(n=>o[n]===e[n]))},Df=(t,e)=>Ec(t,e)[0],xf=(t,e)=>{if(!t.id)throw new Error("Model ID is required");const s=O.getInstance().modelManager.getModelById(t.id);if(!s)throw new Error("Model not found");const r=s.companionModels.get(e);return r==null?void 0:r.modelData},Mc=t=>{if(!t.id)throw new Error("Model ID is required");const e=O.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return Array.from(e.companionModels.all()).map(r=>r.modelData)},Af=t=>{if(!t)throw new Error("Model ID is required");const e=O.getInstance().modelManager.getModelById(t);if(!e)throw new Error("Model not found");return e.companionModels.data},To=(t,e)=>{const s=O.getInstance().modelManager.getModelById(t);if(!s){m.info(`Model not found for id ${t}`);return}return Array.from(s.companionModels.all()).find(o=>e(o.modelData))},Te=t=>e=>Object.getPrototypeOf(e).modelTypeId===t,nr=t=>{const e=O.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return e.isReady()},Rf=m.createLogger({name:"kos-model-factory"}),hs={byModelType:t=>O.getInstance().modelManager.getModelFactory(t),getModelInstance:(t,e,s)=>{const r=hs.byModelType(e);if(!r)throw Rf.error(`No registered factory found for model type ${e}. Please register a factory for this model type. `),Error(`No factory found for model type ${e}`);return r.build(t,s)}},ie={Factory:{create:t=>e=>(s,r)=>(r&&Y.setParentContext(e,r),hs.getModelInstance(e,t,s))},Singleton:{create:t=>(e,s)=>(s&&Y.setParentContext(t,s),hs.getModelInstance(t,t,e))},Model:{instance:t=>e=>hs.getModelInstance(e,t)}};window.KosRegistry=window.KosRegistry||{coreModels:new Map,preloadModels:[],companionModels:new Map,models:new Map};const Ti=window.KosRegistry.coreModels,ao=window.KosRegistry.preloadModels,co=window.KosRegistry.companionModels,Bs=window.KosRegistry.models,x={model:{registerLegacyModel:t=>(e,s)=>(Ti.set(e,s),{preload:x.model.preloadModel(t),model:x.model.register(t),companion:x.companion.register(t),legacy:x.model.registerLegacyModel(t),root:t}),preloadModel:t=>e=>(ao.includes(e)||ao.push(e),{preload:x.model.preloadModel(t),model:x.model.register(t),companion:x.companion.register(t),legacy:x.model.registerLegacyModel(t),root:t}),register:t=>(e,s)=>{const r=lo(e)?e.registration():e;return Bs.set(r.type,r),lo(e)&&e.relatedModels.forEach(o=>Bs.set(o.type,o.registration())),O.getInstance().isReady&&(O.getInstance().modelManager.registry.models[r.type]||(console.info(`Model with type ${r.type} doesn't exist. Adding new registration`),O.getInstance().modelManager.registry.models[r.type]=r.registration[r.type],lo(e)&&e.relatedModels.forEach(o=>O.getInstance().modelManager.registry.models[o.type]=o.registration().registration))),s&&x.model.preloadModel(t)(r.type),{preload:x.model.preloadModel(t),model:x.model.register(t),companion:x.companion.register(t),legacy:x.model.registerLegacyModel(t),root:t}},get:t=>Bs.get(t),getAll:()=>Array.from(Bs.entries()),getPreloadModels:()=>ao,getLegacyModels:()=>Array.from(Ti.entries()).reduce((t,[e,s])=>(t[e]=s,t),{})},companion:{register:t=>(e,s)=>{const r=co.get(e)||[];return r.push(s),co.set(e,r),{preload:x.model.preloadModel(t),model:x.model.register(t),companion:x.companion.register(t),legacy:x.model.registerLegacyModel(t),root:t}},getAll:()=>Array.from(co.entries())}},Tc=x.model.registerLegacyModel,_c=x.model.register,Pf=x.companion.register,kf=x.model.preloadModel,hn=t=>typeof t.updateModel=="function",lo=t=>t.registration!==void 0&&typeof t.registration=="function";class Sc{constructor(e){l(this,"singleton");l(this,"type");l(this,"loader");l(this,"class");l(this,"guard");l(this,"factory");l(this,"relatedModels",[]);this.singleton=e.singleton,this.guard=Te(e.type),this.type=e.type,this.loader=`kos.extension.model.loader.${e.type}`,this.factory=e.factory,this.class=e.class}addRelatedModel(e){this.relatedModels.push(e)}registerRelatedModels(){this.relatedModels.forEach(e=>e.register())}register(){x.model.register({})(this.registration()),this.registerRelatedModels()}}class ye extends Sc{constructor(e){super({...e,singleton:!1,factory:ie.Factory.create(e.type)})}instance(e){const s=this.factory(e);return{get:()=>{const r=Oe(e);if(!r)throw new Error("Model not found with id "+e);if(this.guard(r))return r;throw new Error("Model is not of type "+this.type)},forceUpdate:{options:r=>({build:()=>{const o=s(r);if(this.guard(o)){if(hn(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error("Model is not of type "+this.type)}})},options:r=>({build:()=>{const o=s(r);if(this.guard(o))return o;throw new Error("Model is not of type "+this.type)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!1}},factory:this.factory}}}class _e extends Sc{constructor(e){super({...e,singleton:!0,factory:ie.Singleton.create(e.type)})}instance(){const e=this.factory;return{get:()=>{const r=Oe(this.type);if(!r)throw new Error("Model not found with id "+this.type);if(this.guard(r))return r;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(r).modelTypeId}`)},forceUpdate:{options:r=>({build:()=>{const o=e(r);if(this.guard(o)){if(hn(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})},options:r=>({build:()=>{const o=e(r);if(this.guard(o))return o;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!0}},factory:this.factory}}}const _o=m.createLogger({group:"decorators",name:"kos-model"});function Lf(t,e,s){var n;const r=(n=t[ls])==null?void 0:n.parentId;if(!r)return;const o=Ee({value:r,modelData:s,modelId:e});o&&typeof o=="string"&&Y.setParentContext(e,o)}function Ff(t){const e=t[cs];e&&Object.entries(e).forEach(([s,{handler:r}])=>{t[s]=r})}function Nf(t,e){const s=t[F]||{};Object.entries(s).forEach(([r,o])=>{const n=Ee({value:o.id||o.modelType,modelData:t,modelId:e}),i=Object.entries((o==null?void 0:o.options)||{}).reduce((a,[c,u])=>(a[c]=Ee({value:u,modelData:t,modelId:e}),a),{});if(typeof n=="string"){if(!o.lazy){const a=O.getInstance().modelManager.createModelInstance(o.modelType,n,i);t[r]=a.data}O.getInstance().modelManager.addDependency(e,n)}})}function Uf(t){const e=t[on];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new Ur(t);t[r]=o,s==="full"&&(Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0}),Object.defineProperty(t,"progress",{get(){var n;return((n=o.future)==null?void 0:n.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var n;return((n=o.future)==null?void 0:n.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var n;return((n=o.future)==null?void 0:n.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function jf(t){const e=t[nn];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new mc(t);t[r]=o,Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0});const n=t[ds];n instanceof Map&&n.forEach(i=>{const a=`${i}Future`;Object.defineProperty(t,a,{get(){return o.futureMap.get(i)},enumerable:!0,configurable:!0}),s==="full"&&(Object.defineProperty(t,`${i}Progress`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}Status`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsRunning`,{get(){const c=o.futureMap.get(i);return c?!c.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsCancelled`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t[`cancel${i.charAt(0).toUpperCase()}${i.slice(1)}`]=async()=>{const c=o.futureMap.get(i);c&&await c.cancelFuture()})}),s==="full"&&(Object.defineProperty(t,"progress",{get(){var i;return((i=o.future)==null?void 0:i.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var i;return((i=o.future)==null?void 0:i.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var i;return((i=o.future)==null?void 0:i.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Bf(t){const e=t[an];if(!e)return;const{pathProperty:s}=e;Object.defineProperty(t,"troubles",{get(){const r=this[s];if(r==null){const o=`@kosTroubleAware: Path property '${s}' is undefined on model ${this.id||"unknown"}. Returning empty troubles array.`;return this.logger&&typeof this.logger.warn=="function"?this.logger.warn(o):console.warn(o),[]}return this.troubleContainer.troubles.getIndexByKey("byIface",r).sort((o,n)=>n.rank-o.rank)},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troubleStatus",{get(){return""},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troublesByType",{get(){return this.troubles.reduce(yc,{})},enumerable:!0,configurable:!0})}function Kf(t,e){const s=t[ln];if(!s)return;const{containerProperty:r,includeMethods:o,includeGetters:n,modelsProperty:i,containerOptions:a,legacy:c}=s,u={...a,parentId:a.parentId||e},d=new Ce(u);t[r]=d,t[Be]||(t[Be]={}),t[Be][r]=d,o&&(t.getModel=h=>d.getModel(h),t.addModel=h=>{d.addModel(h)},t.removeModel=h=>{d.removeModel(h)}),n&&(Object.defineProperty(t,i,{get(){return d},enumerable:!0,configurable:!0}),Object.defineProperty(t,"data",{get(){return d.data},enumerable:!0,configurable:!0}))}function Hf(t,e){const s=t.constructor.prototype[Et];if(!s)return;const{mode:r,parentProperty:o,excludeProperties:n}=s,i=e[o];if(!i){_o.warn(`Companion decorator configured but no parent model found at '${o}'`);return}if(t.getCompanionParent=()=>i,r==="composition")return;const a=["init","load","unload","ready","dispose","destroy","activate"],c=["getDependencies","getChildren","update","toJSON","forceUpdate","makeAutoObservable","runInAction","transaction","observe","unobserve","intercept","spy","trace","getCompanionParent"],u=p=>{const y=i.constructor.prototype[ee]||{};return Object.values(y).some(w=>{const E=w==null?void 0:w.handler;return E===i[p]||E===i.constructor.prototype[p]})},d=p=>p==="constructor"||p.startsWith("_")||p.startsWith("__")||a.includes(p)||c.includes(p)||n.includes(p)||u(p)||p in t,h=new Set;Object.getOwnPropertyNames(i).filter(p=>!d(p)).forEach(p=>h.add(p));let f=Object.getPrototypeOf(i);for(;f&&f!==Object.prototype;)Object.getOwnPropertyNames(f).filter(p=>!d(p)).forEach(p=>h.add(p)),f=Object.getPrototypeOf(f);for(const p of h)try{const y=i[p];typeof y=="function"?t[p]=(...w)=>y.apply(i,w):Object.defineProperty(t,p,{get:()=>i[p],set:w=>{i[p]=w},enumerable:!0,configurable:!0})}catch(y){_o.debug(`Skipping companion proxy for property ${p}:`,y)}}function qf(t){try{return M.makeAutoObservable(t)}catch(e){return _o.error("Failed to make observable:",e),t}}const zf={construct(t,e){var c;const[s,r={}]=e,o=Y.createContext(s);Lf(t,s,r);const i=!!t.prototype[cn]?null:m.createLogger({name:t.prototype.modelTypeId,group:((c=t[us])==null?void 0:c.group)??"kos-model"}),a=new t(s,r,{logger:i,kosContext:o});return Ff(a),Uf(a),jf(a),Bf(a),Kf(a,s),Hf(a,r),Nf(a,s),qf(a)}};function A(t){return e=>{var n,i;const s=e,r=typeof t=="string"?{modelTypeId:t,autoRegister:!1}:{autoRegister:!1,...t};s.prototype.modelTypeId=r.modelTypeId,s.prototype[rn]=!0,(n=s.prototype)[ee]??(n[ee]={}),(i=s.prototype)[F]??(i[F]={}),m.ifDebug(()=>{m.debug(`Registering model with id ${r.modelTypeId}`)});const o=new Proxy(s,zf);if(r.singleton!==void 0){let a;r.singleton?a=new _e({class:o,type:r.modelTypeId}):a=new ye({class:o,type:r.modelTypeId}),Object.defineProperty(o,"Registration",{value:a,writable:!1,enumerable:!0,configurable:!1}),r.autoRegister&&a.register()}return o}}const Vf=({topic:t,handler:e,websocket:s=!1,condition:r=()=>!0})=>o=>{o[ee]=o[ee]||{},Array.isArray(t)?t.forEach(n=>{o[ee][n]={websocket:s,handler:e,condition:r}}):o[ee][t]={websocket:s,handler:Ha(o,M.action(e),200),condition:r}};function Oc(t,e,s){const r={};if(!t.endsWith("/*"))return r;const o=t.slice(0,-2);if(e.startsWith(o)){const n=e.slice(o.length+1),i=s||"path";r[i]=n}return r}function Ic(t){return t.endsWith("/*")}function B(t){return(e,s,r)=>{const o=Gf(t,r);Qf(e,t.topic,o),t.replay&&Zf(t.topic,t.replay.bufferSize)}}function Gf(t,e){const{condition:s=(S,H)=>!0,transform:r=S=>S,websocket:o=!1,fos:n=!1,bridge:i=!1,skipParse:a=!1,lifecycle:c,destinationAddress:u,debounce:d,throttle:h,buffer:f,filter:p,once:y,wildcardName:w,flow:E,requiresBaseline:_}=t,k=e.value,R=Yf(k,{debounce:d,throttle:h,buffer:f,once:y}),I=Wf(p,s);return{websocket:o,fos:n,bridge:i,handler:R,condition:I,transform:r,lifecycle:c,skipParse:a,destinationAddress:u,wildcardName:w,flow:E,requiresBaseline:_}}function Yf(t,e){var n,i;let s=t;const r=typeof e.debounce=="number"?e.debounce:(n=e.debounce)==null?void 0:n.delay,o=typeof e.throttle=="number"?e.throttle:(i=e.throttle)==null?void 0:i.interval;return r&&r>0?s=Xf(s,e.debounce):o&&o>0?s=sp(s,e.throttle):e.buffer?s=rp(async function(c){for(const u of c)await s.call(this,u)},e.buffer):e.once&&(s=op(s)),s}function Wf(t,e){return t?(s,r,o)=>t(o)?e(s,r,o):!1:e}function Qf(t,e,s){t[ee]=t[ee]||{},Array.isArray(e)?e.forEach(r=>{t[ee][r]=s}):t[ee][e]=s}function Zf(t,e){np(t,e)}function Xf(t,e){const s=typeof e=="number"?e:e.delay;return Jf(e)==="discard"?ep(t,s):tp(t,s)}function Jf(t){return(typeof t=="object"?t.discardIntermediate:!1)?"discard":"accumulate"}function ep(t,e){let s=null;return function(r){s&&clearTimeout(s),s=setTimeout(()=>{t.call(this,r),s=null},e)}}function tp(t,e){let s=null,r=[];return function(o){r.push(o),s&&clearTimeout(s),s=setTimeout(()=>{const n=[...r];r=[],t.call(this,n),s=null},e)}}function sp(t,e){const s=typeof e=="number"?e:e.interval,r=typeof e=="object"?e.discardIntermediate:!1;let o=0,n=null,i=[],a=!1;const c=function(){if(i.length>0){const u=[...i];i=[],t.call(this,u)}};return function(u){const d=Date.now(),h=d-o;r?h>=s?(o=d,t.call(this,u)):n||(n=setTimeout(()=>{o=Date.now(),t.call(this,u),n=null},s-h)):(i.push(u),h>=s?(o=d,c.call(this)):a||(a=!0,n=setTimeout(()=>{o=Date.now(),c.call(this),n=null,a=!1},s-h)))}}function rp(t,e){const s=[];let r=null;const o=e.maxSize||1e3,n=i=>{s.length>0&&(t.call(i,[...s]),s.length=0)};return function(i){if(s.push(i),s.length>=o){r&&(clearTimeout(r),r=null),n(this);return}r||(r=setTimeout(()=>{n(this),r=null},e.time))}}function op(t){let e=!1;return function(s){e||(e=!0,t.call(this,s))}}function np(t,e){(Array.isArray(t)?t:[t]).forEach(r=>{Qo(r,e)})}function $c(t,e){return`${Go}${t}${e?`/${e}`:`/${t}`}`}function Cc(t){return`${Go}${t}`}function uo(t){const e=[];return new Promise((s,r)=>{for(const{condition:o,onMatch:n}of t){const i=M.when(o,()=>{e.forEach(a=>a());try{n==null||n(),s()}catch(a){r(a)}});e.push(i)}})}const Dc=5e3;class ip extends Error{constructor(s,r){super(s);l(this,"model");this.model=r}}const xc=(t,e,s)=>{let r;return{promise:new Promise((i,a)=>{r=setTimeout(()=>{m.error(`Model ${e.modelId} - ${e.modelTypeName} - ${s} timed out after ${t}ms`),a(new ip(`${e.modelId} - ${e.modelTypeName} - ${s}`,e))},t)}),cancel:()=>{r&&clearTimeout(r)}}},Ac=t=>t.fsm.transitionTo(L.GO_ACTIVE,v.ACTIVE),Rc=t=>t.whenReady(),Pc=t=>t.fsm.transitionTo(L.LOAD,v.LOADED),ap=t=>t.fsm.transitionTo(L.UNLOAD,v.UNLOADED),kc=t=>t.fsm.transitionTo(L.INITIALIZE,v.INITIALIZED);var fn=(t=>(t.ACTIVE="active",t.READY="ready",t.LOAD="load",t.UNLOAD="unload",t.INIT="init",t))(fn||{});const Zs={active:Ac,ready:Rc,load:Pc,init:kc},Lc=(t,e)=>{const s=e.id||e.modelType,r=Ee({value:s,modelData:t.modelData,modelId:t.modelId});m.debug(`activating dependent model ${e.modelType} with id ${r}`);const o=Object.keys((e==null?void 0:e.options)||{}).reduce((i,a)=>{const c=e.options[a];return i[a]=Ee({value:c,modelData:t.modelData,modelId:t.modelId}),i},{});return{dependentModel:O.getInstance().modelManager.createModelInstance(e.modelType,r,o),dataModelId:r}},Fc=(t,e=U.READY)=>{var o;const s=((o=t.modelData)==null?void 0:o[F])||{};return Object.keys(s).length===0?(m.debug(`${t.modelId} has no dependencies. Returning`),[]):Object.keys(s).filter(n=>s[n].lifecycle===e).map(n=>{const i=s[n],{dependentModel:a,dataModelId:c}=Lc(t,i);t.modelData[n]=a.data,m.debug(`waiting for dependent model ${i.modelType} with id ${c} - waiting for WHENREADY`);const u=async(f,p,y)=>{var w;await((w=f.whenReady)==null?void 0:w.call(f)),m.debug(`dependent model ${p} with id ${y} - READY`)},{promise:d,cancel:h}=xc(Dc,t,t.status);return Promise.race([u(a.model,i.modelType,c).then(()=>{h()}).catch(f=>{console.error(`Error waiting for dependent model ${i.modelType} with id ${c}:`,f),h()}),d])}).filter(n=>!!n)},Nc=async(t,e,s,r)=>{if(m.debug(`Execute lifecycle with ${e.length} models`),e.length===0){m.debug(`${t.modelId} has no children. Returning`);return}if(!s){m.error(`${t.modelId} is not transitioning with a valid target ${s}`);return}const o=e.map(a=>{let c;return Zs[s]&&a?c=Zs[s](a):(a||m.error("model is undefined. This shouldn't happen"),Zs[s]||m.error(`There is no promise in the Transition Map for ${s}`)),{promise:c,modelId:a==null?void 0:a.modelId,model:a,type:a==null?void 0:a.modelTypeName,status:a==null?void 0:a.status}}).filter(a=>a.promise?a.model?!0:(m.error(`No model found ${a.modelId}`),!1):(m.error(`No promise found ${a.modelId}`),!1)),i=(await Promise.allSettled(o.map(a=>{var d;const{promise:c,cancel:u}=xc(Dc,a.model,a.status);return Promise.race([(d=a.promise)==null?void 0:d.then(()=>{u()}).catch(h=>{m.error(`Model ${a.modelId} - ${a.type} failed to transition to ${s}: ${h.message}`),u()}),c])}))).filter(a=>a.status==="rejected");i.length>0&&m.error(`Model ${t.modelId} had ${i.length} failed child models on ${r}`)},Uc=async(t,e,s)=>{await Nc(t,t.getChildren().filter(r=>!!r),e,s)},Yt=async(t,e)=>{const r=(await Promise.allSettled(Fc(t,e))).filter(o=>o.status==="rejected");r.length&&(m.error(`There were ${r.length} failed dependent models on ${e}`),m.error(r))},cp=t=>typeof t.toJSON=="function",fs=t=>t[F]!==void 0,pn=t=>t.revision!==void 0&&t.index!==void 0,jc=t=>{if(t){if(fs(t))return t;if(pn(t))return t.data;if(t instanceof Map||t instanceof M.ObservableMap||t instanceof Set)return Array.from(t.values()).filter(fs);if(Array.isArray(t))return t.filter(fs)}};function lp(t){const e=`KosModel(${t.modelTypeName}:${t.modelId})`;try{Object.defineProperty(t,Symbol.toStringTag,{value:e,configurable:!0})}catch{t.toString=()=>e}try{Object.defineProperty(t.constructor,"name",{value:`KosModel_${t.modelTypeName}`,configurable:!0})}catch{t.constructor.name=`KosModel_${t.modelTypeName}`}const s=["fsm","effectManager","subscriptionManager","onlineLifecycleManager","companionManager","childResolver","_offlineQueue"];for(const r of s)r in t&&Object.defineProperty(t,r,{enumerable:!1});Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var r,o,n;return{id:t.modelId,type:t.modelTypeName,initialized:t.initialized,loaded:t.loaded,status:t.status,onlineStatus:t.onlineStatus,activeStatus:t.activeStatus,companions:(o=(r=t.companionManager)==null?void 0:r.all())==null?void 0:o.map(i=>i.modelTypeName),children:(n=t.getChildren)==null?void 0:n.call(t).map(i=>i.modelId),effects:!!t.effectManager,subs:!!t.subscriptionManager}}}),up(t.modelData,t.modelTypeName,t.modelId,t)}function up(t,e,s,r){Object.defineProperty(t,Symbol.toStringTag,{value:`KosModelData(${e}:${s})`,configurable:!0});try{Object.defineProperty(t.constructor,"name",{value:`${e}ModelData`,configurable:!0})}catch{t.constructor.name=`${e}ModelData`}Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var a,c,u;const o=((a=r.getChildren)==null?void 0:a.call(r))||[],n=((c=r.companionManager)==null?void 0:c.all())||[],i=r.modelData[F]||{};return{id:s,type:e,companions:{count:n.length,data:n.map(d=>({type:d.modelTypeName,id:d.modelId}))},dependencies:{count:Object.keys(i).length,data:Object.values(i).map(d=>({id:d.id||d.modelType,type:d.modelType,options:d.options,lifecycle:d.lifecycle}))},children:{count:o.length,data:o.map(d=>({id:d.modelId,type:d.modelTypeName}))},data:((u=t.toJSON)==null?void 0:u.call(t))||{},subs:!!r.subscriptionManager}}}),Object.defineProperty(t,"toJSON",{configurable:!0,enumerable:!1,writable:!0,value:()=>{const o={};for(const n of Object.keys(t))if(!(n.startsWith("_")||typeof t[n]=="function"))try{const i=t[n];fs(i)?o[`[KOS Model] ${n}`]=typeof i.toJSON=="function"?i.toJSON():{id:i.id,type:i.constructor.name}:pn(i)?o[`[KOS Container] ${n}`]=typeof i.toJSON=="function"?i.toJSON():["Container"]:Array.isArray(i)?o[n]=`[Array(${i.length})]`:typeof i=="object"&&i!==null?o[n]=JSON.parse(JSON.stringify(i)):o[n]=i}catch{o[n]="[unreadable]"}return o}})}class dp{constructor(e){this.model=e}resolve(){const e=new Set([...this.getResolvedDecoratedChildren(),...this.getAdditionalChildren(),...this.model.companionModels.all()]),s=Array.from(e).map(r=>this.model.modelManager.getModelById(r.id||"")).filter(r=>r&&r.status!==v.FAILED).filter(r=>!!r);return s.forEach(r=>{try{Y.setParentContext(r.modelId,this.model.modelId)}catch(o){console.error(`Failed to set parent context for ${r.modelId} under ${this.model.modelId}`,o)}}),s}getResolvedDecoratedChildren(){var s;const e=((s=this.model.modelData)==null?void 0:s[Be])||{};return Object.keys(e).map(r=>jc(this.model.modelData[r])).filter(r=>!!r).flat()}getAdditionalChildren(){var e,s;return((s=(e=this.model.modelData)==null?void 0:e.getChildren)==null?void 0:s.call(e))||[]}}class hp{constructor(e){l(this,"companions",new M.ObservableMap);this.hostModel=e}add(e){this.companions.set(e.modelTypeName,e)}clear(){this.companions.clear()}get(e){return this.companions.get(e)}all(){return[...this.companions.values()]}get data(){return this.companions}}class fp{constructor(e,s,r,o){l(this,"disposers",[]);this.modelTypeName=e,this.modelId=s,this.modelData=r,this.log=o}setup(){var s;const e=((s=this.modelData)==null?void 0:s[Je])||{};for(const r of Object.keys(e)){const{value:o,dependencies:n,options:i}=e[r],a=o.bind(this.modelData),c=()=>{this.log.info(`Running effect ${r} for ${this.modelTypeName} (${this.modelId})`),M.runInAction(()=>a())},u=n?M.reaction(()=>n(this.modelData),c,{fireImmediately:!!(i!=null&&i.fireImmediately)}):M.autorun(c);this.disposers.push(u)}}disposeAll(){for(const e of this.disposers)try{e()}catch(s){this.log.info(`Failed to dispose effect for ${this.modelId}`,s)}this.disposers=[]}}const pp=m.createLogger({name:"model-active-machine"}),gp=t=>{const e=b.createMachine(v.INACTIVE,{[v.FAILED]:b.state(b.transition(L.GO_ACTIVE,v.ACTIVATING)),[v.INACTIVE]:b.state(b.transition(L.GO_ACTIVE,v.ACTIVATING)),[v.ACTIVATING]:b.invoke(()=>(t.activeStatus=v.ACTIVATING,t.activate()),b.transition("done",v.ACTIVE,b.action(()=>{t.activeStatus=v.ACTIVE})),b.transition("error",v.FAILED,b.action(()=>{t.activeStatus=v.FAILED}))),[v.ACTIVE]:b.state(b.transition(L.GO_INACTIVE,v.DEACTIVATING)),[v.DEACTIVATING]:b.invoke(()=>(t.activeStatus=v.DEACTIVATING,t.deactivate()),b.transition("done",v.INACTIVE,b.action(()=>{t.activeStatus=v.INACTIVE})),b.transition("error",v.FAILED,b.action(()=>{t.activeStatus=v.FAILED})))});return{service:b.interpret(e,r=>pp.debug(r.machine.current)),machine:e}},_i=m.createLogger({name:"model-online-machine"}),mp=t=>{const e=b.createMachine(v.OFFLINE,{[v.ONLINE]:b.state(b.transition(L.GO_OFFLINE,v.OFFLINE,b.action(async()=>{await t.offline(),t.onlineStatus=v.OFFLINE}))),[v.OFFLINE]:b.state(b.transition(L.GO_ONLINE,v.ONLINE,b.action(async()=>{_i.debug(`Going online with model ${t.modelId}`),await t.online(),t.onlineStatus=v.ONLINE,await t.fsm.transitionTo(L.INITIALIZE,v.INITIALIZED)})))}),s=b.interpret(e,r=>_i.debug(r.machine.current));return{machine:e,service:s}},yp=t=>{var r;const e=gp(t).service,s=mp(t).service;return b.createMachine(v.CREATING,{[v.CREATING]:b.state(b.transition(L.CREATE,v.CREATED)),[v.CREATED]:b.state(b.immediate(v.INITIALIZING)),[v.INITIALIZING]:b.invoke(()=>(X(()=>{t.status=v.INITIALIZING}),t.init()),b.transition("done",v.INITIALIZED,b.action(()=>{t.status=v.INITIALIZED})),b.transition("error",v.FAILED,b.action(()=>{m.error(`Model ${t.modelId} - ${t.modelTypeName} failed to initialize. Transitioning to FAILED state.`),t.status=v.FAILED}))),[v.INITIALIZED]:b.state(b.immediate(v.LOADING)),[v.LOADING]:b.invoke(()=>(X(()=>{t.status=v.LOADING}),t.load()),b.transition("done",v.LOADED,b.action(()=>{t.status=v.LOADED})),b.transition("error",v.FAILED,b.action(()=>{t.status=v.FAILED}))),[v.LOADED]:b.state(b.immediate(v.READYING),b.transition(L.UNLOAD,v.UNLOADING)),[v.RESETTING]:b.invoke(()=>{var o;return X(()=>{t.status=v.RESETTING}),(o=t.unload)==null||o.call(t),t.load()},b.transition("done",v.LOADED,b.action(()=>{t.status=v.LOADED}))),[v.READYING]:b.invoke(()=>(X(()=>{t.status=v.READYING}),t.ready()),b.transition("done",v.READY,b.action(()=>{X(()=>{t.status=v.READY}),s.send(L.GO_ONLINE)})),b.transition("error",v.FAILED,b.action(()=>{t.status=v.FAILED}))),[v.READY]:b.state(b.transition(L.UNLOAD,v.UNLOADED,b.action((r=t.unload)==null?void 0:r.bind(t))),b.transition(L.RESET,v.RESETTING),b.transition(L.GO_ONLINE,v.READY,b.action(()=>{s.send(L.GO_ONLINE)})),b.transition(L.GO_OFFLINE,v.READY,b.action(()=>{s.send(L.GO_OFFLINE)})),b.transition(L.GO_ACTIVE,v.READY,b.action(()=>{e.send(L.GO_ACTIVE)})),b.transition(L.GO_INACTIVE,v.READY,b.action(()=>{e.send(L.GO_INACTIVE)}))),[v.UNLOADED]:b.state(),[v.FAILED]:b.state()})},bp=m.createLogger({name:"kos-model-lifecycle"}),vp=t=>({service:b.interpret(yp(t),s=>bp.debug(`state machine for model ${t.modelId}: ${s.machine.current});`))});class wp{constructor(e,s){l(this,"disposer");l(this,"service");this.model=e,this.log=s;const r=vp(e);this.service=r.service,this.service.send(L.CREATE)}get current(){return this.service.machine.current}async transitionTo(e,s,r=v.FAILED){return this.getTransitionStatusFor(s)===s?(this.log.debug(`Model ${this.model.modelId} already in state ${s}, skipping transition`),Promise.resolve()):(this.log.debug(`Transitioning model ${this.model.modelId} with event ${e} toward target ${s}`),new Promise((n,i)=>{var a;(a=this.disposer)==null||a.call(this),this.disposer=M.when(()=>{const c=this.getTransitionStatusFor(s);return c===s||c===r},()=>{this.getTransitionStatusFor(s)===r?(this.log.error(`Model ${this.model.modelId} entered error state ${r} during transition`),i(new Error(`FSM transition failed for model ${this.model.modelId} with event ${e}`))):(this.log.debug(`Model ${this.model.modelId} reached target state ${s}`),n())}),this.service.send(e)}).finally(()=>{var n;(n=this.disposer)==null||n.call(this),this.disposer=void 0}))}getTransitionStatusFor(e){return[v.ACTIVE,v.INACTIVE].includes(e)?this.model.activeStatus:this.model.status}}const Bc="browser-router-model";class gn{constructor(e,s){l(this,"logger");l(this,"model");l(this,"router",null);l(this,"registered",!1);l(this,"registeredRoutes",[]);this.model=e,this.logger=s}registerAll(){var s;if(!or(this.model))return;let e=this.model.__httpBrowserRouter;if(!e)for(const r of Object.keys(this.model)){const o=this.model[r];if(o&&typeof o=="object"&&"use"in o&&typeof o.use=="function"){e=o;break}}if(e||(e=(s=Oe(Bc))==null?void 0:s.model),!e)throw this.logger.error("Cannot register HTTP routes: BrowserRouter not found. The HTTP decorators should have auto-injected it, but something went wrong."),new Error("BrowserRouter is required for HTTP route decorators but was not found. This should not happen as HTTP decorators auto-inject the dependency.");this.setRouter(e)}setRouter(e){this.router=e,this.registered||this.registerRoutes()}hasRoutes(){return or(this.model)}registerRoutes(){if(!this.router){this.logger.warn("Cannot register routes: router not set");return}if(this.registered){this.logger.debug("Routes already registered");return}const e=hc(this.model);e.length!==0&&(this.logger.debug(`Registering ${e.length} HTTP routes`),e.forEach(s=>{this.registerRoute(s)}),this.registered=!0)}resolvePropKey(e){const s=/\{PROP_([^}]+)\}/g;let r=e;if(r.includes("{MODEL_ID}")){const n=this.model.id||this.model._id||"unknown";r=r.replace(/\{MODEL_ID\}/g,n)}let o;for(;(o=s.exec(e))!==null;){const n=o[1];if(n in this.model){const i=this.model[n];r=r.replace(o[0],String(i))}else this.logger.warn(`Property '${n}' not found on model for PropKey resolution in path: ${e}`)}return r}registerRoute(e){if(!this.router)return;const s=this.model[e.handler];if(!s||typeof s!="function"){this.logger.error(`Handler method '${e.handler}' not found on model`);return}const r=this.resolvePropKey(e.path);this.logger.debug(`Registering ${e.method} ${r} -> ${e.handler}`+(r!==e.path?` (resolved from ${e.path})`:""));const o=async(n,i)=>{var a;try{await s.call(this.model,n,i)}catch(c){this.logger.error(`Error in route handler ${e.method} ${r}:`,c),(a=i.status)==null||a.call(i,500).send({error:"Internal server error",message:c instanceof Error?c.message:String(c)})}};this.checkForDuplicateRoute(e.method,r),this.router.use(e.method,r,o),this.registeredRoutes.push({method:e.method,path:r})}checkForDuplicateRoute(e,s){if(!this.router)return;this.router.getRoutes().find(n=>n.method===e&&n.path===s)&&this.logger.warn(`Duplicate route detected: ${e} ${s}. This route is already registered by another model. The new handler from model '${this.model.id||"unknown"}' will override the existing one. Only the last registered handler will receive requests. Consider using different paths or namespacing to avoid conflicts.`)}dispose(){if(this.router&&this.registeredRoutes.length>0){this.logger.debug(`Removing ${this.registeredRoutes.length} HTTP routes for model ${this.model.id||"unknown"}`);let e=0;for(const s of this.registeredRoutes){const r=this.router.remove(s.method,s.path);e+=r,r>0?this.logger.debug(`Removed route: ${s.method} ${s.path}`):this.logger.warn(`Failed to remove route: ${s.method} ${s.path} (not found)`)}this.logger.debug(`Successfully removed ${e} routes from browser router`)}this.registered=!1,this.registeredRoutes=[],this.router=null}getRegisteredRoutes(){return[...this.registeredRoutes]}}function Ep(t,e){if(!or(t))return;const s=Oe(Bc);if(!(s!=null&&s.model))throw e.error("Cannot register HTTP routes: BrowserRouter not found. Make sure to include BrowserRouter in your model dependencies or create an instance."),new Error("BrowserRouter is required for HTTP route decorators but was not found. Add it as a dependency using @kosDependency or ensure an instance exists.");new gn(t,e).setRouter(s.model)}var ue=(t=>(t.IMMEDIATE="immediate",t.SINGLE="single",t.TTL="ttl",t.PERMANENT="permanent",t.MANUAL="manual",t))(ue||{}),Xe=(t=>(t.ALL="all",t.AFTER_REQUEST="after-request",t.AFTER_RESPONSE="after-response",t.NONE="none",t))(Xe||{});class Mp{constructor(e){l(this,"queue",[]);this.log=e}enqueue(e,s,r){this.queue.push({handler:e,receivedAt:Date.now(),topic:s,payload:r})}flush(){if(this.queue.length!==0){this.log.warn(`Processing ${this.queue.length} offline message(s)`);for(const e of this.queue)try{e.handler()}catch(s){this.log.error("Error while processing offline message:",s)}this.queue=[],this.log.info("Offline queue flushed")}}flushWithStrategy(e,s,r){if(this.queue.length===0)return;const o=this.queue.length,n=this.filterEventsByStrategy(e,s,r),i=o-n.length;this.log.warn(`Processing ${n.length}/${o} offline message(s) with strategy: ${e}`);for(const a of n)try{a.handler()}catch(c){this.log.error(`Error while processing offline message for topic ${a.topic}:`,c)}this.queue=[],this.log.info(`Offline queue flushed with strategy ${e}. Replayed: ${n.length}, Discarded: ${i}`)}filterEventsByStrategy(e,s,r){switch(e){case Xe.ALL:return[...this.queue];case Xe.AFTER_REQUEST:return s===void 0?(this.log.warn("AFTER_REQUEST strategy requires baselineRequestedAt, replaying all events"),[...this.queue]):this.queue.filter(o=>o.receivedAt>=s);case Xe.AFTER_RESPONSE:return r===void 0?(this.log.warn("AFTER_RESPONSE strategy requires baselineReceivedAt, replaying all events"),[...this.queue]):this.queue.filter(o=>o.receivedAt>=r);case Xe.NONE:return[];default:return this.log.warn(`Unknown replay strategy: ${e}, replaying all`),[...this.queue]}}getStatistics(e,s){if(this.queue.length===0)return{total:0};const r=this.queue.map(n=>n.receivedAt),o={total:this.queue.length,oldestEventAt:Math.min(...r),newestEventAt:Math.max(...r)};return e!==void 0&&(o.afterRequest=this.queue.filter(n=>n.receivedAt>=e).length),s!==void 0&&(o.afterResponse=this.queue.filter(n=>n.receivedAt>=s).length),o}clear(){this.queue=[]}get length(){return this.queue.length}get isEmpty(){return this.queue.length===0}}class Tp{constructor(e,s){l(this,"unsubscribers",[]);this.model=e,this.log=s}register(){const e=this.model.modelId,s=C("/kosCore/online",async()=>{this.log.debug(`Online event received for ${e}, waiting for readiness...`),await this.model.whenReady(),this.log.debug(`${e} is ready — sending GO_ONLINE`),await this.model.fsm.transitionTo(L.GO_ONLINE,v.ONLINE)}),r=C("/kosCore/offline",async()=>{this.log.debug(`Offline event received for ${e} — sending GO_OFFLINE`),await this.model.fsm.transitionTo(L.GO_OFFLINE,v.OFFLINE)});this.unsubscribers.push(s.unsubscribe),this.unsubscribers.push(r.unsubscribe)}dispose(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[]}}const Kc=()=>({isMock:!1,URL:exports.BASE_URL}),_p=m.createLogger({name:"kos-service-request"}),Sp="errUnknown";async function Ks(t,e,s,r,o){const n=r!=null&&r.path?Object.keys(r.path).reduce((h,f)=>String(h).replace(`{${f}}`,r==null?void 0:r.path[f]),String(t)):String(t),i=r!=null&&r.query?Object.keys(r.query).map(h=>`${h}=${r.query[h]}`).join("&"):"",a=`${Kc().URL}${n}${i?`?${encodeURIComponent(i)}`:""}`;_p.debug(`fullUrl: ${a}`);const c={method:String(e).toUpperCase(),body:null,...s};o&&(c.body=JSON.stringify(o));const u=await exports.kosFetch(a,c);return u.status<200||u.status>=400?[`${u.statusText||Sp}`,null]:[null,(await u.json()).data]}function mn(){return{get:(t,e,s)=>Ks(t,"get",s,e),post:(t,e,s,r)=>Ks(t,"post",r,e,s),put:(t,e,s,r)=>Ks(t,"put",r,e,s),delete:(t,e,s,r)=>Ks(t,"delete",r,e,s)}}const De=mn(),Hc=Object.freeze(Object.defineProperty({__proto__:null,default:De},Symbol.toStringTag,{value:"Module"})),Ye=m.createLogger({name:"kos-service-request-manager",group:"Model"});function Op(t,e){return!t.condition||t.condition(e)}function Ip(t,e){return Ee({value:t.path,modelId:e.id,modelData:e})}function $p(t,e){if(t.pathParams)return Ee({value:typeof t.pathParams=="function"?t.pathParams(e):t.pathParams,modelId:e.id,modelData:e})}function Cp(t,e){if(t.queryParams)return Ee({value:typeof t.queryParams=="function"?t.queryParams(e):t.queryParams,modelId:e.id,modelData:e})}function Dp(t,e){if(t.body)return Ee({value:typeof t.body=="function"?t.body(e):t.body,modelId:e.id,modelData:e})}function xp(t){return(t||"get").toLowerCase()}function Si(t,e){return`${e.toUpperCase()}:${t}`}function qc(t){return t==null}function Ap(t,e,s,r){r&&qc(t)&&Ye.warn(`Required field '${e}' is missing in response for ${s}`)}function Rp(t,e){return qc(t)&&e!==void 0?e:t}class Pp{constructor(e,s){l(this,"model");l(this,"responseStore");l(this,"handlers");this.model=e,this.responseStore=s,this.handlers=new Map,this.discoverHandlers()}discoverHandlers(){const s=Object.getPrototypeOf(this.model)[et]||{};Object.values(s).forEach(r=>{const o=r.lifecycle;this.handlers.has(o)||this.handlers.set(o,[]),this.handlers.get(o).push(r)}),Object.keys(s).length>0&&Ye.debug(`Discovered ${Object.keys(s).length} service request handlers for model ${this.model.id}`)}async executeForLifecycle(e){const s=this.handlers.get(e);!s||s.length===0||(Ye.debug(`Executing ${s.length} service requests for lifecycle ${e}`),await Promise.all(s.map(r=>this.executeHandler(r))))}async executeHandler(e){try{if(!this.shouldProcessRequest(e))return;const s=await this.prepareAndExecuteRequest(e);await this.processAndStoreResponse(s,e)}catch(s){const r=s instanceof Error?s:new Error(String(s));await this.handleError(r,e)}}shouldProcessRequest(e){return Op(e,this.model)?!0:(Ye.debug(`Skipping request ${e.path} - condition returned false`),!1)}async prepareAndExecuteRequest(e){const s=this.prepareRequest(e),r=this.captureRequestTiming(),[o,n]=await this.performRequest(s),i=this.captureResponseTiming();return{requestContext:s,error:o,response:n,requestedAt:r.requestedAt,receivedAt:i.receivedAt}}captureRequestTiming(){return{requestedAt:Date.now()}}captureResponseTiming(){return{receivedAt:Date.now()}}async processAndStoreResponse(e,s){if(e.error){await this.handleError(new Error(e.error),s);return}const r=await this.processResponse(e.response,s);await this.storeAndInvokeHandler(r,s,e.requestContext.resolvedPath,e.requestedAt,e.receivedAt)}prepareRequest(e){const s=Ip(e,this.model),r=$p(e,this.model),o=Cp(e,this.model),n=Dp(e,this.model),i=xp(e.method);return{resolvedPath:s,method:i,pathParams:r,queryParams:o,body:n}}async performRequest(e){return await this.makeRequest(e.resolvedPath,e.method,{path:e.pathParams,query:e.queryParams},e.body)}async processResponse(e,s){let r=e;return s.transform&&(r=s.transform(e)),s.mappings&&s.mappings.length>0&&(r=this.applyMappings(r,s)),s.iterateOver&&(r=await this.handleIteration(r,s)),r}async storeAndInvokeHandler(e,s,r,o,n){const i=s.cache||{retention:ue.SINGLE},a=Si(r,s.method||"get");this.responseStore.set(a,e,i,o,n),await s.originalHandler.call(this.model,e),this.triggerBaselineQueueFlush(r),this.responseStore.shouldCleanupAfterHandler(a)&&this.responseStore.delete(a)}triggerBaselineQueueFlush(e){const s=this.model.subscriptionManager;!s||!s.flushQueueForBaseline||s.flushQueueForBaseline(e)}async makeRequest(e,s,r,o){const n=De;switch(s){case"get":return await n.get(e,r);case"post":return await n.post(e,r,o);case"put":return await n.put(e,r,o);case"delete":return await n.delete(e,r,o);default:return[`Unsupported HTTP method: ${s}`,null]}}applyMappings(e,s){if(!s.mappings||s.mappings.length===0)return e;const r={};return s.mappings.forEach(o=>{const n=this.getNestedValue(e,o.from),i=o.transform?this.applyTransform(n,o.transform):n;Ap(i,o.from,s.path,o.required||!1);const a=Rp(i,o.default);r[o.to]=a}),r}getNestedValue(e,s){return s.split(".").reduce((r,o)=>r==null?void 0:r[o],e)}applyTransform(e,s){if(typeof s=="function")return s(e);switch(s){case"string":return String(e);case"number":return Number(e);case"boolean":return!!e;case"date":return e?new Date(e):void 0;case"json":return typeof e=="string"?JSON.parse(e):e;default:return Ye.warn(`Unknown transformer: ${s}`),e}}async handleIteration(e,s){if(!s.iterateOver)return e;const r=this.getNestedValue(e,s.iterateOver);return Array.isArray(r)?s.modelFactory?r.map(o=>{const n=s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o,i=s.idExtractor?s.idExtractor(n):n.id;if(!i)throw new Error("Cannot create model instance: no ID found in response data. Provide an 'idExtractor' function or ensure response items have an 'id' field.");const a=s.modelFactory;return typeof a=="function"?a(i)(n):a.instance(i).options(n).build()}):r.map(o=>s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o):(Ye.warn(`iterateOver path '${s.iterateOver}' did not resolve to an array`),[])}async handleError(e,s){const r=s.errorHandler||{strategy:"throw"};switch(r.onError&&r.onError(e,this.model),r.strategy){case"throw":throw e;case"log":Ye.error(`Service request failed for ${s.path}:`,e.message);break;case"ignore":break;case"default":if(r.defaultValue!==void 0){const o=Si(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:ue.SINGLE})}break}}}class kp{constructor(e){l(this,"subscription");l(this,"unsubscribe");l(this,"eventType");this.eventType=e,this.subscription={queue:[],resolvers:[],closed:!1};const s=C(e,r=>{if(!this.subscription.closed&&r!==void 0){const o=this.subscription.resolvers.shift();o?o(r):this.subscription.queue.push(r)}});this.unsubscribe=s.unsubscribe}async next(){return this.subscription.closed&&this.subscription.queue.length===0?{done:!0,value:void 0}:this.subscription.queue.length>0?{done:!1,value:this.subscription.queue.shift()}:new Promise(e=>{this.subscription.closed?e({done:!0,value:void 0}):this.subscription.resolvers.push(s=>{e({done:!1,value:s})})})}async return(){return this.subscription.closed=!0,this.unsubscribe(),this.subscription.resolvers.forEach(e=>{e(void 0)}),this.subscription.resolvers=[],{done:!0,value:void 0}}async throw(e){throw this.subscription.closed=!0,this.unsubscribe(),e}[Symbol.asyncIterator](){return this}}function Oi(t){return new kp(t)}var zc=(t=>(t.GET="GET",t.PUT="PUT",t.POST="POST",t.DELETE="DELETE",t))(zc||{});const Vc=({path:t,requestId:e,method:s,destinationAddress:r})=>{let o=`${xr}:${s}
2
2
  `;return o+=`topic:${t}
3
- `,o+=`${kt}:${t}
4
- `,o+=`${Cs}:${e}
5
- `,r&&(o+=`${Ue}:${r}
6
- `),o+=`${Oe}:kos.studio.request
3
+ `,o+=`${Pt}:${t}
4
+ `,o+=`${Ds}:${e}
5
+ `,r&&(o+=`${Ne}:${r}
6
+ `),o+=`${Ie}:kos.studio.request
7
7
  `,o+=`
8
- `,o},Wc=({path:t,requestId:e,method:s,destinationAddress:r,ordered:o,tracker:n})=>{let i=`${da}:/http${t}
8
+ `,o},Gc=({path:t,requestId:e,method:s,destinationAddress:r,ordered:o,tracker:n})=>{let i=`${la}:/http${t}
9
9
  `;return i+=`${xr}:${s}
10
- `,i+=`${kt}:${t}
11
- `,i+=`${ga}:${e}
12
- `,r&&(i+=`${Ue}:${r}
13
- `),o&&(i+=`${Vo}:true
14
- `),n&&(i+=`${Go}:${n}
15
- `),i+=`${Oe}:fos.http.request
10
+ `,i+=`${Pt}:${t}
11
+ `,i+=`${fa}:${e}
12
+ `,r&&(i+=`${Ne}:${r}
13
+ `),o&&(i+=`${zo}:true
14
+ `),n&&(i+=`${Vo}:${n}
15
+ `),i+=`${Ie}:fos.http.request
16
16
  `,i+=`
17
- `,i},Qc=({path:t,requestId:e,method:s,destinationAddress:r,ordered:o,tracker:n,bridge:i,headers:a})=>{let c=`${xr}:${s}
18
- `;return c+=`${kt}:${t}
19
- `,c+=`${Cs}:${e}
20
- `,r&&(c+=`${Ue}:${r}
21
- `),o&&(c+=`${Vo}:true
22
- `),n&&(c+=`${Go}:${n}
17
+ `,i},Yc=({path:t,requestId:e,method:s,destinationAddress:r,ordered:o,tracker:n,bridge:i,headers:a})=>{let c=`${xr}:${s}
18
+ `;return c+=`${Pt}:${t}
19
+ `,c+=`${Ds}:${e}
20
+ `,r&&(c+=`${Ne}:${r}
21
+ `),o&&(c+=`${zo}:true
22
+ `),n&&(c+=`${Vo}:${n}
23
23
  `),a&&Object.keys(a).forEach(u=>{c+=`${u}:${a[u]}
24
- `}),c+=`${Oe}:${i?"fos":"kos"}.http.request
24
+ `}),c+=`${Ie}:${i?"fos":"kos"}.http.request
25
25
  `,c+=`
26
- `,c},qe=(t,e)=>{let s=t;return e&&(s+=e),s};function Yt(t){const e={...t};return{append(s,r){e[s]=r},delete(s){delete e[s]},get(s){return e[s]},forEach(s){Object.keys(e).forEach(r=>s(e[r],r,this))},has(s){return Object.hasOwn(e,s)},set(s,r){e[s]=r},keys(){return Object.keys(e)},values(){return Object.values(e)},entries(){return Object.entries(e)}}}function Wt(t){let e=!1;return window.ReadableStream?new ReadableStream({start(r){function o(){return Promise.resolve({done:e,value:t}).then(({done:n,value:i})=>{if(n){r.close();return}r.enqueue(i),e=!0,o()})}o()}}):t}const Zc=({path:t,requestId:e,destinationAddress:s})=>{let r=`topic:${t}
27
- `;return r+=`${kt}:${t}
28
- `,r+=`${Cs}:${e}
29
- `,r+=`${Ue}:${s}
30
- `,r+=`${Oe}:kos.studio.request
26
+ `,c},ze=(t,e)=>{let s=t;return e&&(s+=e),s};function Wt(t){const e={...t};return{append(s,r){e[s]=r},delete(s){delete e[s]},get(s){return e[s]},forEach(s){Object.keys(e).forEach(r=>s(e[r],r,this))},has(s){return Object.hasOwn(e,s)},set(s,r){e[s]=r},keys(){return Object.keys(e)},values(){return Object.values(e)},entries(){return Object.entries(e)}}}function Qt(t){let e=!1;return window.ReadableStream?new ReadableStream({start(r){function o(){return Promise.resolve({done:e,value:t}).then(({done:n,value:i})=>{if(n){r.close();return}r.enqueue(i),e=!0,o()})}o()}}):t}const Wc=({path:t,requestId:e,destinationAddress:s})=>{let r=`topic:${t}
27
+ `;return r+=`${Pt}:${t}
28
+ `,r+=`${Ds}:${e}
29
+ `,r+=`${Ne}:${s}
30
+ `,r+=`${Ie}:kos.studio.request
31
31
  `,r+=`
32
- `,r},Xc=({requestId:t,destinationAddress:e,requestType:s,headers:r})=>{let o=`${Cs}:${t}
33
- `;return o+=`${Ue}:${e}
34
- `,o+=`${Oe}:${s}
32
+ `,r},Qc=({requestId:t,destinationAddress:e,requestType:s,headers:r})=>{let o=`${Ds}:${t}
33
+ `;return o+=`${Ne}:${e}
34
+ `,o+=`${Ie}:${s}
35
35
  `,r&&Object.keys(r).forEach(n=>{o+=`${n}:${r[n]}
36
36
  `}),o+=`
37
- `,o},xp=(t,e)=>{const s=t,r=qe(Xc(e),typeof s=="string"?s:JSON.stringify(s)),o=I.getInstance().transport.socket;o?(m.debug("Sending message",r),o.socket.send(r)):m.error("socket transport is not initialized")},Jc=({path:t,responseId:e,status:s,destinationAddress:r})=>{let o=`topic:${t}
38
- `;return o+=`${kt}:${t}
39
- `,e&&(o+=`${Dr}:${e}
40
- `),o+=`${zo}:${s}
41
- `,o+=`${Ue}:${r}
42
- `,o+=`${Oe}:kos.studio.response
37
+ `,o},Lp=(t,e)=>{const s=t,r=ze(Qc(e),typeof s=="string"?s:JSON.stringify(s)),o=O.getInstance().transport.socket;o?(m.debug("Sending message",r),o.socket.send(r)):m.error("socket transport is not initialized")},Zc=({path:t,responseId:e,status:s,destinationAddress:r})=>{let o=`topic:${t}
38
+ `;return o+=`${Pt}:${t}
39
+ `,e&&(o+=`${Ar}:${e}
40
+ `),o+=`${qo}:${s}
41
+ `,o+=`${Ne}:${r}
42
+ `,o+=`${Ie}:kos.studio.response
43
43
  `,o+=`
44
- `,o},Dp=(t,e)=>{const s=t,r=qe(Zc(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Ap=(t,e)=>{const s=e.responseId?{status:e.status,data:t}:t,r=qe(Jc(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},el=({topic:t})=>{let e=`topic:${t}
45
- `;return e+=`${Oe}:kos.broker.send
44
+ `,o},Fp=(t,e)=>{const s=t,r=ze(Wc(e),JSON.stringify(s)),o=O.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Np=(t,e)=>{const s=e.responseId?{status:e.status,data:t}:t,r=ze(Zc(e),JSON.stringify(s)),o=O.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Xc=({topic:t})=>{let e=`topic:${t}
45
+ `;return e+=`${Ie}:kos.broker.send
46
46
  `,e+=`
47
- `,e},tl=({responseId:t,destinationAddress:e,type:s,sourceAddress:r,status:o})=>{let n=`${Dr}:${t}
48
- `;return n+=`${Ue}:${e}
49
- `,n+=`${ha}:${r}
50
- `,n+=`${Oe}:${s??"kos.message.request"}
51
- `,n+=`${zo}:${o}
52
- `,n+=`${fa}:application/json
53
- `,n+=`${pa}:no-cache
47
+ `,e},Jc=({responseId:t,destinationAddress:e,type:s,sourceAddress:r,status:o})=>{let n=`${Ar}:${t}
48
+ `;return n+=`${Ne}:${e}
49
+ `,n+=`${ua}:${r}
50
+ `,n+=`${Ie}:${s??"kos.message.request"}
51
+ `,n+=`${qo}:${o}
52
+ `,n+=`${da}:application/json
53
+ `,n+=`${ha}:no-cache
54
54
  `,n+=`
55
- `,n},sl=({topic:t,responseId:e,destinationAddress:s,type:r})=>{let o=`topic:${t}
56
- `;return e&&(o+=`${Dr}:${e}
57
- `),o+=`${Ue}:${s}
58
- `,o+=`${Oe}:${r??"kos.message.request"}
55
+ `,n},el=({topic:t,responseId:e,destinationAddress:s,type:r})=>{let o=`topic:${t}
56
+ `;return e&&(o+=`${Ar}:${e}
57
+ `),o+=`${Ne}:${s}
58
+ `,o+=`${Ie}:${r??"kos.message.request"}
59
59
  `,o+=`
60
- `,o},Pp=({msg:t,options:e})=>{const s=t,r=qe(el(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},rl=({msg:t,options:e})=>{const s=t,r=qe(sl(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},ol=({msg:t,options:e})=>{const s=t,r=qe(tl(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},So=(t,e)=>{try{return e?t.body??t:JSON.parse(t.body)}catch{return t.body||t}};class Rp extends WebSocket{constructor(e){super(e)}}function Ci(t){const e=`
60
+ `,o},Up=({msg:t,options:e})=>{const s=t,r=ze(Xc(e),JSON.stringify(s)),o=O.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},tl=({msg:t,options:e})=>{const s=t,r=ze(el(e),JSON.stringify(s)),o=O.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},sl=({msg:t,options:e})=>{const s=t,r=ze(Jc(e),JSON.stringify(s)),o=O.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},So=(t,e)=>{try{return e?t.body??t:JSON.parse(t.body)}catch{return t.body||t}};class jp{constructor(e){l(this,"config");l(this,"stats");l(this,"filterHistory",[]);l(this,"activePromises",new Set);l(this,"eventQueue",[]);l(this,"rateLimitWindow",new Map);this.config=e,this.stats={eventsReceived:0,batchesProcessed:0,eventsDropped:0,currentQueueSize:0,averageBatchSize:0,processingRate:0,lastProcessedAt:Date.now()}}async*processEvents(e){const s=this.config.batch||{size:1,window:0};if(s.size===1&&!s.window)for await(const r of e)yield*this.processSingleEvent(r);else yield*this.processBatchedEvents(e,s)}async*processSingleEvent(e){if(this.stats.eventsReceived++,!(this.config.filter&&!this.shouldProcessEvent(e))){if(this.config.rateLimit&&!this.checkRateLimit())if(this.config.rateLimit.onExceeded==="drop"){this.stats.eventsDropped++;return}else this.config.rateLimit.onExceeded==="delay"&&await this.waitForRateLimit();if(this.config.backpressure){this.enqueueEvent(e),await this.waitForCapacity();const s=this.dequeueEvent();s&&(yield this.config.transform?this.config.transform([s]):[s],this.updateProcessingStats([s]))}else yield this.config.transform?this.config.transform([e]):[e],this.updateProcessingStats([e])}}async*processBatchedEvents(e,s){const r=s.size||100,o=s.window||1e3;let n=[],i=Date.now();const a=async()=>{if(n.length===0)return;const c=[...n];n=[],i=Date.now();const u=this.config.filter?c.filter(h=>this.shouldProcessEvent(h)):c;if(u.length===0)return;this.config.backpressure&&await this.waitForCapacity();const d=this.config.transform?this.config.transform(u):u;return this.stats.batchesProcessed++,this.updateProcessingStats(u),d};try{for await(const u of e)if(this.stats.eventsReceived++,this.config.backpressure)for(this.enqueueEvent(u);this.eventQueue.length>0;){const d=this.dequeueEvent();d&&n.push(d);const f=Date.now()-i;if(n.length>=r||f>=o){const p=await a();p!==void 0&&(yield p);break}}else{n.push(u);const h=Date.now()-i;if(n.length>=r||h>=o){const f=await a();f!==void 0&&(yield f)}}const c=await a();c!==void 0&&(yield c)}finally{}}shouldProcessEvent(e){if(!this.config.filter)return!0;const s={history:[...this.filterHistory],currentBatch:[],startTime:Date.now()},r=this.config.filter.predicate(e,s);return this.config.filter.historySize&&(this.filterHistory.push(e),this.filterHistory.length>this.config.filter.historySize&&this.filterHistory.shift()),r}checkRateLimit(){if(!this.config.rateLimit)return!0;const e=Date.now(),s=Math.floor(e/this.config.rateLimit.windowMs),r=this.rateLimitWindow.get(s)||0;if(r>=this.config.rateLimit.maxEvents)return!1;this.rateLimitWindow.set(s,r+1);for(const[o]of this.rateLimitWindow)o<s-1&&this.rateLimitWindow.delete(o);return!0}async waitForRateLimit(){if(!this.config.rateLimit)return;const e=Date.now(),o=(Math.floor(e/this.config.rateLimit.windowMs)+1)*this.config.rateLimit.windowMs-e;o>0&&await new Promise(n=>setTimeout(n,o))}async waitForCapacity(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxConcurrent||5,s=this.config.backpressure.maxQueue||1e3;for(;this.activePromises.size>=e;)await Promise.race(this.activePromises);this.eventQueue.length>=s&&this.handleQueueOverflow()}handleQueueOverflow(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxQueue||1e3,s=this.config.backpressure.dropPolicy||"oldest",r=this.config.backpressure.onQueueFull;if(s==="none")return;const o=this.eventQueue.length-e;if(o<=0)return;let n=[];if(s==="oldest"?n=this.eventQueue.splice(0,o):s==="newest"&&(n=this.eventQueue.splice(-o)),this.stats.eventsDropped+=n.length,this.stats.currentQueueSize=this.eventQueue.length,r&&n.length>0)try{r(n)}catch(i){console.warn("Error in onQueueFull callback:",i)}}enqueueEvent(e){if(this.eventQueue.push(e),this.stats.currentQueueSize=this.eventQueue.length,this.config.backpressure){const s=this.config.backpressure.maxQueue||1e3;this.eventQueue.length>s&&this.handleQueueOverflow()}}dequeueEvent(){const e=this.eventQueue.shift();return this.stats.currentQueueSize=this.eventQueue.length,e}updateProcessingStats(e){const s=Date.now(),r=s-this.stats.lastProcessedAt;this.stats.averageBatchSize=(this.stats.averageBatchSize*this.stats.batchesProcessed+e.length)/(this.stats.batchesProcessed+1),this.stats.processingRate=r>0?e.length/(r/1e3):this.stats.processingRate,this.stats.lastProcessedAt=s,this.stats.currentQueueSize=this.eventQueue.length}trackPromise(e){return this.activePromises.add(e),e.finally(()=>this.activePromises.delete(e)),e}getStats(){return{...this.stats}}}class Bp extends WebSocket{constructor(e){super(e)}}function Ii(t){const e=`
61
61
 
62
62
  `,s=`
63
- `,r=/:(.*)/s,[o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}function kp(t){const e=`
63
+ `,r=/:(.*)/s,[o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}function Kp(t){const e=`
64
64
 
65
65
  `,s=`
66
- `,r=/:(.*)/s,[,o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}class yn{constructor({host:e,port:s,protocol:r,alias:o,onConnectionEstablished:n,onConnectionLost:i,Transport:a=Rp}){l(this,"host");l(this,"port");l(this,"protocol");l(this,"socket");l(this,"connectionEstablished");l(this,"alias");l(this,"onConnectionEstablished");l(this,"onConnectionLost");l(this,"offlineMessages",[]);l(this,"oldSend");this.host=e,this.port=s,this.protocol=r,this.onConnectionEstablished=n,this.onConnectionLost=i,this.alias=o,this.socket=new a(`${this.protocol}${this.host}:${this.port}/events`),this.socket.onmessage=this.onMessage.bind(this),this.socket.onopen=this.onOpen.bind(this),this.socket.onclose=this.onClose.bind(this),this.oldSend=this.socket.send,this.connectionEstablished=!1,C("/mock/msg/receive",c=>{var u,d;if(c!=null&&c.body){m.wsReceive(c==null?void 0:c.body);const h={data:c.body};(d=(u=this.socket)==null?void 0:u.onmessage)==null||d.call(u,h)}}),M.makeObservable(this,{connectionEstablished:M.observable})}addOfflineMessage(e){this.offlineMessages.push({msg:e})}processMessageEvent(e){const{data:s}=e;return Ci(s)}onMessage(e){try{m.debug("webSocketTransport: onMessage received");const{headers:s,body:r}=this.processMessageEvent(e);m.wsReceive(e.data);const o=s.subscription||s[this.RESPONSE_ID_HEADER]||s.topic||s.type;if(o){let n=r,i=s;if(o==="kos.sniffer.msg"){const{headers:a,body:c}=kp(e.data);n=c,i={...s,...a}}G(o,n,i)}}catch(s){m.error("onMessage exception",s.message,s.stack)}}onOpen(e){m.info("websocket connection opened"),this.socket=e.currentTarget,M.runInAction(()=>{var s;this.connectionEstablished=!0,this.alias&&this.socket.send(`type:kos.addr.alias
66
+ `,r=/:(.*)/s,[,o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}class yn{constructor({host:e,port:s,protocol:r,alias:o,onConnectionEstablished:n,onConnectionLost:i,Transport:a=Bp}){l(this,"host");l(this,"port");l(this,"protocol");l(this,"socket");l(this,"connectionEstablished");l(this,"alias");l(this,"onConnectionEstablished");l(this,"onConnectionLost");l(this,"offlineMessages",[]);l(this,"oldSend");this.host=e,this.port=s,this.protocol=r,this.onConnectionEstablished=n,this.onConnectionLost=i,this.alias=o,this.socket=new a(`${this.protocol}${this.host}:${this.port}/events`),this.socket.onmessage=this.onMessage.bind(this),this.socket.onopen=this.onOpen.bind(this),this.socket.onclose=this.onClose.bind(this),this.oldSend=this.socket.send,this.connectionEstablished=!1,C("/mock/msg/receive",c=>{var u,d;if(c!=null&&c.body){m.wsReceive(c==null?void 0:c.body);const h={data:c.body};(d=(u=this.socket)==null?void 0:u.onmessage)==null||d.call(u,h)}}),M.makeObservable(this,{connectionEstablished:M.observable})}addOfflineMessage(e){this.offlineMessages.push({msg:e})}processMessageEvent(e){const{data:s}=e;return Ii(s)}onMessage(e){try{m.debug("webSocketTransport: onMessage received");const{headers:s,body:r}=this.processMessageEvent(e);m.wsReceive(e.data);const o=s.subscription||s[this.RESPONSE_ID_HEADER]||s.topic||s.type;if(o){let n=r,i=s;if(o==="kos.sniffer.msg"){const{headers:a,body:c}=Kp(e.data);n=c,i={...s,...a}}V(o,n,i)}}catch(s){m.error("onMessage exception",s.message,s.stack)}}onOpen(e){m.info("websocket connection opened"),this.socket=e.currentTarget,M.runInAction(()=>{var s;this.connectionEstablished=!0,this.alias&&this.socket.send(`type:kos.addr.alias
67
67
  alias:${this.alias}
68
68
 
69
- `),m.debug(`sending ${this.offlineMessages.length} offline FOS messages`),this.offlineMessages.forEach(r=>{var o;m.debug(`sending offline message ${r.msg}`),(o=this.socket)==null||o.send(r.msg)}),this.offlineMessages=[],(s=this.onConnectionEstablished)==null||s.call(this)})}onClose(){this.socket&&this.socket.close(),M.runInAction(()=>{this.connectionEstablished=!1}),m.debug("websocket disconnected. Attempting calling callback"),this.onConnectionLost&&setTimeout(this.onConnectionLost,2500)}send(e){var s,r;if(m.wsSend(e),window.kosLogEvents){const{headers:o,body:n}=Ci(String(e));G(xs.SEND,{headers:o,body:n})}if(window.kosTopicIntercept&&window.kosEnableMocks){const{handler:o,requestId:n}=window.kosTopicIntercept(e);if(o){e=`mocked:true
69
+ `),m.debug(`sending ${this.offlineMessages.length} offline FOS messages`),this.offlineMessages.forEach(r=>{var o;m.debug(`sending offline message ${r.msg}`),(o=this.socket)==null||o.send(r.msg)}),this.offlineMessages=[],(s=this.onConnectionEstablished)==null||s.call(this)})}onClose(){this.socket&&this.socket.close(),M.runInAction(()=>{this.connectionEstablished=!1}),m.debug("websocket disconnected. Attempting calling callback"),this.onConnectionLost&&setTimeout(this.onConnectionLost,2500)}send(e){var s,r;if(m.wsSend(e),window.kosLogEvents){const{headers:o,body:n}=Ii(String(e));V(xs.SEND,{headers:o,body:n})}if(window.kosTopicIntercept&&window.kosEnableMocks){const{handler:o,requestId:n}=window.kosTopicIntercept(e);if(o){e=`mocked:true
70
70
  ${e}`;const a={data:`mocked:true
71
- ${o(n)}`};(r=(s=this.socket)==null?void 0:s.onmessage)==null||r.call(s,a)}else this.oldSend.call(this.socket,e)}else this.oldSend.call(this.socket,e)}}class Lp{constructor(e){l(this,"addEventListener");l(this,"dispatchEvent");l(this,"removeEventListener");l(this,"_onclose");l(this,"_onerror");l(this,"_onmessage");l(this,"_onopen");l(this,"messageQueue",[]);l(this,"isSending",!1);x.debug(`called Bridge Transport with addr ${e}`);const s=this;globalThis.kosWindowWebsocketRecv=r=>{if(s.onmessage){const o={data:r};s.onmessage(o)}},x.debug("Opening bridge transport"),globalThis.kosWindowWebsocketOpen(),x.debug("Opened bridge transport"),this._onclose=null,this._onerror=null,this._onmessage=null,this._onopen=null,this.addEventListener=()=>x.debug("not implemented"),this.dispatchEvent=()=>x.debug("not implemented"),this.removeEventListener=()=>x.debug("not implemented")}close(){x.debug("closing")}sendNextMessage(){if(this.messageQueue.length>0){const e=this.messageQueue.shift();globalThis.kosWindowWebsocketSend(e),setTimeout(()=>this.sendNextMessage(),1)}else this.isSending=!1}enqueueMessage(e){this.messageQueue.push(e),this.isSending||(this.isSending=!0,this.sendNextMessage())}send(e){globalThis.kosWindowWebsocketSend(e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage=e}get onopen(){return this._onopen}set onopen(e){this._onopen=e}get onclose(){return this._onclose}set onclose(e){this._onclose=e}get onerror(){return this._onerror}set onerror(e){this._onopen=e}}class Fp extends yn{constructor({host:s,port:r,alias:o}){super({host:s,port:r,Transport:Lp,alias:o,protocol:"kos://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}class Np extends yn{constructor({host:s,port:r}){super({host:s,port:r,protocol:"ws://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="requestId"}}class Up extends yn{constructor({host:s,port:r,protocol:o,onConnectionEstablished:n,onConnectionLost:i,alias:a}){super({host:s,port:r,onConnectionEstablished:n,onConnectionLost:i,alias:a,protocol:o});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}window.kosEnableMocks=process.env.KOS_MOCK_WS==="true";window.kosLogEvents=process.env.KOS_LOG_WS==="true";class Io{static build({host:e,port:s,protocol:r,fos:o,alias:n,onConnectionEstablished:i,onConnectionLost:a}){return m.debug("initializing websocket connection"),m.warn(`kosWindowWebsocketOpen: ${globalThis.kosWindowWebsocketOpen?"true":"false"}`),m.warn(`fos: ${o?"true":"false"}`),window.kosMockWs||globalThis.kosWindowWebsocketOpen&&!o?(m.warn("Using bridged message transport"),new Fp({host:e,port:s,protocol:r,onConnectionEstablished:i,onConnectionLost:a,alias:n})):o?new Np({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a}):new Up({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a})}}const jp=me();jp.fos&&(window.kosUseFos=!0);const xi=process.env.KOS_FOS_PORT;window.kosUseFos=!!(window.kosUseFos||process.env.KOS_USE_FOS==="true");window.kosFosPort=xi?parseInt(xi):0;const We=x.getLogger("web-socket-transport");var nl=(t=>(t.NOT_INITIALIZED="not_initialized",t.INITIALIZED="initialized",t.OFFLINE="OFFLINE",t.ONLINE="ONLINE",t))(nl||{}),fs=(t=>(t.CONNECTED="websocket.connected",t.DISCONNECTED="websocket.disconnected",t.RELOAD="websocket.reload",t))(fs||{});class Tt{constructor({host:e="localhost",port:s=8080,protocol:r="ws://",token:o,initialize:n,alias:i,fos:a}){l(this,"host");l(this,"port");l(this,"protocol");l(this,"_token");l(this,"webSocketSupported",!!globalThis.WebSocket);l(this,"authorized");l(this,"alias");l(this,"socket");l(this,"fosSocket");l(this,"fosPort");l(this,"useFosTransport");this.host=e,this.port=s,this.protocol=r,this._token=o,this.alias=i,this.authorized=process.env.KOS_ALLOW_ANONYMOUS==="true",this.useFosTransport=!!a,this.fosPort=a==null?void 0:a.port,this.socket=void 0,this.fosSocket=void 0;let c=!1;M.makeObservable(this,{authorized:M.observable,socket:M.observable,fosSocket:M.observable,init:M.action,connectionEstablished:M.computed}),M.reaction(()=>this.connectionEstablished,u=>{u&&(We.warn("Connection Established"),G("websocket.connected","websocket.connected"),c&&G("websocket.reload","websocket.reload"),c=!0)}),n&&this.init()}get connectionEstablished(){return!this.webSocketSupported||!this.socket||this.useFosTransport&&!this.fosSocket?!1:this.useFosTransport&&this.fosSocket?this.socket.connectionEstablished&&this.fosSocket.connectionEstablished:!this.useFosTransport&&this.socket?this.socket.connectionEstablished:!1}init(){var e,s;if(m.warn(`Initializing WebSocketTransport on ${this.host}:${this.port}`),this.useFosTransport&&(this.fosSocket=Io.build({host:this.host,port:this.fosPort||9854,protocol:this.protocol,fos:!0})),this.socket=Io.build({host:this.host,port:this.port,protocol:this.protocol,alias:this.alias,onConnectionLost:()=>{We.error("Connection Lost"),G("websocket.disconnected","websocket.disconnected"),this.init()}}),globalThis.kosWindowWebsocketOpen){const r={currentTarget:this.socket.socket};(s=(e=this.socket.socket)==null?void 0:e.onopen)==null||s.call(e,r)}return this}_sendSubscriptionMessage(e,s,r=!1,o=!1,n){var f,p,y,w;We.debug(`${s} to topic ${e}`);const i=me(),a=i==null?void 0:i.connId,c=n??a??((f=window==null?void 0:window.kosBridge)==null?void 0:f.call(window,"connId"));We.debug(`subscribing with connId ${c}`);const u=c?`dst-addr:${c}
71
+ ${o(n)}`};(r=(s=this.socket)==null?void 0:s.onmessage)==null||r.call(s,a)}else this.oldSend.call(this.socket,e)}else this.oldSend.call(this.socket,e)}}class Hp{constructor(e){l(this,"addEventListener");l(this,"dispatchEvent");l(this,"removeEventListener");l(this,"_onclose");l(this,"_onerror");l(this,"_onmessage");l(this,"_onopen");l(this,"messageQueue",[]);l(this,"isSending",!1);D.debug(`called Bridge Transport with addr ${e}`);const s=this;globalThis.kosWindowWebsocketRecv=r=>{if(s.onmessage){const o={data:r};s.onmessage(o)}},D.debug("Opening bridge transport"),globalThis.kosWindowWebsocketOpen(),D.debug("Opened bridge transport"),this._onclose=null,this._onerror=null,this._onmessage=null,this._onopen=null,this.addEventListener=()=>D.debug("not implemented"),this.dispatchEvent=()=>D.debug("not implemented"),this.removeEventListener=()=>D.debug("not implemented")}close(){D.debug("closing")}sendNextMessage(){if(this.messageQueue.length>0){const e=this.messageQueue.shift();globalThis.kosWindowWebsocketSend(e),setTimeout(()=>this.sendNextMessage(),1)}else this.isSending=!1}enqueueMessage(e){this.messageQueue.push(e),this.isSending||(this.isSending=!0,this.sendNextMessage())}send(e){globalThis.kosWindowWebsocketSend(e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage=e}get onopen(){return this._onopen}set onopen(e){this._onopen=e}get onclose(){return this._onclose}set onclose(e){this._onclose=e}get onerror(){return this._onerror}set onerror(e){this._onopen=e}}class qp extends yn{constructor({host:s,port:r,alias:o}){super({host:s,port:r,Transport:Hp,alias:o,protocol:"kos://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}class zp extends yn{constructor({host:s,port:r}){super({host:s,port:r,protocol:"ws://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="requestId"}}class Vp extends yn{constructor({host:s,port:r,protocol:o,onConnectionEstablished:n,onConnectionLost:i,alias:a}){super({host:s,port:r,onConnectionEstablished:n,onConnectionLost:i,alias:a,protocol:o});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}window.kosEnableMocks=process.env.KOS_MOCK_WS==="true";window.kosLogEvents=process.env.KOS_LOG_WS==="true";class Oo{static build({host:e,port:s,protocol:r,fos:o,alias:n,onConnectionEstablished:i,onConnectionLost:a}){return m.debug("initializing websocket connection"),m.warn(`kosWindowWebsocketOpen: ${globalThis.kosWindowWebsocketOpen?"true":"false"}`),m.warn(`fos: ${o?"true":"false"}`),window.kosMockWs||globalThis.kosWindowWebsocketOpen&&!o?(m.warn("Using bridged message transport"),new qp({host:e,port:s,protocol:r,onConnectionEstablished:i,onConnectionLost:a,alias:n})):o?new zp({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a}):new Vp({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a})}}const Gp=me();Gp.fos&&(window.kosUseFos=!0);const $i=process.env.KOS_FOS_PORT;window.kosUseFos=!!(window.kosUseFos||process.env.KOS_USE_FOS==="true");window.kosFosPort=$i?parseInt($i):0;const Ge=D.getLogger("web-socket-transport");var rl=(t=>(t.NOT_INITIALIZED="not_initialized",t.INITIALIZED="initialized",t.OFFLINE="OFFLINE",t.ONLINE="ONLINE",t))(rl||{}),ps=(t=>(t.CONNECTED="websocket.connected",t.DISCONNECTED="websocket.disconnected",t.RELOAD="websocket.reload",t))(ps||{});class Mt{constructor({host:e="localhost",port:s=8080,protocol:r="ws://",token:o,initialize:n,alias:i,fos:a}){l(this,"host");l(this,"port");l(this,"protocol");l(this,"_token");l(this,"webSocketSupported",!!globalThis.WebSocket);l(this,"authorized");l(this,"alias");l(this,"socket");l(this,"fosSocket");l(this,"fosPort");l(this,"useFosTransport");this.host=e,this.port=s,this.protocol=r,this._token=o,this.alias=i,this.authorized=process.env.KOS_ALLOW_ANONYMOUS==="true",this.useFosTransport=!!a,this.fosPort=a==null?void 0:a.port,this.socket=void 0,this.fosSocket=void 0;let c=!1;M.makeObservable(this,{authorized:M.observable,socket:M.observable,fosSocket:M.observable,init:M.action,connectionEstablished:M.computed}),M.reaction(()=>this.connectionEstablished,u=>{u&&(Ge.warn("Connection Established"),V("websocket.connected","websocket.connected"),c&&V("websocket.reload","websocket.reload"),c=!0)}),n&&this.init()}get connectionEstablished(){return!this.webSocketSupported||!this.socket||this.useFosTransport&&!this.fosSocket?!1:this.useFosTransport&&this.fosSocket?this.socket.connectionEstablished&&this.fosSocket.connectionEstablished:!this.useFosTransport&&this.socket?this.socket.connectionEstablished:!1}init(){var e,s;if(m.warn(`Initializing WebSocketTransport on ${this.host}:${this.port}`),this.useFosTransport&&(this.fosSocket=Oo.build({host:this.host,port:this.fosPort||9854,protocol:this.protocol,fos:!0})),this.socket=Oo.build({host:this.host,port:this.port,protocol:this.protocol,alias:this.alias,onConnectionLost:()=>{Ge.error("Connection Lost"),V("websocket.disconnected","websocket.disconnected"),this.init()}}),globalThis.kosWindowWebsocketOpen){const r={currentTarget:this.socket.socket};(s=(e=this.socket.socket)==null?void 0:e.onopen)==null||s.call(e,r)}return this}_sendSubscriptionMessage(e,s,r=!1,o=!1,n){var f,p,y,w;Ge.debug(`${s} to topic ${e}`);const i=me(),a=i==null?void 0:i.connId,c=n??a??((f=window==null?void 0:window.kosBridge)==null?void 0:f.call(window,"connId"));Ge.debug(`subscribing with connId ${c}`);const u=c?`dst-addr:${c}
72
72
  `:"",d=r?`subscribe:${e}`:o?`type:fos.broker
73
73
  cmd:${s}
74
74
  ${u}topics:${e}
75
75
  `:`${u}type:kos.broker.${s}
76
76
 
77
- ["${e}"]`;if(r?(p=this.fosSocket)==null?void 0:p.connectionEstablished:(y=this.socket)==null?void 0:y.connectionEstablished){const E=r?this.fosSocket:this.socket;(w=E==null?void 0:E.socket)==null||w.send(d)}else{We.debug("no connection adding to offline messages");const E=r?this.fosSocket:this.socket;E==null||E.addOfflineMessage(d)}}subscribeTopic({topic:e,callback:s,fos:r,bridge:o,destinationAddress:n}){const{unsubscribe:i,count:a}=C(e,s);return We.debug(`Topic ${e} currently has ${a} subscribers`),this._sendSubscriptionMessage(e,"subscribe",r,o,n),()=>{const{count:c}=i();We.debug(`Topic ${e} currently has ${c} subscribers`),c===0&&this._sendSubscriptionMessage(e,"unsubscribe",r,o,n)}}async whenReady(){const e=this;return this.webSocketSupported?(await M.when(()=>{var s,r;return!!((s=e.socket)!=null&&s.connectionEstablished)&&(!e.useFosTransport||!!((r=e.fosSocket)!=null&&r.connectionEstablished))&&e.authorized}),{status:"success"}):{status:"not supported"}}get token(){return this._token}set token(e){this._token=e,this.init()}static host(e="localhost"){return this.getInstance().host=e,this}static port(e=8080){return this.getInstance().port=e,this}static alias(e){this.getInstance().alias=e}static getInstance(e=8080,s){if(!this._instance){const r=window.kosUseFos?{port:window.kosFosPort||8081}:void 0;this._instance=new this({port:e,token:s,fos:r})}return this._instance}}l(Tt,"_instance");class Bp{constructor(e){l(this,"config");l(this,"stats");l(this,"filterHistory",[]);l(this,"activePromises",new Set);l(this,"eventQueue",[]);l(this,"rateLimitWindow",new Map);this.config=e,this.stats={eventsReceived:0,batchesProcessed:0,eventsDropped:0,currentQueueSize:0,averageBatchSize:0,processingRate:0,lastProcessedAt:Date.now()}}async*processEvents(e){const s=this.config.batch||{size:1,window:0};if(s.size===1&&!s.window)for await(const r of e)yield*this.processSingleEvent(r);else yield*this.processBatchedEvents(e,s)}async*processSingleEvent(e){if(this.stats.eventsReceived++,!(this.config.filter&&!this.shouldProcessEvent(e))){if(this.config.rateLimit&&!this.checkRateLimit())if(this.config.rateLimit.onExceeded==="drop"){this.stats.eventsDropped++;return}else this.config.rateLimit.onExceeded==="delay"&&await this.waitForRateLimit();if(this.config.backpressure){this.enqueueEvent(e),await this.waitForCapacity();const s=this.dequeueEvent();s&&(yield this.config.transform?this.config.transform([s]):[s],this.updateProcessingStats([s]))}else yield this.config.transform?this.config.transform([e]):[e],this.updateProcessingStats([e])}}async*processBatchedEvents(e,s){const r=s.size||100,o=s.window||1e3;let n=[],i=Date.now();const a=async()=>{if(n.length===0)return;const c=[...n];n=[],i=Date.now();const u=this.config.filter?c.filter(h=>this.shouldProcessEvent(h)):c;if(u.length===0)return;this.config.backpressure&&await this.waitForCapacity();const d=this.config.transform?this.config.transform(u):u;return this.stats.batchesProcessed++,this.updateProcessingStats(u),d};try{for await(const u of e)if(this.stats.eventsReceived++,this.config.backpressure)for(this.enqueueEvent(u);this.eventQueue.length>0;){const d=this.dequeueEvent();d&&n.push(d);const f=Date.now()-i;if(n.length>=r||f>=o){const p=await a();p!==void 0&&(yield p);break}}else{n.push(u);const h=Date.now()-i;if(n.length>=r||h>=o){const f=await a();f!==void 0&&(yield f)}}const c=await a();c!==void 0&&(yield c)}finally{}}shouldProcessEvent(e){if(!this.config.filter)return!0;const s={history:[...this.filterHistory],currentBatch:[],startTime:Date.now()},r=this.config.filter.predicate(e,s);return this.config.filter.historySize&&(this.filterHistory.push(e),this.filterHistory.length>this.config.filter.historySize&&this.filterHistory.shift()),r}checkRateLimit(){if(!this.config.rateLimit)return!0;const e=Date.now(),s=Math.floor(e/this.config.rateLimit.windowMs),r=this.rateLimitWindow.get(s)||0;if(r>=this.config.rateLimit.maxEvents)return!1;this.rateLimitWindow.set(s,r+1);for(const[o]of this.rateLimitWindow)o<s-1&&this.rateLimitWindow.delete(o);return!0}async waitForRateLimit(){if(!this.config.rateLimit)return;const e=Date.now(),o=(Math.floor(e/this.config.rateLimit.windowMs)+1)*this.config.rateLimit.windowMs-e;o>0&&await new Promise(n=>setTimeout(n,o))}async waitForCapacity(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxConcurrent||5,s=this.config.backpressure.maxQueue||1e3;for(;this.activePromises.size>=e;)await Promise.race(this.activePromises);this.eventQueue.length>=s&&this.handleQueueOverflow()}handleQueueOverflow(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxQueue||1e3,s=this.config.backpressure.dropPolicy||"oldest",r=this.config.backpressure.onQueueFull;if(s==="none")return;const o=this.eventQueue.length-e;if(o<=0)return;let n=[];if(s==="oldest"?n=this.eventQueue.splice(0,o):s==="newest"&&(n=this.eventQueue.splice(-o)),this.stats.eventsDropped+=n.length,this.stats.currentQueueSize=this.eventQueue.length,r&&n.length>0)try{r(n)}catch(i){console.warn("Error in onQueueFull callback:",i)}}enqueueEvent(e){if(this.eventQueue.push(e),this.stats.currentQueueSize=this.eventQueue.length,this.config.backpressure){const s=this.config.backpressure.maxQueue||1e3;this.eventQueue.length>s&&this.handleQueueOverflow()}}dequeueEvent(){const e=this.eventQueue.shift();return this.stats.currentQueueSize=this.eventQueue.length,e}updateProcessingStats(e){const s=Date.now(),r=s-this.stats.lastProcessedAt;this.stats.averageBatchSize=(this.stats.averageBatchSize*this.stats.batchesProcessed+e.length)/(this.stats.batchesProcessed+1),this.stats.processingRate=r>0?e.length/(r/1e3):this.stats.processingRate,this.stats.lastProcessedAt=s,this.stats.currentQueueSize=this.eventQueue.length}trackPromise(e){return this.activePromises.add(e),e.finally(()=>this.activePromises.delete(e)),e}getStats(){return{...this.stats}}}class Kp{constructor(e,s,r,o,n){l(this,"disposers",[]);l(this,"activatableDisposers",[]);l(this,"flowControllers",new Map);this.model=e,this.modelData=s,this.modelId=r,this.offlineQueue=o,this.log=n}registerAll(e){var o;const s=((o=this.modelData)==null?void 0:o[ee])||{},r=Object.keys(s);this.log.debug(`Found ${r.length} subscriptions in ${this.modelId} (lifecycle: ${e??"any"})`),r.forEach(n=>{const i=s[n],a=i.lifecycle;if(e&&e!==a)return;const c=this.resolvePropKey(n);if(this.log.debug(`Resolved topic: ${n} → ${c}`),i.flow)this.subscribeWithFlowControl(i,c,a);else{const u=this.createHandler(c,i);this.subscribe(i,c,u,a===j.ACTIVATE)}})}deactivate(){this.log.debug(`Deactivating subscriptions for ${this.modelId}`);for(const e of this.activatableDisposers)try{e()}catch(s){this.log.error("Error during subscription disposal",s)}this.activatableDisposers=[]}disposeAll(){const e=[...this.disposers,...this.activatableDisposers];this.log.debug(`Disposing ${e.length} subscriptions for ${this.modelId}`);for(const[s,r]of this.flowControllers)this.log.debug(`Disposing flow controller for ${s}`);this.flowControllers.clear();for(const s of e)try{s()}catch(r){this.log.error("Error during subscription disposal",r)}this.disposers=[],this.activatableDisposers=[]}subscribe(e,s,r,o){const n=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;if(e.websocket){this.log.debug(`Subscribing to WebSocket topic: ${s}`);const i=Tt.getInstance().subscribeTopic({topic:s,callback:r,fos:e.fos,bridge:e.bridge,destinationAddress:n});this.disposers.push(i)}else{this.log.debug(`Subscribing to EventBus topic: ${s}`);const{unsubscribe:i}=C(s,r);o?this.activatableDisposers.push(i):this.disposers.push(i)}}createHandler(e,s){return async r=>{var o;try{const n=(o=r==null?void 0:r.headers)==null?void 0:o["src-addr"],i=s.destinationAddress&&this.resolvePropKey(s.destinationAddress),a=i?n===i:!0,c=this.extractWildcardCapture(e,r,s);if(this.model.isReady()){const u=So(r,s.skipParse),d=s.transform(u);if(a&&s.condition(d,this.modelData,r))return this.callHandlerWithWildcard(s,d,c,r)}else{this.log.warn(`Model ${this.modelId} not ready. Queuing message for ${e}`);const u=()=>{const d=So(r,s.skipParse),h=s.transform(d);if(a&&s.condition(h,this.modelData,r))return this.callHandlerWithWildcard(s,h,c,r)};this.offlineQueue.enqueue(u)}}catch(n){this.log.error(`Error handling subscription for ${e}`,n)}}}extractWildcardCapture(e,s,r){var n;if(!r.wildcardName||!Cc(e))return null;const o=((n=s==null?void 0:s.headers)==null?void 0:n.topic)||"";return $c(e,o,r.wildcardName)}callHandlerWithWildcard(e,s,r,o){if(r&&Object.keys(r).length>0){const n={...o,wildcardCapture:r};return e.handler.call(this.modelData,s,n,this.modelData)}else return e.handler.call(this.modelData,s,o,this.modelData)}resolvePropKey(e){const s=/.*({PROP_(.+)})/;let r=e.includes("{MODEL_ID}")?e.replace("{MODEL_ID}",this.modelId):e;const o=r.match(s);return o&&o[2]in this.modelData&&(r=r.replace(o[1],this.modelData[o[2]])),r}async subscribeWithFlowControl(e,s,r){this.log.debug(`Setting up flow control for topic: ${s}`);const o=new Bp(e.flow);this.flowControllers.set(s,o);const n=this.createFlowControlHandler(s,e),i=this.startFlowProcessing(e,s,n,o),a=()=>{this.flowControllers.delete(s),i.then(c=>c==null?void 0:c.abort())};r===j.ACTIVATE?this.activatableDisposers.push(a):this.disposers.push(a)}async startFlowProcessing(e,s,r,o){const n=new AbortController;try{let i;if(e.websocket){const a=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;Tt.getInstance().subscribeTopic({topic:s,callback:()=>{},fos:e.fos,bridge:e.bridge,destinationAddress:a}),i=$i(s)}else i=$i(s);return(async()=>{try{for await(const a of o.processEvents(i)){if(n.signal.aborted)break;const c=r(a);c instanceof Promise&&await o.trackPromise(c)}}catch(a){this.log.error(`Flow control error for ${s}:`,a)}})(),n}catch(i){return this.log.error(`Failed to start flow processing for ${s}:`,i),null}}createFlowControlHandler(e,s){return async r=>{var o,n,i,a;try{if(s.condition&&!s.condition(r,this.modelData,r))return;if(this.model.isReady())return s.handler.call(this.modelData,r,r,this.modelData);{this.log.warn(`Model ${this.modelId} not ready. Queuing flow-controlled message for ${e}`);const c=()=>s.handler.call(this.modelData,r,r,this.modelData);this.offlineQueue.enqueue(c)}}catch(c){if(this.log.error(`Error in flow control handler for ${e}:`,c),(n=(o=s.flow)==null?void 0:o.errorHandling)!=null&&n.retry)await this.retryHandler(s,r,c);else if(!((a=(i=s.flow)==null?void 0:i.errorHandling)!=null&&a.continueOnError))throw c}}}async retryHandler(e,s,r){const o=e.flow.errorHandling.retry;let n=r;for(let i=1;i<=o.attempts;i++)try{return this.log.debug(`Retry attempt ${i}/${o.attempts} for handler`),await new Promise(a=>setTimeout(a,o.backoffMs*i)),e.handler.call(this.modelData,s,s,this.modelData)}catch(a){n=a,this.log.warn(`Retry attempt ${i} failed:`,a)}throw this.log.error("All retry attempts failed, throwing last error:",n),n}getFlowControlStats(){const e={};for(const[s,r]of this.flowControllers)e[s]=r.getStats();return e}}function ht(t,e){const s=`[Model:${e}]`;return{debug:(...r)=>t.debug(s,...r),info:(...r)=>t.info(s,...r),warn:(...r)=>t.warn(s,...r),error:(...r)=>t.error(s,...r)}}function Hp(t){return!!(t!=null&&t[et])&&Object.keys(t[et]).length>0}function zp(t){return!!(t!=null&&t[ee])&&Object.keys(t[ee]).length>0}function Vp(t){return!!(t!=null&&t[Re])&&t[Re].length>0}function Gp(t){const e=Object.getPrototypeOf(t);return!!(e!=null&&e[tt])&&Object.keys(e[tt]).length>0}function qp(t){return t.retention===ue.TTL&&t.extendOnRefresh===!0&&t.ttl!==void 0}function Yp(t,e){return t.has(e)}function Wp(t){return!t.expiresAt||Date.now()<t.expiresAt}function Di(t,e,s,r){const o=setTimeout(()=>r(t),e);s.set(t,o)}class Qp{constructor(){l(this,"responses",new Map);l(this,"retentionPolicies",new Map);l(this,"cleanupTimers",new Map)}set(e,s,r={retention:ue.SINGLE}){if(this.shouldExtendTTL(e,r))return this.extendExistingTTL(e,r.ttl),!1;const o=this.createCachedResponse(s,e,r);return this.storeResponse(e,o,r),!0}get(e){const s=this.responses.get(e);if(s){if(s.expiresAt&&Date.now()>s.expiresAt){this.delete(e);return}return s.data}}getByPath(e,s="get"){return this.get(this.makeKey(e,s))}has(e){return this.get(e)!==void 0}delete(e){this.responses.delete(e),this.retentionPolicies.delete(e);const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}clearPath(e){Array.from(this.responses.keys()).filter(r=>this.extractPath(r)===e).forEach(r=>this.delete(r))}clear(){this.cleanupTimers.forEach(e=>clearTimeout(e)),this.responses.clear(),this.retentionPolicies.clear(),this.cleanupTimers.clear()}get size(){return this.responses.size}shouldCleanupAfterHandler(e){const s=this.retentionPolicies.get(e);return(s==null?void 0:s.retention)===ue.IMMEDIATE}shouldExtendTTL(e,s){if(!qp(s)||!Yp(this.responses,e))return!1;const r=this.responses.get(e);return Wp(r)}extendExistingTTL(e,s){const r=this.responses.get(e);r.expiresAt=Date.now()+s,this.resetCleanupTimer(e,s)}resetCleanupTimer(e,s){this.clearTimerIfExists(e),Di(e,s,this.cleanupTimers,r=>this.delete(r))}clearTimerIfExists(e){const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}createCachedResponse(e,s,r){return{data:e,timestamp:Date.now(),path:this.extractPath(s),method:this.extractMethod(s),expiresAt:this.calculateExpiresAt(r)}}calculateExpiresAt(e){return e.retention===ue.TTL&&e.ttl?Date.now()+e.ttl:void 0}storeResponse(e,s,r){this.responses.set(e,s),this.retentionPolicies.set(e,r),this.applyRetentionPolicy(e,r)}applyRetentionPolicy(e,s){switch(s.retention){case ue.IMMEDIATE:break;case ue.TTL:s.ttl&&Di(e,s.ttl,this.cleanupTimers,r=>this.delete(r));break;case ue.SINGLE:break;case ue.PERMANENT:case ue.MANUAL:break}}makeKey(e,s){return`${s.toUpperCase()}:${e}`}extractPath(e){return e.split(":",2)[1]||e}extractMethod(e){return e.split(":",2)[0]||"get"}cleanup(){const e=Date.now();Array.from(this.responses.entries()).filter(([r,o])=>o.expiresAt&&e>o.expiresAt).map(([r])=>r).forEach(r=>this.delete(r))}}class Zp{static createAll(e){const{modelId:s,modelTypeName:r,modelData:o}=e,n=gc.create({modelId:s,modelTypeName:r}),i=new pp(e,ht(n,"fsm")),a=new mp(ht(n,"offline-queue")),c=new ip(e),u=new np(e),d=new Qp;o.serviceResponses=d;const h={fsm:i,offlineQueue:a,serviceResponseStore:d,companionManager:c,childResolver:u};if(Hp(o)&&(h.effectManager=new ap(r,s,o,ht(n,"effect"))),zp(o)){const f=ht(n,"subscription");h.subscriptionManager=new Kp(e,o,s,a,f),h.onlineLifecycleManager=new yp(e,ht(n,"online"))}return Vp(o)&&(h.httpRouteManager=new gn(o,ht(n,"http-routes"))),Gp(o)&&(h.serviceRequestManager=new $p(o,d)),h}}const N=x.getLogger("kos-model"),Xp="kos.extension.model.loader";class il{constructor({modelTypeName:e,id:s,modelData:r}){l(this,"_id");l(this,"_status");l(this,"_activeStatus");l(this,"_onlineStatus");l(this,"modelData");l(this,"modelTypeName");l(this,"initialized");l(this,"loaded");l(this,"offlineQueue");l(this,"subscriptionManager");l(this,"effectManager");l(this,"httpRouteManager");l(this,"onlineLifecycleManager");l(this,"serviceResponses");l(this,"serviceRequestManager");l(this,"companionManager");l(this,"childResolver");l(this,"fsm");this._id=typeof s<"u"?`${s}`:e,this.modelTypeName=e,this.initialized=!1,this.loaded=!1,this.modelData=r,this._status=v.CREATED,this._activeStatus=v.INACTIVE,this._onlineStatus=v.OFFLINE;const o=Zp.createAll(this);this.fsm=o.fsm,this.offlineQueue=o.offlineQueue,this.companionManager=o.companionManager,this.childResolver=o.childResolver,this.serviceResponses=o.serviceResponseStore,o.effectManager&&(this.effectManager=o.effectManager),o.subscriptionManager&&(this.subscriptionManager=o.subscriptionManager),o.httpRouteManager&&(this.httpRouteManager=o.httpRouteManager),o.onlineLifecycleManager&&(this.onlineLifecycleManager=o.onlineLifecycleManager),o.serviceRequestManager&&(this.serviceRequestManager=o.serviceRequestManager),M.makeAutoObservable(this,{fsm:!1,effectManager:!1,subscriptionManager:!1,onlineLifecycleManager:!1,serviceRequestManager:!1,serviceResponses:!1,companionManager:!1,childResolver:!1,offlineQueue:!1}),rp(this)}get companionModels(){return this.companionManager}set status(e){this._status=e}get status(){return this._status}get modelId(){return this._id}get id(){return this._id}get activeStatus(){return this._activeStatus}set activeStatus(e){this._activeStatus=e}get onlineStatus(){return this._onlineStatus}set onlineStatus(e){this._onlineStatus=e}get modelManager(){return globalThis.kos.modelManager}isActive(){return this._status===v.ACTIVE}isOnline(){return this._onlineStatus===v.ONLINE}isReady(){return this._status===v.READY}async deactivate(){var e,s,r;N.debug(`deactivating model ${this.modelTypeName} with id ${this.modelId}`);try{const o=Y.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.deactivate)==null?void 0:s.call(e,o)),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} deactivated`),(r=this.subscriptionManager)==null||r.deactivate()}catch(o){throw N.debug(`Model ${this.modelId} failed to deactivated`),o}}async activate(){var e,s,r,o;N.debug(`activating model ${this.modelTypeName} with id ${this.modelId}`),await qt(this,j.ACTIVATE);try{await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(j.ACTIVATE));const n=Y.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.activate)==null?void 0:r.call(s,n)),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} subscribing to all topics`),(o=this.subscriptionManager)==null||o.registerAll(j.ACTIVATE),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} activated`)}catch(n){throw N.debug(`Model ${this.modelId} failed to activate`),n}}async whenLoaded(){await uo([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.loaded,onMatch:()=>{N.debug(`Model ${this.modelId} is loaded`)}}])}async whenInitialized(){await uo([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.initialized,onMatch:()=>{N.debug(`Model ${this.modelId} is initialized`)}}])}async whenReady(){await uo([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to ready model ${this.modelId}`)}},{condition:()=>this.status===v.READY,onMatch:()=>{N.debug(`Model ${this.modelId} is ready`)}}])}async ready(){var e,s,r,o;if(this.fsm.current===v.READY){N.debug(`already readying model ${this.modelTypeName} with id ${this.modelId} returning`);return}try{N.debug(`readying model ${this.modelTypeName} with id ${this.modelId}`),await qt(this,j.READY),await Bc(this,fn.READY,j.READY),await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(j.READY));const n=Y.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.ready)==null?void 0:r.call(s,n)),this.offlineQueue.flush(),(o=this.subscriptionManager)==null||o.registerAll(j.READY),N.debug(`Model ${this.modelId} is ready`);const i={modelId:this.modelId,modelType:this.modelTypeName};G(xc(this.modelTypeName,this.modelId),i),G(Dc(this.modelTypeName),i)}catch(n){throw N.error(n),Error(n)}}async load(){var o,n,i,a,c,u;const e=this[Mt];e&&await e.whenLoaded();const{modelTypeName:s,modelId:r}=this;if(this.fsm.current===v.LOADED||this.fsm.current===v.LOADING){N.debug(`Model ${s} with id ${r} already loaded or loading`);return}N.debug(`Loading model ${s} with id ${r}`),await qt(this,j.LOAD);try{const d=Y.getContext(r),h=`${Xp}.${s}`,f=await $.loader.executeLoader(h,{});f&&(N.info(`Setting loaded context for ${r}, type: ${s}`),d==null||d.set(h,f)),await((o=this.serviceRequestManager)==null?void 0:o.executeForLifecycle(j.LOAD)),await((i=(n=this.modelData)==null?void 0:n.load)==null?void 0:i.call(n,d)),J(()=>{this.loaded=!0}),N.debug(`Model ${s} with id ${r} successfully loaded`),(a=this.subscriptionManager)==null||a.registerAll(j.LOAD),(c=this.httpRouteManager)==null||c.registerAll(),(u=this.effectManager)==null||u.setup()}catch(d){throw N.error(`Model ${r} failed to load`,d),d}}async unload(){var e,s,r,o,n,i;N.debug(`unloading model ${this.modelTypeName} with id ${this.modelId}`);try{const a=this.getChildren().map(u=>{var d;return(d=u.unload)==null?void 0:d.call(u)}).filter(u=>!!u);await Promise.allSettled(a);const c=Y.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.unload)==null?void 0:s.call(e,c)),this.loaded=!1,(r=this.onlineLifecycleManager)==null||r.dispose(),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} unloaded`),(o=this.effectManager)==null||o.disposeAll(),(n=this.subscriptionManager)==null||n.disposeAll(),(i=this.httpRouteManager)==null||i.dispose()}catch(a){throw N.debug(`Model ${this.modelId} failed to unload`),a}}async init(){var n,i,a,c;const e=this[Mt];e&&await e.whenInitialized();const{modelId:s,modelTypeName:r}=this,o=Y.getContext(s);N.debug(`Initializing model ${r} with id ${s}`),await qt(this,j.INIT);try{await((n=this.serviceRequestManager)==null?void 0:n.executeForLifecycle(j.INIT)),await((a=(i=this.modelData)==null?void 0:i.init)==null?void 0:a.call(i,o)),this.initialized=!0,N.debug(`Model ${r} with id ${s} initialized`),(c=this.onlineLifecycleManager)==null||c.register(),this.registerSubscribers(j.INIT)}catch(u){throw N.error(`Model ${s} failed to initialize`,u),u}}async registerSubscribers(e){var s;N.debug(`registering subscribers in ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.registerAll(e)}async online(){var s,r;N.debug(`online model ${this.modelTypeName} with id ${this.modelId}`),this.registerSubscribers();const e=Y.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.online)==null?void 0:r.call(s,e))}async offline(){var s,r,o;N.debug(`offline model ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.disposeAll();const e=Y.getContext(this.modelId);await((o=(r=this.modelData)==null?void 0:r.offline)==null?void 0:o.call(r,e))}accept(e){e.visit(this)}getChildren(){return this.childResolver.resolve()}addCompanionModel(e){this.companionManager.add(e)}clearCompanionModels(){this.companionManager.clear()}}const al=t=>typeof t=="function",Ai=m.createLogger({name:"kos-model-instantiator"});class Jp{constructor(e,s){this.registry=e,this.cache=s}createModelInstance(e,s,r={}){const o=this.registry.models[e];if(!o)throw new Error(`No model registered for type ${e}`);const n=o.singleton?e:s;if(this.cache.restoreFromDeleteCache(n),!this.cache.hasModel(n)){Ai.debug(`Creating model instance: ${e} [${n}]`);const a=o.create?o.create({modelTypeId:e,id:n,options:r}):new o.class(n,r),c=new il({modelTypeName:e,id:n,modelData:a});this.cache.addModel(c),this._createCompanionModels(c,r)}const i=this.cache.getModelById(n);if(!i)throw Ai.error(`Model ${e} [${n}] not found in cache`),new Error(`Model ${e} [${n}] not found in cache`);return{model:i,data:i.modelData}}_createCompanionModels(e,s){var n;const r=e.modelTypeName,o=((n=this.registry.companionModels)==null?void 0:n[r])||[];for(const{type:i}of o){const a=al(i)?i(e.modelData,s):i;if(!a)continue;const c=`${a}-${e.modelId}`,u=this.createModelInstance(a,c,{data:s,companionParent:e.modelData,kosParentId:e.modelId});u!=null&&u.model&&(u.model[Mt]=e,e.addCompanionModel(u.model))}}}let eg=class{constructor(e){this._registry=e}get registry(){return this._registry}getModelTypeRegistry(e){const s=this.registry.models[e];if(!s)throw new Error(`No registration for model type ${e}`);return s}registerModel(e){const s=e.type;this.registry.models[s]||(this.registry.models={...this.registry.models,...e.registration})}registerCompanionModel(e,s){var r,o;(r=this.registry).companionModels??(r.companionModels={}),(o=this.registry.companionModels)[e]??(o[e]=[]),this.registry.companionModels[e].some(n=>n.type===s)||this.registry.companionModels[e].push({type:s})}getModelSubscriptions(e){var s;return((s=this.getModelTypeRegistry(e))==null?void 0:s.subscriptions)||{}}getDataModelBuilder(e){var r;const s=(r=this.getModelTypeRegistry(e))==null?void 0:r.builder;if(!s)throw new Error(`No builder found for model type ${e}`);return s}getModelFactory(e){return Ft(e)}};const cl=10,Pi=m.createLogger({name:"kos-model-manager"});class ll{constructor(){l(this,"cache");l(this,"instantiator");l(this,"dependencies");l(this,"_registry");globalThis.kos=globalThis.kos||{},this.dependencies=new df,globalThis.kos.modelManager=this,globalThis.kos.resolveKosModel=e=>{const s=this.getModelById(e);if(s)return s.modelData||{}},globalThis.kos.kosModelJson=e=>{var r,o;const s=this.getModelById(e);if(s)return((o=(r=s.modelData).toJSON)==null?void 0:o.call(r))||{}},globalThis.kos.kosModelDebug=e=>{var r;const s=this.getModelById(e);if(s)return((r=s.modelData)==null?void 0:r.debugState)||{}},globalThis.kos.kmd=globalThis.kos.kosModelDebug,globalThis.kos.kmj=globalThis.kos.kosModelJson}static create(e,s){const r=this.getInstance(s);return r._registry=new eg(e),r.cache=new hf(e.preloadModels),r.instantiator=new Jp(e,r.cache),r}static getInstance(e){var s,r;return(!((s=globalThis.kos)!=null&&s.modelManager)||e)&&(Pi.debug("Creating new instance of KosModelManager"),new this),(r=globalThis.kos)==null?void 0:r.modelManager}get registry(){return this._registry.registry}get preloadedModels(){return this.cache.preload(e=>(Pi.debug(`preloading ${e}`),typeof e=="string"?this.createModelInstance(e).model:this.createModelInstance(e.modelType,e.modelId,e.options).model))}get models(){return this.cache.models}getModelById(e){return this.cache.getModelById(e)}addModel(e){return this.cache.addModel(e)}removeModel(e){this.cache.removeModel(e.modelId)}hasModel(e){return this.cache.hasModel(e)}getModelsByType(e,s){return Array.from(this.models).filter(r=>r.modelTypeName===e).filter(r=>s?s(r.modelData):!0).map(r=>r.modelData)}getModelSubscriptions(e){return this._registry.getModelSubscriptions(e)}getDataModelBuilder(e){return this._registry.getDataModelBuilder(e)}getModelFactory(e){return Ft(e)}addDependency(e,s){this.cache.restoreFromDeleteCache(s),this.dependencies.add(e,s)}removeDependency(e,s){this.dependencies.remove(e,s)}async reloadModel(e){if(e.id){const s=this.getModelById(e.id);s&&await s.fsm.transitionTo(L.RESET,v.RESETTING)}}async initiateDestroyModel(e){if(!e.id)throw new Error("Model ID is required");if(!this.dependencies.canDestroy(e.id))return;const s=this.getModelById(e.id);s&&(this.cache.markForDeletion(s),uc.addToDeletionQueue(e.id,setTimeout(()=>this.destroyModel(s),cl)))}async destroyModel(e){var s;e!=null&&e.modelId&&this.dependencies.canDestroy(e.modelId)&&(await((s=e.unload)==null?void 0:s.call(e)),this.removeModel(e))}createModelInstance(e,s,r={}){return this.instantiator.createModelInstance(e,s,r)}registerCompanionModel(e,s){this._registry.registerCompanionModel(e,s)}registerModel(e){this._registry.registerModel(e)}}var Zs=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.RELOADING="reloading",t))(Zs||{}),yt=(t=>(t.CREATE="create",t.INITIALIZE="init",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.UNLOAD="unload",t.RELOAD="reload",t))(yt||{});const tg=t=>{const e=b.createMachine("offline",{online:b.state(b.transition("go_offline","offline",b.action(()=>{t.offline(),M.runInAction(()=>{t.isOnline=!1})}))),offline:b.state(b.transition("go_online","online",b.action(()=>{t.online(),M.runInAction(()=>{t.isOnline=!0})})))}),s=b.interpret(e,n=>x.debug(n.machine.current)),r=b.createMachine({creating:b.state(b.transition("create","created")),created:b.state(b.immediate("initializing")),initializing:b.invoke(()=>t.init(),b.transition("done","initialized")),initialized:b.state(b.immediate("loading")),loading:b.invoke(()=>t.load(),b.transition("done","loaded")),loaded:b.state(b.immediate("readying"),b.transition("unload","unloading")),readying:b.invoke(()=>t.ready(),b.transition("done","ready",b.action(()=>{M.runInAction(()=>{t.status="ready"})}))),reloading:b.invoke(()=>t.reload(),b.transition("done","loading")),ready:b.state(b.transition("reload","reloading"),b.transition("unload","unloaded",b.action(t.unload.bind(t))),b.transition("go_online","ready",b.action(()=>{s.send("go_online")})),b.transition("go_offline","ready",b.action(()=>{s.send("go_offline")}))),unloaded:b.state()});return{service:b.interpret(r,n=>x.debug(n.machine.current)),online:s}},Q=m.createLogger({name:"kos-core"}),sg=()=>{const t=me(),e=t==null?void 0:t.alias,s=process.env.KOS_CONNECTION_ALIAS;return e||s||void 0},rg=()=>{const t=window.location.protocol,e=me(),s=e==null?void 0:e.host;let r;try{r=new URL(s).protocol==="https:"?"wss://":"ws://"}catch{}return r||(t==="https:"?"wss://":"ws://")},og=()=>{const t=window.location.hostname,e=process.env.KOS_HOST,s=me(),r=s==null?void 0:s.host;let o;try{o=new URL(r).hostname}catch{}return o??e??t},ng=()=>{const t=window.location.port,e=process.env.KOS_PORT,s=me(),r=s==null?void 0:s.host;let o;try{o=new URL(r).port}catch{}return o??e??t},ig=(t,e)=>{let s;return{promise:new Promise((n,i)=>{s=setTimeout(()=>{e?m.error(`Model ${e.modelId} - ${e.modelTypeName} preloading - timed out after ${t}ms`):m.error(`KOS Core preloading timed out after ${t}ms`),i(new Error(`Model ${e==null?void 0:e.modelId} - ${e==null?void 0:e.modelTypeName} - timed out after ${t}ms`))},t)}),cancel:()=>{s&&clearTimeout(s)}}},Ri=t=>typeof t.reload=="function",ag=t=>typeof t.unload=="function";var ul=(t=>(t.LOGGED_IN="logged_in",t.LOGGED_OUT="logged_out",t))(ul||{});class I{constructor(e){l(this,"fsmService");l(this,"status");l(this,"initialized");l(this,"loaded");l(this,"_transport");l(this,"modelManager");l(this,"authState");l(this,"isOnline");l(this,"_reloading");l(this,"_unloading");l(this,"connectionAlias");this.initialized=!1,this.connectionAlias=e,this.loaded=!1,this.isOnline=!1,this.status=Zs.CREATED,this.authState="logged_out",this._reloading=!1,this._unloading=!1,M.makeAutoObservable(this),C("token",a=>{a&&(this.transport.token=a.body)}),C(fs.CONNECTED,async()=>{await this.whenReady(),this.fsmService.service.send(yt.GO_ONLINE)}),C(fs.DISCONNECTED,async()=>{this.fsmService.service.send(yt.GO_OFFLINE)}),C("/studioServer/auth/LOGGED_IN",()=>{this.authState="logged_in",this.transport.authorized=!0}),C("/studioServer/auth/LOGIN_REQUIRED",()=>{this.authState="logged_out",this.transport.authorized=!1}),C(fs.RELOAD,()=>{Q.warn("WebSocket requested reload"),this.fsmService.service.send(yt.RELOAD)}),C("/studio/project/reload",()=>{Q.warn("Project requested reload"),this.fsmService.service.send(yt.RELOAD)});const s=Tt.getInstance(),r=og(),o=ng(),n=rg();s.host=r,s.port=Number.parseInt(o),s.protocol=n,process.env.KOS_ALLOW_ANONYMOUS==="true"&&(s.authorized=!0);const i=sg()??e;i&&(s.alias=i.replace("{{TIMESTAMP}}",Date.now().toString())),this._transport=s.init(),this.fsmService=tg(this),this.fsmService.service.send(yt.CREATE)}get onlineStatus(){return this.isOnline&&!this._reloading&&!this._unloading}get reloading(){return this._reloading}get unloading(){return this._unloading}async reload(){var o,n,i,a;const e=Date.now();if(this._reloading){Q.info("reload already in progress");return}this._reloading=!0,Q.warn("reloading KOS Core"),Q.warn("reloading preloaded models");const s=this.modelManager;for(const c of s.preloadedModels)Ri(c.modelData)&&(Q.info(`reloading model ${c.modelId}`),(o=c.unload)==null||o.call(c),await c.modelData.reload(),(n=c.registerSubscribers)==null||n.call(c),Q.info(`reloading model ${c.modelId} complete`));for(const c of s.models)!s.preloadedModels.includes(c)&&Ri(c.modelData)&&((i=c.unload)==null||i.call(c),await c.modelData.reload(),(a=c.registerSubscribers)==null||a.call(c));const r=Date.now()-e;setTimeout(()=>{M.runInAction(()=>{Q.warn("reloading KOS Core complete"),this._reloading=!1})},1e3-r)}async online(){Q.debug("KOS Core going online"),await this._transport.whenReady(),Q.debug("KOS Transport Ready. Calling online() for models"),G("/kosCore/online","/kosCore/online"),console.timeEnd("kosCore:startup")}async offline(){Q.debug("KOS Core going offline"),G("/kosCore/offline","/kosCore/offline")}async unload(){var o;Q.debug("Unloading KOS Core");const e=Date.now();this._unloading=!0,Q.debug("unloading KOS Core");const s=this.modelManager;for(const n of s.models)ag(n.modelData)&&((o=n.unload)==null||o.call(n));const r=Date.now()-e;setTimeout(()=>{M.runInAction(()=>{this._unloading=!1})},1e3-r)}async whenReady(){await M.when(()=>this.status===Zs.READY)}async ready(){Q.debug("Readying KOS Core"),await this._transport.whenReady();const e=this.modelManager.preloadedModels.map(o=>({modelId:o.modelId,model:o,promise:o.whenReady()})),r=(await Promise.allSettled(e.map(o=>{const{promise:n,cancel:i}=ig(5e3,o.model);Promise.race([o.promise.then(()=>{i()}),n])}))).filter(o=>o.status==="rejected");if(r.length)throw Q.error(`There were ${r.length} failed models on model preloading`),Error(`There were ${r.length} failed models on model preloading`);Q.debug("leaving kos-core ready() ")}get isReady(){return this.status===Zs.READY}set transport(e){this._transport=e}get transport(){return this._transport}get coreInitialized(){return this.initialized}get modelsLoaded(){return this.loaded}async init(){Q.debug("entering kos-core init()"),console.time("kosCore:startup"),console.time("kosCore:init"),await this._transport.whenReady(),this.initialized=!0,Q.debug("initialized - leaving kos-core init()"),console.timeEnd("kosCore:init")}async load(){Q.debug("entering kos-core load()"),console.time("kosCore:load"),this.loaded=!0,Q.debug("loaded - leaving kos-core load()"),console.timeEnd("kosCore:load")}static create(e,s,r){var i,a,c;const o=this.getInstance({reset:s,connectionAlias:r});(i=e.extensions)!=null&&i.dataMapper&&Object.keys(e.extensions.dataMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.dataMapper)==null?void 0:f[u];d&&(Array.isArray(d)?d.forEach(p=>{$.dataMapper.registerDataMapper(u,p)}):$.dataMapper.registerDataMapper(u,d))}),(a=e.extensions)!=null&&a.propertyMapper&&Object.keys(e.extensions.propertyMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.propertyMapper)==null?void 0:f[u];d&&$.propertyMapper.registerPropertyMapper(u,d)}),(c=e.extensions)!=null&&c.contextLoader&&Object.keys(e.extensions.contextLoader).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.contextLoader)==null?void 0:f[u];d&&$.loader.registerLoader(u,d)}),D.model.getAll().forEach(([,u])=>{e.models={...e.models,...u.registration}}),e.models={...e.models,...D.model.getLegacyModels()},D.companion.getAll().forEach(([u,d])=>{e.companionModels={...e.companionModels},e.companionModels[u]=e.companionModels[u]||[];for(const h of d)e.companionModels[u].push({type:h})}),D.model.getPreloadModels().forEach(u=>{e.preloadModels.includes(u)||e.preloadModels.push(u)});const n=ll.create(e,s);return o.modelManager=n,o}static getInstance(e){return this._instance=window.KosCore,(!this._instance||e!=null&&e.reset)&&(window.KosCore=new this(e==null?void 0:e.connectionAlias),this._instance=window.KosCore),this._instance}}l(I,"_instance");function Oo(t){const e=new Uint8Array(t);let s="";for(let r=0;r<e.byteLength;r++)s+=String.fromCharCode(e[r]);return btoa(s)}function cg(t){const e=atob(t),s=new Uint8Array(e.length);for(let r=0;r<e.length;r++)s[r]=e.charCodeAt(r);return s.buffer}async function lg(t){return await t.arrayBuffer()}function ug(t,e){return new Blob([t],{type:e})}async function dg(t){const e={},s=[],r=[];t.forEach((o,n)=>{r.push([n,o])});for(const[o,n]of r)if(n instanceof File){const i=await n.arrayBuffer();s.push({name:o,filename:n.name,type:n.type,data:Oo(i)})}else e[o]=n.toString();return{fields:e,files:s}}function hg(t){return new ReadableStream({async start(){},async pull(e){await t(e)},cancel(){}})}async function fg(t){if(!t)return{data:"",contentType:"text/plain"};if(typeof t=="string")return{data:t,contentType:"text/plain"};if(t instanceof ArrayBuffer||t instanceof Uint8Array){let e;return t instanceof Uint8Array?(e=new ArrayBuffer(t.byteLength),new Uint8Array(e).set(t)):e=t,{data:Oo(e),contentType:"application/octet-stream",encoding:"base64"}}if(t instanceof Blob){const e=await lg(t);return{data:Oo(e),contentType:t.type||"application/octet-stream",encoding:"base64"}}if(t instanceof FormData){const e=await dg(t);return{data:JSON.stringify(e),contentType:"multipart/form-data",encoding:"json"}}throw new Error("Unsupported body type")}const Ks=m.createLogger({name:"kos-fetch"}),pg=process.env.KOS_WS_TIMEOUT?parseInt(process.env.KOS_WS_TIMEOUT):3e4,gg=()=>new Promise(t=>{setTimeout(()=>{t(!0)},0)}),mg=t=>t!=null&&t.studio?Yc:t!=null&&t.fos?Wc:Qc,yg=async(t,e)=>{const s=I.getInstance().transport;await s.whenReady();const r=nt(),o=new URL(t),n=`${o.pathname}${o.search}`;Ks.debug(`path: ${n}`);const i=(e==null?void 0:e.timeout)||pg,a=mg(e),c=await fg(e==null?void 0:e.body),u={};c.contentType&&(u["content-type"]=c.contentType),c.encoding&&(u["content-encoding"]=c.encoding);const d=qe(a({path:n,requestId:r,method:(e==null?void 0:e.method)||"GET",destinationAddress:(e==null?void 0:e.destinationAddress)||"",ordered:e==null?void 0:e.ordered,tracker:e==null?void 0:e.tracker,bridge:e==null?void 0:e.bridge,headers:{...e==null?void 0:e.headers,...u}}),c.data);return new Promise(h=>{let f=null,p=null;if(e!=null&&e.signal){if(e.signal.aborted){h({headers:Yt({}),status:0,ok:!1,json:async()=>null,body:Wt(""),redirected:!1,statusText:"Request aborted",type:"basic",url:"",clone:function(){throw new Error("Function not implemented.")},bodyUsed:!1,arrayBuffer:function(){throw new Error("Function not implemented.")},blob:function(){throw new Error("Function not implemented.")},formData:function(){throw new Error("Function not implemented.")},text:function(){throw new Error("Function not implemented.")}});return}e.signal.addEventListener("abort",()=>{p&&clearTimeout(p),f&&f(),h({headers:Yt({}),status:0,ok:!1,json:async()=>null,body:Wt(""),redirected:!1,statusText:"Request aborted",type:"basic",url:"",clone:function(){throw new Error("Function not implemented.")},bodyUsed:!1,arrayBuffer:function(){throw new Error("Function not implemented.")},blob:function(){throw new Error("Function not implemented.")},formData:function(){throw new Error("Function not implemented.")},text:function(){throw new Error("Function not implemented.")}})})}p=setTimeout(()=>{Ks.error(`Timeout occurred - url: ${t}`),f&&f(),h({headers:Yt({}),status:404,ok:!1,json:async()=>null,body:Wt(""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){throw new Error("Function not implemented.")},bodyUsed:!1,arrayBuffer:function(){throw new Error("Function not implemented.")},blob:function(){throw new Error("Function not implemented.")},formData:function(){throw new Error("Function not implemented.")},text:function(){throw new Error("Function not implemented.")}})},i);const y=C(r,E=>{p&&clearTimeout(p);const _=(E==null?void 0:E.headers)||{},k=_["content-type"]||"text/plain",P=_["content-encoding"],O=(E==null?void 0:E.body)||"";let S=O;if(P==="base64"&&O)try{S=cg(O)}catch(U){Ks.error("Failed to decode base64 response",U)}const H={headers:Yt(_),status:_.status&&parseInt(_.status)||200,ok:_.status==="200",json:async()=>{try{if(typeof S=="string")return S.length?JSON.parse(S):null;{const Z=new TextDecoder().decode(S);return Z.length?JSON.parse(Z):null}}catch{throw Error("Not a JSON response")}},text:async()=>typeof S=="string"?S:new TextDecoder().decode(S),arrayBuffer:async()=>S instanceof ArrayBuffer?S:new TextEncoder().encode(S).buffer,blob:async()=>S instanceof ArrayBuffer?ug(S,k):new Blob([S],{type:k}),formData:async()=>{const U=new FormData;if(k==="multipart/form-data"&&typeof S=="string")try{const Z=JSON.parse(S);Z.fields&&Object.entries(Z.fields).forEach(([Be,De])=>{U.append(Be,De)}),Z.files&&Ks.warn("File reconstruction in FormData not fully implemented")}catch{throw new Error("Failed to parse FormData")}return U},body:e!=null&&e.stream?hg(async U=>{if(S instanceof ArrayBuffer)U.enqueue(new Uint8Array(S));else{const Z=new TextEncoder;U.enqueue(Z.encode(S))}U.close()}):Wt(typeof S=="string"?S:""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){return{...this}},bodyUsed:!1};y.unsubscribe(),gg().then(()=>h(H))});f=y.unsubscribe;const w=e!=null&&e.fos?s.fosSocket:s.socket;if(!w)throw Error(`No web socket transport available: ${e}`);w==null||w.send(d)})};exports.BASE_URL="kos:";exports.kosFetch=yg;if(process.env.KOS_MOCK_FETCH==="true"){const t=process.env.KOS_PORT||"9999";exports.kosFetch=fetch,exports.BASE_URL=`http://localhost:${t}`}const bg=m.createLogger({name:"kos-model-visitor",group:"kos-ui-core"});class vg{constructor(){l(this,"visitedModels",new Set);this.visitedModels=new Set}start(e){var r;if(e.id===void 0)throw new Error("rootModel must have an id");const s=I.getInstance().modelManager.getModelById(e.id);if(!s)throw new Error(`Could not find rootModel with id: ${e.id}`);this.visitedModels.clear(),(r=s.accept)==null||r.call(s,this)}visit(e){var r;if(this.visitedModels.has(e.modelId)){bg.info(`model ${e.modelId} already visited`);return}const s=!!this.visitModel(e.modelData,this);this.visitedModels.add(e.modelId),!s&&((r=e.getChildren)==null||r.call(e).forEach(o=>{var n;(n=o.accept)==null||n.call(o,this)}))}}class dl{constructor(){l(this,"middlewares",[])}use(e){this.middlewares.push(e)}async execute(e){let s=0;const r=async()=>{s++,s<this.middlewares.length&&await this.middlewares[s](e,r)};await this.middlewares[s](e,r)}}const wg=async(t,e)=>{const s=new dl;e.forEach(o=>s.use(o));const r={data:t,result:{}};return await s.execute(r),r.result},Ft=t=>({type:t,build:(e,s)=>I.getInstance().modelManager.createModelInstance(t,e,s).data,buildAsync:async(e,s)=>{const r=I.getInstance().modelManager.createModelInstance(t,e,s);return await r.model.whenInitialized(),r.data}}),Eg=t=>{I.getInstance().modelManager.registerModel(t)},Mg=(t,e)=>{I.getInstance().modelManager.registerCompanionModel(t,e)},ki="/kos/ui/internal/heartbeat/",Tg=({relationshipId:t,destinationAddress:e,onAbort:s,waitTime:r,beatTime:o})=>{const n=I.getInstance().transport,i=new AbortController;let a=performance.now();const c=n.subscribeTopic({topic:`${ki}${t}`,callback:()=>{a=performance.now()}}),u=r??3e3,d=window.setInterval(()=>{let w=performance.now()-a;w=w/1e3,w>u/1e3&&i.abort()},u),h=o??2e3,f=window.setInterval(()=>{rl({msg:{},options:{topic:`${ki}${t}`,destinationAddress:e}})},h),p=()=>{window.clearInterval(f),window.clearInterval(d),c()},y=()=>{p(),s&&s(),i.signal.removeEventListener("abort",y)};return i.signal.addEventListener("abort",y),{cleanUpHeartbeat:p}},hl=(...t)=>e=>t.reduce((s,r)=>r(s),e),_g={maxAttempts:5,baseDelayMs:100,backoffFactor:1.5};async function Sg(t,e){let s=1;const r={..._g,...e},{maxAttempts:o,baseDelayMs:n,backoffFactor:i}=r;let a=n;for(;s<=o;)try{return await t()}catch(c){if(m.error(`Attempt ${s} failed: ${c}`),s<o)a=n*Math.pow(i,s),await new Promise(u=>setTimeout(u,a)),s++;else throw c}throw new Error("All attempts failed")}const Ig=m.createLogger({name:"kos-service-request"}),ae=t=>({isMock:!1,URL:exports.BASE_URL}),Og=(t,e,s)=>async({id:r,tracker:o,urlOverride:n,ordered:i,studio:a,fos:c,bridge:u,destinationAddress:d})=>{const h={method:"DELETE"};t&&(h.destinationAddress=t),o&&(h.tracker=o),Nt(h,{ordered:i,studio:a,fos:c,bridge:u,destinationAddress:d});const f=await s(n||`${e}/${r}`,h);if(!f.ok)throw Error(`There was a problem deleting the model; returned status ${f.status}`);return await f.json()},Nt=(t,{ordered:e,studio:s,fos:r,destinationAddress:o,bridge:n,timeout:i})=>(i&&(t.timeout=i),e&&(t.ordered=e),s&&(t.studio=s),r&&(t.fos=r),n&&(t.bridge=n),(o||o==="")&&(t.destinationAddress=o),t),$g=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,timeout:c,destinationAddress:u})=>{const d={method:"GET"};t&&(d.destinationAddress=t),Nt(d,{timeout:c,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:u});const f=await s(r||e,d);if(!f.ok){let y;try{y=await f.json()}catch{}throw new ge(`There was a problem retrieving the model; returned status ${f.status}`,y)}return await f.json()},Cg=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,tracker:c,timeout:u,destinationAddress:d})=>{const h={method:"GET"};t&&(h.destinationAddress=t),c&&(h.tracker=c),Nt(h,{timeout:u,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:d});const f=r||e;Ig.debug(`resolvedUrl: ${f}`);const p=await s(f,h);if(!p.ok){let w;try{w=await p.json()}catch{}throw new ge(`There was a problem retrieving the model; returned status ${p.status}`,w)}return await p.json()},xg=(t,e,s)=>async({urlOverride:r,id:o,ordered:n,studio:i,fos:a,bridge:c,timeout:u,destinationAddress:d})=>{const h={method:"GET"};t&&(h.destinationAddress=t),Nt(h,{timeout:u,ordered:n,studio:i,fos:a,bridge:c,destinationAddress:d});const f=r||`${e}/${o}`,p=await s(f,h);if(!p.ok){let w;try{w=await p.json()}catch{}throw new ge(`There was a problem retrieving the model; returned status ${p.status}`,w)}return await p.json()};class ge extends Error{constructor(s,r){super(s);l(this,"payload");this.name="FetchException",this.payload=r}}const Li=(t,e,s)=>async({model:r,urlOverride:o,ordered:n,tracker:i,studio:a,fos:c,bridge:u,timeout:d,destinationAddress:h})=>{const f={method:"POST",body:typeof r=="string"?r:JSON.stringify(r)};t&&(f.destinationAddress=t),i&&(f.tracker=i),Nt(f,{timeout:d,ordered:n,studio:a,fos:c,bridge:u,destinationAddress:h});const p=await s(o||e,f);if(!p.ok){let w;try{w=await p.json()}catch{}throw new ge(`There was a problem sending the POST data; returned status ${p.status}`,w)}return await p.json()},Fi=(t="POST",e,s,r)=>async({model:o,id:n,urlOverride:i,ordered:a,studio:c,fos:u,bridge:d,timeout:h,destinationAddress:f})=>{const p={method:t};o&&(p.body=JSON.stringify(o)),e&&(p.destinationAddress=e),Nt(p,{timeout:h,ordered:a,studio:c,fos:u,bridge:d,destinationAddress:f});const y=await r(i||`${s}/${n}`,p);if(!y.ok){let E;try{E=await y.json()}catch{}throw new ge(`There was a problem modifying the model; returned status ${y.status}`,E)}return await y.json()},oe={build:({destinationAddress:t="",basePath:e,getAllPath:s,getOnePath:r,deleteModelPath:o,addModelPath:n,modifyModelPath:i,mock:a=!1})=>{const c=a?fetch:exports.kosFetch;return{getAll:$g(t,s||e,c),getModelById:xg(t,r||e,c),getOne:Cg(t,r||e,c),addModel:Li(t,n||e,c),deleteModel:Og(t,o||e,c),modifyModel:Fi("POST",t,i||e,c),putModel:Fi("PUT",t,i||e,c),postModel:Li(t,n||e,c)}}};function Dg(t,e,s="get"){const r=t.serviceResponses;if(r)return r.getByPath(e,s)}function Ag(t,e,s="get"){const r=t.serviceResponses;return r?r.has(`${s.toUpperCase()}:${e}`):!1}function Pg(t,e,s="get"){const r=t.serviceResponses;r&&r.delete(`${s.toUpperCase()}:${e}`)}function Rg(t,e){const s=t.serviceResponses;s&&s.clearPath(e)}function kg(t){const e=t.serviceResponses;e&&e.clear()}const Lg=nt(),fl=()=>`kos-${Lg}`,Fg=t=>!!t&&!t.includes("VM_SERVICE")&&t.startsWith(fl()),bn=async(t,e=6e4)=>new Promise((s,r)=>{const{unsubscribe:o}=C(t,i=>{x.debug(`recieved response for refId ${t}: ${i}`),o(),clearTimeout(n);try{const a=i!=null&&i.body?JSON.parse(i.body):{};s(a)}catch{const a=(i==null?void 0:i.body)||{};s(a)}}),n=setTimeout(()=>{o(),r(Error(`Request with ID ${t} timed out. Cancelling.`))},e)}),Ng=async(t,e,s)=>{const r=bn(s),o=await Promise.allSettled([t(e),r]);if(o[0].status==="fulfilled"){if(o[1].status==="rejected")throw Error(o[1].reason);if(o[0].value){if(o[1].value.error)throw Error(o[1].value.error);return o[0].value.data=o[1].value,o[0].value}}else throw Error(o[0].reason)},Ug=async({topic:t,msg:e,requestId:s})=>{const r=s??nt(),o=bn(r);G(t,e,{sync:r});const n=await o;if(n.error)throw Error(n.error);return n},he=new Map;class pl{constructor(e){l(this,"_context");l(this,"_parent");l(this,"_id");this._id=e,this._context=new M.ObservableMap({}),this._parent="",M.makeAutoObservable(this)}setParent(e){J(()=>{this._parent=e})}get id(){return this._id}get context(){return this._context}get parentModel(){var e;if(this._parent)return(e=Ie(this._parent))==null?void 0:e.model}get companionModels(){const e=Ie(this._id);return e!=null&&e.model?_c(e.model):[]}get(e){var s,r;if(this._context.has(e))return this._context.get(e);if(this.companionModels.length>0){const o=this.companionModels.find(n=>{var i;return!n.id||!he.has(n.id)?!1:(i=he.get(n.id))==null?void 0:i.context.has(e)});if(o)return(s=he.get(o.id))==null?void 0:s.get(e)}if(this._parent)return(r=he.get(this._parent))==null?void 0:r.get(e)}set(e,s){this._context.set(e,s)}remove(e){this._context.delete(e)}clear(){this._context.clear()}}const Y={createContext:(t,e)=>{const s=he.get(t)??new pl(t);if(e){if(!he.has(e))throw new Error(`Parent context ${e} does not exist`);s.setParent(e)}else t!=="root"&&s.setParent("root");return he.set(t,s),s},getContext:t=>he.get(t),deleteContext:t=>{he.delete(t)},setParentContext:(t,e)=>{var s;if(!he.has(e))throw new Error(`Parent context ${e} does not exist`);(s=he.get(t))==null||s.setParent(e)},rootContext:()=>he.get("root")};Y.createContext("root");const jg=t=>Y.getContext(t.id),ho=m.createLogger({name:"kos-data-container"});class vn{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"idx");this._data=M.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1,this._optionsMap=(e==null?void 0:e.indexMap)||{};const s=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((r,o)=>(r[o]=void 0,r),{}):{};this._index=M.observable.map(s),this.idx=Se(),M.makeAutoObservable(this,{}),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new dn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}get revision(){return this._revision}addAll(e){M.runInAction(()=>{e.forEach(s=>this.addModel(s))})}removeAll(e){M.runInAction(()=>{e.forEach(s=>this.removeModel(s))})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){M.runInAction(()=>{this._revision=this._revision+1})}addModel(e,s){const r=M.isObservable(e)?e:M.observable.object(e),o=this._disposerMap.get(e.id);o&&(o(),this._disposerMap.delete(e.id)),this._data.set(r.id||"",r),s||this.increment();const n=M.observe(r,i=>{Object.values(this._optionsMap||{}).includes(i.name)&&this.increment()});this._disposerMap.set(r.id||"",n)}removeModel(e){this._data.delete(e),this.increment();const s=this._disposerMap.get(e);s&&(s(),this._disposerMap.delete(e))}updateModel(e){const s=M.observable.object(e);this._data.set(s.id||"",s),this.increment()}getModel(e){return this._data.get(e)}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(ho.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(ho.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return ho.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async clear(){this._data.clear(),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id}))}}}class Bg{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"childRegistration");l(this,"model");this.type=e,this.model=s,this.childRegistration=r}get factory(){return ie.Factory.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!1,factory:this.factory},...this.childRegistration}}get predicate(){return Te(this.type)}}class Kg{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"model");l(this,"childRegistration");this.type=e,this.model=s,this.childRegistration=r}get factory(){return ie.Singleton.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!0,factory:this.factory},...this.childRegistration}}get predicate(){return Te(this.type)}}class gl{constructor(){l(this,"_token");M.makeAutoObservable(this),C("token",e=>{this.token=e==null?void 0:e.body})}get token(){return this._token}set token(e){this._token=e}}class ml{constructor(){l(this,"routes",[]);l(this,"openApiRoutes",[])}use(e,s,...r){this.routes.push({method:e,path:s,middlewares:r});const o=this.extractOpenApiParams(s);this.openApiRoutes.push({method:e,path:s,parameters:o})}remove(e,s){const r=this.routes.length;return this.routes=this.routes.filter(o=>!(o.method===e&&o.path===s)),this.openApiRoutes=this.openApiRoutes.filter(o=>!(o.method===e&&o.path===s)),r-this.routes.length}removeAllForPath(e){const s=this.routes.length;return this.routes=this.routes.filter(r=>r.path!==e),this.openApiRoutes=this.openApiRoutes.filter(r=>r.path!==e),s-this.routes.length}getRoutes(){return this.routes.map(e=>({method:e.method,path:e.path}))}async handle(e,s){var a;const{path:r,query:o,params:n}=this.extractPathParams(e.path),i={...e,params:n,query:o};for(const c of this.routes){const u=this.matchRoute(c.path,r);if(c.method===e.method&&u){i.params=u;let d=0;const h=async()=>{if(d<c.middlewares.length){const f=c.middlewares[d++];await f(i,s,h)}};await h();return}}(a=s.status)==null||a.call(s,404).send({error:"Route not found"})}extractOpenApiParams(e){return e.split("/").filter(s=>s.startsWith(":")).map(s=>({name:s.slice(1),in:"path",required:!0,schema:{type:"string"}}))}generateOpenApiSpec(){const e={};for(const s of this.openApiRoutes)e[s.path]||(e[s.path]={}),e[s.path][s.method.toLowerCase()]={summary:s.description||`Handles ${s.method} ${s.path}`,parameters:s.parameters||[],responses:{200:{description:"Successful response"}}};return{openapi:"3.0.0",info:{title:"Kos Router API",version:"1.0.0",description:"Dynamically generated OpenAPI documentation"},paths:e}}extractPathParams(e){const[s,r]=e.split("?"),o=this.parseQueryParams(r);for(const n of this.routes){const i=this.matchRoute(n.path,s);if(i)return{path:s,query:o,params:i}}return{path:s,query:o,params:{}}}matchRoute(e,s){const r=e.split("/").filter(Boolean),o=s.split("/").filter(Boolean);if(r.length!==o.length)return null;const n={};for(let i=0;i<r.length;i++)if(r[i].startsWith(":"))n[r[i].slice(1)]=decodeURIComponent(o[i]);else if(r[i]!==o[i])return null;return n}parseQueryParams(e){return e?e.split("&").reduce((s,r)=>{const[o,n]=r.split("=").map(decodeURIComponent);return s[o]=n??"",s},{}):{}}}const yl=m.createLogger({name:"intent-service"}),Hg=t=>{Yo(`/kos/intent/${t.type}`)?G(`/kos/intent/${t.type}`,t.options,{"kos.intent.type":t.type}):yl.info(`No subscribers for intent ${t.type}. Intent not sent.`)},zg=async t=>new Promise(e=>{const{type:s,options:r}=t;if(Yo(`/kos/intent/${t.type}`)){const o=nt(),{unsubscribe:n}=C(o,a=>{clearTimeout(i),n(),a&&(a.headers=a.headers||{},a.headers["kos.intent.type"]=s,a.headers.responseId=o),e([null,{body:a==null?void 0:a.body,payload:a}])}),i=setTimeout(()=>{n(),e([`Intent ${s} timed out after 1 second`,null]),console.warn(`Intent ${s} timed out after 1 second`)},1e3);G(`/kos/intent/${s}`,r,{"kos.intent.type":s,sync:o})}else yl.info(`No subscribers for intent ${t.type}. Intent not sent.`),e([null,{body:void 0,payload:void 0}])}),Pe=m.createLogger({name:"app-startup-service"});async function bl(t,e={}){const{timeout:s=3e4,throwOnTimeout:r=!0,requirePostStarted:o=!1}=e;if(t.length===0)return Pe.warn("No app IDs provided to waitForAppsToStart"),!0;Pe.debug(`Waiting for apps to start: ${t.join(", ")}`);try{const n=t.map(c=>`/kos/app/started/${c}`),i=await Zo(n,{getCurrentState:async()=>{try{const{default:c}=await Promise.resolve().then(()=>Vc),[u,d]=await c.get("/api/kos/apps/started");return u?(Pe.error("Error fetching started apps:",u),[]):d}catch(c){Pe.error("Failed to fetch app startup status:",c)}return[]},shouldUseFetchedState:c=>t.every(u=>{const d=c.find(h=>h.appId===u);return!(!d||!d.started||o&&!d.postStarted)}),timeout:s}),a=t.filter(c=>{const u=i.find(d=>d.appId===c);return!!(!u||!u.started||o&&!u.postStarted)});if(a.length>0){const c=`Apps not started: ${a.join(", ")}`;if(Pe.error(c),r)throw new Error(`App startup timeout: ${c}`);return!1}return Pe.info(`All apps started successfully: ${t.join(", ")}`),!0}catch(n){const i=`Failed to wait for apps to start: ${t.join(", ")}`;if(Pe.error(i,n),r)throw new Error(`${i} - ${n instanceof Error?n.message:String(n)}`);return!1}}async function Vg(t,e={}){return bl([t],e)}async function Gg(t,e=!1){const s={};try{const r=await exports.kosFetch("kos:///api/kos/apps/started");if(!r.ok)return t.forEach(i=>s[i]=!1),s;const o=await r.json(),n=(o==null?void 0:o.data)??[];t.forEach(i=>{const a=n.find(c=>c.appId===i);s[i]=(a==null?void 0:a.started)===!0&&(!e||(a==null?void 0:a.postStarted)===!0)})}catch(r){Pe.error("Failed to check app startup status:",r),t.forEach(o=>s[o]=!1)}return s}async function qg(){try{const t=await exports.kosFetch("kos:///api/kos/apps/started");if(!t.ok)return[];const e=await t.json();return(e==null?void 0:e.data)??[]}catch(t){return Pe.error("Failed to fetch started apps:",t),[]}}const $o=M.when,wn=M.computed,J=M.runInAction,W=M.autorun,vl=M.reaction,En=M.observable,Mn="Not Assigned",Yg="kos.trouble.added",Wg="kos.trouble.removed";var ve=(t=>(t.TroubleRank="kos.trouble.rank.mapper",t.TroubleColor="kos.trouble.color.mapper",t.TroubleRole="kos.trouble.role.mapper",t))(ve||{}),ps=(t=>(t.TIME_CHANGE="/kos/internal/time/time",t.DAY_CHANGE="/kos/internal/time/day",t.TIMEZONE_CHANGE="/kos/internal/time/timezone",t))(ps||{});const wl=m.createLogger({name:"config-bean-service",group:"Services"}),Tn=exports.BASE_URL,El=t=>(t==null?void 0:t.decimals)!==void 0,{postModel:Qg,getOne:Zg}=oe.build({destinationAddress:"",basePath:`${Tn}/kos/config/`}),Ml=async(t,e,s="/api/kos/config")=>(wl.debug(`sending modify request for ConfigBean: ${t}`),Qg({model:e,urlOverride:`${Tn}${s}/${t}`})),Tl=async(t,e="/api/kos/config")=>(wl.debug(`sending get request for ConfigBean: ${t}`),await Zg({urlOverride:`${Tn}${e}/details/${t}/15`})),_n=t=>t.toLowerCase()==="true"||t.toLowerCase()==="false",Ur=t=>{try{const e=Number(t);return!isNaN(e)}catch{return!1}};function _l(t=[]){return t.reverse().reduce((e,s)=>{const{overrides:r}=s;return r&&(e={...e,...r}),e},{})}function Sl(t,e="",s={}){for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){const o=e?`${e}.${r}`:r;typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])?Sl(t[r],o,s):s[o]=t[r]}return s}const Il=(t,e)=>{const s=t.details[0].bean||_l(t.details[0].scopes),r=Sl(s);M.runInAction(()=>{const o={...r};e.props.setValues(o)})},Ol=(t,e)=>{M.runInAction(()=>{t.changes.forEach(s=>{const r=s.attr;let o=s.currentValue,n=s.previousValue;typeof o=="string"&&_n(o)&&(o=o.toLowerCase()=="true",n=(n==null?void 0:n.toLowerCase())=="true"),typeof o=="string"&&Ur(o)&&(o=Number(o),n=Number(n)),e.props[r]=o,e.prevProps[r]=n})})},$l=t=>Object.fromEntries(t.props.entries),Xg=t=>e=>s=>t.build(e,s);var Jg=Object.defineProperty,em=Object.getOwnPropertyDescriptor,Cl=(t,e,s,r)=>{for(var o=r>1?void 0:r?em(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Jg(e,s,o),o};function tm(t,e){for(const s of t)if(new RegExp(`^${s}$`).test(e))return s}const Sn="config-bean-model",Hs=m.getLogger(Sn),sm=it("path");let nr=class{constructor(t,e){l(this,"_modifyConfigBean");l(this,"_getConfigBean");l(this,"_schema");l(this,"id");l(this,"path");l(this,"props");l(this,"prevProps");l(this,"serviceBasePath");Object.assign(this,e),this.id=t,this.path=e.path,this.serviceBasePath=e.serviceBasePath;const{modifyConfigBean:s=Ml,getConfigBean:r=Tl}=e;this._modifyConfigBean=s,this._getConfigBean=r,this.props=Se(),this.prevProps=Se()}get values(){return this.props.values}async ready(){Hs.debug(`readying config bean ${this.path}`),Hs.debug(`complete readying config bean ${this.path}`)}async load(){Hs.debug(`loading config bean ${this.path}`);const t=await this._getConfigBean(this.path,this.serviceBasePath);if(t!=null&&t.data){const e=t.data;Il(e,this),Hs.debug(this.values);const s=t==null?void 0:t.data.details[0].schema;J(()=>{s&&(this._schema=s)})}}get schemaKeys(){var t;return Object.keys(((t=this._schema)==null?void 0:t.schema)||{})}getSchemaForProperty(t){var s,r;if(this.schemaKeys.includes(t))return(s=this._schema)==null?void 0:s.schema[t];const e=tm(this.schemaKeys,t);if(e)return(r=this._schema)==null?void 0:r.schema[e]}async updateProperty(t,e){this.props[t]=e,await this.updateConfigBean()}async updateConfigBean(){const t=$l(this);await this._modifyConfigBean(this.path,t,this.serviceBasePath)}handleConfigBeanUpdated(t){Ol(t,this)}};Cl([K({topic:`/kos/config/${sm}`,websocket:!0})],nr.prototype,"handleConfigBeanUpdated",1);nr=Cl([A(Sn)],nr);const ys=new ye({class:nr,type:Sn}),jr=({path:t,lazy:e,serviceBasePath:s})=>(r,o)=>{r[F]=r[F]||{},r[F][o]={modelType:ys.type,id:`${ys.type}-${t}`,options:{path:t,serviceBasePath:s},lifecycle:j.INIT,lazy:e}},{URL:xl}=ae(),{getOne:rm,getAll:om}=oe.build({basePath:`${xl}/api/kos/regions/info`}),Dl=async()=>{try{return await rm({})}catch{return}},Al=async()=>{try{return await om({urlOverride:`${xl}/api/kos/regions`})}catch{return}},nm=Object.freeze(Object.defineProperty({__proto__:null,getRegionInfo:Dl,getRegions:Al},Symbol.toStringTag,{value:"Module"}));var le=(t=>(t[t.family=0]="family",t[t.scale=1]="scale",t[t.offset=2]="offset",t[t.decimals=3]="decimals",t[t.alias=4]="alias",t[t.system=5]="system",t))(le||{});const Pl={s:["time",1,0,0],second:["time",1,0,0],m:["time",1/60,0,0],minute:["time",1/60,0,0],h:["time",1/3600,0,0],hour:["time",1/3600,0,0],day:["time",1/86400,0,0],week:["time",1/604800,0,0],month:["time",1/2628e3,0,0],year:["time",1/31536e3,0,0],default:["time",1/.001,0,0],ms:["time",1/.001,0,0],millisecond:["time",1/.001,0,0],microsecond:["time",1/1e-6,0,0],nanosecond:["time",1/1e-9,0,0],picosecond:["time",1/1e-12,0,0]};function im(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return o[n.name]=i,n.alias&&(o[n.alias]=i),o},{...Pl});return{...t,...r}}function am(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{},a=i[s]||{};i[s]=a;const c=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return a[n.name]=c,Object.hasOwn(n,"default")&&Object.defineProperty(a,"default",{value:c,writable:!0,enumerable:!0,configurable:!0}),o[n.measure]=i,n.alias&&(o[n.alias]=i),o},{time:{[s]:{...Pl}}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}function cm(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{};return Object.hasOwn(n,"default")&&(i[s]=n.name),o[n.measure]=i,o},{time:{[s]:"millisecond"}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}var lm=Object.defineProperty,um=Object.getOwnPropertyDescriptor,In=(t,e,s,r)=>{for(var o=r>1?void 0:r?um(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&lm(e,s,o),o};const Xs="region-info-model",Gt=m.createLogger({name:"region-info-model"});let bs=class{constructor(t){l(this,"id");l(this,"unitSystemMap");l(this,"measureMap");l(this,"defaultMeasureMap");l(this,"regionMap");l(this,"timeFormats");l(this,"dateFormats");l(this,"unitSystems");l(this,"regionSource");l(this,"region");l(this,"regions",[]);l(this,"timeZoneMap",{});this.id=t,this.unitSystems={},this.unitSystemMap={},this.measureMap={},this.defaultMeasureMap={},this.timeFormats={},this.regions=[],this.dateFormats={},this.timeZoneMap={},this.regionMap={}}get availableRegions(){return this.regions}get defaultUnitSystem(){return String(this.regionSource.props.unitSystemId).toLowerCase()||""}get unitSystemId(){return this.defaultUnitSystem}get timeFormatId(){const t=this.regionSource.props.timeFormatId;if(!t)return"";const e=String(t),s=this.timeFormats[e];return s?String(s.id):""}get selectedTimeFormat(){const t=this.timeFormatId;return t?String(this.timeFormats[t].format):"HH:mm:ss"}get is12HourTimeFormat(){const t=this.timeFormatId;return t?this.timeFormats[t].ampm:!0}get dateFormatId(){const t=this.regionSource.props.dateFormatId;if(!t)return"";const e=String(t);return e?this.dateFormats[e].id:""}get selectedDateFormat(){const t=this.dateFormatId;return t?this.dateFormats[t].format:""}get selectedDateOrder(){const t=this.dateFormatId;return t?this.dateFormats[t].order.toLowerCase():"dmy"}get selectedCountry(){return this.regionSource.props.country||"en"}get selectedTimeZone(){return this.regionSource.props.timeZone||""}get timeZones(){return this.regionId?this.timeZoneMap[this.regionId]||[]:[]}get allTimeZones(){return Intl.supportedValuesOf("timeZone")}get regionId(){return this.region.props.regionId||""}get selectedRegion(){return this.regionMap[this.regionId]}get selectedUnitSystem(){return String(this.regionSource.props.unitSystemId)||""}get timeFormatOptions(){return Object.keys(this.timeFormats).map(t=>({id:t,format:this.timeFormats[t].format,ampm:this.timeFormats[t].ampm}))}get dateFormatOptions(){return Object.keys(this.dateFormats).map(t=>({id:t,format:this.dateFormats[t].format,order:this.dateFormats[t].order}))}get unitSystemOptions(){return Object.keys(this.unitSystems).map(t=>({id:t,name:t}))}setSelectedTimeFormat(t){if(!this.timeFormatOptions.find(e=>e.id===t))throw Error(`Invalid time format id. Must be one of ${this.timeFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("timeFormatId",t)}setSelectedDateFormat(t){if(!this.dateFormatOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.dateFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("dateFormatId",t)}setSelectedUnitSystem(t){if(!this.unitSystemOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.unitSystemOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("unitSystemId",t)}getUnitSystem(t){if(!t)return this.defaultUnitSystem;const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[le.system]}getUnitMeasure(t){const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[le.family]}getDefaultUnitDecimalPlaces(t,e,s){if(!t||!e)throw Error("Measure and unit system are required");const r=s==="drt"?"second":s,o=this.measureMap[t];if(!o)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const n=o[e.toLowerCase()];if(!n)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(o).join(", ")}`);const i=n[r||"default"];if(!i)throw Error(`No unit "${r||"default"}" found for measure: ${t} and unit system: ${e}. Unit should come from list of units: ${Object.keys(n).join(", ")}`);return i[le.decimals]}getDefaultUnitForMeasure(t,e){if(!t||!e)throw Error("Measure and unit system are required");const s=this.defaultMeasureMap[t];if(!s)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const r=s[e.toLowerCase()];if(!r)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(s).join(", ")}`);return r}convertByUnit(t,e,s){if(e[le.family]!==s[le.family])throw new Error(`Cannot convert between units of different families: ${e[le.family]} and ${s[le.family]}`);const r=e[le.offset],o=e[le.scale],n=s[le.scale],i=s[le.offset],a=s[le.decimals];return((t-r)/(o/n)+i).toFixed(a)}convertByUnitName(t,e,s){const r=this.unitSystemMap[e],o=this.unitSystemMap[s];if(!r||!o)throw new Error(`No unit found with name: ${e} or ${s}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return this.convertByUnit(t,r,o)}convert(t,e,s){var a,c;if(e.unit&&s.unit)return this.convertByUnitName(t,e.unit,s.unit);const r=e.unit||"",o=s.unit||"";let n=this.unitSystemMap[r],i=this.unitSystemMap[o];if(!i&&s.measure&&s.system){const u=this.measureMap[s.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);i=(a=u[s.system])==null?void 0:a.default,i||Gt.info("Could not find default unit for measure",s.measure)}if(!n&&e.measure&&e.system){const u=this.measureMap[e.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);n=(c=u[e.system])==null?void 0:c.default,n||Gt.info("Could not find default unit for measure",e.measure)}return!n||!i?(Gt.warn("Could not find unit to convert to or from. Return value as is"),String(t)):this.convertByUnit(t,n,i)}async init(){Gt.debug("initializing region info")}async load(){Gt.debug("loading region info");const t=await Al();t&&(this.regions=t.data.map(s=>s.id),this.timeZoneMap=t.data.reduce((s,r)=>({...s,[r.id]:r.timeZones}),this.timeZoneMap),this.regionMap=t.data.reduce((s,r)=>({...s,[r.id]:r}),{}));const e=await Dl();e&&(this.unitSystems=e.data.unitSystems.reduce((s,r)=>{const o={id:r.id,name:r.id};return s[r.id]=o,s},this.unitSystems),this.unitSystemMap=e.data.unitSystems.reduce(im,{}),this.measureMap=e.data.unitSystems.reduce(am,{}),this.defaultMeasureMap=e.data.unitSystems.reduce(cm,{}),this.timeFormats=e.data.timeFormats.reduce((s,r)=>({...s,[r.id]:r}),{}),this.dateFormats=e.data.dateFormats.reduce((s,r)=>({...s,[r.id]:r}),{}))}async ready(){var t,e;await((e=(t=this.regionSource).ready)==null?void 0:e.call(t))}};In([jr({path:"kos:service:region:settings"})],bs.prototype,"regionSource",2);In([jr({path:"kos:service:region"})],bs.prototype,"region",2);bs=In([A(Xs)],bs);const re={registration:{[Xs]:{class:bs,singleton:!0}},type:Xs,factory:ie.Singleton.create(Xs)},ir=({source:t,defaultSystem:e="si",defaultMeasure:s})=>{let r={system:e,measure:s};return typeof t=="string"?r={...r,unit:t}:r={...r,...t},r},On=(t,e,s)=>{const{model:r}=Ie(re.type);if(!r)throw new Error("RegionInfo model not found");if(!or(r))throw new Error("RegionInfo model not ready");const o={system:r.defaultUnitSystem},n=ir({source:e}),i=ir({source:s||o,defaultMeasure:r.getUnitMeasure(n.unit||"")});return r.convert(t,n,i)};function Ni(t,e,s){const r=e.toLowerCase().replace(/_/g,"-").replace(/s$/,""),o=new Intl.NumberFormat().resolvedOptions().locale??"en-US";try{const n=(s==null?void 0:s.mode)||"long",i=(s==null?void 0:s.maxDecimals)??2,a=(s==null?void 0:s.minDecimals)??0;return new Intl.NumberFormat(o,{style:"unit",unit:r,unitDisplay:n,minimumFractionDigits:a,maximumFractionDigits:i}).format(t)}catch{return e}}const dm=(t,e,s,r)=>{const o=On(t,e,s),n=ir({source:e}),{model:i}=Ie(re.type);if(!i)throw new Error("RegionInfo model not found");const a=i.getUnitMeasure(n.unit||""),c={system:i.defaultUnitSystem},u=ir({source:s||c,defaultMeasure:i.getUnitMeasure(n.unit||"")}),d=i.getDefaultUnitForMeasure(a,u.system),h=i.getDefaultUnitDecimalPlaces(a,u.system),f={...r,minDecimals:(r==null?void 0:r.minDecimals)??h,maxDecimals:(r==null?void 0:r.maxDecimals)??h};return{value:o,unit:d||n.unit||"",display:Ni(o,d||n.unit||"",{...f,mode:"long"}),shortDisplay:Ni(o,d||n.unit||"",{...f,mode:"short"})}};function Ui({start:t,end:e,count:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<2)throw new Error("Count should be at least 2 for distribution.");if(t>=e)throw new Error("Start should be less than end.");const o=(e-t)/(s-1),n=[];for(let i=0;i<s;i++){const a=Math.round(t+i*o);n.push(a.toFixed(r))}return n}function ji({start:t,end:e,interval:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<=0)throw new Error("Interval should be a positive number.");if(t>=e)throw new Error("Start should be less than end.");const o=[];let n=t;for(;n<=e;)o.push(n.toFixed(r)),n+=s;return o[o.length-1]!==e.toString()&&o.push(e.toString()),o}const ft=(t,e)=>s=>!t||!e?s:Ur(s)?On(Number(s),t,e):s,hm=(t,e,s,r)=>{if((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options))return[];if(t.options.type==="rangeCount")return Ui(t.options).map(ft(s,r));if(t.options.type==="rangeInterval")return ji(t.options).map(ft(s,r));if(t.options.type==="list"){const{list:o}=t.options;return o.map(ft(s,r))}else{if(t.options.type==="unitSystemRangeCount"&&e)return Ui(t.options.unitSystems[e]).map(ft(s,r));if(t.options.type==="unitSystemRangeInterval"&&e)return ji(t.options.unitSystems[e]).map(ft(s,r));if(t.options.type==="unitSystemList"&&e){const{list:o}=t.options.unitSystems[e];return o.map(ft(s,r))}}return[]},fm=(t,e)=>{if(!((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options)))return t.options.type==="unitSystemRangeCount"&&e?{type:"rangeCount",...t.options.unitSystems[e]}:t.options.type==="unitSystemRangeInterval"&&e?{type:"rangeInterval",...t.options.unitSystems[e]}:t.options.type==="unitSystemList"&&e?{type:"list",...t.options.unitSystems[e]}:t.options.type==="unitSystemKeypad"&&e?{type:"keypad",...t.options.unitSystems[e]}:t.options};var pm=Object.defineProperty,gm=Object.getOwnPropertyDescriptor,$n=(t,e,s,r)=>{for(var o=r>1?void 0:r?gm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&pm(e,s,o),o};function mm(t){return(t==null?void 0:t.type)==="enum"}function ym(t){switch(t){case"s":return"second";case"ms":return"millisecond";case"min":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"m":return"month";case"y":return"year";case"ml":return"milliliter";default:return t}}function bm(t,e){const s=new Date;s.setHours(0,0,0,0);const r=new Date(s.getTime()+t*1e3);return Ke.format(r,e)}const Js="config-bean-prop-model",pt=m.createLogger({name:"config-bean-prop-model"}),vm=it("path"),wm=it("serviceBasePath");let vs=class{constructor(t,e){l(this,"id");l(this,"path");l(this,"attribute");l(this,"converter");l(this,"formatter");l(this,"optionsExpander");l(this,"serviceBasePath");l(this,"regionInfo");l(this,"bean");this.id=t,this.path=e.path,this.attribute=e.attribute,this.converter=e.converter,this.formatter=e.formatter,this.serviceBasePath=e.serviceBasePath,this.optionsExpander=e.optionsExpander}getDefaultUnitDecimalPlaces(t,e,s){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return El(this.displayOptions)?this.displayOptions.decimals:this.regionInfo.getDefaultUnitDecimalPlaces(t,e,s)}getDefaultUnitForMeasure(t,e){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return this.regionInfo.getDefaultUnitForMeasure(t,e)}get schemaType(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.type?t.type:"String"}get schemaFormat(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.format?ym(t.format):""}get options(){var i;const t=this.regionInfo.defaultUnitSystem,e=this.getConverter(),s=((i=e==null?void 0:e.to)==null?void 0:i.system)??t,r=this.bean.getSchemaForProperty(this.attribute),o=mm(r)?r.values:hm(r,s,e==null?void 0:e.from,e==null?void 0:e.to),n=o.length>0?o.map(a=>({label:a,value:a})):[];return this.optionsExpander?typeof this.optionsExpander=="function"?this.optionsExpander(s,o):this.optionsExpander:n}convertUnit(t,e,s){const r=(t==null?void 0:t.measure)||s,o=(t==null?void 0:t.system)||e,n=t==null?void 0:t.unit;return{measure:r,system:o,unit:n}}getConverterUnits(){const t=this.regionInfo.defaultUnitSystem,e=this.getConverter();if(!e)throw Error("No converter defined");const s=e.measure,r=this.convertUnit(e.from,"si",s),o=this.convertUnit(e.to,t,s);return{backend:r,display:o}}set value(t){this.updateProperty(t)}get value(){return this.getValue(!0)}get rawValue(){return this.bean.props[this.attribute]}get significantValue(){var o,n;const t=this.value,e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=(s==null?void 0:s.measure)||((o=s==null?void 0:s.to)==null?void 0:o.measure);if(!isNaN(t)&&s&&r){const i=this.getDefaultUnitDecimalPlaces(r,e,(n=s==null?void 0:s.to)==null?void 0:n.unit);try{const c=this.getFormatterOptions(s);if(c){let u=String(t);return u=c.formatToParts(Number(t))[0].value,Number(u)}}catch(c){pt.info(`error formatting value ${t}`,c)}return Number(t).toFixed(i)}return t}get previousValue(){return this.getValue(!1)}getValue(t){const e=this.bean[t?"props":"prevProps"][this.attribute];if(typeof e=="boolean")return e;if(this.getConverter()&&!isNaN(e)){const{backend:r,display:o}=this.getConverterUnits();return this.regionInfo.convert(Number(e),r,o)}return e||""}async activate(){pt.debug(`activating config bean ${this.id}`)}get displayValue(){const t=this.value;if(typeof t=="boolean")return String(t);if(this.schemaFormat==="drt"){const s=this.regionInfo.is12HourTimeFormat?"h:mm:ss a":"HH:mm:ss";return bm(t,s)}if(!isNaN(t))try{const e=this.getConverter(),s=this.getFormatterOptions(e);if(s){let r=String(t);return r=s.format(Number(t)),r}}catch(e){pt.error(`error formatting value ${t}`,e)}return String(t)}get unit(){const t=this.getConverter();if(!isNaN(this.value)){const e=this.getFormatterOptions(t);if(e){const r=e.formatToParts(Number(this.value)).find(o=>o.type==="unit");return(r==null?void 0:r.value)??this.getDefaultUnit(t)}}return this.getDefaultUnit(t)}get displayOptions(){var o;const t=this.bean.getSchemaForProperty(this.attribute),e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=((o=s==null?void 0:s.to)==null?void 0:o.system)??e;return fm(t,r)}getMeasureFromFormat(){const t=this.schemaFormat;return t?this.regionInfo.getUnitMeasure(t):""}getConverterFromFormat(){const t=this.getMeasureFromFormat();if(t){const e=this.regionInfo.selectedUnitSystem;return{unit:this.schemaFormat||this.regionInfo.getDefaultUnitForMeasure(t,e),measure:t}}return{}}getDefaultUnit(t){var r,o;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure;return s?((r=t==null?void 0:t.to)==null?void 0:r.unit)||this.getDefaultUnitForMeasure(s,((o=t==null?void 0:t.to)==null?void 0:o.system)||e):this.getConverterFromFormat().unit}getFormatterOptions(t){var n,i,a;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure,r=new Intl.NumberFormat().resolvedOptions().locale;let o=null;if(s||this.formatter){const c=s?{style:"unit",unit:this.getDefaultUnit(t)}:null,u=this.formatter||c;if(u){let d=typeof u=="function"?u(((n=t==null?void 0:t.to)==null?void 0:n.system)||e):u;s&&(d={unit:this.getDefaultUnit(t),...d},d.style==="unit"&&(d.maximumFractionDigits=d.maximumFractionDigits??this.getDefaultUnitDecimalPlaces(s,((i=t==null?void 0:t.to)==null?void 0:i.system)||e,(a=t==null?void 0:t.to)==null?void 0:a.unit)));try{o=new Intl.NumberFormat(r,{...d})}catch(h){pt.error(`error creating formatter ${d}. Returning the raw value`,h)}}else pt.debug(`no formatter found for config bean prop ${this.id}. Returning the raw value`)}return o}getConverter(){var r,o,n,i,a,c,u,d,h,f,p;const{unit:t,measure:e}=this.getConverterFromFormat(),s=t==="drt"?"second":t;if(this.converter){const y=(r=this.converter)==null?void 0:r.measure,w=(n=(o=this.converter)==null?void 0:o.to)==null?void 0:n.measure,E=(a=(i=this.converter)==null?void 0:i.from)==null?void 0:a.measure,_=y||w||E||e,k=((u=(c=this.converter)==null?void 0:c.to)==null?void 0:u.unit)||this.regionInfo.getDefaultUnitForMeasure(_,((h=(d=this.converter)==null?void 0:d.to)==null?void 0:h.system)??this.regionInfo.defaultUnitSystem),P=((p=(f=this.converter)==null?void 0:f.to)==null?void 0:p.system)??this.regionInfo.getUnitSystem(k),O=this.schemaFormat==="drt"?"second":this.schemaFormat||s;return{...this.converter,from:{unit:O,...this.converter.from},to:{...this.converter.to,unit:k,system:P},measure:_}}if(s&&e){const y=this.regionInfo.getDefaultUnitForMeasure(e,this.regionInfo.defaultUnitSystem),w=this.regionInfo.getUnitSystem(s),E=this.regionInfo.getUnitSystem(y);return{measure:e,to:{unit:w===E?s:y}}}}async updateProperty(t){pt.debug(`updating property ${this.attribute} with value ${t}`);let e=t;if(this.getConverter()&&!isNaN(e)){const{backend:o,display:n}=this.getConverterUnits();e=this.regionInfo.convert(Number(e),n,o)}const r=Array.isArray(e)?JSON.stringify(e):String(e);await this.bean.updateProperty(this.attribute,r)}};$n([Lt({modelType:re.type})],vs.prototype,"regionInfo",2);$n([jr({path:vm,serviceBasePath:wm})],vs.prototype,"bean",2);vs=$n([A(Js)],vs);const at={registration:{[Js]:{class:vs,singleton:!1}},type:Js,factory:ie.Factory.create(Js)};function Em(t){const{path:e,attribute:s,converter:r,formatter:o,lazy:n,optionsExpander:i,serviceBasePath:a}=t,c=r;return c&&(typeof c!="function"&&typeof c.from=="string"&&(c.from={unit:c.from}),typeof c!="function"&&typeof c.to=="string"&&(c.to={unit:c.to})),(u,d)=>{u[F]=u[F]||{},u[F][d]={modelType:at.type,id:`${e}-${s}`,options:{path:e,attribute:s,serviceBasePath:a,converter:c,formatter:o,optionsExpander:i},lifecycle:j.INIT,lazy:n}}}const Rl="future-model",Ut=Ft(Rl),Br=m.createLogger({name:"future-service",group:"Services"}),{isMock:Mm,URL:Ps}=ae();var ze=(t=>(t.Success="SUCCESS",t.Fail="FAIL",t.Aborted="ABORT",t.Canceled="CANCEL",t))(ze||{});const{getAll:Tm,modifyModel:_m,addModel:Sm,deleteModel:Im,postModel:Om}=oe.build({destinationAddress:"",basePath:`${Ps}/api/future`,mock:Mm}),$m=async()=>await Tm({}),kl=async(t,e="/api/kos/future")=>(Br.info(`sending delete request for Future: ${t}`),await Im({id:t,urlOverride:`${Ps}${e}/${t}`})),Ll=async(t,e="/api/kos/future")=>(Br.info("sending add request for Future"),await Sm({model:t,urlOverride:`${Ps}${e}`})),Cm=async(t,e,s="/api/kos/future")=>(Br.info(`sending modify request for Future: ${t}`),_m({model:e,id:t,urlOverride:`${Ps}${s}/${t}`})),Fl=async(t,e="/api/kos/future")=>(Br.info(`sending cancel request for Future: ${t}`),Om({urlOverride:`${Ps}${e}/${t}/cancel`,ordered:!0,model:{}})),Cn=t=>({id:String(t.id),progress:t.progress,remainingTimeMs:t.remainingTimeMs,endState:t.endState,reason:t.reason,clientData:t.clientData,reasonData:t.reasonData,note:t.note,tracker:t.tracker}),xn=(t,e)=>{m.debug(`future dto ${t.id} end state ${t.endState}`),m.debug(`future model ${e.id} end state ${e.endState}`),e.endState?m.debug(`future model ${e.id} is already complete`):(m.debug(`updating future model ${e.id}`),M.runInAction(()=>{const s=Cn(t);J(()=>{Object.keys(s).forEach(r=>{r==="id"?(e.futureId=s.id,s.tracker||(e.id=s.id)):r==="tracker"?e.id=s.tracker:e[r]=s[r]})})}))},Nl=t=>e=>s=>t.build(String(e),s),Dn=t=>e=>hl(Cn,Nl(t)(e.tracker||e.id))(e);var xm=Object.defineProperty,Dm=Object.getOwnPropertyDescriptor,Ul=(t,e,s,r)=>{for(var o=r>1?void 0:r?Dm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&xm(e,s,o),o};const fo=m.getLogger(Ut.type);let ar=class{constructor(t,e,s){l(this,"logger");l(this,"_cancelFuture");l(this,"futureId");Object.assign(this,e),this.logger=s.logger,this.id=t,this.futureId=e.id,this.namespace=e.namespace||"kos",this._cancelFuture=Fl,$o(()=>this.status===ze.Success||this.status===ze.Fail,()=>{fo.info(`Future ${this.id} has completed with status ${this.status}`),st(this)})}async load(){fo.debug(`loading Future ${this.id}`)}unload(){fo.info(`unloading Future ${this.id}`)}async cancelFuture(){const t=this.namespace==="studio"?"/api/future":`/api/${this.namespace}/future`;await $o(()=>this.futureId!==Mn),await this._cancelFuture(this.futureId,t)}get status(){return this.endState?this.endState:this.progress>-1?"IN_PROGRESS":"NOT_ACTIVE"}get timeRemaining(){var a,c;const t=this.remainingTimeMs||-1;if(t<0)return"";const e={year:1e3*60*60*24*365,month:1e3*60*60*24*30,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60,second:1e3};let s="second",r=0;for(const[u,d]of Object.entries(e))if(Math.abs(t)>=d){s=u,r=Math.round(t/d);break}const n=new Intl.RelativeTimeFormat("en",{numeric:"auto"}).formatToParts(r,s);return n.length===3?`${((a=n[1])==null?void 0:a.value)??0} ${((c=n[2])==null?void 0:c.value)??""}`:"0 seconds"}handleFutureUpdated(t){this.logger.debug(`Future ${this.id} updated. future: ${t.id} endState: ${t.endState} progress: ${t.progress} remainingTimeMs: ${t.remainingTimeMs}`),xn(t,this)}};Ul([K({topic:`kos.future/${tr}`})],ar.prototype,"handleFutureUpdated",1);ar=Ul([A(Ut.type)],ar);const jl=ar,Bl=mn();var Am=Object.defineProperty,Pm=Object.getOwnPropertyDescriptor,Kl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Pm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Am(e,s,o),o};const Hl="browser-router-model",Rm="kos.http.request",km="kos.http.response";let cr=class{constructor(t,e,s){l(this,"_id");l(this,"logger");l(this,"router");this._id=t,this.logger=s.logger,this.router=new ml}get id(){return this._id}async handleRequest(t,e){const s=e.headers["src-addr"],r=e.headers["dst-addr"],o=e.headers.url,n=e.headers.method,i=e.headers["request-id"],a={id:i,method:n,path:o,body:t};let c=200;const u={send:d=>{this.logger.debug(`sending response to ${r}`),this.logger.debug(d),ol({msg:d,options:{responseId:i,destinationAddress:s,type:km,sourceAddress:r,status:c}})},status:function(d){return c=d,this}};if(a.path==="/openapi.json"){u.send(this.router.generateOpenApiSpec());return}await this.router.handle(a,u)}use(t,e,...s){this.router.use(t,e,...s)}remove(t,e){return this.router.remove(t,e)}removeAllForPath(t){return this.router.removeAllForPath(t)}getRoutes(){return this.router.getRoutes()}async init(){this.logger.debug(`initializing browser-router ${this.id}`)}async load(){this.logger.debug(`loading browser-router ${this.id}`)}};Kl([K({topic:Rm})],cr.prototype,"handleRequest",1);cr=Kl([A(Hl)],cr);const An=new _e({class:cr,type:Hl}),zl="future-container-model",Ve=Ft(zl),Vl=t=>Dn(Ut)(t),Lm=t=>{const e=Vl(t);return Ve.build(Ve.type,{}).addFutureModel(e),e},Fm=t=>Ve.build(Ve.type,{}).getFuture(String(t)),rt={buildFutureModel:Vl,initiateFuture:Lm,getFuture:Fm};var Nm=Object.defineProperty,Um=Object.getOwnPropertyDescriptor,Pn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Um(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Nm(e,s,o),o};const zs=m.getLogger(Ve.type);let ws=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_deleteFuture");l(this,"_addFuture");l(this,"_futures");l(this,"createModel");l(this,"deleteModel");const{deleteFuture:r=kl,addFuture:o=Ll}=e;this.logger=s.logger,this._deleteFuture=r,this._addFuture=o,this.id=t,this._futures=new Ce,this.createModel=this.createFuture,this.deleteModel=this.removeFuture}get futures(){return this._futures.data}get models(){return this.futures}getFuture(t){return this._futures.getModel(t)}addFutureModel(t){this._futures.addModel(t)}removeFutureModel(t){this._futures.removeModel(t)}async removeFuture(t){try{await this._deleteFuture(t)}catch(e){zs.error("error deleting a Future"),zs.error(e)}}async createFuture(t){try{const e=await this._addFuture(t),s=e==null?void 0:e.data;if(s){const r=Dn(Ut)(s);return this.addFutureModel(r),r}}catch(e){throw zs.error("error creating a Future"),zs.error(e),e}}handleFutureUpdated(t,e){const s=rt.buildFutureModel(t);this.addFutureModel(s);const r=`kos.future/${t.tracker||t.id}`;this.logger.debug(`publishing future update to ${r}`),G(r,e.body,e.headers)}};Pn([$e],ws.prototype,"_futures",2);Pn([K({topic:"kos.future"})],ws.prototype,"handleFutureUpdated",1);ws=Pn([A(Ve.type)],ws);const Gl=ws,{URL:Rs}=ae(),{getOne:jm,postModel:Bm,deleteModel:ql}=oe.build({basePath:`${Rs}/api/keyVal`}),Co=m.createLogger({name:"key-value-service",group:"Services"}),Yl=async(t,e)=>{await ql({urlOverride:`${Rs}/api/keyVal/${t}/${e}`,id:e})},Wl=async(t,e,s)=>{const r=await Bm({urlOverride:`${Rs}/api/keyVal/${t}/${e}`,model:s.toString()});if((r==null?void 0:r.status)!==200)throw Co.error("Failed to update key-value data",r),new Error(`Failed to update key-value data for namespace ${t}`);return r.data},Ql=async(t="studio")=>{Co.debug(`Retrieving all key-value data for namespace: ${t}`);const e=await jm({urlOverride:`${Rs}/api/keyVal/${t}`});if((e==null?void 0:e.status)!==200)throw Co.error("Failed to retrieve key-value data",e),new Error(`Failed to retrieve key-value data for namespace ${t}`);return e.data},Km=async t=>{await ql({urlOverride:`${Rs}/api/keyVal/${t}`,id:""})},Hm=Object.freeze(Object.defineProperty({__proto__:null,deleteKeyValue:Yl,deleteKeyValueNamespace:Km,getKeyValue:Ql,updateKeyValue:Wl},Symbol.toStringTag,{value:"Module"}));var zm=Object.defineProperty,Vm=Object.getOwnPropertyDescriptor,Rn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Vm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&zm(e,s,o),o};const Zl="key-value-model";let Es=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"namespace");l(this,"data");this.id=t,this.logger=s.logger,this.data=Se(),this.namespace=e.namespace||"studio"}async init(){this.logger.debug(`initializing studio-state ${this.id}`)}async updateState(t,e){this.logger.debug(`updating studio-state ${t} with value ${e}`),e!==void 0?(await Wl(this.namespace,t,e),this.data[t]=e):(await Yl(this.namespace,t),this.data[t]=void 0)}async load(){this.logger.debug(`loading studio-state ${this.id}`);const t=await Ql(this.namespace);this.data.setValues(t)}handleStateUpdate(t){t.namespace===this.namespace&&(this.data[t.key]=t.value)}handleStateDelete(t){t.namespace===this.namespace&&(this.data[t.key]=void 0)}};Rn([K({topic:"/keyVal/set"})],Es.prototype,"handleStateUpdate",1);Rn([K({topic:"/keyVal/remove"})],Es.prototype,"handleStateDelete",1);Es=Rn([A(Zl)],Es);const kn=new ye({class:Es,type:Zl});var fe="INUMBER",jt="IOP1",Bt="IOP2",Kt="IOP3",ke="IVAR",ot="IVARNAME",_t="IFUNCALL",Kr="IFUNDEF",ne="IEXPR",Ln="IEXPREVAL",ct="IMEMBER",Hr="IENDSTATEMENT",St="IARRAY";function R(t,e){this.type=t,this.value=e??0}R.prototype.toString=function(){switch(this.type){case fe:case jt:case Bt:case Kt:case ke:case ot:case Hr:return this.value;case _t:return"CALL "+this.value;case Kr:return"DEF "+this.value;case St:return"ARRAY "+this.value;case ct:return"."+this.value;default:return"Invalid Instruction"}};function zr(t){return new R(jt,t)}function je(t){return new R(Bt,t)}function Xl(t){return new R(Kt,t)}function xo(t,e,s,r,o){for(var n=[],i=[],a,c,u,d,h=0;h<t.length;h++){var f=t[h],p=f.type;if(p===fe||p===ot)Array.isArray(f.value)?n.push.apply(n,xo(f.value.map(function(y){return new R(fe,y)}).concat(new R(St,f.value.length)),e,s,r,o)):n.push(f);else if(p===ke&&o.hasOwnProperty(f.value))f=new R(fe,o[f.value]),n.push(f);else if(p===Bt&&n.length>1)c=n.pop(),a=n.pop(),d=s[f.value],f=new R(fe,d(a.value,c.value)),n.push(f);else if(p===Kt&&n.length>2)u=n.pop(),c=n.pop(),a=n.pop(),f.value==="?"?n.push(a.value?c.value:u.value):(d=r[f.value],f=new R(fe,d(a.value,c.value,u.value)),n.push(f));else if(p===jt&&n.length>0)a=n.pop(),d=e[f.value],f=new R(fe,d(a.value)),n.push(f);else if(p===ne){for(;n.length>0;)i.push(n.shift());i.push(new R(ne,xo(f.value,e,s,r,o)))}else if(p===ct&&n.length>0)a=n.pop(),n.push(new R(fe,a.value[f.value]));else{for(;n.length>0;)i.push(n.shift());i.push(f)}}for(;n.length>0;)i.push(n.shift());return i}function Jl(t,e,s){for(var r=[],o=0;o<t.length;o++){var n=t[o],i=n.type;if(i===ke&&n.value===e)for(var a=0;a<s.tokens.length;a++){var c=s.tokens[a],u;c.type===jt?u=zr(c.value):c.type===Bt?u=je(c.value):c.type===Kt?u=Xl(c.value):u=new R(c.type,c.value),r.push(u)}else i===ne?r.push(new R(ne,Jl(n.value,e,s))):r.push(n)}return r}function Xe(t,e,s){var r=[],o,n,i,a,c,u;if(Fn(t))return Ae(t,s);for(var d=t.length,h=0;h<d;h++){var f=t[h],p=f.type;if(p===fe||p===ot)r.push(f.value);else if(p===Bt)n=r.pop(),o=r.pop(),f.value==="and"?r.push(o?!!Xe(n,e,s):!1):f.value==="or"?r.push(o?!0:!!Xe(n,e,s)):f.value==="="?(a=e.binaryOps[f.value],r.push(a(o,Xe(n,e,s),s))):(a=e.binaryOps[f.value],r.push(a(Ae(o,s),Ae(n,s))));else if(p===Kt)i=r.pop(),n=r.pop(),o=r.pop(),f.value==="?"?r.push(Xe(o?n:i,e,s)):(a=e.ternaryOps[f.value],r.push(a(Ae(o,s),Ae(n,s),Ae(i,s))));else if(p===ke)if(f.value in e.functions)r.push(e.functions[f.value]);else if(f.value in e.unaryOps&&e.parser.isOperatorEnabled(f.value))r.push(e.unaryOps[f.value]);else{var y=s[f.value];if(y!==void 0)r.push(y);else throw new Error("undefined variable: "+f.value)}else if(p===jt)o=r.pop(),a=e.unaryOps[f.value],r.push(a(Ae(o,s)));else if(p===_t){for(u=f.value,c=[];u-- >0;)c.unshift(Ae(r.pop(),s));if(a=r.pop(),a.apply&&a.call)r.push(a.apply(void 0,c));else throw new Error(a+" is not a function")}else if(p===Kr)r.push(function(){for(var w=r.pop(),E=[],_=f.value;_-- >0;)E.unshift(r.pop());var k=r.pop(),P=function(){for(var O=Object.assign({},s),S=0,H=E.length;S<H;S++)O[E[S]]=arguments[S];return Xe(w,e,O)};return Object.defineProperty(P,"name",{value:k,writable:!1}),s[k]=P,P}());else if(p===ne)r.push(Gm(f,e));else if(p===Ln)r.push(f);else if(p===ct)o=r.pop(),r.push(o[f.value]);else if(p===Hr)r.pop();else if(p===St){for(u=f.value,c=[];u-- >0;)c.unshift(r.pop());r.push(c)}else throw new Error("invalid Expression")}if(r.length>1)throw new Error("invalid Expression (parity)");return r[0]===0?0:Ae(r[0],s)}function Gm(t,e,s){return Fn(t)?t:{type:Ln,value:function(r){return Xe(t.value,e,r)}}}function Fn(t){return t&&t.type===Ln}function Ae(t,e){return Fn(t)?t.value(e):t}function Nn(t,e){for(var s=[],r,o,n,i,a,c,u=0;u<t.length;u++){var d=t[u],h=d.type;if(h===fe)typeof d.value=="number"&&d.value<0?s.push("("+d.value+")"):Array.isArray(d.value)?s.push("["+d.value.map(Bi).join(", ")+"]"):s.push(Bi(d.value));else if(h===Bt)o=s.pop(),r=s.pop(),i=d.value,e?i==="^"?s.push("Math.pow("+r+", "+o+")"):i==="and"?s.push("(!!"+r+" && !!"+o+")"):i==="or"?s.push("(!!"+r+" || !!"+o+")"):i==="||"?s.push("(function(a,b){ return Array.isArray(a) && Array.isArray(b) ? a.concat(b) : String(a) + String(b); }(("+r+"),("+o+")))"):i==="=="?s.push("("+r+" === "+o+")"):i==="!="?s.push("("+r+" !== "+o+")"):i==="["?s.push(r+"[("+o+") | 0]"):s.push("("+r+" "+i+" "+o+")"):i==="["?s.push(r+"["+o+"]"):s.push("("+r+" "+i+" "+o+")");else if(h===Kt)if(n=s.pop(),o=s.pop(),r=s.pop(),i=d.value,i==="?")s.push("("+r+" ? "+o+" : "+n+")");else throw new Error("invalid Expression");else if(h===ke||h===ot)s.push(d.value);else if(h===jt)r=s.pop(),i=d.value,i==="-"||i==="+"?s.push("("+i+r+")"):e?i==="not"?s.push("(!"+r+")"):i==="!"?s.push("fac("+r+")"):s.push(i+"("+r+")"):i==="!"?s.push("("+r+"!)"):s.push("("+i+" "+r+")");else if(h===_t){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());i=s.pop(),s.push(i+"("+a.join(", ")+")")}else if(h===Kr){for(o=s.pop(),c=d.value,a=[];c-- >0;)a.unshift(s.pop());r=s.pop(),e?s.push("("+r+" = function("+a.join(", ")+") { return "+o+" })"):s.push("("+r+"("+a.join(", ")+") = "+o+")")}else if(h===ct)r=s.pop(),s.push(r+"."+d.value);else if(h===St){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());s.push("["+a.join(", ")+"]")}else if(h===ne)s.push("("+Nn(d.value,e)+")");else if(h!==Hr)throw new Error("invalid Expression")}return s.length>1&&(e?s=[s.join(",")]:s=[s.join(";")]),String(s[0])}function Bi(t){return typeof t=="string"?JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"):t}function vt(t,e){for(var s=0;s<t.length;s++)if(t[s]===e)return!0;return!1}function Un(t,e,s){s=s||{};for(var r=!!s.withMembers,o=null,n=0;n<t.length;n++){var i=t[n];i.type===ke||i.type===ot?!r&&!vt(e,i.value)?e.push(i.value):(o!==null&&(vt(e,o)||e.push(o)),o=i.value):i.type===ct&&r&&o!==null?o+="."+i.value:i.type===ne?Un(i.value,e,s):o!==null&&(vt(e,o)||e.push(o),o=null)}o!==null&&!vt(e,o)&&e.push(o)}function we(t,e){this.tokens=t,this.parser=e,this.unaryOps=e.unaryOps,this.binaryOps=e.binaryOps,this.ternaryOps=e.ternaryOps,this.functions=e.functions}we.prototype.simplify=function(t){return t=t||{},new we(xo(this.tokens,this.unaryOps,this.binaryOps,this.ternaryOps,t),this.parser)};we.prototype.substitute=function(t,e){return e instanceof we||(e=this.parser.parse(String(e))),new we(Jl(this.tokens,t,e),this.parser)};we.prototype.evaluate=function(t){return t=t||{},Xe(this.tokens,this,t)};we.prototype.toString=function(){return Nn(this.tokens,!1)};we.prototype.symbols=function(t){t=t||{};var e=[];return Un(this.tokens,e,t),e};we.prototype.variables=function(t){t=t||{};var e=[];Un(this.tokens,e,t);var s=this.functions;return e.filter(function(r){return!(r in s)})};we.prototype.toJSFunction=function(t,e){var s=this,r=new Function(t,"with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return "+Nn(this.simplify(e).tokens,!0)+"; }");return function(){return r.apply(s,arguments)}};var Ms="TEOF",B="TOP",Vr="TNUMBER",eu="TSTRING",Le="TPAREN",It="TBRACKET",Gr="TCOMMA",jn="TNAME",Bn="TSEMICOLON";function tu(t,e,s){this.type=t,this.value=e,this.index=s}tu.prototype.toString=function(){return this.type+": "+this.value};function q(t,e){this.pos=0,this.current=null,this.unaryOps=t.unaryOps,this.binaryOps=t.binaryOps,this.ternaryOps=t.ternaryOps,this.consts=t.consts,this.expression=e,this.savedPosition=0,this.savedCurrent=null,this.options=t.options,this.parser=t}q.prototype.newToken=function(t,e,s){return new tu(t,e,s??this.pos)};q.prototype.save=function(){this.savedPosition=this.pos,this.savedCurrent=this.current};q.prototype.restore=function(){this.pos=this.savedPosition,this.current=this.savedCurrent};q.prototype.next=function(){if(this.pos>=this.expression.length)return this.newToken(Ms,"EOF");if(this.isWhitespace()||this.isComment())return this.next();if(this.isRadixInteger()||this.isNumber()||this.isOperator()||this.isString()||this.isParen()||this.isBracket()||this.isComma()||this.isSemicolon()||this.isNamedOp()||this.isConst()||this.isName())return this.current;this.parseError('Unknown character "'+this.expression.charAt(this.pos)+'"')};q.prototype.isString=function(){var t=!1,e=this.pos,s=this.expression.charAt(e);if(s==="'"||s==='"')for(var r=this.expression.indexOf(s,e+1);r>=0&&this.pos<this.expression.length;){if(this.pos=r+1,this.expression.charAt(r-1)!=="\\"){var o=this.expression.substring(e+1,r);this.current=this.newToken(eu,this.unescape(o),e),t=!0;break}r=this.expression.indexOf(s,r+1)}return t};q.prototype.isParen=function(){var t=this.expression.charAt(this.pos);return t==="("||t===")"?(this.current=this.newToken(Le,t),this.pos++,!0):!1};q.prototype.isBracket=function(){var t=this.expression.charAt(this.pos);return(t==="["||t==="]")&&this.isOperatorEnabled("[")?(this.current=this.newToken(It,t),this.pos++,!0):!1};q.prototype.isComma=function(){var t=this.expression.charAt(this.pos);return t===","?(this.current=this.newToken(Gr,","),this.pos++,!0):!1};q.prototype.isSemicolon=function(){var t=this.expression.charAt(this.pos);return t===";"?(this.current=this.newToken(Bn,";"),this.pos++,!0):!1};q.prototype.isConst=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&s!=="."&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(r in this.consts)return this.current=this.newToken(Vr,this.consts[r]),this.pos+=r.length,!0}return!1};q.prototype.isNamedOp=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(this.isOperatorEnabled(r)&&(r in this.binaryOps||r in this.unaryOps||r in this.ternaryOps))return this.current=this.newToken(B,r),this.pos+=r.length,!0}return!1};q.prototype.isName=function(){for(var t=this.pos,e=t,s=!1;e<this.expression.length;e++){var r=this.expression.charAt(e);if(r.toUpperCase()===r.toLowerCase()){if(e===this.pos&&(r==="$"||r==="_")){r==="_"&&(s=!0);continue}else if(e===this.pos||!s||r!=="_"&&(r<"0"||r>"9"))break}else s=!0}if(s){var o=this.expression.substring(t,e);return this.current=this.newToken(jn,o),this.pos+=o.length,!0}return!1};q.prototype.isWhitespace=function(){for(var t=!1,e=this.expression.charAt(this.pos);(e===" "||e===" "||e===`
78
- `||e==="\r")&&(t=!0,this.pos++,!(this.pos>=this.expression.length));)e=this.expression.charAt(this.pos);return t};var qm=/^[0-9a-f]{4}$/i;q.prototype.unescape=function(t){var e=t.indexOf("\\");if(e<0)return t;for(var s=t.substring(0,e);e>=0;){var r=t.charAt(++e);switch(r){case"'":s+="'";break;case'"':s+='"';break;case"\\":s+="\\";break;case"/":s+="/";break;case"b":s+="\b";break;case"f":s+="\f";break;case"n":s+=`
79
- `;break;case"r":s+="\r";break;case"t":s+=" ";break;case"u":var o=t.substring(e+1,e+5);qm.test(o)||this.parseError("Illegal escape sequence: \\u"+o),s+=String.fromCharCode(parseInt(o,16)),e+=4;break;default:throw this.parseError('Illegal escape sequence: "\\'+r+'"')}++e;var n=t.indexOf("\\",e);s+=t.substring(e,n<0?t.length:n),e=n}return s};q.prototype.isComment=function(){var t=this.expression.charAt(this.pos);return t==="/"&&this.expression.charAt(this.pos+1)==="*"?(this.pos=this.expression.indexOf("*/",this.pos)+2,this.pos===1&&(this.pos=this.expression.length),!0):!1};q.prototype.isRadixInteger=function(){var t=this.pos;if(t>=this.expression.length-2||this.expression.charAt(t)!=="0")return!1;++t;var e,s;if(this.expression.charAt(t)==="x")e=16,s=/^[0-9a-f]$/i,++t;else if(this.expression.charAt(t)==="b")e=2,s=/^[01]$/i,++t;else return!1;for(var r=!1,o=t;t<this.expression.length;){var n=this.expression.charAt(t);if(s.test(n))t++,r=!0;else break}return r&&(this.current=this.newToken(Vr,parseInt(this.expression.substring(o,t),e)),this.pos=t),r};q.prototype.isNumber=function(){for(var t=!1,e=this.pos,s=e,r=e,o=!1,n=!1,i;e<this.expression.length&&(i=this.expression.charAt(e),i>="0"&&i<="9"||!o&&i===".");)i==="."?o=!0:n=!0,e++,t=n;if(t&&(r=e),i==="e"||i==="E"){e++;for(var a=!0,c=!1;e<this.expression.length;){if(i=this.expression.charAt(e),a&&(i==="+"||i==="-"))a=!1;else if(i>="0"&&i<="9")c=!0,a=!1;else break;e++}c||(e=r)}return t?(this.current=this.newToken(Vr,parseFloat(this.expression.substring(s,e))),this.pos=e):this.pos=r,t};q.prototype.isOperator=function(){var t=this.pos,e=this.expression.charAt(this.pos);if(e==="+"||e==="-"||e==="*"||e==="/"||e==="%"||e==="^"||e==="?"||e===":"||e===".")this.current=this.newToken(B,e);else if(e==="∙"||e==="•")this.current=this.newToken(B,"*");else if(e===">")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(B,">="),this.pos++):this.current=this.newToken(B,">");else if(e==="<")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(B,"<="),this.pos++):this.current=this.newToken(B,"<");else if(e==="|")if(this.expression.charAt(this.pos+1)==="|")this.current=this.newToken(B,"||"),this.pos++;else return!1;else if(e==="=")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(B,"=="),this.pos++):this.current=this.newToken(B,e);else if(e==="!")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(B,"!="),this.pos++):this.current=this.newToken(B,e);else return!1;return this.pos++,this.isOperatorEnabled(this.current.value)?!0:(this.pos=t,!1)};q.prototype.isOperatorEnabled=function(t){return this.parser.isOperatorEnabled(t)};q.prototype.getCoordinates=function(){var t=0,e,s=-1;do t++,e=this.pos-s,s=this.expression.indexOf(`
80
- `,s+1);while(s>=0&&s<this.pos);return{line:t,column:e}};q.prototype.parseError=function(t){var e=this.getCoordinates();throw new Error("parse error ["+e.line+":"+e.column+"]: "+t)};function z(t,e,s){this.parser=t,this.tokens=e,this.current=null,this.nextToken=null,this.next(),this.savedCurrent=null,this.savedNextToken=null,this.allowMemberAccess=s.allowMemberAccess!==!1}z.prototype.next=function(){return this.current=this.nextToken,this.nextToken=this.tokens.next()};z.prototype.tokenMatches=function(t,e){return typeof e>"u"?!0:Array.isArray(e)?vt(e,t.value):typeof e=="function"?e(t):t.value===e};z.prototype.save=function(){this.savedCurrent=this.current,this.savedNextToken=this.nextToken,this.tokens.save()};z.prototype.restore=function(){this.tokens.restore(),this.current=this.savedCurrent,this.nextToken=this.savedNextToken};z.prototype.accept=function(t,e){return this.nextToken.type===t&&this.tokenMatches(this.nextToken,e)?(this.next(),!0):!1};z.prototype.expect=function(t,e){if(!this.accept(t,e)){var s=this.tokens.getCoordinates();throw new Error("parse error ["+s.line+":"+s.column+"]: Expected "+(e||t))}};z.prototype.parseAtom=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.accept(jn)||this.accept(B,s))t.push(new R(ke,this.current.value));else if(this.accept(Vr))t.push(new R(fe,this.current.value));else if(this.accept(eu))t.push(new R(fe,this.current.value));else if(this.accept(Le,"("))this.parseExpression(t),this.expect(Le,")");else if(this.accept(It,"["))if(this.accept(It,"]"))t.push(new R(St,0));else{var r=this.parseArrayList(t);t.push(new R(St,r))}else throw new Error("unexpected "+this.nextToken)};z.prototype.parseExpression=function(t){var e=[];this.parseUntilEndStatement(t,e)||(this.parseVariableAssignmentExpression(e),!this.parseUntilEndStatement(t,e)&&this.pushExpression(t,e))};z.prototype.pushExpression=function(t,e){for(var s=0,r=e.length;s<r;s++)t.push(e[s])};z.prototype.parseUntilEndStatement=function(t,e){return this.accept(Bn)?(this.nextToken&&this.nextToken.type!==Ms&&!(this.nextToken.type===Le&&this.nextToken.value===")")&&e.push(new R(Hr)),this.nextToken.type!==Ms&&this.parseExpression(e),t.push(new R(ne,e)),!0):!1};z.prototype.parseArrayList=function(t){for(var e=0;!this.accept(It,"]");)for(this.parseExpression(t),++e;this.accept(Gr);)this.parseExpression(t),++e;return e};z.prototype.parseVariableAssignmentExpression=function(t){for(this.parseConditionalExpression(t);this.accept(B,"=");){var e=t.pop(),s=[],r=t.length-1;if(e.type===_t){if(!this.tokens.isOperatorEnabled("()="))throw new Error("function definition is not permitted");for(var o=0,n=e.value+1;o<n;o++){var i=r-o;t[i].type===ke&&(t[i]=new R(ot,t[i].value))}this.parseVariableAssignmentExpression(s),t.push(new R(ne,s)),t.push(new R(Kr,e.value));continue}if(e.type!==ke&&e.type!==ct)throw new Error("expected variable for assignment");this.parseVariableAssignmentExpression(s),t.push(new R(ot,e.value)),t.push(new R(ne,s)),t.push(je("="))}};z.prototype.parseConditionalExpression=function(t){for(this.parseOrExpression(t);this.accept(B,"?");){var e=[],s=[];this.parseConditionalExpression(e),this.expect(B,":"),this.parseConditionalExpression(s),t.push(new R(ne,e)),t.push(new R(ne,s)),t.push(Xl("?"))}};z.prototype.parseOrExpression=function(t){for(this.parseAndExpression(t);this.accept(B,"or");){var e=[];this.parseAndExpression(e),t.push(new R(ne,e)),t.push(je("or"))}};z.prototype.parseAndExpression=function(t){for(this.parseComparison(t);this.accept(B,"and");){var e=[];this.parseComparison(e),t.push(new R(ne,e)),t.push(je("and"))}};var Ym=["==","!=","<","<=",">=",">","in"];z.prototype.parseComparison=function(t){for(this.parseAddSub(t);this.accept(B,Ym);){var e=this.current;this.parseAddSub(t),t.push(je(e.value))}};var Wm=["+","-","||"];z.prototype.parseAddSub=function(t){for(this.parseTerm(t);this.accept(B,Wm);){var e=this.current;this.parseTerm(t),t.push(je(e.value))}};var Qm=["*","/","%"];z.prototype.parseTerm=function(t){for(this.parseFactor(t);this.accept(B,Qm);){var e=this.current;this.parseFactor(t),t.push(je(e.value))}};z.prototype.parseFactor=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.save(),this.accept(B,s)){if(this.current.value!=="-"&&this.current.value!=="+"){if(this.nextToken.type===Le&&this.nextToken.value==="("){this.restore(),this.parseExponential(t);return}else if(this.nextToken.type===Bn||this.nextToken.type===Gr||this.nextToken.type===Ms||this.nextToken.type===Le&&this.nextToken.value===")"){this.restore(),this.parseAtom(t);return}}var r=this.current;this.parseFactor(t),t.push(zr(r.value))}else this.parseExponential(t)};z.prototype.parseExponential=function(t){for(this.parsePostfixExpression(t);this.accept(B,"^");)this.parseFactor(t),t.push(je("^"))};z.prototype.parsePostfixExpression=function(t){for(this.parseFunctionCall(t);this.accept(B,"!");)t.push(zr("!"))};z.prototype.parseFunctionCall=function(t){var e=this.tokens.unaryOps;function s(n){return n.value in e}if(this.accept(B,s)){var r=this.current;this.parseAtom(t),t.push(zr(r.value))}else for(this.parseMemberExpression(t);this.accept(Le,"(");)if(this.accept(Le,")"))t.push(new R(_t,0));else{var o=this.parseArgumentList(t);t.push(new R(_t,o))}};z.prototype.parseArgumentList=function(t){for(var e=0;!this.accept(Le,")");)for(this.parseExpression(t),++e;this.accept(Gr);)this.parseExpression(t),++e;return e};z.prototype.parseMemberExpression=function(t){for(this.parseAtom(t);this.accept(B,".")||this.accept(It,"[");){var e=this.current;if(e.value==="."){if(!this.allowMemberAccess)throw new Error('unexpected ".", member access is not permitted');this.expect(jn),t.push(new R(ct,this.current.value))}else if(e.value==="["){if(!this.tokens.isOperatorEnabled("["))throw new Error('unexpected "[]", arrays are disabled');this.parseExpression(t),this.expect(It,"]"),t.push(je("["))}else throw new Error("unexpected symbol: "+e.value)}};function Zm(t,e){return Number(t)+Number(e)}function Xm(t,e){return t-e}function Jm(t,e){return t*e}function ey(t,e){return t/e}function ty(t,e){return t%e}function sy(t,e){return Array.isArray(t)&&Array.isArray(e)?t.concat(e):""+t+e}function ry(t,e){return t===e}function oy(t,e){return t!==e}function ny(t,e){return t>e}function iy(t,e){return t<e}function ay(t,e){return t>=e}function cy(t,e){return t<=e}function ly(t,e){return!!(t&&e)}function uy(t,e){return!!(t||e)}function dy(t,e){return vt(e,t)}function hy(t){return(Math.exp(t)-Math.exp(-t))/2}function fy(t){return(Math.exp(t)+Math.exp(-t))/2}function py(t){return t===1/0?1:t===-1/0?-1:(Math.exp(t)-Math.exp(-t))/(Math.exp(t)+Math.exp(-t))}function gy(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))}function my(t){return Math.log(t+Math.sqrt(t*t-1))}function yy(t){return Math.log((1+t)/(1-t))/2}function Ki(t){return Math.log(t)*Math.LOG10E}function by(t){return-t}function vy(t){return!t}function wy(t){return t<0?Math.ceil(t):Math.floor(t)}function Ey(t){return Math.random()*(t||1)}function Hi(t){return Kn(t+1)}function My(t){return isFinite(t)&&t===Math.round(t)}var Ty=4.7421875,po=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function Kn(t){var e,s;if(My(t)){if(t<=0)return isFinite(t)?1/0:NaN;if(t>171)return 1/0;for(var r=t-2,o=t-1;r>1;)o*=r,r--;return o===0&&(o=1),o}if(t<.5)return Math.PI/(Math.sin(Math.PI*t)*Kn(1-t));if(t>=171.35)return 1/0;if(t>85){var n=t*t,i=n*t,a=i*t,c=a*t;return Math.sqrt(2*Math.PI/t)*Math.pow(t/Math.E,t)*(1+1/(12*t)+1/(288*n)-139/(51840*i)-571/(2488320*a)+163879/(209018880*c)+5246819/(75246796800*c*t))}--t,s=po[0];for(var u=1;u<po.length;++u)s+=po[u]/(t+u);return e=t+Ty+.5,Math.sqrt(2*Math.PI)*Math.pow(e,t+.5)*Math.exp(-e)*s}function _y(t){return Array.isArray(t)?t.length:String(t).length}function zi(){for(var t=0,e=0,s=0;s<arguments.length;s++){var r=Math.abs(arguments[s]),o;e<r?(o=e/r,t=t*o*o+1,e=r):r>0?(o=r/e,t+=o*o):t+=r}return e===1/0?1/0:e*Math.sqrt(t)}function Vi(t,e,s){return t?e:s}function Sy(t,e){return typeof e>"u"||+e==0?Math.round(t):(t=+t,e=-+e,isNaN(t)||!(typeof e=="number"&&e%1===0)?NaN:(t=t.toString().split("e"),t=Math.round(+(t[0]+"e"+(t[1]?+t[1]-e:-e))),t=t.toString().split("e"),+(t[0]+"e"+(t[1]?+t[1]+e:e))))}function Iy(t,e,s){return s&&(s[t]=e),e}function Oy(t,e){return t[e|0]}function $y(t){return arguments.length===1&&Array.isArray(t)?Math.max.apply(Math,t):Math.max.apply(Math,arguments)}function Cy(t){return arguments.length===1&&Array.isArray(t)?Math.min.apply(Math,t):Math.min.apply(Math,arguments)}function xy(t,e){if(typeof t!="function")throw new Error("First argument to map is not a function");if(!Array.isArray(e))throw new Error("Second argument to map is not an array");return e.map(function(s,r){return t(s,r)})}function Dy(t,e,s){if(typeof t!="function")throw new Error("First argument to fold is not a function");if(!Array.isArray(s))throw new Error("Second argument to fold is not an array");return s.reduce(function(r,o,n){return t(r,o,n)},e)}function Ay(t,e){if(typeof t!="function")throw new Error("First argument to filter is not a function");if(!Array.isArray(e))throw new Error("Second argument to filter is not an array");return e.filter(function(s,r){return t(s,r)})}function Py(t,e){if(!(Array.isArray(e)||typeof e=="string"))throw new Error("Second argument to indexOf is not a string or array");return e.indexOf(t)}function Ry(t,e){if(!Array.isArray(e))throw new Error("Second argument to join is not an array");return e.join(t)}function ky(t){return(t>0)-(t<0)||+t}var Gi=1/3;function Ly(t){return t<0?-Math.pow(-t,Gi):Math.pow(t,Gi)}function Fy(t){return Math.exp(t)-1}function Ny(t){return Math.log(1+t)}function Uy(t){return Math.log(t)/Math.LN2}function lt(t){this.options=t||{},this.unaryOps={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:Math.sinh||hy,cosh:Math.cosh||fy,tanh:Math.tanh||py,asinh:Math.asinh||gy,acosh:Math.acosh||my,atanh:Math.atanh||yy,sqrt:Math.sqrt,cbrt:Math.cbrt||Ly,log:Math.log,log2:Math.log2||Uy,ln:Math.log,lg:Math.log10||Ki,log10:Math.log10||Ki,expm1:Math.expm1||Fy,log1p:Math.log1p||Ny,abs:Math.abs,ceil:Math.ceil,floor:Math.floor,round:Math.round,trunc:Math.trunc||wy,"-":by,"+":Number,exp:Math.exp,not:vy,length:_y,"!":Hi,sign:Math.sign||ky},this.binaryOps={"+":Zm,"-":Xm,"*":Jm,"/":ey,"%":ty,"^":Math.pow,"||":sy,"==":ry,"!=":oy,">":ny,"<":iy,">=":ay,"<=":cy,and:ly,or:uy,in:dy,"=":Iy,"[":Oy},this.ternaryOps={"?":Vi},this.functions={random:Ey,fac:Hi,min:Cy,max:$y,hypot:Math.hypot||zi,pyt:Math.hypot||zi,pow:Math.pow,atan2:Math.atan2,if:Vi,gamma:Kn,roundTo:Sy,map:xy,fold:Dy,filter:Ay,indexOf:Py,join:Ry},this.consts={E:Math.E,PI:Math.PI,true:!0,false:!1}}lt.prototype.parse=function(t){var e=[],s=new z(this,new q(this,t),{allowMemberAccess:this.options.allowMemberAccess});return s.parseExpression(e),s.expect(Ms,"EOF"),new we(e,this)};lt.prototype.evaluate=function(t,e){return this.parse(t).evaluate(e)};var su=new lt;lt.parse=function(t){return su.parse(t)};lt.evaluate=function(t,e){return su.parse(t).evaluate(e)};var qi={"+":"add","-":"subtract","*":"multiply","/":"divide","%":"remainder","^":"power","!":"factorial","<":"comparison",">":"comparison","<=":"comparison",">=":"comparison","==":"comparison","!=":"comparison","||":"concatenate",and:"logical",or:"logical",not:"logical","?":"conditional",":":"conditional","=":"assignment","[":"array","()=":"fndef"};function jy(t){return qi.hasOwnProperty(t)?qi[t]:t}lt.prototype.isOperatorEnabled=function(t){var e=jy(t),s=this.options.operators||{};return!(e in s)||!!s[e]};var By=Object.defineProperty,Ky=Object.getOwnPropertyDescriptor,Hy=(t,e,s)=>e in t?By(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,zy=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ky(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o},Vy=(t,e,s)=>(Hy(t,e+"",s),s);const Gy="kos-expression-evaluator-model";class qy{constructor(e,s,r,o){l(this,"name");l(this,"expression");l(this,"expr");l(this,"getContextData",null);l(this,"_lastResult",{value:void 0});this.name=e,this.expression=s,this.expr=r,this.getContextData=o,this._lastResult={value:void 0,error:void 0}}get result(){return this._lastResult}updateResult(e){this._lastResult=e}evaluate(e){try{return{value:this.expr.evaluate(e),error:void 0}}catch(s){return{value:void 0,error:s instanceof Error?s.message:String(s)}}}}let lr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"parser");l(this,"_data");l(this,"_expressions",new Map);l(this,"_results");l(this,"_contextRevision",0);this.id=t,this.logger=s.logger,this._data=Se(),this._results=Se(),this.parser=new lt}get data(){return this._data}get contextRevision(){return this._contextRevision}setContextData(t){this._data.setValues(t),J(()=>{this._contextRevision++,this.logger.debug("Context revision incremented to:",this._contextRevision)})}updateContextValue(t,e){this._data[t]=e}updateNestedValue(t,e){const s=t.split("."),r=s.pop();if(!r){this.logger.error(`Invalid path "${t}" - cannot be empty`);return}let o=this._data;for(const n of s)(o[n]===void 0||o[n]===null)&&(o[n]={}),o=o[n];o[r]=e,this.logger.debug(`Updated nested context value "${t}" to:`,e)}addModelToContext(t,e){this._data[t]=e}addExpression(t,e){try{const s=this.parser.parse(e),r=new qy(t,e,s,()=>this.data);this._expressions.set(t,r),this.evaluateExpression(t),this.logger.debug(`Added expression "${t}": ${e}`)}catch(s){throw this.logger.error(`Failed to parse expression "${t}"`,s),s}}removeExpression(t){const e=this._expressions.delete(t);return e?(delete this._results[t],this.logger.debug(`Removed expression "${t}"`)):this.logger.warn(`Attempted to remove non-existent expression "${t}". Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpression(t){const e=this._expressions.get(t);return e||this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpressionValue(t){const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`);return}return e.result}getCachedExpressionValue(t){const e=this._expressions.get(t);if(e)return e.result}get expressions(){return Array.from(this._expressions.values())}get expressionNames(){return Array.from(this._expressions.keys())}get results(){return this.evaluateAllExpressions(),this._results}evaluateAllExpressions(){Array.from(this._expressions.keys()).forEach(e=>{this._expressions.get(e)&&this.evaluateExpression(e)})}evaluateExpression(t){this.logger.debug(`Evaluating expression: ${String(t)}`);const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${String(t)}" not found`);return}const s=e.evaluate(this.data);this.logger.debug(`Expression "${String(t)}" evaluated to:`,s);const r=e.result;(s.value!==r.value||s.error!==r.error)&&(this.logger.debug(`Expression "${String(t)}" result changed from`,r,"to",s),e.updateResult(s),this.updateResult(t,s))}updateResult(t,e){this.logger.debug(`ExpressionEvaluator.updateResult called for "${t}":`,e),J(()=>{this._results[t]=e})}createExpression(t){const e=nt();return this.addExpression(e,t),e}};Vy(lr,"Registration");lr=zy([A({modelTypeId:Gy,singleton:!1})],lr);const ru=lr.Registration,Yy=m.createLogger({name:"kos-log-manager-service",group:"Services"}),Wy="/api/kos/logs/overrides",ou=async()=>(Yy.debug("sending GET for kos-log-manager"),await xe.get(Wy)),Qy=Object.freeze(Object.defineProperty({__proto__:null,getLogOverrides:ou},Symbol.toStringTag,{value:"Module"}));var Zy=Object.defineProperty,Xy=Object.getOwnPropertyDescriptor,qr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Xy(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Zy(e,s,o),o};const nu="kos-log-manager-model",Jy="/kos/logs/override/add/*",eb="/kos/logs/override/remove/*",tb=t=>{if(typeof t=="string")return t;if(typeof t=="number")switch(t){case 0:return"trace";case 1:return"debug";case 2:return"info";case 3:return"warn";case 4:return"error";default:return"info"}return"info"};let Ot=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_overrides");this.id=t,this.logger=s.logger,this._overrides=new vn}updateModel(t){}resolveLoggers(){const t=m.getLoggers(),s=Object.entries(t).map(([r,o])=>({name:r,level:tb(o.getLevel())})).reduce((r,{name:o,level:n})=>(r[o]={name:o,level:n},r),{});return this.logger.debug("Resolved loggers",s),s}async getAllLoggers(t,e){const s=Object.values(this.resolveLoggers());return e==null||e.send(s),s}setLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=m.getLoggers()[r.name];if(!o){this.logger.debug(`Logger ${r.name} not found`);return}o.setLevel(t.level)});const s=m.getLoggers()[t.name];if(!s){this.logger.debug(`Logger ${t.name} not found`);return}s.setLevel(t.level),globalThis.kos.logOverrides=this._overrides.data}resetLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=m.getLoggers()[r.name];o||this.logger.debug(`Logger ${r.name} not found`),o==null||o.resetLevel()});const s=m.getLoggers()[t.name];s||this.logger.debug(`Logger ${t.name} not found`),s==null||s.resetLevel(),globalThis.kos.logOverrides=this._overrides.data}handleOverrideAdded(t,e){var s;this.logger.debug(`Override received for node type ${((s=e.wildcardCapture)==null?void 0:s.nodeType)??"unknown"}`),this._overrides.addModel({...t,id:t.name}),this.setLogLevels(t)}handleOverrideRemoved(t){this._overrides.removeModel(t.name),this.resetLogLevels(t)}async init(){this.logger.debug(`initializing kos-log-manager ${this.id}`)}async load(){this.logger.debug(`loading kos-log-manager ${this.id}`),this.resolveLoggers();const[t,e]=await ou();if(t){this.logger.error("Failed to load log overrides",t);return}const s=(e==null?void 0:e.filter(r=>{var o;return((o=r.type)==null?void 0:o.toUpperCase())==="UI"}).map(r=>({name:r.name??"",type:r.type??"",level:r.level??"info",id:r.name||""})))??[];this._overrides.addAll(s),s.forEach(r=>{this.setLogLevels(r)})}};qr([hc("/api/kos/ui/loggers")],Ot.prototype,"getAllLoggers",1);qr([K({topic:Jy,websocket:!0,wildcardName:"nodeType"})],Ot.prototype,"handleOverrideAdded",1);qr([K({topic:eb,websocket:!0,wildcardName:"nodeType"})],Ot.prototype,"handleOverrideRemoved",1);Ot=qr([A(nu)],Ot);const iu=new _e({class:Ot,type:nu}),{URL:ks}=ae(),{postModel:Hn,getOne:sb}=oe.build({basePath:`${ks}/api/kos-time`});m.createLogger({name:"kos-time-service",group:"Services"});const au=async t=>{const e=await Hn({model:t,urlOverride:`${ks}/api/kos/time/time`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},cu=async t=>{const e=await Hn({model:t,urlOverride:`${ks}/api/kos/time/date`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},lu=async t=>{const e=await Hn({model:{},urlOverride:`${ks}/api/kos/time/timezone?tz=${t}`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set timezone");return e.data},uu=async()=>{const t=await sb({urlOverride:`${ks}/api/kos/time/timezone`});if((t==null?void 0:t.status)!==200)throw Error("Failed to set timezone");return t.data.timeZone},rb=Object.freeze(Object.defineProperty({__proto__:null,getTimezone:uu,setDate:cu,setTime:au,setTimezone:lu},Symbol.toStringTag,{value:"Module"}));var ob=Object.defineProperty,nb=Object.getOwnPropertyDescriptor,Yr=(t,e,s,r)=>{for(var o=r>1?void 0:r?nb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ob(e,s,o),o};const Qt="kos-time-model",ib="/kos/time/time",ab="/kos/time/day",cb="/kos/time/timezone";let $t=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"timezone");this.id=t,this.logger=s.logger,this.timezone=""}async updateSystemTime(t){await au(t)}async updateSystemDate(t){await cu(t)}async updateSystemTimezone(t){await lu(t)}handleTimeChange(){G(ps.TIME_CHANGE,{})}handleDayChange(){G(ps.DAY_CHANGE,{})}async handleTimeZoneChange(){await this.retrieveTimezone(),G(ps.TIMEZONE_CHANGE,{})}async init(){this.logger.debug(`initializing kos-time ${this.id}`)}async retrieveTimezone(){const t=await uu();this.setTimezone(t)}setTimezone(t){this.timezone=t}async load(){this.logger.debug(`loading kos-time ${this.id}`),this.retrieveTimezone()}};Yr([K({topic:ib,websocket:!0})],$t.prototype,"handleTimeChange",1);Yr([K({topic:ab,websocket:!0})],$t.prototype,"handleDayChange",1);Yr([K({topic:cb,websocket:!0})],$t.prototype,"handleTimeZoneChange",1);$t=Yr([A(Qt)],$t);const ur={registration:{[Qt]:{class:$t,singleton:!0}},type:Qt,predicate:Te(Qt),factory:ie.Singleton.create(Qt)};var lb=Object.defineProperty,ub=Object.getOwnPropertyDescriptor,du=(t,e,s,r)=>{for(var o=r>1?void 0:r?ub(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&lb(e,s,o),o};const hu="log-block-container-model";let dr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t,sortKey:"blockNum"})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing log-block-container container ${this.id}`)}async load(){this.logger.debug(`loading log-block-container container ${this.id}`)}};du([$e],dr.prototype,"_models",2);dr=du([A(hu)],dr);const db=m.createLogger({name:"log-stream-container-service",group:"Services"}),fu=()=>{var r;const t=me(),s=(t==null?void 0:t.connId)||((r=window==null?void 0:window.kosBridge)==null?void 0:r.call(window,"connId"));return m.error(`getKosConnectionId: ${s}`),s},Ht=fu(),hb="/api/kos/logs/node/{nodeId}/streams",pu=async()=>(db.debug("sending GET for log-stream-container"),await xe.get(hb,{path:{nodeId:"primary"}},{destinationAddress:Ht})),gu=async(t,e="primary")=>{await xe.post("/api/kos/logs/node/{nodeId}/{stream}/subscribe",{path:{nodeId:e,stream:t}},void 0,{destinationAddress:Ht})},mu=async t=>{await xe.post("/api/kos/logs/node/{nodeId}/{stream}/unsubscribe",{path:{nodeId:"primary",stream:t}},void 0,{destinationAddress:Ht})},fb=async()=>{await xe.post("/api/kos/logs/overrides",{},{level:"WARN",name:"com.example",nodeType:"java",type:"package"},{destinationAddress:Ht})},yu=async t=>await xe.get("/api/kos/logs/node/{nodeId}/{stream}/blocks",{path:{nodeId:"primary",stream:t}},{destinationAddress:Ht}),bu=async(t,e)=>await xe.get("/api/kos/logs/node/{nodeId}/{stream}/blocks/{blockId}",{path:{nodeId:"primary",stream:t,blockId:e}},{destinationAddress:Ht}),pb=Object.freeze(Object.defineProperty({__proto__:null,createOverride:fb,getKosConnectionId:fu,getLogStreamBlock:bu,getLogStreamBlocks:yu,getLogStreams:pu,subscribeToLogStream:gu,unsubscribeFromLogStream:mu},Symbol.toStringTag,{value:"Module"}));var gb=Object.getOwnPropertyDescriptor,mb=(t,e,s,r)=>{for(var o=r>1?void 0:r?gb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const vu="log-block-model";let Do=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"stream");l(this,"blockNum");l(this,"startLineNum");l(this,"endLineNum");l(this,"startTime");l(this,"endTime");l(this,"lineCount");l(this,"lines");l(this,"inc");this.id=t,this.logger=s.logger,this.nodeId=e.nodeId,this.stream=e.stream,this.blockNum=e.blockNum,this.startLineNum=e.startLineNum,this.endLineNum=e.endLineNum,this.startTime=e.startTime,this.endTime=e.endTime,this.lineCount=e.lineCount,this.lines=[],this.inc=0}async syncLines(){const[t,e]=await bu(this.stream,this.blockNum);if(t){this.logger.error(`Failed to get log block ${this.blockNum}`);return}e&&this.addLines(e.lines,!0)}updateModel(t){this.startLineNum=t.startLineNum,this.endLineNum=t.endLineNum,this.startTime=t.startTime,this.endTime=t.endTime,this.lineCount=t.lineCount}addLines(t,e){const s=e?[]:this.lines;this.lines=[...s,...t],this.inc+=1}async init(){this.logger.debug(`initializing log-block ${this.id}`)}async load(){this.logger.debug(`loading log-block ${this.id}`)}};Do=mb([A(vu)],Do);const Ts=new ye({class:Do,type:vu}),Wr=new ye({class:dr,type:hu});Wr.addRelatedModel(Ts);var yb=Object.defineProperty,bb=Object.getOwnPropertyDescriptor,wu=(t,e,s,r)=>{for(var o=r>1?void 0:r?bb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&yb(e,s,o),o};const Eu="log-stream-model";let hr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"_blocks");l(this,"name");l(this,"currentBlockId");l(this,"isResetting");l(this,"generatorInstance");l(this,"shouldStop",!1);this.id=t,this.logger=s.logger,this.currentBlockId="",this.name=e.name,this.nodeId=e.nodeId,this.isResetting=!0,this._blocks=Wr.instance(`${t}-blocks`).options({}).build()}get firstLineNum(){const t=this.populated[0];return t?t.startLineNum:0}get currentBlock(){const t=this.currentBlockId;return this._blocks.getModel(t)}get populated(){return this._blocks.data.filter(t=>t.lines.length>0)}get blocks(){return this._blocks.data}get totalLineCount(){return this.populated.reduce((t,e)=>t+e.lineCount,0)}accept(t){t.visit(this)}updateBlock(t){var r;let e=this._blocks.models.getModel(`${t.stream}-block-${t.blockNum}`);const s={nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)};e||(e=Ts.instance(`${t.stream}-block-${t.blockNum}`).options(s).build(),this._blocks.addModel(e)),e&&e.updateModel(s),(!this.currentBlock||t.blockNum>=((r=this.currentBlock)==null?void 0:r.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}addBlock(t){var s;const e=Ts.instance(`${t.stream}-block-${t.blockNum}`).options({nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)}).build();this._blocks.addModel(e),(!this.currentBlock||t.blockNum>=((s=this.currentBlock)==null?void 0:s.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}removeBlock(t){this._blocks.models.removeModel(`${this.name}-block-${t}`)}async subscribe(){await gu(this.name)}async unsubscribe(){await mu(this.name)}async reset(){if(this.isResetting=!0,this.populated.length>0)return;this.logger.debug(`resetting log-stream ${this.id}`);for(const e of this._blocks.models.data)e.lines=[];const t=this._blocks.data[this._blocks.data.length-1];t&&await t.syncLines(),this.isResetting=!1}async init(){this.logger.debug(`initializing log-stream ${this.id}`)}async load(){this.logger.debug(`loading log-stream ${this.id}`);const[t,e]=await yu(this.name);if(t){this.logger.error(`Error loading log stream: ${t}`);return}if(e)for(const r of e)this.addBlock(r);const s=this._blocks.data[this._blocks.data.length-1];if(s&&await s.syncLines(),this._blocks.data.length>1){const r=this._blocks.data[this._blocks.data.length-2];r&&await r.syncLines()}}start(){return this.shouldStop=!1,this.generatorInstance=this.streamLogs(),this.generatorInstance}stop(){var t;this.shouldStop=!0,(t=this.generatorInstance)==null||t.next(),console.log("Requested generator stop.")}async*streamLogs(){const t=[];let e=null,s=0,r=this.currentBlockId;const o=vl(()=>{const n=this.currentBlock;return n?{blockId:this.currentBlockId,lineCount:n.lines.length}:null},n=>{const i=this.currentBlock;if(i)if(r!==(n==null?void 0:n.blockId))r=n==null?void 0:n.blockId,s=0,t.push(...i.lines);else{const a=i.lines.slice(s);t.push(...a),s+=a.length}e&&(e(),e=null)},{fireImmediately:!0});try{for(const n of this.populated.filter(i=>i!==this.currentBlock))for(const i of n.lines)yield i;for(;;)for(t.length===0&&await new Promise(n=>e=n);t.length>0;)yield t.shift()}finally{o()}}};wu([$e],hr.prototype,"_blocks",2);hr=wu([A(Eu)],hr);const gs=new ye({class:hr,type:Eu});var vb=Object.defineProperty,wb=Object.getOwnPropertyDescriptor,ut=(t,e,s,r)=>{for(var o=r>1?void 0:r?wb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&vb(e,s,o),o};const Mu="log-stream-container-model",Eb="/kos/logs/subscription/addBlock/*",Mb="/kos/logs/subscription/updateBlock/*",Tb="/kos/logs/subscription/removeBlock/*",_b="/kos/logs/subscription/lines/*",Tu="/kos/logs/streams/add/*";let Fe=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"selectedStream");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t}),this.selectedStream=void 0}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}updateModel(t){}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}updateSelectedStream(t){this.selectedStream=t}handleStreamAdded(t){this.logger.debug(`Received topic: ${Tu}`);const e=t.stream,s=gs.instance(e).options({name:e,nodeId:"primary"}).build();this.addModel(s)}handleAddBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.addBlock(t)}handleRemoveBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.removeBlock(t.blockNum)}handleUpdateBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.updateBlock(t)}handleLogLine(t,e){var o;this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&((o=r.currentBlock)==null||o.addLines(t.lines))}async init(){this.logger.debug(`initializing log-stream-container container ${this.id}`)}async subscribeToLogStream(t){const e=gs.instance(t).options({name:t,nodeId:"primary"}).build();this.addModel(e),await e.subscribe()}async load(){this.logger.debug(`loading log-stream-container container ${this.id}`);const[t,e]=await pu();if(t){this.logger.error(`Error loading log-streams: ${t}`);return}e&&e.forEach(s=>{const r=gs.instance(s).options({name:s,nodeId:"primary"}).build();this.addModel(r)})}};ut([$e],Fe.prototype,"_models",2);ut([K({topic:[Tu],websocket:!0})],Fe.prototype,"handleStreamAdded",1);ut([K({topic:[Eb],websocket:!0})],Fe.prototype,"handleAddBlock",1);ut([K({topic:[Tb],websocket:!0})],Fe.prototype,"handleRemoveBlock",1);ut([K({topic:[Mb],websocket:!0})],Fe.prototype,"handleUpdateBlock",1);ut([K({topic:[_b],websocket:!0})],Fe.prototype,"handleLogLine",1);Fe=ut([A(Mu)],Fe);const Ls=new _e({class:Fe,type:Mu});Ls.addRelatedModel(gs);Ls.addRelatedModel(Wr);Ls.addRelatedModel(Ts);const Sb=t=>t.rank!==void 0,Ib=t=>t.visibleRole!==void 0,Ob=t=>t.color!==void 0,$b=t=>{const e=t.info;return Sb(e)?e.rank:0},Cb=t=>{const e=t.info;return Ob(e)?e.color:"orange"},xb=t=>{const e=t.info;return Ib(e)?e.visibleRole:"TECHNICIAN"},{URL:Qr}=ae(),{getAll:Db,postModel:_u}=oe.build({basePath:`${Qr}/api/kos/troubles`}),Su=async t=>await Db({urlOverride:`${Qr}${t}`}),Iu=async(t,e="/api/kos/troubles",s)=>{try{const r=await _u({model:{},urlOverride:`${Qr}${e}/resolve/${t}`,tracker:s});return r!=null&&r.data&&rt.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:ze.Fail,tracker:s,reason:"Failed to resolve trouble"};return rt.initiateFuture(o),o}},Ab=async(t,e="/api/kos/troubles",s)=>{try{const r=await _u({model:t,urlOverride:`${Qr}${e}/resolve/`,tracker:s});return r!=null&&r.data&&rt.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:ze.Fail,tracker:s,reason:"Failed to resolve troubles"};return rt.initiateFuture(o),o}},Pb=Object.freeze(Object.defineProperty({__proto__:null,bulkResolveTroubles:Ab,getTroubles:Su,resolveTrouble:Iu},Symbol.toStringTag,{value:"Module"})),fr="troubleDataMapper",Vs=new Map;Ds(fr,{register:(t,e)=>{var s;Vs.has(t)||Vs.set(t,[]),(s=Vs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=Vs.get(t);if(!s)return{...e.data};const r=s.map(i=>i(e));return(await Promise.allSettled(r)).reduce((i,a)=>(a.status==="fulfilled"?i={...i,...a.value}:m.info(`Trouble mapper ${t} failed: ${a.reason}`),i),{...e.data})}});const Fs="troubleMapper",Gs=new Map;Ds(Fs,{register:(t,e)=>{var s;Gs.has(t)||Gs.set(t,[]),(s=Gs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=Gs.get(t);if(!s)return[];const r=s.map(i=>i(e)),n=(await Promise.allSettled(r)).map(i=>i.status==="fulfilled"?i.value:(m.info(`Trouble mapper ${t} failed: ${i.reason}`),[])).flat();return Array.from(new Set(n))}});$[Fs].register("nozzle",async t=>[t.data.nozzlePath]);$[Fs].register("path",async t=>[t.data.path]);const Rb=async t=>{const e=new Set,s=t.ifaces,r=s==null?void 0:s.map(n=>$[Fs].execute(n,t));return(await Promise.allSettled(r)).forEach(n=>{n.status==="fulfilled"&&n.value.forEach(i=>e.add(i))}),Array.from(e)},Ou=async t=>{const e=t.ifaces,s=e==null?void 0:e.map(i=>$[fr].execute(i,t)),r=$[fr].execute(t.type,t);s.push(r);const n=(await Promise.allSettled(s)).reduce((i,a)=>(a.status==="fulfilled"&&(i={...i,...a.value}),i),{});return{...t.data,...n}};class kb{constructor(){l(this,"type","ResolvableTrouble");l(this,"title","Resolvable Trouble");l(this,"subtitle","Trouble")}}class Lb{constructor(){l(this,"type","BlockPumpTrouble");l(this,"title","Block Pump Trouble");l(this,"subtitle","Trouble")}}class gt{static getHandler(e){switch(e){case"ResolvableTrouble":return new kb;case"BlockPumpTrouble":return new Lb;default:return}}}var Fb=Object.defineProperty,Nb=Object.getOwnPropertyDescriptor,$u=(t,e,s,r)=>{for(var o=r>1?void 0:r?Nb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Fb(e,s,o),o};const Zt="trouble-model";function qs(t){return typeof t.shouldDefer=="boolean"}let pr=class{constructor(t,{resolvable:e,tags:s,info:r,id:o,clientData:n,rank:i,ifaces:a,type:c,group:u,createTime:d,role:h,color:f,servicePath:p,...y},w){l(this,"id");l(this,"logger");l(this,"_troubleId");l(this,"_resolvable");l(this,"type");l(this,"futureHandler");l(this,"ifaces");l(this,"clientData");l(this,"info");l(this,"role");l(this,"color");l(this,"tags");l(this,"data");l(this,"rank");l(this,"servicePath");l(this,"group");l(this,"createTime");l(this,"_mapped",{});this.id=t,this.logger=w.logger,this.type=c,this._troubleId=o,this._resolvable=!!e,this.ifaces=a,this.rank=i,this.role=h,this.color=f,this.tags=s,this.info=r,this.group=u,this.servicePath=p??"/api/kos/troubles",this.createTime=d,this.clientData=n,this.data={},Object.assign(this.data,y),this.futureHandler=new Nr(this)}getTitleWithContext(t){var s,r;const e=t?(r=(s=gt.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:gt.getHandler(this.type);return(e==null?void 0:e.title)||"Trouble"}getSubtitleWithContext(t){var s,r;const e=t?(r=(s=gt.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:gt.getHandler(this.type);return(e==null?void 0:e.subtitle)||"Trouble"}get rawId(){return this._troubleId}get title(){var t;return((t=gt.getHandler(this.type))==null?void 0:t.title)||"Trouble"}get subtitle(){var t;return((t=gt.getHandler(this.type))==null?void 0:t.subtitle)||"Trouble"}get troubleId(){return this._troubleId}get resolvable(){return this._resolvable}get future(){return this.futureHandler.future}async resolveMappedData(){return await Ou(this)}get deferredCompanion(){const t=To(this.id,e=>qs(e));if(t&&qs(t.modelData))return t.modelData}get deferred(){return this.deferredCompanion?this.deferredCompanion.deferred:!1}get shouldDefer(){const t=To(this.id,e=>qs(e));return t&&qs(t.modelData)?t.modelData.shouldDefer:!1}clearDefer(){var t;(t=this.deferredCompanion)==null||t.clearDefer()}defer(){var t;(t=this.deferredCompanion)==null||t.defer()}getChildren(){return[...this.futureHandler.allFutures]}async resolve(t){var e;if(!this._resolvable)throw this.logger.error(`attempting to resolve an unresolvable trouble with id ${this._troubleId}`),new Error("Trouble is not resolvable");if(this.shouldDefer){(e=this.deferredCompanion)==null||e.defer();return}return await Iu(this._troubleId,this.servicePath,t)}};$u([ai()],pr.prototype,"resolve",1);pr=$u([A(Zt)],pr);const _s={registration:{[Zt]:{class:pr,singleton:!1}},type:Zt,predicate:Te(Zt),factory:ie.Factory.create(Zt)};var Cu=Object.defineProperty,Ub=Object.getOwnPropertyDescriptor,jb=(t,e,s)=>e in t?Cu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,zn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ub(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Cu(e,s,o),o},Bb=(t,e,s)=>(jb(t,e+"",s),s);function Yi(t){return $.propertyMapper.hasMapper(ve.TroubleRank)?$.propertyMapper.executeMapper(ve.TroubleRank,t):$b(t)}function Wi(t){return($.propertyMapper.hasMapper(ve.TroubleColor)?$.propertyMapper.executeMapper(ve.TroubleColor,t):Cb(t)).toLowerCase()}function Qi(t){return($.propertyMapper.hasMapper(ve.TroubleRole)?$.propertyMapper.executeMapper(ve.TroubleRole,t):xb(t)).toLowerCase()}const Kb="trouble-container-model";class pe{}l(pe,"INDEX_TROUBLES_BY_IFACE","byIface"),l(pe,"INDEX_TROUBLES_BY_TYPE","byType"),l(pe,"INDEX_TROUBLES_BY_GROUP","byGroup"),l(pe,"INDEX_TROUBLES_BY_DEFERRED","byDeferred"),l(pe,"SORT_KEY_RANK","rank"),l(pe,"TROUBLES_DEFERRED","true");let Ct=class{constructor(t,e){l(this,"id");l(this,"servicePath","/api/kos/troubles");this.id=t,this.servicePath=e.servicePath??this.servicePath}async load(){this.logger.debug("loading trouble container");const t=await Su(this.servicePath);try{t==null||t.data.forEach(e=>{const s={...e,servicePath:this.servicePath,rank:Yi(e),color:Wi(e),role:Qi(e),id:String(e.id)},r=_s.factory(`trouble-${e.id}`)(s);this.troubles.addModel(r)})}catch(e){throw this.logger.error(e),e}}handleTroubleRemoved(t){const e=`trouble-${t}`,s=this.troubles.getModel(e);this.troubles.removeModel(e),s&&st(s)}handleTroubleAdded(t){const e={...t,servicePath:this.servicePath,rank:Yi(t),color:Wi(t),role:Qi(t),id:String(t.id)};if(e.role==="NONE")return;const s=_s.factory(`trouble-${t.id}`)(e);this.troubles.addModel(s)}};Bb(Ct,"Registration");zn([K({topic:"/kos/trouble/remove",websocket:!0,lifecycle:j.INIT})],Ct.prototype,"handleTroubleRemoved",1);zn([K({topic:"/kos/trouble/add",websocket:!0})],Ct.prototype,"handleTroubleAdded",1);Ct=zn([A({modelTypeId:Kb,singleton:!0}),mc(),dc({containerProperty:"troubles",containerOptions:{indexMap:{[pe.INDEX_TROUBLES_BY_IFACE]:Rb,[pe.INDEX_TROUBLES_BY_TYPE]:"type",[pe.INDEX_TROUBLES_BY_GROUP]:"group",[pe.INDEX_TROUBLES_BY_DEFERRED]:"deferred"},sortKey:pe.SORT_KEY_RANK}})],Ct);const xt=Ct.Registration,{URL:xu}=ae(),{getAll:Hb}=oe.build({basePath:`${xu}/api/kos/ota`}),Zi=m.createLogger({name:"ota-service",group:"Services"}),zb=async()=>{Zi.debug("sending GET request to /api/kos/ota/artifacts");const t=await Hb({urlOverride:`${xu}/api/kos/ota/artifacts`});return Zi.debug("getArtifacts - response:",t),t==null?void 0:t.data};var Vb=Object.defineProperty,Gb=Object.getOwnPropertyDescriptor,Zr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Gb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Vb(e,s,o),o};const Du="ota-model",qb=t=>{let e=null;for(const s in t){const r=t[s],o=r.lastUpdateTime;(!e||e.lastUpdateTime<o)&&(e=r)}return e},go=t=>{const e=t.artifactInfo,s=qb(t.requests),r=(e==null?void 0:e.identifier)||(s==null?void 0:s.kabId);if(!r)return;let o;switch(t.status){case"INSTALLED":o="ready";break;case"INVALID":o="error";break;case"MISSING":o=((s==null?void 0:s.currentSize)||0)>0?"downloading":"idle";break;case"STAGED":o="pending"}const n=e===void 0;return{id:r,manifest:n,label:e==null?void 0:e.version,name:e==null?void 0:e.name,status:o,error:o==="error"?s==null?void 0:s.lastErrorReason:void 0,errorCount:o==="error"?s==null?void 0:s.errorCount:0,progress:o==="downloading"&&s&&!n?s.currentSize/(e==null?void 0:e.size)*100:void 0,size:e==null?void 0:e.size}};let Dt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"data",new vn);l(this,"troubleContainer");this.id=t,this.logger=s.logger}get downloadInProgressTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTADownloadInProgressTrouble"))==null?void 0:e[0]}get updatePendingTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAUpdatePendingTrouble"))==null?void 0:e[0]}get pausedDueToErrorsTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAPausedDueToErrorsTrouble"))==null?void 0:e[0]}get updates(){return this.data}get status(){return this.pausedDueToErrorsTrouble?"error":this.downloadInProgressTrouble?"downloading":this.updatePendingTrouble?"pending":"idle"}installAndReboot(){var t;this.updatePendingTrouble||this.logger.error("installAndReboot - OTAUpdatePendingTrouble not present"),this.logger.debug("installAndReboot - resolve OTAUpdatePendingTrouble"),(t=this.updatePendingTrouble)==null||t.resolve()}async init(){this.logger.debug(`initializing ota ${this.id}`)}async load(){this.logger.debug(`loading ota ${this.id}`);try{const t=await zb();t&&t.forEach(e=>{const s=go(e);s&&this.data.addModel(s)})}catch(t){this.logger.error(`loading ota ${this.id} - error:`,t)}}async handleAllArtifacts(t){this.logger.debug("handleAllArtifacts:",t),await this.data.clear();try{t.forEach(e=>{const s=go(e);s&&this.data.addModel(s)})}catch(e){this.logger.error(`handleAllArtifacts ${this.id} - error:`,e)}}handleChangedArtifacts(t){this.logger.debug("handleChangedArtifacts:",t);try{t.forEach(e=>{const s=go(e);s&&this.data.updateModel(s)})}catch(e){this.logger.error(`handleChangedArtifacts ${this.id} - error:`,e)}}};Zr([Lt({modelType:xt.type})],Dt.prototype,"troubleContainer",2);Zr([K({topic:"/kos/ota/artifacts/all",websocket:!0})],Dt.prototype,"handleAllArtifacts",1);Zr([K({topic:"/kos/ota/artifacts/changed",websocket:!0})],Dt.prototype,"handleChangedArtifacts",1);Dt=Zr([A(Du)],Dt);const gr=new _e({class:Dt,type:Du});function Yb(t){let e;const s=async(...r)=>{e&&e.abort(),e=new AbortController;const o=e;try{return await t(...r,o.signal)}finally{e===o&&(e=void 0)}};return s.cancel=()=>{e&&(e.abort(),e=void 0)},s.getController=()=>e,s.isActive=()=>!!e,s}const mo=m.createLogger({name:"software-info-service",group:"Services"}),Vn=async t=>{mo.debug("sending GET for software-info");const[e,s]=await Bl.get("/api/kos/manifest/info",void 0,{signal:t});if(!s)throw t!=null&&t.aborted?(mo.debug("Request was aborted"),new ge("Request was aborted")):(mo.error("Failed to fetch software-info",e),new ge("Failed to fetch software-info"));return s},Wb=Yb(Vn),Qb=Object.freeze(Object.defineProperty({__proto__:null,getSoftwareInfos:Vn,getSoftwareInfosWithCancel:Wb},Symbol.toStringTag,{value:"Module"}));var Zb=Object.getOwnPropertyDescriptor,Xb=(t,e,s,r)=>{for(var o=r>1?void 0:r?Zb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Xt="software-info-model";let Ao=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodes");this.id=t,this.logger=s.logger,this.nodes=[]}async init(){this.logger.debug(`initializing software-info ${this.id}`)}groupBy(t,e){return t.reduce((s,r)=>(s[r[e]]=[...s[r[e]]||[],r],s),{})}async load(){this.logger.debug(`loading software-info ${this.id}`);try{const t=await Vn(),e=(t==null?void 0:t.nodes)||{};J(()=>{const r=Object.keys(e).map(o=>e[o][0]).map(o=>({nodeName:o.nodeType,kosVersion:o.kosVersion,group:this.groupBy(o.artifacts,"group")}));this.nodes=r})}catch(t){t instanceof ge&&this.logger.error("Failed to fetch software-info",t)}}};Ao=Xb([A(Xt)],Ao);const mr={registration:{[Xt]:{class:Ao,singleton:!1}},type:Xt,predicate:Te(Xt),factory:ie.Factory.create(Xt)},{URL:Au}=ae(),{getOne:Jb}=oe.build({basePath:`${Au}/api/kos/state`}),ev=m.createLogger({name:"state-bean-service",group:"Services"}),Pu=async({path:t})=>(ev.debug("sending GET for state-bean"),await Jb({urlOverride:`${Au}/api/kos/state/${t}`})),tv=Object.freeze(Object.defineProperty({__proto__:null,getStateBeanData:Pu},Symbol.toStringTag,{value:"Module"}));var sv=Object.defineProperty,rv=Object.getOwnPropertyDescriptor,Ru=(t,e,s,r)=>{for(var o=r>1?void 0:r?rv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&sv(e,s,o),o};const Jt="state-bean-model",ov=it("path");let yr=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"props");l(this,"logger");this.id=t,this.logger=s.logger,this.props=En.map(new Map),Mo(e,this)}updateModel(t){Mo(t,this)}handleConfigBeanUpdated(t){Object.entries(t).forEach(([e,s])=>{let r=s;typeof r=="string"&&_n(r)&&(r=r.toLowerCase()=="true"),typeof r=="string"&&Ur(r)&&(r=Number(r)),this.props.set(e,r)})}async init(){this.logger.debug(`initializing state-bean ${this.id}`)}updateProps(t){Object.entries(t).forEach(([e,s])=>{this.props.set(e,s)})}async load(){this.logger.debug(`loading state-bean ${this.id}`);const t=await Pu({path:this.path});t!=null&&t.data&&this.updateProps(t.data)}};Ru([K({topic:`/kos/state/${ov}`,websocket:!0})],yr.prototype,"handleConfigBeanUpdated",1);yr=Ru([A(Jt)],yr);const Ss={registration:{[Jt]:{class:yr,singleton:!1}},type:Jt,predicate:Te(Jt),factory:ie.Factory.create(Jt)};var nv=Object.defineProperty,iv=Object.getOwnPropertyDescriptor,ku=(t,e,s,r)=>{for(var o=r>1?void 0:r?iv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&nv(e,s,o),o};const es="state-prop-model",Xi=it("path");let br=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"attribute");l(this,"logger");l(this,"stateBean");this.id=t,this.logger=s.logger,this.path=e.path,this.attribute=e.attribute}get value(){return this.stateBean.props.get(this.attribute)}async init(){this.logger.debug(`initializing state-prop ${this.id}`)}async load(){this.logger.debug(`loading state-prop ${this.id}`)}toString(){var t;return((t=this.value)==null?void 0:t.toString())??""}};ku([Lt({modelType:Ss.type,id:`state-bean-${Xi}`,options:{path:Xi}})],br.prototype,"stateBean",2);br=ku([A(es)],br);const Gn={registration:{[es]:{class:br,singleton:!1}},type:es,predicate:Te(es),factory:ie.Factory.create(es)},{URL:av}=ae(),{getAll:cv}=oe.build({basePath:`${av}/api/state-prop`}),lv=m.createLogger({name:"state-prop-service",group:"Services"}),uv=async()=>(lv.debug("sending GET for state-prop"),await cv({})),dv=Object.freeze(Object.defineProperty({__proto__:null,getStateProps:uv},Symbol.toStringTag,{value:"Module"})),{URL:qn}=ae(),{getOne:Lu}=oe.build({basePath:`${qn}/api/translation`}),ms=m.createLogger({name:"translation-service",group:"Services"}),hv=()=>{const t=window.location.origin,e=me();return(e==null?void 0:e.host)||t},Fu=async(t,e)=>{ms.debug(`Loading translations from: ${t}`);const s=e??hv();try{const r=await fetch(`${s}${t}`);return r.status!==200?(ms.warn(`Failed to fetch translations at ${t}: ${r.status}`),{}):await r.json()}catch(r){throw ms.error("Error fetching translations",r),r}},fv=async()=>{ms.debug("Getting system localization descriptor");const t=await Lu({urlOverride:`${qn}/api/system/kos/localization`});if((t==null?void 0:t.status)!==200)throw new Error(`Failed to get localization descriptor ${t==null?void 0:t.status}`);return t.data},Nu=t=>async()=>{ms.debug(`Getting KOS localization descriptor for context: ${t}`);const e=await Lu({urlOverride:`${qn}/api/kos/localization/contexts`});if((e==null?void 0:e.status)!==200)throw new Error(`Failed to get KOS localization descriptor ${e==null?void 0:e.status}`);return e.data[t]},Uu="langResolver";var pv=Object.getOwnPropertyDescriptor,gv=(t,e,s,r)=>{for(var o=r>1?void 0:r?pv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const ts="translation-model";function mv(t){const e=typeof t=="string",s=e?!1:!!(t!=null&&t.data)&&typeof(t==null?void 0:t.data)!="string",r=e?t:t==null?void 0:t.defaultValue,o=e||t==null?void 0:t.context,n=e?void 0:s?t==null?void 0:t.data:t;return{isBasicOptions:e,defaultValue:r,context:o,data:n}}function ju(t,e=""){return Object.keys(t).reduce((s,r)=>{const o=e?`${e}.${r}`:r;if(typeof t[r]=="object"&&t[r]!==null){const n=ju(t[r],o);return{...s,...n}}else return{...s,[o]:t[r]}},{})}function Bu(t,e){const s={...t};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(typeof e[r]=="object"&&e[r]!==null&&typeof t[r]=="object"&&t[r]!==null?s[r]=Bu(t[r],e[r]):s[r]=e[r]);return s}const Po=(t,e)=>{const s=/__(.*?)__/g,r=t.replace(s,(o,n)=>Object.prototype.hasOwnProperty.call(e||{},n.trim())?e==null?void 0:e[n.trim()]:o);return r===t?r:s.test(r)?Po(r,e):r},Ys=(t,e,s)=>{const r=/{{(.*?)}}/g,n=Po(t,e).replace(r,(a,c)=>Object.prototype.hasOwnProperty.call(s||{},c.trim())?s==null?void 0:s[c.trim()]:a);return Po(n,e)},Ji=(t,e)=>{if(e.includes(":")){const[s,r]=e.split(":");return{namespace:s,key:r}}else return{namespace:t,key:e}};let Ro=class{constructor(t,e,s){l(this,"id");l(this,"namespace");l(this,"descriptor");l(this,"defaultLocale");l(this,"currentLocale");l(this,"bundleResolver");l(this,"data");l(this,"logger");l(this,"resolver");l(this,"disposer");l(this,"context");l(this,"rootUrl");this.id=t,this.defaultLocale=e.defaultLocale||"en",this.currentLocale=e.currentLocale||"en",this.namespace=e.namespace,this.descriptor=e.descriptor,this.rootUrl=e.rootUrl,this.data={},this.resolver=e.resolver||s.kosContext.get(Uu),this.bundleResolver=e.bundleResolver,this.logger=s.logger,this.context=s.kosContext.parentModel}getTranslationLocales(t){const e=this.descriptor[t];if(!t||!e)return[this.defaultLocale];if(!this.defaultLocale&&!e.fallbacks)return[t];let s=e.fallbacks||[this.defaultLocale];return s.includes(t)||(s=[t,...s]),s}async loadTranslations(){const t=this.getTranslationLocales(this.currentLocale).reverse(),e=t.map(r=>{if(this.bundleResolver){const o=Y.getContext(this.id);return this.bundleResolver(this.namespace,r,o)}try{const o=this.resolver(this.namespace,r);return Fu(o,this.rootUrl)}catch{return Promise.resolve({})}}),s=await Promise.allSettled(e);J(()=>{const r=s.reduce((o,n,i)=>(n.status==="fulfilled"?(this.logger.debug(`resolved ${t[i]}`,n.value),n.value&&(o=Bu(o,n.value))):this.logger.error(`failed to load translation ${this.id} for ${t[i]}`),o),{});this.data=ju(r)})}async init(){this.logger.debug(`initializing translation ${this.id}`)}exists(t){const{namespace:e,key:s}=Ji(this.namespace,t);if(e!==this.namespace){const r=this.context.getModel(e);return r?r.exists(s):!1}return!!this.data[s]}resolveKey(t,e){if(!t)return this.logger.debug("key is empty"),"";const{defaultValue:s,context:r,data:o}=mv(e),{namespace:n,key:i}=Ji(this.namespace,t),a=`${i}_${r}`;if(n!==this.namespace){const c=this.context.getModel(n);return c?c.resolveKey(i,e):i}if(r&&this.data[a]){const c=this.data[a];return Array.isArray(c)?c.map(u=>Ys(u,this.data,o)):Ys(this.data[a],this.data,o)}if(this.data[i]){const c=this.data[a];return Array.isArray(c)?c.map(u=>Ys(u,this.data,o)):Ys(this.data[i],this.data,o)}return s??i}unload(){this.logger.debug(`unloading translation ${this.id}`),this.disposer&&this.disposer()}async load(){this.logger.debug(`loading translation ${this.id}`),await this.loadTranslations()}async ready(){this.logger.debug(`ready translation ${this.id}`),this.disposer=M.reaction(()=>this.currentLocale,(t,e)=>{this.logger.info(`translation langs for namespace ${this.id} changed from ${e} to ${t}`),this.loadTranslations()})}};Ro=gv([kr(),A(ts)],Ro);const vr={registration:{[ts]:{class:Ro,singleton:!1}},type:ts,predicate:Te(ts),factory:ie.Factory.create(ts)};var yv=Object.defineProperty,bv=Object.getOwnPropertyDescriptor,Ku=(t,e,s,r)=>{for(var o=r>1?void 0:r?bv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&yv(e,s,o),o};const ss="translation-container-model",vv=(t,e="/")=>t.join(e).replace(new RegExp(e+"{1,}","g"),e);function wv(t,e){const s=this.descriptor.namespaces[t];if(!s)throw new Error("namespace "+t+" not found in descriptor");const r=s.basePath,o=s.locales[e].file;return vv([r,o])}let wr=class{constructor(t,e,s){l(this,"id");l(this,"lang");l(this,"rootUrl");l(this,"descriptor");l(this,"_defaultNamespace");l(this,"resolver");l(this,"logger");l(this,"descriptorUrl");l(this,"namespaces",[]);l(this,"_models");this.id=t,this.lang=e.lang||"en",this.descriptor=e.descriptor,this._defaultNamespace=e.defaultNamespace,this.descriptorUrl=e.descriptorUrl,this.rootUrl=e.rootUrl,this.resolver=e.resolver||wv.bind(this),s.kosContext.set(Uu,this.resolver),this.logger=s.logger,this._models=new Ce({parentId:t})}set currentLocale(t){this.lang=t,this.models.data.forEach(e=>{e.currentLocale=t})}get defaultNamespace(){return this._defaultNamespace?this.getModel("translation-"+this._defaultNamespace):void 0}getModel(t){return this.logger.debug("getting model "+t),this._models.getModel("translation-"+t)}get models(){return this._models}get data(){return this._models.data}async reload(){for(const t of this.namespaces){const e=this.resolveNamespace(t);await de(e)}}resolveNamespace(t){var s;if((s=this.descriptor.namespaces)==null?void 0:s[t]){const r=Object.keys(this.descriptor.namespaces[t].locales)[0],o=this.descriptor.namespaces[t].locales[r].defaultLocale,n=vr.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:o,descriptor:this.descriptor.namespaces[t].locales,resolver:this.resolver});return this.addModel(n),this.namespaces.includes(t)||J(()=>{this.namespaces.push(t)}),n}else{this.logger.warn("namespace "+t+" not found in descriptor");const r=vr.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:this.lang,descriptor:{},resolver:this.resolver});return this.addModel(r),r}}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug("initializing translation-container container "+this.id)}async load(){this.logger.debug("loading translation-container container "+this.id)}};Ku([$e],wr.prototype,"_models",2);wr=Ku([A(ss)],wr);const Ne={registration:{[ss]:{class:wr,singleton:!0}},type:ss,predicate:Te(ss),factory:ie.Singleton.create(ss)},Ev={set(t,e){const s=Y.getContext(Ne.type);s&&s.set(t,e)},get(t){const e=Y.getContext(Ne.type);return e==null?void 0:e.get(t)}},Hu={async init(t){const e=Ne.factory(t);return await de(e),{translations:e}}};function Mv(t){return(t==null?void 0:t.troubles)!==void 0&&(t==null?void 0:t.troubles)instanceof Array&&(t==null?void 0:t.troublesByType)!==void 0&&typeof(t==null?void 0:t.troublesByType)=="object"}const zu="kos-ws-event",Yn=Ft(zu);var Tv=Object.defineProperty,_v=Object.getOwnPropertyDescriptor,Wn=(t,e,s,r)=>{for(var o=r>1?void 0:r?_v(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Tv(e,s,o),o};const Sv=({headers:t,body:e})=>Object.entries(t).map(([r,o])=>`${r}:${o}`).join("\\n")+"\\n\\n"+e;exports.WsEventModel=class{constructor(e){l(this,"id");l(this,"events");l(this,"_topicMap");this.id=e,this.events=M.observable.map(new Map),this._topicMap=new Map}get websocketEvents(){return Array.from(this.events.values())}handleSendEvent(e,s){this.processEvent(s,!0)}handleReceiveEvent(e,s){this.processEvent(s)}processEvent(e,s=!1){m.debug("kos event received");const{body:r,headers:o}=e.body,n=o["request-id"]||o["response-id"],i=o["request-id"]||o["response-id"]||o.topic||o.type;if(i){let a=i;if(n)a=`${a}-${s?"send":"receive"}`;else{const u=this._topicMap.get(i)||0;a=`${a}-${u+1}`,this._topicMap.set(i,u+1)}const c={msgId:a,content:r,headers:o,timestamp:Date.now(),raw:Sv({headers:o,body:r}),direction:s?"send":"receive",mocked:!!o.mocked};this.events.set(a,c),m.debug(`logged ${this.events.size} events`)}}};Wn([K({topic:[xs.SEND]})],exports.WsEventModel.prototype,"handleSendEvent",1);Wn([K({topic:[xs.RECEIVED]})],exports.WsEventModel.prototype,"handleReceiveEvent",1);exports.WsEventModel=Wn([A(Yn.type)],exports.WsEventModel);const ea=me(),Iv=ea.debug==="true"||ea.debug===!0,Ov="/api/system/canvas",Vu=async(t,e)=>{const s=e||Ov,r=`${exports.BASE_URL}${s}`;await exports.kosFetch(r,{method:"POST",headers:{hide:Iv?"false":"true"},body:t})},$v=Object.freeze(Object.defineProperty({__proto__:null,sendCanvasData:Vu},Symbol.toStringTag,{value:"Module"}));function ta(t,e,s){{const r=t.filter((o,n)=>n%4!==3);return btoa(String.fromCharCode(...r))}}var Cv=Object.defineProperty,xv=Object.getOwnPropertyDescriptor,Gu=(t,e,s,r)=>{for(var o=r>1?void 0:r?xv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Cv(e,s,o),o};const qu="canvas-renderer-model";function yo(t){return typeof t.onDone=="function"}let Er=class{constructor(t,e,s){l(this,"id");l(this,"router");l(this,"logger");l(this,"_renderer",null);l(this,"_clearOnComplete");l(this,"isStreaming",!1);l(this,"renderLoopId",null);l(this,"sendIntervalId",null);l(this,"timeoutId",null);l(this,"apiPath");l(this,"endpointName");l(this,"width",50);l(this,"height",30);l(this,"fps",10);l(this,"durationMs",null);l(this,"_onFrame",null);this.id=t,this.logger=s.logger,this.width=e.width??50,this.height=e.height??30,this.fps=e.fps??10,this.durationMs=e.durationMs??null,this.apiPath=e.apiPath??"/api/system/canvas",this.endpointName=e.endpoint}set onFrame(t){this._onFrame=t}set renderer(t){var e,s;this._renderer&&(this.stopStreaming(),(s=(e=this._renderer).dispose)==null||s.call(e)),this._renderer=t,this.isStreaming&&this.startStreaming()}setClearOnComplete(t){this._clearOnComplete=t}sendDataFrame(t,e){Vu(t,e)}checkStreaming(){if(this.isOneShotDone()||!this.isStreaming){requestAnimationFrame(()=>{const t=this.isOneShotDone();this.stopStreaming(!t)});return}}handleFrame(t){var s;const e=ta(t);this.sendDataFrame(e,this.apiPath),(s=this._onFrame)==null||s.call(this,e)}stopStreaming(t=!0){var e,s;this.logger.debug(`stopStreaming called with clearCanvas=${t}`),this.isStreaming=!1,this.renderLoopId&&cancelAnimationFrame(this.renderLoopId),this.sendIntervalId&&clearInterval(this.sendIntervalId),this.timeoutId&&clearTimeout(this.timeoutId),(s=(e=this._renderer)==null?void 0:e.pause)==null||s.call(e),t&&(this.logger.debug("Clearing canvas..."),this.clearCanvas())}clearCanvas(){var s;const t=this.width>0?this.width:50,e=this.height>0?this.height:30;if(t>0&&e>0){const r=t*e*4,o=new Uint8ClampedArray(r);for(let i=3;i<r;i+=4)o[i]=255;const n=ta(o);this.logger.debug(`Sending clear frame: ${t}x${e}, apiPath: ${this.apiPath}`),this.sendDataFrame(n,this.apiPath),(s=this._onFrame)==null||s.call(this,n)}}isOneShotDone(){var t,e;return yo(this._renderer)&&((e=(t=this._renderer).isOneShot)==null?void 0:e.call(t))===!0&&this._renderer.isOneShotDone}startStreaming(){var t,e,s,r;{if(!this._renderer)return;if(!this.apiPath){this.logger.error(`No endpoint configured for canvas renderer ${this.id}`);return}this.isStreaming=!0,this._renderer.reset(),(e=(t=this._renderer).play)==null||e.call(t);const o=yo(this._renderer);yo(this._renderer)&&this._renderer.onDone(()=>{var c,u,d;this.logger.debug(`Renderer completed for ${this.id}`),G("/canvas/renderer/completed",{endpoint:this.endpointName,rendererId:this.id,rendererType:(c=this._renderer)==null?void 0:c.constructor.name,timestamp:Date.now()});let a=!0;this._clearOnComplete!==void 0?a=this._clearOnComplete:a=!(((d=(u=this._renderer)==null?void 0:u.isOneShot)==null?void 0:d.call(u))??!1),this.stopStreaming(a)}),this._renderer.renderFrame(this.width,this.height);const n=(r=(s=this._renderer).readPixels)==null?void 0:r.call(s,this.width,this.height);if(n&&this._onFrame&&this.handleFrame(n),this.isOneShotDone()){requestAnimationFrame(()=>{this.stopStreaming(!1)});return}const i=()=>{var a;(a=this._renderer)==null||a.renderFrame(this.width,this.height),this.renderLoopId=requestAnimationFrame(i)};this.renderLoopId=requestAnimationFrame(i),this.sendIntervalId=setInterval(()=>{var c,u;const a=(u=(c=this._renderer)==null?void 0:c.readPixels)==null?void 0:u.call(c,this.width,this.height);a&&this._onFrame&&(this.handleFrame(a),this.checkStreaming())},1e3/this.fps),!o&&this.durationMs!=null&&(this.timeoutId=setTimeout(()=>{this.stopStreaming()},this.durationMs))}}async init(){this.logger.debug(`initializing canvas-renderer ${this.id}`)}async load(){this.logger.debug(`loading canvas-renderer ${this.id}`),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/stop`,async(t,e)=>{this.logger.debug(`HTTP stop endpoint called for ${this.endpointName}`),this.stopStreaming(),e.send({status:"OK"})}),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/start`,async(t,e)=>{this.startStreaming(),e.send({status:"OK"})})}};Gu([Lt({modelType:An.type})],Er.prototype,"router",2);Er=Gu([A(qu)],Er);const Qn=new ye({class:Er,type:qu});class Yu{constructor({src:e}){l(this,"video");l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);l(this,"doneCallback",null);this.video=document.createElement("video"),this.video.src=e,this.video.crossOrigin="anonymous",this.video.muted=!0,this.video.loop=!1,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");this.ctx=s,this.handleEnded=this.handleEnded.bind(this),this.video.addEventListener("ended",this.handleEnded)}handleEnded(){this.doneCallback&&this.doneCallback()}reset(){this.video.pause(),this.video.currentTime=0,this.lastUpdate=performance.now()}play(){this.video.play().catch(console.warn)}pause(){this.video.pause()}renderFrame(e,s){this.canvas.width=e,this.canvas.height=s,this.video.readyState>=2&&this.ctx.drawImage(this.video,0,0,e,s)}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}onDone(e){this.doneCallback=e}dispose(){this.video.pause(),this.video.removeAttribute("src"),this.video.load(),this.video.remove(),this.video.removeEventListener("ended",this.handleEnded),this.doneCallback=null}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}}class Dv{constructor(){l(this,"canvas");l(this,"gl");l(this,"lastWidth",0);l(this,"lastHeight",0);l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("webgl");if(!e)throw new Error("WebGL not supported");this.gl=e}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e=this.lastWidth,s=this.lastHeight){const r=new Uint8Array(e*s*4);this.gl.readPixels(0,0,e,s,this.gl.RGBA,this.gl.UNSIGNED_BYTE,r);const o=new Uint8ClampedArray(r.length);for(let n=0;n<s;n++){const i=n*e*4,a=(s-1-n)*e*4;o.set(r.subarray(i,i+e*4),a)}return o}}class Av extends Dv{constructor({speedPx:s=1}={}){super();l(this,"program");l(this,"posBuffer");l(this,"aPosition");l(this,"uMinHue");l(this,"uMaxHue");l(this,"uHueOffset");l(this,"uGridHeight");l(this,"minHue",0);l(this,"maxHue",80);l(this,"hueOffset",0);l(this,"speedPx",1);this.speedPx=s;const r=this.gl,o=`
77
+ ["${e}"]`;if(r?(p=this.fosSocket)==null?void 0:p.connectionEstablished:(y=this.socket)==null?void 0:y.connectionEstablished){const E=r?this.fosSocket:this.socket;(w=E==null?void 0:E.socket)==null||w.send(d)}else{Ge.debug("no connection adding to offline messages");const E=r?this.fosSocket:this.socket;E==null||E.addOfflineMessage(d)}}subscribeTopic({topic:e,callback:s,fos:r,bridge:o,destinationAddress:n}){const{unsubscribe:i,count:a}=C(e,s);return Ge.debug(`Topic ${e} currently has ${a} subscribers`),this._sendSubscriptionMessage(e,"subscribe",r,o,n),()=>{const{count:c}=i();Ge.debug(`Topic ${e} currently has ${c} subscribers`),c===0&&this._sendSubscriptionMessage(e,"unsubscribe",r,o,n)}}async whenReady(){const e=this;return this.webSocketSupported?(await M.when(()=>{var s,r;return!!((s=e.socket)!=null&&s.connectionEstablished)&&(!e.useFosTransport||!!((r=e.fosSocket)!=null&&r.connectionEstablished))&&e.authorized}),{status:"success"}):{status:"not supported"}}get token(){return this._token}set token(e){this._token=e,this.init()}static host(e="localhost"){return this.getInstance().host=e,this}static port(e=8080){return this.getInstance().port=e,this}static alias(e){this.getInstance().alias=e}static getInstance(e=8080,s){if(!this._instance){const r=window.kosUseFos?{port:window.kosFosPort||8081}:void 0;this._instance=new this({port:e,token:s,fos:r})}return this._instance}}l(Mt,"_instance");class Yp{constructor(e,s,r,o,n){l(this,"disposers",[]);l(this,"activatableDisposers",[]);l(this,"flowControllers",new Map);l(this,"baselineDependencies",new Map);this.model=e,this.modelData=s,this.modelId=r,this.offlineQueue=o,this.log=n}registerAll(e){var o;const s=((o=this.modelData)==null?void 0:o[ee])||{},r=Object.keys(s);this.log.debug(`Found ${r.length} subscriptions in ${this.modelId} (lifecycle: ${e??"any"})`),r.forEach(n=>{const i=s[n],a=i.lifecycle;if(e&&e!==a)return;const c=this.resolvePropKey(n);if(this.log.debug(`Resolved topic: ${n} → ${c}`),i.requiresBaseline&&(this.baselineDependencies.set(c,i.requiresBaseline),this.log.debug(`Registered baseline dependency for ${c}: ${i.requiresBaseline.path}`)),i.flow)this.subscribeWithFlowControl(i,c,a);else{const u=this.createHandler(c,i);this.subscribe(i,c,u,a===U.ACTIVATE)}})}deactivate(){this.log.debug(`Deactivating subscriptions for ${this.modelId}`);for(const e of this.activatableDisposers)try{e()}catch(s){this.log.error("Error during subscription disposal",s)}this.activatableDisposers=[]}disposeAll(){const e=[...this.disposers,...this.activatableDisposers];this.log.debug(`Disposing ${e.length} subscriptions for ${this.modelId}`);for(const[s,r]of this.flowControllers)this.log.debug(`Disposing flow controller for ${s}`);this.flowControllers.clear();for(const s of e)try{s()}catch(r){this.log.error("Error during subscription disposal",r)}this.disposers=[],this.activatableDisposers=[]}subscribe(e,s,r,o){const n=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;if(e.websocket){this.log.debug(`Subscribing to WebSocket topic: ${s}`);const i=Mt.getInstance().subscribeTopic({topic:s,callback:r,fos:e.fos,bridge:e.bridge,destinationAddress:n});this.disposers.push(i)}else{this.log.debug(`Subscribing to EventBus topic: ${s}`);const{unsubscribe:i}=C(s,r);o?this.activatableDisposers.push(i):this.disposers.push(i)}}createHandler(e,s){return async r=>{var o;try{const n=(o=r==null?void 0:r.headers)==null?void 0:o["src-addr"],i=s.destinationAddress&&this.resolvePropKey(s.destinationAddress),a=i?n===i:!0,c=this.extractWildcardCapture(e,r,s),u=this.isBaselineReady(e);if(!this.model.isReady()||!u){u?this.log.warn(`Model ${this.modelId} not ready. Queuing message for ${e}`):this.log.warn(`Baseline not ready for ${e}. Queuing message.`);const d=()=>{const h=So(r,s.skipParse),f=s.transform(h);if(a&&s.condition(f,this.modelData,r))return this.callHandlerWithWildcard(s,f,c,r)};this.offlineQueue.enqueue(d,e,r)}else{const d=So(r,s.skipParse),h=s.transform(d);if(a&&s.condition(h,this.modelData,r))return this.callHandlerWithWildcard(s,h,c,r)}}catch(n){this.log.error(`Error handling subscription for ${e}`,n)}}}extractWildcardCapture(e,s,r){var n;if(!r.wildcardName||!Ic(e))return null;const o=((n=s==null?void 0:s.headers)==null?void 0:n.topic)||"";return Oc(e,o,r.wildcardName)}callHandlerWithWildcard(e,s,r,o){if(r&&Object.keys(r).length>0){const n={...o,wildcardCapture:r};return e.handler.call(this.modelData,s,n,this.modelData)}else return e.handler.call(this.modelData,s,o,this.modelData)}resolvePropKey(e){const s=/.*({PROP_(.+)})/;let r=e.includes("{MODEL_ID}")?e.replace("{MODEL_ID}",this.modelId):e;const o=r.match(s);return o&&o[2]in this.modelData&&(r=r.replace(o[1],this.modelData[o[2]])),r}async subscribeWithFlowControl(e,s,r){this.log.debug(`Setting up flow control for topic: ${s}`);const o=new jp(e.flow);this.flowControllers.set(s,o);const n=this.createFlowControlHandler(s,e),i=this.startFlowProcessing(e,s,n,o),a=()=>{this.flowControllers.delete(s),i.then(c=>c==null?void 0:c.abort())};r===U.ACTIVATE?this.activatableDisposers.push(a):this.disposers.push(a)}async startFlowProcessing(e,s,r,o){const n=new AbortController;try{let i;if(e.websocket){const a=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;Mt.getInstance().subscribeTopic({topic:s,callback:()=>{},fos:e.fos,bridge:e.bridge,destinationAddress:a}),i=Oi(s)}else i=Oi(s);return(async()=>{try{for await(const a of o.processEvents(i)){if(n.signal.aborted)break;const c=r(a);c instanceof Promise&&await o.trackPromise(c)}}catch(a){this.log.error(`Flow control error for ${s}:`,a)}})(),n}catch(i){return this.log.error(`Failed to start flow processing for ${s}:`,i),null}}createFlowControlHandler(e,s){return async r=>{var o,n,i,a;try{if(s.condition&&!s.condition(r,this.modelData,r))return;if(this.model.isReady())return s.handler.call(this.modelData,r,r,this.modelData);{this.log.warn(`Model ${this.modelId} not ready. Queuing flow-controlled message for ${e}`);const c=()=>s.handler.call(this.modelData,r,r,this.modelData);this.offlineQueue.enqueue(c,e,r)}}catch(c){if(this.log.error(`Error in flow control handler for ${e}:`,c),(n=(o=s.flow)==null?void 0:o.errorHandling)!=null&&n.retry)await this.retryHandler(s,r,c);else if(!((a=(i=s.flow)==null?void 0:i.errorHandling)!=null&&a.continueOnError))throw c}}}async retryHandler(e,s,r){const o=e.flow.errorHandling.retry;let n=r;for(let i=1;i<=o.attempts;i++)try{return this.log.debug(`Retry attempt ${i}/${o.attempts} for handler`),await new Promise(a=>setTimeout(a,o.backoffMs*i)),e.handler.call(this.modelData,s,s,this.modelData)}catch(a){n=a,this.log.warn(`Retry attempt ${i} failed:`,a)}throw this.log.error("All retry attempts failed, throwing last error:",n),n}getFlowControlStats(){const e={};for(const[s,r]of this.flowControllers)e[s]=r.getStats();return e}getResponseStore(){return this.modelData.serviceResponses}isBaselineReady(e){const s=this.baselineDependencies.get(e);if(!s)return!0;const r=this.getResponseStore();if(!r)return this.log.warn(`ServiceResponseStore not found for baseline check on topic: ${e}`),!1;const n=`${(s.method||"get").toUpperCase()}:${s.path}`;return r.has(n)}flushQueueForBaseline(e){const s=this.baselineDependencies.get(e);if(!s){this.log.debug(`No baseline dependency for topic: ${e}`);return}const r=this.getResponseStore();if(!r){this.log.warn("ServiceResponseStore not found, falling back to standard flush"),this.offlineQueue.flush();return}const o=s.method||"get",n=r.getTemporalMetadataByPath(s.path,o);if(!n){this.log.warn(`Baseline temporal metadata not found for ${s.path}, falling back to standard flush`),this.offlineQueue.flush();return}const i=s.replayStrategy||Xe.AFTER_REQUEST;this.log.info(`Flushing queue with strategy ${i} for topic: ${e}`),this.log.debug(`Baseline timing - requested: ${n.requestedAt}, received: ${n.receivedAt}`),this.offlineQueue.flushWithStrategy(i,n.requestedAt,n.receivedAt)}}function dt(t,e){const s=`[Model:${e}]`;return{debug:(...r)=>t.debug(s,...r),info:(...r)=>t.info(s,...r),warn:(...r)=>t.warn(s,...r),error:(...r)=>t.error(s,...r)}}function Wp(t){return!!(t!=null&&t[Je])&&Object.keys(t[Je]).length>0}function Qp(t){return!!(t!=null&&t[ee])&&Object.keys(t[ee]).length>0}function Zp(t){return!!(t!=null&&t[Re])&&t[Re].length>0}function Xp(t){const e=Object.getPrototypeOf(t);return!!(e!=null&&e[et])&&Object.keys(e[et]).length>0}function Jp(t){return t.retention===ue.TTL&&t.extendOnRefresh===!0&&t.ttl!==void 0}function eg(t,e){return t.has(e)}function tg(t){return!t.expiresAt||Date.now()<t.expiresAt}function Ci(t,e,s,r){const o=setTimeout(()=>r(t),e);s.set(t,o)}class sg{constructor(){l(this,"responses",new Map);l(this,"retentionPolicies",new Map);l(this,"cleanupTimers",new Map)}set(e,s,r={retention:ue.SINGLE},o=Date.now(),n=Date.now()){if(this.shouldExtendTTL(e,r))return this.extendExistingTTL(e,r.ttl),!1;const i=this.createCachedResponse(s,e,r,o,n);return this.storeResponse(e,i,r),!0}get(e){const s=this.responses.get(e);if(s){if(s.expiresAt&&Date.now()>s.expiresAt){this.delete(e);return}return s.data}}getByPath(e,s="get"){return this.get(this.makeKey(e,s))}has(e){return this.get(e)!==void 0}delete(e){this.responses.delete(e),this.retentionPolicies.delete(e);const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}clearPath(e){Array.from(this.responses.keys()).filter(r=>this.extractPath(r)===e).forEach(r=>this.delete(r))}clear(){this.cleanupTimers.forEach(e=>clearTimeout(e)),this.responses.clear(),this.retentionPolicies.clear(),this.cleanupTimers.clear()}get size(){return this.responses.size}shouldCleanupAfterHandler(e){const s=this.retentionPolicies.get(e);return(s==null?void 0:s.retention)===ue.IMMEDIATE}shouldExtendTTL(e,s){if(!Jp(s)||!eg(this.responses,e))return!1;const r=this.responses.get(e);return tg(r)}extendExistingTTL(e,s){const r=this.responses.get(e);r.expiresAt=Date.now()+s,this.resetCleanupTimer(e,s)}resetCleanupTimer(e,s){this.clearTimerIfExists(e),Ci(e,s,this.cleanupTimers,r=>this.delete(r))}clearTimerIfExists(e){const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}createCachedResponse(e,s,r,o,n){return{data:e,timestamp:n,requestedAt:o,receivedAt:n,path:this.extractPath(s),method:this.extractMethod(s),expiresAt:this.calculateExpiresAt(r)}}calculateExpiresAt(e){return e.retention===ue.TTL&&e.ttl?Date.now()+e.ttl:void 0}storeResponse(e,s,r){this.responses.set(e,s),this.retentionPolicies.set(e,r),this.applyRetentionPolicy(e,r)}applyRetentionPolicy(e,s){switch(s.retention){case ue.IMMEDIATE:break;case ue.TTL:s.ttl&&Ci(e,s.ttl,this.cleanupTimers,r=>this.delete(r));break;case ue.SINGLE:break;case ue.PERMANENT:case ue.MANUAL:break}}makeKey(e,s){return`${s.toUpperCase()}:${e}`}extractPath(e){return e.split(":",2)[1]||e}extractMethod(e){return e.split(":",2)[0]||"get"}getTemporalMetadata(e){const s=this.responses.get(e);if(s)return{requestedAt:s.requestedAt,receivedAt:s.receivedAt}}getTemporalMetadataByPath(e,s="get"){return this.getTemporalMetadata(this.makeKey(e,s))}cleanup(){const e=Date.now();Array.from(this.responses.entries()).filter(([r,o])=>o.expiresAt&&e>o.expiresAt).map(([r])=>r).forEach(r=>this.delete(r))}}class rg{static createAll(e){const{modelId:s,modelTypeName:r,modelData:o}=e,n=fc.create({modelId:s,modelTypeName:r}),i=new wp(e,dt(n,"fsm")),a=new Mp(dt(n,"offline-queue")),c=new hp(e),u=new dp(e),d=new sg;o.serviceResponses=d;const h={fsm:i,offlineQueue:a,serviceResponseStore:d,companionManager:c,childResolver:u};if(Wp(o)&&(h.effectManager=new fp(r,s,o,dt(n,"effect"))),Qp(o)){const f=dt(n,"subscription");h.subscriptionManager=new Yp(e,o,s,a,f),h.onlineLifecycleManager=new Tp(e,dt(n,"online"))}return Zp(o)&&(h.httpRouteManager=new gn(o,dt(n,"http-routes"))),Xp(o)&&(h.serviceRequestManager=new Pp(o,d)),h}}const N=D.getLogger("kos-model"),og="kos.extension.model.loader";class ol{constructor({modelTypeName:e,id:s,modelData:r}){l(this,"_id");l(this,"_status");l(this,"_activeStatus");l(this,"_onlineStatus");l(this,"modelData");l(this,"modelTypeName");l(this,"initialized");l(this,"loaded");l(this,"offlineQueue");l(this,"subscriptionManager");l(this,"effectManager");l(this,"httpRouteManager");l(this,"onlineLifecycleManager");l(this,"serviceResponses");l(this,"serviceRequestManager");l(this,"companionManager");l(this,"childResolver");l(this,"fsm");this._id=typeof s<"u"?`${s}`:e,this.modelTypeName=e,this.initialized=!1,this.loaded=!1,this.modelData=r,this._status=v.CREATED,this._activeStatus=v.INACTIVE,this._onlineStatus=v.OFFLINE;const o=rg.createAll(this);this.fsm=o.fsm,this.offlineQueue=o.offlineQueue,this.companionManager=o.companionManager,this.childResolver=o.childResolver,this.serviceResponses=o.serviceResponseStore,o.effectManager&&(this.effectManager=o.effectManager),o.subscriptionManager&&(this.subscriptionManager=o.subscriptionManager),o.httpRouteManager&&(this.httpRouteManager=o.httpRouteManager),o.onlineLifecycleManager&&(this.onlineLifecycleManager=o.onlineLifecycleManager),o.serviceRequestManager&&(this.serviceRequestManager=o.serviceRequestManager),M.makeAutoObservable(this,{fsm:!1,effectManager:!1,subscriptionManager:!1,onlineLifecycleManager:!1,serviceRequestManager:!1,serviceResponses:!1,companionManager:!1,childResolver:!1,offlineQueue:!1}),lp(this)}get companionModels(){return this.companionManager}set status(e){this._status=e}get status(){return this._status}get modelId(){return this._id}get id(){return this._id}get activeStatus(){return this._activeStatus}set activeStatus(e){this._activeStatus=e}get onlineStatus(){return this._onlineStatus}set onlineStatus(e){this._onlineStatus=e}get modelManager(){return globalThis.kos.modelManager}isActive(){return this._status===v.ACTIVE}isOnline(){return this._onlineStatus===v.ONLINE}isReady(){return this._status===v.READY}async deactivate(){var e,s,r;N.debug(`deactivating model ${this.modelTypeName} with id ${this.modelId}`);try{const o=Y.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.deactivate)==null?void 0:s.call(e,o)),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} deactivated`),(r=this.subscriptionManager)==null||r.deactivate()}catch(o){throw N.debug(`Model ${this.modelId} failed to deactivated`),o}}async activate(){var e,s,r,o;N.debug(`activating model ${this.modelTypeName} with id ${this.modelId}`),await Yt(this,U.ACTIVATE);try{await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(U.ACTIVATE));const n=Y.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.activate)==null?void 0:r.call(s,n)),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} subscribing to all topics`),(o=this.subscriptionManager)==null||o.registerAll(U.ACTIVATE),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} activated`)}catch(n){throw N.debug(`Model ${this.modelId} failed to activate`),n}}async whenLoaded(){await uo([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.loaded,onMatch:()=>{N.debug(`Model ${this.modelId} is loaded`)}}])}async whenInitialized(){await uo([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.initialized,onMatch:()=>{N.debug(`Model ${this.modelId} is initialized`)}}])}async whenReady(){await uo([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to ready model ${this.modelId}`)}},{condition:()=>this.status===v.READY,onMatch:()=>{N.debug(`Model ${this.modelId} is ready`)}}])}async ready(){var e,s,r,o;if(this.fsm.current===v.READY){N.debug(`already readying model ${this.modelTypeName} with id ${this.modelId} returning`);return}try{N.debug(`readying model ${this.modelTypeName} with id ${this.modelId}`),await Yt(this,U.READY),await Uc(this,fn.READY,U.READY),await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(U.READY));const n=Y.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.ready)==null?void 0:r.call(s,n)),this.offlineQueue.flush(),(o=this.subscriptionManager)==null||o.registerAll(U.READY),N.debug(`Model ${this.modelId} is ready`);const i={modelId:this.modelId,modelType:this.modelTypeName};V($c(this.modelTypeName,this.modelId),i),V(Cc(this.modelTypeName),i)}catch(n){throw N.error(n),Error(n)}}async load(){var o,n,i,a,c,u;const e=this[Et];e&&await e.whenLoaded();const{modelTypeName:s,modelId:r}=this;if(this.fsm.current===v.LOADED||this.fsm.current===v.LOADING){N.debug(`Model ${s} with id ${r} already loaded or loading`);return}N.debug(`Loading model ${s} with id ${r}`),await Yt(this,U.LOAD);try{const d=Y.getContext(r),h=`${og}.${s}`,f=await $.loader.executeLoader(h,{});f&&(N.info(`Setting loaded context for ${r}, type: ${s}`),d==null||d.set(h,f)),await((o=this.serviceRequestManager)==null?void 0:o.executeForLifecycle(U.LOAD)),await((i=(n=this.modelData)==null?void 0:n.load)==null?void 0:i.call(n,d)),X(()=>{this.loaded=!0}),N.debug(`Model ${s} with id ${r} successfully loaded`),(a=this.subscriptionManager)==null||a.registerAll(U.LOAD),(c=this.httpRouteManager)==null||c.registerAll(),(u=this.effectManager)==null||u.setup()}catch(d){throw N.error(`Model ${r} failed to load`,d),d}}async unload(){var e,s,r,o,n,i;N.debug(`unloading model ${this.modelTypeName} with id ${this.modelId}`);try{const a=this.getChildren().map(u=>{var d;return(d=u.unload)==null?void 0:d.call(u)}).filter(u=>!!u);await Promise.allSettled(a);const c=Y.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.unload)==null?void 0:s.call(e,c)),this.loaded=!1,(r=this.onlineLifecycleManager)==null||r.dispose(),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} unloaded`),(o=this.effectManager)==null||o.disposeAll(),(n=this.subscriptionManager)==null||n.disposeAll(),(i=this.httpRouteManager)==null||i.dispose()}catch(a){throw N.debug(`Model ${this.modelId} failed to unload`),a}}async init(){var n,i,a,c;const e=this[Et];e&&await e.whenInitialized();const{modelId:s,modelTypeName:r}=this,o=Y.getContext(s);N.debug(`Initializing model ${r} with id ${s}`),await Yt(this,U.INIT);try{await((n=this.serviceRequestManager)==null?void 0:n.executeForLifecycle(U.INIT)),await((a=(i=this.modelData)==null?void 0:i.init)==null?void 0:a.call(i,o)),this.initialized=!0,N.debug(`Model ${r} with id ${s} initialized`),(c=this.onlineLifecycleManager)==null||c.register(),this.registerSubscribers(U.INIT)}catch(u){throw N.error(`Model ${s} failed to initialize`,u),u}}async registerSubscribers(e){var s;N.debug(`registering subscribers in ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.registerAll(e)}async online(){var s,r;N.debug(`online model ${this.modelTypeName} with id ${this.modelId}`),this.registerSubscribers();const e=Y.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.online)==null?void 0:r.call(s,e))}async offline(){var s,r,o;N.debug(`offline model ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.disposeAll();const e=Y.getContext(this.modelId);await((o=(r=this.modelData)==null?void 0:r.offline)==null?void 0:o.call(r,e))}accept(e){e.visit(this)}getChildren(){return this.childResolver.resolve()}addCompanionModel(e){this.companionManager.add(e)}clearCompanionModels(){this.companionManager.clear()}}const nl=t=>typeof t=="function",Di=m.createLogger({name:"kos-model-instantiator"});class ng{constructor(e,s){this.registry=e,this.cache=s}createModelInstance(e,s,r={}){const o=this.registry.models[e];if(!o)throw new Error(`No model registered for type ${e}`);const n=o.singleton?e:s;if(this.cache.restoreFromDeleteCache(n),!this.cache.hasModel(n)){Di.debug(`Creating model instance: ${e} [${n}]`);const a=o.create?o.create({modelTypeId:e,id:n,options:r}):new o.class(n,r),c=new ol({modelTypeName:e,id:n,modelData:a});this.cache.addModel(c),this._createCompanionModels(c,r)}const i=this.cache.getModelById(n);if(!i)throw Di.error(`Model ${e} [${n}] not found in cache`),new Error(`Model ${e} [${n}] not found in cache`);return{model:i,data:i.modelData}}_createCompanionModels(e,s){var n;const r=e.modelTypeName,o=((n=this.registry.companionModels)==null?void 0:n[r])||[];for(const{type:i}of o){const a=nl(i)?i(e.modelData,s):i;if(!a)continue;const c=`${a}-${e.modelId}`,u=this.createModelInstance(a,c,{data:s,companionParent:e.modelData,kosParentId:e.modelId});u!=null&&u.model&&(u.model[Et]=e,e.addCompanionModel(u.model))}}}let ig=class{constructor(e){this._registry=e}get registry(){return this._registry}getModelTypeRegistry(e){const s=this.registry.models[e];if(!s)throw new Error(`No registration for model type ${e}`);return s}registerModel(e){const s=e.type;this.registry.models[s]||(this.registry.models={...this.registry.models,...e.registration})}registerCompanionModel(e,s){var r,o;(r=this.registry).companionModels??(r.companionModels={}),(o=this.registry.companionModels)[e]??(o[e]=[]),this.registry.companionModels[e].some(n=>n.type===s)||this.registry.companionModels[e].push({type:s})}getModelSubscriptions(e){var s;return((s=this.getModelTypeRegistry(e))==null?void 0:s.subscriptions)||{}}getDataModelBuilder(e){var r;const s=(r=this.getModelTypeRegistry(e))==null?void 0:r.builder;if(!s)throw new Error(`No builder found for model type ${e}`);return s}getModelFactory(e){return Lt(e)}};const il=10,xi=m.createLogger({name:"kos-model-manager"});class al{constructor(){l(this,"cache");l(this,"instantiator");l(this,"dependencies");l(this,"_registry");globalThis.kos=globalThis.kos||{},this.dependencies=new lf,globalThis.kos.modelManager=this,globalThis.kos.resolveKosModel=e=>{const s=this.getModelById(e);if(s)return s.modelData||{}},globalThis.kos.kosModelJson=e=>{var r,o;const s=this.getModelById(e);if(s)return((o=(r=s.modelData).toJSON)==null?void 0:o.call(r))||{}},globalThis.kos.kosModelDebug=e=>{var r;const s=this.getModelById(e);if(s)return((r=s.modelData)==null?void 0:r.debugState)||{}},globalThis.kos.kmd=globalThis.kos.kosModelDebug,globalThis.kos.kmj=globalThis.kos.kosModelJson}static create(e,s){const r=this.getInstance(s);return r._registry=new ig(e),r.cache=new uf(e.preloadModels),r.instantiator=new ng(e,r.cache),r}static getInstance(e){var s,r;return(!((s=globalThis.kos)!=null&&s.modelManager)||e)&&(xi.debug("Creating new instance of KosModelManager"),new this),(r=globalThis.kos)==null?void 0:r.modelManager}get registry(){return this._registry.registry}get preloadedModels(){return this.cache.preload(e=>(xi.debug(`preloading ${e}`),typeof e=="string"?this.createModelInstance(e).model:this.createModelInstance(e.modelType,e.modelId,e.options).model))}get models(){return this.cache.models}getModelById(e){return this.cache.getModelById(e)}addModel(e){return this.cache.addModel(e)}removeModel(e){this.cache.removeModel(e.modelId)}hasModel(e){return this.cache.hasModel(e)}getModelsByType(e,s){return Array.from(this.models).filter(r=>r.modelTypeName===e).filter(r=>s?s(r.modelData):!0).map(r=>r.modelData)}getModelSubscriptions(e){return this._registry.getModelSubscriptions(e)}getDataModelBuilder(e){return this._registry.getDataModelBuilder(e)}getModelFactory(e){return Lt(e)}addDependency(e,s){this.cache.restoreFromDeleteCache(s),this.dependencies.add(e,s)}removeDependency(e,s){this.dependencies.remove(e,s)}async reloadModel(e){if(e.id){const s=this.getModelById(e.id);s&&await s.fsm.transitionTo(L.RESET,v.RESETTING)}}async initiateDestroyModel(e){if(!e.id)throw new Error("Model ID is required");if(!this.dependencies.canDestroy(e.id))return;const s=this.getModelById(e.id);s&&(this.cache.markForDeletion(s),cc.addToDeletionQueue(e.id,setTimeout(()=>this.destroyModel(s),il)))}async destroyModel(e){var s;e!=null&&e.modelId&&this.dependencies.canDestroy(e.modelId)&&(await((s=e.unload)==null?void 0:s.call(e)),this.removeModel(e))}createModelInstance(e,s,r={}){return this.instantiator.createModelInstance(e,s,r)}registerCompanionModel(e,s){this._registry.registerCompanionModel(e,s)}registerModel(e){this._registry.registerModel(e)}}var Xs=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.RELOADING="reloading",t))(Xs||{}),mt=(t=>(t.CREATE="create",t.INITIALIZE="init",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.UNLOAD="unload",t.RELOAD="reload",t))(mt||{});const ag=t=>{const e=b.createMachine("offline",{online:b.state(b.transition("go_offline","offline",b.action(()=>{t.offline(),M.runInAction(()=>{t.isOnline=!1})}))),offline:b.state(b.transition("go_online","online",b.action(()=>{t.online(),M.runInAction(()=>{t.isOnline=!0})})))}),s=b.interpret(e,n=>D.debug(n.machine.current)),r=b.createMachine({creating:b.state(b.transition("create","created")),created:b.state(b.immediate("initializing")),initializing:b.invoke(()=>t.init(),b.transition("done","initialized")),initialized:b.state(b.immediate("loading")),loading:b.invoke(()=>t.load(),b.transition("done","loaded")),loaded:b.state(b.immediate("readying"),b.transition("unload","unloading")),readying:b.invoke(()=>t.ready(),b.transition("done","ready",b.action(()=>{M.runInAction(()=>{t.status="ready"})}))),reloading:b.invoke(()=>t.reload(),b.transition("done","loading")),ready:b.state(b.transition("reload","reloading"),b.transition("unload","unloaded",b.action(t.unload.bind(t))),b.transition("go_online","ready",b.action(()=>{s.send("go_online")})),b.transition("go_offline","ready",b.action(()=>{s.send("go_offline")}))),unloaded:b.state()});return{service:b.interpret(r,n=>D.debug(n.machine.current)),online:s}},Q=m.createLogger({name:"kos-core"}),cg=()=>{const t=me(),e=t==null?void 0:t.alias,s=process.env.KOS_CONNECTION_ALIAS;return e||s||void 0},lg=()=>{const t=window.location.protocol,e=me(),s=e==null?void 0:e.host;let r;try{r=new URL(s).protocol==="https:"?"wss://":"ws://"}catch{}return r||(t==="https:"?"wss://":"ws://")},ug=()=>{const t=window.location.hostname,e=process.env.KOS_HOST,s=me(),r=s==null?void 0:s.host;let o;try{o=new URL(r).hostname}catch{}return o??e??t},dg=()=>{const t=window.location.port,e=process.env.KOS_PORT,s=me(),r=s==null?void 0:s.host;let o;try{o=new URL(r).port}catch{}return o??e??t},hg=(t,e)=>{let s;return{promise:new Promise((n,i)=>{s=setTimeout(()=>{e?m.error(`Model ${e.modelId} - ${e.modelTypeName} preloading - timed out after ${t}ms`):m.error(`KOS Core preloading timed out after ${t}ms`),i(new Error(`Model ${e==null?void 0:e.modelId} - ${e==null?void 0:e.modelTypeName} - timed out after ${t}ms`))},t)}),cancel:()=>{s&&clearTimeout(s)}}},Ai=t=>typeof t.reload=="function",fg=t=>typeof t.unload=="function";var cl=(t=>(t.LOGGED_IN="logged_in",t.LOGGED_OUT="logged_out",t))(cl||{});class O{constructor(e){l(this,"fsmService");l(this,"status");l(this,"initialized");l(this,"loaded");l(this,"_transport");l(this,"modelManager");l(this,"authState");l(this,"isOnline");l(this,"_reloading");l(this,"_unloading");l(this,"connectionAlias");this.initialized=!1,this.connectionAlias=e,this.loaded=!1,this.isOnline=!1,this.status=Xs.CREATED,this.authState="logged_out",this._reloading=!1,this._unloading=!1,M.makeAutoObservable(this),C("token",a=>{a&&(this.transport.token=a.body)}),C(ps.CONNECTED,async()=>{await this.whenReady(),this.fsmService.service.send(mt.GO_ONLINE)}),C(ps.DISCONNECTED,async()=>{this.fsmService.service.send(mt.GO_OFFLINE)}),C("/studioServer/auth/LOGGED_IN",()=>{this.authState="logged_in",this.transport.authorized=!0}),C("/studioServer/auth/LOGIN_REQUIRED",()=>{this.authState="logged_out",this.transport.authorized=!1}),C(ps.RELOAD,()=>{Q.warn("WebSocket requested reload"),this.fsmService.service.send(mt.RELOAD)}),C("/studio/project/reload",()=>{Q.warn("Project requested reload"),this.fsmService.service.send(mt.RELOAD)});const s=Mt.getInstance(),r=ug(),o=dg(),n=lg();s.host=r,s.port=Number.parseInt(o),s.protocol=n,process.env.KOS_ALLOW_ANONYMOUS==="true"&&(s.authorized=!0);const i=cg()??e;i&&(s.alias=i.replace("{{TIMESTAMP}}",Date.now().toString())),this._transport=s.init(),this.fsmService=ag(this),this.fsmService.service.send(mt.CREATE)}get onlineStatus(){return this.isOnline&&!this._reloading&&!this._unloading}get reloading(){return this._reloading}get unloading(){return this._unloading}async reload(){var o,n,i,a;const e=Date.now();if(this._reloading){Q.info("reload already in progress");return}this._reloading=!0,Q.warn("reloading KOS Core"),Q.warn("reloading preloaded models");const s=this.modelManager;for(const c of s.preloadedModels)Ai(c.modelData)&&(Q.info(`reloading model ${c.modelId}`),(o=c.unload)==null||o.call(c),await c.modelData.reload(),(n=c.registerSubscribers)==null||n.call(c),Q.info(`reloading model ${c.modelId} complete`));for(const c of s.models)!s.preloadedModels.includes(c)&&Ai(c.modelData)&&((i=c.unload)==null||i.call(c),await c.modelData.reload(),(a=c.registerSubscribers)==null||a.call(c));const r=Date.now()-e;setTimeout(()=>{M.runInAction(()=>{Q.warn("reloading KOS Core complete"),this._reloading=!1})},1e3-r)}async online(){Q.debug("KOS Core going online"),await this._transport.whenReady(),Q.debug("KOS Transport Ready. Calling online() for models"),V("/kosCore/online","/kosCore/online"),console.timeEnd("kosCore:startup")}async offline(){Q.debug("KOS Core going offline"),V("/kosCore/offline","/kosCore/offline")}async unload(){var o;Q.debug("Unloading KOS Core");const e=Date.now();this._unloading=!0,Q.debug("unloading KOS Core");const s=this.modelManager;for(const n of s.models)fg(n.modelData)&&((o=n.unload)==null||o.call(n));const r=Date.now()-e;setTimeout(()=>{M.runInAction(()=>{this._unloading=!1})},1e3-r)}async whenReady(){await M.when(()=>this.status===Xs.READY)}async ready(){Q.debug("Readying KOS Core"),await this._transport.whenReady();const e=this.modelManager.preloadedModels.map(o=>({modelId:o.modelId,model:o,promise:o.whenReady()})),r=(await Promise.allSettled(e.map(o=>{const{promise:n,cancel:i}=hg(5e3,o.model);Promise.race([o.promise.then(()=>{i()}),n])}))).filter(o=>o.status==="rejected");if(r.length)throw Q.error(`There were ${r.length} failed models on model preloading`),Error(`There were ${r.length} failed models on model preloading`);Q.debug("leaving kos-core ready() ")}get isReady(){return this.status===Xs.READY}set transport(e){this._transport=e}get transport(){return this._transport}get coreInitialized(){return this.initialized}get modelsLoaded(){return this.loaded}async init(){Q.debug("entering kos-core init()"),console.time("kosCore:startup"),console.time("kosCore:init"),await this._transport.whenReady(),this.initialized=!0,Q.debug("initialized - leaving kos-core init()"),console.timeEnd("kosCore:init")}async load(){Q.debug("entering kos-core load()"),console.time("kosCore:load"),this.loaded=!0,Q.debug("loaded - leaving kos-core load()"),console.timeEnd("kosCore:load")}static create(e,s,r){var i,a,c;const o=this.getInstance({reset:s,connectionAlias:r});(i=e.extensions)!=null&&i.dataMapper&&Object.keys(e.extensions.dataMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.dataMapper)==null?void 0:f[u];d&&(Array.isArray(d)?d.forEach(p=>{$.dataMapper.registerDataMapper(u,p)}):$.dataMapper.registerDataMapper(u,d))}),(a=e.extensions)!=null&&a.propertyMapper&&Object.keys(e.extensions.propertyMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.propertyMapper)==null?void 0:f[u];d&&$.propertyMapper.registerPropertyMapper(u,d)}),(c=e.extensions)!=null&&c.contextLoader&&Object.keys(e.extensions.contextLoader).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.contextLoader)==null?void 0:f[u];d&&$.loader.registerLoader(u,d)}),x.model.getAll().forEach(([,u])=>{e.models={...e.models,...u.registration}}),e.models={...e.models,...x.model.getLegacyModels()},x.companion.getAll().forEach(([u,d])=>{e.companionModels={...e.companionModels},e.companionModels[u]=e.companionModels[u]||[];for(const h of d)e.companionModels[u].push({type:h})}),x.model.getPreloadModels().forEach(u=>{e.preloadModels.includes(u)||e.preloadModels.push(u)});const n=al.create(e,s);return o.modelManager=n,o}static getInstance(e){return this._instance=window.KosCore,(!this._instance||e!=null&&e.reset)&&(window.KosCore=new this(e==null?void 0:e.connectionAlias),this._instance=window.KosCore),this._instance}}l(O,"_instance");function Io(t){const e=new Uint8Array(t);let s="";for(let r=0;r<e.byteLength;r++)s+=String.fromCharCode(e[r]);return btoa(s)}function pg(t){const e=atob(t),s=new Uint8Array(e.length);for(let r=0;r<e.length;r++)s[r]=e.charCodeAt(r);return s.buffer}async function gg(t){return await t.arrayBuffer()}function mg(t,e){return new Blob([t],{type:e})}async function yg(t){const e={},s=[],r=[];t.forEach((o,n)=>{r.push([n,o])});for(const[o,n]of r)if(n instanceof File){const i=await n.arrayBuffer();s.push({name:o,filename:n.name,type:n.type,data:Io(i)})}else e[o]=n.toString();return{fields:e,files:s}}function bg(t){return new ReadableStream({async start(){},async pull(e){await t(e)},cancel(){}})}async function vg(t){if(!t)return{data:"",contentType:"text/plain"};if(typeof t=="string")return{data:t,contentType:"text/plain"};if(t instanceof ArrayBuffer||t instanceof Uint8Array){let e;return t instanceof Uint8Array?(e=new ArrayBuffer(t.byteLength),new Uint8Array(e).set(t)):e=t,{data:Io(e),contentType:"application/octet-stream",encoding:"base64"}}if(t instanceof Blob){const e=await gg(t);return{data:Io(e),contentType:t.type||"application/octet-stream",encoding:"base64"}}if(t instanceof FormData){const e=await yg(t);return{data:JSON.stringify(e),contentType:"multipart/form-data",encoding:"json"}}throw new Error("Unsupported body type")}const Hs=m.createLogger({name:"kos-fetch"}),wg=process.env.KOS_WS_TIMEOUT?parseInt(process.env.KOS_WS_TIMEOUT):3e4,Eg=()=>new Promise(t=>{setTimeout(()=>{t(!0)},0)}),Mg=t=>t!=null&&t.studio?Vc:t!=null&&t.fos?Gc:Yc,Tg=async(t,e)=>{const s=O.getInstance().transport;await s.whenReady();const r=ot(),o=new URL(t),n=`${o.pathname}${o.search}`;Hs.debug(`path: ${n}`);const i=(e==null?void 0:e.timeout)||wg,a=Mg(e),c=await vg(e==null?void 0:e.body),u={};c.contentType&&(u["content-type"]=c.contentType),c.encoding&&(u["content-encoding"]=c.encoding);const d=ze(a({path:n,requestId:r,method:(e==null?void 0:e.method)||"GET",destinationAddress:(e==null?void 0:e.destinationAddress)||"",ordered:e==null?void 0:e.ordered,tracker:e==null?void 0:e.tracker,bridge:e==null?void 0:e.bridge,headers:{...e==null?void 0:e.headers,...u}}),c.data);return new Promise(h=>{let f=null,p=null;if(e!=null&&e.signal){if(e.signal.aborted){h({headers:Wt({}),status:0,ok:!1,json:async()=>null,body:Qt(""),redirected:!1,statusText:"Request aborted",type:"basic",url:"",clone:function(){throw new Error("Function not implemented.")},bodyUsed:!1,arrayBuffer:function(){throw new Error("Function not implemented.")},blob:function(){throw new Error("Function not implemented.")},formData:function(){throw new Error("Function not implemented.")},text:function(){throw new Error("Function not implemented.")}});return}e.signal.addEventListener("abort",()=>{p&&clearTimeout(p),f&&f(),h({headers:Wt({}),status:0,ok:!1,json:async()=>null,body:Qt(""),redirected:!1,statusText:"Request aborted",type:"basic",url:"",clone:function(){throw new Error("Function not implemented.")},bodyUsed:!1,arrayBuffer:function(){throw new Error("Function not implemented.")},blob:function(){throw new Error("Function not implemented.")},formData:function(){throw new Error("Function not implemented.")},text:function(){throw new Error("Function not implemented.")}})})}p=setTimeout(()=>{Hs.error(`Timeout occurred - url: ${t}`),f&&f(),h({headers:Wt({}),status:404,ok:!1,json:async()=>null,body:Qt(""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){throw new Error("Function not implemented.")},bodyUsed:!1,arrayBuffer:function(){throw new Error("Function not implemented.")},blob:function(){throw new Error("Function not implemented.")},formData:function(){throw new Error("Function not implemented.")},text:function(){throw new Error("Function not implemented.")}})},i);const y=C(r,E=>{p&&clearTimeout(p);const _=(E==null?void 0:E.headers)||{},k=_["content-type"]||"text/plain",R=_["content-encoding"],I=(E==null?void 0:E.body)||"";let S=I;if(R==="base64"&&I)try{S=pg(I)}catch(q){Hs.error("Failed to decode base64 response",q)}const H={headers:Wt(_),status:_.status&&parseInt(_.status)||200,ok:_.status==="200",json:async()=>{try{if(typeof S=="string")return S.length?JSON.parse(S):null;{const J=new TextDecoder().decode(S);return J.length?JSON.parse(J):null}}catch{throw Error("Not a JSON response")}},text:async()=>typeof S=="string"?S:new TextDecoder().decode(S),arrayBuffer:async()=>S instanceof ArrayBuffer?S:new TextEncoder().encode(S).buffer,blob:async()=>S instanceof ArrayBuffer?mg(S,k):new Blob([S],{type:k}),formData:async()=>{const q=new FormData;if(k==="multipart/form-data"&&typeof S=="string")try{const J=JSON.parse(S);J.fields&&Object.entries(J.fields).forEach(([qt,zt])=>{q.append(qt,zt)}),J.files&&Hs.warn("File reconstruction in FormData not fully implemented")}catch{throw new Error("Failed to parse FormData")}return q},body:e!=null&&e.stream?bg(async q=>{if(S instanceof ArrayBuffer)q.enqueue(new Uint8Array(S));else{const J=new TextEncoder;q.enqueue(J.encode(S))}q.close()}):Qt(typeof S=="string"?S:""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){return{...this}},bodyUsed:!1};y.unsubscribe(),Eg().then(()=>h(H))});f=y.unsubscribe;const w=e!=null&&e.fos?s.fosSocket:s.socket;if(!w)throw Error(`No web socket transport available: ${e}`);w==null||w.send(d)})};exports.BASE_URL="kos:";exports.kosFetch=Tg;if(process.env.KOS_MOCK_FETCH==="true"){const t=process.env.KOS_PORT||"9999";exports.kosFetch=fetch,exports.BASE_URL=`http://localhost:${t}`}const _g=m.createLogger({name:"kos-model-visitor",group:"kos-ui-core"});class Sg{constructor(){l(this,"visitedModels",new Set);this.visitedModels=new Set}start(e){var r;if(e.id===void 0)throw new Error("rootModel must have an id");const s=O.getInstance().modelManager.getModelById(e.id);if(!s)throw new Error(`Could not find rootModel with id: ${e.id}`);this.visitedModels.clear(),(r=s.accept)==null||r.call(s,this)}visit(e){var r;if(this.visitedModels.has(e.modelId)){_g.info(`model ${e.modelId} already visited`);return}const s=!!this.visitModel(e.modelData,this);this.visitedModels.add(e.modelId),!s&&((r=e.getChildren)==null||r.call(e).forEach(o=>{var n;(n=o.accept)==null||n.call(o,this)}))}}class ll{constructor(){l(this,"middlewares",[])}use(e){this.middlewares.push(e)}async execute(e){let s=0;const r=async()=>{s++,s<this.middlewares.length&&await this.middlewares[s](e,r)};await this.middlewares[s](e,r)}}const Og=async(t,e)=>{const s=new ll;e.forEach(o=>s.use(o));const r={data:t,result:{}};return await s.execute(r),r.result},Lt=t=>({type:t,build:(e,s)=>O.getInstance().modelManager.createModelInstance(t,e,s).data,buildAsync:async(e,s)=>{const r=O.getInstance().modelManager.createModelInstance(t,e,s);return await r.model.whenInitialized(),r.data}}),Ig=t=>{O.getInstance().modelManager.registerModel(t)},$g=(t,e)=>{O.getInstance().modelManager.registerCompanionModel(t,e)},Ri="/kos/ui/internal/heartbeat/",Cg=({relationshipId:t,destinationAddress:e,onAbort:s,waitTime:r,beatTime:o})=>{const n=O.getInstance().transport,i=new AbortController;let a=performance.now();const c=n.subscribeTopic({topic:`${Ri}${t}`,callback:()=>{a=performance.now()}}),u=r??3e3,d=window.setInterval(()=>{let w=performance.now()-a;w=w/1e3,w>u/1e3&&i.abort()},u),h=o??2e3,f=window.setInterval(()=>{tl({msg:{},options:{topic:`${Ri}${t}`,destinationAddress:e}})},h),p=()=>{window.clearInterval(f),window.clearInterval(d),c()},y=()=>{p(),s&&s(),i.signal.removeEventListener("abort",y)};return i.signal.addEventListener("abort",y),{cleanUpHeartbeat:p}},ul=(...t)=>e=>t.reduce((s,r)=>r(s),e),Dg={maxAttempts:5,baseDelayMs:100,backoffFactor:1.5};async function xg(t,e){let s=1;const r={...Dg,...e},{maxAttempts:o,baseDelayMs:n,backoffFactor:i}=r;let a=n;for(;s<=o;)try{return await t()}catch(c){if(m.error(`Attempt ${s} failed: ${c}`),s<o)a=n*Math.pow(i,s),await new Promise(u=>setTimeout(u,a)),s++;else throw c}throw new Error("All attempts failed")}const Ag=m.createLogger({name:"kos-service-request"}),ae=t=>({isMock:!1,URL:exports.BASE_URL}),Rg=(t,e,s)=>async({id:r,tracker:o,urlOverride:n,ordered:i,studio:a,fos:c,bridge:u,destinationAddress:d})=>{const h={method:"DELETE"};t&&(h.destinationAddress=t),o&&(h.tracker=o),Ft(h,{ordered:i,studio:a,fos:c,bridge:u,destinationAddress:d});const f=await s(n||`${e}/${r}`,h);if(!f.ok)throw Error(`There was a problem deleting the model; returned status ${f.status}`);return await f.json()},Ft=(t,{ordered:e,studio:s,fos:r,destinationAddress:o,bridge:n,timeout:i})=>(i&&(t.timeout=i),e&&(t.ordered=e),s&&(t.studio=s),r&&(t.fos=r),n&&(t.bridge=n),(o||o==="")&&(t.destinationAddress=o),t),Pg=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,timeout:c,destinationAddress:u})=>{const d={method:"GET"};t&&(d.destinationAddress=t),Ft(d,{timeout:c,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:u});const f=await s(r||e,d);if(!f.ok){let y;try{y=await f.json()}catch{}throw new ge(`There was a problem retrieving the model; returned status ${f.status}`,y)}return await f.json()},kg=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,tracker:c,timeout:u,destinationAddress:d})=>{const h={method:"GET"};t&&(h.destinationAddress=t),c&&(h.tracker=c),Ft(h,{timeout:u,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:d});const f=r||e;Ag.debug(`resolvedUrl: ${f}`);const p=await s(f,h);if(!p.ok){let w;try{w=await p.json()}catch{}throw new ge(`There was a problem retrieving the model; returned status ${p.status}`,w)}return await p.json()},Lg=(t,e,s)=>async({urlOverride:r,id:o,ordered:n,studio:i,fos:a,bridge:c,timeout:u,destinationAddress:d})=>{const h={method:"GET"};t&&(h.destinationAddress=t),Ft(h,{timeout:u,ordered:n,studio:i,fos:a,bridge:c,destinationAddress:d});const f=r||`${e}/${o}`,p=await s(f,h);if(!p.ok){let w;try{w=await p.json()}catch{}throw new ge(`There was a problem retrieving the model; returned status ${p.status}`,w)}return await p.json()};class ge extends Error{constructor(s,r){super(s);l(this,"payload");this.name="FetchException",this.payload=r}}const Pi=(t,e,s)=>async({model:r,urlOverride:o,ordered:n,tracker:i,studio:a,fos:c,bridge:u,timeout:d,destinationAddress:h})=>{const f={method:"POST",body:typeof r=="string"?r:JSON.stringify(r)};t&&(f.destinationAddress=t),i&&(f.tracker=i),Ft(f,{timeout:d,ordered:n,studio:a,fos:c,bridge:u,destinationAddress:h});const p=await s(o||e,f);if(!p.ok){let w;try{w=await p.json()}catch{}throw new ge(`There was a problem sending the POST data; returned status ${p.status}`,w)}return await p.json()},ki=(t="POST",e,s,r)=>async({model:o,id:n,urlOverride:i,ordered:a,studio:c,fos:u,bridge:d,timeout:h,destinationAddress:f})=>{const p={method:t};o&&(p.body=JSON.stringify(o)),e&&(p.destinationAddress=e),Ft(p,{timeout:h,ordered:a,studio:c,fos:u,bridge:d,destinationAddress:f});const y=await r(i||`${s}/${n}`,p);if(!y.ok){let E;try{E=await y.json()}catch{}throw new ge(`There was a problem modifying the model; returned status ${y.status}`,E)}return await y.json()},oe={build:({destinationAddress:t="",basePath:e,getAllPath:s,getOnePath:r,deleteModelPath:o,addModelPath:n,modifyModelPath:i,mock:a=!1})=>{const c=a?fetch:exports.kosFetch;return{getAll:Pg(t,s||e,c),getModelById:Lg(t,r||e,c),getOne:kg(t,r||e,c),addModel:Pi(t,n||e,c),deleteModel:Rg(t,o||e,c),modifyModel:ki("POST",t,i||e,c),putModel:ki("PUT",t,i||e,c),postModel:Pi(t,n||e,c)}}};function Fg(t,e,s="get"){const r=t.serviceResponses;if(r)return r.getByPath(e,s)}function Ng(t,e,s="get"){const r=t.serviceResponses;return r?r.has(`${s.toUpperCase()}:${e}`):!1}function Ug(t,e,s="get"){const r=t.serviceResponses;r&&r.delete(`${s.toUpperCase()}:${e}`)}function jg(t,e){const s=t.serviceResponses;s&&s.clearPath(e)}function Bg(t){const e=t.serviceResponses;e&&e.clear()}const Kg=ot(),dl=()=>`kos-${Kg}`,Hg=t=>!!t&&!t.includes("VM_SERVICE")&&t.startsWith(dl()),bn=async(t,e=6e4)=>new Promise((s,r)=>{const{unsubscribe:o}=C(t,i=>{D.debug(`recieved response for refId ${t}: ${i}`),o(),clearTimeout(n);try{const a=i!=null&&i.body?JSON.parse(i.body):{};s(a)}catch{const a=(i==null?void 0:i.body)||{};s(a)}}),n=setTimeout(()=>{o(),r(Error(`Request with ID ${t} timed out. Cancelling.`))},e)}),qg=async(t,e,s)=>{const r=bn(s),o=await Promise.allSettled([t(e),r]);if(o[0].status==="fulfilled"){if(o[1].status==="rejected")throw Error(o[1].reason);if(o[0].value){if(o[1].value.error)throw Error(o[1].value.error);return o[0].value.data=o[1].value,o[0].value}}else throw Error(o[0].reason)},zg=async({topic:t,msg:e,requestId:s})=>{const r=s??ot(),o=bn(r);V(t,e,{sync:r});const n=await o;if(n.error)throw Error(n.error);return n},he=new Map;class hl{constructor(e){l(this,"_context");l(this,"_parent");l(this,"_id");this._id=e,this._context=new M.ObservableMap({}),this._parent="",M.makeAutoObservable(this)}setParent(e){X(()=>{this._parent=e})}get id(){return this._id}get context(){return this._context}get parentModel(){var e;if(this._parent)return(e=Oe(this._parent))==null?void 0:e.model}get companionModels(){const e=Oe(this._id);return e!=null&&e.model?Mc(e.model):[]}get(e){var s,r;if(this._context.has(e))return this._context.get(e);if(this.companionModels.length>0){const o=this.companionModels.find(n=>{var i;return!n.id||!he.has(n.id)?!1:(i=he.get(n.id))==null?void 0:i.context.has(e)});if(o)return(s=he.get(o.id))==null?void 0:s.get(e)}if(this._parent)return(r=he.get(this._parent))==null?void 0:r.get(e)}set(e,s){this._context.set(e,s)}remove(e){this._context.delete(e)}clear(){this._context.clear()}}const Y={createContext:(t,e)=>{const s=he.get(t)??new hl(t);if(e){if(!he.has(e))throw new Error(`Parent context ${e} does not exist`);s.setParent(e)}else t!=="root"&&s.setParent("root");return he.set(t,s),s},getContext:t=>he.get(t),deleteContext:t=>{he.delete(t)},setParentContext:(t,e)=>{var s;if(!he.has(e))throw new Error(`Parent context ${e} does not exist`);(s=he.get(t))==null||s.setParent(e)},rootContext:()=>he.get("root")};Y.createContext("root");const Vg=t=>Y.getContext(t.id),ho=m.createLogger({name:"kos-data-container"});class vn{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"idx");this._data=M.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1,this._optionsMap=(e==null?void 0:e.indexMap)||{};const s=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((r,o)=>(r[o]=void 0,r),{}):{};this._index=M.observable.map(s),this.idx=Se(),M.makeAutoObservable(this,{}),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new dn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}get revision(){return this._revision}addAll(e){M.runInAction(()=>{e.forEach(s=>this.addModel(s))})}removeAll(e){M.runInAction(()=>{e.forEach(s=>this.removeModel(s))})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){M.runInAction(()=>{this._revision=this._revision+1})}addModel(e,s){const r=M.isObservable(e)?e:M.observable.object(e),o=this._disposerMap.get(e.id);o&&(o(),this._disposerMap.delete(e.id)),this._data.set(r.id||"",r),s||this.increment();const n=M.observe(r,i=>{Object.values(this._optionsMap||{}).includes(i.name)&&this.increment()});this._disposerMap.set(r.id||"",n)}removeModel(e){this._data.delete(e),this.increment();const s=this._disposerMap.get(e);s&&(s(),this._disposerMap.delete(e))}updateModel(e){const s=M.observable.object(e);this._data.set(s.id||"",s),this.increment()}getModel(e){return this._data.get(e)}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(ho.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(ho.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return ho.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async clear(){this._data.clear(),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id}))}}}class Gg{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"childRegistration");l(this,"model");this.type=e,this.model=s,this.childRegistration=r}get factory(){return ie.Factory.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!1,factory:this.factory},...this.childRegistration}}get predicate(){return Te(this.type)}}class Yg{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"model");l(this,"childRegistration");this.type=e,this.model=s,this.childRegistration=r}get factory(){return ie.Singleton.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!0,factory:this.factory},...this.childRegistration}}get predicate(){return Te(this.type)}}class fl{constructor(){l(this,"_token");M.makeAutoObservable(this),C("token",e=>{this.token=e==null?void 0:e.body})}get token(){return this._token}set token(e){this._token=e}}class pl{constructor(){l(this,"routes",[]);l(this,"openApiRoutes",[])}use(e,s,...r){this.routes.push({method:e,path:s,middlewares:r});const o=this.extractOpenApiParams(s);this.openApiRoutes.push({method:e,path:s,parameters:o})}remove(e,s){const r=this.routes.length;return this.routes=this.routes.filter(o=>!(o.method===e&&o.path===s)),this.openApiRoutes=this.openApiRoutes.filter(o=>!(o.method===e&&o.path===s)),r-this.routes.length}removeAllForPath(e){const s=this.routes.length;return this.routes=this.routes.filter(r=>r.path!==e),this.openApiRoutes=this.openApiRoutes.filter(r=>r.path!==e),s-this.routes.length}getRoutes(){return this.routes.map(e=>({method:e.method,path:e.path}))}async handle(e,s){var a;const{path:r,query:o,params:n}=this.extractPathParams(e.path),i={...e,params:n,query:o};for(const c of this.routes){const u=this.matchRoute(c.path,r);if(c.method===e.method&&u){i.params=u;let d=0;const h=async()=>{if(d<c.middlewares.length){const f=c.middlewares[d++];await f(i,s,h)}};await h();return}}(a=s.status)==null||a.call(s,404).send({error:"Route not found"})}extractOpenApiParams(e){return e.split("/").filter(s=>s.startsWith(":")).map(s=>({name:s.slice(1),in:"path",required:!0,schema:{type:"string"}}))}generateOpenApiSpec(){const e={};for(const s of this.openApiRoutes)e[s.path]||(e[s.path]={}),e[s.path][s.method.toLowerCase()]={summary:s.description||`Handles ${s.method} ${s.path}`,parameters:s.parameters||[],responses:{200:{description:"Successful response"}}};return{openapi:"3.0.0",info:{title:"Kos Router API",version:"1.0.0",description:"Dynamically generated OpenAPI documentation"},paths:e}}extractPathParams(e){const[s,r]=e.split("?"),o=this.parseQueryParams(r);for(const n of this.routes){const i=this.matchRoute(n.path,s);if(i)return{path:s,query:o,params:i}}return{path:s,query:o,params:{}}}matchRoute(e,s){const r=e.split("/").filter(Boolean),o=s.split("/").filter(Boolean);if(r.length!==o.length)return null;const n={};for(let i=0;i<r.length;i++)if(r[i].startsWith(":"))n[r[i].slice(1)]=decodeURIComponent(o[i]);else if(r[i]!==o[i])return null;return n}parseQueryParams(e){return e?e.split("&").reduce((s,r)=>{const[o,n]=r.split("=").map(decodeURIComponent);return s[o]=n??"",s},{}):{}}}const gl=m.createLogger({name:"intent-service"}),Wg=t=>{Yo(`/kos/intent/${t.type}`)?V(`/kos/intent/${t.type}`,t.options,{"kos.intent.type":t.type}):gl.info(`No subscribers for intent ${t.type}. Intent not sent.`)},Qg=async t=>new Promise(e=>{const{type:s,options:r}=t;if(Yo(`/kos/intent/${t.type}`)){const o=ot(),{unsubscribe:n}=C(o,a=>{clearTimeout(i),n(),a&&(a.headers=a.headers||{},a.headers["kos.intent.type"]=s,a.headers.responseId=o),e([null,{body:a==null?void 0:a.body,payload:a}])}),i=setTimeout(()=>{n(),e([`Intent ${s} timed out after 1 second`,null]),console.warn(`Intent ${s} timed out after 1 second`)},1e3);V(`/kos/intent/${s}`,r,{"kos.intent.type":s,sync:o})}else gl.info(`No subscribers for intent ${t.type}. Intent not sent.`),e([null,{body:void 0,payload:void 0}])}),Ae=m.createLogger({name:"app-startup-service"});async function ml(t,e={}){const{timeout:s=3e4,throwOnTimeout:r=!0,requirePostStarted:o=!1}=e;if(t.length===0)return Ae.warn("No app IDs provided to waitForAppsToStart"),!0;Ae.debug(`Waiting for apps to start: ${t.join(", ")}`);try{const n=t.map(c=>`/kos/app/started/${c}`),i=await Zo(n,{getCurrentState:async()=>{try{const{default:c}=await Promise.resolve().then(()=>Hc),[u,d]=await c.get("/api/kos/apps/started");return u?(Ae.error("Error fetching started apps:",u),[]):d}catch(c){Ae.error("Failed to fetch app startup status:",c)}return[]},shouldUseFetchedState:c=>t.every(u=>{const d=c.find(h=>h.appId===u);return!(!d||!d.started||o&&!d.postStarted)}),timeout:s}),a=t.filter(c=>{const u=i.find(d=>d.appId===c);return!!(!u||!u.started||o&&!u.postStarted)});if(a.length>0){const c=`Apps not started: ${a.join(", ")}`;if(Ae.error(c),r)throw new Error(`App startup timeout: ${c}`);return!1}return Ae.info(`All apps started successfully: ${t.join(", ")}`),!0}catch(n){const i=`Failed to wait for apps to start: ${t.join(", ")}`;if(Ae.error(i,n),r)throw new Error(`${i} - ${n instanceof Error?n.message:String(n)}`);return!1}}async function Zg(t,e={}){return ml([t],e)}async function Xg(t,e=!1){const s={};try{const r=await exports.kosFetch("kos:///api/kos/apps/started");if(!r.ok)return t.forEach(i=>s[i]=!1),s;const o=await r.json(),n=(o==null?void 0:o.data)??[];t.forEach(i=>{const a=n.find(c=>c.appId===i);s[i]=(a==null?void 0:a.started)===!0&&(!e||(a==null?void 0:a.postStarted)===!0)})}catch(r){Ae.error("Failed to check app startup status:",r),t.forEach(o=>s[o]=!1)}return s}async function Jg(){try{const t=await exports.kosFetch("kos:///api/kos/apps/started");if(!t.ok)return[];const e=await t.json();return(e==null?void 0:e.data)??[]}catch(t){return Ae.error("Failed to fetch started apps:",t),[]}}const $o=M.when,wn=M.computed,X=M.runInAction,W=M.autorun,yl=M.reaction,En=M.observable,Mn="Not Assigned",em="kos.trouble.added",tm="kos.trouble.removed";var ve=(t=>(t.TroubleRank="kos.trouble.rank.mapper",t.TroubleColor="kos.trouble.color.mapper",t.TroubleRole="kos.trouble.role.mapper",t))(ve||{}),gs=(t=>(t.TIME_CHANGE="/kos/internal/time/time",t.DAY_CHANGE="/kos/internal/time/day",t.TIMEZONE_CHANGE="/kos/internal/time/timezone",t))(gs||{});const bl=m.createLogger({name:"config-bean-service",group:"Services"}),Tn=exports.BASE_URL,vl=t=>(t==null?void 0:t.decimals)!==void 0,{postModel:sm,getOne:rm}=oe.build({destinationAddress:"",basePath:`${Tn}/kos/config/`}),wl=async(t,e,s="/api/kos/config")=>(bl.debug(`sending modify request for ConfigBean: ${t}`),sm({model:e,urlOverride:`${Tn}${s}/${t}`})),El=async(t,e="/api/kos/config")=>(bl.debug(`sending get request for ConfigBean: ${t}`),await rm({urlOverride:`${Tn}${e}/details/${t}/15`})),_n=t=>t.toLowerCase()==="true"||t.toLowerCase()==="false",jr=t=>{try{const e=Number(t);return!isNaN(e)}catch{return!1}};function Ml(t=[]){return t.reverse().reduce((e,s)=>{const{overrides:r}=s;return r&&(e={...e,...r}),e},{})}function Tl(t,e="",s={}){for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){const o=e?`${e}.${r}`:r;typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])?Tl(t[r],o,s):s[o]=t[r]}return s}const _l=(t,e)=>{const s=t.details[0].bean||Ml(t.details[0].scopes),r=Tl(s);M.runInAction(()=>{const o={...r};e.props.setValues(o)})},Sl=(t,e)=>{M.runInAction(()=>{t.changes.forEach(s=>{const r=s.attr;let o=s.currentValue,n=s.previousValue;typeof o=="string"&&_n(o)&&(o=o.toLowerCase()=="true",n=(n==null?void 0:n.toLowerCase())=="true"),typeof o=="string"&&jr(o)&&(o=Number(o),n=Number(n)),e.props[r]=o,e.prevProps[r]=n})})},Ol=t=>Object.fromEntries(t.props.entries),om=t=>e=>s=>t.build(e,s);var nm=Object.defineProperty,im=Object.getOwnPropertyDescriptor,Il=(t,e,s,r)=>{for(var o=r>1?void 0:r?im(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&nm(e,s,o),o};function am(t,e){for(const s of t)if(new RegExp(`^${s}$`).test(e))return s}const Sn="config-bean-model",qs=m.getLogger(Sn),cm=nt("path");let ir=class{constructor(t,e){l(this,"_modifyConfigBean");l(this,"_getConfigBean");l(this,"_schema");l(this,"id");l(this,"path");l(this,"props");l(this,"prevProps");l(this,"serviceBasePath");Object.assign(this,e),this.id=t,this.path=e.path,this.serviceBasePath=e.serviceBasePath;const{modifyConfigBean:s=wl,getConfigBean:r=El}=e;this._modifyConfigBean=s,this._getConfigBean=r,this.props=Se(),this.prevProps=Se()}get values(){return this.props.values}async ready(){qs.debug(`readying config bean ${this.path}`),qs.debug(`complete readying config bean ${this.path}`)}async load(){qs.debug(`loading config bean ${this.path}`);const t=await this._getConfigBean(this.path,this.serviceBasePath);if(t!=null&&t.data){const e=t.data;_l(e,this),qs.debug(this.values);const s=t==null?void 0:t.data.details[0].schema;X(()=>{s&&(this._schema=s)})}}get schemaKeys(){var t;return Object.keys(((t=this._schema)==null?void 0:t.schema)||{})}getSchemaForProperty(t){var s,r;if(this.schemaKeys.includes(t))return(s=this._schema)==null?void 0:s.schema[t];const e=am(this.schemaKeys,t);if(e)return(r=this._schema)==null?void 0:r.schema[e]}async updateProperty(t,e){this.props[t]=e,await this.updateConfigBean()}async updateConfigBean(){const t=Ol(this);await this._modifyConfigBean(this.path,t,this.serviceBasePath)}handleConfigBeanUpdated(t){Sl(t,this)}};Il([B({topic:`/kos/config/${cm}`,websocket:!0})],ir.prototype,"handleConfigBeanUpdated",1);ir=Il([A(Sn)],ir);const bs=new ye({class:ir,type:Sn}),Br=({path:t,lazy:e,serviceBasePath:s})=>(r,o)=>{r[F]=r[F]||{},r[F][o]={modelType:bs.type,id:`${bs.type}-${t}`,options:{path:t,serviceBasePath:s},lifecycle:U.INIT,lazy:e}},{URL:$l}=ae(),{getOne:lm,getAll:um}=oe.build({basePath:`${$l}/api/kos/regions/info`}),Cl=async()=>{try{return await lm({})}catch{return}},Dl=async()=>{try{return await um({urlOverride:`${$l}/api/kos/regions`})}catch{return}},dm=Object.freeze(Object.defineProperty({__proto__:null,getRegionInfo:Cl,getRegions:Dl},Symbol.toStringTag,{value:"Module"}));var le=(t=>(t[t.family=0]="family",t[t.scale=1]="scale",t[t.offset=2]="offset",t[t.decimals=3]="decimals",t[t.alias=4]="alias",t[t.system=5]="system",t))(le||{});const xl={s:["time",1,0,0],second:["time",1,0,0],m:["time",1/60,0,0],minute:["time",1/60,0,0],h:["time",1/3600,0,0],hour:["time",1/3600,0,0],day:["time",1/86400,0,0],week:["time",1/604800,0,0],month:["time",1/2628e3,0,0],year:["time",1/31536e3,0,0],default:["time",1/.001,0,0],ms:["time",1/.001,0,0],millisecond:["time",1/.001,0,0],microsecond:["time",1/1e-6,0,0],nanosecond:["time",1/1e-9,0,0],picosecond:["time",1/1e-12,0,0]};function hm(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return o[n.name]=i,n.alias&&(o[n.alias]=i),o},{...xl});return{...t,...r}}function fm(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{},a=i[s]||{};i[s]=a;const c=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return a[n.name]=c,Object.hasOwn(n,"default")&&Object.defineProperty(a,"default",{value:c,writable:!0,enumerable:!0,configurable:!0}),o[n.measure]=i,n.alias&&(o[n.alias]=i),o},{time:{[s]:{...xl}}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}function pm(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{};return Object.hasOwn(n,"default")&&(i[s]=n.name),o[n.measure]=i,o},{time:{[s]:"millisecond"}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}var gm=Object.defineProperty,mm=Object.getOwnPropertyDescriptor,On=(t,e,s,r)=>{for(var o=r>1?void 0:r?mm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&gm(e,s,o),o};const Js="region-info-model",Gt=m.createLogger({name:"region-info-model"});let vs=class{constructor(t){l(this,"id");l(this,"unitSystemMap");l(this,"measureMap");l(this,"defaultMeasureMap");l(this,"regionMap");l(this,"timeFormats");l(this,"dateFormats");l(this,"unitSystems");l(this,"regionSource");l(this,"region");l(this,"regions",[]);l(this,"timeZoneMap",{});this.id=t,this.unitSystems={},this.unitSystemMap={},this.measureMap={},this.defaultMeasureMap={},this.timeFormats={},this.regions=[],this.dateFormats={},this.timeZoneMap={},this.regionMap={}}get availableRegions(){return this.regions}get defaultUnitSystem(){return String(this.regionSource.props.unitSystemId).toLowerCase()||""}get unitSystemId(){return this.defaultUnitSystem}get timeFormatId(){const t=this.regionSource.props.timeFormatId;if(!t)return"";const e=String(t),s=this.timeFormats[e];return s?String(s.id):""}get selectedTimeFormat(){const t=this.timeFormatId;return t?String(this.timeFormats[t].format):"HH:mm:ss"}get is12HourTimeFormat(){const t=this.timeFormatId;return t?this.timeFormats[t].ampm:!0}get dateFormatId(){const t=this.regionSource.props.dateFormatId;if(!t)return"";const e=String(t);return e?this.dateFormats[e].id:""}get selectedDateFormat(){const t=this.dateFormatId;return t?this.dateFormats[t].format:""}get selectedDateOrder(){const t=this.dateFormatId;return t?this.dateFormats[t].order.toLowerCase():"dmy"}get selectedCountry(){return this.regionSource.props.country||"en"}get selectedTimeZone(){return this.regionSource.props.timeZone||""}get timeZones(){return this.regionId?this.timeZoneMap[this.regionId]||[]:[]}get allTimeZones(){return Intl.supportedValuesOf("timeZone")}get regionId(){return this.region.props.regionId||""}get selectedRegion(){return this.regionMap[this.regionId]}get selectedUnitSystem(){return String(this.regionSource.props.unitSystemId)||""}get timeFormatOptions(){return Object.keys(this.timeFormats).map(t=>({id:t,format:this.timeFormats[t].format,ampm:this.timeFormats[t].ampm}))}get dateFormatOptions(){return Object.keys(this.dateFormats).map(t=>({id:t,format:this.dateFormats[t].format,order:this.dateFormats[t].order}))}get unitSystemOptions(){return Object.keys(this.unitSystems).map(t=>({id:t,name:t}))}setSelectedTimeFormat(t){if(!this.timeFormatOptions.find(e=>e.id===t))throw Error(`Invalid time format id. Must be one of ${this.timeFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("timeFormatId",t)}setSelectedDateFormat(t){if(!this.dateFormatOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.dateFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("dateFormatId",t)}setSelectedUnitSystem(t){if(!this.unitSystemOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.unitSystemOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("unitSystemId",t)}getUnitSystem(t){if(!t)return this.defaultUnitSystem;const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[le.system]}getUnitMeasure(t){const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[le.family]}getDefaultUnitDecimalPlaces(t,e,s){if(!t||!e)throw Error("Measure and unit system are required");const r=s==="drt"?"second":s,o=this.measureMap[t];if(!o)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const n=o[e.toLowerCase()];if(!n)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(o).join(", ")}`);const i=n[r||"default"];if(!i)throw Error(`No unit "${r||"default"}" found for measure: ${t} and unit system: ${e}. Unit should come from list of units: ${Object.keys(n).join(", ")}`);return i[le.decimals]}getDefaultUnitForMeasure(t,e){if(!t||!e)throw Error("Measure and unit system are required");const s=this.defaultMeasureMap[t];if(!s)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const r=s[e.toLowerCase()];if(!r)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(s).join(", ")}`);return r}convertByUnit(t,e,s){if(e[le.family]!==s[le.family])throw new Error(`Cannot convert between units of different families: ${e[le.family]} and ${s[le.family]}`);const r=e[le.offset],o=e[le.scale],n=s[le.scale],i=s[le.offset],a=s[le.decimals];return((t-r)/(o/n)+i).toFixed(a)}convertByUnitName(t,e,s){const r=this.unitSystemMap[e],o=this.unitSystemMap[s];if(!r||!o)throw new Error(`No unit found with name: ${e} or ${s}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return this.convertByUnit(t,r,o)}convert(t,e,s){var a,c;if(e.unit&&s.unit)return this.convertByUnitName(t,e.unit,s.unit);const r=e.unit||"",o=s.unit||"";let n=this.unitSystemMap[r],i=this.unitSystemMap[o];if(!i&&s.measure&&s.system){const u=this.measureMap[s.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);i=(a=u[s.system])==null?void 0:a.default,i||Gt.info("Could not find default unit for measure",s.measure)}if(!n&&e.measure&&e.system){const u=this.measureMap[e.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);n=(c=u[e.system])==null?void 0:c.default,n||Gt.info("Could not find default unit for measure",e.measure)}return!n||!i?(Gt.warn("Could not find unit to convert to or from. Return value as is"),String(t)):this.convertByUnit(t,n,i)}async init(){Gt.debug("initializing region info")}async load(){Gt.debug("loading region info");const t=await Dl();t&&(this.regions=t.data.map(s=>s.id),this.timeZoneMap=t.data.reduce((s,r)=>({...s,[r.id]:r.timeZones}),this.timeZoneMap),this.regionMap=t.data.reduce((s,r)=>({...s,[r.id]:r}),{}));const e=await Cl();e&&(this.unitSystems=e.data.unitSystems.reduce((s,r)=>{const o={id:r.id,name:r.id};return s[r.id]=o,s},this.unitSystems),this.unitSystemMap=e.data.unitSystems.reduce(hm,{}),this.measureMap=e.data.unitSystems.reduce(fm,{}),this.defaultMeasureMap=e.data.unitSystems.reduce(pm,{}),this.timeFormats=e.data.timeFormats.reduce((s,r)=>({...s,[r.id]:r}),{}),this.dateFormats=e.data.dateFormats.reduce((s,r)=>({...s,[r.id]:r}),{}))}async ready(){var t,e;await((e=(t=this.regionSource).ready)==null?void 0:e.call(t))}};On([Br({path:"kos:service:region:settings"})],vs.prototype,"regionSource",2);On([Br({path:"kos:service:region"})],vs.prototype,"region",2);vs=On([A(Js)],vs);const re={registration:{[Js]:{class:vs,singleton:!0}},type:Js,factory:ie.Singleton.create(Js)},ar=({source:t,defaultSystem:e="si",defaultMeasure:s})=>{let r={system:e,measure:s};return typeof t=="string"?r={...r,unit:t}:r={...r,...t},r},In=(t,e,s)=>{const{model:r}=Oe(re.type);if(!r)throw new Error("RegionInfo model not found");if(!nr(r))throw new Error("RegionInfo model not ready");const o={system:r.defaultUnitSystem},n=ar({source:e}),i=ar({source:s||o,defaultMeasure:r.getUnitMeasure(n.unit||"")});return r.convert(t,n,i)};function Li(t,e,s){const r=e.toLowerCase().replace(/_/g,"-").replace(/s$/,""),o=new Intl.NumberFormat().resolvedOptions().locale??"en-US";try{const n=(s==null?void 0:s.mode)||"long",i=(s==null?void 0:s.maxDecimals)??2,a=(s==null?void 0:s.minDecimals)??0;return new Intl.NumberFormat(o,{style:"unit",unit:r,unitDisplay:n,minimumFractionDigits:a,maximumFractionDigits:i}).format(t)}catch{return e}}const ym=(t,e,s,r)=>{const o=In(t,e,s),n=ar({source:e}),{model:i}=Oe(re.type);if(!i)throw new Error("RegionInfo model not found");const a=i.getUnitMeasure(n.unit||""),c={system:i.defaultUnitSystem},u=ar({source:s||c,defaultMeasure:i.getUnitMeasure(n.unit||"")}),d=i.getDefaultUnitForMeasure(a,u.system),h=i.getDefaultUnitDecimalPlaces(a,u.system),f={...r,minDecimals:(r==null?void 0:r.minDecimals)??h,maxDecimals:(r==null?void 0:r.maxDecimals)??h};return{value:o,unit:d||n.unit||"",display:Li(o,d||n.unit||"",{...f,mode:"long"}),shortDisplay:Li(o,d||n.unit||"",{...f,mode:"short"})}};function Fi({start:t,end:e,count:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<2)throw new Error("Count should be at least 2 for distribution.");if(t>=e)throw new Error("Start should be less than end.");const o=(e-t)/(s-1),n=[];for(let i=0;i<s;i++){const a=Math.round(t+i*o);n.push(a.toFixed(r))}return n}function Ni({start:t,end:e,interval:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<=0)throw new Error("Interval should be a positive number.");if(t>=e)throw new Error("Start should be less than end.");const o=[];let n=t;for(;n<=e;)o.push(n.toFixed(r)),n+=s;return o[o.length-1]!==e.toString()&&o.push(e.toString()),o}const ht=(t,e)=>s=>!t||!e?s:jr(s)?In(Number(s),t,e):s,bm=(t,e,s,r)=>{if((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options))return[];if(t.options.type==="rangeCount")return Fi(t.options).map(ht(s,r));if(t.options.type==="rangeInterval")return Ni(t.options).map(ht(s,r));if(t.options.type==="list"){const{list:o}=t.options;return o.map(ht(s,r))}else{if(t.options.type==="unitSystemRangeCount"&&e)return Fi(t.options.unitSystems[e]).map(ht(s,r));if(t.options.type==="unitSystemRangeInterval"&&e)return Ni(t.options.unitSystems[e]).map(ht(s,r));if(t.options.type==="unitSystemList"&&e){const{list:o}=t.options.unitSystems[e];return o.map(ht(s,r))}}return[]},vm=(t,e)=>{if(!((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options)))return t.options.type==="unitSystemRangeCount"&&e?{type:"rangeCount",...t.options.unitSystems[e]}:t.options.type==="unitSystemRangeInterval"&&e?{type:"rangeInterval",...t.options.unitSystems[e]}:t.options.type==="unitSystemList"&&e?{type:"list",...t.options.unitSystems[e]}:t.options.type==="unitSystemKeypad"&&e?{type:"keypad",...t.options.unitSystems[e]}:t.options};var wm=Object.defineProperty,Em=Object.getOwnPropertyDescriptor,$n=(t,e,s,r)=>{for(var o=r>1?void 0:r?Em(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&wm(e,s,o),o};function Mm(t){return(t==null?void 0:t.type)==="enum"}function Tm(t){switch(t){case"s":return"second";case"ms":return"millisecond";case"min":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"m":return"month";case"y":return"year";case"ml":return"milliliter";default:return t}}function _m(t,e){const s=new Date;s.setHours(0,0,0,0);const r=new Date(s.getTime()+t*1e3);return je.format(r,e)}const er="config-bean-prop-model",ft=m.createLogger({name:"config-bean-prop-model"}),Sm=nt("path"),Om=nt("serviceBasePath");let ws=class{constructor(t,e){l(this,"id");l(this,"path");l(this,"attribute");l(this,"converter");l(this,"formatter");l(this,"optionsExpander");l(this,"serviceBasePath");l(this,"regionInfo");l(this,"bean");this.id=t,this.path=e.path,this.attribute=e.attribute,this.converter=e.converter,this.formatter=e.formatter,this.serviceBasePath=e.serviceBasePath,this.optionsExpander=e.optionsExpander}getDefaultUnitDecimalPlaces(t,e,s){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return vl(this.displayOptions)?this.displayOptions.decimals:this.regionInfo.getDefaultUnitDecimalPlaces(t,e,s)}getDefaultUnitForMeasure(t,e){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return this.regionInfo.getDefaultUnitForMeasure(t,e)}get schemaType(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.type?t.type:"String"}get schemaFormat(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.format?Tm(t.format):""}get options(){var i;const t=this.regionInfo.defaultUnitSystem,e=this.getConverter(),s=((i=e==null?void 0:e.to)==null?void 0:i.system)??t,r=this.bean.getSchemaForProperty(this.attribute),o=Mm(r)?r.values:bm(r,s,e==null?void 0:e.from,e==null?void 0:e.to),n=o.length>0?o.map(a=>({label:a,value:a})):[];return this.optionsExpander?typeof this.optionsExpander=="function"?this.optionsExpander(s,o):this.optionsExpander:n}convertUnit(t,e,s){const r=(t==null?void 0:t.measure)||s,o=(t==null?void 0:t.system)||e,n=t==null?void 0:t.unit;return{measure:r,system:o,unit:n}}getConverterUnits(){const t=this.regionInfo.defaultUnitSystem,e=this.getConverter();if(!e)throw Error("No converter defined");const s=e.measure,r=this.convertUnit(e.from,"si",s),o=this.convertUnit(e.to,t,s);return{backend:r,display:o}}set value(t){this.updateProperty(t)}get value(){return this.getValue(!0)}get rawValue(){return this.bean.props[this.attribute]}get significantValue(){var o,n;const t=this.value,e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=(s==null?void 0:s.measure)||((o=s==null?void 0:s.to)==null?void 0:o.measure);if(!isNaN(t)&&s&&r){const i=this.getDefaultUnitDecimalPlaces(r,e,(n=s==null?void 0:s.to)==null?void 0:n.unit);try{const c=this.getFormatterOptions(s);if(c){let u=String(t);return u=c.formatToParts(Number(t))[0].value,Number(u)}}catch(c){ft.info(`error formatting value ${t}`,c)}return Number(t).toFixed(i)}return t}get previousValue(){return this.getValue(!1)}getValue(t){const e=this.bean[t?"props":"prevProps"][this.attribute];if(typeof e=="boolean")return e;if(this.getConverter()&&!isNaN(e)){const{backend:r,display:o}=this.getConverterUnits();return this.regionInfo.convert(Number(e),r,o)}return e||""}async activate(){ft.debug(`activating config bean ${this.id}`)}get displayValue(){const t=this.value;if(typeof t=="boolean")return String(t);if(this.schemaFormat==="drt"){const s=this.regionInfo.is12HourTimeFormat?"h:mm:ss a":"HH:mm:ss";return _m(t,s)}if(!isNaN(t))try{const e=this.getConverter(),s=this.getFormatterOptions(e);if(s){let r=String(t);return r=s.format(Number(t)),r}}catch(e){ft.error(`error formatting value ${t}`,e)}return String(t)}get unit(){const t=this.getConverter();if(!isNaN(this.value)){const e=this.getFormatterOptions(t);if(e){const r=e.formatToParts(Number(this.value)).find(o=>o.type==="unit");return(r==null?void 0:r.value)??this.getDefaultUnit(t)}}return this.getDefaultUnit(t)}get displayOptions(){var o;const t=this.bean.getSchemaForProperty(this.attribute),e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=((o=s==null?void 0:s.to)==null?void 0:o.system)??e;return vm(t,r)}getMeasureFromFormat(){const t=this.schemaFormat;return t?this.regionInfo.getUnitMeasure(t):""}getConverterFromFormat(){const t=this.getMeasureFromFormat();if(t){const e=this.regionInfo.selectedUnitSystem;return{unit:this.schemaFormat||this.regionInfo.getDefaultUnitForMeasure(t,e),measure:t}}return{}}getDefaultUnit(t){var r,o;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure;return s?((r=t==null?void 0:t.to)==null?void 0:r.unit)||this.getDefaultUnitForMeasure(s,((o=t==null?void 0:t.to)==null?void 0:o.system)||e):this.getConverterFromFormat().unit}getFormatterOptions(t){var n,i,a;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure,r=new Intl.NumberFormat().resolvedOptions().locale;let o=null;if(s||this.formatter){const c=s?{style:"unit",unit:this.getDefaultUnit(t)}:null,u=this.formatter||c;if(u){let d=typeof u=="function"?u(((n=t==null?void 0:t.to)==null?void 0:n.system)||e):u;s&&(d={unit:this.getDefaultUnit(t),...d},d.style==="unit"&&(d.maximumFractionDigits=d.maximumFractionDigits??this.getDefaultUnitDecimalPlaces(s,((i=t==null?void 0:t.to)==null?void 0:i.system)||e,(a=t==null?void 0:t.to)==null?void 0:a.unit)));try{o=new Intl.NumberFormat(r,{...d})}catch(h){ft.error(`error creating formatter ${d}. Returning the raw value`,h)}}else ft.debug(`no formatter found for config bean prop ${this.id}. Returning the raw value`)}return o}getConverter(){var r,o,n,i,a,c,u,d,h,f,p;const{unit:t,measure:e}=this.getConverterFromFormat(),s=t==="drt"?"second":t;if(this.converter){const y=(r=this.converter)==null?void 0:r.measure,w=(n=(o=this.converter)==null?void 0:o.to)==null?void 0:n.measure,E=(a=(i=this.converter)==null?void 0:i.from)==null?void 0:a.measure,_=y||w||E||e,k=((u=(c=this.converter)==null?void 0:c.to)==null?void 0:u.unit)||this.regionInfo.getDefaultUnitForMeasure(_,((h=(d=this.converter)==null?void 0:d.to)==null?void 0:h.system)??this.regionInfo.defaultUnitSystem),R=((p=(f=this.converter)==null?void 0:f.to)==null?void 0:p.system)??this.regionInfo.getUnitSystem(k),I=this.schemaFormat==="drt"?"second":this.schemaFormat||s;return{...this.converter,from:{unit:I,...this.converter.from},to:{...this.converter.to,unit:k,system:R},measure:_}}if(s&&e){const y=this.regionInfo.getDefaultUnitForMeasure(e,this.regionInfo.defaultUnitSystem),w=this.regionInfo.getUnitSystem(s),E=this.regionInfo.getUnitSystem(y);return{measure:e,to:{unit:w===E?s:y}}}}async updateProperty(t){ft.debug(`updating property ${this.attribute} with value ${t}`);let e=t;if(this.getConverter()&&!isNaN(e)){const{backend:o,display:n}=this.getConverterUnits();e=this.regionInfo.convert(Number(e),n,o)}const r=Array.isArray(e)?JSON.stringify(e):String(e);await this.bean.updateProperty(this.attribute,r)}};$n([kt({modelType:re.type})],ws.prototype,"regionInfo",2);$n([Br({path:Sm,serviceBasePath:Om})],ws.prototype,"bean",2);ws=$n([A(er)],ws);const it={registration:{[er]:{class:ws,singleton:!1}},type:er,factory:ie.Factory.create(er)};function Im(t){const{path:e,attribute:s,converter:r,formatter:o,lazy:n,optionsExpander:i,serviceBasePath:a}=t,c=r;return c&&(typeof c!="function"&&typeof c.from=="string"&&(c.from={unit:c.from}),typeof c!="function"&&typeof c.to=="string"&&(c.to={unit:c.to})),(u,d)=>{u[F]=u[F]||{},u[F][d]={modelType:it.type,id:`${e}-${s}`,options:{path:e,attribute:s,serviceBasePath:a,converter:c,formatter:o,optionsExpander:i},lifecycle:U.INIT,lazy:n}}}const Al="future-model",Nt=Lt(Al),Kr=m.createLogger({name:"future-service",group:"Services"}),{isMock:$m,URL:Ps}=ae();var Ke=(t=>(t.Success="SUCCESS",t.Fail="FAIL",t.Aborted="ABORT",t.Canceled="CANCEL",t))(Ke||{});const{getAll:Cm,modifyModel:Dm,addModel:xm,deleteModel:Am,postModel:Rm}=oe.build({destinationAddress:"",basePath:`${Ps}/api/future`,mock:$m}),Pm=async()=>await Cm({}),Rl=async(t,e="/api/kos/future")=>(Kr.info(`sending delete request for Future: ${t}`),await Am({id:t,urlOverride:`${Ps}${e}/${t}`})),Pl=async(t,e="/api/kos/future")=>(Kr.info("sending add request for Future"),await xm({model:t,urlOverride:`${Ps}${e}`})),km=async(t,e,s="/api/kos/future")=>(Kr.info(`sending modify request for Future: ${t}`),Dm({model:e,id:t,urlOverride:`${Ps}${s}/${t}`})),kl=async(t,e="/api/kos/future")=>(Kr.info(`sending cancel request for Future: ${t}`),Rm({urlOverride:`${Ps}${e}/${t}/cancel`,ordered:!0,model:{}})),Cn=t=>({id:String(t.id),progress:t.progress,remainingTimeMs:t.remainingTimeMs,endState:t.endState,reason:t.reason,clientData:t.clientData,reasonData:t.reasonData,note:t.note,tracker:t.tracker}),Dn=(t,e)=>{m.debug(`future dto ${t.id} end state ${t.endState}`),m.debug(`future model ${e.id} end state ${e.endState}`),e.endState?m.debug(`future model ${e.id} is already complete`):(m.debug(`updating future model ${e.id}`),M.runInAction(()=>{const s=Cn(t);X(()=>{Object.keys(s).forEach(r=>{r==="id"?(e.futureId=s.id,s.tracker||(e.id=s.id)):r==="tracker"?e.id=s.tracker:e[r]=s[r]})})}))},Ll=t=>e=>s=>t.build(String(e),s),xn=t=>e=>ul(Cn,Ll(t)(e.tracker||e.id))(e);var Lm=Object.defineProperty,Fm=Object.getOwnPropertyDescriptor,Fl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Fm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Lm(e,s,o),o};const fo=m.getLogger(Nt.type);let cr=class{constructor(t,e,s){l(this,"logger");l(this,"_cancelFuture");l(this,"futureId");Object.assign(this,e),this.logger=s.logger,this.id=t,this.futureId=e.id,this.namespace=e.namespace||"kos",this._cancelFuture=kl,$o(()=>this.status===Ke.Success||this.status===Ke.Fail,()=>{fo.info(`Future ${this.id} has completed with status ${this.status}`),tt(this)})}async load(){fo.debug(`loading Future ${this.id}`)}unload(){fo.info(`unloading Future ${this.id}`)}async cancelFuture(){const t=this.namespace==="studio"?"/api/future":`/api/${this.namespace}/future`;await $o(()=>this.futureId!==Mn),await this._cancelFuture(this.futureId,t)}get status(){return this.endState?this.endState:this.progress>-1?"IN_PROGRESS":"NOT_ACTIVE"}get timeRemaining(){var a,c;const t=this.remainingTimeMs||-1;if(t<0)return"";const e={year:1e3*60*60*24*365,month:1e3*60*60*24*30,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60,second:1e3};let s="second",r=0;for(const[u,d]of Object.entries(e))if(Math.abs(t)>=d){s=u,r=Math.round(t/d);break}const n=new Intl.RelativeTimeFormat("en",{numeric:"auto"}).formatToParts(r,s);return n.length===3?`${((a=n[1])==null?void 0:a.value)??0} ${((c=n[2])==null?void 0:c.value)??""}`:"0 seconds"}handleFutureUpdated(t){this.logger.debug(`Future ${this.id} updated. future: ${t.id} endState: ${t.endState} progress: ${t.progress} remainingTimeMs: ${t.remainingTimeMs}`),Dn(t,this)}};Fl([B({topic:`kos.future/${sr}`})],cr.prototype,"handleFutureUpdated",1);cr=Fl([A(Nt.type)],cr);const Nl=cr,Ul=mn();var Nm=Object.defineProperty,Um=Object.getOwnPropertyDescriptor,jl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Um(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Nm(e,s,o),o};const Bl="browser-router-model",jm="kos.http.request",Bm="kos.http.response";let lr=class{constructor(t,e,s){l(this,"_id");l(this,"logger");l(this,"router");this._id=t,this.logger=s.logger,this.router=new pl}get id(){return this._id}async handleRequest(t,e){const s=e.headers["src-addr"],r=e.headers["dst-addr"],o=e.headers.url,n=e.headers.method,i=e.headers["request-id"],a={id:i,method:n,path:o,body:t};let c=200;const u={send:d=>{this.logger.debug(`sending response to ${r}`),this.logger.debug(d),sl({msg:d,options:{responseId:i,destinationAddress:s,type:Bm,sourceAddress:r,status:c}})},status:function(d){return c=d,this}};if(a.path==="/openapi.json"){u.send(this.router.generateOpenApiSpec());return}await this.router.handle(a,u)}use(t,e,...s){this.router.use(t,e,...s)}remove(t,e){return this.router.remove(t,e)}removeAllForPath(t){return this.router.removeAllForPath(t)}getRoutes(){return this.router.getRoutes()}async init(){this.logger.debug(`initializing browser-router ${this.id}`)}async load(){this.logger.debug(`loading browser-router ${this.id}`)}};jl([B({topic:jm})],lr.prototype,"handleRequest",1);lr=jl([A(Bl)],lr);const An=new _e({class:lr,type:Bl}),Kl="future-container-model",He=Lt(Kl),Hl=t=>xn(Nt)(t),Km=t=>{const e=Hl(t);return He.build(He.type,{}).addFutureModel(e),e},Hm=t=>He.build(He.type,{}).getFuture(String(t)),st={buildFutureModel:Hl,initiateFuture:Km,getFuture:Hm};var qm=Object.defineProperty,zm=Object.getOwnPropertyDescriptor,Rn=(t,e,s,r)=>{for(var o=r>1?void 0:r?zm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&qm(e,s,o),o};const zs=m.getLogger(He.type);let Es=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_deleteFuture");l(this,"_addFuture");l(this,"_futures");l(this,"createModel");l(this,"deleteModel");const{deleteFuture:r=Rl,addFuture:o=Pl}=e;this.logger=s.logger,this._deleteFuture=r,this._addFuture=o,this.id=t,this._futures=new Ce,this.createModel=this.createFuture,this.deleteModel=this.removeFuture}get futures(){return this._futures.data}get models(){return this.futures}getFuture(t){return this._futures.getModel(t)}addFutureModel(t){this._futures.addModel(t)}removeFutureModel(t){this._futures.removeModel(t)}async removeFuture(t){try{await this._deleteFuture(t)}catch(e){zs.error("error deleting a Future"),zs.error(e)}}async createFuture(t){try{const e=await this._addFuture(t),s=e==null?void 0:e.data;if(s){const r=xn(Nt)(s);return this.addFutureModel(r),r}}catch(e){throw zs.error("error creating a Future"),zs.error(e),e}}handleFutureUpdated(t,e){const s=st.buildFutureModel(t);this.addFutureModel(s);const r=`kos.future/${t.tracker||t.id}`;this.logger.debug(`publishing future update to ${r}`),V(r,e.body,e.headers)}};Rn([$e],Es.prototype,"_futures",2);Rn([B({topic:"kos.future"})],Es.prototype,"handleFutureUpdated",1);Es=Rn([A(He.type)],Es);const ql=Es,{URL:ks}=ae(),{getOne:Vm,postModel:Gm,deleteModel:zl}=oe.build({basePath:`${ks}/api/keyVal`}),Co=m.createLogger({name:"key-value-service",group:"Services"}),Vl=async(t,e)=>{await zl({urlOverride:`${ks}/api/keyVal/${t}/${e}`,id:e})},Gl=async(t,e,s)=>{const r=await Gm({urlOverride:`${ks}/api/keyVal/${t}/${e}`,model:s.toString()});if((r==null?void 0:r.status)!==200)throw Co.error("Failed to update key-value data",r),new Error(`Failed to update key-value data for namespace ${t}`);return r.data},Yl=async(t="studio")=>{Co.debug(`Retrieving all key-value data for namespace: ${t}`);const e=await Vm({urlOverride:`${ks}/api/keyVal/${t}`});if((e==null?void 0:e.status)!==200)throw Co.error("Failed to retrieve key-value data",e),new Error(`Failed to retrieve key-value data for namespace ${t}`);return e.data},Ym=async t=>{await zl({urlOverride:`${ks}/api/keyVal/${t}`,id:""})},Wm=Object.freeze(Object.defineProperty({__proto__:null,deleteKeyValue:Vl,deleteKeyValueNamespace:Ym,getKeyValue:Yl,updateKeyValue:Gl},Symbol.toStringTag,{value:"Module"}));var Qm=Object.defineProperty,Zm=Object.getOwnPropertyDescriptor,Pn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Zm(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Qm(e,s,o),o};const Wl="key-value-model";let Ms=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"namespace");l(this,"data");this.id=t,this.logger=s.logger,this.data=Se(),this.namespace=e.namespace||"studio"}async init(){this.logger.debug(`initializing studio-state ${this.id}`)}async updateState(t,e){this.logger.debug(`updating studio-state ${t} with value ${e}`),e!==void 0?(await Gl(this.namespace,t,e),this.data[t]=e):(await Vl(this.namespace,t),this.data[t]=void 0)}async load(){this.logger.debug(`loading studio-state ${this.id}`);const t=await Yl(this.namespace);this.data.setValues(t)}handleStateUpdate(t){t.namespace===this.namespace&&(this.data[t.key]=t.value)}handleStateDelete(t){t.namespace===this.namespace&&(this.data[t.key]=void 0)}};Pn([B({topic:"/keyVal/set"})],Ms.prototype,"handleStateUpdate",1);Pn([B({topic:"/keyVal/remove"})],Ms.prototype,"handleStateDelete",1);Ms=Pn([A(Wl)],Ms);const kn=new ye({class:Ms,type:Wl});var fe="INUMBER",Ut="IOP1",jt="IOP2",Bt="IOP3",Pe="IVAR",rt="IVARNAME",Tt="IFUNCALL",Hr="IFUNDEF",ne="IEXPR",Ln="IEXPREVAL",at="IMEMBER",qr="IENDSTATEMENT",_t="IARRAY";function P(t,e){this.type=t,this.value=e??0}P.prototype.toString=function(){switch(this.type){case fe:case Ut:case jt:case Bt:case Pe:case rt:case qr:return this.value;case Tt:return"CALL "+this.value;case Hr:return"DEF "+this.value;case _t:return"ARRAY "+this.value;case at:return"."+this.value;default:return"Invalid Instruction"}};function zr(t){return new P(Ut,t)}function Ue(t){return new P(jt,t)}function Ql(t){return new P(Bt,t)}function Do(t,e,s,r,o){for(var n=[],i=[],a,c,u,d,h=0;h<t.length;h++){var f=t[h],p=f.type;if(p===fe||p===rt)Array.isArray(f.value)?n.push.apply(n,Do(f.value.map(function(y){return new P(fe,y)}).concat(new P(_t,f.value.length)),e,s,r,o)):n.push(f);else if(p===Pe&&o.hasOwnProperty(f.value))f=new P(fe,o[f.value]),n.push(f);else if(p===jt&&n.length>1)c=n.pop(),a=n.pop(),d=s[f.value],f=new P(fe,d(a.value,c.value)),n.push(f);else if(p===Bt&&n.length>2)u=n.pop(),c=n.pop(),a=n.pop(),f.value==="?"?n.push(a.value?c.value:u.value):(d=r[f.value],f=new P(fe,d(a.value,c.value,u.value)),n.push(f));else if(p===Ut&&n.length>0)a=n.pop(),d=e[f.value],f=new P(fe,d(a.value)),n.push(f);else if(p===ne){for(;n.length>0;)i.push(n.shift());i.push(new P(ne,Do(f.value,e,s,r,o)))}else if(p===at&&n.length>0)a=n.pop(),n.push(new P(fe,a.value[f.value]));else{for(;n.length>0;)i.push(n.shift());i.push(f)}}for(;n.length>0;)i.push(n.shift());return i}function Zl(t,e,s){for(var r=[],o=0;o<t.length;o++){var n=t[o],i=n.type;if(i===Pe&&n.value===e)for(var a=0;a<s.tokens.length;a++){var c=s.tokens[a],u;c.type===Ut?u=zr(c.value):c.type===jt?u=Ue(c.value):c.type===Bt?u=Ql(c.value):u=new P(c.type,c.value),r.push(u)}else i===ne?r.push(new P(ne,Zl(n.value,e,s))):r.push(n)}return r}function Qe(t,e,s){var r=[],o,n,i,a,c,u;if(Fn(t))return xe(t,s);for(var d=t.length,h=0;h<d;h++){var f=t[h],p=f.type;if(p===fe||p===rt)r.push(f.value);else if(p===jt)n=r.pop(),o=r.pop(),f.value==="and"?r.push(o?!!Qe(n,e,s):!1):f.value==="or"?r.push(o?!0:!!Qe(n,e,s)):f.value==="="?(a=e.binaryOps[f.value],r.push(a(o,Qe(n,e,s),s))):(a=e.binaryOps[f.value],r.push(a(xe(o,s),xe(n,s))));else if(p===Bt)i=r.pop(),n=r.pop(),o=r.pop(),f.value==="?"?r.push(Qe(o?n:i,e,s)):(a=e.ternaryOps[f.value],r.push(a(xe(o,s),xe(n,s),xe(i,s))));else if(p===Pe)if(f.value in e.functions)r.push(e.functions[f.value]);else if(f.value in e.unaryOps&&e.parser.isOperatorEnabled(f.value))r.push(e.unaryOps[f.value]);else{var y=s[f.value];if(y!==void 0)r.push(y);else throw new Error("undefined variable: "+f.value)}else if(p===Ut)o=r.pop(),a=e.unaryOps[f.value],r.push(a(xe(o,s)));else if(p===Tt){for(u=f.value,c=[];u-- >0;)c.unshift(xe(r.pop(),s));if(a=r.pop(),a.apply&&a.call)r.push(a.apply(void 0,c));else throw new Error(a+" is not a function")}else if(p===Hr)r.push(function(){for(var w=r.pop(),E=[],_=f.value;_-- >0;)E.unshift(r.pop());var k=r.pop(),R=function(){for(var I=Object.assign({},s),S=0,H=E.length;S<H;S++)I[E[S]]=arguments[S];return Qe(w,e,I)};return Object.defineProperty(R,"name",{value:k,writable:!1}),s[k]=R,R}());else if(p===ne)r.push(Xm(f,e));else if(p===Ln)r.push(f);else if(p===at)o=r.pop(),r.push(o[f.value]);else if(p===qr)r.pop();else if(p===_t){for(u=f.value,c=[];u-- >0;)c.unshift(r.pop());r.push(c)}else throw new Error("invalid Expression")}if(r.length>1)throw new Error("invalid Expression (parity)");return r[0]===0?0:xe(r[0],s)}function Xm(t,e,s){return Fn(t)?t:{type:Ln,value:function(r){return Qe(t.value,e,r)}}}function Fn(t){return t&&t.type===Ln}function xe(t,e){return Fn(t)?t.value(e):t}function Nn(t,e){for(var s=[],r,o,n,i,a,c,u=0;u<t.length;u++){var d=t[u],h=d.type;if(h===fe)typeof d.value=="number"&&d.value<0?s.push("("+d.value+")"):Array.isArray(d.value)?s.push("["+d.value.map(Ui).join(", ")+"]"):s.push(Ui(d.value));else if(h===jt)o=s.pop(),r=s.pop(),i=d.value,e?i==="^"?s.push("Math.pow("+r+", "+o+")"):i==="and"?s.push("(!!"+r+" && !!"+o+")"):i==="or"?s.push("(!!"+r+" || !!"+o+")"):i==="||"?s.push("(function(a,b){ return Array.isArray(a) && Array.isArray(b) ? a.concat(b) : String(a) + String(b); }(("+r+"),("+o+")))"):i==="=="?s.push("("+r+" === "+o+")"):i==="!="?s.push("("+r+" !== "+o+")"):i==="["?s.push(r+"[("+o+") | 0]"):s.push("("+r+" "+i+" "+o+")"):i==="["?s.push(r+"["+o+"]"):s.push("("+r+" "+i+" "+o+")");else if(h===Bt)if(n=s.pop(),o=s.pop(),r=s.pop(),i=d.value,i==="?")s.push("("+r+" ? "+o+" : "+n+")");else throw new Error("invalid Expression");else if(h===Pe||h===rt)s.push(d.value);else if(h===Ut)r=s.pop(),i=d.value,i==="-"||i==="+"?s.push("("+i+r+")"):e?i==="not"?s.push("(!"+r+")"):i==="!"?s.push("fac("+r+")"):s.push(i+"("+r+")"):i==="!"?s.push("("+r+"!)"):s.push("("+i+" "+r+")");else if(h===Tt){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());i=s.pop(),s.push(i+"("+a.join(", ")+")")}else if(h===Hr){for(o=s.pop(),c=d.value,a=[];c-- >0;)a.unshift(s.pop());r=s.pop(),e?s.push("("+r+" = function("+a.join(", ")+") { return "+o+" })"):s.push("("+r+"("+a.join(", ")+") = "+o+")")}else if(h===at)r=s.pop(),s.push(r+"."+d.value);else if(h===_t){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());s.push("["+a.join(", ")+"]")}else if(h===ne)s.push("("+Nn(d.value,e)+")");else if(h!==qr)throw new Error("invalid Expression")}return s.length>1&&(e?s=[s.join(",")]:s=[s.join(";")]),String(s[0])}function Ui(t){return typeof t=="string"?JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"):t}function bt(t,e){for(var s=0;s<t.length;s++)if(t[s]===e)return!0;return!1}function Un(t,e,s){s=s||{};for(var r=!!s.withMembers,o=null,n=0;n<t.length;n++){var i=t[n];i.type===Pe||i.type===rt?!r&&!bt(e,i.value)?e.push(i.value):(o!==null&&(bt(e,o)||e.push(o)),o=i.value):i.type===at&&r&&o!==null?o+="."+i.value:i.type===ne?Un(i.value,e,s):o!==null&&(bt(e,o)||e.push(o),o=null)}o!==null&&!bt(e,o)&&e.push(o)}function we(t,e){this.tokens=t,this.parser=e,this.unaryOps=e.unaryOps,this.binaryOps=e.binaryOps,this.ternaryOps=e.ternaryOps,this.functions=e.functions}we.prototype.simplify=function(t){return t=t||{},new we(Do(this.tokens,this.unaryOps,this.binaryOps,this.ternaryOps,t),this.parser)};we.prototype.substitute=function(t,e){return e instanceof we||(e=this.parser.parse(String(e))),new we(Zl(this.tokens,t,e),this.parser)};we.prototype.evaluate=function(t){return t=t||{},Qe(this.tokens,this,t)};we.prototype.toString=function(){return Nn(this.tokens,!1)};we.prototype.symbols=function(t){t=t||{};var e=[];return Un(this.tokens,e,t),e};we.prototype.variables=function(t){t=t||{};var e=[];Un(this.tokens,e,t);var s=this.functions;return e.filter(function(r){return!(r in s)})};we.prototype.toJSFunction=function(t,e){var s=this,r=new Function(t,"with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return "+Nn(this.simplify(e).tokens,!0)+"; }");return function(){return r.apply(s,arguments)}};var Ts="TEOF",j="TOP",Vr="TNUMBER",Xl="TSTRING",ke="TPAREN",St="TBRACKET",Gr="TCOMMA",jn="TNAME",Bn="TSEMICOLON";function Jl(t,e,s){this.type=t,this.value=e,this.index=s}Jl.prototype.toString=function(){return this.type+": "+this.value};function G(t,e){this.pos=0,this.current=null,this.unaryOps=t.unaryOps,this.binaryOps=t.binaryOps,this.ternaryOps=t.ternaryOps,this.consts=t.consts,this.expression=e,this.savedPosition=0,this.savedCurrent=null,this.options=t.options,this.parser=t}G.prototype.newToken=function(t,e,s){return new Jl(t,e,s??this.pos)};G.prototype.save=function(){this.savedPosition=this.pos,this.savedCurrent=this.current};G.prototype.restore=function(){this.pos=this.savedPosition,this.current=this.savedCurrent};G.prototype.next=function(){if(this.pos>=this.expression.length)return this.newToken(Ts,"EOF");if(this.isWhitespace()||this.isComment())return this.next();if(this.isRadixInteger()||this.isNumber()||this.isOperator()||this.isString()||this.isParen()||this.isBracket()||this.isComma()||this.isSemicolon()||this.isNamedOp()||this.isConst()||this.isName())return this.current;this.parseError('Unknown character "'+this.expression.charAt(this.pos)+'"')};G.prototype.isString=function(){var t=!1,e=this.pos,s=this.expression.charAt(e);if(s==="'"||s==='"')for(var r=this.expression.indexOf(s,e+1);r>=0&&this.pos<this.expression.length;){if(this.pos=r+1,this.expression.charAt(r-1)!=="\\"){var o=this.expression.substring(e+1,r);this.current=this.newToken(Xl,this.unescape(o),e),t=!0;break}r=this.expression.indexOf(s,r+1)}return t};G.prototype.isParen=function(){var t=this.expression.charAt(this.pos);return t==="("||t===")"?(this.current=this.newToken(ke,t),this.pos++,!0):!1};G.prototype.isBracket=function(){var t=this.expression.charAt(this.pos);return(t==="["||t==="]")&&this.isOperatorEnabled("[")?(this.current=this.newToken(St,t),this.pos++,!0):!1};G.prototype.isComma=function(){var t=this.expression.charAt(this.pos);return t===","?(this.current=this.newToken(Gr,","),this.pos++,!0):!1};G.prototype.isSemicolon=function(){var t=this.expression.charAt(this.pos);return t===";"?(this.current=this.newToken(Bn,";"),this.pos++,!0):!1};G.prototype.isConst=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&s!=="."&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(r in this.consts)return this.current=this.newToken(Vr,this.consts[r]),this.pos+=r.length,!0}return!1};G.prototype.isNamedOp=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(this.isOperatorEnabled(r)&&(r in this.binaryOps||r in this.unaryOps||r in this.ternaryOps))return this.current=this.newToken(j,r),this.pos+=r.length,!0}return!1};G.prototype.isName=function(){for(var t=this.pos,e=t,s=!1;e<this.expression.length;e++){var r=this.expression.charAt(e);if(r.toUpperCase()===r.toLowerCase()){if(e===this.pos&&(r==="$"||r==="_")){r==="_"&&(s=!0);continue}else if(e===this.pos||!s||r!=="_"&&(r<"0"||r>"9"))break}else s=!0}if(s){var o=this.expression.substring(t,e);return this.current=this.newToken(jn,o),this.pos+=o.length,!0}return!1};G.prototype.isWhitespace=function(){for(var t=!1,e=this.expression.charAt(this.pos);(e===" "||e===" "||e===`
78
+ `||e==="\r")&&(t=!0,this.pos++,!(this.pos>=this.expression.length));)e=this.expression.charAt(this.pos);return t};var Jm=/^[0-9a-f]{4}$/i;G.prototype.unescape=function(t){var e=t.indexOf("\\");if(e<0)return t;for(var s=t.substring(0,e);e>=0;){var r=t.charAt(++e);switch(r){case"'":s+="'";break;case'"':s+='"';break;case"\\":s+="\\";break;case"/":s+="/";break;case"b":s+="\b";break;case"f":s+="\f";break;case"n":s+=`
79
+ `;break;case"r":s+="\r";break;case"t":s+=" ";break;case"u":var o=t.substring(e+1,e+5);Jm.test(o)||this.parseError("Illegal escape sequence: \\u"+o),s+=String.fromCharCode(parseInt(o,16)),e+=4;break;default:throw this.parseError('Illegal escape sequence: "\\'+r+'"')}++e;var n=t.indexOf("\\",e);s+=t.substring(e,n<0?t.length:n),e=n}return s};G.prototype.isComment=function(){var t=this.expression.charAt(this.pos);return t==="/"&&this.expression.charAt(this.pos+1)==="*"?(this.pos=this.expression.indexOf("*/",this.pos)+2,this.pos===1&&(this.pos=this.expression.length),!0):!1};G.prototype.isRadixInteger=function(){var t=this.pos;if(t>=this.expression.length-2||this.expression.charAt(t)!=="0")return!1;++t;var e,s;if(this.expression.charAt(t)==="x")e=16,s=/^[0-9a-f]$/i,++t;else if(this.expression.charAt(t)==="b")e=2,s=/^[01]$/i,++t;else return!1;for(var r=!1,o=t;t<this.expression.length;){var n=this.expression.charAt(t);if(s.test(n))t++,r=!0;else break}return r&&(this.current=this.newToken(Vr,parseInt(this.expression.substring(o,t),e)),this.pos=t),r};G.prototype.isNumber=function(){for(var t=!1,e=this.pos,s=e,r=e,o=!1,n=!1,i;e<this.expression.length&&(i=this.expression.charAt(e),i>="0"&&i<="9"||!o&&i===".");)i==="."?o=!0:n=!0,e++,t=n;if(t&&(r=e),i==="e"||i==="E"){e++;for(var a=!0,c=!1;e<this.expression.length;){if(i=this.expression.charAt(e),a&&(i==="+"||i==="-"))a=!1;else if(i>="0"&&i<="9")c=!0,a=!1;else break;e++}c||(e=r)}return t?(this.current=this.newToken(Vr,parseFloat(this.expression.substring(s,e))),this.pos=e):this.pos=r,t};G.prototype.isOperator=function(){var t=this.pos,e=this.expression.charAt(this.pos);if(e==="+"||e==="-"||e==="*"||e==="/"||e==="%"||e==="^"||e==="?"||e===":"||e===".")this.current=this.newToken(j,e);else if(e==="∙"||e==="•")this.current=this.newToken(j,"*");else if(e===">")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,">="),this.pos++):this.current=this.newToken(j,">");else if(e==="<")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,"<="),this.pos++):this.current=this.newToken(j,"<");else if(e==="|")if(this.expression.charAt(this.pos+1)==="|")this.current=this.newToken(j,"||"),this.pos++;else return!1;else if(e==="=")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,"=="),this.pos++):this.current=this.newToken(j,e);else if(e==="!")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,"!="),this.pos++):this.current=this.newToken(j,e);else return!1;return this.pos++,this.isOperatorEnabled(this.current.value)?!0:(this.pos=t,!1)};G.prototype.isOperatorEnabled=function(t){return this.parser.isOperatorEnabled(t)};G.prototype.getCoordinates=function(){var t=0,e,s=-1;do t++,e=this.pos-s,s=this.expression.indexOf(`
80
+ `,s+1);while(s>=0&&s<this.pos);return{line:t,column:e}};G.prototype.parseError=function(t){var e=this.getCoordinates();throw new Error("parse error ["+e.line+":"+e.column+"]: "+t)};function K(t,e,s){this.parser=t,this.tokens=e,this.current=null,this.nextToken=null,this.next(),this.savedCurrent=null,this.savedNextToken=null,this.allowMemberAccess=s.allowMemberAccess!==!1}K.prototype.next=function(){return this.current=this.nextToken,this.nextToken=this.tokens.next()};K.prototype.tokenMatches=function(t,e){return typeof e>"u"?!0:Array.isArray(e)?bt(e,t.value):typeof e=="function"?e(t):t.value===e};K.prototype.save=function(){this.savedCurrent=this.current,this.savedNextToken=this.nextToken,this.tokens.save()};K.prototype.restore=function(){this.tokens.restore(),this.current=this.savedCurrent,this.nextToken=this.savedNextToken};K.prototype.accept=function(t,e){return this.nextToken.type===t&&this.tokenMatches(this.nextToken,e)?(this.next(),!0):!1};K.prototype.expect=function(t,e){if(!this.accept(t,e)){var s=this.tokens.getCoordinates();throw new Error("parse error ["+s.line+":"+s.column+"]: Expected "+(e||t))}};K.prototype.parseAtom=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.accept(jn)||this.accept(j,s))t.push(new P(Pe,this.current.value));else if(this.accept(Vr))t.push(new P(fe,this.current.value));else if(this.accept(Xl))t.push(new P(fe,this.current.value));else if(this.accept(ke,"("))this.parseExpression(t),this.expect(ke,")");else if(this.accept(St,"["))if(this.accept(St,"]"))t.push(new P(_t,0));else{var r=this.parseArrayList(t);t.push(new P(_t,r))}else throw new Error("unexpected "+this.nextToken)};K.prototype.parseExpression=function(t){var e=[];this.parseUntilEndStatement(t,e)||(this.parseVariableAssignmentExpression(e),!this.parseUntilEndStatement(t,e)&&this.pushExpression(t,e))};K.prototype.pushExpression=function(t,e){for(var s=0,r=e.length;s<r;s++)t.push(e[s])};K.prototype.parseUntilEndStatement=function(t,e){return this.accept(Bn)?(this.nextToken&&this.nextToken.type!==Ts&&!(this.nextToken.type===ke&&this.nextToken.value===")")&&e.push(new P(qr)),this.nextToken.type!==Ts&&this.parseExpression(e),t.push(new P(ne,e)),!0):!1};K.prototype.parseArrayList=function(t){for(var e=0;!this.accept(St,"]");)for(this.parseExpression(t),++e;this.accept(Gr);)this.parseExpression(t),++e;return e};K.prototype.parseVariableAssignmentExpression=function(t){for(this.parseConditionalExpression(t);this.accept(j,"=");){var e=t.pop(),s=[],r=t.length-1;if(e.type===Tt){if(!this.tokens.isOperatorEnabled("()="))throw new Error("function definition is not permitted");for(var o=0,n=e.value+1;o<n;o++){var i=r-o;t[i].type===Pe&&(t[i]=new P(rt,t[i].value))}this.parseVariableAssignmentExpression(s),t.push(new P(ne,s)),t.push(new P(Hr,e.value));continue}if(e.type!==Pe&&e.type!==at)throw new Error("expected variable for assignment");this.parseVariableAssignmentExpression(s),t.push(new P(rt,e.value)),t.push(new P(ne,s)),t.push(Ue("="))}};K.prototype.parseConditionalExpression=function(t){for(this.parseOrExpression(t);this.accept(j,"?");){var e=[],s=[];this.parseConditionalExpression(e),this.expect(j,":"),this.parseConditionalExpression(s),t.push(new P(ne,e)),t.push(new P(ne,s)),t.push(Ql("?"))}};K.prototype.parseOrExpression=function(t){for(this.parseAndExpression(t);this.accept(j,"or");){var e=[];this.parseAndExpression(e),t.push(new P(ne,e)),t.push(Ue("or"))}};K.prototype.parseAndExpression=function(t){for(this.parseComparison(t);this.accept(j,"and");){var e=[];this.parseComparison(e),t.push(new P(ne,e)),t.push(Ue("and"))}};var ey=["==","!=","<","<=",">=",">","in"];K.prototype.parseComparison=function(t){for(this.parseAddSub(t);this.accept(j,ey);){var e=this.current;this.parseAddSub(t),t.push(Ue(e.value))}};var ty=["+","-","||"];K.prototype.parseAddSub=function(t){for(this.parseTerm(t);this.accept(j,ty);){var e=this.current;this.parseTerm(t),t.push(Ue(e.value))}};var sy=["*","/","%"];K.prototype.parseTerm=function(t){for(this.parseFactor(t);this.accept(j,sy);){var e=this.current;this.parseFactor(t),t.push(Ue(e.value))}};K.prototype.parseFactor=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.save(),this.accept(j,s)){if(this.current.value!=="-"&&this.current.value!=="+"){if(this.nextToken.type===ke&&this.nextToken.value==="("){this.restore(),this.parseExponential(t);return}else if(this.nextToken.type===Bn||this.nextToken.type===Gr||this.nextToken.type===Ts||this.nextToken.type===ke&&this.nextToken.value===")"){this.restore(),this.parseAtom(t);return}}var r=this.current;this.parseFactor(t),t.push(zr(r.value))}else this.parseExponential(t)};K.prototype.parseExponential=function(t){for(this.parsePostfixExpression(t);this.accept(j,"^");)this.parseFactor(t),t.push(Ue("^"))};K.prototype.parsePostfixExpression=function(t){for(this.parseFunctionCall(t);this.accept(j,"!");)t.push(zr("!"))};K.prototype.parseFunctionCall=function(t){var e=this.tokens.unaryOps;function s(n){return n.value in e}if(this.accept(j,s)){var r=this.current;this.parseAtom(t),t.push(zr(r.value))}else for(this.parseMemberExpression(t);this.accept(ke,"(");)if(this.accept(ke,")"))t.push(new P(Tt,0));else{var o=this.parseArgumentList(t);t.push(new P(Tt,o))}};K.prototype.parseArgumentList=function(t){for(var e=0;!this.accept(ke,")");)for(this.parseExpression(t),++e;this.accept(Gr);)this.parseExpression(t),++e;return e};K.prototype.parseMemberExpression=function(t){for(this.parseAtom(t);this.accept(j,".")||this.accept(St,"[");){var e=this.current;if(e.value==="."){if(!this.allowMemberAccess)throw new Error('unexpected ".", member access is not permitted');this.expect(jn),t.push(new P(at,this.current.value))}else if(e.value==="["){if(!this.tokens.isOperatorEnabled("["))throw new Error('unexpected "[]", arrays are disabled');this.parseExpression(t),this.expect(St,"]"),t.push(Ue("["))}else throw new Error("unexpected symbol: "+e.value)}};function ry(t,e){return Number(t)+Number(e)}function oy(t,e){return t-e}function ny(t,e){return t*e}function iy(t,e){return t/e}function ay(t,e){return t%e}function cy(t,e){return Array.isArray(t)&&Array.isArray(e)?t.concat(e):""+t+e}function ly(t,e){return t===e}function uy(t,e){return t!==e}function dy(t,e){return t>e}function hy(t,e){return t<e}function fy(t,e){return t>=e}function py(t,e){return t<=e}function gy(t,e){return!!(t&&e)}function my(t,e){return!!(t||e)}function yy(t,e){return bt(e,t)}function by(t){return(Math.exp(t)-Math.exp(-t))/2}function vy(t){return(Math.exp(t)+Math.exp(-t))/2}function wy(t){return t===1/0?1:t===-1/0?-1:(Math.exp(t)-Math.exp(-t))/(Math.exp(t)+Math.exp(-t))}function Ey(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))}function My(t){return Math.log(t+Math.sqrt(t*t-1))}function Ty(t){return Math.log((1+t)/(1-t))/2}function ji(t){return Math.log(t)*Math.LOG10E}function _y(t){return-t}function Sy(t){return!t}function Oy(t){return t<0?Math.ceil(t):Math.floor(t)}function Iy(t){return Math.random()*(t||1)}function Bi(t){return Kn(t+1)}function $y(t){return isFinite(t)&&t===Math.round(t)}var Cy=4.7421875,po=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function Kn(t){var e,s;if($y(t)){if(t<=0)return isFinite(t)?1/0:NaN;if(t>171)return 1/0;for(var r=t-2,o=t-1;r>1;)o*=r,r--;return o===0&&(o=1),o}if(t<.5)return Math.PI/(Math.sin(Math.PI*t)*Kn(1-t));if(t>=171.35)return 1/0;if(t>85){var n=t*t,i=n*t,a=i*t,c=a*t;return Math.sqrt(2*Math.PI/t)*Math.pow(t/Math.E,t)*(1+1/(12*t)+1/(288*n)-139/(51840*i)-571/(2488320*a)+163879/(209018880*c)+5246819/(75246796800*c*t))}--t,s=po[0];for(var u=1;u<po.length;++u)s+=po[u]/(t+u);return e=t+Cy+.5,Math.sqrt(2*Math.PI)*Math.pow(e,t+.5)*Math.exp(-e)*s}function Dy(t){return Array.isArray(t)?t.length:String(t).length}function Ki(){for(var t=0,e=0,s=0;s<arguments.length;s++){var r=Math.abs(arguments[s]),o;e<r?(o=e/r,t=t*o*o+1,e=r):r>0?(o=r/e,t+=o*o):t+=r}return e===1/0?1/0:e*Math.sqrt(t)}function Hi(t,e,s){return t?e:s}function xy(t,e){return typeof e>"u"||+e==0?Math.round(t):(t=+t,e=-+e,isNaN(t)||!(typeof e=="number"&&e%1===0)?NaN:(t=t.toString().split("e"),t=Math.round(+(t[0]+"e"+(t[1]?+t[1]-e:-e))),t=t.toString().split("e"),+(t[0]+"e"+(t[1]?+t[1]+e:e))))}function Ay(t,e,s){return s&&(s[t]=e),e}function Ry(t,e){return t[e|0]}function Py(t){return arguments.length===1&&Array.isArray(t)?Math.max.apply(Math,t):Math.max.apply(Math,arguments)}function ky(t){return arguments.length===1&&Array.isArray(t)?Math.min.apply(Math,t):Math.min.apply(Math,arguments)}function Ly(t,e){if(typeof t!="function")throw new Error("First argument to map is not a function");if(!Array.isArray(e))throw new Error("Second argument to map is not an array");return e.map(function(s,r){return t(s,r)})}function Fy(t,e,s){if(typeof t!="function")throw new Error("First argument to fold is not a function");if(!Array.isArray(s))throw new Error("Second argument to fold is not an array");return s.reduce(function(r,o,n){return t(r,o,n)},e)}function Ny(t,e){if(typeof t!="function")throw new Error("First argument to filter is not a function");if(!Array.isArray(e))throw new Error("Second argument to filter is not an array");return e.filter(function(s,r){return t(s,r)})}function Uy(t,e){if(!(Array.isArray(e)||typeof e=="string"))throw new Error("Second argument to indexOf is not a string or array");return e.indexOf(t)}function jy(t,e){if(!Array.isArray(e))throw new Error("Second argument to join is not an array");return e.join(t)}function By(t){return(t>0)-(t<0)||+t}var qi=1/3;function Ky(t){return t<0?-Math.pow(-t,qi):Math.pow(t,qi)}function Hy(t){return Math.exp(t)-1}function qy(t){return Math.log(1+t)}function zy(t){return Math.log(t)/Math.LN2}function ct(t){this.options=t||{},this.unaryOps={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:Math.sinh||by,cosh:Math.cosh||vy,tanh:Math.tanh||wy,asinh:Math.asinh||Ey,acosh:Math.acosh||My,atanh:Math.atanh||Ty,sqrt:Math.sqrt,cbrt:Math.cbrt||Ky,log:Math.log,log2:Math.log2||zy,ln:Math.log,lg:Math.log10||ji,log10:Math.log10||ji,expm1:Math.expm1||Hy,log1p:Math.log1p||qy,abs:Math.abs,ceil:Math.ceil,floor:Math.floor,round:Math.round,trunc:Math.trunc||Oy,"-":_y,"+":Number,exp:Math.exp,not:Sy,length:Dy,"!":Bi,sign:Math.sign||By},this.binaryOps={"+":ry,"-":oy,"*":ny,"/":iy,"%":ay,"^":Math.pow,"||":cy,"==":ly,"!=":uy,">":dy,"<":hy,">=":fy,"<=":py,and:gy,or:my,in:yy,"=":Ay,"[":Ry},this.ternaryOps={"?":Hi},this.functions={random:Iy,fac:Bi,min:ky,max:Py,hypot:Math.hypot||Ki,pyt:Math.hypot||Ki,pow:Math.pow,atan2:Math.atan2,if:Hi,gamma:Kn,roundTo:xy,map:Ly,fold:Fy,filter:Ny,indexOf:Uy,join:jy},this.consts={E:Math.E,PI:Math.PI,true:!0,false:!1}}ct.prototype.parse=function(t){var e=[],s=new K(this,new G(this,t),{allowMemberAccess:this.options.allowMemberAccess});return s.parseExpression(e),s.expect(Ts,"EOF"),new we(e,this)};ct.prototype.evaluate=function(t,e){return this.parse(t).evaluate(e)};var eu=new ct;ct.parse=function(t){return eu.parse(t)};ct.evaluate=function(t,e){return eu.parse(t).evaluate(e)};var zi={"+":"add","-":"subtract","*":"multiply","/":"divide","%":"remainder","^":"power","!":"factorial","<":"comparison",">":"comparison","<=":"comparison",">=":"comparison","==":"comparison","!=":"comparison","||":"concatenate",and:"logical",or:"logical",not:"logical","?":"conditional",":":"conditional","=":"assignment","[":"array","()=":"fndef"};function Vy(t){return zi.hasOwnProperty(t)?zi[t]:t}ct.prototype.isOperatorEnabled=function(t){var e=Vy(t),s=this.options.operators||{};return!(e in s)||!!s[e]};var Gy=Object.defineProperty,Yy=Object.getOwnPropertyDescriptor,Wy=(t,e,s)=>e in t?Gy(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,Qy=(t,e,s,r)=>{for(var o=r>1?void 0:r?Yy(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o},Zy=(t,e,s)=>(Wy(t,e+"",s),s);const Xy="kos-expression-evaluator-model";class Jy{constructor(e,s,r,o){l(this,"name");l(this,"expression");l(this,"expr");l(this,"getContextData",null);l(this,"_lastResult",{value:void 0});this.name=e,this.expression=s,this.expr=r,this.getContextData=o,this._lastResult={value:void 0,error:void 0}}get result(){return this._lastResult}updateResult(e){this._lastResult=e}evaluate(e){try{return{value:this.expr.evaluate(e),error:void 0}}catch(s){return{value:void 0,error:s instanceof Error?s.message:String(s)}}}}let ur=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"parser");l(this,"_data");l(this,"_expressions",new Map);l(this,"_results");l(this,"_contextRevision",0);this.id=t,this.logger=s.logger,this._data=Se(),this._results=Se(),this.parser=new ct}get data(){return this._data}get contextRevision(){return this._contextRevision}setContextData(t){this._data.setValues(t),X(()=>{this._contextRevision++,this.logger.debug("Context revision incremented to:",this._contextRevision)})}updateContextValue(t,e){this._data[t]=e}updateNestedValue(t,e){const s=t.split("."),r=s.pop();if(!r){this.logger.error(`Invalid path "${t}" - cannot be empty`);return}let o=this._data;for(const n of s)(o[n]===void 0||o[n]===null)&&(o[n]={}),o=o[n];o[r]=e,this.logger.debug(`Updated nested context value "${t}" to:`,e)}addModelToContext(t,e){this._data[t]=e}addExpression(t,e){try{const s=this.parser.parse(e),r=new Jy(t,e,s,()=>this.data);this._expressions.set(t,r),this.evaluateExpression(t),this.logger.debug(`Added expression "${t}": ${e}`)}catch(s){throw this.logger.error(`Failed to parse expression "${t}"`,s),s}}removeExpression(t){const e=this._expressions.delete(t);return e?(delete this._results[t],this.logger.debug(`Removed expression "${t}"`)):this.logger.warn(`Attempted to remove non-existent expression "${t}". Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpression(t){const e=this._expressions.get(t);return e||this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpressionValue(t){const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`);return}return e.result}getCachedExpressionValue(t){const e=this._expressions.get(t);if(e)return e.result}get expressions(){return Array.from(this._expressions.values())}get expressionNames(){return Array.from(this._expressions.keys())}get results(){return this.evaluateAllExpressions(),this._results}evaluateAllExpressions(){Array.from(this._expressions.keys()).forEach(e=>{this._expressions.get(e)&&this.evaluateExpression(e)})}evaluateExpression(t){this.logger.debug(`Evaluating expression: ${String(t)}`);const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${String(t)}" not found`);return}const s=e.evaluate(this.data);this.logger.debug(`Expression "${String(t)}" evaluated to:`,s);const r=e.result;(s.value!==r.value||s.error!==r.error)&&(this.logger.debug(`Expression "${String(t)}" result changed from`,r,"to",s),e.updateResult(s),this.updateResult(t,s))}updateResult(t,e){this.logger.debug(`ExpressionEvaluator.updateResult called for "${t}":`,e),X(()=>{this._results[t]=e})}createExpression(t){const e=ot();return this.addExpression(e,t),e}};Zy(ur,"Registration");ur=Qy([A({modelTypeId:Xy,singleton:!1})],ur);const tu=ur.Registration,eb=m.createLogger({name:"kos-log-manager-service",group:"Services"}),tb="/api/kos/logs/overrides",su=async()=>(eb.debug("sending GET for kos-log-manager"),await De.get(tb)),sb=Object.freeze(Object.defineProperty({__proto__:null,getLogOverrides:su},Symbol.toStringTag,{value:"Module"}));var rb=Object.defineProperty,ob=Object.getOwnPropertyDescriptor,Yr=(t,e,s,r)=>{for(var o=r>1?void 0:r?ob(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&rb(e,s,o),o};const ru="kos-log-manager-model",nb="/kos/logs/override/add/*",ib="/kos/logs/override/remove/*",ab=t=>{if(typeof t=="string")return t;if(typeof t=="number")switch(t){case 0:return"trace";case 1:return"debug";case 2:return"info";case 3:return"warn";case 4:return"error";default:return"info"}return"info"};let Ot=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_overrides");this.id=t,this.logger=s.logger,this._overrides=new vn}updateModel(t){}resolveLoggers(){const t=m.getLoggers(),s=Object.entries(t).map(([r,o])=>({name:r,level:ab(o.getLevel())})).reduce((r,{name:o,level:n})=>(r[o]={name:o,level:n},r),{});return this.logger.debug("Resolved loggers",s),s}async getAllLoggers(t,e){const s=Object.values(this.resolveLoggers());return e==null||e.send(s),s}setLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=m.getLoggers()[r.name];if(!o){this.logger.debug(`Logger ${r.name} not found`);return}o.setLevel(t.level)});const s=m.getLoggers()[t.name];if(!s){this.logger.debug(`Logger ${t.name} not found`);return}s.setLevel(t.level),globalThis.kos.logOverrides=this._overrides.data}resetLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=m.getLoggers()[r.name];o||this.logger.debug(`Logger ${r.name} not found`),o==null||o.resetLevel()});const s=m.getLoggers()[t.name];s||this.logger.debug(`Logger ${t.name} not found`),s==null||s.resetLevel(),globalThis.kos.logOverrides=this._overrides.data}handleOverrideAdded(t,e){var s;this.logger.debug(`Override received for node type ${((s=e.wildcardCapture)==null?void 0:s.nodeType)??"unknown"}`),this._overrides.addModel({...t,id:t.name}),this.setLogLevels(t)}handleOverrideRemoved(t){this._overrides.removeModel(t.name),this.resetLogLevels(t)}async init(){this.logger.debug(`initializing kos-log-manager ${this.id}`)}async load(){this.logger.debug(`loading kos-log-manager ${this.id}`),this.resolveLoggers();const[t,e]=await su();if(t){this.logger.error("Failed to load log overrides",t);return}const s=(e==null?void 0:e.filter(r=>{var o;return((o=r.type)==null?void 0:o.toUpperCase())==="UI"}).map(r=>({name:r.name??"",type:r.type??"",level:r.level??"info",id:r.name||""})))??[];this._overrides.addAll(s),s.forEach(r=>{this.setLogLevels(r)})}};Yr([uc("/api/kos/ui/loggers")],Ot.prototype,"getAllLoggers",1);Yr([B({topic:nb,websocket:!0,wildcardName:"nodeType"})],Ot.prototype,"handleOverrideAdded",1);Yr([B({topic:ib,websocket:!0,wildcardName:"nodeType"})],Ot.prototype,"handleOverrideRemoved",1);Ot=Yr([A(ru)],Ot);const ou=new _e({class:Ot,type:ru}),{URL:Ls}=ae(),{postModel:Hn,getOne:cb}=oe.build({basePath:`${Ls}/api/kos-time`});m.createLogger({name:"kos-time-service",group:"Services"});const nu=async t=>{const e=await Hn({model:t,urlOverride:`${Ls}/api/kos/time/time`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},iu=async t=>{const e=await Hn({model:t,urlOverride:`${Ls}/api/kos/time/date`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},au=async t=>{const e=await Hn({model:{},urlOverride:`${Ls}/api/kos/time/timezone?tz=${t}`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set timezone");return e.data},cu=async()=>{const t=await cb({urlOverride:`${Ls}/api/kos/time/timezone`});if((t==null?void 0:t.status)!==200)throw Error("Failed to set timezone");return t.data.timeZone},lb=Object.freeze(Object.defineProperty({__proto__:null,getTimezone:cu,setDate:iu,setTime:nu,setTimezone:au},Symbol.toStringTag,{value:"Module"}));var ub=Object.defineProperty,db=Object.getOwnPropertyDescriptor,Wr=(t,e,s,r)=>{for(var o=r>1?void 0:r?db(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ub(e,s,o),o};const Zt="kos-time-model",hb="/kos/time/time",fb="/kos/time/day",pb="/kos/time/timezone";let It=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"timezone");this.id=t,this.logger=s.logger,this.timezone=""}async updateSystemTime(t){await nu(t)}async updateSystemDate(t){await iu(t)}async updateSystemTimezone(t){await au(t)}handleTimeChange(){V(gs.TIME_CHANGE,{})}handleDayChange(){V(gs.DAY_CHANGE,{})}async handleTimeZoneChange(){await this.retrieveTimezone(),V(gs.TIMEZONE_CHANGE,{})}async init(){this.logger.debug(`initializing kos-time ${this.id}`)}async retrieveTimezone(){const t=await cu();this.setTimezone(t)}setTimezone(t){this.timezone=t}async load(){this.logger.debug(`loading kos-time ${this.id}`),this.retrieveTimezone()}};Wr([B({topic:hb,websocket:!0})],It.prototype,"handleTimeChange",1);Wr([B({topic:fb,websocket:!0})],It.prototype,"handleDayChange",1);Wr([B({topic:pb,websocket:!0})],It.prototype,"handleTimeZoneChange",1);It=Wr([A(Zt)],It);const dr={registration:{[Zt]:{class:It,singleton:!0}},type:Zt,predicate:Te(Zt),factory:ie.Singleton.create(Zt)};var gb=Object.defineProperty,mb=Object.getOwnPropertyDescriptor,lu=(t,e,s,r)=>{for(var o=r>1?void 0:r?mb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&gb(e,s,o),o};const uu="log-block-container-model";let hr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t,sortKey:"blockNum"})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing log-block-container container ${this.id}`)}async load(){this.logger.debug(`loading log-block-container container ${this.id}`)}};lu([$e],hr.prototype,"_models",2);hr=lu([A(uu)],hr);const yb=m.createLogger({name:"log-stream-container-service",group:"Services"}),du=()=>{var r;const t=me(),s=(t==null?void 0:t.connId)||((r=window==null?void 0:window.kosBridge)==null?void 0:r.call(window,"connId"));return m.error(`getKosConnectionId: ${s}`),s},Kt=du(),bb="/api/kos/logs/node/{nodeId}/streams",hu=async()=>(yb.debug("sending GET for log-stream-container"),await De.get(bb,{path:{nodeId:"primary"}},{destinationAddress:Kt})),fu=async(t,e="primary")=>{await De.post("/api/kos/logs/node/{nodeId}/{stream}/subscribe",{path:{nodeId:e,stream:t}},void 0,{destinationAddress:Kt})},pu=async t=>{await De.post("/api/kos/logs/node/{nodeId}/{stream}/unsubscribe",{path:{nodeId:"primary",stream:t}},void 0,{destinationAddress:Kt})},vb=async()=>{await De.post("/api/kos/logs/overrides",{},{level:"WARN",name:"com.example",nodeType:"java",type:"package"},{destinationAddress:Kt})},gu=async t=>await De.get("/api/kos/logs/node/{nodeId}/{stream}/blocks",{path:{nodeId:"primary",stream:t}},{destinationAddress:Kt}),mu=async(t,e)=>await De.get("/api/kos/logs/node/{nodeId}/{stream}/blocks/{blockId}",{path:{nodeId:"primary",stream:t,blockId:e}},{destinationAddress:Kt}),wb=Object.freeze(Object.defineProperty({__proto__:null,createOverride:vb,getKosConnectionId:du,getLogStreamBlock:mu,getLogStreamBlocks:gu,getLogStreams:hu,subscribeToLogStream:fu,unsubscribeFromLogStream:pu},Symbol.toStringTag,{value:"Module"}));var Eb=Object.getOwnPropertyDescriptor,Mb=(t,e,s,r)=>{for(var o=r>1?void 0:r?Eb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const yu="log-block-model";let xo=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"stream");l(this,"blockNum");l(this,"startLineNum");l(this,"endLineNum");l(this,"startTime");l(this,"endTime");l(this,"lineCount");l(this,"lines");l(this,"inc");this.id=t,this.logger=s.logger,this.nodeId=e.nodeId,this.stream=e.stream,this.blockNum=e.blockNum,this.startLineNum=e.startLineNum,this.endLineNum=e.endLineNum,this.startTime=e.startTime,this.endTime=e.endTime,this.lineCount=e.lineCount,this.lines=[],this.inc=0}async syncLines(){const[t,e]=await mu(this.stream,this.blockNum);if(t){this.logger.error(`Failed to get log block ${this.blockNum}`);return}e&&this.addLines(e.lines,!0)}updateModel(t){this.startLineNum=t.startLineNum,this.endLineNum=t.endLineNum,this.startTime=t.startTime,this.endTime=t.endTime,this.lineCount=t.lineCount}addLines(t,e){const s=e?[]:this.lines;this.lines=[...s,...t],this.inc+=1}async init(){this.logger.debug(`initializing log-block ${this.id}`)}async load(){this.logger.debug(`loading log-block ${this.id}`)}};xo=Mb([A(yu)],xo);const _s=new ye({class:xo,type:yu}),Qr=new ye({class:hr,type:uu});Qr.addRelatedModel(_s);var Tb=Object.defineProperty,_b=Object.getOwnPropertyDescriptor,bu=(t,e,s,r)=>{for(var o=r>1?void 0:r?_b(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Tb(e,s,o),o};const vu="log-stream-model";let fr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"_blocks");l(this,"name");l(this,"currentBlockId");l(this,"isResetting");l(this,"generatorInstance");l(this,"shouldStop",!1);this.id=t,this.logger=s.logger,this.currentBlockId="",this.name=e.name,this.nodeId=e.nodeId,this.isResetting=!0,this._blocks=Qr.instance(`${t}-blocks`).options({}).build()}get firstLineNum(){const t=this.populated[0];return t?t.startLineNum:0}get currentBlock(){const t=this.currentBlockId;return this._blocks.getModel(t)}get populated(){return this._blocks.data.filter(t=>t.lines.length>0)}get blocks(){return this._blocks.data}get totalLineCount(){return this.populated.reduce((t,e)=>t+e.lineCount,0)}accept(t){t.visit(this)}updateBlock(t){var r;let e=this._blocks.models.getModel(`${t.stream}-block-${t.blockNum}`);const s={nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)};e||(e=_s.instance(`${t.stream}-block-${t.blockNum}`).options(s).build(),this._blocks.addModel(e)),e&&e.updateModel(s),(!this.currentBlock||t.blockNum>=((r=this.currentBlock)==null?void 0:r.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}addBlock(t){var s;const e=_s.instance(`${t.stream}-block-${t.blockNum}`).options({nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)}).build();this._blocks.addModel(e),(!this.currentBlock||t.blockNum>=((s=this.currentBlock)==null?void 0:s.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}removeBlock(t){this._blocks.models.removeModel(`${this.name}-block-${t}`)}async subscribe(){await fu(this.name)}async unsubscribe(){await pu(this.name)}async reset(){if(this.isResetting=!0,this.populated.length>0)return;this.logger.debug(`resetting log-stream ${this.id}`);for(const e of this._blocks.models.data)e.lines=[];const t=this._blocks.data[this._blocks.data.length-1];t&&await t.syncLines(),this.isResetting=!1}async init(){this.logger.debug(`initializing log-stream ${this.id}`)}async load(){this.logger.debug(`loading log-stream ${this.id}`);const[t,e]=await gu(this.name);if(t){this.logger.error(`Error loading log stream: ${t}`);return}if(e)for(const r of e)this.addBlock(r);const s=this._blocks.data[this._blocks.data.length-1];if(s&&await s.syncLines(),this._blocks.data.length>1){const r=this._blocks.data[this._blocks.data.length-2];r&&await r.syncLines()}}start(){return this.shouldStop=!1,this.generatorInstance=this.streamLogs(),this.generatorInstance}stop(){var t;this.shouldStop=!0,(t=this.generatorInstance)==null||t.next(),console.log("Requested generator stop.")}async*streamLogs(){const t=[];let e=null,s=0,r=this.currentBlockId;const o=yl(()=>{const n=this.currentBlock;return n?{blockId:this.currentBlockId,lineCount:n.lines.length}:null},n=>{const i=this.currentBlock;if(i)if(r!==(n==null?void 0:n.blockId))r=n==null?void 0:n.blockId,s=0,t.push(...i.lines);else{const a=i.lines.slice(s);t.push(...a),s+=a.length}e&&(e(),e=null)},{fireImmediately:!0});try{for(const n of this.populated.filter(i=>i!==this.currentBlock))for(const i of n.lines)yield i;for(;;)for(t.length===0&&await new Promise(n=>e=n);t.length>0;)yield t.shift()}finally{o()}}};bu([$e],fr.prototype,"_blocks",2);fr=bu([A(vu)],fr);const ms=new ye({class:fr,type:vu});var Sb=Object.defineProperty,Ob=Object.getOwnPropertyDescriptor,lt=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ob(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Sb(e,s,o),o};const wu="log-stream-container-model",Ib="/kos/logs/subscription/addBlock/*",$b="/kos/logs/subscription/updateBlock/*",Cb="/kos/logs/subscription/removeBlock/*",Db="/kos/logs/subscription/lines/*",Eu="/kos/logs/streams/add/*";let Le=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"selectedStream");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t}),this.selectedStream=void 0}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}updateModel(t){}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}updateSelectedStream(t){this.selectedStream=t}handleStreamAdded(t){this.logger.debug(`Received topic: ${Eu}`);const e=t.stream,s=ms.instance(e).options({name:e,nodeId:"primary"}).build();this.addModel(s)}handleAddBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.addBlock(t)}handleRemoveBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.removeBlock(t.blockNum)}handleUpdateBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.updateBlock(t)}handleLogLine(t,e){var o;this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&((o=r.currentBlock)==null||o.addLines(t.lines))}async init(){this.logger.debug(`initializing log-stream-container container ${this.id}`)}async subscribeToLogStream(t){const e=ms.instance(t).options({name:t,nodeId:"primary"}).build();this.addModel(e),await e.subscribe()}async load(){this.logger.debug(`loading log-stream-container container ${this.id}`);const[t,e]=await hu();if(t){this.logger.error(`Error loading log-streams: ${t}`);return}e&&e.forEach(s=>{const r=ms.instance(s).options({name:s,nodeId:"primary"}).build();this.addModel(r)})}};lt([$e],Le.prototype,"_models",2);lt([B({topic:[Eu],websocket:!0})],Le.prototype,"handleStreamAdded",1);lt([B({topic:[Ib],websocket:!0})],Le.prototype,"handleAddBlock",1);lt([B({topic:[Cb],websocket:!0})],Le.prototype,"handleRemoveBlock",1);lt([B({topic:[$b],websocket:!0})],Le.prototype,"handleUpdateBlock",1);lt([B({topic:[Db],websocket:!0})],Le.prototype,"handleLogLine",1);Le=lt([A(wu)],Le);const Fs=new _e({class:Le,type:wu});Fs.addRelatedModel(ms);Fs.addRelatedModel(Qr);Fs.addRelatedModel(_s);const xb=t=>t.rank!==void 0,Ab=t=>t.visibleRole!==void 0,Rb=t=>t.color!==void 0,Pb=t=>{const e=t.info;return xb(e)?e.rank:0},kb=t=>{const e=t.info;return Rb(e)?e.color:"orange"},Lb=t=>{const e=t.info;return Ab(e)?e.visibleRole:"TECHNICIAN"},{URL:Zr}=ae(),{getAll:Fb,postModel:Mu}=oe.build({basePath:`${Zr}/api/kos/troubles`}),Tu=async t=>await Fb({urlOverride:`${Zr}${t}`}),_u=async(t,e="/api/kos/troubles",s)=>{try{const r=await Mu({model:{},urlOverride:`${Zr}${e}/resolve/${t}`,tracker:s});return r!=null&&r.data&&st.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:Ke.Fail,tracker:s,reason:"Failed to resolve trouble"};return st.initiateFuture(o),o}},Nb=async(t,e="/api/kos/troubles",s)=>{try{const r=await Mu({model:t,urlOverride:`${Zr}${e}/resolve/`,tracker:s});return r!=null&&r.data&&st.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:Ke.Fail,tracker:s,reason:"Failed to resolve troubles"};return st.initiateFuture(o),o}},Ub=Object.freeze(Object.defineProperty({__proto__:null,bulkResolveTroubles:Nb,getTroubles:Tu,resolveTrouble:_u},Symbol.toStringTag,{value:"Module"})),pr="troubleDataMapper",Vs=new Map;As(pr,{register:(t,e)=>{var s;Vs.has(t)||Vs.set(t,[]),(s=Vs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=Vs.get(t);if(!s)return{...e.data};const r=s.map(i=>i(e));return(await Promise.allSettled(r)).reduce((i,a)=>(a.status==="fulfilled"?i={...i,...a.value}:m.info(`Trouble mapper ${t} failed: ${a.reason}`),i),{...e.data})}});const Ns="troubleMapper",Gs=new Map;As(Ns,{register:(t,e)=>{var s;Gs.has(t)||Gs.set(t,[]),(s=Gs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=Gs.get(t);if(!s)return[];const r=s.map(i=>i(e)),n=(await Promise.allSettled(r)).map(i=>i.status==="fulfilled"?i.value:(m.info(`Trouble mapper ${t} failed: ${i.reason}`),[])).flat();return Array.from(new Set(n))}});$[Ns].register("nozzle",async t=>[t.data.nozzlePath]);$[Ns].register("path",async t=>[t.data.path]);const jb=async t=>{const e=new Set,s=t.ifaces,r=s==null?void 0:s.map(n=>$[Ns].execute(n,t));return(await Promise.allSettled(r)).forEach(n=>{n.status==="fulfilled"&&n.value.forEach(i=>e.add(i))}),Array.from(e)},Su=async t=>{const e=t.ifaces,s=e==null?void 0:e.map(i=>$[pr].execute(i,t)),r=$[pr].execute(t.type,t);s.push(r);const n=(await Promise.allSettled(s)).reduce((i,a)=>(a.status==="fulfilled"&&(i={...i,...a.value}),i),{});return{...t.data,...n}};class Bb{constructor(){l(this,"type","ResolvableTrouble");l(this,"title","Resolvable Trouble");l(this,"subtitle","Trouble")}}class Kb{constructor(){l(this,"type","BlockPumpTrouble");l(this,"title","Block Pump Trouble");l(this,"subtitle","Trouble")}}class pt{static getHandler(e){switch(e){case"ResolvableTrouble":return new Bb;case"BlockPumpTrouble":return new Kb;default:return}}}var Hb=Object.defineProperty,qb=Object.getOwnPropertyDescriptor,Ou=(t,e,s,r)=>{for(var o=r>1?void 0:r?qb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Hb(e,s,o),o};const Xt="trouble-model";function Ys(t){return typeof t.shouldDefer=="boolean"}let gr=class{constructor(t,{resolvable:e,tags:s,info:r,id:o,clientData:n,rank:i,ifaces:a,type:c,group:u,createTime:d,role:h,color:f,servicePath:p,...y},w){l(this,"id");l(this,"logger");l(this,"_troubleId");l(this,"_resolvable");l(this,"type");l(this,"futureHandler");l(this,"ifaces");l(this,"clientData");l(this,"info");l(this,"role");l(this,"color");l(this,"tags");l(this,"data");l(this,"rank");l(this,"servicePath");l(this,"group");l(this,"createTime");l(this,"_mapped",{});this.id=t,this.logger=w.logger,this.type=c,this._troubleId=o,this._resolvable=!!e,this.ifaces=a,this.rank=i,this.role=h,this.color=f,this.tags=s,this.info=r,this.group=u,this.servicePath=p??"/api/kos/troubles",this.createTime=d,this.clientData=n,this.data={},Object.assign(this.data,y),this.futureHandler=new Ur(this)}getTitleWithContext(t){var s,r;const e=t?(r=(s=pt.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:pt.getHandler(this.type);return(e==null?void 0:e.title)||"Trouble"}getSubtitleWithContext(t){var s,r;const e=t?(r=(s=pt.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:pt.getHandler(this.type);return(e==null?void 0:e.subtitle)||"Trouble"}get rawId(){return this._troubleId}get title(){var t;return((t=pt.getHandler(this.type))==null?void 0:t.title)||"Trouble"}get subtitle(){var t;return((t=pt.getHandler(this.type))==null?void 0:t.subtitle)||"Trouble"}get troubleId(){return this._troubleId}get resolvable(){return this._resolvable}get future(){return this.futureHandler.future}async resolveMappedData(){return await Su(this)}get deferredCompanion(){const t=To(this.id,e=>Ys(e));if(t&&Ys(t.modelData))return t.modelData}get deferred(){return this.deferredCompanion?this.deferredCompanion.deferred:!1}get shouldDefer(){const t=To(this.id,e=>Ys(e));return t&&Ys(t.modelData)?t.modelData.shouldDefer:!1}clearDefer(){var t;(t=this.deferredCompanion)==null||t.clearDefer()}defer(){var t;(t=this.deferredCompanion)==null||t.defer()}getChildren(){return[...this.futureHandler.allFutures]}async resolve(t){var e;if(!this._resolvable)throw this.logger.error(`attempting to resolve an unresolvable trouble with id ${this._troubleId}`),new Error("Trouble is not resolvable");if(this.shouldDefer){(e=this.deferredCompanion)==null||e.defer();return}return await _u(this._troubleId,this.servicePath,t)}};Ou([ai()],gr.prototype,"resolve",1);gr=Ou([A(Xt)],gr);const Ss={registration:{[Xt]:{class:gr,singleton:!1}},type:Xt,predicate:Te(Xt),factory:ie.Factory.create(Xt)};var Iu=Object.defineProperty,zb=Object.getOwnPropertyDescriptor,Vb=(t,e,s)=>e in t?Iu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,qn=(t,e,s,r)=>{for(var o=r>1?void 0:r?zb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Iu(e,s,o),o},Gb=(t,e,s)=>(Vb(t,e+"",s),s);function Vi(t){return $.propertyMapper.hasMapper(ve.TroubleRank)?$.propertyMapper.executeMapper(ve.TroubleRank,t):Pb(t)}function Gi(t){return($.propertyMapper.hasMapper(ve.TroubleColor)?$.propertyMapper.executeMapper(ve.TroubleColor,t):kb(t)).toLowerCase()}function Yi(t){return($.propertyMapper.hasMapper(ve.TroubleRole)?$.propertyMapper.executeMapper(ve.TroubleRole,t):Lb(t)).toLowerCase()}const Yb="trouble-container-model";class pe{}l(pe,"INDEX_TROUBLES_BY_IFACE","byIface"),l(pe,"INDEX_TROUBLES_BY_TYPE","byType"),l(pe,"INDEX_TROUBLES_BY_GROUP","byGroup"),l(pe,"INDEX_TROUBLES_BY_DEFERRED","byDeferred"),l(pe,"SORT_KEY_RANK","rank"),l(pe,"TROUBLES_DEFERRED","true");let $t=class{constructor(t,e){l(this,"id");l(this,"servicePath","/api/kos/troubles");this.id=t,this.servicePath=e.servicePath??this.servicePath}async load(){this.logger.debug("loading trouble container");const t=await Tu(this.servicePath);try{t==null||t.data.forEach(e=>{const s={...e,servicePath:this.servicePath,rank:Vi(e),color:Gi(e),role:Yi(e),id:String(e.id)},r=Ss.factory(`trouble-${e.id}`)(s);this.troubles.addModel(r)})}catch(e){throw this.logger.error(e),e}}handleTroubleRemoved(t){const e=`trouble-${t}`,s=this.troubles.getModel(e);this.troubles.removeModel(e),s&&tt(s)}handleTroubleAdded(t){const e={...t,servicePath:this.servicePath,rank:Vi(t),color:Gi(t),role:Yi(t),id:String(t.id)};if(e.role==="NONE")return;const s=Ss.factory(`trouble-${t.id}`)(e);this.troubles.addModel(s)}};Gb($t,"Registration");qn([B({topic:"/kos/trouble/remove",websocket:!0,lifecycle:U.INIT})],$t.prototype,"handleTroubleRemoved",1);qn([B({topic:"/kos/trouble/add",websocket:!0})],$t.prototype,"handleTroubleAdded",1);$t=qn([A({modelTypeId:Yb,singleton:!0}),pc(),lc({containerProperty:"troubles",containerOptions:{indexMap:{[pe.INDEX_TROUBLES_BY_IFACE]:jb,[pe.INDEX_TROUBLES_BY_TYPE]:"type",[pe.INDEX_TROUBLES_BY_GROUP]:"group",[pe.INDEX_TROUBLES_BY_DEFERRED]:"deferred"},sortKey:pe.SORT_KEY_RANK}})],$t);const Ct=$t.Registration,{URL:$u}=ae(),{getAll:Wb}=oe.build({basePath:`${$u}/api/kos/ota`}),Wi=m.createLogger({name:"ota-service",group:"Services"}),Qb=async()=>{Wi.debug("sending GET request to /api/kos/ota/artifacts");const t=await Wb({urlOverride:`${$u}/api/kos/ota/artifacts`});return Wi.debug("getArtifacts - response:",t),t==null?void 0:t.data};var Zb=Object.defineProperty,Xb=Object.getOwnPropertyDescriptor,Xr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Xb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Zb(e,s,o),o};const Cu="ota-model",Jb=t=>{let e=null;for(const s in t){const r=t[s],o=r.lastUpdateTime;(!e||e.lastUpdateTime<o)&&(e=r)}return e},go=t=>{const e=t.artifactInfo,s=Jb(t.requests),r=(e==null?void 0:e.identifier)||(s==null?void 0:s.kabId);if(!r)return;let o;switch(t.status){case"INSTALLED":o="ready";break;case"INVALID":o="error";break;case"MISSING":o=((s==null?void 0:s.currentSize)||0)>0?"downloading":"idle";break;case"STAGED":o="pending"}const n=e===void 0;return{id:r,manifest:n,label:e==null?void 0:e.version,name:e==null?void 0:e.name,status:o,error:o==="error"?s==null?void 0:s.lastErrorReason:void 0,errorCount:o==="error"?s==null?void 0:s.errorCount:0,progress:o==="downloading"&&s&&!n?s.currentSize/(e==null?void 0:e.size)*100:void 0,size:e==null?void 0:e.size}};let Dt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"data",new vn);l(this,"troubleContainer");this.id=t,this.logger=s.logger}get downloadInProgressTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTADownloadInProgressTrouble"))==null?void 0:e[0]}get updatePendingTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAUpdatePendingTrouble"))==null?void 0:e[0]}get pausedDueToErrorsTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAPausedDueToErrorsTrouble"))==null?void 0:e[0]}get updates(){return this.data}get status(){return this.pausedDueToErrorsTrouble?"error":this.downloadInProgressTrouble?"downloading":this.updatePendingTrouble?"pending":"idle"}installAndReboot(){var t;this.updatePendingTrouble||this.logger.error("installAndReboot - OTAUpdatePendingTrouble not present"),this.logger.debug("installAndReboot - resolve OTAUpdatePendingTrouble"),(t=this.updatePendingTrouble)==null||t.resolve()}async init(){this.logger.debug(`initializing ota ${this.id}`)}async load(){this.logger.debug(`loading ota ${this.id}`);try{const t=await Qb();t&&t.forEach(e=>{const s=go(e);s&&this.data.addModel(s)})}catch(t){this.logger.error(`loading ota ${this.id} - error:`,t)}}async handleAllArtifacts(t){this.logger.debug("handleAllArtifacts:",t),await this.data.clear();try{t.forEach(e=>{const s=go(e);s&&this.data.addModel(s)})}catch(e){this.logger.error(`handleAllArtifacts ${this.id} - error:`,e)}}handleChangedArtifacts(t){this.logger.debug("handleChangedArtifacts:",t);try{t.forEach(e=>{const s=go(e);s&&this.data.updateModel(s)})}catch(e){this.logger.error(`handleChangedArtifacts ${this.id} - error:`,e)}}};Xr([kt({modelType:Ct.type})],Dt.prototype,"troubleContainer",2);Xr([B({topic:"/kos/ota/artifacts/all",websocket:!0})],Dt.prototype,"handleAllArtifacts",1);Xr([B({topic:"/kos/ota/artifacts/changed",websocket:!0})],Dt.prototype,"handleChangedArtifacts",1);Dt=Xr([A(Cu)],Dt);const mr=new _e({class:Dt,type:Cu});function ev(t){let e;const s=async(...r)=>{e&&e.abort(),e=new AbortController;const o=e;try{return await t(...r,o.signal)}finally{e===o&&(e=void 0)}};return s.cancel=()=>{e&&(e.abort(),e=void 0)},s.getController=()=>e,s.isActive=()=>!!e,s}const mo=m.createLogger({name:"software-info-service",group:"Services"}),zn=async t=>{mo.debug("sending GET for software-info");const[e,s]=await Ul.get("/api/kos/manifest/info",void 0,{signal:t});if(!s)throw t!=null&&t.aborted?(mo.debug("Request was aborted"),new ge("Request was aborted")):(mo.error("Failed to fetch software-info",e),new ge("Failed to fetch software-info"));return s},tv=ev(zn),sv=Object.freeze(Object.defineProperty({__proto__:null,getSoftwareInfos:zn,getSoftwareInfosWithCancel:tv},Symbol.toStringTag,{value:"Module"}));var rv=Object.getOwnPropertyDescriptor,ov=(t,e,s,r)=>{for(var o=r>1?void 0:r?rv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Jt="software-info-model";let Ao=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodes");this.id=t,this.logger=s.logger,this.nodes=[]}async init(){this.logger.debug(`initializing software-info ${this.id}`)}groupBy(t,e){return t.reduce((s,r)=>(s[r[e]]=[...s[r[e]]||[],r],s),{})}async load(){this.logger.debug(`loading software-info ${this.id}`);try{const t=await zn(),e=(t==null?void 0:t.nodes)||{};X(()=>{const r=Object.keys(e).map(o=>e[o][0]).map(o=>({nodeName:o.nodeType,kosVersion:o.kosVersion,group:this.groupBy(o.artifacts,"group")}));this.nodes=r})}catch(t){t instanceof ge&&this.logger.error("Failed to fetch software-info",t)}}};Ao=ov([A(Jt)],Ao);const yr={registration:{[Jt]:{class:Ao,singleton:!1}},type:Jt,predicate:Te(Jt),factory:ie.Factory.create(Jt)},{URL:Du}=ae(),{getOne:nv}=oe.build({basePath:`${Du}/api/kos/state`}),iv=m.createLogger({name:"state-bean-service",group:"Services"}),xu=async({path:t})=>(iv.debug("sending GET for state-bean"),await nv({urlOverride:`${Du}/api/kos/state/${t}`})),av=Object.freeze(Object.defineProperty({__proto__:null,getStateBeanData:xu},Symbol.toStringTag,{value:"Module"}));var cv=Object.defineProperty,lv=Object.getOwnPropertyDescriptor,Au=(t,e,s,r)=>{for(var o=r>1?void 0:r?lv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&cv(e,s,o),o};const es="state-bean-model",uv=nt("path");let br=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"props");l(this,"logger");this.id=t,this.logger=s.logger,this.props=En.map(new Map),Mo(e,this)}updateModel(t){Mo(t,this)}handleConfigBeanUpdated(t){Object.entries(t).forEach(([e,s])=>{let r=s;typeof r=="string"&&_n(r)&&(r=r.toLowerCase()=="true"),typeof r=="string"&&jr(r)&&(r=Number(r)),this.props.set(e,r)})}async init(){this.logger.debug(`initializing state-bean ${this.id}`)}updateProps(t){Object.entries(t).forEach(([e,s])=>{this.props.set(e,s)})}async load(){this.logger.debug(`loading state-bean ${this.id}`);const t=await xu({path:this.path});t!=null&&t.data&&this.updateProps(t.data)}};Au([B({topic:`/kos/state/${uv}`,websocket:!0})],br.prototype,"handleConfigBeanUpdated",1);br=Au([A(es)],br);const Os={registration:{[es]:{class:br,singleton:!1}},type:es,predicate:Te(es),factory:ie.Factory.create(es)};var dv=Object.defineProperty,hv=Object.getOwnPropertyDescriptor,Ru=(t,e,s,r)=>{for(var o=r>1?void 0:r?hv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&dv(e,s,o),o};const ts="state-prop-model",Qi=nt("path");let vr=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"attribute");l(this,"logger");l(this,"stateBean");this.id=t,this.logger=s.logger,this.path=e.path,this.attribute=e.attribute}get value(){return this.stateBean.props.get(this.attribute)}async init(){this.logger.debug(`initializing state-prop ${this.id}`)}async load(){this.logger.debug(`loading state-prop ${this.id}`)}toString(){var t;return((t=this.value)==null?void 0:t.toString())??""}};Ru([kt({modelType:Os.type,id:`state-bean-${Qi}`,options:{path:Qi}})],vr.prototype,"stateBean",2);vr=Ru([A(ts)],vr);const Vn={registration:{[ts]:{class:vr,singleton:!1}},type:ts,predicate:Te(ts),factory:ie.Factory.create(ts)},{URL:fv}=ae(),{getAll:pv}=oe.build({basePath:`${fv}/api/state-prop`}),gv=m.createLogger({name:"state-prop-service",group:"Services"}),mv=async()=>(gv.debug("sending GET for state-prop"),await pv({})),yv=Object.freeze(Object.defineProperty({__proto__:null,getStateProps:mv},Symbol.toStringTag,{value:"Module"})),{URL:Gn}=ae(),{getOne:Pu}=oe.build({basePath:`${Gn}/api/translation`}),ys=m.createLogger({name:"translation-service",group:"Services"}),bv=()=>{const t=window.location.origin,e=me();return(e==null?void 0:e.host)||t},ku=async(t,e)=>{ys.debug(`Loading translations from: ${t}`);const s=e??bv();try{const r=await fetch(`${s}${t}`);return r.status!==200?(ys.warn(`Failed to fetch translations at ${t}: ${r.status}`),{}):await r.json()}catch(r){throw ys.error("Error fetching translations",r),r}},vv=async()=>{ys.debug("Getting system localization descriptor");const t=await Pu({urlOverride:`${Gn}/api/system/kos/localization`});if((t==null?void 0:t.status)!==200)throw new Error(`Failed to get localization descriptor ${t==null?void 0:t.status}`);return t.data},Lu=t=>async()=>{ys.debug(`Getting KOS localization descriptor for context: ${t}`);const e=await Pu({urlOverride:`${Gn}/api/kos/localization/contexts`});if((e==null?void 0:e.status)!==200)throw new Error(`Failed to get KOS localization descriptor ${e==null?void 0:e.status}`);return e.data[t]},Fu="langResolver";var wv=Object.getOwnPropertyDescriptor,Ev=(t,e,s,r)=>{for(var o=r>1?void 0:r?wv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const ss="translation-model";function Mv(t){const e=typeof t=="string",s=e?!1:!!(t!=null&&t.data)&&typeof(t==null?void 0:t.data)!="string",r=e?t:t==null?void 0:t.defaultValue,o=e||t==null?void 0:t.context,n=e?void 0:s?t==null?void 0:t.data:t;return{isBasicOptions:e,defaultValue:r,context:o,data:n}}function Nu(t,e=""){return Object.keys(t).reduce((s,r)=>{const o=e?`${e}.${r}`:r;if(typeof t[r]=="object"&&t[r]!==null){const n=Nu(t[r],o);return{...s,...n}}else return{...s,[o]:t[r]}},{})}function Uu(t,e){const s={...t};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(typeof e[r]=="object"&&e[r]!==null&&typeof t[r]=="object"&&t[r]!==null?s[r]=Uu(t[r],e[r]):s[r]=e[r]);return s}const Ro=(t,e)=>{const s=/__(.*?)__/g,r=t.replace(s,(o,n)=>Object.prototype.hasOwnProperty.call(e||{},n.trim())?e==null?void 0:e[n.trim()]:o);return r===t?r:s.test(r)?Ro(r,e):r},Ws=(t,e,s)=>{const r=/{{(.*?)}}/g,n=Ro(t,e).replace(r,(a,c)=>Object.prototype.hasOwnProperty.call(s||{},c.trim())?s==null?void 0:s[c.trim()]:a);return Ro(n,e)},Zi=(t,e)=>{if(e.includes(":")){const[s,r]=e.split(":");return{namespace:s,key:r}}else return{namespace:t,key:e}};let Po=class{constructor(t,e,s){l(this,"id");l(this,"namespace");l(this,"descriptor");l(this,"defaultLocale");l(this,"currentLocale");l(this,"bundleResolver");l(this,"data");l(this,"logger");l(this,"resolver");l(this,"disposer");l(this,"context");l(this,"rootUrl");this.id=t,this.defaultLocale=e.defaultLocale||"en",this.currentLocale=e.currentLocale||"en",this.namespace=e.namespace,this.descriptor=e.descriptor,this.rootUrl=e.rootUrl,this.data={},this.resolver=e.resolver||s.kosContext.get(Fu),this.bundleResolver=e.bundleResolver,this.logger=s.logger,this.context=s.kosContext.parentModel}getTranslationLocales(t){const e=this.descriptor[t];if(!t||!e)return[this.defaultLocale];if(!this.defaultLocale&&!e.fallbacks)return[t];let s=e.fallbacks||[this.defaultLocale];return s.includes(t)||(s=[t,...s]),s}async loadTranslations(){const t=this.getTranslationLocales(this.currentLocale).reverse(),e=t.map(r=>{if(this.bundleResolver){const o=Y.getContext(this.id);return this.bundleResolver(this.namespace,r,o)}try{const o=this.resolver(this.namespace,r);return ku(o,this.rootUrl)}catch{return Promise.resolve({})}}),s=await Promise.allSettled(e);X(()=>{const r=s.reduce((o,n,i)=>(n.status==="fulfilled"?(this.logger.debug(`resolved ${t[i]}`,n.value),n.value&&(o=Uu(o,n.value))):this.logger.error(`failed to load translation ${this.id} for ${t[i]}`),o),{});this.data=Nu(r)})}async init(){this.logger.debug(`initializing translation ${this.id}`)}exists(t){const{namespace:e,key:s}=Zi(this.namespace,t);if(e!==this.namespace){const r=this.context.getModel(e);return r?r.exists(s):!1}return!!this.data[s]}resolveKey(t,e){if(!t)return this.logger.debug("key is empty"),"";const{defaultValue:s,context:r,data:o}=Mv(e),{namespace:n,key:i}=Zi(this.namespace,t),a=`${i}_${r}`;if(n!==this.namespace){const c=this.context.getModel(n);return c?c.resolveKey(i,e):i}if(r&&this.data[a]){const c=this.data[a];return Array.isArray(c)?c.map(u=>Ws(u,this.data,o)):Ws(this.data[a],this.data,o)}if(this.data[i]){const c=this.data[a];return Array.isArray(c)?c.map(u=>Ws(u,this.data,o)):Ws(this.data[i],this.data,o)}return s??i}unload(){this.logger.debug(`unloading translation ${this.id}`),this.disposer&&this.disposer()}async load(){this.logger.debug(`loading translation ${this.id}`),await this.loadTranslations()}async ready(){this.logger.debug(`ready translation ${this.id}`),this.disposer=M.reaction(()=>this.currentLocale,(t,e)=>{this.logger.info(`translation langs for namespace ${this.id} changed from ${e} to ${t}`),this.loadTranslations()})}};Po=Ev([Lr(),A(ss)],Po);const wr={registration:{[ss]:{class:Po,singleton:!1}},type:ss,predicate:Te(ss),factory:ie.Factory.create(ss)};var Tv=Object.defineProperty,_v=Object.getOwnPropertyDescriptor,ju=(t,e,s,r)=>{for(var o=r>1?void 0:r?_v(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Tv(e,s,o),o};const rs="translation-container-model",Sv=(t,e="/")=>t.join(e).replace(new RegExp(e+"{1,}","g"),e);function Ov(t,e){const s=this.descriptor.namespaces[t];if(!s)throw new Error("namespace "+t+" not found in descriptor");const r=s.basePath,o=s.locales[e].file;return Sv([r,o])}let Er=class{constructor(t,e,s){l(this,"id");l(this,"lang");l(this,"rootUrl");l(this,"descriptor");l(this,"_defaultNamespace");l(this,"resolver");l(this,"logger");l(this,"descriptorUrl");l(this,"namespaces",[]);l(this,"_models");this.id=t,this.lang=e.lang||"en",this.descriptor=e.descriptor,this._defaultNamespace=e.defaultNamespace,this.descriptorUrl=e.descriptorUrl,this.rootUrl=e.rootUrl,this.resolver=e.resolver||Ov.bind(this),s.kosContext.set(Fu,this.resolver),this.logger=s.logger,this._models=new Ce({parentId:t})}set currentLocale(t){this.lang=t,this.models.data.forEach(e=>{e.currentLocale=t})}get defaultNamespace(){return this._defaultNamespace?this.getModel("translation-"+this._defaultNamespace):void 0}getModel(t){return this.logger.debug("getting model "+t),this._models.getModel("translation-"+t)}get models(){return this._models}get data(){return this._models.data}async reload(){for(const t of this.namespaces){const e=this.resolveNamespace(t);await de(e)}}resolveNamespace(t){var s;if((s=this.descriptor.namespaces)==null?void 0:s[t]){const r=Object.keys(this.descriptor.namespaces[t].locales)[0],o=this.descriptor.namespaces[t].locales[r].defaultLocale,n=wr.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:o,descriptor:this.descriptor.namespaces[t].locales,resolver:this.resolver});return this.addModel(n),this.namespaces.includes(t)||X(()=>{this.namespaces.push(t)}),n}else{this.logger.warn("namespace "+t+" not found in descriptor");const r=wr.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:this.lang,descriptor:{},resolver:this.resolver});return this.addModel(r),r}}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug("initializing translation-container container "+this.id)}async load(){this.logger.debug("loading translation-container container "+this.id)}};ju([$e],Er.prototype,"_models",2);Er=ju([A(rs)],Er);const Fe={registration:{[rs]:{class:Er,singleton:!0}},type:rs,predicate:Te(rs),factory:ie.Singleton.create(rs)},Iv={set(t,e){const s=Y.getContext(Fe.type);s&&s.set(t,e)},get(t){const e=Y.getContext(Fe.type);return e==null?void 0:e.get(t)}},Bu={async init(t){const e=Fe.factory(t);return await de(e),{translations:e}}};function $v(t){return(t==null?void 0:t.troubles)!==void 0&&(t==null?void 0:t.troubles)instanceof Array&&(t==null?void 0:t.troublesByType)!==void 0&&typeof(t==null?void 0:t.troublesByType)=="object"}const Ku="kos-ws-event",Yn=Lt(Ku);var Cv=Object.defineProperty,Dv=Object.getOwnPropertyDescriptor,Wn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Dv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Cv(e,s,o),o};const xv=({headers:t,body:e})=>Object.entries(t).map(([r,o])=>`${r}:${o}`).join("\\n")+"\\n\\n"+e;exports.WsEventModel=class{constructor(e){l(this,"id");l(this,"events");l(this,"_topicMap");this.id=e,this.events=M.observable.map(new Map),this._topicMap=new Map}get websocketEvents(){return Array.from(this.events.values())}handleSendEvent(e,s){this.processEvent(s,!0)}handleReceiveEvent(e,s){this.processEvent(s)}processEvent(e,s=!1){m.debug("kos event received");const{body:r,headers:o}=e.body,n=o["request-id"]||o["response-id"],i=o["request-id"]||o["response-id"]||o.topic||o.type;if(i){let a=i;if(n)a=`${a}-${s?"send":"receive"}`;else{const u=this._topicMap.get(i)||0;a=`${a}-${u+1}`,this._topicMap.set(i,u+1)}const c={msgId:a,content:r,headers:o,timestamp:Date.now(),raw:xv({headers:o,body:r}),direction:s?"send":"receive",mocked:!!o.mocked};this.events.set(a,c),m.debug(`logged ${this.events.size} events`)}}};Wn([B({topic:[xs.SEND]})],exports.WsEventModel.prototype,"handleSendEvent",1);Wn([B({topic:[xs.RECEIVED]})],exports.WsEventModel.prototype,"handleReceiveEvent",1);exports.WsEventModel=Wn([A(Yn.type)],exports.WsEventModel);const Xi=me(),Av=Xi.debug==="true"||Xi.debug===!0,Rv="/api/system/canvas",Hu=async(t,e)=>{const s=e||Rv,r=`${exports.BASE_URL}${s}`;await exports.kosFetch(r,{method:"POST",headers:{hide:Av?"false":"true"},body:t})},Pv=Object.freeze(Object.defineProperty({__proto__:null,sendCanvasData:Hu},Symbol.toStringTag,{value:"Module"}));function Ji(t,e,s){{const r=t.filter((o,n)=>n%4!==3);return btoa(String.fromCharCode(...r))}}var kv=Object.defineProperty,Lv=Object.getOwnPropertyDescriptor,qu=(t,e,s,r)=>{for(var o=r>1?void 0:r?Lv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&kv(e,s,o),o};const zu="canvas-renderer-model";function yo(t){return typeof t.onDone=="function"}let Mr=class{constructor(t,e,s){l(this,"id");l(this,"router");l(this,"logger");l(this,"_renderer",null);l(this,"_clearOnComplete");l(this,"isStreaming",!1);l(this,"renderLoopId",null);l(this,"sendIntervalId",null);l(this,"timeoutId",null);l(this,"apiPath");l(this,"endpointName");l(this,"width",50);l(this,"height",30);l(this,"fps",10);l(this,"durationMs",null);l(this,"_onFrame",null);this.id=t,this.logger=s.logger,this.width=e.width??50,this.height=e.height??30,this.fps=e.fps??10,this.durationMs=e.durationMs??null,this.apiPath=e.apiPath??"/api/system/canvas",this.endpointName=e.endpoint}set onFrame(t){this._onFrame=t}set renderer(t){var e,s;this._renderer&&(this.stopStreaming(),(s=(e=this._renderer).dispose)==null||s.call(e)),this._renderer=t,this.isStreaming&&this.startStreaming()}setClearOnComplete(t){this._clearOnComplete=t}sendDataFrame(t,e){Hu(t,e)}checkStreaming(){if(this.isOneShotDone()||!this.isStreaming){requestAnimationFrame(()=>{const t=this.isOneShotDone();this.stopStreaming(!t)});return}}handleFrame(t){var s;const e=Ji(t);this.sendDataFrame(e,this.apiPath),(s=this._onFrame)==null||s.call(this,e)}stopStreaming(t=!0){var e,s;this.logger.debug(`stopStreaming called with clearCanvas=${t}`),this.isStreaming=!1,this.renderLoopId&&cancelAnimationFrame(this.renderLoopId),this.sendIntervalId&&clearInterval(this.sendIntervalId),this.timeoutId&&clearTimeout(this.timeoutId),(s=(e=this._renderer)==null?void 0:e.pause)==null||s.call(e),t&&(this.logger.debug("Clearing canvas..."),this.clearCanvas())}clearCanvas(){var s;const t=this.width>0?this.width:50,e=this.height>0?this.height:30;if(t>0&&e>0){const r=t*e*4,o=new Uint8ClampedArray(r);for(let i=3;i<r;i+=4)o[i]=255;const n=Ji(o);this.logger.debug(`Sending clear frame: ${t}x${e}, apiPath: ${this.apiPath}`),this.sendDataFrame(n,this.apiPath),(s=this._onFrame)==null||s.call(this,n)}}isOneShotDone(){var t,e;return yo(this._renderer)&&((e=(t=this._renderer).isOneShot)==null?void 0:e.call(t))===!0&&this._renderer.isOneShotDone}startStreaming(){var t,e,s,r;{if(!this._renderer)return;if(!this.apiPath){this.logger.error(`No endpoint configured for canvas renderer ${this.id}`);return}this.isStreaming=!0,this._renderer.reset(),(e=(t=this._renderer).play)==null||e.call(t);const o=yo(this._renderer);yo(this._renderer)&&this._renderer.onDone(()=>{var c,u,d;this.logger.debug(`Renderer completed for ${this.id}`),V("/canvas/renderer/completed",{endpoint:this.endpointName,rendererId:this.id,rendererType:(c=this._renderer)==null?void 0:c.constructor.name,timestamp:Date.now()});let a=!0;this._clearOnComplete!==void 0?a=this._clearOnComplete:a=!(((d=(u=this._renderer)==null?void 0:u.isOneShot)==null?void 0:d.call(u))??!1),this.stopStreaming(a)}),this._renderer.renderFrame(this.width,this.height);const n=(r=(s=this._renderer).readPixels)==null?void 0:r.call(s,this.width,this.height);if(n&&this._onFrame&&this.handleFrame(n),this.isOneShotDone()){requestAnimationFrame(()=>{this.stopStreaming(!1)});return}const i=()=>{var a;(a=this._renderer)==null||a.renderFrame(this.width,this.height),this.renderLoopId=requestAnimationFrame(i)};this.renderLoopId=requestAnimationFrame(i),this.sendIntervalId=setInterval(()=>{var c,u;const a=(u=(c=this._renderer)==null?void 0:c.readPixels)==null?void 0:u.call(c,this.width,this.height);a&&this._onFrame&&(this.handleFrame(a),this.checkStreaming())},1e3/this.fps),!o&&this.durationMs!=null&&(this.timeoutId=setTimeout(()=>{this.stopStreaming()},this.durationMs))}}async init(){this.logger.debug(`initializing canvas-renderer ${this.id}`)}async load(){this.logger.debug(`loading canvas-renderer ${this.id}`),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/stop`,async(t,e)=>{this.logger.debug(`HTTP stop endpoint called for ${this.endpointName}`),this.stopStreaming(),e.send({status:"OK"})}),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/start`,async(t,e)=>{this.startStreaming(),e.send({status:"OK"})})}};qu([kt({modelType:An.type})],Mr.prototype,"router",2);Mr=qu([A(zu)],Mr);const Qn=new ye({class:Mr,type:zu});class Vu{constructor({src:e}){l(this,"video");l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);l(this,"doneCallback",null);this.video=document.createElement("video"),this.video.src=e,this.video.crossOrigin="anonymous",this.video.muted=!0,this.video.loop=!1,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");this.ctx=s,this.handleEnded=this.handleEnded.bind(this),this.video.addEventListener("ended",this.handleEnded)}handleEnded(){this.doneCallback&&this.doneCallback()}reset(){this.video.pause(),this.video.currentTime=0,this.lastUpdate=performance.now()}play(){this.video.play().catch(console.warn)}pause(){this.video.pause()}renderFrame(e,s){this.canvas.width=e,this.canvas.height=s,this.video.readyState>=2&&this.ctx.drawImage(this.video,0,0,e,s)}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}onDone(e){this.doneCallback=e}dispose(){this.video.pause(),this.video.removeAttribute("src"),this.video.load(),this.video.remove(),this.video.removeEventListener("ended",this.handleEnded),this.doneCallback=null}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}}class Fv{constructor(){l(this,"canvas");l(this,"gl");l(this,"lastWidth",0);l(this,"lastHeight",0);l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("webgl");if(!e)throw new Error("WebGL not supported");this.gl=e}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e=this.lastWidth,s=this.lastHeight){const r=new Uint8Array(e*s*4);this.gl.readPixels(0,0,e,s,this.gl.RGBA,this.gl.UNSIGNED_BYTE,r);const o=new Uint8ClampedArray(r.length);for(let n=0;n<s;n++){const i=n*e*4,a=(s-1-n)*e*4;o.set(r.subarray(i,i+e*4),a)}return o}}class Nv extends Fv{constructor({speedPx:s=1}={}){super();l(this,"program");l(this,"posBuffer");l(this,"aPosition");l(this,"uMinHue");l(this,"uMaxHue");l(this,"uHueOffset");l(this,"uGridHeight");l(this,"minHue",0);l(this,"maxHue",80);l(this,"hueOffset",0);l(this,"speedPx",1);this.speedPx=s;const r=this.gl,o=`
81
81
  attribute vec2 a_position;
82
82
  void main() {
83
83
  gl_Position = vec4(a_position, 0, 1);
@@ -111,8 +111,8 @@ ${u}topics:${e}
111
111
  vec3 rgb = hslToRgb(hue, 1.0, 0.5);
112
112
  gl_FragColor = vec4(rgb, 1.0);
113
113
  }
114
- `,i=this.compileShader(r.VERTEX_SHADER,o),a=this.compileShader(r.FRAGMENT_SHADER,n);this.program=this.createProgram(i,a),this.posBuffer=r.createBuffer(),r.bindBuffer(r.ARRAY_BUFFER,this.posBuffer),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),r.STATIC_DRAW),this.aPosition=r.getAttribLocation(this.program,"a_position"),this.uMinHue=r.getUniformLocation(this.program,"minHue"),this.uMaxHue=r.getUniformLocation(this.program,"maxHue"),this.uHueOffset=r.getUniformLocation(this.program,"hueOffset"),this.uGridHeight=r.getUniformLocation(this.program,"gridHeight")}reset(){this.hueOffset=0,this.lastUpdate=performance.now()}renderFrame(s,r){const o=this.gl;if(this.canvas.width=s,this.canvas.height=r,this.shouldStep(50)){const n=this.speedPx/r;this.hueOffset=(this.hueOffset+n)%1}o.viewport(0,0,s,r),o.clear(o.COLOR_BUFFER_BIT),o.useProgram(this.program),o.enableVertexAttribArray(this.aPosition),o.bindBuffer(o.ARRAY_BUFFER,this.posBuffer),o.vertexAttribPointer(this.aPosition,2,o.FLOAT,!1,0,0),o.uniform1f(this.uMinHue,this.minHue/360),o.uniform1f(this.uMaxHue,this.maxHue/360),o.uniform1f(this.uHueOffset,this.hueOffset),o.uniform1f(this.uGridHeight,r),o.drawArrays(o.TRIANGLES,0,6)}compileShader(s,r){const o=this.gl.createShader(s);if(this.gl.shaderSource(o,r),this.gl.compileShader(o),!this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS))throw new Error(this.gl.getShaderInfoLog(o)||"Shader compile failed");return o}createProgram(s,r){const o=this.gl.createProgram();if(this.gl.attachShader(o,s),this.gl.attachShader(o,r),this.gl.linkProgram(o),!this.gl.getProgramParameter(o,this.gl.LINK_STATUS))throw new Error("Program linking failed");return o}}class dt{constructor(){l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("2d");if(!e)throw new Error("2D canvas not supported");this.ctx=e}dispose(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove()}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}}function Zn(t){class e extends t{constructor(){super(...arguments);l(this,"doneCallback",null);l(this,"oneShotDone",!1)}isOneShot(){return!0}onDone(o){this.doneCallback=o}signalDoneIfNeeded(){var o;this.oneShotDone||((o=this.doneCallback)==null||o.call(this),this.oneShotDone=!0)}resetOneShot(){this.doneCallback=null,this.oneShotDone=!1}get isOneShotDone(){return this.oneShotDone}}return e}const Pv=Zn(dt);class Rv extends Pv{constructor({colors:s=["red","yellow","green"],direction:r="horizontal",speed:o=2,loop:n=!0}={}){super();l(this,"offset",0);l(this,"speed");l(this,"colors");l(this,"direction");l(this,"loop");this.colors=s,this.direction=r,this.speed=o,this.loop=n}reset(){this.offset=0,this.lastUpdate=performance.now(),this.loop||this.resetOneShot()}renderFrame(s,r){if(!this.loop&&this.isOneShotDone)return;this.loop&&this.shouldStep(50)&&(this.offset+=this.speed);const o=this.loop?-this.offset:0,n=this.loop?s*2-this.offset:s,i=this.ctx.createLinearGradient(o,0,n,0),a=1/(this.colors.length-1);this.colors.forEach((c,u)=>{i.addColorStop(u*a,c)}),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,s,r),!this.loop&&!this.isOneShotDone&&this.signalDoneIfNeeded()}}const kv=Zn(dt);class Wu extends kv{constructor({src:s}){super();l(this,"img");l(this,"loaded",!1);this.img=new Image,this.img.src=s,this.img.crossOrigin="anonymous",this.img.onload=()=>{this.loaded=!0}}reset(){this.resetOneShot()}renderFrame(s,r){!this.loaded||this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.drawImage(this.img,0,0,s,r),this.signalDoneIfNeeded())}}class Lv extends Yu{constructor(s){super(s);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"startTime");l(this,"endTime");l(this,"completionCallback",null);this.loopConfig=s.loop??!1,this.startTime=s.startTime??0,this.endTime=s.endTime??null,this.video.removeEventListener("ended",this.handleEnded),this.video.addEventListener("ended",this.handleVideoEnd.bind(this)),this.startTime>0&&(this.video.currentTime=this.startTime),this.endTime!==null&&this.video.addEventListener("timeupdate",this.handleTimeUpdate.bind(this))}handleTimeUpdate(){this.endTime!==null&&this.video.currentTime>=this.endTime&&this.handleVideoEnd()}handleVideoEnd(){this.loopConfig===!0?(this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):(this.video.pause(),this.completionCallback&&this.completionCallback())}reset(){super.reset(),this.currentLoopCount=0,this.video.currentTime=this.startTime}onDone(s){this.completionCallback=s}isOneShot(){return this.loopConfig===!1||this.loopConfig===1}dispose(){this.video.removeEventListener("ended",this.handleVideoEnd),this.video.removeEventListener("timeupdate",this.handleTimeUpdate),this.completionCallback=null,super.dispose()}}function Fv(t){const e=t.replace("#","");if(!/^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(e))throw new Error(`Invalid hex color: ${t}`);let s,r,o;return e.length===3?(s=parseInt(e[0]+e[0],16),r=parseInt(e[1]+e[1],16),o=parseInt(e[2]+e[2],16)):(s=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),o=parseInt(e.substring(4,6),16)),{r:s,g:r,b:o}}function Qu(t){return typeof t=="string"?Fv(t):t}function Mr(t){const e=Qu(t);return`rgb(${e.r},${e.g},${e.b})`}class Nv extends dt{constructor(s={}){super();l(this,"columns",[]);l(this,"fallChance");l(this,"speed");l(this,"baseColor");l(this,"trailColors");this.speed=s.speed??1,this.fallChance=s.fallChance??.7,s.baseColor?this.baseColor=Qu(s.baseColor):this.baseColor={r:0,g:255,b:255},this.trailColors=this.calculateTrailColors()}calculateTrailColors(){const r=[];for(let o=0;o<=5;o++){const n=1-o/5*.6;r.push({r:Math.floor(this.baseColor.r*n),g:Math.floor(this.baseColor.g*n),b:Math.floor(this.baseColor.b*n)})}return r}reset(){this.columns=[],this.lastUpdate=performance.now()}renderFrame(s,r){this.columns.length!==s&&(this.columns=Array(s).fill(0).map(()=>Math.floor(Math.random()*r))),this.shouldStep(50)&&(this.columns=this.columns.map(i=>i>r+5?0:i+(Math.random()<this.fallChance?this.speed:0)));const o=this.ctx.createImageData(s,r),n=o.data;n.fill(0);for(let i=0;i<r;i++)for(let a=0;a<s;a++){const c=this.columns[a];let u=0,d=0,h=0;if(i===c)u=this.baseColor.r,d=this.baseColor.g,h=this.baseColor.b;else if(i<c&&i>c-this.trailColors.length){const p=c-i;if(p<this.trailColors.length){const y=this.trailColors[p];u=y.r,d=y.g,h=y.b}}const f=(i*s+a)*4;n[f]=u,n[f+1]=d,n[f+2]=h,n[f+3]=255}this.ctx.putImageData(o,0,0)}}class Uv{constructor(e,s){l(this,"baseRenderer");l(this,"overlayIcons",new Map);l(this,"overlayConfigs");l(this,"loadedIcons",new Set);l(this,"canvas");l(this,"ctx");l(this,"persistOverlaysOnComplete");l(this,"baseRendererCompleted",!1);l(this,"completionCallback",null);l(this,"hasSignaledCompletion",!1);this.baseRenderer=s(e.baseRenderer.type,e.baseRenderer.data),this.overlayConfigs=e.overlays,this.persistOverlaysOnComplete=e.persistOverlaysOnComplete!==!1,this.canvas=document.createElement("canvas");const r=this.canvas.getContext("2d");if(!r)throw new Error("2D canvas not supported");this.ctx=r,this.loadOverlayImages(),"onDone"in this.baseRenderer&&typeof this.baseRenderer.onDone=="function"&&this.baseRenderer.onDone(()=>{this.baseRendererCompleted=!0,!this.persistOverlaysOnComplete&&this.completionCallback&&this.completionCallback()})}async loadOverlayImages(){for(const e of this.overlayConfigs){const s=new Image;s.crossOrigin="anonymous",s.onload=()=>{this.loadedIcons.add(e.src)},s.onerror=r=>{console.error(`Failed to load overlay image: ${e.src}`,r)},s.src=e.src,this.overlayIcons.set(e.src,s)}}calculateOverlayPosition(e,s,r){let o,n;if(typeof e.position=="string")switch(e.position){case"top-left":o=0,n=0;break;case"top-center":o=(s-e.size)/2,n=0;break;case"top-right":o=s-e.size,n=0;break;case"center-left":o=0,n=(r-e.size)/2;break;case"center":o=(s-e.size)/2,n=(r-e.size)/2;break;case"center-right":o=s-e.size,n=(r-e.size)/2;break;case"bottom-left":o=0,n=r-e.size;break;case"bottom-center":o=(s-e.size)/2,n=r-e.size;break;case"bottom-right":o=s-e.size,n=r-e.size;break;default:o=0,n=0}else o=e.position.x,n=e.position.y;return e.offset&&(o+=e.offset.x||0,n+=e.offset.y||0),{x:o,y:n}}reset(){this.baseRenderer.reset(),this.baseRendererCompleted=!1,this.hasSignaledCompletion=!1}renderFrame(e,s){if(this.canvas.width=e,this.canvas.height=s,this.ctx.clearRect(0,0,e,s),this.baseRendererCompleted&&this.persistOverlaysOnComplete)this.renderOverlays(e,s);else{this.baseRenderer.renderFrame(e,s);const r=this.baseRenderer.readPixels(e,s);if(r&&r.length>0){const o=new ImageData(r,e,s);this.ctx.putImageData(o,0,0)}this.renderOverlays(e,s)}}renderOverlays(e,s){for(const r of this.overlayConfigs){if(!r.persistent&&r.persistent!==void 0)continue;const o=this.overlayIcons.get(r.src);if(!o||!this.loadedIcons.has(r.src))continue;const n=this.calculateOverlayPosition(r,e,s);this.ctx.save(),r.opacity!==void 0&&(this.ctx.globalAlpha=Math.max(0,Math.min(1,r.opacity))),this.ctx.drawImage(o,n.x,n.y,r.size,r.size),this.ctx.restore()}}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}play(){this.baseRenderer.play&&this.baseRenderer.play()}pause(){this.baseRenderer.pause&&this.baseRenderer.pause()}dispose(){this.overlayIcons.clear(),this.loadedIcons.clear(),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove(),this.baseRenderer.dispose&&this.baseRenderer.dispose()}onDone(e){this.completionCallback=e,this.hasSignaledCompletion&&e()}isOneShot(){return this.persistOverlaysOnComplete?!1:"isOneShot"in this.baseRenderer&&typeof this.baseRenderer.isOneShot=="function"?this.baseRenderer.isOneShot():!1}}class Zu extends dt{constructor(s){super();l(this,"img");l(this,"loaded",!1);l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"colorOverride");l(this,"originalSvgData",null);l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);this.img=new Image,this.img.crossOrigin="anonymous",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,this.colorOverride=s.colorOverride,this.colorOverride&&s.src.toLowerCase().includes(".svg")?this.loadAndProcessSvg(s.src):this.img.src=s.src,this.img.onload=()=>{this.loaded=!0},this.img.onerror=r=>{console.error("Failed to load image:",r)}}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(!this.loaded||this.completed)return;if(this.isPaused){this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.ctx.drawImage(this.img,0,0,s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":this.position+=d;break;case"right":this.position+=d;break;case"up":this.position+=d;break;case"down":this.position+=d;break}}this.drawScrollingImage(s,r,o,i),this.checkScrollCompletion(s,r,o,i)}drawScrollingImage(s,r,o,n){var h,f,p,y,w,E,_,k,P;const i=this.img.width/this.img.height;let a,c;((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((y=this.scrollConfig)==null?void 0:y.width)||s,c=((w=this.scrollConfig)==null?void 0:w.height)||r);let u,d;switch(o==="left"||o==="right"?(u=0,((E=this.scrollConfig)==null?void 0:E.offsetY)==="center"||((_=this.scrollConfig)==null?void 0:_.offsetY)===void 0?d=(r-c)/2:d=this.scrollConfig.offsetY):(((k=this.scrollConfig)==null?void 0:k.offsetX)==="center"||((P=this.scrollConfig)==null?void 0:P.offsetX)===void 0?u=(s-a)/2:u=this.scrollConfig.offsetX,d=0),o){case"left":{const O=s-this.position;if(O<s&&O>-a&&this.ctx.drawImage(this.img,O,d,a,c),this.loopConfig&&this.pauseDuration===0&&this.position>n){const S=O+a+n;S<s&&this.ctx.drawImage(this.img,S,d,a,c)}break}case"right":{const O=-a+this.position;if(O>-a&&O<s&&this.ctx.drawImage(this.img,O,d,a,c),this.loopConfig&&this.pauseDuration===0&&O-n-a>-a){const S=O-a-n;S<s&&this.ctx.drawImage(this.img,S,d,a,c)}break}case"up":{const O=r-this.position;if(O>-c&&O<r&&this.ctx.drawImage(this.img,u,O,a,c),this.loopConfig&&this.pauseDuration===0&&O+c+n<r){const S=O+c+n;S>-c&&this.ctx.drawImage(this.img,u,S,a,c)}break}case"down":{const O=-c+this.position;if(O>-c&&O<r&&this.ctx.drawImage(this.img,u,O,a,c),this.loopConfig&&this.pauseDuration===0&&O-n-c>-c){const S=O-c-n;S<r&&this.ctx.drawImage(this.img,u,S,a,c)}break}}}checkScrollCompletion(s,r,o,n){var h,f,p,y,w;if(!this.isPlaying)return;const i=this.img.width/this.img.height;let a,c;switch(((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((y=this.scrollConfig)==null?void 0:y.width)||s,c=((w=this.scrollConfig)==null?void 0:w.height)||r),o){case"left":case"right":this.loopConfig;break;case"up":case"down":this.loopConfig;break}let u=!1;const d=1;switch(o){case"left":u=s-this.position<-a-d;break;case"right":u=-a+this.position>s+d;break;case"up":u=r-this.position<-c-d;break;case"down":u=-c+this.position>r+d;break}u&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}async loadAndProcessSvg(s){try{const o=await(await fetch(s)).text();this.originalSvgData=o;const n=this.applySvgColorOverride(o),i=`data:image/svg+xml;base64,${btoa(n)}`;this.img.src=i}catch(r){console.error("Failed to load and process SVG:",r),this.img.src=s}}applySvgColorOverride(s){if(!this.colorOverride)return s;const r=Mr(this.colorOverride);return s.replace(/fill\s*=\s*["'][^"']*["']/gi,`fill="${r}"`).replace(/fill\s*:\s*[^;"]*/gi,`fill:${r}`).replace(/stroke\s*=\s*["'][^"']*["']/gi,`stroke="${r}"`).replace(/stroke\s*:\s*[^;"]*/gi,`stroke:${r}`)}dispose(){this.img.removeAttribute("src"),this.completionCallback=null,this.originalSvgData=null}}class jv extends dt{constructor(s){super();l(this,"text");l(this,"lines");l(this,"fontSize");l(this,"fontFamily");l(this,"lineHeight");l(this,"textColor");l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);l(this,"textWidth",0);l(this,"textHeight",0);l(this,"lineWidths",[]);l(this,"textMeasured",!1);this.text=s.text,this.lines=s.text.split(`
115
- `),this.fontSize=s.fontSize??8,this.lineHeight=s.lineHeight??this.fontSize+2,this.fontFamily=s.fontFamily??"monospace, 'Lucida Console', 'Courier New', Courier",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,s.color?this.textColor=Mr(s.color):this.textColor="rgb(255,255,255)"}measureText(){if(this.textMeasured)return;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.lineWidths=[];let s=0;for(const r of this.lines){const n=this.ctx.measureText(r).width;this.lineWidths.push(n),s=Math.max(s,n)}this.textWidth=s,this.textHeight=this.lines.length*this.lineHeight,this.textMeasured=!0}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0,this.textMeasured=!1,this.lineWidths=[]}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(this.canvas.width=s,this.canvas.height=r,this.measureText(),this.completed)return;if(this.isPaused){this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.drawStaticText(s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":case"right":case"up":case"down":this.position+=d;break}}this.drawScrollingText(s,r,o,i),this.checkScrollCompletion(s,r,o)}drawStaticText(s,r){this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";const o=this.textHeight;let n=(r-o)/2;for(let i=0;i<this.lines.length;i++){const a=this.lines[i],c=this.lineWidths[i],u=(s-c)/2,d=n+i*this.lineHeight;this.ctx.fillText(a,u,d)}}drawScrollingText(s,r,o,n){var c,u,d,h;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";let i,a;o==="left"||o==="right"?(i=0,((c=this.scrollConfig)==null?void 0:c.offsetY)==="center"||((u=this.scrollConfig)==null?void 0:u.offsetY)===void 0?a=(r-this.textHeight)/2:a=this.scrollConfig.offsetY):(((d=this.scrollConfig)==null?void 0:d.offsetX)==="center"||((h=this.scrollConfig)==null?void 0:h.offsetX)===void 0?(i=s/2,this.ctx.textAlign="center"):(i=this.scrollConfig.offsetX,this.ctx.textAlign="left"),a=0),this.drawMultiLineScrollText(o,s,r,n,i,a)}drawMultiLineScrollText(s,r,o,n,i,a){switch(s){case"left":{const c=r-this.position;if(c<r&&c>-this.textWidth&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&this.position>n){const u=c+this.textWidth+n;u<r&&this.drawTextBlock(u,a,"left")}break}case"right":{const c=-this.textWidth+this.position;if(c>-this.textWidth&&c<r&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textWidth>-this.textWidth){const u=c-this.textWidth-n;u<r&&this.drawTextBlock(u,a,"left")}break}case"up":{const c=o-this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c+this.textHeight+n<o){const u=c+this.textHeight+n;u>-this.textHeight&&this.drawTextBlock(i,u,"center")}break}case"down":{const c=-this.textHeight+this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textHeight>-this.textHeight){const u=c-this.textHeight-n;u<o&&this.drawTextBlock(i,u,"center")}break}}}drawTextBlock(s,r,o){for(let n=0;n<this.lines.length;n++){const i=this.lines[n],a=this.lineWidths[n];let c;o==="center"?c=s-a/2:c=s;const u=r+n*this.lineHeight;this.ctx.fillText(i,c,u)}}checkScrollCompletion(s,r,o){if(!this.isPlaying)return;let n=!1;const i=1;switch(o){case"left":n=s-this.position<-this.textWidth-i;break;case"right":n=-this.textWidth+this.position>s+i;break;case"up":n=r-this.position<-this.textHeight-i;break;case"down":n=-this.textHeight+this.position>r+i;break}n&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}dispose(){this.completionCallback=null}}class Bv{constructor(e){l(this,"patterns");l(this,"currentPatternIndex",0);l(this,"currentRenderer",null);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"transitionDuration");l(this,"patternOverrides");l(this,"completionCallback",null);l(this,"patternStore");l(this,"canvas");l(this,"ctx");l(this,"width",0);l(this,"height",0);this.patterns=e.patterns,this.loopConfig=e.loop??!1,this.transitionDuration=e.transitionDuration??0,this.patternOverrides=e.patternOverrides??{},this.patternStore=e.patternStore??new Map,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");if(this.ctx=s,this.patterns.length===0)throw new Error("SequenceRenderer requires at least one pattern");this.loadCurrentPattern()}loadCurrentPattern(){var n,i,a,c;const e=this.patterns[this.currentPatternIndex],s=this.patternStore.get(e);if(!s){console.warn(`Pattern "${e}" not found in store, skipping`),this.moveToNextPattern();return}this.currentRenderer&&((i=(n=this.currentRenderer).dispose)==null||i.call(n));const r=this.patternOverrides[e]??{},o={...s.data,...r};try{this.currentRenderer=Tr({mode:s.type,data:o}),this.currentRenderer&&this.isDoneAware(this.currentRenderer)&&this.currentRenderer.onDone(()=>{this.handlePatternComplete()}),this.currentRenderer&&(this.currentRenderer.reset(),(c=(a=this.currentRenderer).play)==null||c.call(a),this.width>0&&this.height>0&&this.currentRenderer.renderFrame(this.width,this.height))}catch(u){console.error(`Failed to create renderer for pattern "${e}":`,u),this.moveToNextPattern()}}isDoneAware(e){return typeof(e==null?void 0:e.onDone)=="function"}handlePatternComplete(){this.transitionDuration>0?setTimeout(()=>{this.moveToNextPattern()},this.transitionDuration):this.moveToNextPattern()}moveToNextPattern(){this.currentPatternIndex++,this.currentPatternIndex>=this.patterns.length?this.loopConfig===!0?(this.currentPatternIndex=0,this.loadCurrentPattern()):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.currentPatternIndex=0,this.loadCurrentPattern()):this.completionCallback&&this.completionCallback():this.loadCurrentPattern()}reset(){this.currentPatternIndex=0,this.currentLoopCount=0,this.loadCurrentPattern()}play(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.play)==null||s.call(e)}pause(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.pause)==null||s.call(e)}renderFrame(e,s){this.width=e,this.height=s,this.canvas.width=e,this.canvas.height=s,this.currentRenderer&&this.currentRenderer.renderFrame(e,s)}readPixels(e,s){return this.currentRenderer?this.currentRenderer.readPixels(e,s):this.ctx.getImageData(0,0,e,s).data}onDone(e){this.completionCallback=e}isOneShot(){var e,s;return this.loopConfig===!1||this.loopConfig===1?this.patterns.length===1&&this.currentRenderer?((s=(e=this.currentRenderer).isOneShot)==null?void 0:s.call(e))??!1:!0:!1}dispose(){var e,s;this.currentRenderer&&((s=(e=this.currentRenderer).dispose)==null||s.call(e)),this.completionCallback=null}setPatternStore(e){this.patternStore=e,this.patterns.length>0&&this.loadCurrentPattern()}}const Kv=Zn(dt);class Hv extends Kv{constructor(s={r:0,g:0,b:0}){super();l(this,"color");let r;s.color!==void 0?r=s.color:s.r!==void 0&&s.g!==void 0&&s.b!==void 0?r={r:s.r,g:s.g,b:s.b}:r={r:0,g:0,b:0},this.color=Mr(r)}setColor(s){this.color=Mr(s),this.resetOneShot()}reset(){this.resetOneShot()}renderFrame(s,r){this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.fillStyle=this.color,this.ctx.fillRect(0,0,s,r),this.signalDoneIfNeeded())}}class zv extends dt{constructor({minHue:s=0,maxHue:r=360,speed:o=1}={}){super();l(this,"offset",0);l(this,"minHue");l(this,"maxHue");l(this,"speed");this.minHue=s,this.maxHue=r,this.speed=o}reset(){this.offset=0,this.lastUpdate=performance.now()}hslToRgb(s,r,o){let n,i,a;if(r===0)n=i=a=o;else{const c=(h,f,p)=>(p<0&&(p+=1),p>1&&(p-=1),p<.16666666666666666?h+(f-h)*6*p:p<.5?f:p<.6666666666666666?h+(f-h)*(.6666666666666666-p)*6:h),u=o<.5?o*(1+r):o+r-o*r,d=2*o-u;n=c(d,u,s+1/3),i=c(d,u,s),a=c(d,u,s-1/3)}return[Math.round(n*255),Math.round(i*255),Math.round(a*255)]}renderFrame(s,r){this.shouldStep(50)&&(this.offset=(this.offset+this.speed)%s);const o=this.ctx.createImageData(s,r),n=o.data;let i=0;for(let a=0;a<r;a++)for(let c=0;c<s;c++){const u=(c+this.offset)%s/s,d=this.minHue/360+u*((this.maxHue-this.minHue)/360),[h,f,p]=this.hslToRgb(d,1,.5);n[i++]=h,n[i++]=f,n[i++]=p,n[i++]=255}this.ctx.putImageData(o,0,0)}}const sa=new Map;Ds(te,{register(t,e){sa.set(t,e)},execute(t,e){const s=sa.get(t);return s?new s(e):null}});$.canvas.registerRenderer("video",Lv);$.canvas.registerRenderer("video-basic",Yu);$[te].register("image-static",Wu);$[te].register("image-scrolling",Zu);const Vv=class{constructor(t){var e;return(e=t.scroll)!=null&&e.enabled?new Zu(t):new Wu(t)}};$[te].register("image",Vv);$[te].register("color",Hv);$[te].register("matrix",Nv);$[te].register("sweep",zv);$[te].register("gradient",Rv);$[te].register("drop",Av);$[te].register("sequence",Bv);$[te].register("text",jv);const Gv=class{constructor(t){const e=(s,r)=>{const o=Tr({mode:s,data:r});if(!o)throw new Error(`Failed to create renderer of type: ${s}`);return o};return new Uv(t,e)}};$[te].register("overlay",Gv);const Tr=({mode:t,data:e})=>{const s=$[te].execute(t,e);if(s)return s;throw new Error(`Unknown mode: ${t}`)};var qv=Object.defineProperty,Yv=Object.getOwnPropertyDescriptor,zt=(t,e,s,r)=>{for(var o=r>1?void 0:r?Yv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&qv(e,s,o),o};const Xu="canvas-dispatcher-model";function Wv(t){if(t=t.replace(/^#/,""),t.length===3&&(t=t.split("").map(s=>s+s).join("")),t.length!==6)return null;const e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:e&255}}let Ge=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_content",new Map);l(this,"_patterns",new Map);l(this,"_endpointRenderers");l(this,"pattern");l(this,"data");this.id=t,this.logger=s.logger,this._endpointRenderers=new Ce}addNamedEndpoint(t,e){this._endpointRenderers.getModel(t)&&this.logger.warn(`Endpoint "${t}" already exists. Overwriting.`);const s=Qn.instance(t).options({apiPath:e.apiPath,width:e.width,height:e.height,fps:e.fps,durationMs:e.durationMs??null,endpoint:t}).build();return this._endpointRenderers.addModel(s),s}addContent(t,e){this._content.has(t)&&this.logger.warn(`Content "${t}" already exists. Overwriting.`),this._content.set(t,e)}addPattern(t,e){this._patterns.has(t)&&this.logger.warn(`Pattern "${t}" already exists. Overwriting.`),this._patterns.set(t,e)}async handlePatternsPost(t,e){var o,n;const s=t.body,r=Array.isArray(s)?s:[s];if(r.some(i=>!i.id||!i.type||!i.data)){(o=e.status)==null||o.call(e,400).send({error:"Invalid pattern data"});return}for(const i of r)this._patterns.has(i.id)&&this.logger.warn(`Pattern "${i.id}" already exists. Overwriting.`),this.addPattern(i.id,i);(n=e.status)==null||n.call(e,200).send({status:"OK"})}async handlePatternApplication(t,e){var u,d,h;const s=t.params.pattern,r=t.params.endpoint,o=this._endpointRenderers.getModel(r);if(!o){(u=e.status)==null||u.call(e,404).send({error:`Endpoint "${r}" not found`});return}if(!this._patterns.has(s)){(d=e.status)==null||d.call(e,404).send({error:`Pattern "${s}" not found`});return}const n=this._patterns.get(s),i=n.type,a=t.body||{};this.data={...n.data,...a};const c=i==="sequence"?{...this.data,patternStore:this._patterns}:this.data;o.renderer=Tr({mode:i,data:c}),o.setClearOnComplete(n.clearOnComplete),o.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleColorApplication(t,e){var u,d,h;const s=t.params.color,r=Wv(s);if(!r){(u=e.status)==null||u.call(e,400).send({error:"Invalid color format"});return}const o=t.params.endpoint,n=this._endpointRenderers.getModel(o);if(!n){(d=e.status)==null||d.call(e,404).send({error:`Endpoint "${o}" not found`});return}const{r:i,b:a,g:c}=r;n.renderer=Tr({mode:"color",data:{r:i,g:c,b:a}}),n.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleEndpointCreation(t,e){var r,o;const s=t.body;if(!s.apiPath||!s.id){(r=e.status)==null||r.call(e,400).send({error:"Name and path are required"});return}this.addNamedEndpoint(s.id,s),(o=e.status)==null||o.call(e,200).send({status:"OK"})}async load(t){var s;const e=t==null?void 0:t.get(At.loader);e&&((s=e.patterns)==null||s.forEach(r=>{if(!r.id||!r.type||!r.data){this.logger.warn(`Invalid pattern data: ${JSON.stringify(r)}`);return}this.addPattern(r.id,r)}))}};zt([$e],Ge.prototype,"_endpointRenderers",2);zt([As("/api/ui/canvas/patterns")],Ge.prototype,"handlePatternsPost",1);zt([As("/api/ui/canvas/pattern/:endpoint/:pattern")],Ge.prototype,"handlePatternApplication",1);zt([As("/api/ui/canvas/color/:endpoint/:color")],Ge.prototype,"handleColorApplication",1);zt([As("/api/ui/canvas/endpoint")],Ge.prototype,"handleEndpointCreation",1);Ge=zt([A(Xu)],Ge);const At=new _e({class:Ge,type:Xu}),{URL:Xn}=ae(),{getOne:Ju}=oe.build({basePath:`${Xn}/api/device`}),_r=m.createLogger({name:"device-service",group:"Services"}),ed=async()=>{_r.debug("sending GET for device serial number");try{const t=await Ju({urlOverride:`${Xn}/api/kos/device/serialNumber`});return[void 0,t==null?void 0:t.data.serialNumber]}catch(t){if(t instanceof ge)return _r.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},td=async()=>{_r.debug("sending GET for device details");try{const t=await Ju({urlOverride:`${Xn}/api/kos/device`});return t?[void 0,t.data]:["unknownError",void 0]}catch(t){if(t instanceof ge)return _r.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},Qv=Object.freeze(Object.defineProperty({__proto__:null,getDeviceDetails:td,getSerialNumber:ed},Symbol.toStringTag,{value:"Module"}));var Zv=Object.defineProperty,Xv=Object.getOwnPropertyDescriptor,sd=(t,e,s,r)=>{for(var o=r>1?void 0:r?Xv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Zv(e,s,o),o};const rd="device-model",Jv="/kos/criticalData/changed",ew="/kos/criticalData/available";let Sr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_serialNumber");l(this,"_name");l(this,"_nodeId");this.id=t,this.logger=s.logger,this._serialNumber="unassigned",this._name="unassigned",this._nodeId="unassigned"}get serialNumber(){return this._serialNumber}get name(){return this._name}get nodeId(){return this._nodeId}get nodeType(){const[t]=this.nodeId.split("-");return t}get nodeName(){const[,t]=this.nodeId.split("-");return t}updateModel(t){this._serialNumber=t.serialNumber??"unassigned",this._name=t.name??"unassigned",this._nodeId=t.nodeId??"unassigned"}async loadDeviceData(){const[t,e]=await td();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}if(e){const{name:s,nodeId:r}=e;this.updateModel({name:s,nodeId:r,serialNumber:this.serialNumber})}}async loadSerialNumber(){const[t,e]=await ed();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}this.updateModel({serialNumber:e,name:this.name,nodeId:this.nodeId})}async handleCriticalDataChanged(){this.logger.debug(`Critical data changed for device ${this.id}`),await this.loadSerialNumber()}async init(){this.logger.debug(`initializing device ${this.id}`)}async load(){this.logger.debug(`loading device ${this.id}`),await this.loadDeviceData(),await this.loadSerialNumber()}};sd([K({topic:[Jv,ew],websocket:!0})],Sr.prototype,"handleCriticalDataChanged",1);Sr=sd([A(rd)],Sr);const Ir=new _e({class:Sr,type:rd});var tw=Object.getOwnPropertyDescriptor,sw=(t,e,s,r)=>{for(var o=r>1?void 0:r?tw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const od="network-interface-model";let ko=class{constructor(t,e,s){l(this,"id");l(this,"name");l(this,"type");l(this,"nmdevicestate");l(this,"hwaddress");l(this,"mtu");l(this,"configured");l(this,"wifi");l(this,"ethernet");l(this,"ip4settings");l(this,"category");l(this,"logger");this.id=t,this.logger=s.logger,this.name=e.name,this.type=e.type,this.nmdevicestate=e.nmdevicestate,this.hwaddress=e.hwaddress,this.mtu=e.mtu,this.configured=e.configured,this.wifi=e.wifi,this.ethernet=e.ethernet,this.ip4settings=e.ip4settings,this.category=e.category}updateModel(t){this.name=t.name,this.type=t.type,this.nmdevicestate=t.nmdevicestate,this.hwaddress=t.hwaddress,this.mtu=t.mtu,this.configured=t.configured,this.wifi=t.wifi,this.ethernet=t.ethernet,this.ip4settings=t.ip4settings,this.category=t.category}async init(){this.logger.debug(`initializing network-interface ${this.id}`)}async load(){this.logger.debug(`loading network-interface ${this.id}`)}};ko=sw([A(od)],ko);const Jn=new ye({class:ko,type:od}),{URL:rw}=ae(),{getAll:ow}=oe.build({basePath:`${rw}/api/kos/network/interfaces`}),ra=m.createLogger({name:"network-interface-service",group:"Services"}),nd=async()=>{ra.debug("sending GET for copy-logs");try{const t=await ow({});return[void 0,t==null?void 0:t.data]}catch(t){if(t instanceof ge)return ra.error(`Error fetching log file size: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},nw=Object.freeze(Object.defineProperty({__proto__:null,getNetworkInterfaces:nd},Symbol.toStringTag,{value:"Module"}));var iw=Object.defineProperty,aw=Object.getOwnPropertyDescriptor,id=(t,e,s,r)=>{for(var o=r>1?void 0:r?aw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&iw(e,s,o),o};const ad="network-interface-container-model";let Or=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t,indexMap:{byCategory:"category"}})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing network-interface-container container ${this.id}`)}async refreshInterfaces(){this.logger.debug("refreshing interfaces");const[t,e]=await nd();if(t){this.logger.error(`Error loading network interfaces: ${t}`);return}e&&e.forEach(s=>{const r=Jn.instance(s.name).forceUpdate.options(s).build();this.addModel(r)})}async load(){this.logger.debug(`loading network-interface-container container ${this.id}`),this.refreshInterfaces()}};id([$e],Or.prototype,"_models",2);Or=id([A(ad)],Or);const Is=new _e({class:Or,type:ad});Is.addRelatedModel(Jn);const{URL:cw}=ae(),{getAll:lw}=oe.build({basePath:`${cw}/api/kos/storage/devices`}),oa=m.createLogger({name:"storage-device-service",group:"Services"}),cd=async()=>{oa.debug("sending GET for storage-device");const t=await lw({});return!(t!=null&&t.data)||t.status!==200?(oa.error("Failed to retrieve storage-device data",t),[]):t.data},uw=Object.freeze(Object.defineProperty({__proto__:null,getStorageDevices:cd},Symbol.toStringTag,{value:"Module"}));var dw=Object.getOwnPropertyDescriptor,hw=(t,e,s,r)=>{for(var o=r>1?void 0:r?dw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const ld="storage-device-model";let Lo=class{constructor(t,e,s){l(this,"id");l(this,"mountDir");l(this,"removed");l(this,"vendor");l(this,"runTimeMs");l(this,"model");l(this,"nodeId");l(this,"local");l(this,"label");l(this,"syspath");l(this,"logger");this.id=t,this.logger=s.logger,this.mountDir=e.mountDir,this.removed=e.removed,this.vendor=e.vendor,this.runTimeMs=e.runTimeMs,this.model=e.model,this.nodeId=e.nodeId,this.local=e.local,this.label=e.label,this.syspath=e.syspath}updateModel(t){this.mountDir=t.mountDir,this.removed=t.removed,this.vendor=t.vendor,this.runTimeMs=t.runTimeMs,this.model=t.model,this.nodeId=t.nodeId,this.local=t.local,this.label=t.label,this.syspath=t.syspath}async init(){this.logger.debug(`initializing storage-device ${this.id}`)}async load(){this.logger.debug(`loading storage-device ${this.id}`)}};Lo=hw([kr(),A(ld)],Lo);const $r=new ye({class:Lo,type:ld});var fw=Object.defineProperty,pw=Object.getOwnPropertyDescriptor,ei=(t,e,s,r)=>{for(var o=r>1?void 0:r?pw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&fw(e,s,o),o};const ud="storage-device-container-model",gw="/kos/storage";let Os=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing storage-device-container container ${this.id}`)}get isStorageInserted(){return this.data.length>0}get volumes(){return this.data}handleStorageAvailability(t){this._models.data.filter(s=>!t.find(r=>r.id===s.id)).forEach(s=>{this.removeModel(s.id)}),t.forEach(s=>{const r=this.getModel(s.id);if(r){const o={...s,kosParentId:this.id};r.updateModel(o)}else{const o={...s,kosParentId:this.id},n=$r.instance(s.id).options(o).build();this.addModel(n)}})}async load(){this.logger.debug(`loading storage-device-container container ${this.id}`),(await cd()).forEach(e=>{if(e.deviceType!=="disk"){const s={...e,kosParentId:this.id},r=$r.instance(e.id).options(s).build();this.addModel(r)}})}};ei([$e],Os.prototype,"_models",2);ei([K({topic:gw,websocket:!0})],Os.prototype,"handleStorageAvailability",1);Os=ei([A(ud)],Os);const Pt=new _e({class:Os,type:ud});Pt.addRelatedModel($r);const{URL:ti}=ae(),{getAll:mw,postModel:yw}=oe.build({basePath:`${ti}/api/kos/update/available`}),na=m.createLogger({name:"usb-update-service",group:"Services"}),dd=async()=>{na.debug("sending GET for usb-update");const t=await mw({urlOverride:`${ti}/api/kos/update/available`});return!(t!=null&&t.data)||(t==null?void 0:t.status)!==200?(na.error("Failed to retrieve usb-update data",t),[]):t.data},hd=async(t,e,s)=>{const r=await yw({model:{manifestId:t,deviceId:e},tracker:s,urlOverride:`${ti}/api/kos/update/install`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},bw=Object.freeze(Object.defineProperty({__proto__:null,getAvailableUpdates:dd,installUpdate:hd},Symbol.toStringTag,{value:"Module"}));var vw=Object.defineProperty,ww=Object.getOwnPropertyDescriptor,fd=(t,e,s,r)=>{for(var o=r>1?void 0:r?ww(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&vw(e,s,o),o};const pd="usb-update-model";let Cr=class{constructor(t,e,s){l(this,"id");l(this,"active");l(this,"blocked");l(this,"createTime");l(this,"deviceId");l(this,"manifestId");l(this,"notes");l(this,"futureHandler");l(this,"logger");this.id=t,this.logger=s.logger,this.active=e.active,this.blocked=e.blocked,this.createTime=e.createTime,this.deviceId=e.deviceId,this.manifestId=e.manifestId,this.notes=e.notes,this.futureHandler=new Nr(this)}updateModel(t){this.active=t.active,this.blocked=t.blocked,this.createTime=t.createTime,this.deviceId=t.deviceId,this.manifestId=t.manifestId,this.notes=t.notes}reset(){this.futureHandler.removeFuture()}get future(){return this.futureHandler.future}async install(t){if(!t)throw new Error("No tracker provided");return this.logger.info(`Installing update for manifest ${this.manifestId} from device ${this.deviceId}`),hd(this.manifestId,this.deviceId,t)}async init(){this.logger.debug(`initializing usb-update ${this.id}`)}async load(){this.logger.debug(`loading usb-update ${this.id}`)}};fd([ai()],Cr.prototype,"install",1);Cr=fd([A(pd)],Cr);const si=new ye({class:Cr,type:pd});var Ew=Object.defineProperty,Mw=Object.getOwnPropertyDescriptor,Xr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Mw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Ew(e,s,o),o};const gd="usb-update-container-model";let Rt=class{constructor(t,e,s){l(this,"id");l(this,"disposer");l(this,"storageService");l(this,"_activeUpdate");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}get activeUpdate(){return this._activeUpdate}reset(){this.clearActiveUpdate()}clearActiveUpdate(){this._activeUpdate=void 0}updateActiveUpdate(t){this._activeUpdate=t}get isUsbInserted(){return this.storageService.isStorageInserted}get hasAvailableUpdates(){return this._models.data.length>0}async syncAvailableUpdates(){const t=await dd();J(()=>{const e=t.map(s=>`${s.deviceId}-${s.manifestId}`);this._models.data.filter(s=>!e.includes(s.id)).forEach(s=>this.removeModel(s.id)),t.forEach(s=>{const r=`${s.deviceId}-${s.manifestId}`,o=si.instance(r).forceUpdate.options({...s,createTime:new Date(s.createTime)}).build();this.addModel(o)}),this.data.length===1?this.updateActiveUpdate(this.data[0]):this.clearActiveUpdate()})}usbInsertedEffect(){this.isUsbInserted?this.syncAvailableUpdates():(this._models.clear(),this.clearActiveUpdate())}async init(){this.logger.debug(`initializing usb-update-container container ${this.id}`)}unload(){var t;(t=this.disposer)==null||t.call(this)}async activate(){this.logger.debug(`activating usb-update-container container ${this.id}`),await this.syncAvailableUpdates()}async load(){this.logger.debug(`loading usb-update-container container ${this.id}`)}};Xr([Lt({modelType:Pt.type})],Rt.prototype,"storageService",2);Xr([$e],Rt.prototype,"_models",2);Xr([yc({dependencies:t=>[t.isUsbInserted]})],Rt.prototype,"usbInsertedEffect",1);Rt=Xr([A(gd)],Rt);const $s=new _e({class:Rt,type:gd});$s.addRelatedModel(si);const Tw=()=>({...{[Ut.type]:{class:jl},[Ve.type]:{class:Gl,singleton:!0},...re.registration,...at.registration,...xt.registration,...vr.registration,...Ne.registration,[Yn.type]:{class:exports.WsEventModel,singleton:!0},...Ss.registration,...Gn.registration,...ur.registration}}),ri=Tw(),_w={models:ri,preloadModels:[]},ia=!0,md=t=>()=>{const e=ri;return Ic(Fo)(_s).model(xt).model(Pt).model($s).model(Ir).model(gr).model(ys).model(mr).model(kn).model(Is).model(At).model(Qn).model(ru).model(An,ia).model(Ls).model(iu,ia),Object.keys(e).forEach(s=>{const r=e[s];Sc(Fo)(s,r)}),{preload:D.model.preloadModel(t),model:D.model.register(t),companion:D.companion.register(t),legacy:D.model.registerLegacyModel(t)}},Me={};Me.core={models:md(Me)};Me.preload=D.model.preloadModel(Me);Me.model=D.model.register(Me);Me.companion=D.companion.register(Me);Me.legacy=D.model.registerLegacyModel(Me);const Fo=Me;class Sw{registerTroubleRankMapper(e){return $.propertyMapper.registerPropertyMapper(ve.TroubleRank,e),this}registerTroubleRoleMapper(e){return $.propertyMapper.registerPropertyMapper(ve.TroubleRole,e),this}registerTroubleColorMapper(e){return $.propertyMapper.registerPropertyMapper(ve.TroubleColor,e),this}registerModelLoader(e,s){$.loader.registerLoader(e,s)}registerCanvasPatternLoader(e){$.loader.registerLoader(At.loader,e)}}const Iw=async(t,e)=>{const s=kn.instance(t).options({}).build(),r=e?`${e}-`:"";return await de(s),{getState:o=>s.data[`${r}${o}`],updateState:async(o,n)=>{await s.updateState(`${r}${o}`,n)},clean:async()=>{for(const o of s.data.keys)await s.updateState(`${r}${o}`,void 0)},unsubscribe:()=>{st(s)}}},yd="kos:service:region",bd="regionId",Ow=`${yd}-${bd}`,vd=async t=>{const e=at.factory(Ow)({path:yd,attribute:bd});await de(e),e.updateProperty(t)},oi="/kos-timer-event",ni="/kos-timer-event/tick",ii="defaultTimerEnd",rs=m.createLogger({name:"timer-manager"}),$w=t=>t.updateProperty!==void 0;class wd{constructor(e,s,r){l(this,"name");l(this,"timeout");l(this,"timer");l(this,"state","inactive");l(this,"decrementValue",1);l(this,"remainingTime");l(this,"timeoutActions",new Map);this.name=e;const o=typeof s=="number"?s:s.value||60;this.timeout=o,this.state="inactive",this.remainingTime=o,$w(s)&&W(()=>{m.info(`Updating config value timer ${e} with new timeout value ${s.value}`);const n=s.value||60;this.updateTimeout(n)}),this.addTimeoutAction({name:ii}),r&&r.forEach(n=>{this.addTimeoutAction(n)})}get id(){return this.name}start(){if(this.state==="active"){rs.debug(`Timer ${this.name} already started`);return}(this.state==="inactive"||this.state==="paused")&&(this.state="active",this.timer=setInterval(()=>this.updateTimer(),1e3))}pause(){this.timer&&(rs.debug(`Pausing timer ${this.name}`),this.state="paused",clearInterval(this.timer))}restart(){this.pause(),this.remainingTime=this.timeout,this.start()}reset(){this.pause(),this.remainingTime=this.timeout,this.state="inactive"}updateTimeout(e){this.timeout=e,this.restart()}addTimeoutAction(e){const s=e.remainingTime??0;this.timeoutActions.has(s)||this.timeoutActions.set(s,[]);const r=e.name,o=this.timeoutActions.get(s).find(n=>n.name===r);o?o.action=e.action:this.timeoutActions.get(s).push(e)}removeTimeoutAction(e){for(const[s,r]of this.timeoutActions.entries()){const o=r.filter(n=>n.name!==e);o.length===0?this.timeoutActions.delete(s):this.timeoutActions.set(s,o)}}updateTimer(){if(this.remainingTime=Math.round((this.remainingTime-this.decrementValue)*100)/100,this.remainingTime<=0){this.state==="active"&&this.executeActions(0),this.pause();return}this.state==="active"&&this.executeActions(this.remainingTime)}executeActions(e){this.timeoutActions.has(e)&&this.timeoutActions.get(e).forEach(s=>{var r;rs.debug(`Executing timer action ${s.name} at ${e}`),(r=s.action)==null||r.call(s,s.name,e),this.notifyTimeoutAction(s),s.singleUse&&(rs.info(`${this.name} Removing single-use action ${s.name}`),this.removeTimeoutAction(s.name))}),this.notifyTick()}notifyTick(){G(`${ni}/${this.name}`,{name:this.name,remainingTime:this.remainingTime})}notifyTimeoutAction(e){G(oi,{name:this.name,action:e.name,remainingTime:this.remainingTime})}}const os=new Map,mt=(t,e)=>{const s=os.get(t);if(!s){rs.error(`Timer ${t} not found`);return}e(s)},Ed={createRelativeTimer(t,e,s){const r=new Date,o=Math.round((e.getTime()-r.getTime())/1e3);return this.createTimer(t,o,s)},createTimer(t,e=60,s){if(os.has(t))return os.get(t);const r=new wd(t,e,s);return os.set(t,r),r},getTimer(t){return os.get(t)},clearTimer(t){mt(t,e=>e.pause())},restartTimer(t){mt(t,e=>e.restart())},resetTimer(t){mt(t,e=>e.reset())},addTimeoutAction(t,e){mt(t,s=>s.addTimeoutAction(e))},removeTimeoutAction(t,e){mt(t,s=>s.removeTimeoutAction(e))},startTimer(t){mt(t,e=>e.start())}},Md="kos:service:region:settings",Td="timeZone",Cw=`${Md}-${Td}`,No=async t=>{const e=at.factory(Cw)({path:Md,attribute:Td});await de(e),e.updateProperty(t)},xw=t=>!t||!t.data;function ai(t={}){const{alias:e,namespace:s,abortController:r=!1,trackerPolicy:o="id"}=t;return(n,i,a)=>{n[as]=n[as]||{},e&&(n[us]=n[us]||new Map,n[us].set(i,e));const c=a.value,u=async function(...d){const h=nt();m.debug(`Calling future service ${i} with tracker ${h}`);let f,p;r&&(f=new AbortController);const y=rt.initiateFuture({tracker:h,id:Mn});s&&(y.namespace=s),m.debug(`waiting for future ${y.id} to be ready`),await de(y),m.debug(`future ${y.id} is ready`),J(()=>{m.debug(`Adding future ${y.id} to futureHandler`),this.futureHandler.addFuture(y,e)}),r&&f&&(p=W(()=>{(y.status==="CANCELLED"||y.endState===ze.Canceled)&&(m.debug(`Future ${y.id} cancelled, aborting request`),f==null||f.abort())}),f.signal.addEventListener("abort",async()=>{if(y.status!=="CANCELLED"&&y.endState!==ze.Canceled&&!y.endState){m.debug(`AbortController aborted, cancelling future ${y.id}`);try{await y.cancelFuture()}catch(E){m.error(`Failed to cancel future ${y.id}:`,E)}}},{once:!0}));const w=()=>{p&&(p(),p=void 0)};try{const E=[...d];if(r&&f){const P=E[E.length-1];P&&typeof P=="object"&&"aborted"in P?E[E.length-1]=f.signal:E.push(f.signal)}if(o==="context"){const P=E[E.length-1];if(un(P))P.$tracker=h;else{const O={[Lr]:!0,$tracker:h};E.push(O)}}else E.push(h);const _=await c.apply(this,E);m.debug(`received future response for ${h}`,_);const k=xw(_)?_:_==null?void 0:_.data;return k?(k.progress=1,m.debug("mapping future response to future model"),y.endState?m.debug(`future ${y.id} has already completed. Not updating the model`):xn(k,y)):this.futureHandler.removeFuture(e),w(),k}catch(E){if(w(),r&&(f!=null&&f.signal.aborted)){const _=new Error("Operation cancelled");throw m.debug(`Operation ${i} was cancelled`),_}throw m.error(E),E}};n[as][i]={handler:u}}}const Dw=({path:t})=>(e,s)=>{e[F]=e[F]||{},e[F][s]={modelType:Ss.type,id:`${Ss.type}-${t}`,options:{path:t},lifecycle:j.INIT}};function Aw(t){const{path:e,attribute:s}=t;return(r,o)=>{r[F]=r[F]||{},r[F][o]={modelType:Gn.type,id:`${e}-${s}`,options:{path:e,attribute:s},lifecycle:j.INIT}}}const wt=m.createLogger({name:"services",group:"Services"}),Pw=async(t,e)=>_d(t,e,`${exports.BASE_URL}/api/server/login`),_d=async(t,e,s=`${exports.BASE_URL}/api/login`)=>{const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({email:t,password:e})});if(!r.ok){const n=await r.json();throw Error(`${n==null?void 0:n.error}`)}return await r.json()},Rw=async t=>Sd(t,`${exports.BASE_URL}/api/server/startPasswordReset`,""),Sd=async(t,e=`${exports.BASE_URL}/api/startPasswordReset`,s="server")=>{const r=await exports.kosFetch(`${e}?email=${t}`,{method:"POST",destinationAddress:s});if(!r.ok)throw Error(`There was a problem reseting config; returned status ${r.status}`);return await r.json()},kw=async(t,e)=>Id(t,e,`${exports.BASE_URL}/api/server/resetPassword`),Id=async(t,e,s=`${exports.BASE_URL}/api/resetPassword`)=>{wt.debug(`resetting password with token ${t} and password ${e.replace(/./g,"*")}`);const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e})});if(wt.debug(`password reset returned status ${r.status}`),!r.ok){wt.error(`password reset failed with message ${r.statusText}`);const n=await r.json();throw Error(`${n==null?void 0:n.error}:There was a problem resetting the password.`)}return await r.json()},Lw=async(t,e,s)=>Od(t,e,s,`${exports.BASE_URL}/api/server/acceptInvite`),Od=async(t,e,s,r=`${exports.BASE_URL}/api/server/acceptInvite`)=>{wt.debug(`accepting invite with token ${t} and password ${e.replace(/./g,"*")}`);const o=await exports.kosFetch(`${r}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e,name:s})});if(wt.debug(`invitation accept returned status ${o.status}`),!o.ok){wt.error(`invite failed with message ${o.statusText}`);const i=await o.json();throw Error(`${i==null?void 0:i.error}:There was a problem accepting the invite.`)}return await o.json()};function Fw(t,e,s,r){const o=t instanceof Promise?{promise:t,abortController:e,cancelFuture:s,future:r}:t,{promise:n,abortController:i,cancelFuture:a,future:c}=o,u=n;let d=0,h="PENDING",f=!0;const p=new Set;let y;return c&&typeof c=="object"&&(y=M.autorun(()=>{const w=c.progress||0,E=c.status||"PENDING",_=!c.endState;(w!==d||E!==h||_!==f)&&(d=w,h=E,f=_,p.forEach(k=>{try{k(d,h)}catch(P){console.warn("Progress callback error:",P)}}))})),n.finally(()=>{f=!1,i!=null&&i.signal.aborted||(h="COMPLETED",p.forEach(w=>{try{w(d,h)}catch(E){console.warn("Progress callback error:",E)}})),y&&y(),p.clear()}),u.cancel=async()=>{i&&!i.signal.aborted&&i.abort(),a&&await a(),f=!1,h="CANCELLED",p.forEach(w=>{try{w(d,h)}catch(E){console.warn("Progress callback error:",E)}}),y&&y()},u.getController=()=>i,u.isCancelled=()=>(i==null?void 0:i.signal.aborted)??!1,Object.defineProperty(u,"progress",{get:()=>d,enumerable:!0}),Object.defineProperty(u,"status",{get:()=>h,enumerable:!0}),Object.defineProperty(u,"isRunning",{get:()=>f,enumerable:!0}),u.onProgressUpdate=w=>(p.add(w),w(d,h),()=>p.delete(w)),u}const Nw=Ze.keyframes`
114
+ `,i=this.compileShader(r.VERTEX_SHADER,o),a=this.compileShader(r.FRAGMENT_SHADER,n);this.program=this.createProgram(i,a),this.posBuffer=r.createBuffer(),r.bindBuffer(r.ARRAY_BUFFER,this.posBuffer),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),r.STATIC_DRAW),this.aPosition=r.getAttribLocation(this.program,"a_position"),this.uMinHue=r.getUniformLocation(this.program,"minHue"),this.uMaxHue=r.getUniformLocation(this.program,"maxHue"),this.uHueOffset=r.getUniformLocation(this.program,"hueOffset"),this.uGridHeight=r.getUniformLocation(this.program,"gridHeight")}reset(){this.hueOffset=0,this.lastUpdate=performance.now()}renderFrame(s,r){const o=this.gl;if(this.canvas.width=s,this.canvas.height=r,this.shouldStep(50)){const n=this.speedPx/r;this.hueOffset=(this.hueOffset+n)%1}o.viewport(0,0,s,r),o.clear(o.COLOR_BUFFER_BIT),o.useProgram(this.program),o.enableVertexAttribArray(this.aPosition),o.bindBuffer(o.ARRAY_BUFFER,this.posBuffer),o.vertexAttribPointer(this.aPosition,2,o.FLOAT,!1,0,0),o.uniform1f(this.uMinHue,this.minHue/360),o.uniform1f(this.uMaxHue,this.maxHue/360),o.uniform1f(this.uHueOffset,this.hueOffset),o.uniform1f(this.uGridHeight,r),o.drawArrays(o.TRIANGLES,0,6)}compileShader(s,r){const o=this.gl.createShader(s);if(this.gl.shaderSource(o,r),this.gl.compileShader(o),!this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS))throw new Error(this.gl.getShaderInfoLog(o)||"Shader compile failed");return o}createProgram(s,r){const o=this.gl.createProgram();if(this.gl.attachShader(o,s),this.gl.attachShader(o,r),this.gl.linkProgram(o),!this.gl.getProgramParameter(o,this.gl.LINK_STATUS))throw new Error("Program linking failed");return o}}class ut{constructor(){l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("2d");if(!e)throw new Error("2D canvas not supported");this.ctx=e}dispose(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove()}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}}function Zn(t){class e extends t{constructor(){super(...arguments);l(this,"doneCallback",null);l(this,"oneShotDone",!1)}isOneShot(){return!0}onDone(o){this.doneCallback=o}signalDoneIfNeeded(){var o;this.oneShotDone||((o=this.doneCallback)==null||o.call(this),this.oneShotDone=!0)}resetOneShot(){this.doneCallback=null,this.oneShotDone=!1}get isOneShotDone(){return this.oneShotDone}}return e}const Uv=Zn(ut);class jv extends Uv{constructor({colors:s=["red","yellow","green"],direction:r="horizontal",speed:o=2,loop:n=!0}={}){super();l(this,"offset",0);l(this,"speed");l(this,"colors");l(this,"direction");l(this,"loop");this.colors=s,this.direction=r,this.speed=o,this.loop=n}reset(){this.offset=0,this.lastUpdate=performance.now(),this.loop||this.resetOneShot()}renderFrame(s,r){if(!this.loop&&this.isOneShotDone)return;this.loop&&this.shouldStep(50)&&(this.offset+=this.speed);const o=this.loop?-this.offset:0,n=this.loop?s*2-this.offset:s,i=this.ctx.createLinearGradient(o,0,n,0),a=1/(this.colors.length-1);this.colors.forEach((c,u)=>{i.addColorStop(u*a,c)}),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,s,r),!this.loop&&!this.isOneShotDone&&this.signalDoneIfNeeded()}}const Bv=Zn(ut);class Gu extends Bv{constructor({src:s}){super();l(this,"img");l(this,"loaded",!1);this.img=new Image,this.img.src=s,this.img.crossOrigin="anonymous",this.img.onload=()=>{this.loaded=!0}}reset(){this.resetOneShot()}renderFrame(s,r){!this.loaded||this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.drawImage(this.img,0,0,s,r),this.signalDoneIfNeeded())}}class Kv extends Vu{constructor(s){super(s);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"startTime");l(this,"endTime");l(this,"completionCallback",null);this.loopConfig=s.loop??!1,this.startTime=s.startTime??0,this.endTime=s.endTime??null,this.video.removeEventListener("ended",this.handleEnded),this.video.addEventListener("ended",this.handleVideoEnd.bind(this)),this.startTime>0&&(this.video.currentTime=this.startTime),this.endTime!==null&&this.video.addEventListener("timeupdate",this.handleTimeUpdate.bind(this))}handleTimeUpdate(){this.endTime!==null&&this.video.currentTime>=this.endTime&&this.handleVideoEnd()}handleVideoEnd(){this.loopConfig===!0?(this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):(this.video.pause(),this.completionCallback&&this.completionCallback())}reset(){super.reset(),this.currentLoopCount=0,this.video.currentTime=this.startTime}onDone(s){this.completionCallback=s}isOneShot(){return this.loopConfig===!1||this.loopConfig===1}dispose(){this.video.removeEventListener("ended",this.handleVideoEnd),this.video.removeEventListener("timeupdate",this.handleTimeUpdate),this.completionCallback=null,super.dispose()}}function Hv(t){const e=t.replace("#","");if(!/^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(e))throw new Error(`Invalid hex color: ${t}`);let s,r,o;return e.length===3?(s=parseInt(e[0]+e[0],16),r=parseInt(e[1]+e[1],16),o=parseInt(e[2]+e[2],16)):(s=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),o=parseInt(e.substring(4,6),16)),{r:s,g:r,b:o}}function Yu(t){return typeof t=="string"?Hv(t):t}function Tr(t){const e=Yu(t);return`rgb(${e.r},${e.g},${e.b})`}class qv extends ut{constructor(s={}){super();l(this,"columns",[]);l(this,"fallChance");l(this,"speed");l(this,"baseColor");l(this,"trailColors");this.speed=s.speed??1,this.fallChance=s.fallChance??.7,s.baseColor?this.baseColor=Yu(s.baseColor):this.baseColor={r:0,g:255,b:255},this.trailColors=this.calculateTrailColors()}calculateTrailColors(){const r=[];for(let o=0;o<=5;o++){const n=1-o/5*.6;r.push({r:Math.floor(this.baseColor.r*n),g:Math.floor(this.baseColor.g*n),b:Math.floor(this.baseColor.b*n)})}return r}reset(){this.columns=[],this.lastUpdate=performance.now()}renderFrame(s,r){this.columns.length!==s&&(this.columns=Array(s).fill(0).map(()=>Math.floor(Math.random()*r))),this.shouldStep(50)&&(this.columns=this.columns.map(i=>i>r+5?0:i+(Math.random()<this.fallChance?this.speed:0)));const o=this.ctx.createImageData(s,r),n=o.data;n.fill(0);for(let i=0;i<r;i++)for(let a=0;a<s;a++){const c=this.columns[a];let u=0,d=0,h=0;if(i===c)u=this.baseColor.r,d=this.baseColor.g,h=this.baseColor.b;else if(i<c&&i>c-this.trailColors.length){const p=c-i;if(p<this.trailColors.length){const y=this.trailColors[p];u=y.r,d=y.g,h=y.b}}const f=(i*s+a)*4;n[f]=u,n[f+1]=d,n[f+2]=h,n[f+3]=255}this.ctx.putImageData(o,0,0)}}class zv{constructor(e,s){l(this,"baseRenderer");l(this,"overlayIcons",new Map);l(this,"overlayConfigs");l(this,"loadedIcons",new Set);l(this,"canvas");l(this,"ctx");l(this,"persistOverlaysOnComplete");l(this,"baseRendererCompleted",!1);l(this,"completionCallback",null);l(this,"hasSignaledCompletion",!1);this.baseRenderer=s(e.baseRenderer.type,e.baseRenderer.data),this.overlayConfigs=e.overlays,this.persistOverlaysOnComplete=e.persistOverlaysOnComplete!==!1,this.canvas=document.createElement("canvas");const r=this.canvas.getContext("2d");if(!r)throw new Error("2D canvas not supported");this.ctx=r,this.loadOverlayImages(),"onDone"in this.baseRenderer&&typeof this.baseRenderer.onDone=="function"&&this.baseRenderer.onDone(()=>{this.baseRendererCompleted=!0,!this.persistOverlaysOnComplete&&this.completionCallback&&this.completionCallback()})}async loadOverlayImages(){for(const e of this.overlayConfigs){const s=new Image;s.crossOrigin="anonymous",s.onload=()=>{this.loadedIcons.add(e.src)},s.onerror=r=>{console.error(`Failed to load overlay image: ${e.src}`,r)},s.src=e.src,this.overlayIcons.set(e.src,s)}}calculateOverlayPosition(e,s,r){let o,n;if(typeof e.position=="string")switch(e.position){case"top-left":o=0,n=0;break;case"top-center":o=(s-e.size)/2,n=0;break;case"top-right":o=s-e.size,n=0;break;case"center-left":o=0,n=(r-e.size)/2;break;case"center":o=(s-e.size)/2,n=(r-e.size)/2;break;case"center-right":o=s-e.size,n=(r-e.size)/2;break;case"bottom-left":o=0,n=r-e.size;break;case"bottom-center":o=(s-e.size)/2,n=r-e.size;break;case"bottom-right":o=s-e.size,n=r-e.size;break;default:o=0,n=0}else o=e.position.x,n=e.position.y;return e.offset&&(o+=e.offset.x||0,n+=e.offset.y||0),{x:o,y:n}}reset(){this.baseRenderer.reset(),this.baseRendererCompleted=!1,this.hasSignaledCompletion=!1}renderFrame(e,s){if(this.canvas.width=e,this.canvas.height=s,this.ctx.clearRect(0,0,e,s),this.baseRendererCompleted&&this.persistOverlaysOnComplete)this.renderOverlays(e,s);else{this.baseRenderer.renderFrame(e,s);const r=this.baseRenderer.readPixels(e,s);if(r&&r.length>0){const o=new ImageData(r,e,s);this.ctx.putImageData(o,0,0)}this.renderOverlays(e,s)}}renderOverlays(e,s){for(const r of this.overlayConfigs){if(!r.persistent&&r.persistent!==void 0)continue;const o=this.overlayIcons.get(r.src);if(!o||!this.loadedIcons.has(r.src))continue;const n=this.calculateOverlayPosition(r,e,s);this.ctx.save(),r.opacity!==void 0&&(this.ctx.globalAlpha=Math.max(0,Math.min(1,r.opacity))),this.ctx.drawImage(o,n.x,n.y,r.size,r.size),this.ctx.restore()}}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}play(){this.baseRenderer.play&&this.baseRenderer.play()}pause(){this.baseRenderer.pause&&this.baseRenderer.pause()}dispose(){this.overlayIcons.clear(),this.loadedIcons.clear(),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove(),this.baseRenderer.dispose&&this.baseRenderer.dispose()}onDone(e){this.completionCallback=e,this.hasSignaledCompletion&&e()}isOneShot(){return this.persistOverlaysOnComplete?!1:"isOneShot"in this.baseRenderer&&typeof this.baseRenderer.isOneShot=="function"?this.baseRenderer.isOneShot():!1}}class Wu extends ut{constructor(s){super();l(this,"img");l(this,"loaded",!1);l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"colorOverride");l(this,"originalSvgData",null);l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);this.img=new Image,this.img.crossOrigin="anonymous",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,this.colorOverride=s.colorOverride,this.colorOverride&&s.src.toLowerCase().includes(".svg")?this.loadAndProcessSvg(s.src):this.img.src=s.src,this.img.onload=()=>{this.loaded=!0},this.img.onerror=r=>{console.error("Failed to load image:",r)}}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(!this.loaded||this.completed)return;if(this.isPaused){this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.ctx.drawImage(this.img,0,0,s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":this.position+=d;break;case"right":this.position+=d;break;case"up":this.position+=d;break;case"down":this.position+=d;break}}this.drawScrollingImage(s,r,o,i),this.checkScrollCompletion(s,r,o,i)}drawScrollingImage(s,r,o,n){var h,f,p,y,w,E,_,k,R;const i=this.img.width/this.img.height;let a,c;((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((y=this.scrollConfig)==null?void 0:y.width)||s,c=((w=this.scrollConfig)==null?void 0:w.height)||r);let u,d;switch(o==="left"||o==="right"?(u=0,((E=this.scrollConfig)==null?void 0:E.offsetY)==="center"||((_=this.scrollConfig)==null?void 0:_.offsetY)===void 0?d=(r-c)/2:d=this.scrollConfig.offsetY):(((k=this.scrollConfig)==null?void 0:k.offsetX)==="center"||((R=this.scrollConfig)==null?void 0:R.offsetX)===void 0?u=(s-a)/2:u=this.scrollConfig.offsetX,d=0),o){case"left":{const I=s-this.position;if(I<s&&I>-a&&this.ctx.drawImage(this.img,I,d,a,c),this.loopConfig&&this.pauseDuration===0&&this.position>n){const S=I+a+n;S<s&&this.ctx.drawImage(this.img,S,d,a,c)}break}case"right":{const I=-a+this.position;if(I>-a&&I<s&&this.ctx.drawImage(this.img,I,d,a,c),this.loopConfig&&this.pauseDuration===0&&I-n-a>-a){const S=I-a-n;S<s&&this.ctx.drawImage(this.img,S,d,a,c)}break}case"up":{const I=r-this.position;if(I>-c&&I<r&&this.ctx.drawImage(this.img,u,I,a,c),this.loopConfig&&this.pauseDuration===0&&I+c+n<r){const S=I+c+n;S>-c&&this.ctx.drawImage(this.img,u,S,a,c)}break}case"down":{const I=-c+this.position;if(I>-c&&I<r&&this.ctx.drawImage(this.img,u,I,a,c),this.loopConfig&&this.pauseDuration===0&&I-n-c>-c){const S=I-c-n;S<r&&this.ctx.drawImage(this.img,u,S,a,c)}break}}}checkScrollCompletion(s,r,o,n){var h,f,p,y,w;if(!this.isPlaying)return;const i=this.img.width/this.img.height;let a,c;switch(((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((y=this.scrollConfig)==null?void 0:y.width)||s,c=((w=this.scrollConfig)==null?void 0:w.height)||r),o){case"left":case"right":this.loopConfig;break;case"up":case"down":this.loopConfig;break}let u=!1;const d=1;switch(o){case"left":u=s-this.position<-a-d;break;case"right":u=-a+this.position>s+d;break;case"up":u=r-this.position<-c-d;break;case"down":u=-c+this.position>r+d;break}u&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}async loadAndProcessSvg(s){try{const o=await(await fetch(s)).text();this.originalSvgData=o;const n=this.applySvgColorOverride(o),i=`data:image/svg+xml;base64,${btoa(n)}`;this.img.src=i}catch(r){console.error("Failed to load and process SVG:",r),this.img.src=s}}applySvgColorOverride(s){if(!this.colorOverride)return s;const r=Tr(this.colorOverride);return s.replace(/fill\s*=\s*["'][^"']*["']/gi,`fill="${r}"`).replace(/fill\s*:\s*[^;"]*/gi,`fill:${r}`).replace(/stroke\s*=\s*["'][^"']*["']/gi,`stroke="${r}"`).replace(/stroke\s*:\s*[^;"]*/gi,`stroke:${r}`)}dispose(){this.img.removeAttribute("src"),this.completionCallback=null,this.originalSvgData=null}}class Vv extends ut{constructor(s){super();l(this,"text");l(this,"lines");l(this,"fontSize");l(this,"fontFamily");l(this,"lineHeight");l(this,"textColor");l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);l(this,"textWidth",0);l(this,"textHeight",0);l(this,"lineWidths",[]);l(this,"textMeasured",!1);this.text=s.text,this.lines=s.text.split(`
115
+ `),this.fontSize=s.fontSize??8,this.lineHeight=s.lineHeight??this.fontSize+2,this.fontFamily=s.fontFamily??"monospace, 'Lucida Console', 'Courier New', Courier",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,s.color?this.textColor=Tr(s.color):this.textColor="rgb(255,255,255)"}measureText(){if(this.textMeasured)return;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.lineWidths=[];let s=0;for(const r of this.lines){const n=this.ctx.measureText(r).width;this.lineWidths.push(n),s=Math.max(s,n)}this.textWidth=s,this.textHeight=this.lines.length*this.lineHeight,this.textMeasured=!0}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0,this.textMeasured=!1,this.lineWidths=[]}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(this.canvas.width=s,this.canvas.height=r,this.measureText(),this.completed)return;if(this.isPaused){this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.drawStaticText(s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":case"right":case"up":case"down":this.position+=d;break}}this.drawScrollingText(s,r,o,i),this.checkScrollCompletion(s,r,o)}drawStaticText(s,r){this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";const o=this.textHeight;let n=(r-o)/2;for(let i=0;i<this.lines.length;i++){const a=this.lines[i],c=this.lineWidths[i],u=(s-c)/2,d=n+i*this.lineHeight;this.ctx.fillText(a,u,d)}}drawScrollingText(s,r,o,n){var c,u,d,h;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";let i,a;o==="left"||o==="right"?(i=0,((c=this.scrollConfig)==null?void 0:c.offsetY)==="center"||((u=this.scrollConfig)==null?void 0:u.offsetY)===void 0?a=(r-this.textHeight)/2:a=this.scrollConfig.offsetY):(((d=this.scrollConfig)==null?void 0:d.offsetX)==="center"||((h=this.scrollConfig)==null?void 0:h.offsetX)===void 0?(i=s/2,this.ctx.textAlign="center"):(i=this.scrollConfig.offsetX,this.ctx.textAlign="left"),a=0),this.drawMultiLineScrollText(o,s,r,n,i,a)}drawMultiLineScrollText(s,r,o,n,i,a){switch(s){case"left":{const c=r-this.position;if(c<r&&c>-this.textWidth&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&this.position>n){const u=c+this.textWidth+n;u<r&&this.drawTextBlock(u,a,"left")}break}case"right":{const c=-this.textWidth+this.position;if(c>-this.textWidth&&c<r&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textWidth>-this.textWidth){const u=c-this.textWidth-n;u<r&&this.drawTextBlock(u,a,"left")}break}case"up":{const c=o-this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c+this.textHeight+n<o){const u=c+this.textHeight+n;u>-this.textHeight&&this.drawTextBlock(i,u,"center")}break}case"down":{const c=-this.textHeight+this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textHeight>-this.textHeight){const u=c-this.textHeight-n;u<o&&this.drawTextBlock(i,u,"center")}break}}}drawTextBlock(s,r,o){for(let n=0;n<this.lines.length;n++){const i=this.lines[n],a=this.lineWidths[n];let c;o==="center"?c=s-a/2:c=s;const u=r+n*this.lineHeight;this.ctx.fillText(i,c,u)}}checkScrollCompletion(s,r,o){if(!this.isPlaying)return;let n=!1;const i=1;switch(o){case"left":n=s-this.position<-this.textWidth-i;break;case"right":n=-this.textWidth+this.position>s+i;break;case"up":n=r-this.position<-this.textHeight-i;break;case"down":n=-this.textHeight+this.position>r+i;break}n&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}dispose(){this.completionCallback=null}}class Gv{constructor(e){l(this,"patterns");l(this,"currentPatternIndex",0);l(this,"currentRenderer",null);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"transitionDuration");l(this,"patternOverrides");l(this,"completionCallback",null);l(this,"patternStore");l(this,"canvas");l(this,"ctx");l(this,"width",0);l(this,"height",0);this.patterns=e.patterns,this.loopConfig=e.loop??!1,this.transitionDuration=e.transitionDuration??0,this.patternOverrides=e.patternOverrides??{},this.patternStore=e.patternStore??new Map,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");if(this.ctx=s,this.patterns.length===0)throw new Error("SequenceRenderer requires at least one pattern");this.loadCurrentPattern()}loadCurrentPattern(){var n,i,a,c;const e=this.patterns[this.currentPatternIndex],s=this.patternStore.get(e);if(!s){console.warn(`Pattern "${e}" not found in store, skipping`),this.moveToNextPattern();return}this.currentRenderer&&((i=(n=this.currentRenderer).dispose)==null||i.call(n));const r=this.patternOverrides[e]??{},o={...s.data,...r};try{this.currentRenderer=_r({mode:s.type,data:o}),this.currentRenderer&&this.isDoneAware(this.currentRenderer)&&this.currentRenderer.onDone(()=>{this.handlePatternComplete()}),this.currentRenderer&&(this.currentRenderer.reset(),(c=(a=this.currentRenderer).play)==null||c.call(a),this.width>0&&this.height>0&&this.currentRenderer.renderFrame(this.width,this.height))}catch(u){console.error(`Failed to create renderer for pattern "${e}":`,u),this.moveToNextPattern()}}isDoneAware(e){return typeof(e==null?void 0:e.onDone)=="function"}handlePatternComplete(){this.transitionDuration>0?setTimeout(()=>{this.moveToNextPattern()},this.transitionDuration):this.moveToNextPattern()}moveToNextPattern(){this.currentPatternIndex++,this.currentPatternIndex>=this.patterns.length?this.loopConfig===!0?(this.currentPatternIndex=0,this.loadCurrentPattern()):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.currentPatternIndex=0,this.loadCurrentPattern()):this.completionCallback&&this.completionCallback():this.loadCurrentPattern()}reset(){this.currentPatternIndex=0,this.currentLoopCount=0,this.loadCurrentPattern()}play(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.play)==null||s.call(e)}pause(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.pause)==null||s.call(e)}renderFrame(e,s){this.width=e,this.height=s,this.canvas.width=e,this.canvas.height=s,this.currentRenderer&&this.currentRenderer.renderFrame(e,s)}readPixels(e,s){return this.currentRenderer?this.currentRenderer.readPixels(e,s):this.ctx.getImageData(0,0,e,s).data}onDone(e){this.completionCallback=e}isOneShot(){var e,s;return this.loopConfig===!1||this.loopConfig===1?this.patterns.length===1&&this.currentRenderer?((s=(e=this.currentRenderer).isOneShot)==null?void 0:s.call(e))??!1:!0:!1}dispose(){var e,s;this.currentRenderer&&((s=(e=this.currentRenderer).dispose)==null||s.call(e)),this.completionCallback=null}setPatternStore(e){this.patternStore=e,this.patterns.length>0&&this.loadCurrentPattern()}}const Yv=Zn(ut);class Wv extends Yv{constructor(s={r:0,g:0,b:0}){super();l(this,"color");let r;s.color!==void 0?r=s.color:s.r!==void 0&&s.g!==void 0&&s.b!==void 0?r={r:s.r,g:s.g,b:s.b}:r={r:0,g:0,b:0},this.color=Tr(r)}setColor(s){this.color=Tr(s),this.resetOneShot()}reset(){this.resetOneShot()}renderFrame(s,r){this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.fillStyle=this.color,this.ctx.fillRect(0,0,s,r),this.signalDoneIfNeeded())}}class Qv extends ut{constructor({minHue:s=0,maxHue:r=360,speed:o=1}={}){super();l(this,"offset",0);l(this,"minHue");l(this,"maxHue");l(this,"speed");this.minHue=s,this.maxHue=r,this.speed=o}reset(){this.offset=0,this.lastUpdate=performance.now()}hslToRgb(s,r,o){let n,i,a;if(r===0)n=i=a=o;else{const c=(h,f,p)=>(p<0&&(p+=1),p>1&&(p-=1),p<.16666666666666666?h+(f-h)*6*p:p<.5?f:p<.6666666666666666?h+(f-h)*(.6666666666666666-p)*6:h),u=o<.5?o*(1+r):o+r-o*r,d=2*o-u;n=c(d,u,s+1/3),i=c(d,u,s),a=c(d,u,s-1/3)}return[Math.round(n*255),Math.round(i*255),Math.round(a*255)]}renderFrame(s,r){this.shouldStep(50)&&(this.offset=(this.offset+this.speed)%s);const o=this.ctx.createImageData(s,r),n=o.data;let i=0;for(let a=0;a<r;a++)for(let c=0;c<s;c++){const u=(c+this.offset)%s/s,d=this.minHue/360+u*((this.maxHue-this.minHue)/360),[h,f,p]=this.hslToRgb(d,1,.5);n[i++]=h,n[i++]=f,n[i++]=p,n[i++]=255}this.ctx.putImageData(o,0,0)}}const ea=new Map;As(te,{register(t,e){ea.set(t,e)},execute(t,e){const s=ea.get(t);return s?new s(e):null}});$.canvas.registerRenderer("video",Kv);$.canvas.registerRenderer("video-basic",Vu);$[te].register("image-static",Gu);$[te].register("image-scrolling",Wu);const Zv=class{constructor(t){var e;return(e=t.scroll)!=null&&e.enabled?new Wu(t):new Gu(t)}};$[te].register("image",Zv);$[te].register("color",Wv);$[te].register("matrix",qv);$[te].register("sweep",Qv);$[te].register("gradient",jv);$[te].register("drop",Nv);$[te].register("sequence",Gv);$[te].register("text",Vv);const Xv=class{constructor(t){const e=(s,r)=>{const o=_r({mode:s,data:r});if(!o)throw new Error(`Failed to create renderer of type: ${s}`);return o};return new zv(t,e)}};$[te].register("overlay",Xv);const _r=({mode:t,data:e})=>{const s=$[te].execute(t,e);if(s)return s;throw new Error(`Unknown mode: ${t}`)};var Jv=Object.defineProperty,ew=Object.getOwnPropertyDescriptor,Ht=(t,e,s,r)=>{for(var o=r>1?void 0:r?ew(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Jv(e,s,o),o};const Qu="canvas-dispatcher-model";function tw(t){if(t=t.replace(/^#/,""),t.length===3&&(t=t.split("").map(s=>s+s).join("")),t.length!==6)return null;const e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:e&255}}let qe=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_content",new Map);l(this,"_patterns",new Map);l(this,"_endpointRenderers");l(this,"pattern");l(this,"data");this.id=t,this.logger=s.logger,this._endpointRenderers=new Ce}addNamedEndpoint(t,e){this._endpointRenderers.getModel(t)&&this.logger.warn(`Endpoint "${t}" already exists. Overwriting.`);const s=Qn.instance(t).options({apiPath:e.apiPath,width:e.width,height:e.height,fps:e.fps,durationMs:e.durationMs??null,endpoint:t}).build();return this._endpointRenderers.addModel(s),s}addContent(t,e){this._content.has(t)&&this.logger.warn(`Content "${t}" already exists. Overwriting.`),this._content.set(t,e)}addPattern(t,e){this._patterns.has(t)&&this.logger.warn(`Pattern "${t}" already exists. Overwriting.`),this._patterns.set(t,e)}async handlePatternsPost(t,e){var o,n;const s=t.body,r=Array.isArray(s)?s:[s];if(r.some(i=>!i.id||!i.type||!i.data)){(o=e.status)==null||o.call(e,400).send({error:"Invalid pattern data"});return}for(const i of r)this._patterns.has(i.id)&&this.logger.warn(`Pattern "${i.id}" already exists. Overwriting.`),this.addPattern(i.id,i);(n=e.status)==null||n.call(e,200).send({status:"OK"})}async handlePatternApplication(t,e){var u,d,h;const s=t.params.pattern,r=t.params.endpoint,o=this._endpointRenderers.getModel(r);if(!o){(u=e.status)==null||u.call(e,404).send({error:`Endpoint "${r}" not found`});return}if(!this._patterns.has(s)){(d=e.status)==null||d.call(e,404).send({error:`Pattern "${s}" not found`});return}const n=this._patterns.get(s),i=n.type,a=t.body||{};this.data={...n.data,...a};const c=i==="sequence"?{...this.data,patternStore:this._patterns}:this.data;o.renderer=_r({mode:i,data:c}),o.setClearOnComplete(n.clearOnComplete),o.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleColorApplication(t,e){var u,d,h;const s=t.params.color,r=tw(s);if(!r){(u=e.status)==null||u.call(e,400).send({error:"Invalid color format"});return}const o=t.params.endpoint,n=this._endpointRenderers.getModel(o);if(!n){(d=e.status)==null||d.call(e,404).send({error:`Endpoint "${o}" not found`});return}const{r:i,b:a,g:c}=r;n.renderer=_r({mode:"color",data:{r:i,g:c,b:a}}),n.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleEndpointCreation(t,e){var r,o;const s=t.body;if(!s.apiPath||!s.id){(r=e.status)==null||r.call(e,400).send({error:"Name and path are required"});return}this.addNamedEndpoint(s.id,s),(o=e.status)==null||o.call(e,200).send({status:"OK"})}async load(t){var s;const e=t==null?void 0:t.get(xt.loader);e&&((s=e.patterns)==null||s.forEach(r=>{if(!r.id||!r.type||!r.data){this.logger.warn(`Invalid pattern data: ${JSON.stringify(r)}`);return}this.addPattern(r.id,r)}))}};Ht([$e],qe.prototype,"_endpointRenderers",2);Ht([Rs("/api/ui/canvas/patterns")],qe.prototype,"handlePatternsPost",1);Ht([Rs("/api/ui/canvas/pattern/:endpoint/:pattern")],qe.prototype,"handlePatternApplication",1);Ht([Rs("/api/ui/canvas/color/:endpoint/:color")],qe.prototype,"handleColorApplication",1);Ht([Rs("/api/ui/canvas/endpoint")],qe.prototype,"handleEndpointCreation",1);qe=Ht([A(Qu)],qe);const xt=new _e({class:qe,type:Qu}),{URL:Xn}=ae(),{getOne:Zu}=oe.build({basePath:`${Xn}/api/device`}),Sr=m.createLogger({name:"device-service",group:"Services"}),Xu=async()=>{Sr.debug("sending GET for device serial number");try{const t=await Zu({urlOverride:`${Xn}/api/kos/device/serialNumber`});return[void 0,t==null?void 0:t.data.serialNumber]}catch(t){if(t instanceof ge)return Sr.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},Ju=async()=>{Sr.debug("sending GET for device details");try{const t=await Zu({urlOverride:`${Xn}/api/kos/device`});return t?[void 0,t.data]:["unknownError",void 0]}catch(t){if(t instanceof ge)return Sr.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},sw=Object.freeze(Object.defineProperty({__proto__:null,getDeviceDetails:Ju,getSerialNumber:Xu},Symbol.toStringTag,{value:"Module"}));var rw=Object.defineProperty,ow=Object.getOwnPropertyDescriptor,ed=(t,e,s,r)=>{for(var o=r>1?void 0:r?ow(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&rw(e,s,o),o};const td="device-model",nw="/kos/criticalData/changed",iw="/kos/criticalData/available";let Or=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_serialNumber");l(this,"_name");l(this,"_nodeId");this.id=t,this.logger=s.logger,this._serialNumber="unassigned",this._name="unassigned",this._nodeId="unassigned"}get serialNumber(){return this._serialNumber}get name(){return this._name}get nodeId(){return this._nodeId}get nodeType(){const[t]=this.nodeId.split("-");return t}get nodeName(){const[,t]=this.nodeId.split("-");return t}updateModel(t){this._serialNumber=t.serialNumber??"unassigned",this._name=t.name??"unassigned",this._nodeId=t.nodeId??"unassigned"}async loadDeviceData(){const[t,e]=await Ju();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}if(e){const{name:s,nodeId:r}=e;this.updateModel({name:s,nodeId:r,serialNumber:this.serialNumber})}}async loadSerialNumber(){const[t,e]=await Xu();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}this.updateModel({serialNumber:e,name:this.name,nodeId:this.nodeId})}async handleCriticalDataChanged(){this.logger.debug(`Critical data changed for device ${this.id}`),await this.loadSerialNumber()}async init(){this.logger.debug(`initializing device ${this.id}`)}async load(){this.logger.debug(`loading device ${this.id}`),await this.loadDeviceData(),await this.loadSerialNumber()}};ed([B({topic:[nw,iw],websocket:!0})],Or.prototype,"handleCriticalDataChanged",1);Or=ed([A(td)],Or);const Ir=new _e({class:Or,type:td});var aw=Object.getOwnPropertyDescriptor,cw=(t,e,s,r)=>{for(var o=r>1?void 0:r?aw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const sd="network-interface-model";let ko=class{constructor(t,e,s){l(this,"id");l(this,"name");l(this,"type");l(this,"nmdevicestate");l(this,"hwaddress");l(this,"mtu");l(this,"configured");l(this,"wifi");l(this,"ethernet");l(this,"ip4settings");l(this,"category");l(this,"logger");this.id=t,this.logger=s.logger,this.name=e.name,this.type=e.type,this.nmdevicestate=e.nmdevicestate,this.hwaddress=e.hwaddress,this.mtu=e.mtu,this.configured=e.configured,this.wifi=e.wifi,this.ethernet=e.ethernet,this.ip4settings=e.ip4settings,this.category=e.category}updateModel(t){this.name=t.name,this.type=t.type,this.nmdevicestate=t.nmdevicestate,this.hwaddress=t.hwaddress,this.mtu=t.mtu,this.configured=t.configured,this.wifi=t.wifi,this.ethernet=t.ethernet,this.ip4settings=t.ip4settings,this.category=t.category}async init(){this.logger.debug(`initializing network-interface ${this.id}`)}async load(){this.logger.debug(`loading network-interface ${this.id}`)}};ko=cw([A(sd)],ko);const Jn=new ye({class:ko,type:sd}),{URL:lw}=ae(),{getAll:uw}=oe.build({basePath:`${lw}/api/kos/network/interfaces`}),ta=m.createLogger({name:"network-interface-service",group:"Services"}),rd=async()=>{ta.debug("sending GET for copy-logs");try{const t=await uw({});return[void 0,t==null?void 0:t.data]}catch(t){if(t instanceof ge)return ta.error(`Error fetching log file size: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},dw=Object.freeze(Object.defineProperty({__proto__:null,getNetworkInterfaces:rd},Symbol.toStringTag,{value:"Module"}));var hw=Object.defineProperty,fw=Object.getOwnPropertyDescriptor,od=(t,e,s,r)=>{for(var o=r>1?void 0:r?fw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&hw(e,s,o),o};const nd="network-interface-container-model";let $r=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t,indexMap:{byCategory:"category"}})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing network-interface-container container ${this.id}`)}async refreshInterfaces(){this.logger.debug("refreshing interfaces");const[t,e]=await rd();if(t){this.logger.error(`Error loading network interfaces: ${t}`);return}e&&e.forEach(s=>{const r=Jn.instance(s.name).forceUpdate.options(s).build();this.addModel(r)})}async load(){this.logger.debug(`loading network-interface-container container ${this.id}`),this.refreshInterfaces()}};od([$e],$r.prototype,"_models",2);$r=od([A(nd)],$r);const Is=new _e({class:$r,type:nd});Is.addRelatedModel(Jn);const{URL:pw}=ae(),{getAll:gw}=oe.build({basePath:`${pw}/api/kos/storage/devices`}),sa=m.createLogger({name:"storage-device-service",group:"Services"}),id=async()=>{sa.debug("sending GET for storage-device");const t=await gw({});return!(t!=null&&t.data)||t.status!==200?(sa.error("Failed to retrieve storage-device data",t),[]):t.data},mw=Object.freeze(Object.defineProperty({__proto__:null,getStorageDevices:id},Symbol.toStringTag,{value:"Module"}));var yw=Object.getOwnPropertyDescriptor,bw=(t,e,s,r)=>{for(var o=r>1?void 0:r?yw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const ad="storage-device-model";let Lo=class{constructor(t,e,s){l(this,"id");l(this,"mountDir");l(this,"removed");l(this,"vendor");l(this,"runTimeMs");l(this,"model");l(this,"nodeId");l(this,"local");l(this,"label");l(this,"syspath");l(this,"logger");this.id=t,this.logger=s.logger,this.mountDir=e.mountDir,this.removed=e.removed,this.vendor=e.vendor,this.runTimeMs=e.runTimeMs,this.model=e.model,this.nodeId=e.nodeId,this.local=e.local,this.label=e.label,this.syspath=e.syspath}updateModel(t){this.mountDir=t.mountDir,this.removed=t.removed,this.vendor=t.vendor,this.runTimeMs=t.runTimeMs,this.model=t.model,this.nodeId=t.nodeId,this.local=t.local,this.label=t.label,this.syspath=t.syspath}async init(){this.logger.debug(`initializing storage-device ${this.id}`)}async load(){this.logger.debug(`loading storage-device ${this.id}`)}};Lo=bw([Lr(),A(ad)],Lo);const Cr=new ye({class:Lo,type:ad});var vw=Object.defineProperty,ww=Object.getOwnPropertyDescriptor,ei=(t,e,s,r)=>{for(var o=r>1?void 0:r?ww(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&vw(e,s,o),o};const cd="storage-device-container-model",Ew="/kos/storage";let $s=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing storage-device-container container ${this.id}`)}get isStorageInserted(){return this.data.length>0}get volumes(){return this.data}handleStorageAvailability(t){this._models.data.filter(s=>!t.find(r=>r.id===s.id)).forEach(s=>{this.removeModel(s.id)}),t.forEach(s=>{const r=this.getModel(s.id);if(r){const o={...s,kosParentId:this.id};r.updateModel(o)}else{const o={...s,kosParentId:this.id},n=Cr.instance(s.id).options(o).build();this.addModel(n)}})}async load(){this.logger.debug(`loading storage-device-container container ${this.id}`),(await id()).forEach(e=>{if(e.deviceType!=="disk"){const s={...e,kosParentId:this.id},r=Cr.instance(e.id).options(s).build();this.addModel(r)}})}};ei([$e],$s.prototype,"_models",2);ei([B({topic:Ew,websocket:!0})],$s.prototype,"handleStorageAvailability",1);$s=ei([A(cd)],$s);const At=new _e({class:$s,type:cd});At.addRelatedModel(Cr);const{URL:ti}=ae(),{getAll:Mw,postModel:Tw}=oe.build({basePath:`${ti}/api/kos/update/available`}),ra=m.createLogger({name:"usb-update-service",group:"Services"}),ld=async()=>{ra.debug("sending GET for usb-update");const t=await Mw({urlOverride:`${ti}/api/kos/update/available`});return!(t!=null&&t.data)||(t==null?void 0:t.status)!==200?(ra.error("Failed to retrieve usb-update data",t),[]):t.data},ud=async(t,e,s)=>{const r=await Tw({model:{manifestId:t,deviceId:e},tracker:s,urlOverride:`${ti}/api/kos/update/install`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},_w=Object.freeze(Object.defineProperty({__proto__:null,getAvailableUpdates:ld,installUpdate:ud},Symbol.toStringTag,{value:"Module"}));var Sw=Object.defineProperty,Ow=Object.getOwnPropertyDescriptor,dd=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ow(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Sw(e,s,o),o};const hd="usb-update-model";let Dr=class{constructor(t,e,s){l(this,"id");l(this,"active");l(this,"blocked");l(this,"createTime");l(this,"deviceId");l(this,"manifestId");l(this,"notes");l(this,"futureHandler");l(this,"logger");this.id=t,this.logger=s.logger,this.active=e.active,this.blocked=e.blocked,this.createTime=e.createTime,this.deviceId=e.deviceId,this.manifestId=e.manifestId,this.notes=e.notes,this.futureHandler=new Ur(this)}updateModel(t){this.active=t.active,this.blocked=t.blocked,this.createTime=t.createTime,this.deviceId=t.deviceId,this.manifestId=t.manifestId,this.notes=t.notes}reset(){this.futureHandler.removeFuture()}get future(){return this.futureHandler.future}async install(t){if(!t)throw new Error("No tracker provided");return this.logger.info(`Installing update for manifest ${this.manifestId} from device ${this.deviceId}`),ud(this.manifestId,this.deviceId,t)}async init(){this.logger.debug(`initializing usb-update ${this.id}`)}async load(){this.logger.debug(`loading usb-update ${this.id}`)}};dd([ai()],Dr.prototype,"install",1);Dr=dd([A(hd)],Dr);const si=new ye({class:Dr,type:hd});var Iw=Object.defineProperty,$w=Object.getOwnPropertyDescriptor,Jr=(t,e,s,r)=>{for(var o=r>1?void 0:r?$w(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Iw(e,s,o),o};const fd="usb-update-container-model";let Rt=class{constructor(t,e,s){l(this,"id");l(this,"disposer");l(this,"storageService");l(this,"_activeUpdate");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Ce({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}get activeUpdate(){return this._activeUpdate}reset(){this.clearActiveUpdate()}clearActiveUpdate(){this._activeUpdate=void 0}updateActiveUpdate(t){this._activeUpdate=t}get isUsbInserted(){return this.storageService.isStorageInserted}get hasAvailableUpdates(){return this._models.data.length>0}async syncAvailableUpdates(){const t=await ld();X(()=>{const e=t.map(s=>`${s.deviceId}-${s.manifestId}`);this._models.data.filter(s=>!e.includes(s.id)).forEach(s=>this.removeModel(s.id)),t.forEach(s=>{const r=`${s.deviceId}-${s.manifestId}`,o=si.instance(r).forceUpdate.options({...s,createTime:new Date(s.createTime)}).build();this.addModel(o)}),this.data.length===1?this.updateActiveUpdate(this.data[0]):this.clearActiveUpdate()})}usbInsertedEffect(){this.isUsbInserted?this.syncAvailableUpdates():(this._models.clear(),this.clearActiveUpdate())}async init(){this.logger.debug(`initializing usb-update-container container ${this.id}`)}unload(){var t;(t=this.disposer)==null||t.call(this)}async activate(){this.logger.debug(`activating usb-update-container container ${this.id}`),await this.syncAvailableUpdates()}async load(){this.logger.debug(`loading usb-update-container container ${this.id}`)}};Jr([kt({modelType:At.type})],Rt.prototype,"storageService",2);Jr([$e],Rt.prototype,"_models",2);Jr([gc({dependencies:t=>[t.isUsbInserted]})],Rt.prototype,"usbInsertedEffect",1);Rt=Jr([A(fd)],Rt);const Cs=new _e({class:Rt,type:fd});Cs.addRelatedModel(si);const Cw=()=>({...{[Nt.type]:{class:Nl},[He.type]:{class:ql,singleton:!0},...re.registration,...it.registration,...Ct.registration,...wr.registration,...Fe.registration,[Yn.type]:{class:exports.WsEventModel,singleton:!0},...Os.registration,...Vn.registration,...dr.registration}}),ri=Cw(),Dw={models:ri,preloadModels:[]},oa=!0,pd=t=>()=>{const e=ri;return _c(Fo)(Ss).model(Ct).model(At).model(Cs).model(Ir).model(mr).model(bs).model(yr).model(kn).model(Is).model(xt).model(Qn).model(tu).model(An,oa).model(Fs).model(ou,oa),Object.keys(e).forEach(s=>{const r=e[s];Tc(Fo)(s,r)}),{preload:x.model.preloadModel(t),model:x.model.register(t),companion:x.companion.register(t),legacy:x.model.registerLegacyModel(t)}},Me={};Me.core={models:pd(Me)};Me.preload=x.model.preloadModel(Me);Me.model=x.model.register(Me);Me.companion=x.companion.register(Me);Me.legacy=x.model.registerLegacyModel(Me);const Fo=Me;class xw{registerTroubleRankMapper(e){return $.propertyMapper.registerPropertyMapper(ve.TroubleRank,e),this}registerTroubleRoleMapper(e){return $.propertyMapper.registerPropertyMapper(ve.TroubleRole,e),this}registerTroubleColorMapper(e){return $.propertyMapper.registerPropertyMapper(ve.TroubleColor,e),this}registerModelLoader(e,s){$.loader.registerLoader(e,s)}registerCanvasPatternLoader(e){$.loader.registerLoader(xt.loader,e)}}const Aw=async(t,e)=>{const s=kn.instance(t).options({}).build(),r=e?`${e}-`:"";return await de(s),{getState:o=>s.data[`${r}${o}`],updateState:async(o,n)=>{await s.updateState(`${r}${o}`,n)},clean:async()=>{for(const o of s.data.keys)await s.updateState(`${r}${o}`,void 0)},unsubscribe:()=>{tt(s)}}},gd="kos:service:region",md="regionId",Rw=`${gd}-${md}`,yd=async t=>{const e=it.factory(Rw)({path:gd,attribute:md});await de(e),e.updateProperty(t)},oi="/kos-timer-event",ni="/kos-timer-event/tick",ii="defaultTimerEnd",os=m.createLogger({name:"timer-manager"}),Pw=t=>t.updateProperty!==void 0;class bd{constructor(e,s,r){l(this,"name");l(this,"timeout");l(this,"timer");l(this,"state","inactive");l(this,"decrementValue",1);l(this,"remainingTime");l(this,"timeoutActions",new Map);this.name=e;const o=typeof s=="number"?s:s.value||60;this.timeout=o,this.state="inactive",this.remainingTime=o,Pw(s)&&W(()=>{m.info(`Updating config value timer ${e} with new timeout value ${s.value}`);const n=s.value||60;this.updateTimeout(n)}),this.addTimeoutAction({name:ii}),r&&r.forEach(n=>{this.addTimeoutAction(n)})}get id(){return this.name}start(){if(this.state==="active"){os.debug(`Timer ${this.name} already started`);return}(this.state==="inactive"||this.state==="paused")&&(this.state="active",this.timer=setInterval(()=>this.updateTimer(),1e3))}pause(){this.timer&&(os.debug(`Pausing timer ${this.name}`),this.state="paused",clearInterval(this.timer))}restart(){this.pause(),this.remainingTime=this.timeout,this.start()}reset(){this.pause(),this.remainingTime=this.timeout,this.state="inactive"}updateTimeout(e){this.timeout=e,this.restart()}addTimeoutAction(e){const s=e.remainingTime??0;this.timeoutActions.has(s)||this.timeoutActions.set(s,[]);const r=e.name,o=this.timeoutActions.get(s).find(n=>n.name===r);o?o.action=e.action:this.timeoutActions.get(s).push(e)}removeTimeoutAction(e){for(const[s,r]of this.timeoutActions.entries()){const o=r.filter(n=>n.name!==e);o.length===0?this.timeoutActions.delete(s):this.timeoutActions.set(s,o)}}updateTimer(){if(this.remainingTime=Math.round((this.remainingTime-this.decrementValue)*100)/100,this.remainingTime<=0){this.state==="active"&&this.executeActions(0),this.pause();return}this.state==="active"&&this.executeActions(this.remainingTime)}executeActions(e){this.timeoutActions.has(e)&&this.timeoutActions.get(e).forEach(s=>{var r;os.debug(`Executing timer action ${s.name} at ${e}`),(r=s.action)==null||r.call(s,s.name,e),this.notifyTimeoutAction(s),s.singleUse&&(os.info(`${this.name} Removing single-use action ${s.name}`),this.removeTimeoutAction(s.name))}),this.notifyTick()}notifyTick(){V(`${ni}/${this.name}`,{name:this.name,remainingTime:this.remainingTime})}notifyTimeoutAction(e){V(oi,{name:this.name,action:e.name,remainingTime:this.remainingTime})}}const ns=new Map,gt=(t,e)=>{const s=ns.get(t);if(!s){os.error(`Timer ${t} not found`);return}e(s)},vd={createRelativeTimer(t,e,s){const r=new Date,o=Math.round((e.getTime()-r.getTime())/1e3);return this.createTimer(t,o,s)},createTimer(t,e=60,s){if(ns.has(t))return ns.get(t);const r=new bd(t,e,s);return ns.set(t,r),r},getTimer(t){return ns.get(t)},clearTimer(t){gt(t,e=>e.pause())},restartTimer(t){gt(t,e=>e.restart())},resetTimer(t){gt(t,e=>e.reset())},addTimeoutAction(t,e){gt(t,s=>s.addTimeoutAction(e))},removeTimeoutAction(t,e){gt(t,s=>s.removeTimeoutAction(e))},startTimer(t){gt(t,e=>e.start())}},wd="kos:service:region:settings",Ed="timeZone",kw=`${wd}-${Ed}`,No=async t=>{const e=it.factory(kw)({path:wd,attribute:Ed});await de(e),e.updateProperty(t)},Lw=t=>!t||!t.data;function ai(t={}){const{alias:e,namespace:s,abortController:r=!1,trackerPolicy:o="id"}=t;return(n,i,a)=>{n[cs]=n[cs]||{},e&&(n[ds]=n[ds]||new Map,n[ds].set(i,e));const c=a.value,u=async function(...d){const h=ot();m.debug(`Calling future service ${i} with tracker ${h}`);let f,p;r&&(f=new AbortController);const y=st.initiateFuture({tracker:h,id:Mn});s&&(y.namespace=s),m.debug(`waiting for future ${y.id} to be ready`),await de(y),m.debug(`future ${y.id} is ready`),X(()=>{m.debug(`Adding future ${y.id} to futureHandler`),this.futureHandler.addFuture(y,e)}),r&&f&&(p=W(()=>{(y.status==="CANCELLED"||y.endState===Ke.Canceled)&&(m.debug(`Future ${y.id} cancelled, aborting request`),f==null||f.abort())}),f.signal.addEventListener("abort",async()=>{if(y.status!=="CANCELLED"&&y.endState!==Ke.Canceled&&!y.endState){m.debug(`AbortController aborted, cancelling future ${y.id}`);try{await y.cancelFuture()}catch(E){m.error(`Failed to cancel future ${y.id}:`,E)}}},{once:!0}));const w=()=>{p&&(p(),p=void 0)};try{const E=[...d];if(r&&f){const R=E[E.length-1];R&&typeof R=="object"&&"aborted"in R?E[E.length-1]=f.signal:E.push(f.signal)}if(o==="context"){const R=E[E.length-1];if(un(R))R.$tracker=h;else{const I={[Fr]:!0,$tracker:h};E.push(I)}}else E.push(h);const _=await c.apply(this,E);m.debug(`received future response for ${h}`,_);const k=Lw(_)?_:_==null?void 0:_.data;return k?(k.progress=1,m.debug("mapping future response to future model"),y.endState?m.debug(`future ${y.id} has already completed. Not updating the model`):Dn(k,y)):this.futureHandler.removeFuture(e),w(),k}catch(E){if(w(),r&&(f!=null&&f.signal.aborted)){const _=new Error("Operation cancelled");throw m.debug(`Operation ${i} was cancelled`),_}throw m.error(E),E}};n[cs][i]={handler:u}}}const Fw=({path:t})=>(e,s)=>{e[F]=e[F]||{},e[F][s]={modelType:Os.type,id:`${Os.type}-${t}`,options:{path:t},lifecycle:U.INIT}};function Nw(t){const{path:e,attribute:s}=t;return(r,o)=>{r[F]=r[F]||{},r[F][o]={modelType:Vn.type,id:`${e}-${s}`,options:{path:e,attribute:s},lifecycle:U.INIT}}}const vt=m.createLogger({name:"services",group:"Services"}),Uw=async(t,e)=>Md(t,e,`${exports.BASE_URL}/api/server/login`),Md=async(t,e,s=`${exports.BASE_URL}/api/login`)=>{const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({email:t,password:e})});if(!r.ok){const n=await r.json();throw Error(`${n==null?void 0:n.error}`)}return await r.json()},jw=async t=>Td(t,`${exports.BASE_URL}/api/server/startPasswordReset`,""),Td=async(t,e=`${exports.BASE_URL}/api/startPasswordReset`,s="server")=>{const r=await exports.kosFetch(`${e}?email=${t}`,{method:"POST",destinationAddress:s});if(!r.ok)throw Error(`There was a problem reseting config; returned status ${r.status}`);return await r.json()},Bw=async(t,e)=>_d(t,e,`${exports.BASE_URL}/api/server/resetPassword`),_d=async(t,e,s=`${exports.BASE_URL}/api/resetPassword`)=>{vt.debug(`resetting password with token ${t} and password ${e.replace(/./g,"*")}`);const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e})});if(vt.debug(`password reset returned status ${r.status}`),!r.ok){vt.error(`password reset failed with message ${r.statusText}`);const n=await r.json();throw Error(`${n==null?void 0:n.error}:There was a problem resetting the password.`)}return await r.json()},Kw=async(t,e,s)=>Sd(t,e,s,`${exports.BASE_URL}/api/server/acceptInvite`),Sd=async(t,e,s,r=`${exports.BASE_URL}/api/server/acceptInvite`)=>{vt.debug(`accepting invite with token ${t} and password ${e.replace(/./g,"*")}`);const o=await exports.kosFetch(`${r}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e,name:s})});if(vt.debug(`invitation accept returned status ${o.status}`),!o.ok){vt.error(`invite failed with message ${o.statusText}`);const i=await o.json();throw Error(`${i==null?void 0:i.error}:There was a problem accepting the invite.`)}return await o.json()};function Hw(t,e,s,r){const o=t instanceof Promise?{promise:t,abortController:e,cancelFuture:s,future:r}:t,{promise:n,abortController:i,cancelFuture:a,future:c}=o,u=n;let d=0,h="PENDING",f=!0;const p=new Set;let y;return c&&typeof c=="object"&&(y=M.autorun(()=>{const w=c.progress||0,E=c.status||"PENDING",_=!c.endState;(w!==d||E!==h||_!==f)&&(d=w,h=E,f=_,p.forEach(k=>{try{k(d,h)}catch(R){console.warn("Progress callback error:",R)}}))})),n.finally(()=>{f=!1,i!=null&&i.signal.aborted||(h="COMPLETED",p.forEach(w=>{try{w(d,h)}catch(E){console.warn("Progress callback error:",E)}})),y&&y(),p.clear()}),u.cancel=async()=>{i&&!i.signal.aborted&&i.abort(),a&&await a(),f=!1,h="CANCELLED",p.forEach(w=>{try{w(d,h)}catch(E){console.warn("Progress callback error:",E)}}),y&&y()},u.getController=()=>i,u.isCancelled=()=>(i==null?void 0:i.signal.aborted)??!1,Object.defineProperty(u,"progress",{get:()=>d,enumerable:!0}),Object.defineProperty(u,"status",{get:()=>h,enumerable:!0}),Object.defineProperty(u,"isRunning",{get:()=>f,enumerable:!0}),u.onProgressUpdate=w=>(p.add(w),w(d,h),()=>p.delete(w)),u}const qw=We.keyframes`
116
116
  0% {
117
117
  left: -90px;
118
118
  color: #eee;
@@ -124,13 +124,13 @@ ${u}topics:${e}
124
124
  left: 90px;
125
125
  color: #eee;
126
126
  }
127
- `,Uw=Ze.css`
127
+ `,zw=We.css`
128
128
  font-size: 100px;
129
129
  margin-top: -80px;
130
130
  position: relative;
131
- animation: ${Nw} ease-in-out infinite alternate;
131
+ animation: ${qw} ease-in-out infinite alternate;
132
132
  animation-duration: 1.2s;
133
- `,jw=({children:t})=>ua.createPortal(t,document.body);function $d({message:t="Wait a moment while we load your app.",theme:e="light"}){return T.jsx(jw,{children:T.jsxs(Bw,{theme:e,children:[t,T.jsx("div",{css:Uw,children:"."})]})})}const Bw=Ko.div`
133
+ `,Vw=({children:t})=>ca.createPortal(t,document.body);function Od({message:t="Wait a moment while we load your app.",theme:e="light"}){return T.jsx(Vw,{children:T.jsxs(Gw,{theme:e,children:[t,T.jsx("div",{css:zw,children:"."})]})})}const Gw=Ko.div`
134
134
  padding-inline: 20px;
135
135
  width: 100%;
136
136
  height: 100vh;
@@ -144,31 +144,31 @@ ${u}topics:${e}
144
144
  left: 0;
145
145
  color: ${({theme:t})=>t==="light"?"black":"white"};
146
146
  z-index: 10000;
147
- `;class Cd extends g.Component{constructor(e){super(e),this.state={error:null,errorInfo:null}}componentDidCatch(e,s){this.setState({error:e,errorInfo:s})}render(){return this.state.errorInfo?this.props.fallback||T.jsxs("div",{children:[T.jsx("h2",{children:"Something went wrong."}),T.jsxs("details",{style:{whiteSpace:"pre-wrap"},children:[this.state.error&&this.state.error.toString(),T.jsx("br",{}),this.state.errorInfo.componentStack]})]}):this.props.children}}const Kw={normal:"#B5F7F6",warn:"#F3D78A",error:"#FC8486"},Hw=({value:t=0,title:e,status:s="normal",subtitle:r})=>{const o=Ze.css`
147
+ `;class Id extends g.Component{constructor(e){super(e),this.state={error:null,errorInfo:null}}componentDidCatch(e,s){this.setState({error:e,errorInfo:s})}render(){return this.state.errorInfo?this.props.fallback||T.jsxs("div",{children:[T.jsx("h2",{children:"Something went wrong."}),T.jsxs("details",{style:{whiteSpace:"pre-wrap"},children:[this.state.error&&this.state.error.toString(),T.jsx("br",{}),this.state.errorInfo.componentStack]})]}):this.props.children}}const Yw={normal:"#B5F7F6",warn:"#F3D78A",error:"#FC8486"},Ww=({value:t=0,title:e,status:s="normal",subtitle:r})=>{const o=We.css`
148
148
  display: flex;
149
149
  flex-direction: column;
150
- `,n=Ze.css`
150
+ `,n=We.css`
151
151
  position: relative;
152
152
  height: 18px;
153
153
  width: 100%;
154
154
  background-color: #ddd;
155
155
  border-radius: 5px;
156
156
  overflow: hidden;
157
- `,i=Ze.css`
157
+ `,i=We.css`
158
158
  position: absolute;
159
159
  top: 50%; /* position the top edge of the element at the middle of the parent */
160
160
  left: 50%; /* position the left edge of the element at the middle of the parent */
161
161
  z-index: 5;
162
162
  transform: translate(-50%, -50%);
163
163
  font-size: smaller;
164
- `,a=Ze.css`
164
+ `,a=We.css`
165
165
  width: ${t}%;
166
166
  height: 35px;
167
- background-color: ${Kw[s]};
167
+ background-color: ${Yw[s]};
168
168
  text-align: center;
169
169
  line-height: 32px;
170
170
  color: black;
171
- `,c=Ze.css`
171
+ `,c=We.css`
172
172
  animation: indeterminateAnimation 1s infinite linear;
173
173
  transform-origin: 0% 50%;
174
174
  @keyframes indeterminateAnimation {
@@ -182,7 +182,7 @@ ${u}topics:${e}
182
182
  transform: translateX(100%) scaleX(0.5);
183
183
  }
184
184
  }
185
- `;return T.jsxs("div",{css:o,children:[T.jsxs("div",{css:n,children:[T.jsx("div",{css:i,children:e}),T.jsx("div",{css:[a,t<0?c:""]})]}),T.jsx("div",{children:r})]})},zw={setModel:()=>!1},Jr=g.createContext(zw),Vw=()=>{const t=g.useContext(Jr);if(t==null)throw new Error("useModels must be used within a KosModelProvider");return t.model},xd=({children:t})=>{const[e,s]=g.useState(),r=g.useCallback(o=>(s(o),!0),[s]);return T.jsx(Jr.Provider,{value:{model:e,setModel:r},children:t})},Dd=m.createLogger({name:"kos-model-hierarchy-context"}),Gw={models:[],addModel:()=>{Dd.debug("Default implementation being used. Do Nothing.")}},eo=g.createContext(Gw),qw=({children:t})=>{const[e,s]=g.useState([]),r=g.useCallback(o=>{e.includes(o)||(Dd.debug("adding to hierarchy context",o.id),s(n=>[...n,o]))},[e]);return T.jsx(eo.Provider,{value:{models:e,addModel:r},children:t})},Yw=()=>!0,Ad=t=>{const e=g.useContext(eo);if(!e)throw new Error("useContextModelHierarchy must be used within a KosModelCollectionProvider");const s=(t==null?void 0:t.filter)||Yw;return g.useMemo(()=>e.models.filter(s),[e.models,s])},Ww=t=>Ad({filter:s=>{const r=Ie(s.id);return(r==null?void 0:r.type)===t}})[0],Qw=m.createLogger({name:"kos-model-loader"}),Zw=()=>T.jsx("div",{}),Pd=({fallback:t,children:e,...s})=>T.jsx(xd,{children:T.jsx(Cd,{fallback:t,children:T.jsx(g.Suspense,{children:T.jsx(Rd,{...s,children:e})})})}),Rd=t=>{const[e,s]=g.useState(),[r,o]=g.useState(!1),{setModel:n}=g.useContext(Jr),i=g.useContext(eo);if(g.useEffect(()=>{t.model&&(s(t.model),n(t.model),o(!0),i&&i.addModel(t.model))},[i,t.model,n]),t.error)throw Qw.error(t.error),new Error(t.error);const a=t.loading||T.jsx(Zw,{});return T.jsx(T.Fragment,{children:e&&r?t.children:a})},er={header:{title:"Model",createLabel:"Create new Model",deleteLabel:"Delete"},createModal:{okText:"OK",cancelText:"Cancel",title:"Create New Model"}},kd=g.createContext(er),Xw=({translations:t=er,children:e})=>{const s={header:{...er.header,...t.header},createModal:{...er.createModal,...t.createModal}};return T.jsx(kd.Provider,{value:s,children:e})};function Jw(t,e){const s=I.create(t,!1,e),r=s.whenReady().then(()=>s);return Xo(r)}const Ld=g.createContext(void 0),eE=(t={models:{},preloadModels:[]},e)=>{const s=Jw(t,e),r=({children:o})=>{const n=s.read(),[i,a]=g.useState(n.isOnline);return g.useEffect(()=>{const c=W(()=>{a(n.isOnline)});return()=>{c()}},[n]),T.jsx(Ld.Provider,{value:{kosCore:n,online:i},children:o})};return{KosCoreContextProvider:Ho.observer(r)}},Fd=()=>{const t=g.useContext(Ld);if(t===void 0)throw new Error("useKosCore must be used within a KosCoreContextProvider");return t},tE=8,sE=(t=0)=>new Promise(e=>{setTimeout(()=>{e(!0)},2**t*10)}),Je=new Map;function rE(t,e){if(Je.has(t)){const s=Je.get(t);if(s.status==="finished"){const r=I.getInstance().modelManager.getModelById(t);return{kosModel:r,model:r==null?void 0:r.modelData}}else throw s.promise}else{const s=e().then(()=>{Je.set(t,{status:"finished",key:t})},o=>{throw Je.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Je.set(t,r),s}}function oE(t,e){return rE(t,e)}async function nE(t,e){const{modelId:s,factory:r,modelType:o,options:n,activate:i}=e;let a=0;await t.whenReady();let c;if(n){const d=typeof o=="string"?t.modelManager.getModelFactory(o):r;if(!d)throw Error("No Factory Specified. Cannot create a new instance");c=d.build(s,n)}const u=t.modelManager.getModelById(s);if(!u){if(a>tE)throw Error(`KOS Model ${s} has not been found`);await sE(a),a=a+1}return await(u==null?void 0:u.whenReady()),u?(c=u.modelData,{kosModel:u,model:c}):{kosModel:void 0,model:void 0}}const X=t=>{const{modelId:e,modelType:s,activate:r,destroyOnUnmount:o}=t,n=Fd(),[i,a]=g.useState(!1),[c,u]=g.useState(),{kosModel:d,model:h}=oE(e||s||"",()=>nE(n.kosCore,t));return g.useEffect(()=>{t.forceUpdate&&h&&hn(h)&&h.updateModel(t.options||{})},[h]),g.useEffect(()=>{async function f(){try{return await n.kosCore.whenReady(),r&&await(d==null?void 0:d.fsm.transitionTo(L.GO_ACTIVE,v.ACTIVE)),a(!0),d}catch(y){throw u(y.message),y}}let p;return n.kosCore&&e&&f().then(y=>{p=W(()=>{const w=(y==null?void 0:y.status)===v.READY;a(w)})}).catch(y=>{console.error(y)}),()=>{if(r){if(h!=null&&h.id){const y=n.kosCore.modelManager.getModelById(h.id);y==null||y.fsm.transitionTo(L.GO_INACTIVE,v.INACTIVE).then(()=>{if(o){const w=h.id;st(h).then(()=>{Je.delete(w),p==null||p()})}})}}else o&&h&&st(h).then(()=>{Je.delete(e),p==null||p()})}},[r,o,n.kosCore,d,h,e]),{model:h,ready:i,error:c,status:{model:h,ready:i,error:c},KosModelLoader:Pd}},ci=()=>{const t=ur.type;return X({modelId:t,modelType:ur.type,options:{}})},li=g.createContext(void 0),iE=({children:t})=>{const{model:e,ready:s}=ci(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(li.Provider,{value:r,children:t})},aE=()=>{const t=g.useContext(li);if(!t)throw new Error("useKosTimeContext must be used within a KosTimeProvider");return t},ui=()=>{const t=mr.type;return X({modelId:t,modelType:mr.type,options:{}})};function cE(t){return()=>e=>{const{model:s,status:r,KosModelLoader:o}=ui();return T.jsx(o,{...r,children:T.jsx(t,{...e,softwareInfo:s})})}}const di=g.createContext(void 0),lE=({children:t})=>{const{model:e,ready:s}=ui(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(di.Provider,{value:r,children:t})},uE=()=>{const t=g.useContext(di);if(!t)throw new Error("useSoftwareInfoContext must be used within a SoftwareInfoProvider");return t},Nd=new gl,Ud=g.createContext(Nd);function dE({children:t}){return T.jsx(Ud.Provider,{value:Nd,children:t})}const hi=g.createContext(void 0),hE=()=>{const t=window.location.origin,e=me();return(e==null?void 0:e.host)||t},fE=({children:t,appContext:e,locale:s="en",resolver:r,rootUrl:o,descriptorResolver:n})=>{const[i,a]=g.useState(!1),[c,u]=g.useState(),[d,h]=g.useState(),f=o||hE(),p=g.useMemo(()=>e??"app/system",[e]);g.useEffect(()=>{async function E(){const k=(Array.isArray(p)?p:[p]).map(H=>(n||Nu(H))()),S=(await Promise.allSettled(k)).map(H=>{if(H.status==="rejected"){m.warn("Failed to load localization descriptor",H.reason);return}return H.value}).filter(H=>!!H).reverse().reduce((H,U)=>{const Z=U.path;return Object.keys(U.namespaces).forEach(Be=>{const De=U.namespaces[Be];De.basePath=Z}),{...H,namespaces:{...H.namespaces,...U.namespaces}}},{});u(S)}E()},[p,n]),g.useEffect(()=>{async function E(){if(c){const _=f,{translations:k}=await Hu.init({lang:s,descriptor:c,defaultNamespace:"common",resolver:r,rootUrl:_});h(k),a(!0)}}E()},[s,c,r,f]);const y=g.useMemo(()=>i?{setLocale:E=>{d&&(d.currentLocale=E)}}:{setLocale:()=>{throw new Error("Translations not ready")}},[i,d]),w=i?t:null;return T.jsx(hi.Provider,{value:y,children:w})},pE=()=>{const t=g.useContext(hi);if(!t)throw new Error("useTranslationContainerContext must be used within a TranslationContainerProvider");return t},gE=()=>{const t=At.type;return X({modelId:t,modelType:At.type,options:{}})};function mE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=gE();return T.jsx(o,{...r,children:T.jsx(t,{...e,canvasDispatcher:s})})}}const yE=(t,e,s)=>{const r=atob(t),o=new Uint8ClampedArray(e*s*4);for(let n=0,i=0;n<r.length&&i<o.length;n+=3,i+=4)o[i]=r.charCodeAt(n),o[i+1]=r.charCodeAt(n+1),o[i+2]=r.charCodeAt(n+2),o[i+3]=255;return o};function bE({ctx:t,format:e,dataString:s,width:r,height:o,pixelSize:n}){const i=yE(s,r,o),a=new ImageData(i,r,o),c=document.createElement("canvas");c.width=r,c.height=o;const u=c.getContext("2d");u==null||u.putImageData(a,0,0),t.imageSmoothingEnabled=!1,t.clearRect(0,0,r*n,o*n),t.drawImage(c,0,0,r*n,o*n)}const vE=m.createLogger({name:"canvas-streamer"});vE.debug("main-view component loaded");const bo=10,jd=Ho.observer(({canvasDispatcher:t,height:e=30,width:s=50,defaultFps:r=10,showPreview:o=!1,name:n,apiPath:i="/api/system/canvas"})=>{const a=g.useRef(null),[c,u]=g.useState();g.useEffect(()=>{const h=t.addNamedEndpoint(n,{apiPath:i,fps:r,width:s,height:e,id:n});u(h)},[t]);const d=g.useCallback(h=>{if(a.current&&o){const f=a.current.getContext("2d");f&&bE({ctx:f,format:"base64",dataString:h,height:e,width:s,pixelSize:bo})}},[s,e,o]);return g.useEffect(()=>{c&&(c.onFrame=d,c.width=s,c.height=e,c.fps=r)},[c,d,s,e,r]),o&&ua.createPortal(T.jsx(EE,{children:T.jsx(ME,{children:T.jsx("canvas",{ref:a,width:s*bo,height:e*bo,style:{border:"1px solid black"}})})}),document.body)}),wE=mE(jd),EE=Ko.div`
185
+ `;return T.jsxs("div",{css:o,children:[T.jsxs("div",{css:n,children:[T.jsx("div",{css:i,children:e}),T.jsx("div",{css:[a,t<0?c:""]})]}),T.jsx("div",{children:r})]})},Qw={setModel:()=>!1},eo=g.createContext(Qw),Zw=()=>{const t=g.useContext(eo);if(t==null)throw new Error("useModels must be used within a KosModelProvider");return t.model},$d=({children:t})=>{const[e,s]=g.useState(),r=g.useCallback(o=>(s(o),!0),[s]);return T.jsx(eo.Provider,{value:{model:e,setModel:r},children:t})},Cd=m.createLogger({name:"kos-model-hierarchy-context"}),Xw={models:[],addModel:()=>{Cd.debug("Default implementation being used. Do Nothing.")}},to=g.createContext(Xw),Jw=({children:t})=>{const[e,s]=g.useState([]),r=g.useCallback(o=>{e.includes(o)||(Cd.debug("adding to hierarchy context",o.id),s(n=>[...n,o]))},[e]);return T.jsx(to.Provider,{value:{models:e,addModel:r},children:t})},eE=()=>!0,Dd=t=>{const e=g.useContext(to);if(!e)throw new Error("useContextModelHierarchy must be used within a KosModelCollectionProvider");const s=(t==null?void 0:t.filter)||eE;return g.useMemo(()=>e.models.filter(s),[e.models,s])},tE=t=>Dd({filter:s=>{const r=Oe(s.id);return(r==null?void 0:r.type)===t}})[0],sE=m.createLogger({name:"kos-model-loader"}),rE=()=>T.jsx("div",{}),xd=({fallback:t,children:e,...s})=>T.jsx($d,{children:T.jsx(Id,{fallback:t,children:T.jsx(g.Suspense,{children:T.jsx(Ad,{...s,children:e})})})}),Ad=t=>{const[e,s]=g.useState(),[r,o]=g.useState(!1),{setModel:n}=g.useContext(eo),i=g.useContext(to);if(g.useEffect(()=>{t.model&&(s(t.model),n(t.model),o(!0),i&&i.addModel(t.model))},[i,t.model,n]),t.error)throw sE.error(t.error),new Error(t.error);const a=t.loading||T.jsx(rE,{});return T.jsx(T.Fragment,{children:e&&r?t.children:a})},tr={header:{title:"Model",createLabel:"Create new Model",deleteLabel:"Delete"},createModal:{okText:"OK",cancelText:"Cancel",title:"Create New Model"}},Rd=g.createContext(tr),oE=({translations:t=tr,children:e})=>{const s={header:{...tr.header,...t.header},createModal:{...tr.createModal,...t.createModal}};return T.jsx(Rd.Provider,{value:s,children:e})};function nE(t,e){const s=O.create(t,!1,e),r=s.whenReady().then(()=>s);return Xo(r)}const Pd=g.createContext(void 0),iE=(t={models:{},preloadModels:[]},e)=>{const s=nE(t,e),r=({children:o})=>{const n=s.read(),[i,a]=g.useState(n.isOnline);return g.useEffect(()=>{const c=W(()=>{a(n.isOnline)});return()=>{c()}},[n]),T.jsx(Pd.Provider,{value:{kosCore:n,online:i},children:o})};return{KosCoreContextProvider:Ho.observer(r)}},kd=()=>{const t=g.useContext(Pd);if(t===void 0)throw new Error("useKosCore must be used within a KosCoreContextProvider");return t},aE=8,cE=(t=0)=>new Promise(e=>{setTimeout(()=>{e(!0)},2**t*10)}),Ze=new Map;function lE(t,e){if(Ze.has(t)){const s=Ze.get(t);if(s.status==="finished"){const r=O.getInstance().modelManager.getModelById(t);return{kosModel:r,model:r==null?void 0:r.modelData}}else throw s.promise}else{const s=e().then(()=>{Ze.set(t,{status:"finished",key:t})},o=>{throw Ze.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Ze.set(t,r),s}}function uE(t,e){return lE(t,e)}async function dE(t,e){const{modelId:s,factory:r,modelType:o,options:n,activate:i}=e;let a=0;await t.whenReady();let c;if(n){const d=typeof o=="string"?t.modelManager.getModelFactory(o):r;if(!d)throw Error("No Factory Specified. Cannot create a new instance");c=d.build(s,n)}const u=t.modelManager.getModelById(s);if(!u){if(a>aE)throw Error(`KOS Model ${s} has not been found`);await cE(a),a=a+1}return await(u==null?void 0:u.whenReady()),u?(c=u.modelData,{kosModel:u,model:c}):{kosModel:void 0,model:void 0}}const Z=t=>{const{modelId:e,modelType:s,activate:r,destroyOnUnmount:o}=t,n=kd(),[i,a]=g.useState(!1),[c,u]=g.useState(),{kosModel:d,model:h}=uE(e||s||"",()=>dE(n.kosCore,t));return g.useEffect(()=>{t.forceUpdate&&h&&hn(h)&&h.updateModel(t.options||{})},[h]),g.useEffect(()=>{async function f(){try{return await n.kosCore.whenReady(),r&&await(d==null?void 0:d.fsm.transitionTo(L.GO_ACTIVE,v.ACTIVE)),a(!0),d}catch(y){throw u(y.message),y}}let p;return n.kosCore&&e&&f().then(y=>{p=W(()=>{const w=(y==null?void 0:y.status)===v.READY;a(w)})}).catch(y=>{console.error(y)}),()=>{if(r){if(h!=null&&h.id){const y=n.kosCore.modelManager.getModelById(h.id);y==null||y.fsm.transitionTo(L.GO_INACTIVE,v.INACTIVE).then(()=>{if(o){const w=h.id;tt(h).then(()=>{Ze.delete(w),p==null||p()})}})}}else o&&h&&tt(h).then(()=>{Ze.delete(e),p==null||p()})}},[r,o,n.kosCore,d,h,e]),{model:h,ready:i,error:c,status:{model:h,ready:i,error:c},KosModelLoader:xd}},ci=()=>{const t=dr.type;return Z({modelId:t,modelType:dr.type,options:{}})},li=g.createContext(void 0),hE=({children:t})=>{const{model:e,ready:s}=ci(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(li.Provider,{value:r,children:t})},fE=()=>{const t=g.useContext(li);if(!t)throw new Error("useKosTimeContext must be used within a KosTimeProvider");return t},ui=()=>{const t=yr.type;return Z({modelId:t,modelType:yr.type,options:{}})};function pE(t){return()=>e=>{const{model:s,status:r,KosModelLoader:o}=ui();return T.jsx(o,{...r,children:T.jsx(t,{...e,softwareInfo:s})})}}const di=g.createContext(void 0),gE=({children:t})=>{const{model:e,ready:s}=ui(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(di.Provider,{value:r,children:t})},mE=()=>{const t=g.useContext(di);if(!t)throw new Error("useSoftwareInfoContext must be used within a SoftwareInfoProvider");return t},Ld=new fl,Fd=g.createContext(Ld);function yE({children:t}){return T.jsx(Fd.Provider,{value:Ld,children:t})}const hi=g.createContext(void 0),bE=()=>{const t=window.location.origin,e=me();return(e==null?void 0:e.host)||t},vE=({children:t,appContext:e,locale:s="en",resolver:r,rootUrl:o,descriptorResolver:n})=>{const[i,a]=g.useState(!1),[c,u]=g.useState(),[d,h]=g.useState(),f=o||bE(),p=g.useMemo(()=>e??"app/system",[e]);g.useEffect(()=>{async function E(){const k=(Array.isArray(p)?p:[p]).map(H=>(n||Lu(H))()),S=(await Promise.allSettled(k)).map(H=>{if(H.status==="rejected"){m.warn("Failed to load localization descriptor",H.reason);return}return H.value}).filter(H=>!!H).reverse().reduce((H,q)=>{const J=q.path;return Object.keys(q.namespaces).forEach(qt=>{const zt=q.namespaces[qt];zt.basePath=J}),{...H,namespaces:{...H.namespaces,...q.namespaces}}},{});u(S)}E()},[p,n]),g.useEffect(()=>{async function E(){if(c){const _=f,{translations:k}=await Bu.init({lang:s,descriptor:c,defaultNamespace:"common",resolver:r,rootUrl:_});h(k),a(!0)}}E()},[s,c,r,f]);const y=g.useMemo(()=>i?{setLocale:E=>{d&&(d.currentLocale=E)}}:{setLocale:()=>{throw new Error("Translations not ready")}},[i,d]),w=i?t:null;return T.jsx(hi.Provider,{value:y,children:w})},wE=()=>{const t=g.useContext(hi);if(!t)throw new Error("useTranslationContainerContext must be used within a TranslationContainerProvider");return t},EE=()=>{const t=xt.type;return Z({modelId:t,modelType:xt.type,options:{}})};function ME(t){return e=>{const{model:s,status:r,KosModelLoader:o}=EE();return T.jsx(o,{...r,children:T.jsx(t,{...e,canvasDispatcher:s})})}}const TE=(t,e,s)=>{const r=atob(t),o=new Uint8ClampedArray(e*s*4);for(let n=0,i=0;n<r.length&&i<o.length;n+=3,i+=4)o[i]=r.charCodeAt(n),o[i+1]=r.charCodeAt(n+1),o[i+2]=r.charCodeAt(n+2),o[i+3]=255;return o};function _E({ctx:t,format:e,dataString:s,width:r,height:o,pixelSize:n}){const i=TE(s,r,o),a=new ImageData(i,r,o),c=document.createElement("canvas");c.width=r,c.height=o;const u=c.getContext("2d");u==null||u.putImageData(a,0,0),t.imageSmoothingEnabled=!1,t.clearRect(0,0,r*n,o*n),t.drawImage(c,0,0,r*n,o*n)}const SE=m.createLogger({name:"canvas-streamer"});SE.debug("main-view component loaded");const bo=10,Nd=Ho.observer(({canvasDispatcher:t,height:e=30,width:s=50,defaultFps:r=10,showPreview:o=!1,name:n,apiPath:i="/api/system/canvas"})=>{const a=g.useRef(null),[c,u]=g.useState();g.useEffect(()=>{const h=t.addNamedEndpoint(n,{apiPath:i,fps:r,width:s,height:e,id:n});u(h)},[t]);const d=g.useCallback(h=>{if(a.current&&o){const f=a.current.getContext("2d");f&&_E({ctx:f,format:"base64",dataString:h,height:e,width:s,pixelSize:bo})}},[s,e,o]);return g.useEffect(()=>{c&&(c.onFrame=d,c.width=s,c.height=e,c.fps=r)},[c,d,s,e,r]),o&&ca.createPortal(T.jsx(IE,{children:T.jsx($E,{children:T.jsx("canvas",{ref:a,width:s*bo,height:e*bo,style:{border:"1px solid black"}})})}),document.body)}),OE=ME(Nd),IE=Ko.div`
186
186
  display: flex;
187
187
  flex-direction: column;
188
188
  gap: 8px;
@@ -190,9 +190,9 @@ ${u}topics:${e}
190
190
  width: 100%;
191
191
  justify-content: space-between;
192
192
  align-items: center;
193
- `,ME=Ko.div`
193
+ `,$E=Ko.div`
194
194
  display: flex;
195
195
  flex-direction: column;
196
196
  align-items: center;
197
- `,Bd=()=>{const t=Ir.type;return X({modelId:t,modelType:Ir.type,options:{}})};function TE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Bd();return T.jsx(o,{...r,children:T.jsx(t,{...e,device:s})})}}function _E(t,e,s){const r=new Promise(o=>{I.getInstance().whenReady().then(()=>{const{model:n}=I.getInstance().modelManager.createModelInstance(t,e??t,s);return n.whenReady().then(()=>{o(n.modelData)})})});return Xo(r)}function SE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=ci();return T.jsx(o,{...r,children:T.jsx(t,{...e,kosTime:s})})}}const Kd=()=>{const t=Is.type;return X({modelId:t,modelType:Is.type,options:{}})};function IE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Kd();return T.jsx(o,{...r,children:T.jsx(t,{...e,networkInterfaceContainer:s})})}}const Hd=()=>{const t=gr.type;return X({modelId:t,modelType:gr.type,options:{}})};function OE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Hd();return T.jsx(o,{...r,children:T.jsx(t,{...e,oTA:s})})}}function $E(t,e){g.useEffect(()=>{function s(o){t.current&&!t.current.contains(o.target)&&e()}function r(o){o.key==="Escape"&&e()}return document.addEventListener("mousedown",s),document.addEventListener("keydown",r,!1),()=>{document.removeEventListener("mousedown",s),document.removeEventListener("keydown",r,!1)}},[t,e])}function CE(t){const e=g.useRef(null),s=t.onAlert;return $E(e,s),T.jsx("div",{ref:e,style:{width:"100%"},children:t.children})}const xE=t=>{var u;const{stateProp:e}=t,[s,r]=g.useState((u=t.stateProp)==null?void 0:u.value),[o,n]=g.useState(!1),[i,a]=g.useState(void 0);return g.useEffect(()=>{async function d(h){try{h&&(await de(h),n(!0))}catch(f){a(f.message)}}d(e)},[e]),g.useEffect(()=>{const d=W(()=>{e&&o&&r(e.value)});return()=>{d()}},[o,e]),[s,{ready:o,error:i}]},zd=()=>{const[t,e]=g.useState(!1),[s,r]=g.useState([]),o=Pt.type,n=X({modelId:o,modelType:Pt.type,options:{}});return g.useEffect(()=>{const i=W(()=>{var a,c;e(((a=n.model)==null?void 0:a.isStorageInserted)??!1),r(((c=n.model)==null?void 0:c.data)??[])});return()=>{i()}},[n.model]),{...n,inserted:t,devices:s}};function DE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=zd();return T.jsx(o,{...r,children:T.jsx(t,{...e,storageDeviceContainer:s})})}}const vo=m.createLogger({name:"use-timer"}),AE=({timerName:t,onTimerExpired:e,onTimerTick:s,timerEventActions:r,autoStart:o})=>{const n=Ed.getTimer(t);g.useEffect(()=>{if(!n){console.warn(`Timer with name ${t} does not exist.`);return}const u=C(oi,d=>{const{name:h,action:f,remainingTime:p}=d==null?void 0:d.body;h===t&&(f===ii?e({name:h,action:f,remainingTime:p,timer:n}):r!=null&&r[f]&&r[f]({name:h,action:f,remainingTime:p,timer:n}))});return o&&n.start(),()=>{u.unsubscribe()}},[o,e,r,t,n]),g.useEffect(()=>{if(!n||!s)return;const u=`${ni}/${t}`,d=C(u,h=>{const{name:f,remainingTime:p}=h==null?void 0:h.body;f===t&&s({name:f,remainingTime:p,timer:n})});return()=>{d.unsubscribe()}},[s,t,n]);const i=g.useCallback(()=>{n?n.start():vo.warn(`Timer with name ${t} does not exist.`)},[n,t]),a=g.useCallback(()=>{n?n.reset():vo.warn(`Timer with name ${t} does not exist.`)},[n,t]),c=g.useCallback(()=>{n?n.pause():vo.warn(`Timer with name ${t} does not exist.`)},[n,t]);return{timer:n,start:i,reset:a,pause:c}},PE=t=>{const e=/[\\^$.*+?()[\]{}|]/g;return RegExp(e.source).test(t)?t.replace(e,"\\$&"):t},RE=t=>t instanceof RegExp,kE=t=>typeof t=="string",LE=(t,e,s)=>{if(t===""||e==="")return t;let r=e;RE(r)||(r=new RegExp("("+PE(r)+")","gi"));const o=t.split(r);for(let n=1,i=o.length;n<i;n+=2)o[n]=s(o[n],n);return o},Vd=(t,e,s)=>{let r=t;return Array.isArray(r)||(r=[r]),r.flatMap(o=>kE(o)?LE(o,e,s):o)};function FE(t,e){let s=t;return Object.entries(e).forEach(([r,o])=>{const n=new RegExp(`<${r}>(.*?)</${r}>|<${r}/>`,"g");s=Vd(s,n,(i,a)=>o.type==="br"?T.jsx("br",{}):g.cloneElement(o,{key:`${r}-${a}`},i))}),s}const NE=t=>{const{i18nKey:e,t:s,defaults:r,components:o,values:n={},context:i}=t,a=s(e,{defaultValue:r,data:n,context:i,returnObjects:!0}),c=FE(a,o||{});return T.jsx("span",{className:t.className,children:c})},bt=new Map;function UE(t,e){if(bt.has(t)){const s=bt.get(t);if(s.status==="finished")return s.result;throw s.promise}else{const s=e().then(o=>{bt.set(t,{status:"finished",result:o})},o=>{throw bt.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw bt.set(t,r),s}}function Uo(t,e){return UE(t,e)}const jE=async()=>{const t=await Mc(Ne.type);return await de(t.model),t.model},BE=async(t,e,s)=>{const r=t.resolveNamespace(e);await de(r);for(const o of s){const n=t.resolveNamespace(o);await de(n),bt.set(o,{status:"finished",result:n})}return r},KE=(t,e)=>{const s=[t].flat(),[r,...o]=s,n=Uo(Ne.type,jE),i=s.join("__"),a=Uo(i,()=>BE(n,r,o)),c=g.useMemo(()=>({exists:d=>{const h=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.exists(h):!1}}),[e==null?void 0:e.keyPrefix,a]);return{t:g.useCallback((d,h)=>{const f=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.resolveKey(f,h):(m.debug(`Translation model ${t} not ready for key: ${f}`),f)},[e==null?void 0:e.keyPrefix,t,a]),i18n:c}},Gd=()=>{const t=Ne.type;return X({modelId:t,modelType:Ne.type,options:{}})};function HE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Gd();return T.jsx(o,{...r,children:T.jsx(t,{...e,translationContainer:s})})}}const zE=t=>X({modelId:t,modelType:_s.type}),fi=()=>X({modelId:xt.type,modelType:xt.type,options:{}}),VE=({troubleType:t,condition:e})=>{const{model:s}=fi(),[r,o]=g.useState(!1),[n,i]=g.useState([]),a=g.useCallback(()=>{var c,u;return n.length>0&&((c=n[0])!=null&&c.resolvable)?(u=n[0])==null?void 0:u.resolve():Promise.resolve(void 0)},[n]);return g.useEffect(()=>W(()=>{const u=(t?s==null?void 0:s.troubles.getIndexByKey("byType",t):s==null?void 0:s.troubles.data)||[],d=e?u.filter(e):u;o(d.length>0),i(d)}),[e,s,t]),[r,a,n.length>0?n[0]:void 0,n]};function GE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=fi();return T.jsx(o,{...r,children:T.jsx(t,{...e,troubleContainer:s})})}}const qd=()=>{const t=$s.type,e=X({modelId:t,modelType:$s.type,options:{},activate:!0,destroyOnUnmount:!0}),[s,r]=g.useState(!1),[o,n]=g.useState(!1),[i,a]=g.useState([]);return g.useEffect(()=>{const c=W(()=>{var u,d,h;r(((u=e.model)==null?void 0:u.isUsbInserted)??!1),n(((d=e.model)==null?void 0:d.hasAvailableUpdates)??!1),a(((h=e.model)==null?void 0:h.data)??[])});return()=>{c()}},[e.model]),{...e,inserted:s,updateAvailable:o,updates:i}};function qE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=qd();return T.jsx(o,{...r,children:T.jsx(t,{...e,usbUpdateContainer:s})})}}const YE=({path:t,propKey:e})=>{const{status:s}=X({modelType:ys.type,modelId:t,options:{path:t}}),[r,o]=g.useState(!1),[n,i]=g.useState(),[a,c]=g.useState(""),[u,d]=g.useState(),h=f=>{n&&e&&n.updateProperty(e,f)};return g.useEffect(()=>{var f;s.model&&i(s.model),s.model&&e&&((f=s.model)!=null&&f.props.has(e)?c(s.model.props[e]):d(`property ${e} not found`)),s.ready&&o(s.ready)},[s.ready,s.model,e]),g.useEffect(()=>{e&&M.autorun(()=>{const f=n==null?void 0:n.props[e];c(f||"")})},[n,e]),{config:n,ready:r,value:a,error:u,updateValue:h}},WE=(t,e)=>{switch(e.type){case"UPDATE":return e.payload;default:return t}},Yd=({configProperty:t,optionsTransformer:e})=>{const[s,r]=g.useState(!1),[o,n]=g.useState(""),[i,a]=g.useReducer(WE,{value:String(t==null?void 0:t.value),displayValue:t==null?void 0:t.displayValue,significantValue:t==null?void 0:t.significantValue,unit:t==null?void 0:t.unit,options:t==null?void 0:t.options,mappedOptions:[],updateProperty:t==null?void 0:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}),c=g.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&(t==null||t.updateProperty(d))},[t]);return g.useEffect(()=>{async function u(d){try{d&&(await de(d),r(!0))}catch(h){n(h.message)}}u(t)},[t]),g.useEffect(()=>{const u=W(()=>{if(t&&s){let d=[];e&&(d=e(t.options)),a({type:"UPDATE",payload:{value:String(t.value),displayValue:t.displayValue,significantValue:t.significantValue,unit:t.unit,options:t.options,mappedOptions:d,updateProperty:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}})}});return()=>{u()}},[t,e,s]),{...i,configSelectProps:{onChange:c,value:i.value,options:e?i.mappedOptions||[]:i.options||[]},ready:s,error:o}};function QE(t,e){const s=e??new Date().getFullYear(),r=[31,28,31,30,31,30,31,31,30,31,30,31];return t===1&&(s%4===0&&s%100!==0||s%400===0)?29:r[t]??0}function ZE(t,e){return new Date(t,e,0).getDate()}function Wd(t,e){const s=QE(e,t),r=[];for(let o=1;o<=s;o++)r.push(o);return r}function Qd(){return[...Array(12).keys()].map(e=>new Date(0,e).getMonth())}function Zd(t=[2018,2028]){const e=[];for(let s=t[0];s<=t[1];s++)e.push(s);return e}function Xd(t,e=[2018,2028]){const s=Zd(e);return t==="long"?s:s.map(r=>Number(r.toString().substring(2)))}function pi(t="numeric",e="en-US"){const s=new Intl.DateTimeFormat(e,{month:t,timeZone:"UTC"}).format;return[...Array(12).keys()].map(r=>s(new Date(Date.UTC(0,r,1))))}function XE({locale:t="en-US",year:e,month:s,day:r,formatOptions:o={weekday:"long",year:"numeric",month:"long",day:"numeric"},displayOrder:n}){const i=s-1,a=new Date(e,i,r),c=new Intl.DateTimeFormat(t,{month:o.month}).format(a),u=new Intl.DateTimeFormat(t,{year:o.year}).format(a),d=new Intl.DateTimeFormat(t,{day:o.day}).format(a);return n?n=="MMDDYY"?`${c} ${d} ${u}`:n==="DDMMYY"?`${d} ${c} ${u}`:n==="YYMMDD"?`${u} ${c} ${d}`:`${u} ${d} ${c}`:new Intl.DateTimeFormat(t,o).format(a)}function be(t){return t.toString().length===2?new Date(Date.parse(`01 Jan 20${t}`)).getFullYear():t}function JE(t){return typeof t=="string"?new Date(Date.parse(`01 ${t.substring(0,3)} 2023`)).getMonth()+1:t}function Jd(t,e,s){const r=be(e),o=new Date(r,t,1).getDay(),n=new Date(r,t+1,0).getDate();return[...Array(42).keys()].map(a=>a<o||a>n+o-1?{label:"",value:0,disabled:!0}:s[a-o])}function ns(t,e,s){const r=e-1,o=new Date(t,r,s);return new Date(o).getMonth()===r&&new Date(o).getDate()===s}function is(t,e){return new Date(t,e,0).getDate()}function eh(t="en-US",e="short"){const s=new Intl.DateTimeFormat(t,{weekday:e}).format;return[...Array(7).keys()].map(r=>s(new Date(Date.UTC(2021,5,r))))}function th({locale:t="en-US",year:e=new Date().getFullYear(),month:s=new Date().getMonth(),yearRange:r=[2018,2028],daysOfWeekFilter:o=[],formatOptions:{yearFormat:n="long",monthFormat:i="long",dayFormat:a="short"}={}}){const c=gi(n,r),u=sh(n,r,t),d=rh(i,t),h=oh(i,t),f=mi(e,s),p=nh(e,s,t,o),y=ch(s,e,p),w=ih(t,a);return{daysArray:f,monthsArray:d,yearsArray:c,yearsOptionsArray:u,monthsOptionsArray:h,daysOptionsArray:p,calendarDayArray:y,dayNamesArray:w}}function gi(t="long",e=[2018,2028]){return g.useMemo(()=>Xd(t,e),[t,e])}function sh(t="long",e=[2018,2028],s="en-US"){const r=gi(t,e);return g.useMemo(()=>r.map(n=>({label:n.toLocaleString(s).replace(",",""),value:n})),[s,r])}function rh(t,e="en-US"){return g.useMemo(()=>pi(t,e),[t,e])}function oh(t,e="en-US"){const s=g.useMemo(()=>Qd(),[]),r=g.useMemo(()=>pi(t,e),[t,e]);return g.useMemo(()=>[...Array(12).keys()].map(n=>({label:r[n],value:Number(s[n])})),[r,s])}function mi(t,e){const s=be(t);return g.useMemo(()=>Wd(s,e),[e,s])}const eM=(t,e,s,r=[])=>{const o=new Date(t,e,s).getDay();return r.length>0&&r.includes(o)};function nh(t,e,s="en-US",r=[]){const o=mi(t,e);return g.useMemo(()=>o.map(i=>({label:i.toLocaleString(s),value:i,disabled:eM(t,e,i,r)})),[r,s,e,o,t])}function ih(t="en-US",e="short"){return g.useMemo(()=>eh(t,e),[t,e])}function ah({year:t=new Date().getFullYear(),month:e=new Date().getMonth(),day:s=new Date().getDate(),formatString:r}){const o=e,n=new Date(t,o,s);return{formattedDate:Ke.format(n,r)}}function ch(t,e,s){return g.useMemo(()=>Jd(t,e,s),[t,e,s])}var lh=(t=>(t.MMDDYY="MMDDYY",t.DDMMYY="DDMMYY",t.YYMMDD="YYMMDD",t.YYDDMM="YYDDMM",t))(lh||{});function tM({locale:t="en-US",date:{year:e=new Date().getFullYear(),month:s=new Date().getMonth(),day:r=new Date().getDate()}={year:new Date().getFullYear(),month:new Date().getMonth(),day:new Date().getDate()},formatOptions:{yearFormat:o="long",monthFormat:n="long",dayFormat:i="short",formatString:a="yyyy/MM/dd"}={},filterOptions:{yearsRange:c=[2018,2028],daysOfWeekFilter:u=[]}={}}){const[d,h]=g.useState(e),[f,p]=g.useState(c),[y,w]=g.useState(s),[E,_]=g.useState(r);g.useEffect(()=>{h(e)},[e]),g.useEffect(()=>{w(s)},[s]),g.useEffect(()=>{_(r)},[r]);const{yearsArray:k,yearsOptionsArray:P,monthsArray:O,monthsOptionsArray:S,daysArray:H,daysOptionsArray:U,calendarDayArray:Z,dayNamesArray:Be}=th({locale:t,year:d,yearRange:f,month:y,formatOptions:{yearFormat:o,monthFormat:n,dayFormat:i},daysOfWeekFilter:u}),{formattedDate:De}=ah({year:d,month:y,day:E,formatString:a});return{dateActions:{setYear:h,setYearRange:p,setMonth:w,setDay:_,nextMonth:()=>{const se=y<11?be(d):be(d+1),ce=y<11?y+1:0;if(!ns(se,ce,E)){const Ye=is(se,ce);_(Ye)}ce===0&&h(se),w(ce)},previousMonth:()=>{const se=be(y===0?d-1:d),ce=y===0?11:y-1;if(!ns(se,ce,E)){const Ye=is(se,ce);_(Ye)}ce===11&&h(se),w(ce)},nextYear:()=>{const se=d<f[1]?d+1:f[0],ce=be(se);if(ns(ce,y,E))h(se);else{const Ye=is(be(d+1),y);_(Ye),h(se)}},previousYear:()=>{const se=d>f[0]?d-1:f[0],ce=be(se);if(ns(ce,y,E))h(se);else{const Ye=is(be(d-1),y);_(Ye),h(se)}}},dateState:{year:d,yearRange:f,month:y,day:E,yearsArray:k,yearsOptionsArray:P,monthsArray:O,monthsOptionsArray:S,daysArray:H,daysOptionsArray:U,calendarDayNames:Be,calendarDayArray:Z,formattedDate:De}}}function uh({date:t=new Date,dateFormat:e,timeFormat:s,options:r={}}){const[o,n]=g.useState("Formatting Time..."),[i,a]=g.useState("Formatting Date..."),c=!!r.ignoreDateFormat,{model:u,ready:d}=X({modelId:re.type,modelType:re.type,options:{}}),h=typeof t=="string"?Ke.parseISO(t):t;return g.useEffect(()=>{c?a(""):e?a(Ke.format(h,e)):d&&a(Ke.format(h,u!=null&&u.selectedDateFormat?u==null?void 0:u.selectedDateFormat:""))},[c,t,e,h,u,d]),g.useEffect(()=>{s?n(Ke.format(h,s)):d&&n(Ke.format(h,u!=null&&u.selectedTimeFormat?u==null?void 0:u.selectedTimeFormat:""))},[t,s,h,u,d]),{formattedDate:i,formattedTime:o}}const dh=({secondsFromMidnight:t=0})=>{const[e,s]=g.useState(0),[r,o]=g.useState(0),[n,i]=g.useState(0),[a,c]=g.useState(new Date),{formattedTime:u}=uh({date:a,options:{ignoreDateFormat:!0}});return g.useEffect(()=>{const d=Number(t),h=Math.floor(d/3600),f=Math.floor(d%3600/60),p=d%60;s(h),o(f),i(p);const y=new Date;y.setHours(0,0,0,0);const w=new Date(y.getTime()+d*1e3);c(new Date(w))},[t]),{hours:e,minutes:r,seconds:n,formattedTime:u,timeActions:{setHours:s,setMinutes:o,setSeconds:i}}},sM=({configProperty:t})=>{const{value:e}=Yd({configProperty:t}),s=parseInt(e||"0",10),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}=dh({secondsFromMidnight:s}),c=g.useRef();return g.useEffect(()=>{const u=r*3600+o*60+n;return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{t&&t.updateProperty(u.toString())},100),()=>{c.current&&clearTimeout(c.current)}},[t,r,o,n]),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}};function rM(t,e={}){const{intervalMs:s=5*60*1e3,immediate:r=!0}=e;g.useEffect(()=>{const o=()=>{try{t({__warmup:!0})}catch{}};r&&("requestIdleCallback"in window?requestIdleCallback(o):setTimeout(o,1));const n=s?setInterval(o,s):null;return()=>{n&&clearInterval(n)}},[t,s,r])}const oM=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),nM=(t=oM)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=X({modelType:re.type,modelId:re.type,options:{}});g.useEffect(()=>{const c=W(()=>{s((n==null?void 0:n.dateFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=W(()=>{n!=null&&n.dateFormatId&&(n!=null&&n.selectedDateFormat)&&o({id:n==null?void 0:n.dateFormatId,value:n==null?void 0:n.selectedDateFormat})});return()=>{c()}},[n==null?void 0:n.selectedDateFormat,n==null?void 0:n.dateFormatId]);const a=g.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedDateFormat(u))},[n]);return{raw:(n==null?void 0:n.dateFormatOptions.map(c=>c.id))??[],regionModel:n,selectedDateFormat:(r==null?void 0:r.value)||"",dateFormatId:(r==null?void 0:r.id)||"",updateDateFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)||"",options:e}}},iM=t=>T.jsx("option",{title:t,value:t,children:t},t),hh="kos:service:region:settings",fh="timeZone",aM=`${hh}-${fh}`,cM=(t=iM)=>{const[e,s]=g.useState([]),[r,o]=g.useState(""),{model:n,ready:i}=X({modelType:re.type,modelId:re.type,options:{}}),a=at.factory(aM)({path:hh,attribute:fh});g.useEffect(()=>{const u=W(()=>{s((n==null?void 0:n.timeZones.map(t))||[]),n!=null&&n.timeZones.length&&No(n==null?void 0:n.timeZones[0])});return()=>{u()}},[n,i,t]),g.useEffect(()=>{const u=W(()=>{o(a.value||"")});return()=>{u()}},[a.value]);const c=g.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&No(d)},[]);return{options:e,raw:(n==null?void 0:n.timeZones)??[],regionModel:n,selectedTimeZone:r,timeZones:(n==null?void 0:n.timeZones)??[],updateTimeZone:c,selectProps:{onChange:c,value:r,options:e}}},ph="kos:service:region",gh="regionId",lM=`${ph}-${gh}`,uM=t=>T.jsx("option",{title:t,value:t,children:t},t),mh=(t=uM)=>{const[e,s]=g.useState([]),[r,o]=g.useState("factory"),{model:n,ready:i}=X({modelType:re.type,modelId:re.type,options:{}}),a=at.factory(lM)({path:ph,attribute:gh});g.useEffect(()=>{const u=W(()=>{s((n==null?void 0:n.availableRegions.map(t))||[])});return()=>{u()}},[n,i,t]),g.useEffect(()=>{const u=W(()=>{o(a.value||"factory")});return()=>{u()}},[a.value]);const c=g.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&vd(d)},[]);return{raw:(n==null?void 0:n.availableRegions)??[],regionModel:n,regionData:n==null?void 0:n.selectedRegion,selectedRegion:r,updateRegion:c,regionSelectProps:{onChange:c,value:r,options:e}}},dM=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),hM=(t=dM)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=X({modelType:re.type,modelId:re.type,options:{}});g.useEffect(()=>{const c=W(()=>{s((n==null?void 0:n.timeFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=W(()=>{n!=null&&n.timeFormatId&&(n!=null&&n.selectedTimeFormat)&&o({id:n==null?void 0:n.timeFormatId,value:n==null?void 0:n.selectedTimeFormat})});return()=>{c()}},[n==null?void 0:n.selectedTimeFormat,n==null?void 0:n.timeFormatId]);const a=g.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedTimeFormat(u))},[n]);return{raw:(n==null?void 0:n.timeFormatOptions.map(c=>c.id))??[],regionModel:n,selectedTimeFormat:(r==null?void 0:r.value)??"",timeFormatId:(r==null?void 0:r.id)??"",updateTimeFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)??"",options:e}}},fM=(t,e)=>g.useMemo(()=>wn(t),e),pM={config:{attributes:!0,childList:!0,subtree:!0}};function gM(t,e,s=pM){const[r,o]=g.useState(null);g.useEffect(()=>{if(!e||typeof e!="function")throw new Error("A valid callback function is required");const n=new MutationObserver(e);o(n)},[e,s,o]),g.useEffect(()=>{if(!r)return()=>{};if(!t)throw new Error("A valid DOM element is required");const{config:n}=s;try{r.observe(t,n)}catch(i){m.error(i)}return()=>{r&&r.disconnect()}},[r,t,s])}const yh={validateStart:function(t){return!0},validateStop:function(t){const e=t.event.currentTarget.getBoundingClientRect(),[s,r]=t.xy;return s<e.left||s>e.right||r<e.top||r>e.bottom}},wo=m.createLogger({name:"usePressGesture",group:"kos-hooks"});function mM({onPressed:t,onRelease:e,intersectionStrategy:s=yh}){const r=g.useRef(!1),o=$h.useGesture({onDragStart:c=>{wo.info("onDragStart",c.type),s.validateStart(c)&&(t&&t(),r.current=!0)},onDrag:c=>{wo.info("onDrag",c.type),r.current&&s.validateStop(c)&&(e&&e(),r.current=!1)},onDragEnd:c=>{wo.info("onDragEnd",c.type),r.current&&e&&(e(),r.current=!1)}}),n=()=>{t&&t(),r.current=!0},i=()=>{r.current&&e&&(e(),r.current=!1)},a=()=>{r.current&&e&&(e(),r.current=!1)};return{dom:o,mesh:()=>({onPointerDown:n,onPointerUp:i,onPointerOut:a})}}const bh=()=>{const[t,e]=g.useState(!1),s=I.getInstance();return g.useEffect(()=>{const r=W(()=>{s&&s.reloading!==t&&e(s.reloading)});return()=>{r()}},[s,t]),[t]};function vh(t=!1,e="2-digit"){return g.useMemo(()=>{const s=t?12:24;return Array.from({length:s},(r,o)=>{const n=t&&o===0?12:o%s;return{id:o,label:e==="2-digit"?n.toString().padStart(2,"0"):n.toString()}})},[e,t])}function jo(t,e="2-digit",s=0,r=0){return g.useMemo(()=>Array.from({length:t},(o,n)=>{const i=String(n+s);return{id:n+r,label:e==="2-digit"?i.padStart(2,"0"):i}}),[t,s,r,e])}function wh(t="en-US"){return g.useMemo(()=>["AM","PM"].map(e=>{const s=new Intl.DateTimeFormat(t,{hour:"2-digit",hour12:!0}).formatToParts(new Date().setHours(e==="AM"?0:12))[2].value;return{id:s,label:s}}),[t])}function Eh({formatOptions:{hour12:t=!0,hour:e="2-digit",minute:s="2-digit",second:r="2-digit"}={hour12:!0,hour:"2-digit",minute:"2-digit",second:"2-digit"},locale:o="en-US"}){const n=vh(t,e),i=jo(60,s),a=jo(60,r),c=wh(o);return{hourOptions:n,minuteOptions:i,secondOptions:a,amPmOptions:c}}function Mh(t,e){return Ke.format(t,e)}function Th({formatOptions:t,initialDate:e=new Date,locale:s="en-US",format:r="HH:mm"}){const[o,n]=g.useState(e),i=g.useCallback(w=>{n(E=>{const _=new Date(E);return _.setHours(Number(w)),_})},[]),a=g.useCallback(w=>{n(E=>{const _=new Date(E);return _.setMinutes(Number(w)),_})},[]),c=g.useCallback(w=>{n(E=>{const _=new Date(E);return _.setSeconds(Number(w)),_})},[]),u=g.useCallback(w=>{const E=new Date(w);n(E)},[]),d=Mh(o,r),{hourOptions:h,minuteOptions:f,secondOptions:p,amPmOptions:y}=Eh({formatOptions:t,locale:s});return{amPmOptions:y,formattedTime:d,hourOptions:h,minuteOptions:f,secondOptions:p,setHours:i,setMinutes:a,setSeconds:c,setTime:u,time:new Date(o)}}const yM=t=>{const{regionModel:e}=mh(),s=g.useMemo(()=>({hour12:e==null?void 0:e.is12HourTimeFormat}),[e==null?void 0:e.is12HourTimeFormat]);return Th({...t,locale:e==null?void 0:e.regionId,format:e==null?void 0:e.selectedTimeFormat,formatOptions:s})};function bM(t){return e=>{const[s]=bh();return s?T.jsx($d,{message:"Wait a moment while your project reloads..."}):T.jsx(t,{...e})}}const aa=m.createLogger({name:"studio-properties-service",group:"Services"}),vM="/api/kos/studio/properties",_h=async t=>{if(aa.debug("sending GET for studio-properties"),!t)throw aa.error("connectionId is undefined"),new Error("connectionId is undefined");return await xe.get(vM,{},{destinationAddress:t,timeout:500})},wM=Object.freeze(Object.defineProperty({__proto__:null,getStudioProperties:_h},Symbol.toStringTag,{value:"Module"}));var EM=Object.getOwnPropertyDescriptor,MM=(t,e,s,r)=>{for(var o=r>1?void 0:r?EM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Sh="studio-properties-model",TM="/kos/studio/properties",ca={"kos.studio.tool.legacy":1};let Bo=class{constructor(t,e,s){l(this,"id");l(this,"connectionId");l(this,"unsubscribe",null);l(this,"logger");l(this,"data");this.id=t,this.logger=s.logger,this.data=Se(),this.connectionId=e.connectionId}async init(){this.logger.debug(`initializing studio-properties ${this.id}`)}async load(){this.logger.debug(`loading studio-properties ${this.id}`)}async terminatePropertiesSession(){var t;(t=this.unsubscribe)==null||t.call(this)}async initializePropertiesSession(){this.unsubscribe=Tt.getInstance().subscribeTopic({topic:TM,destinationAddress:this.connectionId,callback:s=>{this.logger.error(`Received studio-properties message for connection ${this.connectionId}: ${JSON.stringify(s)}`)}});const[t,e]=await _h(this.connectionId);if(t){this.logger.error(`Error loading studio-properties: ${t}`),this.data.setValues(ca);return}if(e){const s=Object.keys(e).reduce((r,o)=>(r[o]=e[o]??o,r),{});this.data.setValues(s??ca),m.ifDebug(()=>this.logger.debug(`studio-properties loaded: ${JSON.stringify(s)}`))}}get(t){return this.data[t]}createObservableProperty(t){return wn(()=>this.get(t))}};Bo=MM([A(Sh)],Bo);const _M=new ye({class:Bo,type:Sh});Object.defineProperty(exports,"makeAutoObservable",{enumerable:!0,get:()=>M.makeAutoObservable});Object.defineProperty(exports,"makeObservable",{enumerable:!0,get:()=>M.makeObservable});Object.defineProperty(exports,"kosComponent",{enumerable:!0,get:()=>Ho.observer});exports.AuthState=ul;exports.BrowserKosRouter=ml;exports.BrowserRouter=An;exports.CanvasDispatcher=At;exports.CanvasDispatcherServices=$v;exports.CanvasRenderer=Qn;exports.CanvasStreamer=wE;exports.CanvasStreamerBase=jd;exports.ChildModels=He;exports.CompanionParentModel=Mt;exports.ConfigBean=ys;exports.ContainerAwareSetup=ln;exports.CoreExtensionManager=Sw;exports.CoreModels=ri;exports.CreateModelTranslationsContext=kd;exports.CreateModelTranslationsProvider=Xw;exports.DateDisplayFormat=lh;exports.DateHelpers=zh;exports.DependencyLifecycle=j;exports.DependencyModels=F;exports.Device=Ir;exports.DeviceServices=Qv;exports.DomIntersectionStrategy=yh;exports.EVENT_KOS_MODEL_READY=qo;exports.EVENT_TROUBLE_ADDED=Yg;exports.EVENT_TROUBLE_REMOVED=Wg;exports.EXTENSION_CANVAS_RENDERER=te;exports.EXTENSION_FEATURE_FLAG_RESOLVER=oc;exports.EXTENSION_TROUBLE_DATA_MAPPER=fr;exports.EXTENSION_TROUBLE_MAPPER=Fs;exports.ErrorBoundaryWithFallback=Cd;exports.EventBus=Ah;exports.EventBusFunctional=Rh;exports.EventBusState=Lh;exports.ExtensionManager=$;exports.FUTURE_CONTAINER_MODEL_TYPE=zl;exports.FUTURE_MODEL_TYPE=Rl;exports.FUTURE_NOT_ASSIGNED=Mn;exports.FeatureFlagService=nc;exports.FetchError=ge;exports.FutureAliases=us;exports.FutureContainerFactory=Ve;exports.FutureContainerModel=Gl;exports.FutureContainerSetup=on;exports.FutureEndState=ze;exports.FutureFactory=Ut;exports.FutureHandler=Nr;exports.FutureManager=rt;exports.FutureModel=jl;exports.FutureService=as;exports.HEADER_CACHE_CONTROL=pa;exports.HEADER_CONTENT_TYPE=fa;exports.HEADER_DESTINATION_ADDR=Ue;exports.HEADER_FOS_REQUEST_ID=ga;exports.HEADER_METHOD=xr;exports.HEADER_ORDERED=Vo;exports.HEADER_REQUEST_ID=Cs;exports.HEADER_REQUEST_TYPE=Oe;exports.HEADER_RESPONSE_ID=Dr;exports.HEADER_SOURCE_ADDR=ha;exports.HEADER_TOPIC=da;exports.HEADER_URL=kt;exports.HEADER_WORK_TRACKER=Go;exports.HttpRouteHandlers=Re;exports.KOS_EXECUTION_CONTEXT=Lr;exports.KOS_MODEL_ID=tr;exports.KeyValue=kn;exports.KeyValueServices=Hm;exports.Kos=ie;exports.KosConfigPropertySpec=at;exports.KosContainerIndex=dn;exports.KosContextBean=pl;exports.KosContextManager=Y;exports.KosCore=I;exports.KosCoreModelPropertyMapper=ve;exports.KosDataContainer=vn;exports.KosDependencyTypes=vf;exports.KosExpressionEvaluator=ru;exports.KosExtensionUtils=Yh;exports.KosFeatureFlags=ic;exports.KosFetchMethods=qc;exports.KosGlobalConfig=sn;exports.KosHttpRouteManager=gn;exports.KosLog=m;exports.KosLogManager=iu;exports.KosLogManagerServices=Qy;exports.KosMockEvents=ba;exports.KosModel=il;exports.KosModelCollectionProvider=qw;exports.KosModelContainer=Ce;exports.KosModelContext=Jr;exports.KosModelEvents=L;exports.KosModelFactory=ds;exports.KosModelLoader=Pd;exports.KosModelLoaderDisplay=Rd;exports.KosModelManager=ll;exports.KosModelProvider=xd;exports.KosModelRegistrationFactory=ye;exports.KosModelRegistry=Fo;exports.KosModelState=v;exports.KosModelSymbol=rn;exports.KosModelVisitor=vg;exports.KosObservableData=wc;exports.KosRegistration=Bg;exports.KosSingletonRegistration=Kg;exports.KosTime=ur;exports.KosTimeContext=li;exports.KosTimeProvider=iE;exports.KosTimeServices=rb;exports.KosTimer=wd;exports.KosToken=gl;exports.KosTranslationProvider=fE;exports.KosTranslations=Hu;exports.KosWSTransportStatus=nl;exports.KosWsEvents=xs;exports.LOADER_FEATURE_FLAG=af;exports.LOGIN_HOST=ma;exports.LOGIN_URL=Ch;exports.LoadingMessage=$d;exports.LogBlock=Ts;exports.LogBlockContainer=Wr;exports.LogConfig=ls;exports.LogStream=gs;exports.LogStreamContainer=Ls;exports.LogStreamServices=pb;exports.LoggerSetup=cn;exports.MODEL_DELETION_DELAY=cl;exports.MiddlewareChain=dl;exports.ModelEffects=et;exports.MultipleFutureContainerSetup=nn;exports.MultipleFutureHandler=bc;exports.NestedModelContext=eo;exports.NetworkInterface=Jn;exports.NetworkInterfaceContainer=Is;exports.NetworkInterfaceServices=nw;exports.ObservableData=Se;exports.Ota=gr;exports.OutsideAlerter=CE;exports.PLUGIN_EXTENSION_NAME=Wh;exports.PORT=ya;exports.PROFILE_LOG_DEBUG=Ya;exports.PROFILE_LOG_INFO=Wa;exports.PROFILE_RELAX_STORE_VALIDATION=Zh;exports.PROFILE_TOOLS_PREVIEW=qa;exports.ParentModel=cs;exports.PluginExtensionManager=Qh;exports.ProgressBar=Hw;exports.ReferenceConfig=Ws;exports.RegionInfo=re;exports.RegionServices=nm;exports.RegistrationManager=D;exports.Registry=_w;exports.ResponseRetention=ue;exports.STATUS=zo;exports.ServiceFactory=oe;exports.ServiceRequestHandlers=tt;exports.SingletonKosModelRegistrationFactory=_e;exports.SoftwareInfo=mr;exports.SoftwareInfoContext=di;exports.SoftwareInfoProvider=lE;exports.SoftwareInfoServices=Qb;exports.StateBean=Ss;exports.StateBeanServices=tv;exports.StateProp=Gn;exports.StatePropServices=dv;exports.StorageDevice=$r;exports.StorageDeviceContainer=Pt;exports.StorageDeviceServices=uw;exports.StudioProperties=_M;exports.StudioPropertiesServices=wM;exports.SubscriptionHandlers=ee;exports.TIMER_END=ii;exports.TIMER_EVENT=oi;exports.TOPIC_TIMER_TICK_EVENT=ni;exports.TimerManager=Ed;exports.TokenContext=Ud;exports.TokenProvider=dE;exports.Topics=ps;exports.Trans=NE;exports.TransitionMap=Qs;exports.Transitions=fn;exports.Translation=vr;exports.TranslationContainer=Ne;exports.TranslationContainerContext=hi;exports.TranslationContext=Ev;exports.TransportFactory=Io;exports.Trouble=_s;exports.TroubleAwareSetup=an;exports.TroubleContainer=xt;exports.TroubleServices=Pb;exports.Troubles=pe;exports.UsbUpdate=si;exports.UsbUpdateContainer=$s;exports.UsbUpdateServices=bw;exports.WS_EVENT_TYPE=zu;exports.WebSocketEvents=fs;exports.WebSocketTransport=Tt;exports.WsEventFactory=Yn;exports.acceptOrgInvitation=Od;exports.addDaysToDate=Ua;exports.addFuture=Ll;exports.addMonthsToDate=Na;exports.api=Bl;exports.applyMixins=Nh;exports.arraysEqual=Uh;exports.buildConfigBeanModel=Xg;exports.buildFuture=Dn;exports.buildFutureModel=Nl;exports.cancelFuture=Fl;exports.checkAppsStarted=Gg;exports.clearAllServiceResponses=kg;exports.clearPath=Rg;exports.clearServiceResponse=Pg;exports.convert=On;exports.convertFileSizeRaw=Fh;exports.convertWithUnits=dm;exports.createBaseMessage=Qc;exports.createBroadcastMessageResponse=el;exports.createCancellablePromise=Fw;exports.createClient=mn;exports.createFosBaseMessage=Wc;exports.createHeaders=Yt;exports.createKosHtpMessageResponse=tl;exports.createKosMessage=Xc;exports.createKosMessageResponse=sl;exports.createMessageBody=qe;exports.createModelDependency=Nc;exports.createOptionKey=ff;exports.createPropKey=it;exports.createReadableStream=Wt;exports.createStudioMessage=Yc;exports.createStudioMessageRequest=Zc;exports.createStudioMessageResponse=Jc;exports.debounce=Va;exports.del=fc;exports.deleteFuture=kl;exports.destroyKosModel=st;exports.evaluateScopes=_l;exports.executeChildrenModelLifecycle=Bc;exports.executeDependentModelLifecycle=qt;exports.executeListLifecycle=jc;exports.extractTrailingWildcard=$c;exports.fetchModel=_E;exports.findModel=Af;exports.findModels=Tc;exports.formatDate=Ka;exports.formatDateSince=Fa;exports.formatDateTime=za;exports.formatTime=Ha;exports.get=hc;exports.getAllKosCompanionModels=_c;exports.getCalendarMonthArray=Jd;exports.getConfigBean=Tl;exports.getDayStrings=eh;exports.getDays=ZE;exports.getDaysArray=Wd;exports.getDaysInMonth=tn;exports.getDependenciesByLifecycle=Uc;exports.getFormattedDate=XE;exports.getFormattedMonth=JE;exports.getFormattedMonthsArray=pi;exports.getFormattedYear=be;exports.getFormattedYearsArray=Xd;exports.getFutures=$m;exports.getHttpRouteHandlers=pc;exports.getKosCompanionModel=Pf;exports.getKosLocalizationDescriptor=Nu;exports.getKosMessageLogging=Ja;exports.getKosModel=Mc;exports.getKosModelSync=Ie;exports.getKosModelType=Df;exports.getKosSessionKey=fl;exports.getLastDayOfMonth=is;exports.getLocalizationDescriptor=fv;exports.getLogLevel=Xa;exports.getLogMessageToStudio=ec;exports.getMessageBody=So;exports.getMonthsArray=Qd;exports.getObservableCompanions=Rf;exports.getQueryParams=me;exports.getServiceResponse=Dg;exports.getStartedApps=qg;exports.getTranslations=Fu;exports.getYearsArray=Zd;exports.hasCachedResponse=Ag;exports.hasDecimals=El;exports.hasHttpRouteHandlers=rr;exports.hasKosProfile=Eo;exports.hasTrailingWildcard=Cc;exports.hslStringToHex=cc;exports.hslToHex=ac;exports.httpDelete=Ef;exports.initKosProvider=eE;exports.isBoolean=_n;exports.isKosCompanionTypeFactory=al;exports.isKosDataModel=hs;exports.isKosExecutionContext=un;exports.isKosLoggingEnabled=ef;exports.isKosModel=Te;exports.isKosModelContainer=pn;exports.isKosModelReady=or;exports.isLeapYear=en;exports.isLocalRefId=Fg;exports.isNumber=Ur;exports.isPrintable=sp;exports.isTroubleAware=Mv;exports.isValidDate=ns;exports.kosAction=J;exports.kosAutoEffect=W;exports.kosChild=$e;exports.kosCompanion=gf;exports.kosComputed=wn;exports.kosConfigBean=jr;exports.kosConfigProperty=Em;exports.kosContainerAware=dc;exports.kosContext=mf;exports.kosDependency=Lt;exports.kosEffect=vl;exports.kosFuture=ai;exports.kosFutureAware=yf;exports.kosLogger=Mf;exports.kosLoggerAware=mc;exports.kosModel=A;exports.kosModelEffect=yc;exports.kosMultipleFutureAware=bf;exports.kosObservable=En;exports.kosParentAware=kr;exports.kosReference=Tf;exports.kosServiceRequest=_f;exports.kosStateBean=Dw;exports.kosStateProp=Aw;exports.kosSubscribe=Yf;exports.kosTopicHandler=K;exports.kosTroubleAware=Sf;exports.kosWhen=$o;exports.login=_d;exports.mapConfigBeanModelToDto=$l;exports.mapDataToModel=Mo;exports.mapDtoToConfigBeanModel=Il;exports.mapDtoToFutureModel=xn;exports.mapDtoToFutureOptions=Cn;exports.mapUpdateDtoToConfigBeanModel=Ol;exports.modelEventTopicFactory=xc;exports.modelFactory=Ft;exports.modelTypeEventTopicFactory=Dc;exports.modifyConfigBean=Ml;exports.modifyFuture=Cm;exports.pairedClientHeartbeat=Tg;exports.pipe=hl;exports.post=As;exports.preloadKosModel=Ff;exports.processId=Hh;exports.processMiddleware=wg;exports.put=wf;exports.registerCompanionModel=Lf;exports.registerCoreModels=md;exports.registerExtensionPoint=Ds;exports.registerHttpRoutes=gp;exports.registerKosModel=Ic;exports.registerLegacyModel=Sc;exports.resetKosModel=xf;exports.resetPassword=Id;exports.resolveBaseUrl=zc;exports.resolveChild=Kc;exports.resolveContainerDeltas=jh;exports.resolveItemListDeltas=Kh;exports.resolveKosCompanion=To;exports.resolveKosContext=jg;exports.resolveKosProfiles=Za;exports.resolveListDeltas=Bh;exports.resolveServiceUrl=ae;exports.resolveVariable=lc;exports.retryWithExponentialBackoff=Sg;exports.sendAsyncIntent=zg;exports.sendBroadcastMessage=Pp;exports.sendIntent=Hg;exports.sendKosHttpMessageResponse=ol;exports.sendKosMessage=xp;exports.sendKosMessageResponse=rl;exports.sendRequest=Ng;exports.sendStudioMessage=Ap;exports.sendStudioMessageRequest=Dp;exports.startPasswordReset=Sd;exports.stringComponentInsert=Vd;exports.studioAcceptOrgInvitation=Lw;exports.studioLogin=Pw;exports.studioResetPassword=kw;exports.studioStartPasswordReset=Rw;exports.subscribeStore=Iw;exports.syncPublish=Ug;exports.transitionToActive=Rc;exports.transitionToInit=Fc;exports.transitionToLoad=Lc;exports.transitionToReady=kc;exports.transitionToUnload=tp;exports.troubleByTypeReducer=vc;exports.troubleDataFactory=Ou;exports.unloadKosModel=Cf;exports.updateCompanionModelRegistration=Mg;exports.updateModelRegistration=Eg;exports.updateRegion=vd;exports.updateTimeZone=No;exports.useAmPmValues=wh;exports.useCalendarDayArray=ch;exports.useConfigBean=YE;exports.useConfigProperty=Yd;exports.useContextModel=Vw;exports.useContextModelHierarchy=Ad;exports.useDateArrays=th;exports.useDateProps=tM;exports.useDateRelativeConfig=sM;exports.useDateRelativeData=dh;exports.useDayNames=ih;exports.useDayOptions=nh;exports.useDays=mi;exports.useDevice=Bd;exports.useFormattedDate=ah;exports.useFormattedTime=Mh;exports.useFunctionWarmup=rM;exports.useHourValues=vh;exports.useKosCore=Fd;exports.useKosDateFormats=nM;exports.useKosModel=X;exports.useKosRegions=mh;exports.useKosTime=ci;exports.useKosTimeContext=aE;exports.useKosTimeFormats=hM;exports.useKosTimeZones=cM;exports.useKosTranslation=KE;exports.useKosTranslationContext=pE;exports.useLocalComputed=fM;exports.useModelFromHierarchy=Ww;exports.useMonths=rh;exports.useMonthsOptions=oh;exports.useMutationObserver=gM;exports.useNetworkInterfaceContainer=Kd;exports.useOta=Hd;exports.usePressGesture=mM;exports.useProjectReload=bh;exports.useRegionTimeProps=yM;exports.useRegionalTimeDate=uh;exports.useSoftwareInfo=ui;exports.useSoftwareInfoContext=uE;exports.useStateProperty=xE;exports.useStorageDeviceContainer=zd;exports.useSuspenseData=Uo;exports.useTimeOptions=Eh;exports.useTimeProps=Th;exports.useTimeValues=jo;exports.useTimer=AE;exports.useTranslationContainer=Gd;exports.useTroubleContainerModel=fi;exports.useTroubleModel=zE;exports.useTroublePresence=VE;exports.useUsbUpdateContainer=qd;exports.useYears=gi;exports.useYearsOptions=sh;exports.uuid=nt;exports.variableToHex=cf;exports.waitForAppToStart=Vg;exports.waitForAppsToStart=bl;exports.waitForRequest=bn;exports.whenReady=de;exports.withDevice=TE;exports.withKosTime=SE;exports.withNetworkInterfaceContainer=IE;exports.withOta=OE;exports.withProjectReloading=bM;exports.withSoftwareInfo=cE;exports.withStorageDeviceContainer=DE;exports.withTranslationContainer=HE;exports.withTroubleContainer=GE;exports.withUsbUpdateContainer=qE;exports.wrapPromise=Xo;
197
+ `,Ud=()=>{const t=Ir.type;return Z({modelId:t,modelType:Ir.type,options:{}})};function CE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ud();return T.jsx(o,{...r,children:T.jsx(t,{...e,device:s})})}}function DE(t,e,s){const r=new Promise(o=>{O.getInstance().whenReady().then(()=>{const{model:n}=O.getInstance().modelManager.createModelInstance(t,e??t,s);return n.whenReady().then(()=>{o(n.modelData)})})});return Xo(r)}function xE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=ci();return T.jsx(o,{...r,children:T.jsx(t,{...e,kosTime:s})})}}const jd=()=>{const t=Is.type;return Z({modelId:t,modelType:Is.type,options:{}})};function AE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=jd();return T.jsx(o,{...r,children:T.jsx(t,{...e,networkInterfaceContainer:s})})}}const Bd=()=>{const t=mr.type;return Z({modelId:t,modelType:mr.type,options:{}})};function RE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Bd();return T.jsx(o,{...r,children:T.jsx(t,{...e,oTA:s})})}}function PE(t,e){g.useEffect(()=>{function s(o){t.current&&!t.current.contains(o.target)&&e()}function r(o){o.key==="Escape"&&e()}return document.addEventListener("mousedown",s),document.addEventListener("keydown",r,!1),()=>{document.removeEventListener("mousedown",s),document.removeEventListener("keydown",r,!1)}},[t,e])}function kE(t){const e=g.useRef(null),s=t.onAlert;return PE(e,s),T.jsx("div",{ref:e,style:{width:"100%"},children:t.children})}const LE=t=>{var u;const{stateProp:e}=t,[s,r]=g.useState((u=t.stateProp)==null?void 0:u.value),[o,n]=g.useState(!1),[i,a]=g.useState(void 0);return g.useEffect(()=>{async function d(h){try{h&&(await de(h),n(!0))}catch(f){a(f.message)}}d(e)},[e]),g.useEffect(()=>{const d=W(()=>{e&&o&&r(e.value)});return()=>{d()}},[o,e]),[s,{ready:o,error:i}]},Kd=()=>{const[t,e]=g.useState(!1),[s,r]=g.useState([]),o=At.type,n=Z({modelId:o,modelType:At.type,options:{}});return g.useEffect(()=>{const i=W(()=>{var a,c;e(((a=n.model)==null?void 0:a.isStorageInserted)??!1),r(((c=n.model)==null?void 0:c.data)??[])});return()=>{i()}},[n.model]),{...n,inserted:t,devices:s}};function FE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Kd();return T.jsx(o,{...r,children:T.jsx(t,{...e,storageDeviceContainer:s})})}}const vo=m.createLogger({name:"use-timer"}),NE=({timerName:t,onTimerExpired:e,onTimerTick:s,timerEventActions:r,autoStart:o})=>{const n=vd.getTimer(t);g.useEffect(()=>{if(!n){console.warn(`Timer with name ${t} does not exist.`);return}const u=C(oi,d=>{const{name:h,action:f,remainingTime:p}=d==null?void 0:d.body;h===t&&(f===ii?e({name:h,action:f,remainingTime:p,timer:n}):r!=null&&r[f]&&r[f]({name:h,action:f,remainingTime:p,timer:n}))});return o&&n.start(),()=>{u.unsubscribe()}},[o,e,r,t,n]),g.useEffect(()=>{if(!n||!s)return;const u=`${ni}/${t}`,d=C(u,h=>{const{name:f,remainingTime:p}=h==null?void 0:h.body;f===t&&s({name:f,remainingTime:p,timer:n})});return()=>{d.unsubscribe()}},[s,t,n]);const i=g.useCallback(()=>{n?n.start():vo.warn(`Timer with name ${t} does not exist.`)},[n,t]),a=g.useCallback(()=>{n?n.reset():vo.warn(`Timer with name ${t} does not exist.`)},[n,t]),c=g.useCallback(()=>{n?n.pause():vo.warn(`Timer with name ${t} does not exist.`)},[n,t]);return{timer:n,start:i,reset:a,pause:c}},UE=t=>{const e=/[\\^$.*+?()[\]{}|]/g;return RegExp(e.source).test(t)?t.replace(e,"\\$&"):t},jE=t=>t instanceof RegExp,BE=t=>typeof t=="string",KE=(t,e,s)=>{if(t===""||e==="")return t;let r=e;jE(r)||(r=new RegExp("("+UE(r)+")","gi"));const o=t.split(r);for(let n=1,i=o.length;n<i;n+=2)o[n]=s(o[n],n);return o},Hd=(t,e,s)=>{let r=t;return Array.isArray(r)||(r=[r]),r.flatMap(o=>BE(o)?KE(o,e,s):o)};function HE(t,e){let s=t;return Object.entries(e).forEach(([r,o])=>{const n=new RegExp(`<${r}>(.*?)</${r}>|<${r}/>`,"g");s=Hd(s,n,(i,a)=>o.type==="br"?T.jsx("br",{}):g.cloneElement(o,{key:`${r}-${a}`},i))}),s}const qE=t=>{const{i18nKey:e,t:s,defaults:r,components:o,values:n={},context:i}=t,a=s(e,{defaultValue:r,data:n,context:i,returnObjects:!0}),c=HE(a,o||{});return T.jsx("span",{className:t.className,children:c})},yt=new Map;function zE(t,e){if(yt.has(t)){const s=yt.get(t);if(s.status==="finished")return s.result;throw s.promise}else{const s=e().then(o=>{yt.set(t,{status:"finished",result:o})},o=>{throw yt.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw yt.set(t,r),s}}function Uo(t,e){return zE(t,e)}const VE=async()=>{const t=await wc(Fe.type);return await de(t.model),t.model},GE=async(t,e,s)=>{const r=t.resolveNamespace(e);await de(r);for(const o of s){const n=t.resolveNamespace(o);await de(n),yt.set(o,{status:"finished",result:n})}return r},YE=(t,e)=>{const s=[t].flat(),[r,...o]=s,n=Uo(Fe.type,VE),i=s.join("__"),a=Uo(i,()=>GE(n,r,o)),c=g.useMemo(()=>({exists:d=>{const h=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.exists(h):!1}}),[e==null?void 0:e.keyPrefix,a]);return{t:g.useCallback((d,h)=>{const f=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.resolveKey(f,h):(m.debug(`Translation model ${t} not ready for key: ${f}`),f)},[e==null?void 0:e.keyPrefix,t,a]),i18n:c}},qd=()=>{const t=Fe.type;return Z({modelId:t,modelType:Fe.type,options:{}})};function WE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=qd();return T.jsx(o,{...r,children:T.jsx(t,{...e,translationContainer:s})})}}const QE=t=>Z({modelId:t,modelType:Ss.type}),fi=()=>Z({modelId:Ct.type,modelType:Ct.type,options:{}}),ZE=({troubleType:t,condition:e})=>{const{model:s}=fi(),[r,o]=g.useState(!1),[n,i]=g.useState([]),a=g.useCallback(()=>{var c,u;return n.length>0&&((c=n[0])!=null&&c.resolvable)?(u=n[0])==null?void 0:u.resolve():Promise.resolve(void 0)},[n]);return g.useEffect(()=>W(()=>{const u=(t?s==null?void 0:s.troubles.getIndexByKey("byType",t):s==null?void 0:s.troubles.data)||[],d=e?u.filter(e):u;o(d.length>0),i(d)}),[e,s,t]),[r,a,n.length>0?n[0]:void 0,n]};function XE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=fi();return T.jsx(o,{...r,children:T.jsx(t,{...e,troubleContainer:s})})}}const zd=()=>{const t=Cs.type,e=Z({modelId:t,modelType:Cs.type,options:{},activate:!0,destroyOnUnmount:!0}),[s,r]=g.useState(!1),[o,n]=g.useState(!1),[i,a]=g.useState([]);return g.useEffect(()=>{const c=W(()=>{var u,d,h;r(((u=e.model)==null?void 0:u.isUsbInserted)??!1),n(((d=e.model)==null?void 0:d.hasAvailableUpdates)??!1),a(((h=e.model)==null?void 0:h.data)??[])});return()=>{c()}},[e.model]),{...e,inserted:s,updateAvailable:o,updates:i}};function JE(t){return e=>{const{model:s,status:r,KosModelLoader:o}=zd();return T.jsx(o,{...r,children:T.jsx(t,{...e,usbUpdateContainer:s})})}}const eM=({path:t,propKey:e})=>{const{status:s}=Z({modelType:bs.type,modelId:t,options:{path:t}}),[r,o]=g.useState(!1),[n,i]=g.useState(),[a,c]=g.useState(""),[u,d]=g.useState(),h=f=>{n&&e&&n.updateProperty(e,f)};return g.useEffect(()=>{var f;s.model&&i(s.model),s.model&&e&&((f=s.model)!=null&&f.props.has(e)?c(s.model.props[e]):d(`property ${e} not found`)),s.ready&&o(s.ready)},[s.ready,s.model,e]),g.useEffect(()=>{e&&M.autorun(()=>{const f=n==null?void 0:n.props[e];c(f||"")})},[n,e]),{config:n,ready:r,value:a,error:u,updateValue:h}},tM=(t,e)=>{switch(e.type){case"UPDATE":return e.payload;default:return t}},Vd=({configProperty:t,optionsTransformer:e})=>{const[s,r]=g.useState(!1),[o,n]=g.useState(""),[i,a]=g.useReducer(tM,{value:String(t==null?void 0:t.value),displayValue:t==null?void 0:t.displayValue,significantValue:t==null?void 0:t.significantValue,unit:t==null?void 0:t.unit,options:t==null?void 0:t.options,mappedOptions:[],updateProperty:t==null?void 0:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}),c=g.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&(t==null||t.updateProperty(d))},[t]);return g.useEffect(()=>{async function u(d){try{d&&(await de(d),r(!0))}catch(h){n(h.message)}}u(t)},[t]),g.useEffect(()=>{const u=W(()=>{if(t&&s){let d=[];e&&(d=e(t.options)),a({type:"UPDATE",payload:{value:String(t.value),displayValue:t.displayValue,significantValue:t.significantValue,unit:t.unit,options:t.options,mappedOptions:d,updateProperty:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}})}});return()=>{u()}},[t,e,s]),{...i,configSelectProps:{onChange:c,value:i.value,options:e?i.mappedOptions||[]:i.options||[]},ready:s,error:o}};function sM(t,e){const s=e??new Date().getFullYear(),r=[31,28,31,30,31,30,31,31,30,31,30,31];return t===1&&(s%4===0&&s%100!==0||s%400===0)?29:r[t]??0}function rM(t,e){return new Date(t,e,0).getDate()}function Gd(t,e){const s=sM(e,t),r=[];for(let o=1;o<=s;o++)r.push(o);return r}function Yd(){return[...Array(12).keys()].map(e=>new Date(0,e).getMonth())}function Wd(t=[2018,2028]){const e=[];for(let s=t[0];s<=t[1];s++)e.push(s);return e}function Qd(t,e=[2018,2028]){const s=Wd(e);return t==="long"?s:s.map(r=>Number(r.toString().substring(2)))}function pi(t="numeric",e="en-US"){const s=new Intl.DateTimeFormat(e,{month:t,timeZone:"UTC"}).format;return[...Array(12).keys()].map(r=>s(new Date(Date.UTC(0,r,1))))}function oM({locale:t="en-US",year:e,month:s,day:r,formatOptions:o={weekday:"long",year:"numeric",month:"long",day:"numeric"},displayOrder:n}){const i=s-1,a=new Date(e,i,r),c=new Intl.DateTimeFormat(t,{month:o.month}).format(a),u=new Intl.DateTimeFormat(t,{year:o.year}).format(a),d=new Intl.DateTimeFormat(t,{day:o.day}).format(a);return n?n=="MMDDYY"?`${c} ${d} ${u}`:n==="DDMMYY"?`${d} ${c} ${u}`:n==="YYMMDD"?`${u} ${c} ${d}`:`${u} ${d} ${c}`:new Intl.DateTimeFormat(t,o).format(a)}function be(t){return t.toString().length===2?new Date(Date.parse(`01 Jan 20${t}`)).getFullYear():t}function nM(t){return typeof t=="string"?new Date(Date.parse(`01 ${t.substring(0,3)} 2023`)).getMonth()+1:t}function Zd(t,e,s){const r=be(e),o=new Date(r,t,1).getDay(),n=new Date(r,t+1,0).getDate();return[...Array(42).keys()].map(a=>a<o||a>n+o-1?{label:"",value:0,disabled:!0}:s[a-o])}function is(t,e,s){const r=e-1,o=new Date(t,r,s);return new Date(o).getMonth()===r&&new Date(o).getDate()===s}function as(t,e){return new Date(t,e,0).getDate()}function Xd(t="en-US",e="short"){const s=new Intl.DateTimeFormat(t,{weekday:e}).format;return[...Array(7).keys()].map(r=>s(new Date(Date.UTC(2021,5,r))))}function Jd({locale:t="en-US",year:e=new Date().getFullYear(),month:s=new Date().getMonth(),yearRange:r=[2018,2028],daysOfWeekFilter:o=[],formatOptions:{yearFormat:n="long",monthFormat:i="long",dayFormat:a="short"}={}}){const c=gi(n,r),u=eh(n,r,t),d=th(i,t),h=sh(i,t),f=mi(e,s),p=rh(e,s,t,o),y=ih(s,e,p),w=oh(t,a);return{daysArray:f,monthsArray:d,yearsArray:c,yearsOptionsArray:u,monthsOptionsArray:h,daysOptionsArray:p,calendarDayArray:y,dayNamesArray:w}}function gi(t="long",e=[2018,2028]){return g.useMemo(()=>Qd(t,e),[t,e])}function eh(t="long",e=[2018,2028],s="en-US"){const r=gi(t,e);return g.useMemo(()=>r.map(n=>({label:n.toLocaleString(s).replace(",",""),value:n})),[s,r])}function th(t,e="en-US"){return g.useMemo(()=>pi(t,e),[t,e])}function sh(t,e="en-US"){const s=g.useMemo(()=>Yd(),[]),r=g.useMemo(()=>pi(t,e),[t,e]);return g.useMemo(()=>[...Array(12).keys()].map(n=>({label:r[n],value:Number(s[n])})),[r,s])}function mi(t,e){const s=be(t);return g.useMemo(()=>Gd(s,e),[e,s])}const iM=(t,e,s,r=[])=>{const o=new Date(t,e,s).getDay();return r.length>0&&r.includes(o)};function rh(t,e,s="en-US",r=[]){const o=mi(t,e);return g.useMemo(()=>o.map(i=>({label:i.toLocaleString(s),value:i,disabled:iM(t,e,i,r)})),[r,s,e,o,t])}function oh(t="en-US",e="short"){return g.useMemo(()=>Xd(t,e),[t,e])}function nh({year:t=new Date().getFullYear(),month:e=new Date().getMonth(),day:s=new Date().getDate(),formatString:r}){const o=e,n=new Date(t,o,s);return{formattedDate:je.format(n,r)}}function ih(t,e,s){return g.useMemo(()=>Zd(t,e,s),[t,e,s])}var ah=(t=>(t.MMDDYY="MMDDYY",t.DDMMYY="DDMMYY",t.YYMMDD="YYMMDD",t.YYDDMM="YYDDMM",t))(ah||{});function aM({locale:t="en-US",date:{year:e=new Date().getFullYear(),month:s=new Date().getMonth(),day:r=new Date().getDate()}={year:new Date().getFullYear(),month:new Date().getMonth(),day:new Date().getDate()},formatOptions:{yearFormat:o="long",monthFormat:n="long",dayFormat:i="short",formatString:a="yyyy/MM/dd"}={},filterOptions:{yearsRange:c=[2018,2028],daysOfWeekFilter:u=[]}={}}){const[d,h]=g.useState(e),[f,p]=g.useState(c),[y,w]=g.useState(s),[E,_]=g.useState(r);g.useEffect(()=>{h(e)},[e]),g.useEffect(()=>{w(s)},[s]),g.useEffect(()=>{_(r)},[r]);const{yearsArray:k,yearsOptionsArray:R,monthsArray:I,monthsOptionsArray:S,daysArray:H,daysOptionsArray:q,calendarDayArray:J,dayNamesArray:qt}=Jd({locale:t,year:d,yearRange:f,month:y,formatOptions:{yearFormat:o,monthFormat:n,dayFormat:i},daysOfWeekFilter:u}),{formattedDate:zt}=nh({year:d,month:y,day:E,formatString:a});return{dateActions:{setYear:h,setYearRange:p,setMonth:w,setDay:_,nextMonth:()=>{const se=y<11?be(d):be(d+1),ce=y<11?y+1:0;if(!is(se,ce,E)){const Ve=as(se,ce);_(Ve)}ce===0&&h(se),w(ce)},previousMonth:()=>{const se=be(y===0?d-1:d),ce=y===0?11:y-1;if(!is(se,ce,E)){const Ve=as(se,ce);_(Ve)}ce===11&&h(se),w(ce)},nextYear:()=>{const se=d<f[1]?d+1:f[0],ce=be(se);if(is(ce,y,E))h(se);else{const Ve=as(be(d+1),y);_(Ve),h(se)}},previousYear:()=>{const se=d>f[0]?d-1:f[0],ce=be(se);if(is(ce,y,E))h(se);else{const Ve=as(be(d-1),y);_(Ve),h(se)}}},dateState:{year:d,yearRange:f,month:y,day:E,yearsArray:k,yearsOptionsArray:R,monthsArray:I,monthsOptionsArray:S,daysArray:H,daysOptionsArray:q,calendarDayNames:qt,calendarDayArray:J,formattedDate:zt}}}function ch({date:t=new Date,dateFormat:e,timeFormat:s,options:r={}}){const[o,n]=g.useState("Formatting Time..."),[i,a]=g.useState("Formatting Date..."),c=!!r.ignoreDateFormat,{model:u,ready:d}=Z({modelId:re.type,modelType:re.type,options:{}}),h=typeof t=="string"?je.parseISO(t):t;return g.useEffect(()=>{c?a(""):e?a(je.format(h,e)):d&&a(je.format(h,u!=null&&u.selectedDateFormat?u==null?void 0:u.selectedDateFormat:""))},[c,t,e,h,u,d]),g.useEffect(()=>{s?n(je.format(h,s)):d&&n(je.format(h,u!=null&&u.selectedTimeFormat?u==null?void 0:u.selectedTimeFormat:""))},[t,s,h,u,d]),{formattedDate:i,formattedTime:o}}const lh=({secondsFromMidnight:t=0})=>{const[e,s]=g.useState(0),[r,o]=g.useState(0),[n,i]=g.useState(0),[a,c]=g.useState(new Date),{formattedTime:u}=ch({date:a,options:{ignoreDateFormat:!0}});return g.useEffect(()=>{const d=Number(t),h=Math.floor(d/3600),f=Math.floor(d%3600/60),p=d%60;s(h),o(f),i(p);const y=new Date;y.setHours(0,0,0,0);const w=new Date(y.getTime()+d*1e3);c(new Date(w))},[t]),{hours:e,minutes:r,seconds:n,formattedTime:u,timeActions:{setHours:s,setMinutes:o,setSeconds:i}}},cM=({configProperty:t})=>{const{value:e}=Vd({configProperty:t}),s=parseInt(e||"0",10),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}=lh({secondsFromMidnight:s}),c=g.useRef();return g.useEffect(()=>{const u=r*3600+o*60+n;return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{t&&t.updateProperty(u.toString())},100),()=>{c.current&&clearTimeout(c.current)}},[t,r,o,n]),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}};function lM(t,e={}){const{intervalMs:s=5*60*1e3,immediate:r=!0}=e;g.useEffect(()=>{const o=()=>{try{t({__warmup:!0})}catch{}};r&&("requestIdleCallback"in window?requestIdleCallback(o):setTimeout(o,1));const n=s?setInterval(o,s):null;return()=>{n&&clearInterval(n)}},[t,s,r])}const uM=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),dM=(t=uM)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=Z({modelType:re.type,modelId:re.type,options:{}});g.useEffect(()=>{const c=W(()=>{s((n==null?void 0:n.dateFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=W(()=>{n!=null&&n.dateFormatId&&(n!=null&&n.selectedDateFormat)&&o({id:n==null?void 0:n.dateFormatId,value:n==null?void 0:n.selectedDateFormat})});return()=>{c()}},[n==null?void 0:n.selectedDateFormat,n==null?void 0:n.dateFormatId]);const a=g.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedDateFormat(u))},[n]);return{raw:(n==null?void 0:n.dateFormatOptions.map(c=>c.id))??[],regionModel:n,selectedDateFormat:(r==null?void 0:r.value)||"",dateFormatId:(r==null?void 0:r.id)||"",updateDateFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)||"",options:e}}},hM=t=>T.jsx("option",{title:t,value:t,children:t},t),uh="kos:service:region:settings",dh="timeZone",fM=`${uh}-${dh}`,pM=(t=hM)=>{const[e,s]=g.useState([]),[r,o]=g.useState(""),{model:n,ready:i}=Z({modelType:re.type,modelId:re.type,options:{}}),a=it.factory(fM)({path:uh,attribute:dh});g.useEffect(()=>{const u=W(()=>{s((n==null?void 0:n.timeZones.map(t))||[]),n!=null&&n.timeZones.length&&No(n==null?void 0:n.timeZones[0])});return()=>{u()}},[n,i,t]),g.useEffect(()=>{const u=W(()=>{o(a.value||"")});return()=>{u()}},[a.value]);const c=g.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&No(d)},[]);return{options:e,raw:(n==null?void 0:n.timeZones)??[],regionModel:n,selectedTimeZone:r,timeZones:(n==null?void 0:n.timeZones)??[],updateTimeZone:c,selectProps:{onChange:c,value:r,options:e}}},hh="kos:service:region",fh="regionId",gM=`${hh}-${fh}`,mM=t=>T.jsx("option",{title:t,value:t,children:t},t),ph=(t=mM)=>{const[e,s]=g.useState([]),[r,o]=g.useState("factory"),{model:n,ready:i}=Z({modelType:re.type,modelId:re.type,options:{}}),a=it.factory(gM)({path:hh,attribute:fh});g.useEffect(()=>{const u=W(()=>{s((n==null?void 0:n.availableRegions.map(t))||[])});return()=>{u()}},[n,i,t]),g.useEffect(()=>{const u=W(()=>{o(a.value||"factory")});return()=>{u()}},[a.value]);const c=g.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&yd(d)},[]);return{raw:(n==null?void 0:n.availableRegions)??[],regionModel:n,regionData:n==null?void 0:n.selectedRegion,selectedRegion:r,updateRegion:c,regionSelectProps:{onChange:c,value:r,options:e}}},yM=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),bM=(t=yM)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=Z({modelType:re.type,modelId:re.type,options:{}});g.useEffect(()=>{const c=W(()=>{s((n==null?void 0:n.timeFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=W(()=>{n!=null&&n.timeFormatId&&(n!=null&&n.selectedTimeFormat)&&o({id:n==null?void 0:n.timeFormatId,value:n==null?void 0:n.selectedTimeFormat})});return()=>{c()}},[n==null?void 0:n.selectedTimeFormat,n==null?void 0:n.timeFormatId]);const a=g.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedTimeFormat(u))},[n]);return{raw:(n==null?void 0:n.timeFormatOptions.map(c=>c.id))??[],regionModel:n,selectedTimeFormat:(r==null?void 0:r.value)??"",timeFormatId:(r==null?void 0:r.id)??"",updateTimeFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)??"",options:e}}},vM=(t,e)=>g.useMemo(()=>wn(t),e),wM={config:{attributes:!0,childList:!0,subtree:!0}};function EM(t,e,s=wM){const[r,o]=g.useState(null);g.useEffect(()=>{if(!e||typeof e!="function")throw new Error("A valid callback function is required");const n=new MutationObserver(e);o(n)},[e,s,o]),g.useEffect(()=>{if(!r)return()=>{};if(!t)throw new Error("A valid DOM element is required");const{config:n}=s;try{r.observe(t,n)}catch(i){m.error(i)}return()=>{r&&r.disconnect()}},[r,t,s])}const gh={validateStart:function(t){return!0},validateStop:function(t){const e=t.event.currentTarget.getBoundingClientRect(),[s,r]=t.xy;return s<e.left||s>e.right||r<e.top||r>e.bottom}},wo=m.createLogger({name:"usePressGesture",group:"kos-hooks"});function MM({onPressed:t,onRelease:e,intersectionStrategy:s=gh}){const r=g.useRef(!1),o=Oh.useGesture({onDragStart:c=>{wo.info("onDragStart",c.type),s.validateStart(c)&&(t&&t(),r.current=!0)},onDrag:c=>{wo.info("onDrag",c.type),r.current&&s.validateStop(c)&&(e&&e(),r.current=!1)},onDragEnd:c=>{wo.info("onDragEnd",c.type),r.current&&e&&(e(),r.current=!1)}}),n=()=>{t&&t(),r.current=!0},i=()=>{r.current&&e&&(e(),r.current=!1)},a=()=>{r.current&&e&&(e(),r.current=!1)};return{dom:o,mesh:()=>({onPointerDown:n,onPointerUp:i,onPointerOut:a})}}const mh=()=>{const[t,e]=g.useState(!1),s=O.getInstance();return g.useEffect(()=>{const r=W(()=>{s&&s.reloading!==t&&e(s.reloading)});return()=>{r()}},[s,t]),[t]};function yh(t=!1,e="2-digit"){return g.useMemo(()=>{const s=t?12:24;return Array.from({length:s},(r,o)=>{const n=t&&o===0?12:o%s;return{id:o,label:e==="2-digit"?n.toString().padStart(2,"0"):n.toString()}})},[e,t])}function jo(t,e="2-digit",s=0,r=0){return g.useMemo(()=>Array.from({length:t},(o,n)=>{const i=String(n+s);return{id:n+r,label:e==="2-digit"?i.padStart(2,"0"):i}}),[t,s,r,e])}function bh(t="en-US"){return g.useMemo(()=>["AM","PM"].map(e=>{const s=new Intl.DateTimeFormat(t,{hour:"2-digit",hour12:!0}).formatToParts(new Date().setHours(e==="AM"?0:12))[2].value;return{id:s,label:s}}),[t])}function vh({formatOptions:{hour12:t=!0,hour:e="2-digit",minute:s="2-digit",second:r="2-digit"}={hour12:!0,hour:"2-digit",minute:"2-digit",second:"2-digit"},locale:o="en-US"}){const n=yh(t,e),i=jo(60,s),a=jo(60,r),c=bh(o);return{hourOptions:n,minuteOptions:i,secondOptions:a,amPmOptions:c}}function wh(t,e){return je.format(t,e)}function Eh({formatOptions:t,initialDate:e=new Date,locale:s="en-US",format:r="HH:mm"}){const[o,n]=g.useState(e),i=g.useCallback(w=>{n(E=>{const _=new Date(E);return _.setHours(Number(w)),_})},[]),a=g.useCallback(w=>{n(E=>{const _=new Date(E);return _.setMinutes(Number(w)),_})},[]),c=g.useCallback(w=>{n(E=>{const _=new Date(E);return _.setSeconds(Number(w)),_})},[]),u=g.useCallback(w=>{const E=new Date(w);n(E)},[]),d=wh(o,r),{hourOptions:h,minuteOptions:f,secondOptions:p,amPmOptions:y}=vh({formatOptions:t,locale:s});return{amPmOptions:y,formattedTime:d,hourOptions:h,minuteOptions:f,secondOptions:p,setHours:i,setMinutes:a,setSeconds:c,setTime:u,time:new Date(o)}}const TM=t=>{const{regionModel:e}=ph(),s=g.useMemo(()=>({hour12:e==null?void 0:e.is12HourTimeFormat}),[e==null?void 0:e.is12HourTimeFormat]);return Eh({...t,locale:e==null?void 0:e.regionId,format:e==null?void 0:e.selectedTimeFormat,formatOptions:s})};function _M(t){return e=>{const[s]=mh();return s?T.jsx(Od,{message:"Wait a moment while your project reloads..."}):T.jsx(t,{...e})}}const na=m.createLogger({name:"studio-properties-service",group:"Services"}),SM="/api/kos/studio/properties",Mh=async t=>{if(na.debug("sending GET for studio-properties"),!t)throw na.error("connectionId is undefined"),new Error("connectionId is undefined");return await De.get(SM,{},{destinationAddress:t,timeout:500})},OM=Object.freeze(Object.defineProperty({__proto__:null,getStudioProperties:Mh},Symbol.toStringTag,{value:"Module"}));var IM=Object.getOwnPropertyDescriptor,$M=(t,e,s,r)=>{for(var o=r>1?void 0:r?IM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Th="studio-properties-model",CM="/kos/studio/properties",ia={"kos.studio.tool.legacy":1};let Bo=class{constructor(t,e,s){l(this,"id");l(this,"connectionId");l(this,"unsubscribe",null);l(this,"logger");l(this,"data");this.id=t,this.logger=s.logger,this.data=Se(),this.connectionId=e.connectionId}async init(){this.logger.debug(`initializing studio-properties ${this.id}`)}async load(){this.logger.debug(`loading studio-properties ${this.id}`)}async terminatePropertiesSession(){var t;(t=this.unsubscribe)==null||t.call(this)}async initializePropertiesSession(){this.unsubscribe=Mt.getInstance().subscribeTopic({topic:CM,destinationAddress:this.connectionId,callback:s=>{this.logger.error(`Received studio-properties message for connection ${this.connectionId}: ${JSON.stringify(s)}`)}});const[t,e]=await Mh(this.connectionId);if(t){this.logger.error(`Error loading studio-properties: ${t}`),this.data.setValues(ia);return}if(e){const s=Object.keys(e).reduce((r,o)=>(r[o]=e[o]??o,r),{});this.data.setValues(s??ia),m.ifDebug(()=>this.logger.debug(`studio-properties loaded: ${JSON.stringify(s)}`))}}get(t){return this.data[t]}createObservableProperty(t){return wn(()=>this.get(t))}};Bo=$M([A(Th)],Bo);const DM=new ye({class:Bo,type:Th});Object.defineProperty(exports,"makeAutoObservable",{enumerable:!0,get:()=>M.makeAutoObservable});Object.defineProperty(exports,"makeObservable",{enumerable:!0,get:()=>M.makeObservable});Object.defineProperty(exports,"kosComponent",{enumerable:!0,get:()=>Ho.observer});exports.AuthState=cl;exports.BrowserKosRouter=pl;exports.BrowserRouter=An;exports.CanvasDispatcher=xt;exports.CanvasDispatcherServices=Pv;exports.CanvasRenderer=Qn;exports.CanvasStreamer=OE;exports.CanvasStreamerBase=Nd;exports.ChildModels=Be;exports.CompanionParentModel=Et;exports.ConfigBean=bs;exports.ContainerAwareSetup=ln;exports.CoreExtensionManager=xw;exports.CoreModels=ri;exports.CreateModelTranslationsContext=Rd;exports.CreateModelTranslationsProvider=oE;exports.DateDisplayFormat=ah;exports.DateHelpers=Kh;exports.DependencyLifecycle=U;exports.DependencyModels=F;exports.Device=Ir;exports.DeviceServices=sw;exports.DomIntersectionStrategy=gh;exports.EVENT_KOS_MODEL_READY=Go;exports.EVENT_TROUBLE_ADDED=em;exports.EVENT_TROUBLE_REMOVED=tm;exports.EXTENSION_CANVAS_RENDERER=te;exports.EXTENSION_FEATURE_FLAG_RESOLVER=sc;exports.EXTENSION_TROUBLE_DATA_MAPPER=pr;exports.EXTENSION_TROUBLE_MAPPER=Ns;exports.ErrorBoundaryWithFallback=Id;exports.EventBus=Dh;exports.EventBusFunctional=Ah;exports.EventBusState=Ph;exports.ExtensionManager=$;exports.FUTURE_CONTAINER_MODEL_TYPE=Kl;exports.FUTURE_MODEL_TYPE=Al;exports.FUTURE_NOT_ASSIGNED=Mn;exports.FeatureFlagService=rc;exports.FetchError=ge;exports.FutureAliases=ds;exports.FutureContainerFactory=He;exports.FutureContainerModel=ql;exports.FutureContainerSetup=on;exports.FutureEndState=Ke;exports.FutureFactory=Nt;exports.FutureHandler=Ur;exports.FutureManager=st;exports.FutureModel=Nl;exports.FutureService=cs;exports.HEADER_CACHE_CONTROL=ha;exports.HEADER_CONTENT_TYPE=da;exports.HEADER_DESTINATION_ADDR=Ne;exports.HEADER_FOS_REQUEST_ID=fa;exports.HEADER_METHOD=xr;exports.HEADER_ORDERED=zo;exports.HEADER_REQUEST_ID=Ds;exports.HEADER_REQUEST_TYPE=Ie;exports.HEADER_RESPONSE_ID=Ar;exports.HEADER_SOURCE_ADDR=ua;exports.HEADER_TOPIC=la;exports.HEADER_URL=Pt;exports.HEADER_WORK_TRACKER=Vo;exports.HttpRouteHandlers=Re;exports.KOS_EXECUTION_CONTEXT=Fr;exports.KOS_MODEL_ID=sr;exports.KeyValue=kn;exports.KeyValueServices=Wm;exports.Kos=ie;exports.KosConfigPropertySpec=it;exports.KosContainerIndex=dn;exports.KosContextBean=hl;exports.KosContextManager=Y;exports.KosCore=O;exports.KosCoreModelPropertyMapper=ve;exports.KosDataContainer=vn;exports.KosDependencyTypes=yf;exports.KosExpressionEvaluator=tu;exports.KosExtensionUtils=Vh;exports.KosFeatureFlags=oc;exports.KosFetchMethods=zc;exports.KosGlobalConfig=sn;exports.KosHttpRouteManager=gn;exports.KosLog=m;exports.KosLogManager=ou;exports.KosLogManagerServices=sb;exports.KosMockEvents=ma;exports.KosModel=ol;exports.KosModelCollectionProvider=Jw;exports.KosModelContainer=Ce;exports.KosModelContext=eo;exports.KosModelEvents=L;exports.KosModelFactory=hs;exports.KosModelLoader=xd;exports.KosModelLoaderDisplay=Ad;exports.KosModelManager=al;exports.KosModelProvider=$d;exports.KosModelRegistrationFactory=ye;exports.KosModelRegistry=Fo;exports.KosModelState=v;exports.KosModelSymbol=rn;exports.KosModelVisitor=Sg;exports.KosObservableData=bc;exports.KosRegistration=Gg;exports.KosSingletonRegistration=Yg;exports.KosTime=dr;exports.KosTimeContext=li;exports.KosTimeProvider=hE;exports.KosTimeServices=lb;exports.KosTimer=bd;exports.KosToken=fl;exports.KosTranslationProvider=vE;exports.KosTranslations=Bu;exports.KosWSTransportStatus=rl;exports.KosWsEvents=xs;exports.LOADER_FEATURE_FLAG=of;exports.LOGIN_HOST=pa;exports.LOGIN_URL=Ih;exports.LoadingMessage=Od;exports.LogBlock=_s;exports.LogBlockContainer=Qr;exports.LogConfig=us;exports.LogStream=ms;exports.LogStreamContainer=Fs;exports.LogStreamServices=wb;exports.LoggerSetup=cn;exports.MODEL_DELETION_DELAY=il;exports.MiddlewareChain=ll;exports.ModelEffects=Je;exports.MultipleFutureContainerSetup=nn;exports.MultipleFutureHandler=mc;exports.NestedModelContext=to;exports.NetworkInterface=Jn;exports.NetworkInterfaceContainer=Is;exports.NetworkInterfaceServices=dw;exports.ObservableData=Se;exports.Ota=mr;exports.OutsideAlerter=kE;exports.PLUGIN_EXTENSION_NAME=Gh;exports.PORT=ga;exports.PROFILE_LOG_DEBUG=Va;exports.PROFILE_LOG_INFO=Ga;exports.PROFILE_RELAX_STORE_VALIDATION=Wh;exports.PROFILE_TOOLS_PREVIEW=za;exports.ParentModel=ls;exports.PluginExtensionManager=Yh;exports.ProgressBar=Ww;exports.ReferenceConfig=Qs;exports.RegionInfo=re;exports.RegionServices=dm;exports.RegistrationManager=x;exports.Registry=Dw;exports.ReplayStrategy=Xe;exports.ResponseRetention=ue;exports.STATUS=qo;exports.ServiceFactory=oe;exports.ServiceRequestHandlers=et;exports.SingletonKosModelRegistrationFactory=_e;exports.SoftwareInfo=yr;exports.SoftwareInfoContext=di;exports.SoftwareInfoProvider=gE;exports.SoftwareInfoServices=sv;exports.StateBean=Os;exports.StateBeanServices=av;exports.StateProp=Vn;exports.StatePropServices=yv;exports.StorageDevice=Cr;exports.StorageDeviceContainer=At;exports.StorageDeviceServices=mw;exports.StudioProperties=DM;exports.StudioPropertiesServices=OM;exports.SubscriptionHandlers=ee;exports.TIMER_END=ii;exports.TIMER_EVENT=oi;exports.TOPIC_TIMER_TICK_EVENT=ni;exports.TimerManager=vd;exports.TokenContext=Fd;exports.TokenProvider=yE;exports.Topics=gs;exports.Trans=qE;exports.TransitionMap=Zs;exports.Transitions=fn;exports.Translation=wr;exports.TranslationContainer=Fe;exports.TranslationContainerContext=hi;exports.TranslationContext=Iv;exports.TransportFactory=Oo;exports.Trouble=Ss;exports.TroubleAwareSetup=an;exports.TroubleContainer=Ct;exports.TroubleServices=Ub;exports.Troubles=pe;exports.UsbUpdate=si;exports.UsbUpdateContainer=Cs;exports.UsbUpdateServices=_w;exports.WS_EVENT_TYPE=Ku;exports.WebSocketEvents=ps;exports.WebSocketTransport=Mt;exports.WsEventFactory=Yn;exports.acceptOrgInvitation=Sd;exports.addDaysToDate=Fa;exports.addFuture=Pl;exports.addMonthsToDate=La;exports.api=Ul;exports.applyMixins=Lh;exports.arraysEqual=Fh;exports.buildConfigBeanModel=om;exports.buildFuture=xn;exports.buildFutureModel=Ll;exports.cancelFuture=kl;exports.checkAppsStarted=Xg;exports.checkWildcardPattern=Ic;exports.clearAllServiceResponses=Bg;exports.clearPath=jg;exports.clearServiceResponse=Ug;exports.convert=In;exports.convertFileSizeRaw=kh;exports.convertWithUnits=ym;exports.createBaseMessage=Yc;exports.createBroadcastMessageResponse=Xc;exports.createCancellablePromise=Hw;exports.createClient=mn;exports.createFosBaseMessage=Gc;exports.createHeaders=Wt;exports.createKosHtpMessageResponse=Jc;exports.createKosMessage=Qc;exports.createKosMessageResponse=el;exports.createMessageBody=ze;exports.createModelDependency=Lc;exports.createOptionKey=df;exports.createPropKey=nt;exports.createReadableStream=Qt;exports.createStudioMessage=Vc;exports.createStudioMessageRequest=Wc;exports.createStudioMessageResponse=Zc;exports.debounce=Ha;exports.del=dc;exports.deleteFuture=Rl;exports.destroyKosModel=tt;exports.evaluateScopes=Ml;exports.executeChildrenModelLifecycle=Uc;exports.executeDependentModelLifecycle=Yt;exports.executeListLifecycle=Nc;exports.fetchModel=DE;exports.findModel=Df;exports.findModels=Ec;exports.formatDate=ja;exports.formatDateSince=ka;exports.formatDateTime=Ka;exports.formatTime=Ba;exports.get=uc;exports.getAllKosCompanionModels=Mc;exports.getCalendarMonthArray=Zd;exports.getConfigBean=El;exports.getDayStrings=Xd;exports.getDays=rM;exports.getDaysArray=Gd;exports.getDaysInMonth=tn;exports.getDependenciesByLifecycle=Fc;exports.getFormattedDate=oM;exports.getFormattedMonth=nM;exports.getFormattedMonthsArray=pi;exports.getFormattedYear=be;exports.getFormattedYearsArray=Qd;exports.getFutures=Pm;exports.getHttpRouteHandlers=hc;exports.getKosCompanionModel=xf;exports.getKosLocalizationDescriptor=Lu;exports.getKosMessageLogging=Za;exports.getKosModel=wc;exports.getKosModelSync=Oe;exports.getKosModelType=Cf;exports.getKosSessionKey=dl;exports.getLastDayOfMonth=as;exports.getLocalizationDescriptor=vv;exports.getLogLevel=Qa;exports.getLogMessageToStudio=Xa;exports.getMessageBody=So;exports.getMonthsArray=Yd;exports.getObservableCompanions=Af;exports.getQueryParams=me;exports.getServiceResponse=Fg;exports.getStartedApps=Jg;exports.getTranslations=ku;exports.getYearsArray=Wd;exports.hasCachedResponse=Ng;exports.hasDecimals=vl;exports.hasHttpRouteHandlers=or;exports.hasKosProfile=Eo;exports.hslStringToHex=ic;exports.hslToHex=nc;exports.httpDelete=vf;exports.initKosProvider=iE;exports.isBoolean=_n;exports.isKosCompanionTypeFactory=nl;exports.isKosDataModel=fs;exports.isKosExecutionContext=un;exports.isKosLoggingEnabled=Xh;exports.isKosModel=Te;exports.isKosModelContainer=pn;exports.isKosModelReady=nr;exports.isLeapYear=en;exports.isLocalRefId=Hg;exports.isNumber=jr;exports.isPrintable=cp;exports.isTroubleAware=$v;exports.isValidDate=is;exports.kosAction=X;exports.kosAutoEffect=W;exports.kosChild=$e;exports.kosCompanion=ff;exports.kosComputed=wn;exports.kosConfigBean=Br;exports.kosConfigProperty=Im;exports.kosContainerAware=lc;exports.kosContext=pf;exports.kosDependency=kt;exports.kosEffect=yl;exports.kosFuture=ai;exports.kosFutureAware=gf;exports.kosLogger=wf;exports.kosLoggerAware=pc;exports.kosModel=A;exports.kosModelEffect=gc;exports.kosMultipleFutureAware=mf;exports.kosObservable=En;exports.kosParentAware=Lr;exports.kosReference=Ef;exports.kosServiceRequest=Mf;exports.kosStateBean=Fw;exports.kosStateProp=Nw;exports.kosSubscribe=Vf;exports.kosTopicHandler=B;exports.kosTroubleAware=Tf;exports.kosWhen=$o;exports.login=Md;exports.mapConfigBeanModelToDto=Ol;exports.mapDataToModel=Mo;exports.mapDtoToConfigBeanModel=_l;exports.mapDtoToFutureModel=Dn;exports.mapDtoToFutureOptions=Cn;exports.mapUpdateDtoToConfigBeanModel=Sl;exports.modelEventTopicFactory=$c;exports.modelFactory=Lt;exports.modelTypeEventTopicFactory=Cc;exports.modifyConfigBean=wl;exports.modifyFuture=km;exports.pairedClientHeartbeat=Cg;exports.parseWildcardSegment=Oc;exports.pipe=ul;exports.post=Rs;exports.preloadKosModel=kf;exports.processId=Bh;exports.processMiddleware=Og;exports.put=bf;exports.registerCompanionModel=Pf;exports.registerCoreModels=pd;exports.registerExtensionPoint=As;exports.registerHttpRoutes=Ep;exports.registerKosModel=_c;exports.registerLegacyModel=Tc;exports.resetKosModel=$f;exports.resetPassword=_d;exports.resolveBaseUrl=Kc;exports.resolveChild=jc;exports.resolveContainerDeltas=Nh;exports.resolveItemListDeltas=jh;exports.resolveKosCompanion=To;exports.resolveKosContext=Vg;exports.resolveKosProfiles=Wa;exports.resolveListDeltas=Uh;exports.resolveServiceUrl=ae;exports.resolveVariable=ac;exports.retryWithExponentialBackoff=xg;exports.sendAsyncIntent=Qg;exports.sendBroadcastMessage=Up;exports.sendIntent=Wg;exports.sendKosHttpMessageResponse=sl;exports.sendKosMessage=Lp;exports.sendKosMessageResponse=tl;exports.sendRequest=qg;exports.sendStudioMessage=Np;exports.sendStudioMessageRequest=Fp;exports.startPasswordReset=Td;exports.stringComponentInsert=Hd;exports.studioAcceptOrgInvitation=Kw;exports.studioLogin=Uw;exports.studioResetPassword=Bw;exports.studioStartPasswordReset=jw;exports.subscribeStore=Aw;exports.syncPublish=zg;exports.transitionToActive=Ac;exports.transitionToInit=kc;exports.transitionToLoad=Pc;exports.transitionToReady=Rc;exports.transitionToUnload=ap;exports.troubleByTypeReducer=yc;exports.troubleDataFactory=Su;exports.unloadKosModel=If;exports.updateCompanionModelRegistration=$g;exports.updateModelRegistration=Ig;exports.updateRegion=yd;exports.updateTimeZone=No;exports.useAmPmValues=bh;exports.useCalendarDayArray=ih;exports.useConfigBean=eM;exports.useConfigProperty=Vd;exports.useContextModel=Zw;exports.useContextModelHierarchy=Dd;exports.useDateArrays=Jd;exports.useDateProps=aM;exports.useDateRelativeConfig=cM;exports.useDateRelativeData=lh;exports.useDayNames=oh;exports.useDayOptions=rh;exports.useDays=mi;exports.useDevice=Ud;exports.useFormattedDate=nh;exports.useFormattedTime=wh;exports.useFunctionWarmup=lM;exports.useHourValues=yh;exports.useKosCore=kd;exports.useKosDateFormats=dM;exports.useKosModel=Z;exports.useKosRegions=ph;exports.useKosTime=ci;exports.useKosTimeContext=fE;exports.useKosTimeFormats=bM;exports.useKosTimeZones=pM;exports.useKosTranslation=YE;exports.useKosTranslationContext=wE;exports.useLocalComputed=vM;exports.useModelFromHierarchy=tE;exports.useMonths=th;exports.useMonthsOptions=sh;exports.useMutationObserver=EM;exports.useNetworkInterfaceContainer=jd;exports.useOta=Bd;exports.usePressGesture=MM;exports.useProjectReload=mh;exports.useRegionTimeProps=TM;exports.useRegionalTimeDate=ch;exports.useSoftwareInfo=ui;exports.useSoftwareInfoContext=mE;exports.useStateProperty=LE;exports.useStorageDeviceContainer=Kd;exports.useSuspenseData=Uo;exports.useTimeOptions=vh;exports.useTimeProps=Eh;exports.useTimeValues=jo;exports.useTimer=NE;exports.useTranslationContainer=qd;exports.useTroubleContainerModel=fi;exports.useTroubleModel=QE;exports.useTroublePresence=ZE;exports.useUsbUpdateContainer=zd;exports.useYears=gi;exports.useYearsOptions=eh;exports.uuid=ot;exports.variableToHex=nf;exports.waitForAppToStart=Zg;exports.waitForAppsToStart=ml;exports.waitForRequest=bn;exports.whenReady=de;exports.withDevice=CE;exports.withKosTime=xE;exports.withNetworkInterfaceContainer=AE;exports.withOta=RE;exports.withProjectReloading=_M;exports.withSoftwareInfo=pE;exports.withStorageDeviceContainer=FE;exports.withTranslationContainer=WE;exports.withTroubleContainer=XE;exports.withUsbUpdateContainer=JE;exports.wrapPromise=Xo;
198
198
  //# sourceMappingURL=index.cjs.map