@kosdev-code/kos-ui-sdk 2.0.38 → 2.0.39

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,4 +1,4 @@
1
- "use strict";var uu=Object.defineProperty;var hu=(t,e,s)=>e in t?uu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var l=(t,e,s)=>(hu(t,typeof e!="symbol"?e+"":e,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("loglevel"),M=require("mobx"),y=require("robot3"),$e=require("date-fns"),T=require("@emotion/react/jsx-runtime"),no=require("@emotion/styled"),oi=require("react-dom"),Fe=require("@emotion/react"),g=require("react"),io=require("mobx-react-lite"),fu=require("@use-gesture/react"),rr="method",ni="topic",dt="url",ts="request-id",or="response-id",ao="status",Ie="dst-addr",ii="src-addr",ye="type",co="ordered",lo="tracker",ai="Content-Type",ci="Cache-Control",li="requestId",di=process.env.KOS_LOGIN_URL||"http://localhost",ui=process.env.KOS_APP_PORT||"8080",gu=`${di}:${ui}`,Ds="{MODEL_ID}";var ss=(t=>(t.SEND="/ws/log/msg/send",t.RECEIVED="/ws/log/msg/receive",t))(ss||{}),hi=(t=>(t.MSG_RECEIVE="/mock/msg/receive",t))(hi||{});const uo="/kos/model/ready/";D.info("Initializing event bus");globalThis.kos=globalThis.kos||{};globalThis.kos.subscriptions=globalThis.kos.subscriptions||{};const U=globalThis.kos.subscriptions,pu=()=>Symbol("eventKey");function ho(t){return U[t]&&Object.getOwnPropertySymbols(U[t]).length>0}function $(t,e){const s=pu();return U[t]||(D.debug(`Initializing subscription for ${t}`),U[t]={}),D.debug(`Subscribing to ${t} with id ${s.toString()}`),U[t][s]=e,{count:U[t]?Object.getOwnPropertySymbols(U[t]).length:0,unsubscribe:()=>(D.debug(`Unsubscribing from ${t} with id ${s.toString()}`),U[t]&&U[t][s]&&delete U[t][s],U[t]&&Object.getOwnPropertySymbols(U[t]).length===0&&delete U[t],{count:U[t]?Object.getOwnPropertySymbols(U[t]).length:0})}}function B(t,e,s={}){if(!U[t]||Object.getOwnPropertySymbols(U[t]).length===0)return D.debug(`No subscriptions for ${t}. Not publishing.`),{eventType:t,subscribers:0};const r=Object.getOwnPropertySymbols(U[t]).length;return Object.getOwnPropertySymbols(U[t]).forEach(o=>{if(s.sync){const n=s.sync;D.debug(`Performing sync publish for ${t} with sync id ${n}`),U[t][o]({body:e,headers:s}).then(i=>{D.debug(`Response recieved for ${n}, publishing back to source.`),B(n,i)})}else D.debug(`Performing async publish for ${t}`),U[t][o]({body:e,headers:s})}),{eventType:t,subscribers:r}}function mu(){D.warn("Resetting event bus"),Object.keys(U).forEach(t=>delete U[t])}function fi(t,e){const s=$(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function fo(t,e){return new Promise((s,r)=>{let o=null;const n=fi(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}const yu=Object.freeze(Object.defineProperty({__proto__:null,hasEventSubscriptions:ho,once:fi,publish:B,reset:mu,subscribe:$,waitFor:fo},Symbol.toStringTag,{value:"Module"}));function nr(t,e){const s=$(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function ir(t,e){return new Promise((s,r)=>{let o=null;const n=nr(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}function gi(t,e){const s=t.map(r=>ir(r,e));return Promise.all(s)}function pi(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 d=nr(c,u=>{i||(i=!0,a(),s({eventType:c,data:u}))});o.push(d)}),e&&(n=setTimeout(()=>{i||(i=!0,a(),r(new Error(`Timeout waiting for any event: ${t.join(", ")}`)))},e))})}function mi(t,e,s){return $(t,o=>{o&&e(o)&&s(o)}).unsubscribe}function yi(t,e,s){return $(t,o=>{if(o){const n=e(o);s(n)}}).unsubscribe}function bi(t,e,s){let r=null;const o=$(t,n=>{r&&clearTimeout(r),r=setTimeout(()=>{s(n)},e)});return()=>{r&&clearTimeout(r),o.unsubscribe()}}function wi(t,e,s){let r=0,o=null;const n=$(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 vi(t,e,s){let r=[],o=null;const n=()=>{r.length>0&&(s([...r]),r=[])},i=$(t,a=>{a&&(r.push(a),o||(o=setTimeout(()=>{n(),o=null},e)))});return()=>{o&&(clearTimeout(o),n()),i.unsubscribe()}}function go(t,e=1){const s=[];return $(t,r=>{r&&(s.push(r),s.length>e&&s.shift())}),{subscribe:r=>(s.forEach(o=>r(o)),$(t,r))}}function Mi(t,e){const s=t.map(r=>$(r,o=>{o&&e(r,o)}));return()=>{s.forEach(r=>r.unsubscribe())}}function Ei(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}=$(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 Ti(t,e,s,r){const o=ir(e,r);return B(t,s),o}async function*_i(t){const e=[],s=[],r=$(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 bu={once:nr,waitFor:ir,waitForAll:gi,race:pi,filter:mi,map:yi,debounce:bi,throttle:wi,buffer:vi,replay:go,merge:Mi,stateMachine:Ei,request:Ti,eventIterator:_i},wu=Object.freeze(Object.defineProperty({__proto__:null,EventBusFunctional:bu,buffer:vi,debounce:bi,eventIterator:_i,filter:mi,map:yi,merge:Mi,once:nr,race:pi,replay:go,request:Ti,stateMachine:Ei,throttle:wi,waitFor:ir,waitForAll:gi},Symbol.toStringTag,{value:"Module"}));async function ar(t,e){const{getCurrentState:s,transformState:r,shouldUseFetchedState:o,timeout:n}=e,i=fo(t,n),a=await s(),c=r?r(a):a;return o&&o(c)?(i.catch(()=>{}),c):await Promise.race([i,new Promise(u=>{setTimeout(()=>u(c),100)})])}function Ii(t,e,s){const{getCurrentState:r,transformState:o}=s;let n=!1;const i=$(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 Si(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}};$(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 po(t,e){if(typeof t=="string")return ar(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(u=>fo(u,n)),d=await Promise.all(c);return d[d.length-1]}function Oi(t,e,s){const{fetchMissedEvents:r,checkInterval:o=3e4,deduplicateById:n}=s,i=new Set,a=$(t,async d=>{if(d){if(n){const u=n(d);if(i.has(u))return;i.add(u),i.size>1e3&&Array.from(i).slice(0,500).forEach(f=>i.delete(f))}await e(d)}}),c=setInterval(async()=>{try{const d=await r(),u=Array.isArray(d)?d:[d];for(const h of u)if(n){const f=n(h);i.has(f)||(i.add(f),await e(h))}else await e(h)}catch(d){console.error("Failed to fetch missed events:",d)}},o);return()=>{a.unsubscribe(),clearInterval(c)}}function $i(t){const{connectEvent:e,disconnectEvent:s,errorEvent:r,dataEvent:o,fetchInitialState:n,reconnectDelay:i=5e3}=t,a={state:"disconnected",data:void 0,async waitForConnection(u){if(a.state==="connected"&&a.data)return a.data;const h=await ar(e,{getCurrentState:n,shouldUseFetchedState:f=>!!f,timeout:u});return a.state="connected",a.data=h,d(),h},subscribe(u){return c.add(u),u(a),()=>{c.delete(u)}},async reconnect(){a.state="connecting",d();try{const u=await n();a.state="connected",a.data=u,d()}catch{a.state="error",d(),setTimeout(()=>{a.state==="error"&&a.reconnect()},i)}}},c=new Set,d=()=>{c.forEach(u=>u(a))};return $(e,u=>{a.state="connected",u!=null&&u.body&&(a.data=u.body),d()}),$(s,()=>{a.state="disconnected",d(),setTimeout(()=>{a.state==="disconnected"&&a.reconnect()},i)}),r&&$(r,()=>{a.state="error",d()}),o&&$(o,u=>{u!=null&&u.body&&a.state==="connected"&&(a.data=u.body,d())}),a.reconnect(),a}const vu={waitForOrGetState:ar,subscribeWithInitialState:Ii,createStatefulEventStream:Si,waitForAllWithState:po,createResilientEventHandler:Oi,createConnectionStateManager:$i},Mu=Object.freeze(Object.defineProperty({__proto__:null,EventBusState:vu,createConnectionStateManager:$i,createResilientEventHandler:Oi,createStatefulEventStream:Si,subscribeWithInitialState:Ii,waitForAllWithState:po,waitForOrGetState:ar},Symbol.toStringTag,{value:"Module"})),Eu=(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 mo(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 ut(){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 Tu(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 _u(t,e){const s=t??[],r=e??[];return s.length!==r.length?!1:s.every((o,n)=>o===r[n])}const yo=(t,e)=>{const s=t.map(n=>n.id);return e.map(n=>n.id).filter(n=>!s.includes(n))},Iu=({container:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r),a=yo(n,t.data).map(s).filter(Boolean);t.removeAll(a);const c=n.map(e).filter(Boolean);t.addAll(c)},Su=({container:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r);yo(n,t.models).forEach(s),n.forEach(e)},Ou=({items:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r);yo(n,t).forEach(s),n.forEach(e)},$u=(t,e="parent-")=>{let s=t;return s.startsWith(e)&&(s=s.replace(e,"")),s},En=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),Tn=[{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 Di(t){let e=(t.getTime()-Date.now())/1e3;for(let s=0;s<=Tn.length;s++){const r=Tn[s];if(Math.abs(e)<r.amount)return En.format(Math.round(e),r.name);e/=r.amount}return En.format(Math.round(e),"years")}const bo=t=>t%4===0&&t%100!==0||t%400===0,wo=(t,e)=>[31,bo(t)?29:28,31,30,31,30,31,31,30,31,30,31][e],Ci=(t,e)=>{const s=new Date(t),r=t.getDate();return s.setDate(1),s.setMonth(s.getMonth()+e),s.setDate(Math.min(r,wo(s.getFullYear(),s.getMonth()))),s},Pi=(t,e)=>{const s=new Date(t);return s.setDate(s.getDate()+e),s},Je="en-US",Ri={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"}},xi={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"}},Ai=(t,{dateStyle:e="short",locales:s=Je}={dateStyle:"short",locales:Je})=>{const r=e==="short"?Ri.short:{dateStyle:e};return new Intl.DateTimeFormat(s,r).format(t)},Li=(t,{locales:e=Je,timeStyle:s="short"}={locales:Je,timeStyle:"short"})=>{const r=xi[s];return new Intl.DateTimeFormat(e,r).format(t)},Fi=(t,{dateStyle:e="short",locales:s=Je,timeStyle:r="short"}={dateStyle:"short",locales:Je,timeStyle:"short"})=>{const o={...e&&Ri[e],...r&&xi[r]};return new Intl.DateTimeFormat(s,o).format(t)},Du=Object.freeze(Object.defineProperty({__proto__:null,addDaysToDate:Pi,addMonthsToDate:Ci,formatDate:Ai,formatDateSince:Di,formatDateTime:Fi,formatTime:Li,getDaysInMonth:wo,isLeapYear:bo},Symbol.toStringTag,{value:"Module"}));function ki(t,e,s=300){let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>{e.apply(t,o)},s)}}const Z="canvas-renderer",Tr=new Map,_n=new Map,_r=new Map,Ir=new Map,rs=(t,e)=>{Ni[t]=e},Ni={indexExtension:{registerIndexExtension:(t,e)=>{const s=Ir.get(t)||{};Object.assign(s,e),Ir.set(t,e)},loadIndexExtensions:t=>Ir.get(t)||{}},loader:{registerLoader:(t,e)=>{_n.set(t,e)},executeLoader:async(t,e)=>{const s=_n.get(t);if(s)return await s(e)}},propertyMapper:{registerPropertyMapper:(t,e)=>{_r.set(t,e)},hasMapper:t=>_r.has(t),executeMapper:(t,e,s)=>{const r=_r.get(t);return r?r(e,s):""}},dataMapper:{registerDataMapper:(t,e)=>{const s=Tr.get(t)||[];s.push(e),Tr.set(t,s)},executeMapper:async(t,e,s)=>{const r=Tr.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(!O[Z]){console.warn(`Canvas renderer extension point is not registered. Cannot register renderer "${t}".`);return}O[Z].register(t,e)}}},O=Ni,Cu=async({context:t,extension:e})=>{const s=await O.loader.executeLoader(e,{});return t==null||t.set(e,s),s},Pu=async({extension:t,contextData:e,data:s})=>await O.dataMapper.executeMapper(t,s,e),Ru=async({extension:t,contextData:e,data:s})=>await O.propertyMapper.executeMapper(t,s,e),xu=Object.freeze(Object.defineProperty({__proto__:null,executeDataMapperExtension:Pu,executeLoaderExtension:Cu,executePropertyMapperExtension:Ru},Symbol.toStringTag,{value:"Module"})),Au="Extensions";class Lu{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 le=(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),{}),Ui="studio.tools.preview",Fu="studio.relax.store.validation",ji="studio.log.debug",Bi="studio.log.info",ku={profiles:[Ui]};var ri;const Nu=((ri=globalThis.getKosConfig)==null?void 0:ri.call(globalThis))||JSON.stringify(ku),Ki=JSON.parse(Nu);globalThis.kosConfig=Ki;const vo=Ki,Hi=()=>vo.profiles||[],Ur=t=>Hi().includes(t),Uu=()=>vo.logging||!1,ju=()=>{const t=Ur(ji),e=Ur(Bi);return t?"DEBUG":e?"INFO":void 0},zi=()=>{const t=le(),e=ju(),r=t.kosLogLevel??e??window.kosLogLevel??process.env.KOS_LOG_LEVEL;return r||"WARN"},Gi=()=>window.kosMessageLogging||process.env.KOS_MESSAGE_LOGGING==="true",Vi=()=>window.kosMessageStudioLogging||process.env.KOS_MESSAGE_STUDIO_LOGGING==="true",Yi="ws-log",Bu=D.methodFactory,qi=Gi(),Ku=Vi();D.methodFactory=function(t,e,s){const r=Bu(t,e,s);return function(o,n){var c;const i=s?String(s):"",a=i?`[${String(i).substring(i.lastIndexOf(":")+1)}] | `:"[root] | ";r(`${a}${o}`,n||""),(c=globalThis==null?void 0:globalThis.kosConfig)!=null&&c.logging&&globalThis.kosLog&&(s!==Yi||qi&&Ku)&&globalThis.kosLog(`UI: ${a}${o}`)}};let Wi=zi();D.setLevel(Wi);window.setKosLogLevel=t=>{Wi=t,D.setLevel(t)};const Cs=D.getLogger(Yi);window.enableKosMessageLog=()=>{Cs.setLevel(D.levels.INFO)};window.disableKosMessageLog=()=>{Cs.setLevel(D.levels.ERROR)};qi?window.enableKosMessageLog():window.disableKosMessageLog();const Hu=["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(";"),zu=["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(d=>d.name===s))==null?void 0:i.level;return o?r.setLevel(o):(o=(c=(a=globalThis.kos.logOverrides)==null?void 0:a.find(d=>s.startsWith(d.name)))==null?void 0:c.level,o&&r.setLevel(o)),r},wsSend:(...t)=>{const e=String(t).replace(/\n/g,"\\n");Cs.info(`%c⬆ ${e}`,Hu)},wsReceive:(...t)=>{const e=String(t).replace(/\n/g,"\\n");Cs.info(`%c⬇ ${e}`,zu)}},Qi="featureFlagResolver",hs=new Map;rs(Qi,{register:(t,e)=>{var s;hs.has(t)||hs.set(t,[]),(s=hs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=hs.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 Xi.updateFlags(i),Object.keys(i)}});const Gu="kos.loader.featureFlag";class Zi{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 Zi;const Xi=window.KosFeatureFlags,Ji=(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)}`},ea=t=>{const s=new RegExp("hsl\\((\\d+),\\s+(\\d+)\\%,\\s+(\\d+)\\%\\)").exec(t);if(!s)throw Error("Invalid HSL string");return Ji(parseInt(s[1]),parseInt(s[2]),parseInt(s[3]))},ta=(t,e)=>getComputedStyle(t).getPropertyValue(e),Vu=(t,e)=>ea(ta(t,e)),Yu=(t,e)=>{const s={...t};return s.id&&delete s.id,s},jr=(t,e,s=Yu)=>{const r=s(t,e);M.runInAction(()=>{Object.assign(e,r)})},Sr=new Map,sa={addToDeletionQueue:(t,e)=>{const s=Sr.get(t)||[];s.push(e),Sr.set(t,s)},cancelDeletion:t=>{const e=Sr.get(t);e&&e.forEach(s=>{clearTimeout(s)})}},qu=m.createLogger({name:"kos-dependency-manager"});class Wu{constructor(){l(this,"_usedByCache",new Map);l(this,"_usesCache",new Map)}add(e,s){sa.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?(qu.info(`Model ${e} is still used by: ${s.join(", ")}`),!1):!0}clear(){this._usedByCache.clear(),this._usesCache.clear()}}var b=(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))(b||{}),x=(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))(x||{});const In=m.createLogger({name:"kos-model-cache"});class Qu{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()).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?(In.debug("Returning cached preloaded models"),this._preloaded):(this._preloaded=this.preloadKeys.map(s=>(In.debug(`Preloading model: ${typeof s=="string"?s:s.modelType}`),e(s))).filter(s=>!!s),this._isPreloaded=!0,this._preloaded)}}const Q=Symbol("SubscriptionHandlers"),L=Symbol("DependencyModels"),At=Symbol("FutureService"),Lt=Symbol("ChildModels"),Ft=Symbol("ParentModel"),kt=Symbol("LogConfig"),Ts=Symbol("ReferenceConfig"),ra=Symbol("KosModelSymbol"),Ne=Symbol("ModelEffects"),Ps=Symbol("CompanionParentModel"),ge=(t,e)=>{t[Lt]=t[Lt]||{},t[Lt][e]=!0},Be=t=>`{PROP_${String(t)}}`,Zu=t=>`{PROP_${String(t)}}`,Xu=Be("kosParentId"),cr=t=>e=>{e[Ft]=e[Ft]||{};const s=(t==null?void 0:t.parentId)||Xu;e[Ft]={parentId:s}},et=({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]=et({value:r[n],modelId:e,modelData:s}),o),{});else if(typeof r=="string"){const o=new RegExp(".*({PROP_(.+)})");let n=r!=null&&r.includes(Ds)?r.replace(Ds,e):r;const i=n.match(o);if(i&&s&&(Object.getOwnPropertyNames(s).includes(i[2])||Object.getOwnPropertyNames(Object.getPrototypeOf(s)).includes(i[2]))){const a=s[i[2]];n=a?n.replace(i[1],a):void 0}return n}else return r;return r},Ju=m.createLogger({group:"decorators",name:"kos-model"});function eh(t,e,s){var n;const r=(n=t[Ft])==null?void 0:n.parentId;if(!r)return;const o=et({value:r,modelData:s,modelId:e});o&&typeof o=="string"&&K.setParentContext(e,o)}function th(t){const e=t[At];e&&Object.entries(e).forEach(([s,{handler:r}])=>{t[s]=r})}function sh(t,e){const s=t[L]||{};Object.entries(s).forEach(([r,o])=>{const n=et({value:o.id||o.modelType,modelData:t,modelId:e}),i=Object.entries((o==null?void 0:o.options)||{}).reduce((a,[c,d])=>(a[c]=et({value:d,modelData:t,modelId:e}),a),{});if(typeof n=="string"){if(!o.lazy){const a=S.getInstance().modelManager.createModelInstance(o.modelType,n,i);t[r]=a.data}S.getInstance().modelManager.addDependency(e,n)}})}function rh(t){try{return M.makeAutoObservable(t)}catch(e){return Ju.error("Failed to make observable:",e),t}}const oh={construct(t,e){var a;const[s,r={}]=e,o=K.createContext(s);eh(t,s,r);const n=m.createLogger({name:t.prototype.modelTypeId,group:((a=t[kt])==null?void 0:a.group)??"kos-model"}),i=new t(s,r,{logger:n,kosContext:o});return th(i),sh(i,s),rh(i)}};function P(t){return e=>{var r,o;const s=e;return s.prototype.modelTypeId=t,s.prototype[ra]=!0,(r=s.prototype)[Q]??(r[Q]={}),(o=s.prototype)[L]??(o[L]={}),m.ifDebug(()=>{m.debug(`Registering model with id ${t}`)}),new Proxy(s,oh)}}const nh=({modelType:t})=>e=>{cr()(e),P(t)(e)};function ih(t,e,s){const r=s.value;s.value=function(...o){const n=K.getContext(this.id);return o.push(n),r.apply(this,o)}}var j=(t=>(t.INIT="init",t.LOAD="load",t.READY="ready",t.ACTIVATE="activate",t.ONLINE="online",t))(j||{});const ah=Object.freeze(Object.defineProperty({__proto__:null,DependencyLifecycle:j},Symbol.toStringTag,{value:"Module"})),Ee=Symbol("HttpRouteHandlers"),Sn="__httpBrowserRouter";function lr(t){return function(s){return function(r,o,n){r[Ee]=r[Ee]||[];const i={method:t,path:s,handler:o};return r[Ee].push(i),r[L]=r[L]||{},r[L][Sn]||(r[L][Sn]={modelType:"browser-router-model",lifecycle:j.INIT}),n}}}const oa=lr("GET"),os=lr("POST"),ch=lr("PUT"),na=lr("DELETE"),lh=na;function Rs(t){return!!(t!=null&&t[Ee])&&t[Ee].length>0}function ia(t){return(t==null?void 0:t[Ee])||[]}const dh=({group:t}={group:""})=>e=>{e[kt]=e[kt]||{},e[kt]={group:t}};function aa(t){return(e,s,r)=>{e[Ne]=e[Ne]||{},e[Ne][s]={dependencies:t==null?void 0:t.dependencies,value:r.value},r.value=function(){throw new Error(`Method ${s} cannot be called directly.`)}}}const uh=t=>(e,s)=>{e[Ts]=e[Ts]||{},e[Ts][s]=t},ht=({modelType:t,id:e,options:s,lifecycle:r})=>(o,n)=>{o[L]=o[L]||{},o[L][n]={modelType:t,id:e,options:s,lifecycle:r||j.INIT}},hh=({topic:t,handler:e,websocket:s=!1,condition:r=()=>!0})=>o=>{o[Q]=o[Q]||{},Array.isArray(t)?t.forEach(n=>{o[Q][n]={websocket:s,handler:e,condition:r}}):o[Q][t]={websocket:s,handler:ki(o,M.action(e),200),condition:r}};function ca(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 la(t){return t.endsWith("/*")}function F({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:d,throttle:u,buffer:h,filter:f,once:p,replay:w,wildcardName:v,flow:E}){return(_,k,te)=>{_[Q]=_[Q]||{};let I=te.value;const V=typeof d=="number"?d:d==null?void 0:d.delay,N=typeof u=="number"?u:u==null?void 0:u.interval;V&&V>0?I=fh(I,d):N&&N>0?I=gh(I,u):h?I=ph(I,h):p&&(I=mh(I));let Y=e;if(f){const ve=e;Y=(vn,Mn,Er)=>f(Er)?ve(vn,Mn,Er):!1}const Oe={websocket:r,fos:o,bridge:n,handler:I,condition:Y,transform:s,lifecycle:a,skipParse:i,destinationAddress:c,wildcardName:v,flow:E};Array.isArray(t)?t.forEach(ve=>{_[Q][ve]=Oe}):_[Q][t]=Oe,w&&yh(t,w.bufferSize)}}function fh(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 gh(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 d=[...i];i=[],t.call(this,d)}};return function(d){const u=Date.now(),h=u-o;r?h>=s?(o=u,t.call(this,d)):n||(n=setTimeout(()=>{o=Date.now(),t.call(this,d),n=null},s-h)):(i.push(d),h>=s?(o=u,c.call(this)):a||(a=!0,n=setTimeout(()=>{o=Date.now(),c.call(this),n=null,a=!1},s-h)))}}function ph(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 mh(t){let e=!1;return function(s){e||(e=!0,t.call(this,s))}}function yh(t,e){(Array.isArray(t)?t:[t]).forEach(r=>{go(r,e)})}function da(t,e){return`${uo}${t}${e?`/${e}`:`/${t}`}`}function ua(t){return`${uo}${t}`}function Or(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 ha=5e3;class bh extends Error{constructor(s,r){super(s);l(this,"model");this.model=r}}const fa=(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 bh(`${e.modelId} - ${e.modelTypeName} - ${s}`,e))},t)}),cancel:()=>{r&&clearTimeout(r)}}},ga=t=>t.fsm.transitionTo(x.GO_ACTIVE,b.ACTIVE),pa=t=>t.whenReady(),ma=t=>t.fsm.transitionTo(x.LOAD,b.LOADED),wh=t=>t.fsm.transitionTo(x.UNLOAD,b.UNLOADED),ya=t=>t.fsm.transitionTo(x.INITIALIZE,b.INITIALIZED);var Mo=(t=>(t.ACTIVE="active",t.READY="ready",t.LOAD="load",t.UNLOAD="unload",t.INIT="init",t))(Mo||{});const _s={active:ga,ready:pa,load:ma,init:ya},ba=(t,e)=>{const s=e.id||e.modelType,r=et({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]=et({value:c,modelData:t.modelData,modelId:t.modelId}),i},{});return{dependentModel:S.getInstance().modelManager.createModelInstance(e.modelType,r,o),dataModelId:r}},wa=(t,e=j.READY)=>{var o;const s=((o=t.modelData)==null?void 0:o[L])||{};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}=ba(t,i);t.modelData[n]=a.data,m.debug(`waiting for dependent model ${i.modelType} with id ${c} - waiting for WHENREADY`);const d=async(f,p,w)=>{var v;await((v=f.whenReady)==null?void 0:v.call(f)),m.debug(`dependent model ${p} with id ${w} - READY`)},{promise:u,cancel:h}=fa(ha,t,t.status);return Promise.race([d(a.model,i.modelType,c).then(()=>{h()}).catch(f=>{console.error(`Error waiting for dependent model ${i.modelType} with id ${c}:`,f),h()}),u])}).filter(n=>!!n)},va=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 _s[s]&&a?c=_s[s](a):(a||m.error("model is undefined. This shouldn't happen"),_s[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 u;const{promise:c,cancel:d}=fa(ha,a.model,a.status);return Promise.race([(u=a.promise)==null?void 0:u.then(()=>{d()}).catch(h=>{m.error(`Model ${a.modelId} - ${a.type} failed to transition to ${s}: ${h.message}`),d()}),c])}))).filter(a=>a.status==="rejected");i.length>0&&m.error(`Model ${t.modelId} had ${i.length} failed child models on ${r}`)},Ma=async(t,e,s)=>{await va(t,t.getChildren().filter(r=>!!r),e,s)},vt=async(t,e)=>{const r=(await Promise.allSettled(wa(t,e))).filter(o=>o.status==="rejected");r.length&&(m.error(`There were ${r.length} failed dependent models on ${e}`),m.error(r))},vh=t=>typeof t.toJSON=="function",Nt=t=>t[L]!==void 0,Eo=t=>t.revision!==void 0&&t.index!==void 0,Ea=t=>{if(t){if(Nt(t))return t;if(Eo(t))return t.data;if(t instanceof Map||t instanceof M.ObservableMap||t instanceof Set)return Array.from(t.values()).filter(Nt);if(Array.isArray(t))return t.filter(Nt)}};function Mh(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}}}),Eh(t.modelData,t.modelTypeName,t.modelId,t)}function Eh(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,d;const o=((a=r.getChildren)==null?void 0:a.call(r))||[],n=((c=r.companionManager)==null?void 0:c.all())||[],i=r.modelData[L]||{};return{id:s,type:e,companions:{count:n.length,data:n.map(u=>({type:u.modelTypeName,id:u.modelId}))},dependencies:{count:Object.keys(i).length,data:Object.values(i).map(u=>({id:u.id||u.modelType,type:u.modelType,options:u.options,lifecycle:u.lifecycle}))},children:{count:o.length,data:o.map(u=>({id:u.modelId,type:u.modelTypeName}))},data:((d=t.toJSON)==null?void 0:d.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];Nt(i)?o[`[KOS Model] ${n}`]=typeof i.toJSON=="function"?i.toJSON():{id:i.id,type:i.constructor.name}:Eo(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 Th{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!==b.FAILED).filter(r=>!!r);return s.forEach(r=>{try{K.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[Lt])||{};return Object.keys(e).map(r=>Ea(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 _h{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 Ih{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[Ne])||{};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())},d=n?M.reaction(()=>n(this.modelData),c,{fireImmediately:!!(i!=null&&i.fireImmediately)}):M.autorun(c);this.disposers.push(d)}}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 Sh=m.createLogger({name:"model-active-machine"}),Oh=t=>{const e=y.createMachine(b.INACTIVE,{[b.FAILED]:y.state(y.transition(x.GO_ACTIVE,b.ACTIVATING)),[b.INACTIVE]:y.state(y.transition(x.GO_ACTIVE,b.ACTIVATING)),[b.ACTIVATING]:y.invoke(()=>(t.activeStatus=b.ACTIVATING,t.activate()),y.transition("done",b.ACTIVE,y.action(()=>{t.activeStatus=b.ACTIVE})),y.transition("error",b.FAILED,y.action(()=>{t.activeStatus=b.FAILED}))),[b.ACTIVE]:y.state(y.transition(x.GO_INACTIVE,b.DEACTIVATING)),[b.DEACTIVATING]:y.invoke(()=>(t.activeStatus=b.DEACTIVATING,t.deactivate()),y.transition("done",b.INACTIVE,y.action(()=>{t.activeStatus=b.INACTIVE})),y.transition("error",b.FAILED,y.action(()=>{t.activeStatus=b.FAILED})))});return{service:y.interpret(e,r=>Sh.debug(r.machine.current)),machine:e}},On=m.createLogger({name:"model-online-machine"}),$h=t=>{const e=y.createMachine(b.OFFLINE,{[b.ONLINE]:y.state(y.transition(x.GO_OFFLINE,b.OFFLINE,y.action(async()=>{await t.offline(),t.onlineStatus=b.OFFLINE}))),[b.OFFLINE]:y.state(y.transition(x.GO_ONLINE,b.ONLINE,y.action(async()=>{On.debug(`Going online with model ${t.modelId}`),await t.online(),t.onlineStatus=b.ONLINE,await t.fsm.transitionTo(x.INITIALIZE,b.INITIALIZED)})))}),s=y.interpret(e,r=>On.debug(r.machine.current));return{machine:e,service:s}},Dh=t=>{var r;const e=Oh(t).service,s=$h(t).service;return y.createMachine(b.CREATING,{[b.CREATING]:y.state(y.transition(x.CREATE,b.CREATED)),[b.CREATED]:y.state(y.immediate(b.INITIALIZING)),[b.INITIALIZING]:y.invoke(()=>(W(()=>{t.status=b.INITIALIZING}),t.init()),y.transition("done",b.INITIALIZED,y.action(()=>{t.status=b.INITIALIZED})),y.transition("error",b.FAILED,y.action(()=>{m.error(`Model ${t.modelId} - ${t.modelTypeName} failed to initialize. Transitioning to FAILED state.`),t.status=b.FAILED}))),[b.INITIALIZED]:y.state(y.immediate(b.LOADING)),[b.LOADING]:y.invoke(()=>(W(()=>{t.status=b.LOADING}),t.load()),y.transition("done",b.LOADED,y.action(()=>{t.status=b.LOADED})),y.transition("error",b.FAILED,y.action(()=>{t.status=b.FAILED}))),[b.LOADED]:y.state(y.immediate(b.READYING),y.transition(x.UNLOAD,b.UNLOADING)),[b.RESETTING]:y.invoke(()=>{var o;return W(()=>{t.status=b.RESETTING}),(o=t.unload)==null||o.call(t),t.load()},y.transition("done",b.LOADED,y.action(()=>{t.status=b.LOADED}))),[b.READYING]:y.invoke(()=>(W(()=>{t.status=b.READYING}),t.ready()),y.transition("done",b.READY,y.action(()=>{W(()=>{t.status=b.READY}),s.send(x.GO_ONLINE)})),y.transition("error",b.FAILED,y.action(()=>{t.status=b.FAILED}))),[b.READY]:y.state(y.transition(x.UNLOAD,b.UNLOADED,y.action((r=t.unload)==null?void 0:r.bind(t))),y.transition(x.RESET,b.RESETTING),y.transition(x.GO_ONLINE,b.READY,y.action(()=>{s.send(x.GO_ONLINE)})),y.transition(x.GO_OFFLINE,b.READY,y.action(()=>{s.send(x.GO_OFFLINE)})),y.transition(x.GO_ACTIVE,b.READY,y.action(()=>{e.send(x.GO_ACTIVE)})),y.transition(x.GO_INACTIVE,b.READY,y.action(()=>{e.send(x.GO_INACTIVE)}))),[b.UNLOADED]:y.state(),[b.FAILED]:y.state()})},Ch=m.createLogger({name:"kos-model-lifecycle"}),Ph=t=>({service:y.interpret(Dh(t),s=>Ch.debug(`state machine for model ${t.modelId}: ${s.machine.current});`))});class Rh{constructor(e,s){l(this,"disposer");l(this,"service");this.model=e,this.log=s;const r=Ph(e);this.service=r.service,this.service.send(x.CREATE)}get current(){return this.service.machine.current}async transitionTo(e,s,r=b.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[b.ACTIVE,b.INACTIVE].includes(e)?this.model.activeStatus:this.model.status}}const Ta="browser-router-model";class To{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(!Rs(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=me(Ta))==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 Rs(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=ia(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 xh(t,e){if(!Rs(t))return;const s=me(Ta);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 To(t,e).setRouter(s.model)}class Ah{static create({modelId:e,modelTypeName:s,component:r}){const o=[r??"kos",s,e].filter(Boolean).join(".");return m.createLogger({name:o})}}class Lh{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 Fh{constructor(e,s){l(this,"unsubscribers",[]);this.model=e,this.log=s}register(){const e=this.model.modelId,s=$("/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(x.GO_ONLINE,b.ONLINE)}),r=$("/kosCore/offline",async()=>{this.log.debug(`Offline event received for ${e} — sending GO_OFFLINE`),await this.model.fsm.transitionTo(x.GO_OFFLINE,b.OFFLINE)});this.unsubscribers.push(s.unsubscribe),this.unsubscribers.push(r.unsubscribe)}dispose(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[]}}class kh{constructor(e){l(this,"subscription");l(this,"unsubscribe");l(this,"eventType");this.eventType=e,this.subscription={queue:[],resolvers:[],closed:!1};const s=$(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 $n(t){return new kh(t)}var _a=(t=>(t.GET="GET",t.PUT="PUT",t.POST="POST",t.DELETE="DELETE",t))(_a||{});const Ia=({path:t,requestId:e,method:s,destinationAddress:r})=>{let o=`${rr}:${s}
1
+ "use strict";var uu=Object.defineProperty;var hu=(t,e,s)=>e in t?uu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var l=(t,e,s)=>(hu(t,typeof e!="symbol"?e+"":e,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("loglevel"),M=require("mobx"),y=require("robot3"),$e=require("date-fns"),T=require("@emotion/react/jsx-runtime"),no=require("@emotion/styled"),oi=require("react-dom"),ke=require("@emotion/react"),g=require("react"),io=require("mobx-react-lite"),fu=require("@use-gesture/react"),rr="method",ni="topic",dt="url",ts="request-id",or="response-id",ao="status",Ie="dst-addr",ii="src-addr",ye="type",co="ordered",lo="tracker",ai="Content-Type",ci="Cache-Control",li="requestId",di=process.env.KOS_LOGIN_URL||"http://localhost",ui=process.env.KOS_APP_PORT||"8080",gu=`${di}:${ui}`,Ds="{MODEL_ID}";var ss=(t=>(t.SEND="/ws/log/msg/send",t.RECEIVED="/ws/log/msg/receive",t))(ss||{}),hi=(t=>(t.MSG_RECEIVE="/mock/msg/receive",t))(hi||{});const uo="/kos/model/ready/";D.info("Initializing event bus");globalThis.kos=globalThis.kos||{};globalThis.kos.subscriptions=globalThis.kos.subscriptions||{};const U=globalThis.kos.subscriptions,pu=()=>Symbol("eventKey");function ho(t){return U[t]&&Object.getOwnPropertySymbols(U[t]).length>0}function $(t,e){const s=pu();return U[t]||(D.debug(`Initializing subscription for ${t}`),U[t]={}),D.debug(`Subscribing to ${t} with id ${s.toString()}`),U[t][s]=e,{count:U[t]?Object.getOwnPropertySymbols(U[t]).length:0,unsubscribe:()=>(D.debug(`Unsubscribing from ${t} with id ${s.toString()}`),U[t]&&U[t][s]&&delete U[t][s],U[t]&&Object.getOwnPropertySymbols(U[t]).length===0&&delete U[t],{count:U[t]?Object.getOwnPropertySymbols(U[t]).length:0})}}function B(t,e,s={}){if(!U[t]||Object.getOwnPropertySymbols(U[t]).length===0)return D.debug(`No subscriptions for ${t}. Not publishing.`),{eventType:t,subscribers:0};const r=Object.getOwnPropertySymbols(U[t]).length;return Object.getOwnPropertySymbols(U[t]).forEach(o=>{if(s.sync){const n=s.sync;D.debug(`Performing sync publish for ${t} with sync id ${n}`),U[t][o]({body:e,headers:s}).then(i=>{D.debug(`Response recieved for ${n}, publishing back to source.`),B(n,i)})}else D.debug(`Performing async publish for ${t}`),U[t][o]({body:e,headers:s})}),{eventType:t,subscribers:r}}function mu(){D.warn("Resetting event bus"),Object.keys(U).forEach(t=>delete U[t])}function fi(t,e){const s=$(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function fo(t,e){return new Promise((s,r)=>{let o=null;const n=fi(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}const yu=Object.freeze(Object.defineProperty({__proto__:null,hasEventSubscriptions:ho,once:fi,publish:B,reset:mu,subscribe:$,waitFor:fo},Symbol.toStringTag,{value:"Module"}));function nr(t,e){const s=$(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function ir(t,e){return new Promise((s,r)=>{let o=null;const n=nr(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}function gi(t,e){const s=t.map(r=>ir(r,e));return Promise.all(s)}function pi(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 d=nr(c,u=>{i||(i=!0,a(),s({eventType:c,data:u}))});o.push(d)}),e&&(n=setTimeout(()=>{i||(i=!0,a(),r(new Error(`Timeout waiting for any event: ${t.join(", ")}`)))},e))})}function mi(t,e,s){return $(t,o=>{o&&e(o)&&s(o)}).unsubscribe}function yi(t,e,s){return $(t,o=>{if(o){const n=e(o);s(n)}}).unsubscribe}function bi(t,e,s){let r=null;const o=$(t,n=>{r&&clearTimeout(r),r=setTimeout(()=>{s(n)},e)});return()=>{r&&clearTimeout(r),o.unsubscribe()}}function wi(t,e,s){let r=0,o=null;const n=$(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 vi(t,e,s){let r=[],o=null;const n=()=>{r.length>0&&(s([...r]),r=[])},i=$(t,a=>{a&&(r.push(a),o||(o=setTimeout(()=>{n(),o=null},e)))});return()=>{o&&(clearTimeout(o),n()),i.unsubscribe()}}function go(t,e=1){const s=[];return $(t,r=>{r&&(s.push(r),s.length>e&&s.shift())}),{subscribe:r=>(s.forEach(o=>r(o)),$(t,r))}}function Mi(t,e){const s=t.map(r=>$(r,o=>{o&&e(r,o)}));return()=>{s.forEach(r=>r.unsubscribe())}}function Ei(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}=$(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 Ti(t,e,s,r){const o=ir(e,r);return B(t,s),o}async function*_i(t){const e=[],s=[],r=$(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 bu={once:nr,waitFor:ir,waitForAll:gi,race:pi,filter:mi,map:yi,debounce:bi,throttle:wi,buffer:vi,replay:go,merge:Mi,stateMachine:Ei,request:Ti,eventIterator:_i},wu=Object.freeze(Object.defineProperty({__proto__:null,EventBusFunctional:bu,buffer:vi,debounce:bi,eventIterator:_i,filter:mi,map:yi,merge:Mi,once:nr,race:pi,replay:go,request:Ti,stateMachine:Ei,throttle:wi,waitFor:ir,waitForAll:gi},Symbol.toStringTag,{value:"Module"}));async function ar(t,e){const{getCurrentState:s,transformState:r,shouldUseFetchedState:o,timeout:n}=e,i=fo(t,n),a=await s(),c=r?r(a):a;return o&&o(c)?(i.catch(()=>{}),c):await Promise.race([i,new Promise(u=>{setTimeout(()=>u(c),100)})])}function Ii(t,e,s){const{getCurrentState:r,transformState:o}=s;let n=!1;const i=$(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 Si(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}};$(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 po(t,e){if(typeof t=="string")return ar(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(u=>fo(u,n)),d=await Promise.all(c);return d[d.length-1]}function Oi(t,e,s){const{fetchMissedEvents:r,checkInterval:o=3e4,deduplicateById:n}=s,i=new Set,a=$(t,async d=>{if(d){if(n){const u=n(d);if(i.has(u))return;i.add(u),i.size>1e3&&Array.from(i).slice(0,500).forEach(f=>i.delete(f))}await e(d)}}),c=setInterval(async()=>{try{const d=await r(),u=Array.isArray(d)?d:[d];for(const h of u)if(n){const f=n(h);i.has(f)||(i.add(f),await e(h))}else await e(h)}catch(d){console.error("Failed to fetch missed events:",d)}},o);return()=>{a.unsubscribe(),clearInterval(c)}}function $i(t){const{connectEvent:e,disconnectEvent:s,errorEvent:r,dataEvent:o,fetchInitialState:n,reconnectDelay:i=5e3}=t,a={state:"disconnected",data:void 0,async waitForConnection(u){if(a.state==="connected"&&a.data)return a.data;const h=await ar(e,{getCurrentState:n,shouldUseFetchedState:f=>!!f,timeout:u});return a.state="connected",a.data=h,d(),h},subscribe(u){return c.add(u),u(a),()=>{c.delete(u)}},async reconnect(){a.state="connecting",d();try{const u=await n();a.state="connected",a.data=u,d()}catch{a.state="error",d(),setTimeout(()=>{a.state==="error"&&a.reconnect()},i)}}},c=new Set,d=()=>{c.forEach(u=>u(a))};return $(e,u=>{a.state="connected",u!=null&&u.body&&(a.data=u.body),d()}),$(s,()=>{a.state="disconnected",d(),setTimeout(()=>{a.state==="disconnected"&&a.reconnect()},i)}),r&&$(r,()=>{a.state="error",d()}),o&&$(o,u=>{u!=null&&u.body&&a.state==="connected"&&(a.data=u.body,d())}),a.reconnect(),a}const vu={waitForOrGetState:ar,subscribeWithInitialState:Ii,createStatefulEventStream:Si,waitForAllWithState:po,createResilientEventHandler:Oi,createConnectionStateManager:$i},Mu=Object.freeze(Object.defineProperty({__proto__:null,EventBusState:vu,createConnectionStateManager:$i,createResilientEventHandler:Oi,createStatefulEventStream:Si,subscribeWithInitialState:Ii,waitForAllWithState:po,waitForOrGetState:ar},Symbol.toStringTag,{value:"Module"})),Eu=(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 mo(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 ut(){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 Tu(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 _u(t,e){const s=t??[],r=e??[];return s.length!==r.length?!1:s.every((o,n)=>o===r[n])}const yo=(t,e)=>{const s=t.map(n=>n.id);return e.map(n=>n.id).filter(n=>!s.includes(n))},Iu=({container:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r),a=yo(n,t.data).map(s).filter(Boolean);t.removeAll(a);const c=n.map(e).filter(Boolean);t.addAll(c)},Su=({container:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r);yo(n,t.models).forEach(s),n.forEach(e)},Ou=({items:t,onAddItem:e,onRemoveItem:s,idMapper:r=o=>o})=>o=>{const n=o.map(r);yo(n,t).forEach(s),n.forEach(e)},$u=(t,e="parent-")=>{let s=t;return s.startsWith(e)&&(s=s.replace(e,"")),s},En=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),Tn=[{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 Di(t){let e=(t.getTime()-Date.now())/1e3;for(let s=0;s<=Tn.length;s++){const r=Tn[s];if(Math.abs(e)<r.amount)return En.format(Math.round(e),r.name);e/=r.amount}return En.format(Math.round(e),"years")}const bo=t=>t%4===0&&t%100!==0||t%400===0,wo=(t,e)=>[31,bo(t)?29:28,31,30,31,30,31,31,30,31,30,31][e],Ci=(t,e)=>{const s=new Date(t),r=t.getDate();return s.setDate(1),s.setMonth(s.getMonth()+e),s.setDate(Math.min(r,wo(s.getFullYear(),s.getMonth()))),s},Pi=(t,e)=>{const s=new Date(t);return s.setDate(s.getDate()+e),s},Xe="en-US",Ri={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"}},xi={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"}},Ai=(t,{dateStyle:e="short",locales:s=Xe}={dateStyle:"short",locales:Xe})=>{const r=e==="short"?Ri.short:{dateStyle:e};return new Intl.DateTimeFormat(s,r).format(t)},Li=(t,{locales:e=Xe,timeStyle:s="short"}={locales:Xe,timeStyle:"short"})=>{const r=xi[s];return new Intl.DateTimeFormat(e,r).format(t)},ki=(t,{dateStyle:e="short",locales:s=Xe,timeStyle:r="short"}={dateStyle:"short",locales:Xe,timeStyle:"short"})=>{const o={...e&&Ri[e],...r&&xi[r]};return new Intl.DateTimeFormat(s,o).format(t)},Du=Object.freeze(Object.defineProperty({__proto__:null,addDaysToDate:Pi,addMonthsToDate:Ci,formatDate:Ai,formatDateSince:Di,formatDateTime:ki,formatTime:Li,getDaysInMonth:wo,isLeapYear:bo},Symbol.toStringTag,{value:"Module"}));function Fi(t,e,s=300){let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>{e.apply(t,o)},s)}}const Z="canvas-renderer",Tr=new Map,_n=new Map,_r=new Map,Ir=new Map,rs=(t,e)=>{Ni[t]=e},Ni={indexExtension:{registerIndexExtension:(t,e)=>{const s=Ir.get(t)||{};Object.assign(s,e),Ir.set(t,e)},loadIndexExtensions:t=>Ir.get(t)||{}},loader:{registerLoader:(t,e)=>{_n.set(t,e)},executeLoader:async(t,e)=>{const s=_n.get(t);if(s)return await s(e)}},propertyMapper:{registerPropertyMapper:(t,e)=>{_r.set(t,e)},hasMapper:t=>_r.has(t),executeMapper:(t,e,s)=>{const r=_r.get(t);return r?r(e,s):""}},dataMapper:{registerDataMapper:(t,e)=>{const s=Tr.get(t)||[];s.push(e),Tr.set(t,s)},executeMapper:async(t,e,s)=>{const r=Tr.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(!O[Z]){console.warn(`Canvas renderer extension point is not registered. Cannot register renderer "${t}".`);return}O[Z].register(t,e)}}},O=Ni,Cu=async({context:t,extension:e})=>{const s=await O.loader.executeLoader(e,{});return t==null||t.set(e,s),s},Pu=async({extension:t,contextData:e,data:s})=>await O.dataMapper.executeMapper(t,s,e),Ru=async({extension:t,contextData:e,data:s})=>await O.propertyMapper.executeMapper(t,s,e),xu=Object.freeze(Object.defineProperty({__proto__:null,executeDataMapperExtension:Pu,executeLoaderExtension:Cu,executePropertyMapperExtension:Ru},Symbol.toStringTag,{value:"Module"})),Au="Extensions";class Lu{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 le=(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),{}),Ui="studio.tools.preview",ku="studio.relax.store.validation",ji="studio.log.debug",Bi="studio.log.info",Fu={profiles:[Ui]};var ri;const Nu=((ri=globalThis.getKosConfig)==null?void 0:ri.call(globalThis))||JSON.stringify(Fu),Ki=JSON.parse(Nu);globalThis.kosConfig=Ki;const vo=Ki,Hi=()=>vo.profiles||[],Ur=t=>Hi().includes(t),Uu=()=>vo.logging||!1,ju=()=>{const t=Ur(ji),e=Ur(Bi);return t?"DEBUG":e?"INFO":void 0},zi=()=>{const t=le(),e=ju(),r=t.kosLogLevel??e??window.kosLogLevel??process.env.KOS_LOG_LEVEL;return r||"WARN"},Gi=()=>window.kosMessageLogging||process.env.KOS_MESSAGE_LOGGING==="true",Vi=()=>window.kosMessageStudioLogging||process.env.KOS_MESSAGE_STUDIO_LOGGING==="true",Yi="ws-log",Bu=D.methodFactory,qi=Gi(),Ku=Vi();D.methodFactory=function(t,e,s){const r=Bu(t,e,s);return function(o,n){var c;const i=s?String(s):"",a=i?`[${String(i).substring(i.lastIndexOf(":")+1)}] | `:"[root] | ";r(`${a}${o}`,n||""),(c=globalThis==null?void 0:globalThis.kosConfig)!=null&&c.logging&&globalThis.kosLog&&(s!==Yi||qi&&Ku)&&globalThis.kosLog(`UI: ${a}${o}`)}};let Wi=zi();D.setLevel(Wi);window.setKosLogLevel=t=>{Wi=t,D.setLevel(t)};const Cs=D.getLogger(Yi);window.enableKosMessageLog=()=>{Cs.setLevel(D.levels.INFO)};window.disableKosMessageLog=()=>{Cs.setLevel(D.levels.ERROR)};qi?window.enableKosMessageLog():window.disableKosMessageLog();const Hu=["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(";"),zu=["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()},p={...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(d=>d.name===s))==null?void 0:i.level;return o?r.setLevel(o):(o=(c=(a=globalThis.kos.logOverrides)==null?void 0:a.find(d=>s.startsWith(d.name)))==null?void 0:c.level,o&&r.setLevel(o)),r},wsSend:(...t)=>{const e=String(t).replace(/\n/g,"\\n");Cs.info(`%c⬆ ${e}`,Hu)},wsReceive:(...t)=>{const e=String(t).replace(/\n/g,"\\n");Cs.info(`%c⬇ ${e}`,zu)}},Qi="featureFlagResolver",hs=new Map;rs(Qi,{register:(t,e)=>{var s;hs.has(t)||hs.set(t,[]),(s=hs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=hs.get(t);if(!s)return[];const r=s.map(a=>a(e)),n=(await Promise.allSettled(r)).map(a=>a.status==="fulfilled"?a.value:(p.info(`Feature flag resolver ${t} failed: ${a.reason}`),[])).flat(),i=Array.from(new Set(n)).reduce((a,c)=>(a[c]=!0,a),{});return Ji.updateFlags(i),Object.keys(i)}});const Gu="kos.loader.featureFlag";class Zi{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 Zi;const Ji=window.KosFeatureFlags,Xi=(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)}`},ea=t=>{const s=new RegExp("hsl\\((\\d+),\\s+(\\d+)\\%,\\s+(\\d+)\\%\\)").exec(t);if(!s)throw Error("Invalid HSL string");return Xi(parseInt(s[1]),parseInt(s[2]),parseInt(s[3]))},ta=(t,e)=>getComputedStyle(t).getPropertyValue(e),Vu=(t,e)=>ea(ta(t,e)),Yu=(t,e)=>{const s={...t};return s.id&&delete s.id,s},jr=(t,e,s=Yu)=>{const r=s(t,e);M.runInAction(()=>{Object.assign(e,r)})},Sr=new Map,sa={addToDeletionQueue:(t,e)=>{const s=Sr.get(t)||[];s.push(e),Sr.set(t,s)},cancelDeletion:t=>{const e=Sr.get(t);e&&e.forEach(s=>{clearTimeout(s)})}},qu=p.createLogger({name:"kos-dependency-manager"});class Wu{constructor(){l(this,"_usedByCache",new Map);l(this,"_usesCache",new Map)}add(e,s){sa.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?(qu.info(`Model ${e} is still used by: ${s.join(", ")}`),!1):!0}clear(){this._usedByCache.clear(),this._usesCache.clear()}}var b=(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))(b||{}),x=(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))(x||{});const In=p.createLogger({name:"kos-model-cache"});class Qu{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()).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?(In.debug("Returning cached preloaded models"),this._preloaded):(this._preloaded=this.preloadKeys.map(s=>(In.debug(`Preloading model: ${typeof s=="string"?s:s.modelType}`),e(s))).filter(s=>!!s),this._isPreloaded=!0,this._preloaded)}}const Q=Symbol("SubscriptionHandlers"),L=Symbol("DependencyModels"),At=Symbol("FutureService"),Lt=Symbol("ChildModels"),kt=Symbol("ParentModel"),Ft=Symbol("LogConfig"),Ts=Symbol("ReferenceConfig"),ra=Symbol("KosModelSymbol"),Ne=Symbol("ModelEffects"),Ps=Symbol("CompanionParentModel"),ge=(t,e)=>{t[Lt]=t[Lt]||{},t[Lt][e]=!0},Be=t=>`{PROP_${String(t)}}`,Zu=t=>`{PROP_${String(t)}}`,Ju=Be("kosParentId"),cr=t=>e=>{e[kt]=e[kt]||{};const s=(t==null?void 0:t.parentId)||Ju;e[kt]={parentId:s}},et=({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]=et({value:r[n],modelId:e,modelData:s}),o),{});else if(typeof r=="string"){const o=new RegExp(".*({PROP_(.+)})");let n=r!=null&&r.includes(Ds)?r.replace(Ds,e):r;const i=n.match(o);if(i&&s&&(Object.getOwnPropertyNames(s).includes(i[2])||Object.getOwnPropertyNames(Object.getPrototypeOf(s)).includes(i[2]))){const a=s[i[2]];n=a?n.replace(i[1],a):void 0}return n}else return r;return r},Xu=p.createLogger({group:"decorators",name:"kos-model"});function eh(t,e,s){var n;const r=(n=t[kt])==null?void 0:n.parentId;if(!r)return;const o=et({value:r,modelData:s,modelId:e});o&&typeof o=="string"&&K.setParentContext(e,o)}function th(t){const e=t[At];e&&Object.entries(e).forEach(([s,{handler:r}])=>{t[s]=r})}function sh(t,e){const s=t[L]||{};Object.entries(s).forEach(([r,o])=>{const n=et({value:o.id||o.modelType,modelData:t,modelId:e}),i=Object.entries((o==null?void 0:o.options)||{}).reduce((a,[c,d])=>(a[c]=et({value:d,modelData:t,modelId:e}),a),{});if(typeof n=="string"){if(!o.lazy){const a=S.getInstance().modelManager.createModelInstance(o.modelType,n,i);t[r]=a.data}S.getInstance().modelManager.addDependency(e,n)}})}function rh(t){try{return M.makeAutoObservable(t)}catch(e){return Xu.error("Failed to make observable:",e),t}}const oh={construct(t,e){var a;const[s,r={}]=e,o=K.createContext(s);eh(t,s,r);const n=p.createLogger({name:t.prototype.modelTypeId,group:((a=t[Ft])==null?void 0:a.group)??"kos-model"}),i=new t(s,r,{logger:n,kosContext:o});return th(i),sh(i,s),rh(i)}};function P(t){return e=>{var r,o;const s=e;return s.prototype.modelTypeId=t,s.prototype[ra]=!0,(r=s.prototype)[Q]??(r[Q]={}),(o=s.prototype)[L]??(o[L]={}),p.ifDebug(()=>{p.debug(`Registering model with id ${t}`)}),new Proxy(s,oh)}}const nh=({modelType:t})=>e=>{cr()(e),P(t)(e)};function ih(t,e,s){const r=s.value;s.value=function(...o){const n=K.getContext(this.id);return o.push(n),r.apply(this,o)}}var j=(t=>(t.INIT="init",t.LOAD="load",t.READY="ready",t.ACTIVATE="activate",t.ONLINE="online",t))(j||{});const ah=Object.freeze(Object.defineProperty({__proto__:null,DependencyLifecycle:j},Symbol.toStringTag,{value:"Module"})),Ee=Symbol("HttpRouteHandlers"),Sn="__httpBrowserRouter";function lr(t){return function(s){return function(r,o,n){r[Ee]=r[Ee]||[];const i={method:t,path:s,handler:o};return r[Ee].push(i),r[L]=r[L]||{},r[L][Sn]||(r[L][Sn]={modelType:"browser-router-model",lifecycle:j.INIT}),n}}}const oa=lr("GET"),os=lr("POST"),ch=lr("PUT"),na=lr("DELETE"),lh=na;function Rs(t){return!!(t!=null&&t[Ee])&&t[Ee].length>0}function ia(t){return(t==null?void 0:t[Ee])||[]}const dh=({group:t}={group:""})=>e=>{e[Ft]=e[Ft]||{},e[Ft]={group:t}};function aa(t){return(e,s,r)=>{e[Ne]=e[Ne]||{},e[Ne][s]={dependencies:t==null?void 0:t.dependencies,value:r.value},r.value=function(){throw new Error(`Method ${s} cannot be called directly.`)}}}const uh=t=>(e,s)=>{e[Ts]=e[Ts]||{},e[Ts][s]=t},ht=({modelType:t,id:e,options:s,lifecycle:r})=>(o,n)=>{o[L]=o[L]||{},o[L][n]={modelType:t,id:e,options:s,lifecycle:r||j.INIT}},hh=({topic:t,handler:e,websocket:s=!1,condition:r=()=>!0})=>o=>{o[Q]=o[Q]||{},Array.isArray(t)?t.forEach(n=>{o[Q][n]={websocket:s,handler:e,condition:r}}):o[Q][t]={websocket:s,handler:Fi(o,M.action(e),200),condition:r}};function ca(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 la(t){return t.endsWith("/*")}function k({topic:t,condition:e=(_,F)=>!0,transform:s=_=>_,websocket:r=!1,fos:o=!1,bridge:n=!1,skipParse:i=!1,lifecycle:a,destinationAddress:c,debounce:d,throttle:u,buffer:h,filter:f,once:m,replay:w,wildcardName:v,flow:E}){return(_,F,te)=>{_[Q]=_[Q]||{};let I=te.value;const V=typeof d=="number"?d:d==null?void 0:d.delay,N=typeof u=="number"?u:u==null?void 0:u.interval;V&&V>0?I=fh(I,d):N&&N>0?I=gh(I,u):h?I=ph(I,h):m&&(I=mh(I));let Y=e;if(f){const ve=e;Y=(vn,Mn,Er)=>f(Er)?ve(vn,Mn,Er):!1}const Oe={websocket:r,fos:o,bridge:n,handler:I,condition:Y,transform:s,lifecycle:a,skipParse:i,destinationAddress:c,wildcardName:v,flow:E};Array.isArray(t)?t.forEach(ve=>{_[Q][ve]=Oe}):_[Q][t]=Oe,w&&yh(t,w.bufferSize)}}function fh(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 gh(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 d=[...i];i=[],t.call(this,d)}};return function(d){const u=Date.now(),h=u-o;r?h>=s?(o=u,t.call(this,d)):n||(n=setTimeout(()=>{o=Date.now(),t.call(this,d),n=null},s-h)):(i.push(d),h>=s?(o=u,c.call(this)):a||(a=!0,n=setTimeout(()=>{o=Date.now(),c.call(this),n=null,a=!1},s-h)))}}function ph(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 mh(t){let e=!1;return function(s){e||(e=!0,t.call(this,s))}}function yh(t,e){(Array.isArray(t)?t:[t]).forEach(r=>{go(r,e)})}function da(t,e){return`${uo}${t}${e?`/${e}`:`/${t}`}`}function ua(t){return`${uo}${t}`}function Or(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 ha=5e3;class bh extends Error{constructor(s,r){super(s);l(this,"model");this.model=r}}const fa=(t,e,s)=>{let r;return{promise:new Promise((i,a)=>{r=setTimeout(()=>{p.error(`Model ${e.modelId} - ${e.modelTypeName} - ${s} timed out after ${t}ms`),a(new bh(`${e.modelId} - ${e.modelTypeName} - ${s}`,e))},t)}),cancel:()=>{r&&clearTimeout(r)}}},ga=t=>t.fsm.transitionTo(x.GO_ACTIVE,b.ACTIVE),pa=t=>t.whenReady(),ma=t=>t.fsm.transitionTo(x.LOAD,b.LOADED),wh=t=>t.fsm.transitionTo(x.UNLOAD,b.UNLOADED),ya=t=>t.fsm.transitionTo(x.INITIALIZE,b.INITIALIZED);var Mo=(t=>(t.ACTIVE="active",t.READY="ready",t.LOAD="load",t.UNLOAD="unload",t.INIT="init",t))(Mo||{});const _s={active:ga,ready:pa,load:ma,init:ya},ba=(t,e)=>{const s=e.id||e.modelType,r=et({value:s,modelData:t.modelData,modelId:t.modelId});p.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]=et({value:c,modelData:t.modelData,modelId:t.modelId}),i},{});return{dependentModel:S.getInstance().modelManager.createModelInstance(e.modelType,r,o),dataModelId:r}},wa=(t,e=j.READY)=>{var o;const s=((o=t.modelData)==null?void 0:o[L])||{};return Object.keys(s).length===0?(p.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}=ba(t,i);t.modelData[n]=a.data,p.debug(`waiting for dependent model ${i.modelType} with id ${c} - waiting for WHENREADY`);const d=async(f,m,w)=>{var v;await((v=f.whenReady)==null?void 0:v.call(f)),p.debug(`dependent model ${m} with id ${w} - READY`)},{promise:u,cancel:h}=fa(ha,t,t.status);return Promise.race([d(a.model,i.modelType,c).then(()=>{h()}).catch(f=>{console.error(`Error waiting for dependent model ${i.modelType} with id ${c}:`,f),h()}),u])}).filter(n=>!!n)},va=async(t,e,s,r)=>{if(p.debug(`Execute lifecycle with ${e.length} models`),e.length===0){p.debug(`${t.modelId} has no children. Returning`);return}if(!s){p.error(`${t.modelId} is not transitioning with a valid target ${s}`);return}const o=e.map(a=>{let c;return _s[s]&&a?c=_s[s](a):(a||p.error("model is undefined. This shouldn't happen"),_s[s]||p.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:(p.error(`No model found ${a.modelId}`),!1):(p.error(`No promise found ${a.modelId}`),!1)),i=(await Promise.allSettled(o.map(a=>{var u;const{promise:c,cancel:d}=fa(ha,a.model,a.status);return Promise.race([(u=a.promise)==null?void 0:u.then(()=>{d()}).catch(h=>{p.error(`Model ${a.modelId} - ${a.type} failed to transition to ${s}: ${h.message}`),d()}),c])}))).filter(a=>a.status==="rejected");i.length>0&&p.error(`Model ${t.modelId} had ${i.length} failed child models on ${r}`)},Ma=async(t,e,s)=>{await va(t,t.getChildren().filter(r=>!!r),e,s)},vt=async(t,e)=>{const r=(await Promise.allSettled(wa(t,e))).filter(o=>o.status==="rejected");r.length&&(p.error(`There were ${r.length} failed dependent models on ${e}`),p.error(r))},vh=t=>typeof t.toJSON=="function",Nt=t=>t[L]!==void 0,Eo=t=>t.revision!==void 0&&t.index!==void 0,Ea=t=>{if(t){if(Nt(t))return t;if(Eo(t))return t.data;if(t instanceof Map||t instanceof M.ObservableMap||t instanceof Set)return Array.from(t.values()).filter(Nt);if(Array.isArray(t))return t.filter(Nt)}};function Mh(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}}}),Eh(t.modelData,t.modelTypeName,t.modelId,t)}function Eh(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,d;const o=((a=r.getChildren)==null?void 0:a.call(r))||[],n=((c=r.companionManager)==null?void 0:c.all())||[],i=r.modelData[L]||{};return{id:s,type:e,companions:{count:n.length,data:n.map(u=>({type:u.modelTypeName,id:u.modelId}))},dependencies:{count:Object.keys(i).length,data:Object.values(i).map(u=>({id:u.id||u.modelType,type:u.modelType,options:u.options,lifecycle:u.lifecycle}))},children:{count:o.length,data:o.map(u=>({id:u.modelId,type:u.modelTypeName}))},data:((d=t.toJSON)==null?void 0:d.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];Nt(i)?o[`[KOS Model] ${n}`]=typeof i.toJSON=="function"?i.toJSON():{id:i.id,type:i.constructor.name}:Eo(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 Th{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!==b.FAILED).filter(r=>!!r);return s.forEach(r=>{try{K.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[Lt])||{};return Object.keys(e).map(r=>Ea(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 _h{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 Ih{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[Ne])||{};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())},d=n?M.reaction(()=>n(this.modelData),c,{fireImmediately:!!(i!=null&&i.fireImmediately)}):M.autorun(c);this.disposers.push(d)}}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 Sh=p.createLogger({name:"model-active-machine"}),Oh=t=>{const e=y.createMachine(b.INACTIVE,{[b.FAILED]:y.state(y.transition(x.GO_ACTIVE,b.ACTIVATING)),[b.INACTIVE]:y.state(y.transition(x.GO_ACTIVE,b.ACTIVATING)),[b.ACTIVATING]:y.invoke(()=>(t.activeStatus=b.ACTIVATING,t.activate()),y.transition("done",b.ACTIVE,y.action(()=>{t.activeStatus=b.ACTIVE})),y.transition("error",b.FAILED,y.action(()=>{t.activeStatus=b.FAILED}))),[b.ACTIVE]:y.state(y.transition(x.GO_INACTIVE,b.DEACTIVATING)),[b.DEACTIVATING]:y.invoke(()=>(t.activeStatus=b.DEACTIVATING,t.deactivate()),y.transition("done",b.INACTIVE,y.action(()=>{t.activeStatus=b.INACTIVE})),y.transition("error",b.FAILED,y.action(()=>{t.activeStatus=b.FAILED})))});return{service:y.interpret(e,r=>Sh.debug(r.machine.current)),machine:e}},On=p.createLogger({name:"model-online-machine"}),$h=t=>{const e=y.createMachine(b.OFFLINE,{[b.ONLINE]:y.state(y.transition(x.GO_OFFLINE,b.OFFLINE,y.action(async()=>{await t.offline(),t.onlineStatus=b.OFFLINE}))),[b.OFFLINE]:y.state(y.transition(x.GO_ONLINE,b.ONLINE,y.action(async()=>{On.debug(`Going online with model ${t.modelId}`),await t.online(),t.onlineStatus=b.ONLINE,await t.fsm.transitionTo(x.INITIALIZE,b.INITIALIZED)})))}),s=y.interpret(e,r=>On.debug(r.machine.current));return{machine:e,service:s}},Dh=t=>{var r;const e=Oh(t).service,s=$h(t).service;return y.createMachine(b.CREATING,{[b.CREATING]:y.state(y.transition(x.CREATE,b.CREATED)),[b.CREATED]:y.state(y.immediate(b.INITIALIZING)),[b.INITIALIZING]:y.invoke(()=>(W(()=>{t.status=b.INITIALIZING}),t.init()),y.transition("done",b.INITIALIZED,y.action(()=>{t.status=b.INITIALIZED})),y.transition("error",b.FAILED,y.action(()=>{p.error(`Model ${t.modelId} - ${t.modelTypeName} failed to initialize. Transitioning to FAILED state.`),t.status=b.FAILED}))),[b.INITIALIZED]:y.state(y.immediate(b.LOADING)),[b.LOADING]:y.invoke(()=>(W(()=>{t.status=b.LOADING}),t.load()),y.transition("done",b.LOADED,y.action(()=>{t.status=b.LOADED})),y.transition("error",b.FAILED,y.action(()=>{t.status=b.FAILED}))),[b.LOADED]:y.state(y.immediate(b.READYING),y.transition(x.UNLOAD,b.UNLOADING)),[b.RESETTING]:y.invoke(()=>{var o;return W(()=>{t.status=b.RESETTING}),(o=t.unload)==null||o.call(t),t.load()},y.transition("done",b.LOADED,y.action(()=>{t.status=b.LOADED}))),[b.READYING]:y.invoke(()=>(W(()=>{t.status=b.READYING}),t.ready()),y.transition("done",b.READY,y.action(()=>{W(()=>{t.status=b.READY}),s.send(x.GO_ONLINE)})),y.transition("error",b.FAILED,y.action(()=>{t.status=b.FAILED}))),[b.READY]:y.state(y.transition(x.UNLOAD,b.UNLOADED,y.action((r=t.unload)==null?void 0:r.bind(t))),y.transition(x.RESET,b.RESETTING),y.transition(x.GO_ONLINE,b.READY,y.action(()=>{s.send(x.GO_ONLINE)})),y.transition(x.GO_OFFLINE,b.READY,y.action(()=>{s.send(x.GO_OFFLINE)})),y.transition(x.GO_ACTIVE,b.READY,y.action(()=>{e.send(x.GO_ACTIVE)})),y.transition(x.GO_INACTIVE,b.READY,y.action(()=>{e.send(x.GO_INACTIVE)}))),[b.UNLOADED]:y.state(),[b.FAILED]:y.state()})},Ch=p.createLogger({name:"kos-model-lifecycle"}),Ph=t=>({service:y.interpret(Dh(t),s=>Ch.debug(`state machine for model ${t.modelId}: ${s.machine.current});`))});class Rh{constructor(e,s){l(this,"disposer");l(this,"service");this.model=e,this.log=s;const r=Ph(e);this.service=r.service,this.service.send(x.CREATE)}get current(){return this.service.machine.current}async transitionTo(e,s,r=b.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[b.ACTIVE,b.INACTIVE].includes(e)?this.model.activeStatus:this.model.status}}const Ta="browser-router-model";class To{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(!Rs(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=me(Ta))==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 Rs(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=ia(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 xh(t,e){if(!Rs(t))return;const s=me(Ta);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 To(t,e).setRouter(s.model)}class Ah{static create({modelId:e,modelTypeName:s,component:r}){const o=[r??"kos",s,e].filter(Boolean).join(".");return p.createLogger({name:o})}}class Lh{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 kh{constructor(e,s){l(this,"unsubscribers",[]);this.model=e,this.log=s}register(){const e=this.model.modelId,s=$("/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(x.GO_ONLINE,b.ONLINE)}),r=$("/kosCore/offline",async()=>{this.log.debug(`Offline event received for ${e} — sending GO_OFFLINE`),await this.model.fsm.transitionTo(x.GO_OFFLINE,b.OFFLINE)});this.unsubscribers.push(s.unsubscribe),this.unsubscribers.push(r.unsubscribe)}dispose(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[]}}class Fh{constructor(e){l(this,"subscription");l(this,"unsubscribe");l(this,"eventType");this.eventType=e,this.subscription={queue:[],resolvers:[],closed:!1};const s=$(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 $n(t){return new Fh(t)}var _a=(t=>(t.GET="GET",t.PUT="PUT",t.POST="POST",t.DELETE="DELETE",t))(_a||{});const Ia=({path:t,requestId:e,method:s,destinationAddress:r})=>{let o=`${rr}:${s}
2
2
  `;return o+=`topic:${t}
3
3
  `,o+=`${dt}:${t}
4
4
  `,o+=`${ts}:${e}
@@ -34,14 +34,14 @@
34
34
  `,o+=`${ye}:${s}
35
35
  `,r&&Object.keys(r).forEach(n=>{o+=`${n}:${r[n]}
36
36
  `}),o+=`
37
- `,o},Nh=(t,e)=>{const s=t,r=xe(Da(e),typeof s=="string"?s:JSON.stringify(s)),o=S.getInstance().transport.socket;o?(m.debug("Sending message",r),o.socket.send(r)):m.error("socket transport is not initialized")},Ca=({path:t,responseId:e,status:s,destinationAddress:r})=>{let o=`topic:${t}
37
+ `,o},Nh=(t,e)=>{const s=t,r=xe(Da(e),typeof s=="string"?s:JSON.stringify(s)),o=S.getInstance().transport.socket;o?(p.debug("Sending message",r),o.socket.send(r)):p.error("socket transport is not initialized")},Ca=({path:t,responseId:e,status:s,destinationAddress:r})=>{let o=`topic:${t}
38
38
  `;return o+=`${dt}:${t}
39
39
  `,e&&(o+=`${or}:${e}
40
40
  `),o+=`${ao}:${s}
41
41
  `,o+=`${Ie}:${r}
42
42
  `,o+=`${ye}:kos.studio.response
43
43
  `,o+=`
44
- `,o},Uh=(t,e)=>{const s=t,r=xe($a(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},jh=(t,e)=>{const s=e.responseId?{status:e.status,data:t}:t,r=xe(Ca(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Pa=({topic:t})=>{let e=`topic:${t}
44
+ `,o},Uh=(t,e)=>{const s=t,r=xe($a(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):p.error("socket transport is not initialized")},jh=(t,e)=>{const s=e.responseId?{status:e.status,data:t}:t,r=xe(Ca(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):p.error("socket transport is not initialized")},Pa=({topic:t})=>{let e=`topic:${t}
45
45
  `;return e+=`${ye}:kos.broker.send
46
46
  `,e+=`
47
47
  `,e},Ra=({responseId:t,destinationAddress:e,type:s,sourceAddress:r,status:o})=>{let n=`${or}:${t}
@@ -57,24 +57,24 @@
57
57
  `),o+=`${Ie}:${s}
58
58
  `,o+=`${ye}:${r??"kos.message.request"}
59
59
  `,o+=`
60
- `,o},Bh=({msg:t,options:e})=>{const s=t,r=xe(Pa(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Aa=({msg:t,options:e})=>{const s=t,r=xe(xa(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},La=({msg:t,options:e})=>{const s=t,r=xe(Ra(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Br=(t,e)=>{try{return e?t.body??t:JSON.parse(t.body)}catch{return t.body||t}};class Kh extends WebSocket{constructor(e){super(e)}}function Dn(t){const e=`
60
+ `,o},Bh=({msg:t,options:e})=>{const s=t,r=xe(Pa(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):p.error("socket transport is not initialized")},Aa=({msg:t,options:e})=>{const s=t,r=xe(xa(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):p.error("socket transport is not initialized")},La=({msg:t,options:e})=>{const s=t,r=xe(Ra(e),JSON.stringify(s)),o=S.getInstance().transport.socket;o?o.socket.send(r):p.error("socket transport is not initialized")},Br=(t,e)=>{try{return e?t.body??t:JSON.parse(t.body)}catch{return t.body||t}};class Kh extends WebSocket{constructor(e){super(e)}}function Dn(t){const e=`
61
61
 
62
62
  `,s=`
63
63
  `,r=/:(.*)/s,[o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[d,u]=c.split(r).map(h=>h.trim());return d&&u&&(a[d]=u),a},{}),body:n}}function Hh(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[d,u]=c.split(r).map(h=>h.trim());return d&&u&&(a[d]=u),a},{}),body:n}}class _o{constructor({host:e,port:s,protocol:r,alias:o,onConnectionEstablished:n,onConnectionLost:i,Transport:a=Kh}){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,$("/mock/msg/receive",c=>{var d,u;if(c!=null&&c.body){m.wsReceive(c==null?void 0:c.body);const h={data:c.body};(u=(d=this.socket)==null?void 0:d.onmessage)==null||u.call(d,h)}}),M.makeObservable(this,{connectionEstablished:M.observable})}addOfflineMessage(e){this.offlineMessages.push({msg:e})}processMessageEvent(e){const{data:s}=e;return Dn(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}=Hh(e.data);n=c,i={...s,...a}}B(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[d,u]=c.split(r).map(h=>h.trim());return d&&u&&(a[d]=u),a},{}),body:n}}class _o{constructor({host:e,port:s,protocol:r,alias:o,onConnectionEstablished:n,onConnectionLost:i,Transport:a=Kh}){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,$("/mock/msg/receive",c=>{var d,u;if(c!=null&&c.body){p.wsReceive(c==null?void 0:c.body);const h={data:c.body};(u=(d=this.socket)==null?void 0:d.onmessage)==null||u.call(d,h)}}),M.makeObservable(this,{connectionEstablished:M.observable})}addOfflineMessage(e){this.offlineMessages.push({msg:e})}processMessageEvent(e){const{data:s}=e;return Dn(s)}onMessage(e){try{p.debug("webSocketTransport: onMessage received");const{headers:s,body:r}=this.processMessageEvent(e);p.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}=Hh(e.data);n=c,i={...s,...a}}B(o,n,i)}}catch(s){p.error("onMessage exception",s.message,s.stack)}}onOpen(e){p.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}=Dn(String(e));B(ss.SEND,{headers:o,body:n})}if(window.kosTopicIntercept&&window.kosEnableMocks){const{handler:o,requestId:n}=window.kosTopicIntercept(e);if(o){e=`mocked:true
69
+ `),p.debug(`sending ${this.offlineMessages.length} offline FOS messages`),this.offlineMessages.forEach(r=>{var o;p.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}),p.debug("websocket disconnected. Attempting calling callback"),this.onConnectionLost&&setTimeout(this.onConnectionLost,2500)}send(e){var s,r;if(p.wsSend(e),window.kosLogEvents){const{headers:o,body:n}=Dn(String(e));B(ss.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 zh{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 Gh extends _o{constructor({host:s,port:r,alias:o}){super({host:s,port:r,Transport:zh,alias:o,protocol:"kos://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}class Vh extends _o{constructor({host:s,port:r}){super({host:s,port:r,protocol:"ws://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="requestId"}}class Yh extends _o{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 Kr{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 Gh({host:e,port:s,protocol:r,onConnectionEstablished:i,onConnectionLost:a,alias:n})):o?new Vh({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a}):new Yh({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a})}}const qh=le();qh.fos&&(window.kosUseFos=!0);const Cn=process.env.KOS_FOS_PORT;window.kosUseFos=!!(window.kosUseFos||process.env.KOS_USE_FOS==="true");window.kosFosPort=Cn?parseInt(Cn):0;const Le=D.getLogger("web-socket-transport");var Fa=(t=>(t.NOT_INITIALIZED="not_initialized",t.INITIALIZED="initialized",t.OFFLINE="OFFLINE",t.ONLINE="ONLINE",t))(Fa||{}),Ut=(t=>(t.CONNECTED="websocket.connected",t.DISCONNECTED="websocket.disconnected",t.RELOAD="websocket.reload",t))(Ut||{});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,d=>{d&&(Le.warn("Connection Established"),B("websocket.connected","websocket.connected"),c&&B("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=Kr.build({host:this.host,port:this.fosPort||9854,protocol:this.protocol,fos:!0})),this.socket=Kr.build({host:this.host,port:this.port,protocol:this.protocol,alias:this.alias,onConnectionLost:()=>{Le.error("Connection Lost"),B("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,w,v;Le.debug(`${s} to topic ${e}`);const i=le(),a=i==null?void 0:i.connId,c=n??a??((f=window==null?void 0:window.kosBridge)==null?void 0:f.call(window,"connId"));Le.debug(`subscribing with connId ${c}`);const d=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 zh{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 Gh extends _o{constructor({host:s,port:r,alias:o}){super({host:s,port:r,Transport:zh,alias:o,protocol:"kos://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}class Vh extends _o{constructor({host:s,port:r}){super({host:s,port:r,protocol:"ws://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="requestId"}}class Yh extends _o{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 Kr{static build({host:e,port:s,protocol:r,fos:o,alias:n,onConnectionEstablished:i,onConnectionLost:a}){return p.debug("initializing websocket connection"),p.warn(`kosWindowWebsocketOpen: ${globalThis.kosWindowWebsocketOpen?"true":"false"}`),p.warn(`fos: ${o?"true":"false"}`),window.kosMockWs||globalThis.kosWindowWebsocketOpen&&!o?(p.warn("Using bridged message transport"),new Gh({host:e,port:s,protocol:r,onConnectionEstablished:i,onConnectionLost:a,alias:n})):o?new Vh({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a}):new Yh({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a})}}const qh=le();qh.fos&&(window.kosUseFos=!0);const Cn=process.env.KOS_FOS_PORT;window.kosUseFos=!!(window.kosUseFos||process.env.KOS_USE_FOS==="true");window.kosFosPort=Cn?parseInt(Cn):0;const Le=D.getLogger("web-socket-transport");var ka=(t=>(t.NOT_INITIALIZED="not_initialized",t.INITIALIZED="initialized",t.OFFLINE="OFFLINE",t.ONLINE="ONLINE",t))(ka||{}),Ut=(t=>(t.CONNECTED="websocket.connected",t.DISCONNECTED="websocket.disconnected",t.RELOAD="websocket.reload",t))(Ut||{});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,d=>{d&&(Le.warn("Connection Established"),B("websocket.connected","websocket.connected"),c&&B("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(p.warn(`Initializing WebSocketTransport on ${this.host}:${this.port}`),this.useFosTransport&&(this.fosSocket=Kr.build({host:this.host,port:this.fosPort||9854,protocol:this.protocol,fos:!0})),this.socket=Kr.build({host:this.host,port:this.port,protocol:this.protocol,alias:this.alias,onConnectionLost:()=>{Le.error("Connection Lost"),B("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,m,w,v;Le.debug(`${s} to topic ${e}`);const i=le(),a=i==null?void 0:i.connId,c=n??a??((f=window==null?void 0:window.kosBridge)==null?void 0:f.call(window,"connId"));Le.debug(`subscribing with connId ${c}`);const d=c?`dst-addr:${c}
72
72
  `:"",u=r?`subscribe:${e}`:o?`type:fos.broker
73
73
  cmd:${s}
74
74
  ${d}topics:${e}
75
75
  `:`${d}type:kos.broker.${s}
76
76
 
77
- ["${e}"]`;if(r?(p=this.fosSocket)==null?void 0:p.connectionEstablished:(w=this.socket)==null?void 0:w.connectionEstablished){const E=r?this.fosSocket:this.socket;(v=E==null?void 0:E.socket)==null||v.send(u)}else{Le.debug("no connection adding to offline messages");const E=r?this.fosSocket:this.socket;E==null||E.addOfflineMessage(u)}}subscribeTopic({topic:e,callback:s,fos:r,bridge:o,destinationAddress:n}){const{unsubscribe:i,count:a}=$(e,s);return Le.debug(`Topic ${e} currently has ${a} subscribers`),this._sendSubscriptionMessage(e,"subscribe",r,o,n),()=>{const{count:c}=i();Le.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 Wh{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 d=this.config.filter?c.filter(h=>this.shouldProcessEvent(h)):c;if(d.length===0)return;this.config.backpressure&&await this.waitForCapacity();const u=this.config.transform?this.config.transform(d):d;return this.stats.batchesProcessed++,this.updateProcessingStats(d),u};try{for await(const d of e)if(this.stats.eventsReceived++,this.config.backpressure)for(this.enqueueEvent(d);this.eventQueue.length>0;){const u=this.dequeueEvent();u&&n.push(u);const f=Date.now()-i;if(n.length>=r||f>=o){const p=await a();p!==void 0&&(yield p);break}}else{n.push(d);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 Qh{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[Q])||{},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 d=this.createHandler(c,i);this.subscribe(i,c,d,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}=$(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 d=Br(r,s.skipParse),u=s.transform(d);if(a&&s.condition(u,this.modelData,r))return this.callHandlerWithWildcard(s,u,c,r)}else{this.log.warn(`Model ${this.modelId} not ready. Queuing message for ${e}`);const d=()=>{const u=Br(r,s.skipParse),h=s.transform(u);if(a&&s.condition(h,this.modelData,r))return this.callHandlerWithWildcard(s,h,c,r)};this.offlineQueue.enqueue(d)}}catch(n){this.log.error(`Error handling subscription for ${e}`,n)}}}extractWildcardCapture(e,s,r){var n;if(!r.wildcardName||!la(e))return null;const o=((n=s==null?void 0:s.headers)==null?void 0:n.topic)||"";return ca(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 Wh(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=$n(s)}else i=$n(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 Ge(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 Zh(t){return!!(t!=null&&t[Ne])&&Object.keys(t[Ne]).length>0}function Xh(t){return!!(t!=null&&t[Q])&&Object.keys(t[Q]).length>0}function Jh(t){return!!(t!=null&&t[Ee])&&t[Ee].length>0}class ef{static createAll(e){const{modelId:s,modelTypeName:r,modelData:o}=e,n=Ah.create({modelId:s,modelTypeName:r}),i=new Rh(e,Ge(n,"fsm")),a=new Lh(Ge(n,"offline-queue")),c=new _h(e),d=new Th(e),u={fsm:i,offlineQueue:a,companionManager:c,childResolver:d};if(Zh(o)&&(u.effectManager=new Ih(r,s,o,Ge(n,"effect"))),Xh(o)){const h=Ge(n,"subscription");u.subscriptionManager=new Qh(e,o,s,a,h),u.onlineLifecycleManager=new Fh(e,Ge(n,"online"))}return Jh(o)&&(u.httpRouteManager=new To(o,Ge(n,"http-routes"))),u}}const A=D.getLogger("kos-model"),tf="kos.extension.model.loader";class ka{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,"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=b.CREATED,this._activeStatus=b.INACTIVE,this._onlineStatus=b.OFFLINE;const o=ef.createAll(this);this.fsm=o.fsm,this.offlineQueue=o.offlineQueue,this.companionManager=o.companionManager,this.childResolver=o.childResolver,o.effectManager&&(this.effectManager=o.effectManager),o.subscriptionManager&&(this.subscriptionManager=o.subscriptionManager),o.httpRouteManager&&(this.httpRouteManager=o.httpRouteManager),o.onlineLifecycleManager&&(this.onlineLifecycleManager=o.onlineLifecycleManager),M.makeAutoObservable(this,{fsm:!1,effectManager:!1,subscriptionManager:!1,onlineLifecycleManager:!1,companionManager:!1,childResolver:!1,offlineQueue:!1}),Mh(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===b.ACTIVE}isOnline(){return this._onlineStatus===b.ONLINE}isReady(){return this._status===b.READY}async deactivate(){var e,s,r;A.debug(`deactivating model ${this.modelTypeName} with id ${this.modelId}`);try{const o=K.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.deactivate)==null?void 0:s.call(e,o)),A.debug(`Model ${this.modelTypeName} with id ${this.modelId} deactivated`),(r=this.subscriptionManager)==null||r.deactivate()}catch(o){throw A.debug(`Model ${this.modelId} failed to deactivated`),o}}async activate(){var e,s,r;A.debug(`activating model ${this.modelTypeName} with id ${this.modelId}`),await vt(this,j.ACTIVATE);try{const o=K.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.activate)==null?void 0:s.call(e,o)),A.debug(`Model ${this.modelTypeName} with id ${this.modelId} subscribing to all topics`),(r=this.subscriptionManager)==null||r.registerAll(j.ACTIVATE),A.debug(`Model ${this.modelTypeName} with id ${this.modelId} activated`)}catch(o){throw A.debug(`Model ${this.modelId} failed to activate`),o}}async whenLoaded(){await Or([{condition:()=>this.status===b.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.loaded,onMatch:()=>{A.debug(`Model ${this.modelId} is loaded`)}}])}async whenInitialized(){await Or([{condition:()=>this.status===b.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.initialized,onMatch:()=>{A.debug(`Model ${this.modelId} is initialized`)}}])}async whenReady(){await Or([{condition:()=>this.status===b.FAILED,onMatch:()=>{throw new Error(`Failed to ready model ${this.modelId}`)}},{condition:()=>this.status===b.READY,onMatch:()=>{A.debug(`Model ${this.modelId} is ready`)}}])}async ready(){var e,s,r;if(this.fsm.current===b.READY){A.debug(`already readying model ${this.modelTypeName} with id ${this.modelId} returning`);return}try{A.debug(`readying model ${this.modelTypeName} with id ${this.modelId}`),await vt(this,j.READY),await Ma(this,Mo.READY,j.READY);const o=K.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.ready)==null?void 0:s.call(e,o)),this.offlineQueue.flush(),(r=this.subscriptionManager)==null||r.registerAll(j.READY),A.debug(`Model ${this.modelId} is ready`);const n={modelId:this.modelId,modelType:this.modelTypeName};B(da(this.modelTypeName,this.modelId),n),B(ua(this.modelTypeName),n)}catch(o){throw A.error(o),Error(o)}}async load(){var o,n,i,a,c;const e=this[Ps];e&&await e.whenLoaded();const{modelTypeName:s,modelId:r}=this;if(this.fsm.current===b.LOADED||this.fsm.current===b.LOADING){A.debug(`Model ${s} with id ${r} already loaded or loading`);return}A.debug(`Loading model ${s} with id ${r}`),await vt(this,j.LOAD);try{const d=K.getContext(r),u=`${tf}.${s}`,h=await O.loader.executeLoader(u,{});h&&(A.info(`Setting loaded context for ${r}, type: ${s}`),d==null||d.set(u,h)),await((n=(o=this.modelData)==null?void 0:o.load)==null?void 0:n.call(o,d)),W(()=>{this.loaded=!0}),A.debug(`Model ${s} with id ${r} successfully loaded`),(i=this.subscriptionManager)==null||i.registerAll(j.LOAD),(a=this.httpRouteManager)==null||a.registerAll(),(c=this.effectManager)==null||c.setup()}catch(d){throw A.error(`Model ${r} failed to load`,d),d}}async unload(){var e,s,r,o,n,i;A.debug(`unloading model ${this.modelTypeName} with id ${this.modelId}`);try{const a=this.getChildren().map(d=>{var u;return(u=d.unload)==null?void 0:u.call(d)}).filter(d=>!!d);await Promise.allSettled(a);const c=K.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(),A.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 A.debug(`Model ${this.modelId} failed to unload`),a}}async init(){var n,i,a;const e=this[Ps];e&&await e.whenInitialized();const{modelId:s,modelTypeName:r}=this,o=K.getContext(s);A.debug(`Initializing model ${r} with id ${s}`),await vt(this,j.INIT);try{await((i=(n=this.modelData)==null?void 0:n.init)==null?void 0:i.call(n,o)),this.initialized=!0,A.debug(`Model ${r} with id ${s} initialized`),(a=this.onlineLifecycleManager)==null||a.register(),this.registerSubscribers(j.INIT)}catch(c){throw A.error(`Model ${s} failed to initialize`,c),c}}async registerSubscribers(e){var s;A.debug(`registering subscribers in ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.registerAll(e)}async online(){var s,r;A.debug(`online model ${this.modelTypeName} with id ${this.modelId}`),this.registerSubscribers();const e=K.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;A.debug(`offline model ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.disposeAll();const e=K.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 Na=t=>typeof t=="function",Pn=m.createLogger({name:"kos-model-instantiator"});class sf{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)){Pn.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 ka({modelTypeName:e,id:n,modelData:a});this.cache.addModel(c),this._createCompanionModels(c,r)}const i=this.cache.getModelById(n);if(!i)throw Pn.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=Na(i)?i(e.modelData,s):i;if(!a)continue;const c=`${a}-${e.modelId}`,d=this.createModelInstance(a,c,{data:s,companionParent:e.modelData,kosParentId:e.modelId});d!=null&&d.model&&(d.model[Ps]=e,e.addCompanionModel(d.model))}}}let rf=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 Ua=10,Rn=m.createLogger({name:"kos-model-manager"});class ja{constructor(){l(this,"cache");l(this,"instantiator");l(this,"dependencies");l(this,"_registry");globalThis.kos=globalThis.kos||{},this.dependencies=new Wu,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 rf(e),r.cache=new Qu(e.preloadModels),r.instantiator=new sf(e,r.cache),r}static getInstance(e){var s,r;return(!((s=globalThis.kos)!=null&&s.modelManager)||e)&&(Rn.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=>(Rn.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(x.RESET,b.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),sa.addToDeletionQueue(e.id,setTimeout(()=>this.destroyModel(s),Ua)))}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 Is=(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))(Is||{}),Qe=(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))(Qe||{});const of=t=>{const e=y.createMachine("offline",{online:y.state(y.transition("go_offline","offline",y.action(()=>{t.offline(),M.runInAction(()=>{t.isOnline=!1})}))),offline:y.state(y.transition("go_online","online",y.action(()=>{t.online(),M.runInAction(()=>{t.isOnline=!0})})))}),s=y.interpret(e,n=>D.debug(n.machine.current)),r=y.createMachine({creating:y.state(y.transition("create","created")),created:y.state(y.immediate("initializing")),initializing:y.invoke(()=>t.init(),y.transition("done","initialized")),initialized:y.state(y.immediate("loading")),loading:y.invoke(()=>t.load(),y.transition("done","loaded")),loaded:y.state(y.immediate("readying"),y.transition("unload","unloading")),readying:y.invoke(()=>t.ready(),y.transition("done","ready",y.action(()=>{M.runInAction(()=>{t.status="ready"})}))),reloading:y.invoke(()=>t.reload(),y.transition("done","loading")),ready:y.state(y.transition("reload","reloading"),y.transition("unload","unloaded",y.action(t.unload.bind(t))),y.transition("go_online","ready",y.action(()=>{s.send("go_online")})),y.transition("go_offline","ready",y.action(()=>{s.send("go_offline")}))),unloaded:y.state()});return{service:y.interpret(r,n=>D.debug(n.machine.current)),online:s}},ne=async t=>{if(t.id){const e=S.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},Ue=async t=>{await S.getInstance().whenReady(),await S.getInstance().modelManager.initiateDestroyModel(t)},nf=async t=>{if(await S.getInstance().whenReady(),!t.id)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t.id);e&&await e.fsm.transitionTo(x.UNLOAD,b.UNLOADED)},Ba=async t=>{await S.getInstance().whenReady(),await S.getInstance().modelManager.reloadModel(t),m.debug(`reload model initiated for model ${t.id}, model ready: ${xs(t)} - ${Date.now()} `),await ne(t),m.debug(`reload model complete for model ${t.id}, model ready: ${xs(t)} - ${Date.now()} `)},af=async t=>{if(await S.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);return e==null?void 0:e.modelTypeName},Ka=async t=>{if(await S.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},me=t=>{if(!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Ha=(t,e)=>{if(!t)throw new Error("Model type is required");return S.getInstance().modelManager.getModelsByType(t).filter(o=>Object.keys(e).every(n=>o[n]===e[n]))},cf=(t,e)=>Ha(t,e)[0],lf=(t,e)=>{if(!t.id)throw new Error("Model ID is required");const s=S.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},za=t=>{if(!t.id)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return Array.from(e.companionModels.all()).map(r=>r.modelData)},df=t=>{if(!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);if(!e)throw new Error("Model not found");return e.companionModels.data},Hr=(t,e)=>{const s=S.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))},de=t=>e=>Object.getPrototypeOf(e).modelTypeId===t,xs=t=>{const e=S.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return e.isReady()},uf=m.createLogger({name:"kos-model-factory"}),jt={byModelType:t=>S.getInstance().modelManager.getModelFactory(t),getModelInstance:(t,e,s)=>{const r=jt.byModelType(e);if(!r)throw uf.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)}},J={Factory:{create:t=>e=>(s,r)=>(r&&K.setParentContext(e,r),jt.getModelInstance(e,t,s))},Singleton:{create:t=>(e,s)=>(s&&K.setParentContext(t,s),jt.getModelInstance(t,t,e))},Model:{instance:t=>e=>jt.getModelInstance(e,t)}};window.KosRegistry=window.KosRegistry||{coreModels:new Map,preloadModels:[],companionModels:new Map,models:new Map};const xn=window.KosRegistry.coreModels,$r=window.KosRegistry.preloadModels,Dr=window.KosRegistry.companionModels,fs=window.KosRegistry.models,C={model:{registerLegacyModel:t=>(e,s)=>(xn.set(e,s),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}),preloadModel:t=>e=>($r.includes(e)||$r.push(e),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}),register:t=>(e,s)=>{const r=Cr(e)?e.registration():e;return fs.set(r.type,r),Cr(e)&&e.relatedModels.forEach(o=>fs.set(o.type,o.registration())),S.getInstance().isReady&&(S.getInstance().modelManager.registry.models[r.type]||(console.info(`Model with type ${r.type} doesn't exist. Adding new registration`),S.getInstance().modelManager.registry.models[r.type]=r.registration[r.type],Cr(e)&&e.relatedModels.forEach(o=>S.getInstance().modelManager.registry.models[o.type]=o.registration().registration))),s&&C.model.preloadModel(t)(r.type),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}},get:t=>fs.get(t),getAll:()=>Array.from(fs.entries()),getPreloadModels:()=>$r,getLegacyModels:()=>Array.from(xn.entries()).reduce((t,[e,s])=>(t[e]=s,t),{})},companion:{register:t=>(e,s)=>{const r=Dr.get(e)||[];return r.push(s),Dr.set(e,r),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}},getAll:()=>Array.from(Dr.entries())}},Ga=C.model.registerLegacyModel,Va=C.model.register,hf=C.companion.register,ff=C.model.preloadModel,Ya=t=>typeof t.updateModel=="function",Cr=t=>t.registration!==void 0&&typeof t.registration=="function";class qa{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=de(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(){C.model.register({})(this.registration()),this.registerRelatedModels()}}class pe extends qa{constructor(e){super({...e,singleton:!1,factory:J.Factory.create(e.type)})}instance(e){const s=this.factory(e);return{get:()=>{const r=me(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(Ya(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 be extends qa{constructor(e){super({...e,singleton:!0,factory:J.Singleton.create(e.type)})}instance(){const e=this.factory;return{get:()=>{const r=me(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(Ya(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 z=m.createLogger({name:"kos-core"}),gf=()=>{const t=le(),e=t==null?void 0:t.alias,s=process.env.KOS_CONNECTION_ALIAS;return e||s||void 0},pf=()=>{const t=window.location.protocol,e=le(),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://")},mf=()=>{const t=window.location.hostname,e=process.env.KOS_HOST,s=le(),r=s==null?void 0:s.host;let o;try{o=new URL(r).hostname}catch{}return o??e??t},yf=()=>{const t=window.location.port,e=process.env.KOS_PORT,s=le(),r=s==null?void 0:s.host;let o;try{o=new URL(r).port}catch{}return o??e??t},bf=(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)}}},An=t=>typeof t.reload=="function",wf=t=>typeof t.unload=="function";var Wa=(t=>(t.LOGGED_IN="logged_in",t.LOGGED_OUT="logged_out",t))(Wa||{});class S{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=Is.CREATED,this.authState="logged_out",this._reloading=!1,this._unloading=!1,M.makeAutoObservable(this),$("token",a=>{a&&(this.transport.token=a.body)}),$(Ut.CONNECTED,async()=>{await this.whenReady(),this.fsmService.service.send(Qe.GO_ONLINE)}),$(Ut.DISCONNECTED,async()=>{this.fsmService.service.send(Qe.GO_OFFLINE)}),$("/studioServer/auth/LOGGED_IN",()=>{this.authState="logged_in",this.transport.authorized=!0}),$("/studioServer/auth/LOGIN_REQUIRED",()=>{this.authState="logged_out",this.transport.authorized=!1}),$(Ut.RELOAD,()=>{this.fsmService.service.send(Qe.RELOAD)}),$("/studio/project/reload",()=>{this.fsmService.service.send(Qe.RELOAD)});const s=tt.getInstance(),r=mf(),o=yf(),n=pf();s.host=r,s.port=Number.parseInt(o),s.protocol=n,process.env.KOS_ALLOW_ANONYMOUS==="true"&&(s.authorized=!0);const i=gf()??e;i&&(s.alias=i.replace("{{TIMESTAMP}}",Date.now().toString())),this._transport=s.init(),this.fsmService=of(this),this.fsmService.service.send(Qe.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){z.info("reload already in progress");return}this._reloading=!0,z.warn("reloading KOS Core"),z.warn("reloading preloaded models");const s=this.modelManager;for(const c of s.preloadedModels)An(c.modelData)&&(z.info(`reloading model ${c.modelId}`),(o=c.unload)==null||o.call(c),await c.modelData.reload(),(n=c.registerSubscribers)==null||n.call(c),z.info(`reloading model ${c.modelId} complete`));for(const c of s.models)!s.preloadedModels.includes(c)&&An(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(()=>{z.warn("reloading KOS Core complete"),this._reloading=!1})},1e3-r)}async online(){z.debug("KOS Core going online"),await this._transport.whenReady(),z.debug("KOS Transport Ready. Calling online() for models"),B("/kosCore/online","/kosCore/online"),console.timeEnd("kosCore:startup")}async offline(){z.debug("KOS Core going offline"),B("/kosCore/offline","/kosCore/offline")}async unload(){var o;z.debug("Unloading KOS Core");const e=Date.now();this._unloading=!0,z.debug("unloading KOS Core");const s=this.modelManager;for(const n of s.models)wf(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===Is.READY)}async ready(){z.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}=bf(5e3,o.model);Promise.race([o.promise.then(()=>{i()}),n])}))).filter(o=>o.status==="rejected");if(r.length)throw z.error(`There were ${r.length} failed models on model preloading`),Error(`There were ${r.length} failed models on model preloading`);z.debug("leaving kos-core ready() ")}get isReady(){return this.status===Is.READY}set transport(e){this._transport=e}get transport(){return this._transport}get coreInitialized(){return this.initialized}get modelsLoaded(){return this.loaded}async init(){z.debug("entering kos-core init()"),console.time("kosCore:startup"),console.time("kosCore:init"),await this._transport.whenReady(),this.initialized=!0,z.debug("initialized - leaving kos-core init()"),console.timeEnd("kosCore:init")}async load(){z.debug("entering kos-core load()"),console.time("kosCore:load"),this.loaded=!0,z.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(d=>{var h,f;const u=(f=(h=e.extensions)==null?void 0:h.dataMapper)==null?void 0:f[d];u&&(Array.isArray(u)?u.forEach(p=>{O.dataMapper.registerDataMapper(d,p)}):O.dataMapper.registerDataMapper(d,u))}),(a=e.extensions)!=null&&a.propertyMapper&&Object.keys(e.extensions.propertyMapper).forEach(d=>{var h,f;const u=(f=(h=e.extensions)==null?void 0:h.propertyMapper)==null?void 0:f[d];u&&O.propertyMapper.registerPropertyMapper(d,u)}),(c=e.extensions)!=null&&c.contextLoader&&Object.keys(e.extensions.contextLoader).forEach(d=>{var h,f;const u=(f=(h=e.extensions)==null?void 0:h.contextLoader)==null?void 0:f[d];u&&O.loader.registerLoader(d,u)}),C.model.getAll().forEach(([,d])=>{e.models={...e.models,...d.registration}}),e.models={...e.models,...C.model.getLegacyModels()},C.companion.getAll().forEach(([d,u])=>{e.companionModels={...e.companionModels},e.companionModels[d]=e.companionModels[d]||[];for(const h of u)e.companionModels[d].push({type:h})}),C.model.getPreloadModels().forEach(d=>{e.preloadModels.includes(d)||e.preloadModels.push(d)});const n=ja.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(S,"_instance");function zr(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 vf(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 Mf(t){return await t.arrayBuffer()}function Ef(t,e){return new Blob([t],{type:e||"application/octet-stream"})}async function Tf(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:zr(i)})}else e[o]=n.toString();return{fields:e,files:s}}function _f(t){return new ReadableStream({async start(){},async pull(e){await t(e)},cancel(){}})}async function If(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:zr(e),contentType:"application/octet-stream",encoding:"base64"}}if(t instanceof Blob){const e=await Mf(t);return{data:zr(e),contentType:t.type||"application/octet-stream",encoding:"base64"}}if(t instanceof FormData){const e=await Tf(t);return{data:JSON.stringify(e),contentType:"multipart/form-data",encoding:"json"}}throw new Error("Unsupported body type")}const gs=m.createLogger({name:"kos-fetch"}),Sf=process.env.KOS_WS_TIMEOUT?parseInt(process.env.KOS_WS_TIMEOUT):3e4,Of=()=>new Promise(t=>{setTimeout(()=>{t(!0)},0)}),$f=t=>t!=null&&t.studio?Ia:t!=null&&t.fos?Sa:Oa,Df=async(t,e)=>{const s=S.getInstance().transport;await s.whenReady();const r=ut(),o=new URL(t),n=`${o.pathname}${o.search}`;gs.debug(`path: ${n}`);const i=(e==null?void 0:e.timeout)||Sf,a=$f(e),c=await If(e==null?void 0:e.body),d={};c.contentType&&(d["content-type"]=c.contentType),c.encoding&&(d["content-encoding"]=c.encoding);const u=xe(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,...d}}),c.data);return new Promise(h=>{let f=null,p=null;if(e!=null&&e.signal){if(e.signal.aborted){h({headers:Mt({}),status:0,ok:!1,json:async()=>null,body:Et(""),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:Mt({}),status:0,ok:!1,json:async()=>null,body:Et(""),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(()=>{gs.error(`Timeout occurred - url: ${t}`),f&&f(),h({headers:Mt({}),status:404,ok:!1,json:async()=>null,body:Et(""),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 w=$(r,E=>{p&&clearTimeout(p);const _=(E==null?void 0:E.headers)||{},k=_["content-type"]||"text/plain",te=_["content-encoding"],R=(E==null?void 0:E.body)||"";let I=R;if(te==="base64"&&R)try{I=vf(R)}catch(N){gs.error("Failed to decode base64 response",N)}const V={headers:Mt(_),status:_.status&&parseInt(_.status)||200,ok:_.status==="200",json:async()=>{try{if(typeof I=="string")return I.length?JSON.parse(I):null;{const Y=new TextDecoder().decode(I);return Y.length?JSON.parse(Y):null}}catch{throw Error("Not a JSON response")}},text:async()=>typeof I=="string"?I:new TextDecoder().decode(I),arrayBuffer:async()=>I instanceof ArrayBuffer?I:new TextEncoder().encode(I).buffer,blob:async()=>I instanceof ArrayBuffer?Ef(I,k):new Blob([I],{type:k}),formData:async()=>{const N=new FormData;if(k==="multipart/form-data"&&typeof I=="string")try{const Y=JSON.parse(I);Y.fields&&Object.entries(Y.fields).forEach(([Oe,ve])=>{N.append(Oe,ve)}),Y.files&&gs.warn("File reconstruction in FormData not fully implemented")}catch{throw new Error("Failed to parse FormData")}return N},body:e!=null&&e.stream?_f(async N=>{if(I instanceof ArrayBuffer)N.enqueue(new Uint8Array(I));else{const Y=new TextEncoder;N.enqueue(Y.encode(I))}N.close()}):Et(typeof I=="string"?I:""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){return{...this}},bodyUsed:!1};w.unsubscribe(),Of().then(()=>h(V))});f=w.unsubscribe;const v=e!=null&&e.fos?s.fosSocket:s.socket;if(!v)throw Error(`No web socket transport available: ${e}`);v==null||v.send(u)})};exports.BASE_URL="kos:";exports.kosFetch=Df;if(process.env.KOS_MOCK_FETCH==="true"){const t=process.env.KOS_PORT||"9999";exports.kosFetch=fetch,exports.BASE_URL=`http://localhost:${t}`}const Cf=m.createLogger({name:"kos-model-visitor",group:"kos-ui-core"});class Pf{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=S.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)){Cf.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)}))}}const Qa=()=>({isMock:!1,URL:exports.BASE_URL}),Rf=m.createLogger({name:"kos-service-request"}),xf="errUnknown";async function ps(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=`${Qa().URL}${n}${i?`?${encodeURIComponent(i)}`:""}`;Rf.debug(`fullUrl: ${a}`);const c={method:String(e).toUpperCase(),body:null,...s};o&&(c.body=JSON.stringify(o));const d=await exports.kosFetch(a,c);return d.status<200||d.status>=400?[`${d.statusText||xf}`,null]:[null,(await d.json()).data]}function Io(){return{get:(t,e,s)=>ps(t,"get",s,e),post:(t,e,s,r)=>ps(t,"post",r,e,s),put:(t,e,s,r)=>ps(t,"put",r,e,s),delete:(t,e,s,r)=>ps(t,"delete",r,e,s)}}class Za{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 Af=async(t,e)=>{const s=new Za;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)=>S.getInstance().modelManager.createModelInstance(t,e,s).data,buildAsync:async(e,s)=>{const r=S.getInstance().modelManager.createModelInstance(t,e,s);return await r.model.whenInitialized(),r.data}}),Lf=t=>{S.getInstance().modelManager.registerModel(t)},Ff=(t,e)=>{S.getInstance().modelManager.registerCompanionModel(t,e)},Xa=Symbol("KosObservableData");class Ja{constructor(){l(this,"map");l(this,"atomMap",new Map);l(this,"proxyHandler",{get:(e,s)=>{var r;return 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.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())});this.map=M.observable.map(new Map)}setValue(e,s){this.map.set(e,s)}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 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)}}Ja.prototype[Xa]=!0;function kf(t,e){return new Proxy(t,{construct:(s,r)=>{const o=new t(...r);return o.setValues(e),o.proxy}})}const De=t=>{const e=kf(Ja,t);return new e(t)},Ln="/kos/ui/internal/heartbeat/",Nf=({relationshipId:t,destinationAddress:e,onAbort:s,waitTime:r,beatTime:o})=>{const n=S.getInstance().transport,i=new AbortController;let a=performance.now();const c=n.subscribeTopic({topic:`${Ln}${t}`,callback:()=>{a=performance.now()}}),d=r??3e3,u=window.setInterval(()=>{let v=performance.now()-a;v=v/1e3,v>d/1e3&&i.abort()},d),h=o??2e3,f=window.setInterval(()=>{Aa({msg:{},options:{topic:`${Ln}${t}`,destinationAddress:e}})},h),p=()=>{window.clearInterval(f),window.clearInterval(u),c()},w=()=>{p(),s&&s(),i.signal.removeEventListener("abort",w)};return i.signal.addEventListener("abort",w),{cleanUpHeartbeat:p}},ec=(...t)=>e=>t.reduce((s,r)=>r(s),e),Uf={maxAttempts:5,baseDelayMs:100,backoffFactor:1.5};async function jf(t,e){let s=1;const r={...Uf,...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(d=>setTimeout(d,a)),s++;else throw c}throw new Error("All attempts failed")}const Bf=m.createLogger({name:"kos-service-request"}),se=t=>({isMock:!1,URL:exports.BASE_URL}),Kf=(t,e,s)=>async({id:r,tracker:o,urlOverride:n,ordered:i,studio:a,fos:c,bridge:d,destinationAddress:u})=>{const h={method:"DELETE"};t&&(h.destinationAddress=t),o&&(h.tracker=o),gt(h,{ordered:i,studio:a,fos:c,bridge:d,destinationAddress:u});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()},gt=(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),Hf=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,timeout:c,destinationAddress:d})=>{const u={method:"GET"};t&&(u.destinationAddress=t),gt(u,{timeout:c,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:d});const f=await s(r||e,u);if(!f.ok){let w;try{w=await f.json()}catch{}throw new ce(`There was a problem retrieving the model; returned status ${f.status}`,w)}return await f.json()},zf=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,tracker:c,timeout:d,destinationAddress:u})=>{const h={method:"GET"};t&&(h.destinationAddress=t),c&&(h.tracker=c),gt(h,{timeout:d,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:u});const f=r||e;Bf.debug(`resolvedUrl: ${f}`);const p=await s(f,h);if(!p.ok){let v;try{v=await p.json()}catch{}throw new ce(`There was a problem retrieving the model; returned status ${p.status}`,v)}return await p.json()},Gf=(t,e,s)=>async({urlOverride:r,id:o,ordered:n,studio:i,fos:a,bridge:c,timeout:d,destinationAddress:u})=>{const h={method:"GET"};t&&(h.destinationAddress=t),gt(h,{timeout:d,ordered:n,studio:i,fos:a,bridge:c,destinationAddress:u});const f=r||`${e}/${o}`,p=await s(f,h);if(!p.ok){let v;try{v=await p.json()}catch{}throw new ce(`There was a problem retrieving the model; returned status ${p.status}`,v)}return await p.json()};class ce extends Error{constructor(s,r){super(s);l(this,"payload");this.name="FetchException",this.payload=r}}const Fn=(t,e,s)=>async({model:r,urlOverride:o,ordered:n,tracker:i,studio:a,fos:c,bridge:d,timeout:u,destinationAddress:h})=>{const f={method:"POST",body:typeof r=="string"?r:JSON.stringify(r)};t&&(f.destinationAddress=t),i&&(f.tracker=i),gt(f,{timeout:u,ordered:n,studio:a,fos:c,bridge:d,destinationAddress:h});const p=await s(o||e,f);if(!p.ok){let v;try{v=await p.json()}catch{}throw new ce(`There was a problem sending the POST data; returned status ${p.status}`,v)}return await p.json()},kn=(t="POST",e,s,r)=>async({model:o,id:n,urlOverride:i,ordered:a,studio:c,fos:d,bridge:u,timeout:h,destinationAddress:f})=>{const p={method:t};o&&(p.body=JSON.stringify(o)),e&&(p.destinationAddress=e),gt(p,{timeout:h,ordered:a,studio:c,fos:d,bridge:u,destinationAddress:f});const w=await r(i||`${s}/${n}`,p);if(!w.ok){let E;try{E=await w.json()}catch{}throw new ce(`There was a problem modifying the model; returned status ${w.status}`,E)}return await w.json()},ee={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:Hf(t,s||e,c),getModelById:Gf(t,r||e,c),getOne:zf(t,r||e,c),addModel:Fn(t,n||e,c),deleteModel:Kf(t,o||e,c),modifyModel:kn("POST",t,i||e,c),putModel:kn("PUT",t,i||e,c),postModel:Fn(t,n||e,c)}}},Vf=ut(),tc=()=>`kos-${Vf}`,Yf=t=>!!t&&!t.includes("VM_SERVICE")&&t.startsWith(tc()),So=async(t,e=6e4)=>new Promise((s,r)=>{const{unsubscribe:o}=$(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)}),qf=async(t,e,s)=>{const r=So(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)},Wf=async({topic:t,msg:e,requestId:s})=>{const r=s??ut(),o=So(r);B(t,e,{sync:r});const n=await o;if(n.error)throw Error(n.error);return n},ie=new Map;class sc{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){W(()=>{this._parent=e})}get id(){return this._id}get context(){return this._context}get parentModel(){var e;if(this._parent)return(e=me(this._parent))==null?void 0:e.model}get companionModels(){const e=me(this._id);return e!=null&&e.model?za(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||!ie.has(n.id)?!1:(i=ie.get(n.id))==null?void 0:i.context.has(e)});if(o)return(s=ie.get(o.id))==null?void 0:s.get(e)}if(this._parent)return(r=ie.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 K={createContext:(t,e)=>{const s=ie.get(t)??new sc(t);if(e){if(!ie.has(e))throw new Error(`Parent context ${e} does not exist`);s.setParent(e)}else t!=="root"&&s.setParent("root");return ie.set(t,s),s},getContext:t=>ie.get(t),deleteContext:t=>{ie.delete(t)},setParentContext:(t,e)=>{var s;if(!ie.has(e))throw new Error(`Parent context ${e} does not exist`);(s=ie.get(t))==null||s.setParent(e)},rootContext:()=>ie.get("root")};K.createContext("root");const Qf=t=>K.getContext(t.id);function Zf(t,e){return t.length!==e.length?!1:t.every(s=>e.includes(s))}class Oo{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=De(),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(Zf(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 Xf(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 bt=m.createLogger({name:"kos-container-model"});class we{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?O.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=De(),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 Oo({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&&K.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(([u,h])=>[h,u])),a=u=>{var f,p;n.includes(u.name)&&((f=this.index.get(i.get(u.name)))==null||f.refresh());const h=o.filter(([,w])=>typeof w=="function");for(const[w]of h)(p=this.index.get(w))==null||p.refresh()},c=Xf(e,a,n.filter(u=>typeof u=="string")),d=M.observe(e,a);this._disposerMap.set(e.id||"",()=>[d,...c].forEach(u=>u()))}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??[]:(bt.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):(bt.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return bt.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async clear(){this._data.forEach(e=>{const s=e.id;Ue(e).then(()=>{bt.debug(`${s} destroyed, removing from map`),this.removeModel(s,!0)}).catch(r=>bt.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 Pr=m.createLogger({name:"kos-data-container"});class $o{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=De(),M.makeAutoObservable(this,{}),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new Oo({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??[]:(Pr.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):(Pr.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return Pr.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 Jf{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 J.Factory.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!1,factory:this.factory},...this.childRegistration}}get predicate(){return de(this.type)}}class eg{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 J.Singleton.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!0,factory:this.factory},...this.childRegistration}}get predicate(){return de(this.type)}}class rc{constructor(){l(this,"_token");M.makeAutoObservable(this),$("token",e=>{this.token=e==null?void 0:e.body})}get token(){return this._token}set token(e){this._token=e}}class oc{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 d=this.matchRoute(c.path,r);if(c.method===e.method&&d){i.params=d;let u=0;const h=async()=>{if(u<c.middlewares.length){const f=c.middlewares[u++];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 nc=m.createLogger({name:"intent-service"}),tg=t=>{ho(`/kos/intent/${t.type}`)?B(`/kos/intent/${t.type}`,t.options,{"kos.intent.type":t.type}):nc.info(`No subscribers for intent ${t.type}. Intent not sent.`)},sg=async t=>new Promise(e=>{const{type:s,options:r}=t;if(ho(`/kos/intent/${t.type}`)){const o=ut(),{unsubscribe:n}=$(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);B(`/kos/intent/${s}`,r,{"kos.intent.type":s,sync:o})}else nc.info(`No subscribers for intent ${t.type}. Intent not sent.`),e([null,{body:void 0,payload:void 0}])}),Me=m.createLogger({name:"app-startup-service"});async function ic(t,e={}){const{timeout:s=3e4,throwOnTimeout:r=!0,requirePostStarted:o=!1}=e;if(t.length===0)return Me.warn("No app IDs provided to waitForAppsToStart"),!0;Me.debug(`Waiting for apps to start: ${t.join(", ")}`);try{const n=t.map(c=>`/kos/app/started/${c}`),i=await po(n,{getCurrentState:async()=>{try{const{default:c}=await Promise.resolve().then(()=>np),[d,u]=await c.get("/api/kos/apps/started");return d?(Me.error("Error fetching started apps:",d),[]):u}catch(c){Me.error("Failed to fetch app startup status:",c)}return[]},shouldUseFetchedState:c=>t.every(d=>{const u=c.find(h=>h.appId===d);return!(!u||!u.started||o&&!u.postStarted)}),timeout:s}),a=t.filter(c=>{const d=i.find(u=>u.appId===c);return!!(!d||!d.started||o&&!d.postStarted)});if(a.length>0){const c=`Apps not started: ${a.join(", ")}`;if(Me.error(c),r)throw new Error(`App startup timeout: ${c}`);return!1}return Me.info(`All apps started successfully: ${t.join(", ")}`),!0}catch(n){const i=`Failed to wait for apps to start: ${t.join(", ")}`;if(Me.error(i,n),r)throw new Error(`${i} - ${n instanceof Error?n.message:String(n)}`);return!1}}async function rg(t,e={}){return ic([t],e)}async function og(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){Me.error("Failed to check app startup status:",r),t.forEach(o=>s[o]=!1)}return s}async function ng(){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 Me.error("Failed to fetch started apps:",t),[]}}const Gr=M.when,Do=M.computed,W=M.runInAction,H=M.autorun,ac=M.reaction,Co=M.observable,Po="Not Assigned",ig="kos.trouble.added",ag="kos.trouble.removed";var he=(t=>(t.TroubleRank="kos.trouble.rank.mapper",t.TroubleColor="kos.trouble.color.mapper",t.TroubleRole="kos.trouble.role.mapper",t))(he||{}),Bt=(t=>(t.TIME_CHANGE="/kos/internal/time/time",t.DAY_CHANGE="/kos/internal/time/day",t.TIMEZONE_CHANGE="/kos/internal/time/timezone",t))(Bt||{});const cc=m.createLogger({name:"config-bean-service",group:"Services"}),Ro=exports.BASE_URL,lc=t=>(t==null?void 0:t.decimals)!==void 0,{postModel:cg,getOne:lg}=ee.build({destinationAddress:"",basePath:`${Ro}/kos/config/`}),dc=async(t,e,s="/api/kos/config")=>(cc.debug(`sending modify request for ConfigBean: ${t}`),cg({model:e,urlOverride:`${Ro}${s}/${t}`})),uc=async(t,e="/api/kos/config")=>(cc.debug(`sending get request for ConfigBean: ${t}`),await lg({urlOverride:`${Ro}${e}/details/${t}/15`})),xo=t=>t.toLowerCase()==="true"||t.toLowerCase()==="false",dr=t=>{try{const e=Number(t);return!isNaN(e)}catch{return!1}};function hc(t=[]){return t.reverse().reduce((e,s)=>{const{overrides:r}=s;return r&&(e={...e,...r}),e},{})}function fc(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])?fc(t[r],o,s):s[o]=t[r]}return s}const gc=(t,e)=>{const s=t.details[0].bean||hc(t.details[0].scopes),r=fc(s);M.runInAction(()=>{const o={...r};e.props.setValues(o)})},pc=(t,e)=>{M.runInAction(()=>{t.changes.forEach(s=>{const r=s.attr;let o=s.currentValue,n=s.previousValue;typeof o=="string"&&xo(o)&&(o=o.toLowerCase()=="true",n=(n==null?void 0:n.toLowerCase())=="true"),typeof o=="string"&&dr(o)&&(o=Number(o),n=Number(n)),e.props[r]=o,e.prevProps[r]=n})})},mc=t=>Object.fromEntries(t.props.entries),dg=t=>e=>s=>t.build(e,s);var ug=Object.defineProperty,hg=Object.getOwnPropertyDescriptor,yc=(t,e,s,r)=>{for(var o=r>1?void 0:r?hg(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&&ug(e,s,o),o};function fg(t,e){for(const s of t)if(new RegExp(`^${s}$`).test(e))return s}const Ao="config-bean-model",ms=m.getLogger(Ao),gg=Be("path");let As=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=dc,getConfigBean:r=uc}=e;this._modifyConfigBean=s,this._getConfigBean=r,this.props=De(),this.prevProps=De()}get values(){return this.props.values}async ready(){ms.debug(`readying config bean ${this.path}`),ms.debug(`complete readying config bean ${this.path}`)}async load(){ms.debug(`loading config bean ${this.path}`);const t=await this._getConfigBean(this.path,this.serviceBasePath);if(t!=null&&t.data){const e=t.data;gc(e,this),ms.debug(this.values);const s=t==null?void 0:t.data.details[0].schema;W(()=>{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=fg(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=mc(this);await this._modifyConfigBean(this.path,t,this.serviceBasePath)}handleConfigBeanUpdated(t){pc(t,this)}};yc([F({topic:`/kos/config/${gg}`,websocket:!0})],As.prototype,"handleConfigBeanUpdated",1);As=yc([P(Ao)],As);const zt=new pe({class:As,type:Ao}),ur=({path:t,lazy:e,serviceBasePath:s})=>(r,o)=>{r[L]=r[L]||{},r[L][o]={modelType:zt.type,id:`${zt.type}-${t}`,options:{path:t,serviceBasePath:s},lifecycle:j.INIT,lazy:e}},{URL:bc}=se(),{getOne:pg,getAll:mg}=ee.build({basePath:`${bc}/api/kos/regions/info`}),wc=async()=>await pg({}),vc=async()=>await mg({urlOverride:`${bc}/api/kos/regions`}),yg=Object.freeze(Object.defineProperty({__proto__:null,getRegionInfo:wc,getRegions:vc},Symbol.toStringTag,{value:"Module"}));var oe=(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))(oe||{});const Mc={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 bg(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},{...Mc});return{...t,...r}}function wg(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]:{...Mc}}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}function vg(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 Mg=Object.defineProperty,Eg=Object.getOwnPropertyDescriptor,Lo=(t,e,s,r)=>{for(var o=r>1?void 0:r?Eg(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&&Mg(e,s,o),o};const Ss="region-info-model",wt=m.createLogger({name:"region-info-model"});let Gt=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[oe.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[oe.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[oe.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[oe.family]!==s[oe.family])throw new Error(`Cannot convert between units of different families: ${e[oe.family]} and ${s[oe.family]}`);const r=e[oe.offset],o=e[oe.scale],n=s[oe.scale],i=s[oe.offset],a=s[oe.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 d=this.measureMap[s.measure];if(!d)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);i=(a=d[s.system])==null?void 0:a.default,i||wt.info("Could not find default unit for measure",s.measure)}if(!n&&e.measure&&e.system){const d=this.measureMap[e.measure];if(!d)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);n=(c=d[e.system])==null?void 0:c.default,n||wt.info("Could not find default unit for measure",e.measure)}return!n||!i?(wt.warn("Could not find unit to convert to or from. Return value as is"),String(t)):this.convertByUnit(t,n,i)}async init(){wt.debug("initializing region info")}async load(){wt.debug("loading region info");const t=await vc();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 wc();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(bg,{}),this.measureMap=e.data.unitSystems.reduce(wg,{}),this.defaultMeasureMap=e.data.unitSystems.reduce(vg,{}),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))}};Lo([ur({path:"kos:service:region:settings"})],Gt.prototype,"regionSource",2);Lo([ur({path:"kos:service:region"})],Gt.prototype,"region",2);Gt=Lo([P(Ss)],Gt);const X={registration:{[Ss]:{class:Gt,singleton:!0}},type:Ss,factory:J.Singleton.create(Ss)},Ls=({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},Fo=(t,e,s)=>{const{model:r}=me(X.type);if(!r)throw new Error("RegionInfo model not found");if(!xs(r))throw new Error("RegionInfo model not ready");const o={system:r.defaultUnitSystem},n=Ls({source:e}),i=Ls({source:s||o,defaultMeasure:r.getUnitMeasure(n.unit||"")});return r.convert(t,n,i)};function Nn(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 Tg=(t,e,s,r)=>{const o=Fo(t,e,s),n=Ls({source:e}),{model:i}=me(X.type);if(!i)throw new Error("RegionInfo model not found");const a=i.getUnitMeasure(n.unit||""),c={system:i.defaultUnitSystem},d=Ls({source:s||c,defaultMeasure:i.getUnitMeasure(n.unit||"")}),u=i.getDefaultUnitForMeasure(a,d.system),h=i.getDefaultUnitDecimalPlaces(a,d.system),f={...r,minDecimals:(r==null?void 0:r.minDecimals)??h,maxDecimals:(r==null?void 0:r.maxDecimals)??h};return{value:o,unit:u||n.unit||"",display:Nn(o,u||n.unit||"",{...f,mode:"long"}),shortDisplay:Nn(o,u||n.unit||"",{...f,mode:"short"})}};function Un({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 jn({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 Ve=(t,e)=>s=>!t||!e?s:dr(s)?Fo(Number(s),t,e):s,_g=(t,e,s,r)=>{if((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options))return[];if(t.options.type==="rangeCount")return Un(t.options).map(Ve(s,r));if(t.options.type==="rangeInterval")return jn(t.options).map(Ve(s,r));if(t.options.type==="list"){const{list:o}=t.options;return o.map(Ve(s,r))}else{if(t.options.type==="unitSystemRangeCount"&&e)return Un(t.options.unitSystems[e]).map(Ve(s,r));if(t.options.type==="unitSystemRangeInterval"&&e)return jn(t.options.unitSystems[e]).map(Ve(s,r));if(t.options.type==="unitSystemList"&&e){const{list:o}=t.options.unitSystems[e];return o.map(Ve(s,r))}}return[]},Ig=(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 Sg=Object.defineProperty,Og=Object.getOwnPropertyDescriptor,ko=(t,e,s,r)=>{for(var o=r>1?void 0:r?Og(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&&Sg(e,s,o),o};function $g(t){return(t==null?void 0:t.type)==="enum"}function Dg(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 Cg(t,e){const s=new Date;s.setHours(0,0,0,0);const r=new Date(s.getTime()+t*1e3);return $e.format(r,e)}const Os="config-bean-prop-model",Ye=m.createLogger({name:"config-bean-prop-model"}),Pg=Be("path"),Rg=Be("serviceBasePath");let Vt=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 lc(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?Dg(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=$g(r)?r.values:_g(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 d=String(t);return d=c.formatToParts(Number(t))[0].value,Number(d)}}catch(c){Ye.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(){Ye.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 Cg(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){Ye.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 Ig(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,d=this.formatter||c;if(d){let u=typeof d=="function"?d(((n=t==null?void 0:t.to)==null?void 0:n.system)||e):d;s&&(u={unit:this.getDefaultUnit(t),...u},u.style==="unit"&&(u.maximumFractionDigits=u.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,{...u})}catch(h){Ye.error(`error creating formatter ${u}. Returning the raw value`,h)}}else Ye.debug(`no formatter found for config bean prop ${this.id}. Returning the raw value`)}return o}getConverter(){var r,o,n,i,a,c,d,u,h,f,p;const{unit:t,measure:e}=this.getConverterFromFormat(),s=t==="drt"?"second":t;if(this.converter){const w=(r=this.converter)==null?void 0:r.measure,v=(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,_=w||v||E||e,k=((d=(c=this.converter)==null?void 0:c.to)==null?void 0:d.unit)||this.regionInfo.getDefaultUnitForMeasure(_,((h=(u=this.converter)==null?void 0:u.to)==null?void 0:h.system)??this.regionInfo.defaultUnitSystem),te=((p=(f=this.converter)==null?void 0:f.to)==null?void 0:p.system)??this.regionInfo.getUnitSystem(k),R=this.schemaFormat==="drt"?"second":this.schemaFormat||s;return{...this.converter,from:{unit:R,...this.converter.from},to:{...this.converter.to,unit:k,system:te},measure:_}}if(s&&e){const w=this.regionInfo.getDefaultUnitForMeasure(e,this.regionInfo.defaultUnitSystem),v=this.regionInfo.getUnitSystem(s),E=this.regionInfo.getUnitSystem(w);return{measure:e,to:{unit:v===E?s:w}}}}async updateProperty(t){Ye.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)}};ko([ht({modelType:X.type})],Vt.prototype,"regionInfo",2);ko([ur({path:Pg,serviceBasePath:Rg})],Vt.prototype,"bean",2);Vt=ko([P(Os)],Vt);const Ke={registration:{[Os]:{class:Vt,singleton:!1}},type:Os,factory:J.Factory.create(Os)};function xg(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})),(d,u)=>{d[L]=d[L]||{},d[L][u]={modelType:Ke.type,id:`${e}-${s}`,options:{path:e,attribute:s,serviceBasePath:a,converter:c,formatter:o,optionsExpander:i},lifecycle:j.INIT,lazy:n}}}class Ag{constructor(e,s){l(this,"futures");l(this,"defaultContext");l(this,"context");l(this,"disposers",new Map);l(this,"container");this.futures=Co.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=H(()=>{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 hr{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=H(()=>{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 Ec="future-model",pt=ft(Ec),fr=m.createLogger({name:"future-service",group:"Services"}),{isMock:Lg,URL:ns}=se();var Ce=(t=>(t.Success="SUCCESS",t.Fail="FAIL",t.Aborted="ABORT",t.Canceled="CANCEL",t))(Ce||{});const{getAll:Fg,modifyModel:kg,addModel:Ng,deleteModel:Ug,postModel:jg}=ee.build({destinationAddress:"",basePath:`${ns}/api/future`,mock:Lg}),Bg=async()=>await Fg({}),Tc=async(t,e="/api/kos/future")=>(fr.info(`sending delete request for Future: ${t}`),await Ug({id:t,urlOverride:`${ns}${e}/${t}`})),_c=async(t,e="/api/kos/future")=>(fr.info("sending add request for Future"),await Ng({model:t,urlOverride:`${ns}${e}`})),Kg=async(t,e,s="/api/kos/future")=>(fr.info(`sending modify request for Future: ${t}`),kg({model:e,id:t,urlOverride:`${ns}${s}/${t}`})),Ic=async(t,e="/api/kos/future")=>(fr.info(`sending cancel request for Future: ${t}`),jg({urlOverride:`${ns}${e}/${t}/cancel`,ordered:!0,model:{}})),No=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}),Uo=(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=No(t);W(()=>{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]})})}))},Sc=t=>e=>s=>t.build(String(e),s),jo=t=>e=>ec(No,Sc(t)(e.tracker||e.id))(e);var Hg=Object.defineProperty,zg=Object.getOwnPropertyDescriptor,Oc=(t,e,s,r)=>{for(var o=r>1?void 0:r?zg(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&&Hg(e,s,o),o};const Rr=m.getLogger(pt.type);let Fs=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=Ic,Gr(()=>this.status===Ce.Success||this.status===Ce.Fail,()=>{Rr.info(`Future ${this.id} has completed with status ${this.status}`),Ue(this)})}async load(){Rr.debug(`loading Future ${this.id}`)}unload(){Rr.info(`unloading Future ${this.id}`)}async cancelFuture(){const t=this.namespace==="studio"?"/api/future":`/api/${this.namespace}/future`;await Gr(()=>this.futureId!==Po),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[d,u]of Object.entries(e))if(Math.abs(t)>=u){s=d,r=Math.round(t/u);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}`),Uo(t,this)}};Oc([F({topic:`kos.future/${Ds}`})],Fs.prototype,"handleFutureUpdated",1);Fs=Oc([P(pt.type)],Fs);const $c=Fs,Dc=Io();var Gg=Object.defineProperty,Vg=Object.getOwnPropertyDescriptor,Cc=(t,e,s,r)=>{for(var o=r>1?void 0:r?Vg(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&&Gg(e,s,o),o};const Pc="browser-router-model",Yg="kos.http.request",qg="kos.http.response";let ks=class{constructor(t,e,s){l(this,"_id");l(this,"logger");l(this,"router");this._id=t,this.logger=s.logger,this.router=new oc}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 d={send:u=>{this.logger.debug(`sending response to ${r}`),this.logger.debug(u),La({msg:u,options:{responseId:i,destinationAddress:s,type:qg,sourceAddress:r,status:c}})},status:function(u){return c=u,this}};if(a.path==="/openapi.json"){d.send(this.router.generateOpenApiSpec());return}await this.router.handle(a,d)}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}`)}};Cc([F({topic:Yg})],ks.prototype,"handleRequest",1);ks=Cc([P(Pc)],ks);const Bo=new be({class:ks,type:Pc}),Rc="future-container-model",Pe=ft(Rc),xc=t=>jo(pt)(t),Wg=t=>{const e=xc(t);return Pe.build(Pe.type,{}).addFutureModel(e),e},Qg=t=>Pe.build(Pe.type,{}).getFuture(String(t)),je={buildFutureModel:xc,initiateFuture:Wg,getFuture:Qg};var Zg=Object.defineProperty,Xg=Object.getOwnPropertyDescriptor,Ko=(t,e,s,r)=>{for(var o=r>1?void 0:r?Xg(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&&Zg(e,s,o),o};const ys=m.getLogger(Pe.type);let Yt=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=Tc,addFuture:o=_c}=e;this.logger=s.logger,this._deleteFuture=r,this._addFuture=o,this.id=t,this._futures=new we,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){ys.error("error deleting a Future"),ys.error(e)}}async createFuture(t){try{const e=await this._addFuture(t),s=e==null?void 0:e.data;if(s){const r=jo(pt)(s);return this.addFutureModel(r),r}}catch(e){throw ys.error("error creating a Future"),ys.error(e),e}}handleFutureUpdated(t,e){const s=je.buildFutureModel(t);this.addFutureModel(s);const r=`kos.future/${t.tracker||t.id}`;this.logger.debug(`publishing future update to ${r}`),B(r,e.body,e.headers)}};Ko([ge],Yt.prototype,"_futures",2);Ko([F({topic:"kos.future"})],Yt.prototype,"handleFutureUpdated",1);Yt=Ko([P(Pe.type)],Yt);const Ac=Yt,{URL:is}=se(),{getOne:Jg,postModel:ep,deleteModel:Lc}=ee.build({basePath:`${is}/api/keyVal`}),Vr=m.createLogger({name:"key-value-service",group:"Services"}),Fc=async(t,e)=>{await Lc({urlOverride:`${is}/api/keyVal/${t}/${e}`,id:e})},kc=async(t,e,s)=>{const r=await ep({urlOverride:`${is}/api/keyVal/${t}/${e}`,model:s.toString()});if((r==null?void 0:r.status)!==200)throw Vr.error("Failed to update studio-state data",r),new Error(`Failed to update studio-state data for namespace ${t}`);return r.data},Nc=async(t="studio")=>{Vr.debug("sending GET for studio-state");const e=await Jg({urlOverride:`${is}/api/keyVal/${t}`});if((e==null?void 0:e.status)!==200)throw Vr.error("Failed to retrieve studio-state data",e),new Error(`Failed to retrieve studio-state data for namespace ${t}`);return e.data},tp=async t=>{await Lc({urlOverride:`${is}/api/keyVal/${t}}`,id:""})},sp=Object.freeze(Object.defineProperty({__proto__:null,deleteKeyValue:Fc,deleteKeyValueNamespace:tp,getKeyValue:Nc,updateKeyValue:kc},Symbol.toStringTag,{value:"Module"}));var rp=Object.defineProperty,op=Object.getOwnPropertyDescriptor,Ho=(t,e,s,r)=>{for(var o=r>1?void 0:r?op(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&&rp(e,s,o),o};const Uc="key-value-model";let qt=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=De(),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 kc(this.namespace,t,e),this.data[t]=e):(await Fc(this.namespace,t),this.data[t]=void 0)}async load(){this.logger.debug(`loading studio-state ${this.id}`);const t=await Nc(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)}};Ho([F({topic:"/keyVal/set"})],qt.prototype,"handleStateUpdate",1);Ho([F({topic:"/keyVal/remove"})],qt.prototype,"handleStateDelete",1);qt=Ho([P(Uc)],qt);const zo=new pe({class:qt,type:Uc}),Se=Io(),np=Object.freeze(Object.defineProperty({__proto__:null,default:Se},Symbol.toStringTag,{value:"Module"})),ip=m.createLogger({name:"kos-log-manager-service",group:"Services"}),ap="/api/kos/logs/overrides",jc=async()=>(ip.debug("sending GET for kos-log-manager"),await Se.get(ap)),cp=Object.freeze(Object.defineProperty({__proto__:null,getLogOverrides:jc},Symbol.toStringTag,{value:"Module"}));var lp=Object.defineProperty,dp=Object.getOwnPropertyDescriptor,gr=(t,e,s,r)=>{for(var o=r>1?void 0:r?dp(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&&lp(e,s,o),o};const Bc="kos-log-manager-model",up="/kos/logs/override/add/*",hp="/kos/logs/override/remove/*",fp=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 st=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_overrides");this.id=t,this.logger=s.logger,this._overrides=new $o}updateModel(t){}resolveLoggers(){const t=m.getLoggers(),s=Object.entries(t).map(([r,o])=>({name:r,level:fp(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 jc();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)})}};gr([oa("/api/kos/ui/loggers")],st.prototype,"getAllLoggers",1);gr([F({topic:up,websocket:!0,wildcardName:"nodeType"})],st.prototype,"handleOverrideAdded",1);gr([F({topic:hp,websocket:!0,wildcardName:"nodeType"})],st.prototype,"handleOverrideRemoved",1);st=gr([P(Bc)],st);const Kc=new be({class:st,type:Bc}),{URL:as}=se(),{postModel:Go,getOne:gp}=ee.build({basePath:`${as}/api/kos-time`});m.createLogger({name:"kos-time-service",group:"Services"});const Hc=async t=>{const e=await Go({model:t,urlOverride:`${as}/api/kos/time/time`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},zc=async t=>{const e=await Go({model:t,urlOverride:`${as}/api/kos/time/date`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},Gc=async t=>{const e=await Go({model:{},urlOverride:`${as}/api/kos/time/timezone?tz=${t}`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set timezone");return e.data},Vc=async()=>{const t=await gp({urlOverride:`${as}/api/kos/time/timezone`});if((t==null?void 0:t.status)!==200)throw Error("Failed to set timezone");return t.data.timeZone},pp=Object.freeze(Object.defineProperty({__proto__:null,getTimezone:Vc,setDate:zc,setTime:Hc,setTimezone:Gc},Symbol.toStringTag,{value:"Module"}));var mp=Object.defineProperty,yp=Object.getOwnPropertyDescriptor,pr=(t,e,s,r)=>{for(var o=r>1?void 0:r?yp(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&&mp(e,s,o),o};const Tt="kos-time-model",bp="/kos/time/time",wp="/kos/time/day",vp="/kos/time/timezone";let rt=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 Hc(t)}async updateSystemDate(t){await zc(t)}async updateSystemTimezone(t){await Gc(t)}handleTimeChange(){B(Bt.TIME_CHANGE,{})}handleDayChange(){B(Bt.DAY_CHANGE,{})}async handleTimeZoneChange(){await this.retrieveTimezone(),B(Bt.TIMEZONE_CHANGE,{})}async init(){this.logger.debug(`initializing kos-time ${this.id}`)}async retrieveTimezone(){const t=await Vc();this.setTimezone(t)}setTimezone(t){this.timezone=t}async load(){this.logger.debug(`loading kos-time ${this.id}`),this.retrieveTimezone()}};pr([F({topic:bp,websocket:!0})],rt.prototype,"handleTimeChange",1);pr([F({topic:wp,websocket:!0})],rt.prototype,"handleDayChange",1);pr([F({topic:vp,websocket:!0})],rt.prototype,"handleTimeZoneChange",1);rt=pr([P(Tt)],rt);const Ns={registration:{[Tt]:{class:rt,singleton:!0}},type:Tt,predicate:de(Tt),factory:J.Singleton.create(Tt)};var Mp=Object.defineProperty,Ep=Object.getOwnPropertyDescriptor,Yc=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ep(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&&Mp(e,s,o),o};const qc="log-block-container-model";let Us=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new we({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}`)}};Yc([ge],Us.prototype,"_models",2);Us=Yc([P(qc)],Us);const Tp=m.createLogger({name:"log-stream-container-service",group:"Services"}),Wc=()=>{var r;const t=le(),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},mt=Wc(),_p="/api/kos/logs/node/{nodeId}/streams",Qc=async()=>(Tp.debug("sending GET for log-stream-container"),await Se.get(_p,{path:{nodeId:"primary"}},{destinationAddress:mt})),Zc=async(t,e="primary")=>{await Se.post("/api/kos/logs/node/{nodeId}/{stream}/subscribe",{path:{nodeId:e,stream:t}},void 0,{destinationAddress:mt})},Xc=async t=>{await Se.post("/api/kos/logs/node/{nodeId}/{stream}/unsubscribe",{path:{nodeId:"primary",stream:t}},void 0,{destinationAddress:mt})},Ip=async()=>{await Se.post("/api/kos/logs/overrides",{},{level:"WARN",name:"com.example",nodeType:"java",type:"package"},{destinationAddress:mt})},Jc=async t=>await Se.get("/api/kos/logs/node/{nodeId}/{stream}/blocks",{path:{nodeId:"primary",stream:t}},{destinationAddress:mt}),el=async(t,e)=>await Se.get("/api/kos/logs/node/{nodeId}/{stream}/blocks/{blockId}",{path:{nodeId:"primary",stream:t,blockId:e}},{destinationAddress:mt}),Sp=Object.freeze(Object.defineProperty({__proto__:null,createOverride:Ip,getKosConnectionId:Wc,getLogStreamBlock:el,getLogStreamBlocks:Jc,getLogStreams:Qc,subscribeToLogStream:Zc,unsubscribeFromLogStream:Xc},Symbol.toStringTag,{value:"Module"}));var Op=Object.defineProperty,$p=Object.getOwnPropertyDescriptor,Dp=(t,e,s,r)=>{for(var o=r>1?void 0:r?$p(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&&Op(e,s,o),o};const tl="log-block-model";let Yr=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 el(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}`)}};Yr=Dp([P(tl)],Yr);const Wt=new pe({class:Yr,type:tl}),mr=new pe({class:Us,type:qc});mr.addRelatedModel(Wt);var Cp=Object.defineProperty,Pp=Object.getOwnPropertyDescriptor,sl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Pp(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&&Cp(e,s,o),o};const rl="log-stream-model";let js=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=mr.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=Wt.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=Wt.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 Zc(this.name)}async unsubscribe(){await Xc(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 Jc(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=ac(()=>{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()}}};sl([ge],js.prototype,"_blocks",2);js=sl([P(rl)],js);const Kt=new pe({class:js,type:rl});var Rp=Object.defineProperty,xp=Object.getOwnPropertyDescriptor,He=(t,e,s,r)=>{for(var o=r>1?void 0:r?xp(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&&Rp(e,s,o),o};const ol="log-stream-container-model",Ap="/kos/logs/subscription/addBlock/*",Lp="/kos/logs/subscription/updateBlock/*",Fp="/kos/logs/subscription/removeBlock/*",kp="/kos/logs/subscription/lines/*",nl="/kos/logs/streams/add/*";let Te=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 we({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: ${nl}`);const e=t.stream,s=Kt.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=Kt.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 Qc();if(t){this.logger.error(`Error loading log-streams: ${t}`);return}e&&e.forEach(s=>{const r=Kt.instance(s).options({name:s,nodeId:"primary"}).build();this.addModel(r)})}};He([ge],Te.prototype,"_models",2);He([F({topic:[nl],websocket:!0})],Te.prototype,"handleStreamAdded",1);He([F({topic:[Ap],websocket:!0})],Te.prototype,"handleAddBlock",1);He([F({topic:[Fp],websocket:!0})],Te.prototype,"handleRemoveBlock",1);He([F({topic:[Lp],websocket:!0})],Te.prototype,"handleUpdateBlock",1);He([F({topic:[kp],websocket:!0})],Te.prototype,"handleLogLine",1);Te=He([P(ol)],Te);const cs=new be({class:Te,type:ol});cs.addRelatedModel(Kt);cs.addRelatedModel(mr);cs.addRelatedModel(Wt);const Np=t=>t.rank!==void 0,Up=t=>t.visibleRole!==void 0,jp=t=>t.color!==void 0,Bp=t=>{const e=t.info;return Np(e)?e.rank:0},Kp=t=>{const e=t.info;return jp(e)?e.color:"orange"},Hp=t=>{const e=t.info;return Up(e)?e.visibleRole:"TECHNICIAN"},{URL:Vo}=se(),{getAll:zp,postModel:il}=ee.build({basePath:`${Vo}/api/kos/troubles`}),al=async()=>await zp({}),cl=async(t,e)=>{try{const s=await il({model:{},urlOverride:`${Vo}/api/kos/troubles/resolve/${t}`,tracker:e});return s!=null&&s.data&&je.initiateFuture(s.data),s.data}catch{const r={id:e||"",endState:Ce.Fail,tracker:e,reason:"Failed to resolve trouble"};return je.initiateFuture(r),r}},Gp=async(t,e)=>{try{const s=await il({model:t,urlOverride:`${Vo}/api/kos/troubles/resolve/`,tracker:e});return s!=null&&s.data&&je.initiateFuture(s.data),s.data}catch{const r={id:e||"",endState:Ce.Fail,tracker:e,reason:"Failed to resolve troubles"};return je.initiateFuture(r),r}},Vp=Object.freeze(Object.defineProperty({__proto__:null,bulkResolveTroubles:Gp,getTroubles:al,resolveTrouble:cl},Symbol.toStringTag,{value:"Module"})),Bs="troubleDataMapper",bs=new Map;rs(Bs,{register:(t,e)=>{var s;bs.has(t)||bs.set(t,[]),(s=bs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=bs.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 ls="troubleMapper",ws=new Map;rs(ls,{register:(t,e)=>{var s;ws.has(t)||ws.set(t,[]),(s=ws.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=ws.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))}});O[ls].register("nozzle",async t=>[t.data.nozzlePath]);O[ls].register("path",async t=>[t.data.path]);const Yp=async t=>{const e=new Set,s=t.ifaces,r=s==null?void 0:s.map(n=>O[ls].execute(n,t));return(await Promise.allSettled(r)).forEach(n=>{n.status==="fulfilled"&&n.value.forEach(i=>e.add(i))}),Array.from(e)},ll=async t=>{const e=t.ifaces,s=e==null?void 0:e.map(i=>O[Bs].execute(i,t)),r=O[Bs].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 qp{constructor(){l(this,"type","ResolvableTrouble");l(this,"title","Resolvable Trouble");l(this,"subtitle","Trouble")}}class Wp{constructor(){l(this,"type","BlockPumpTrouble");l(this,"title","Block Pump Trouble");l(this,"subtitle","Trouble")}}class qe{static getHandler(e){switch(e){case"ResolvableTrouble":return new qp;case"BlockPumpTrouble":return new Wp;default:return}}}var Qp=Object.defineProperty,Zp=Object.getOwnPropertyDescriptor,dl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Zp(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&&Qp(e,s,o),o};const _t="trouble-model";function vs(t){return typeof t.shouldDefer=="boolean"}let Ks=class{constructor(t,{resolvable:e,tags:s,info:r,id:o,clientData:n,rank:i,ifaces:a,type:c,group:d,createTime:u,role:h,color:f,...p},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,"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=d,this.createTime=u,this.clientData=n,this.data={},Object.assign(this.data,p),this.futureHandler=new hr(this)}getTitleWithContext(t){var s,r;const e=t?(r=(s=qe.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:qe.getHandler(this.type);return(e==null?void 0:e.title)||"Trouble"}getSubtitleWithContext(t){var s,r;const e=t?(r=(s=qe.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:qe.getHandler(this.type);return(e==null?void 0:e.subtitle)||"Trouble"}get rawId(){return this._troubleId}get title(){var t;return((t=qe.getHandler(this.type))==null?void 0:t.title)||"Trouble"}get subtitle(){var t;return((t=qe.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 ll(this)}get deferredCompanion(){const t=Hr(this.id,e=>vs(e));if(t&&vs(t.modelData))return t.modelData}get deferred(){return this.deferredCompanion?this.deferredCompanion.deferred:!1}get shouldDefer(){const t=Hr(this.id,e=>vs(e));return t&&vs(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 cl(this._troubleId,t)}};dl([dn()],Ks.prototype,"resolve",1);Ks=dl([P(_t)],Ks);const Qt={registration:{[_t]:{class:Ks,singleton:!1}},type:_t,predicate:de(_t),factory:J.Factory.create(_t)};var Xp=Object.defineProperty,Jp=Object.getOwnPropertyDescriptor,yr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Jp(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&&Xp(e,s,o),o};const Bn=m.createLogger({name:"trouble-container-model"});function Kn(t){return O.propertyMapper.hasMapper(he.TroubleRank)?O.propertyMapper.executeMapper(he.TroubleRank,t):Bp(t)}function Hn(t){return(O.propertyMapper.hasMapper(he.TroubleColor)?O.propertyMapper.executeMapper(he.TroubleColor,t):Kp(t)).toLowerCase()}function zn(t){return(O.propertyMapper.hasMapper(he.TroubleRole)?O.propertyMapper.executeMapper(he.TroubleRole,t):Hp(t)).toLowerCase()}const em="trouble-container-model";class ae{}l(ae,"INDEX_TROUBLES_BY_IFACE","byIface"),l(ae,"INDEX_TROUBLES_BY_TYPE","byType"),l(ae,"INDEX_TROUBLES_BY_GROUP","byGroup"),l(ae,"INDEX_TROUBLES_BY_DEFERRED","byDeferred"),l(ae,"SORT_KEY_RANK","rank"),l(ae,"TROUBLES_DEFERRED","true");let ot=class{constructor(t){l(this,"id");l(this,"troubles");this.id=t,this.troubles=new we({indexMap:{[ae.INDEX_TROUBLES_BY_IFACE]:Yp,[ae.INDEX_TROUBLES_BY_TYPE]:"type",[ae.INDEX_TROUBLES_BY_GROUP]:"group",[ae.INDEX_TROUBLES_BY_DEFERRED]:"deferred"},sortKey:ae.SORT_KEY_RANK,parentId:t})}async load(){Bn.debug("loading trouble container");const t=await al();try{t==null||t.data.forEach(e=>{const s={...e,rank:Kn(e),color:Hn(e),role:zn(e),id:String(e.id)},r=Qt.factory(`trouble-${e.id}`)(s);this.troubles.addModel(r)})}catch(e){throw Bn.error(e),e}}handleTroubleRemoved(t){const e=`trouble-${t}`,s=this.troubles.getModel(e);this.troubles.removeModel(e),s&&Ue(s)}handleTroubleAdded(t){const e={...t,rank:Kn(t),color:Hn(t),role:zn(t),id:String(t.id)};if(e.role==="NONE")return;const s=Qt.factory(`trouble-${t.id}`)(e);this.troubles.addModel(s)}};yr([ge],ot.prototype,"troubles",2);yr([F({topic:"/kos/trouble/remove",websocket:!0,lifecycle:j.INIT})],ot.prototype,"handleTroubleRemoved",1);yr([F({topic:"/kos/trouble/add",websocket:!0})],ot.prototype,"handleTroubleAdded",1);ot=yr([P(em)],ot);const Ms="trouble-container-model",nt={registration:{[Ms]:{class:ot,singleton:!0}},type:Ms,predicate:de(Ms),factory:J.Singleton.create(Ms)},{URL:ul}=se(),{getAll:tm}=ee.build({basePath:`${ul}/api/kos/ota`}),Gn=m.createLogger({name:"ota-service",group:"Services"}),sm=async()=>{Gn.debug("sending GET request to /api/kos/ota/artifacts");const t=await tm({urlOverride:`${ul}/api/kos/ota/artifacts`});return Gn.debug("getArtifacts - response:",t),t==null?void 0:t.data};var rm=Object.defineProperty,om=Object.getOwnPropertyDescriptor,br=(t,e,s,r)=>{for(var o=r>1?void 0:r?om(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&&rm(e,s,o),o};const hl="ota-model",nm=t=>{let e=null;for(const s in t){const r=t[s],o=r.lastUpdateTime;(!e||e.lastUpdateTime<o)&&(e=r)}return e},xr=t=>{const e=t.artifactInfo,s=nm(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 it=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"data",new $o);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 sm();t&&t.forEach(e=>{const s=xr(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=xr(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=xr(e);s&&this.data.updateModel(s)})}catch(e){this.logger.error(`handleChangedArtifacts ${this.id} - error:`,e)}}};br([ht({modelType:nt.type})],it.prototype,"troubleContainer",2);br([F({topic:"/kos/ota/artifacts/all",websocket:!0})],it.prototype,"handleAllArtifacts",1);br([F({topic:"/kos/ota/artifacts/changed",websocket:!0})],it.prototype,"handleChangedArtifacts",1);it=br([P(hl)],it);const Hs=new be({class:it,type:hl});function im(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 Ar=m.createLogger({name:"software-info-service",group:"Services"}),Yo=async t=>{Ar.debug("sending GET for software-info");const[e,s]=await Dc.get("/api/kos/manifest/info",void 0,{signal:t});if(!s)throw t!=null&&t.aborted?(Ar.debug("Request was aborted"),new ce("Request was aborted")):(Ar.error("Failed to fetch software-info",e),new ce("Failed to fetch software-info"));return s},am=im(Yo),cm=Object.freeze(Object.defineProperty({__proto__:null,getSoftwareInfos:Yo,getSoftwareInfosWithCancel:am},Symbol.toStringTag,{value:"Module"}));var lm=Object.defineProperty,dm=Object.getOwnPropertyDescriptor,um=(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&&lm(e,s,o),o};const It="software-info-model";let qr=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 Yo(),e=(t==null?void 0:t.nodes)||{};W(()=>{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 ce&&this.logger.error("Failed to fetch software-info",t)}}};qr=um([P(It)],qr);const zs={registration:{[It]:{class:qr,singleton:!1}},type:It,predicate:de(It),factory:J.Factory.create(It)},{URL:fl}=se(),{getOne:hm}=ee.build({basePath:`${fl}/api/kos/state`}),fm=m.createLogger({name:"state-bean-service",group:"Services"}),gl=async({path:t})=>(fm.debug("sending GET for state-bean"),await hm({urlOverride:`${fl}/api/kos/state/${t}`})),gm=Object.freeze(Object.defineProperty({__proto__:null,getStateBeanData:gl},Symbol.toStringTag,{value:"Module"}));var pm=Object.defineProperty,mm=Object.getOwnPropertyDescriptor,pl=(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&&pm(e,s,o),o};const St="state-bean-model",ym=Be("path");let Gs=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=Co.map(new Map),jr(e,this)}updateModel(t){jr(t,this)}handleConfigBeanUpdated(t){Object.entries(t).forEach(([e,s])=>{let r=s;typeof r=="string"&&xo(r)&&(r=r.toLowerCase()=="true"),typeof r=="string"&&dr(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 gl({path:this.path});t!=null&&t.data&&this.updateProps(t.data)}};pl([F({topic:`/kos/state/${ym}`,websocket:!0})],Gs.prototype,"handleConfigBeanUpdated",1);Gs=pl([P(St)],Gs);const Zt={registration:{[St]:{class:Gs,singleton:!1}},type:St,predicate:de(St),factory:J.Factory.create(St)};var bm=Object.defineProperty,wm=Object.getOwnPropertyDescriptor,ml=(t,e,s,r)=>{for(var o=r>1?void 0:r?wm(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&&bm(e,s,o),o};const Ot="state-prop-model",Vn=Be("path");let Vs=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())??""}};ml([ht({modelType:Zt.type,id:`state-bean-${Vn}`,options:{path:Vn}})],Vs.prototype,"stateBean",2);Vs=ml([P(Ot)],Vs);const qo={registration:{[Ot]:{class:Vs,singleton:!1}},type:Ot,predicate:de(Ot),factory:J.Factory.create(Ot)},{URL:vm}=se(),{getAll:Mm}=ee.build({basePath:`${vm}/api/state-prop`}),Em=m.createLogger({name:"state-prop-service",group:"Services"}),Tm=async()=>(Em.debug("sending GET for state-prop"),await Mm({})),_m=Object.freeze(Object.defineProperty({__proto__:null,getStateProps:Tm},Symbol.toStringTag,{value:"Module"})),{URL:Wo}=se(),{getOne:yl}=ee.build({basePath:`${Wo}/api/translation`}),Ht=m.createLogger({name:"translation-service",group:"Services"}),Im=()=>{const t=window.location.origin,e=le();return(e==null?void 0:e.host)||t},bl=async(t,e)=>{Ht.debug("sending GET for translation");const s=e??Im();try{const r=await fetch(`${s}${t}`);return r.status!==200?(Ht.warn(`Failed to fetch translations at ${t}: ${r.status}`),{}):await r.json()}catch(r){throw Ht.error("Error fetching translations",r),r}},Sm=async()=>{Ht.debug("getting localization descriptor");const t=await yl({urlOverride:`${Wo}/api/system/kos/localization`});if((t==null?void 0:t.status)!==200)throw new Error(`Failed to get tool localization descriptor ${t==null?void 0:t.status}`);return t.data},wl=t=>async()=>{Ht.debug("getting kos localization descriptor");const e=await yl({urlOverride:`${Wo}/api/kos/localization/contexts`});if((e==null?void 0:e.status)!==200)throw new Error(`Failed to get tool localization descriptor ${e==null?void 0:e.status}`);return e.data[t]},vl="langResolver";var Om=Object.defineProperty,$m=Object.getOwnPropertyDescriptor,Dm=(t,e,s,r)=>{for(var o=r>1?void 0:r?$m(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&&Om(e,s,o),o};const $t="translation-model";function Cm(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 Ml(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=Ml(t[r],o);return{...s,...n}}else return{...s,[o]:t[r]}},{})}function El(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]=El(t[r],e[r]):s[r]=e[r]);return s}const Wr=(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)?Wr(r,e):r},Es=(t,e,s)=>{const r=/{{(.*?)}}/g,n=Wr(t,e).replace(r,(a,c)=>Object.prototype.hasOwnProperty.call(s||{},c.trim())?s==null?void 0:s[c.trim()]:a);return Wr(n,e)},Yn=(t,e)=>{if(e.includes(":")){const[s,r]=e.split(":");return{namespace:s,key:r}}else return{namespace:t,key:e}};let Qr=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(vl),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=K.getContext(this.id);return this.bundleResolver(this.namespace,r,o)}try{const o=this.resolver(this.namespace,r);return bl(o,this.rootUrl)}catch{return Promise.resolve({})}}),s=await Promise.allSettled(e);W(()=>{const r=s.reduce((o,n,i)=>(n.status==="fulfilled"?(this.logger.debug(`resolved ${t[i]}`,n.value),n.value&&(o=El(o,n.value))):this.logger.error(`failed to load translation ${this.id} for ${t[i]}`),o),{});this.data=Ml(r)})}async init(){this.logger.debug(`initializing translation ${this.id}`)}exists(t){const{namespace:e,key:s}=Yn(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}=Cm(e),{namespace:n,key:i}=Yn(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(d=>Es(d,this.data,o)):Es(this.data[a],this.data,o)}if(this.data[i]){const c=this.data[a];return Array.isArray(c)?c.map(d=>Es(d,this.data,o)):Es(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()})}};Qr=Dm([cr(),P($t)],Qr);const Ys={registration:{[$t]:{class:Qr,singleton:!1}},type:$t,predicate:de($t),factory:J.Factory.create($t)};var Pm=Object.defineProperty,Rm=Object.getOwnPropertyDescriptor,Tl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Rm(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};const Dt="translation-container-model",xm=(t,e="/")=>t.join(e).replace(new RegExp(e+"{1,}","g"),e);function Am(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 xm([r,o])}let qs=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||Am.bind(this),s.kosContext.set(vl,this.resolver),this.logger=s.logger,this._models=new we({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(){this._models.clear(),await Ba(this);for(const t of this.namespaces){const e=this.resolveNamespace(t);await ne(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=Ys.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)||W(()=>{this.namespaces.push(t)}),n}else{this.logger.warn(`namespace ${t} not found in descriptor`);const r=Ys.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}`)}};Tl([ge],qs.prototype,"_models",2);qs=Tl([P(Dt)],qs);const _e={registration:{[Dt]:{class:qs,singleton:!0}},type:Dt,predicate:de(Dt),factory:J.Singleton.create(Dt)},Lm={set(t,e){const s=K.getContext(_e.type);s&&s.set(t,e)},get(t){const e=K.getContext(_e.type);return e==null?void 0:e.get(t)}},_l={async init(t){const e=_e.factory(t);return await ne(e),{translations:e}}};function Fm(t){return t.troubles!==void 0&&t.troubles instanceof Array&&t.troublesByType!==void 0&&typeof t.troublesByType=="object"}const km=(t,e)=>{const s=e.type;return t[s]||(t[s]=[]),t[s].push(e),t},Il="kos-ws-event",Qo=ft(Il);var Nm=Object.defineProperty,Um=Object.getOwnPropertyDescriptor,Zo=(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 jm=({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 d=this._topicMap.get(i)||0;a=`${a}-${d+1}`,this._topicMap.set(i,d+1)}const c={msgId:a,content:r,headers:o,timestamp:Date.now(),raw:jm({headers:o,body:r}),direction:s?"send":"receive",mocked:!!o.mocked};this.events.set(a,c),m.debug(`logged ${this.events.size} events`)}}};Zo([F({topic:[ss.SEND]})],exports.WsEventModel.prototype,"handleSendEvent",1);Zo([F({topic:[ss.RECEIVED]})],exports.WsEventModel.prototype,"handleReceiveEvent",1);exports.WsEventModel=Zo([P(Qo.type)],exports.WsEventModel);const qn=le(),Bm=qn.debug==="true"||qn.debug===!0,Km="/api/system/canvas",Sl=async(t,e)=>{const s=e||Km,r=`${exports.BASE_URL}${s}`;await exports.kosFetch(r,{method:"POST",headers:{hide:Bm?"false":"true"},body:t})},Hm=Object.freeze(Object.defineProperty({__proto__:null,sendCanvasData:Sl},Symbol.toStringTag,{value:"Module"})),zm=(t,e,s)=>t>>5<<5|e>>5<<2|s>>6;function Wn(t,e,s){if(e==="base64"){const r=s?t.filter((o,n)=>n%4!==3):Array.from(t);return btoa(String.fromCharCode(...r))}else{const r=[];for(let o=0;o<t.length;o+=4)r.push(zm(t[o],t[o+1],t[o+2]));return String.fromCharCode(...r)}}var Gm=Object.defineProperty,Vm=Object.getOwnPropertyDescriptor,Ol=(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&&Gm(e,s,o),o};const $l="canvas-renderer-model";function Lr(t){return typeof t.onDone=="function"}let Ws=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){Sl(t,e)}checkStreaming(){if(this.isOneShotDone()||!this.isStreaming){requestAnimationFrame(()=>{const t=this.isOneShotDone();this.stopStreaming(!t)});return}}handleFrame(t){var s;const e=Wn(t,"base64",!0);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=Wn(o,"base64",!0);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 Lr(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=Lr(this._renderer);Lr(this._renderer)&&this._renderer.onDone(()=>{var c,d,u;this.logger.debug(`Renderer completed for ${this.id}`),B("/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=!(((u=(d=this._renderer)==null?void 0:d.isOneShot)==null?void 0:u.call(d))??!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,d;const a=(d=(c=this._renderer)==null?void 0:c.readPixels)==null?void 0:d.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"})})}};Ol([ht({modelType:Bo.type})],Ws.prototype,"router",2);Ws=Ol([P($l)],Ws);const Xo=new pe({class:Ws,type:$l});class Dl{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 Ym{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 qm extends Ym{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?(m=this.fosSocket)==null?void 0:m.connectionEstablished:(w=this.socket)==null?void 0:w.connectionEstablished){const E=r?this.fosSocket:this.socket;(v=E==null?void 0:E.socket)==null||v.send(u)}else{Le.debug("no connection adding to offline messages");const E=r?this.fosSocket:this.socket;E==null||E.addOfflineMessage(u)}}subscribeTopic({topic:e,callback:s,fos:r,bridge:o,destinationAddress:n}){const{unsubscribe:i,count:a}=$(e,s);return Le.debug(`Topic ${e} currently has ${a} subscribers`),this._sendSubscriptionMessage(e,"subscribe",r,o,n),()=>{const{count:c}=i();Le.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 Wh{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 d=this.config.filter?c.filter(h=>this.shouldProcessEvent(h)):c;if(d.length===0)return;this.config.backpressure&&await this.waitForCapacity();const u=this.config.transform?this.config.transform(d):d;return this.stats.batchesProcessed++,this.updateProcessingStats(d),u};try{for await(const d of e)if(this.stats.eventsReceived++,this.config.backpressure)for(this.enqueueEvent(d);this.eventQueue.length>0;){const u=this.dequeueEvent();u&&n.push(u);const f=Date.now()-i;if(n.length>=r||f>=o){const m=await a();m!==void 0&&(yield m);break}}else{n.push(d);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 Qh{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[Q])||{},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 d=this.createHandler(c,i);this.subscribe(i,c,d,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}=$(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 d=Br(r,s.skipParse),u=s.transform(d);if(a&&s.condition(u,this.modelData,r))return this.callHandlerWithWildcard(s,u,c,r)}else{this.log.warn(`Model ${this.modelId} not ready. Queuing message for ${e}`);const d=()=>{const u=Br(r,s.skipParse),h=s.transform(u);if(a&&s.condition(h,this.modelData,r))return this.callHandlerWithWildcard(s,h,c,r)};this.offlineQueue.enqueue(d)}}catch(n){this.log.error(`Error handling subscription for ${e}`,n)}}}extractWildcardCapture(e,s,r){var n;if(!r.wildcardName||!la(e))return null;const o=((n=s==null?void 0:s.headers)==null?void 0:n.topic)||"";return ca(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 Wh(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=$n(s)}else i=$n(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 Ge(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 Zh(t){return!!(t!=null&&t[Ne])&&Object.keys(t[Ne]).length>0}function Jh(t){return!!(t!=null&&t[Q])&&Object.keys(t[Q]).length>0}function Xh(t){return!!(t!=null&&t[Ee])&&t[Ee].length>0}class ef{static createAll(e){const{modelId:s,modelTypeName:r,modelData:o}=e,n=Ah.create({modelId:s,modelTypeName:r}),i=new Rh(e,Ge(n,"fsm")),a=new Lh(Ge(n,"offline-queue")),c=new _h(e),d=new Th(e),u={fsm:i,offlineQueue:a,companionManager:c,childResolver:d};if(Zh(o)&&(u.effectManager=new Ih(r,s,o,Ge(n,"effect"))),Jh(o)){const h=Ge(n,"subscription");u.subscriptionManager=new Qh(e,o,s,a,h),u.onlineLifecycleManager=new kh(e,Ge(n,"online"))}return Xh(o)&&(u.httpRouteManager=new To(o,Ge(n,"http-routes"))),u}}const A=D.getLogger("kos-model"),tf="kos.extension.model.loader";class Fa{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,"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=b.CREATED,this._activeStatus=b.INACTIVE,this._onlineStatus=b.OFFLINE;const o=ef.createAll(this);this.fsm=o.fsm,this.offlineQueue=o.offlineQueue,this.companionManager=o.companionManager,this.childResolver=o.childResolver,o.effectManager&&(this.effectManager=o.effectManager),o.subscriptionManager&&(this.subscriptionManager=o.subscriptionManager),o.httpRouteManager&&(this.httpRouteManager=o.httpRouteManager),o.onlineLifecycleManager&&(this.onlineLifecycleManager=o.onlineLifecycleManager),M.makeAutoObservable(this,{fsm:!1,effectManager:!1,subscriptionManager:!1,onlineLifecycleManager:!1,companionManager:!1,childResolver:!1,offlineQueue:!1}),Mh(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===b.ACTIVE}isOnline(){return this._onlineStatus===b.ONLINE}isReady(){return this._status===b.READY}async deactivate(){var e,s,r;A.debug(`deactivating model ${this.modelTypeName} with id ${this.modelId}`);try{const o=K.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.deactivate)==null?void 0:s.call(e,o)),A.debug(`Model ${this.modelTypeName} with id ${this.modelId} deactivated`),(r=this.subscriptionManager)==null||r.deactivate()}catch(o){throw A.debug(`Model ${this.modelId} failed to deactivated`),o}}async activate(){var e,s,r;A.debug(`activating model ${this.modelTypeName} with id ${this.modelId}`),await vt(this,j.ACTIVATE);try{const o=K.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.activate)==null?void 0:s.call(e,o)),A.debug(`Model ${this.modelTypeName} with id ${this.modelId} subscribing to all topics`),(r=this.subscriptionManager)==null||r.registerAll(j.ACTIVATE),A.debug(`Model ${this.modelTypeName} with id ${this.modelId} activated`)}catch(o){throw A.debug(`Model ${this.modelId} failed to activate`),o}}async whenLoaded(){await Or([{condition:()=>this.status===b.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.loaded,onMatch:()=>{A.debug(`Model ${this.modelId} is loaded`)}}])}async whenInitialized(){await Or([{condition:()=>this.status===b.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.initialized,onMatch:()=>{A.debug(`Model ${this.modelId} is initialized`)}}])}async whenReady(){await Or([{condition:()=>this.status===b.FAILED,onMatch:()=>{throw new Error(`Failed to ready model ${this.modelId}`)}},{condition:()=>this.status===b.READY,onMatch:()=>{A.debug(`Model ${this.modelId} is ready`)}}])}async ready(){var e,s,r;if(this.fsm.current===b.READY){A.debug(`already readying model ${this.modelTypeName} with id ${this.modelId} returning`);return}try{A.debug(`readying model ${this.modelTypeName} with id ${this.modelId}`),await vt(this,j.READY),await Ma(this,Mo.READY,j.READY);const o=K.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.ready)==null?void 0:s.call(e,o)),this.offlineQueue.flush(),(r=this.subscriptionManager)==null||r.registerAll(j.READY),A.debug(`Model ${this.modelId} is ready`);const n={modelId:this.modelId,modelType:this.modelTypeName};B(da(this.modelTypeName,this.modelId),n),B(ua(this.modelTypeName),n)}catch(o){throw A.error(o),Error(o)}}async load(){var o,n,i,a,c;const e=this[Ps];e&&await e.whenLoaded();const{modelTypeName:s,modelId:r}=this;if(this.fsm.current===b.LOADED||this.fsm.current===b.LOADING){A.debug(`Model ${s} with id ${r} already loaded or loading`);return}A.debug(`Loading model ${s} with id ${r}`),await vt(this,j.LOAD);try{const d=K.getContext(r),u=`${tf}.${s}`,h=await O.loader.executeLoader(u,{});h&&(A.info(`Setting loaded context for ${r}, type: ${s}`),d==null||d.set(u,h)),await((n=(o=this.modelData)==null?void 0:o.load)==null?void 0:n.call(o,d)),W(()=>{this.loaded=!0}),A.debug(`Model ${s} with id ${r} successfully loaded`),(i=this.subscriptionManager)==null||i.registerAll(j.LOAD),(a=this.httpRouteManager)==null||a.registerAll(),(c=this.effectManager)==null||c.setup()}catch(d){throw A.error(`Model ${r} failed to load`,d),d}}async unload(){var e,s,r,o,n,i;A.debug(`unloading model ${this.modelTypeName} with id ${this.modelId}`);try{const a=this.getChildren().map(d=>{var u;return(u=d.unload)==null?void 0:u.call(d)}).filter(d=>!!d);await Promise.allSettled(a);const c=K.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(),A.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 A.debug(`Model ${this.modelId} failed to unload`),a}}async init(){var n,i,a;const e=this[Ps];e&&await e.whenInitialized();const{modelId:s,modelTypeName:r}=this,o=K.getContext(s);A.debug(`Initializing model ${r} with id ${s}`),await vt(this,j.INIT);try{await((i=(n=this.modelData)==null?void 0:n.init)==null?void 0:i.call(n,o)),this.initialized=!0,A.debug(`Model ${r} with id ${s} initialized`),(a=this.onlineLifecycleManager)==null||a.register(),this.registerSubscribers(j.INIT)}catch(c){throw A.error(`Model ${s} failed to initialize`,c),c}}async registerSubscribers(e){var s;A.debug(`registering subscribers in ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.registerAll(e)}async online(){var s,r;A.debug(`online model ${this.modelTypeName} with id ${this.modelId}`),this.registerSubscribers();const e=K.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;A.debug(`offline model ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.disposeAll();const e=K.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 Na=t=>typeof t=="function",Pn=p.createLogger({name:"kos-model-instantiator"});class sf{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)){Pn.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 Fa({modelTypeName:e,id:n,modelData:a});this.cache.addModel(c),this._createCompanionModels(c,r)}const i=this.cache.getModelById(n);if(!i)throw Pn.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=Na(i)?i(e.modelData,s):i;if(!a)continue;const c=`${a}-${e.modelId}`,d=this.createModelInstance(a,c,{data:s,companionParent:e.modelData,kosParentId:e.modelId});d!=null&&d.model&&(d.model[Ps]=e,e.addCompanionModel(d.model))}}}let rf=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 Ua=10,Rn=p.createLogger({name:"kos-model-manager"});class ja{constructor(){l(this,"cache");l(this,"instantiator");l(this,"dependencies");l(this,"_registry");globalThis.kos=globalThis.kos||{},this.dependencies=new Wu,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 rf(e),r.cache=new Qu(e.preloadModels),r.instantiator=new sf(e,r.cache),r}static getInstance(e){var s,r;return(!((s=globalThis.kos)!=null&&s.modelManager)||e)&&(Rn.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=>(Rn.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(x.RESET,b.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),sa.addToDeletionQueue(e.id,setTimeout(()=>this.destroyModel(s),Ua)))}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 Is=(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))(Is||{}),Qe=(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))(Qe||{});const of=t=>{const e=y.createMachine("offline",{online:y.state(y.transition("go_offline","offline",y.action(()=>{t.offline(),M.runInAction(()=>{t.isOnline=!1})}))),offline:y.state(y.transition("go_online","online",y.action(()=>{t.online(),M.runInAction(()=>{t.isOnline=!0})})))}),s=y.interpret(e,n=>D.debug(n.machine.current)),r=y.createMachine({creating:y.state(y.transition("create","created")),created:y.state(y.immediate("initializing")),initializing:y.invoke(()=>t.init(),y.transition("done","initialized")),initialized:y.state(y.immediate("loading")),loading:y.invoke(()=>t.load(),y.transition("done","loaded")),loaded:y.state(y.immediate("readying"),y.transition("unload","unloading")),readying:y.invoke(()=>t.ready(),y.transition("done","ready",y.action(()=>{M.runInAction(()=>{t.status="ready"})}))),reloading:y.invoke(()=>t.reload(),y.transition("done","loading")),ready:y.state(y.transition("reload","reloading"),y.transition("unload","unloaded",y.action(t.unload.bind(t))),y.transition("go_online","ready",y.action(()=>{s.send("go_online")})),y.transition("go_offline","ready",y.action(()=>{s.send("go_offline")}))),unloaded:y.state()});return{service:y.interpret(r,n=>D.debug(n.machine.current)),online:s}},ne=async t=>{if(t.id){const e=S.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},Ue=async t=>{await S.getInstance().whenReady(),await S.getInstance().modelManager.initiateDestroyModel(t)},nf=async t=>{if(await S.getInstance().whenReady(),!t.id)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t.id);e&&await e.fsm.transitionTo(x.UNLOAD,b.UNLOADED)},Ba=async t=>{await S.getInstance().whenReady(),await S.getInstance().modelManager.reloadModel(t),p.debug(`reload model initiated for model ${t.id}, model ready: ${xs(t)} - ${Date.now()} `),await ne(t),p.debug(`reload model complete for model ${t.id}, model ready: ${xs(t)} - ${Date.now()} `)},af=async t=>{if(await S.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);return e==null?void 0:e.modelTypeName},Ka=async t=>{if(await S.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},me=t=>{if(!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Ha=(t,e)=>{if(!t)throw new Error("Model type is required");return S.getInstance().modelManager.getModelsByType(t).filter(o=>Object.keys(e).every(n=>o[n]===e[n]))},cf=(t,e)=>Ha(t,e)[0],lf=(t,e)=>{if(!t.id)throw new Error("Model ID is required");const s=S.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},za=t=>{if(!t.id)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return Array.from(e.companionModels.all()).map(r=>r.modelData)},df=t=>{if(!t)throw new Error("Model ID is required");const e=S.getInstance().modelManager.getModelById(t);if(!e)throw new Error("Model not found");return e.companionModels.data},Hr=(t,e)=>{const s=S.getInstance().modelManager.getModelById(t);if(!s){p.info(`Model not found for id ${t}`);return}return Array.from(s.companionModels.all()).find(o=>e(o.modelData))},de=t=>e=>Object.getPrototypeOf(e).modelTypeId===t,xs=t=>{const e=S.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return e.isReady()},uf=p.createLogger({name:"kos-model-factory"}),jt={byModelType:t=>S.getInstance().modelManager.getModelFactory(t),getModelInstance:(t,e,s)=>{const r=jt.byModelType(e);if(!r)throw uf.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)}},X={Factory:{create:t=>e=>(s,r)=>(r&&K.setParentContext(e,r),jt.getModelInstance(e,t,s))},Singleton:{create:t=>(e,s)=>(s&&K.setParentContext(t,s),jt.getModelInstance(t,t,e))},Model:{instance:t=>e=>jt.getModelInstance(e,t)}};window.KosRegistry=window.KosRegistry||{coreModels:new Map,preloadModels:[],companionModels:new Map,models:new Map};const xn=window.KosRegistry.coreModels,$r=window.KosRegistry.preloadModels,Dr=window.KosRegistry.companionModels,fs=window.KosRegistry.models,C={model:{registerLegacyModel:t=>(e,s)=>(xn.set(e,s),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}),preloadModel:t=>e=>($r.includes(e)||$r.push(e),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}),register:t=>(e,s)=>{const r=Cr(e)?e.registration():e;return fs.set(r.type,r),Cr(e)&&e.relatedModels.forEach(o=>fs.set(o.type,o.registration())),S.getInstance().isReady&&(S.getInstance().modelManager.registry.models[r.type]||(console.info(`Model with type ${r.type} doesn't exist. Adding new registration`),S.getInstance().modelManager.registry.models[r.type]=r.registration[r.type],Cr(e)&&e.relatedModels.forEach(o=>S.getInstance().modelManager.registry.models[o.type]=o.registration().registration))),s&&C.model.preloadModel(t)(r.type),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}},get:t=>fs.get(t),getAll:()=>Array.from(fs.entries()),getPreloadModels:()=>$r,getLegacyModels:()=>Array.from(xn.entries()).reduce((t,[e,s])=>(t[e]=s,t),{})},companion:{register:t=>(e,s)=>{const r=Dr.get(e)||[];return r.push(s),Dr.set(e,r),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t),root:t}},getAll:()=>Array.from(Dr.entries())}},Ga=C.model.registerLegacyModel,Va=C.model.register,hf=C.companion.register,ff=C.model.preloadModel,Ya=t=>typeof t.updateModel=="function",Cr=t=>t.registration!==void 0&&typeof t.registration=="function";class qa{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=de(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(){C.model.register({})(this.registration()),this.registerRelatedModels()}}class pe extends qa{constructor(e){super({...e,singleton:!1,factory:X.Factory.create(e.type)})}instance(e){const s=this.factory(e);return{get:()=>{const r=me(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(Ya(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 be extends qa{constructor(e){super({...e,singleton:!0,factory:X.Singleton.create(e.type)})}instance(){const e=this.factory;return{get:()=>{const r=me(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(Ya(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 z=p.createLogger({name:"kos-core"}),gf=()=>{const t=le(),e=t==null?void 0:t.alias,s=process.env.KOS_CONNECTION_ALIAS;return e||s||void 0},pf=()=>{const t=window.location.protocol,e=le(),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://")},mf=()=>{const t=window.location.hostname,e=process.env.KOS_HOST,s=le(),r=s==null?void 0:s.host;let o;try{o=new URL(r).hostname}catch{}return o??e??t},yf=()=>{const t=window.location.port,e=process.env.KOS_PORT,s=le(),r=s==null?void 0:s.host;let o;try{o=new URL(r).port}catch{}return o??e??t},bf=(t,e)=>{let s;return{promise:new Promise((n,i)=>{s=setTimeout(()=>{e?p.error(`Model ${e.modelId} - ${e.modelTypeName} preloading - timed out after ${t}ms`):p.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)}}},An=t=>typeof t.reload=="function",wf=t=>typeof t.unload=="function";var Wa=(t=>(t.LOGGED_IN="logged_in",t.LOGGED_OUT="logged_out",t))(Wa||{});class S{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=Is.CREATED,this.authState="logged_out",this._reloading=!1,this._unloading=!1,M.makeAutoObservable(this),$("token",a=>{a&&(this.transport.token=a.body)}),$(Ut.CONNECTED,async()=>{await this.whenReady(),this.fsmService.service.send(Qe.GO_ONLINE)}),$(Ut.DISCONNECTED,async()=>{this.fsmService.service.send(Qe.GO_OFFLINE)}),$("/studioServer/auth/LOGGED_IN",()=>{this.authState="logged_in",this.transport.authorized=!0}),$("/studioServer/auth/LOGIN_REQUIRED",()=>{this.authState="logged_out",this.transport.authorized=!1}),$(Ut.RELOAD,()=>{this.fsmService.service.send(Qe.RELOAD)}),$("/studio/project/reload",()=>{this.fsmService.service.send(Qe.RELOAD)});const s=tt.getInstance(),r=mf(),o=yf(),n=pf();s.host=r,s.port=Number.parseInt(o),s.protocol=n,process.env.KOS_ALLOW_ANONYMOUS==="true"&&(s.authorized=!0);const i=gf()??e;i&&(s.alias=i.replace("{{TIMESTAMP}}",Date.now().toString())),this._transport=s.init(),this.fsmService=of(this),this.fsmService.service.send(Qe.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){z.info("reload already in progress");return}this._reloading=!0,z.warn("reloading KOS Core"),z.warn("reloading preloaded models");const s=this.modelManager;for(const c of s.preloadedModels)An(c.modelData)&&(z.info(`reloading model ${c.modelId}`),(o=c.unload)==null||o.call(c),await c.modelData.reload(),(n=c.registerSubscribers)==null||n.call(c),z.info(`reloading model ${c.modelId} complete`));for(const c of s.models)!s.preloadedModels.includes(c)&&An(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(()=>{z.warn("reloading KOS Core complete"),this._reloading=!1})},1e3-r)}async online(){z.debug("KOS Core going online"),await this._transport.whenReady(),z.debug("KOS Transport Ready. Calling online() for models"),B("/kosCore/online","/kosCore/online"),console.timeEnd("kosCore:startup")}async offline(){z.debug("KOS Core going offline"),B("/kosCore/offline","/kosCore/offline")}async unload(){var o;z.debug("Unloading KOS Core");const e=Date.now();this._unloading=!0,z.debug("unloading KOS Core");const s=this.modelManager;for(const n of s.models)wf(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===Is.READY)}async ready(){z.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}=bf(5e3,o.model);Promise.race([o.promise.then(()=>{i()}),n])}))).filter(o=>o.status==="rejected");if(r.length)throw z.error(`There were ${r.length} failed models on model preloading`),Error(`There were ${r.length} failed models on model preloading`);z.debug("leaving kos-core ready() ")}get isReady(){return this.status===Is.READY}set transport(e){this._transport=e}get transport(){return this._transport}get coreInitialized(){return this.initialized}get modelsLoaded(){return this.loaded}async init(){z.debug("entering kos-core init()"),console.time("kosCore:startup"),console.time("kosCore:init"),await this._transport.whenReady(),this.initialized=!0,z.debug("initialized - leaving kos-core init()"),console.timeEnd("kosCore:init")}async load(){z.debug("entering kos-core load()"),console.time("kosCore:load"),this.loaded=!0,z.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(d=>{var h,f;const u=(f=(h=e.extensions)==null?void 0:h.dataMapper)==null?void 0:f[d];u&&(Array.isArray(u)?u.forEach(m=>{O.dataMapper.registerDataMapper(d,m)}):O.dataMapper.registerDataMapper(d,u))}),(a=e.extensions)!=null&&a.propertyMapper&&Object.keys(e.extensions.propertyMapper).forEach(d=>{var h,f;const u=(f=(h=e.extensions)==null?void 0:h.propertyMapper)==null?void 0:f[d];u&&O.propertyMapper.registerPropertyMapper(d,u)}),(c=e.extensions)!=null&&c.contextLoader&&Object.keys(e.extensions.contextLoader).forEach(d=>{var h,f;const u=(f=(h=e.extensions)==null?void 0:h.contextLoader)==null?void 0:f[d];u&&O.loader.registerLoader(d,u)}),C.model.getAll().forEach(([,d])=>{e.models={...e.models,...d.registration}}),e.models={...e.models,...C.model.getLegacyModels()},C.companion.getAll().forEach(([d,u])=>{e.companionModels={...e.companionModels},e.companionModels[d]=e.companionModels[d]||[];for(const h of u)e.companionModels[d].push({type:h})}),C.model.getPreloadModels().forEach(d=>{e.preloadModels.includes(d)||e.preloadModels.push(d)});const n=ja.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(S,"_instance");function zr(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 vf(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 Mf(t){return await t.arrayBuffer()}function Ef(t,e){return new Blob([t],{type:e||"application/octet-stream"})}async function Tf(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:zr(i)})}else e[o]=n.toString();return{fields:e,files:s}}function _f(t){return new ReadableStream({async start(){},async pull(e){await t(e)},cancel(){}})}async function If(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:zr(e),contentType:"application/octet-stream",encoding:"base64"}}if(t instanceof Blob){const e=await Mf(t);return{data:zr(e),contentType:t.type||"application/octet-stream",encoding:"base64"}}if(t instanceof FormData){const e=await Tf(t);return{data:JSON.stringify(e),contentType:"multipart/form-data",encoding:"json"}}throw new Error("Unsupported body type")}const gs=p.createLogger({name:"kos-fetch"}),Sf=process.env.KOS_WS_TIMEOUT?parseInt(process.env.KOS_WS_TIMEOUT):3e4,Of=()=>new Promise(t=>{setTimeout(()=>{t(!0)},0)}),$f=t=>t!=null&&t.studio?Ia:t!=null&&t.fos?Sa:Oa,Df=async(t,e)=>{const s=S.getInstance().transport;await s.whenReady();const r=ut(),o=new URL(t),n=`${o.pathname}${o.search}`;gs.debug(`path: ${n}`);const i=(e==null?void 0:e.timeout)||Sf,a=$f(e),c=await If(e==null?void 0:e.body),d={};c.contentType&&(d["content-type"]=c.contentType),c.encoding&&(d["content-encoding"]=c.encoding);const u=xe(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,...d}}),c.data);return new Promise(h=>{let f=null,m=null;if(e!=null&&e.signal){if(e.signal.aborted){h({headers:Mt({}),status:0,ok:!1,json:async()=>null,body:Et(""),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",()=>{m&&clearTimeout(m),f&&f(),h({headers:Mt({}),status:0,ok:!1,json:async()=>null,body:Et(""),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.")}})})}m=setTimeout(()=>{gs.error(`Timeout occurred - url: ${t}`),f&&f(),h({headers:Mt({}),status:404,ok:!1,json:async()=>null,body:Et(""),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 w=$(r,E=>{m&&clearTimeout(m);const _=(E==null?void 0:E.headers)||{},F=_["content-type"]||"text/plain",te=_["content-encoding"],R=(E==null?void 0:E.body)||"";let I=R;if(te==="base64"&&R)try{I=vf(R)}catch(N){gs.error("Failed to decode base64 response",N)}const V={headers:Mt(_),status:_.status&&parseInt(_.status)||200,ok:_.status==="200",json:async()=>{try{if(typeof I=="string")return I.length?JSON.parse(I):null;{const Y=new TextDecoder().decode(I);return Y.length?JSON.parse(Y):null}}catch{throw Error("Not a JSON response")}},text:async()=>typeof I=="string"?I:new TextDecoder().decode(I),arrayBuffer:async()=>I instanceof ArrayBuffer?I:new TextEncoder().encode(I).buffer,blob:async()=>I instanceof ArrayBuffer?Ef(I,F):new Blob([I],{type:F}),formData:async()=>{const N=new FormData;if(F==="multipart/form-data"&&typeof I=="string")try{const Y=JSON.parse(I);Y.fields&&Object.entries(Y.fields).forEach(([Oe,ve])=>{N.append(Oe,ve)}),Y.files&&gs.warn("File reconstruction in FormData not fully implemented")}catch{throw new Error("Failed to parse FormData")}return N},body:e!=null&&e.stream?_f(async N=>{if(I instanceof ArrayBuffer)N.enqueue(new Uint8Array(I));else{const Y=new TextEncoder;N.enqueue(Y.encode(I))}N.close()}):Et(typeof I=="string"?I:""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){return{...this}},bodyUsed:!1};w.unsubscribe(),Of().then(()=>h(V))});f=w.unsubscribe;const v=e!=null&&e.fos?s.fosSocket:s.socket;if(!v)throw Error(`No web socket transport available: ${e}`);v==null||v.send(u)})};exports.BASE_URL="kos:";exports.kosFetch=Df;if(process.env.KOS_MOCK_FETCH==="true"){const t=process.env.KOS_PORT||"9999";exports.kosFetch=fetch,exports.BASE_URL=`http://localhost:${t}`}const Cf=p.createLogger({name:"kos-model-visitor",group:"kos-ui-core"});class Pf{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=S.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)){Cf.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)}))}}const Qa=()=>({isMock:!1,URL:exports.BASE_URL}),Rf=p.createLogger({name:"kos-service-request"}),xf="errUnknown";async function ps(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=`${Qa().URL}${n}${i?`?${encodeURIComponent(i)}`:""}`;Rf.debug(`fullUrl: ${a}`);const c={method:String(e).toUpperCase(),body:null,...s};o&&(c.body=JSON.stringify(o));const d=await exports.kosFetch(a,c);return d.status<200||d.status>=400?[`${d.statusText||xf}`,null]:[null,(await d.json()).data]}function Io(){return{get:(t,e,s)=>ps(t,"get",s,e),post:(t,e,s,r)=>ps(t,"post",r,e,s),put:(t,e,s,r)=>ps(t,"put",r,e,s),delete:(t,e,s,r)=>ps(t,"delete",r,e,s)}}class Za{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 Af=async(t,e)=>{const s=new Za;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)=>S.getInstance().modelManager.createModelInstance(t,e,s).data,buildAsync:async(e,s)=>{const r=S.getInstance().modelManager.createModelInstance(t,e,s);return await r.model.whenInitialized(),r.data}}),Lf=t=>{S.getInstance().modelManager.registerModel(t)},kf=(t,e)=>{S.getInstance().modelManager.registerCompanionModel(t,e)},Ja=Symbol("KosObservableData");class Xa{constructor(){l(this,"map");l(this,"atomMap",new Map);l(this,"proxyHandler",{get:(e,s)=>{var r;return 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.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())});this.map=M.observable.map(new Map)}setValue(e,s){this.map.set(e,s)}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 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)}}Xa.prototype[Ja]=!0;function Ff(t,e){return new Proxy(t,{construct:(s,r)=>{const o=new t(...r);return o.setValues(e),o.proxy}})}const De=t=>{const e=Ff(Xa,t);return new e(t)},Ln="/kos/ui/internal/heartbeat/",Nf=({relationshipId:t,destinationAddress:e,onAbort:s,waitTime:r,beatTime:o})=>{const n=S.getInstance().transport,i=new AbortController;let a=performance.now();const c=n.subscribeTopic({topic:`${Ln}${t}`,callback:()=>{a=performance.now()}}),d=r??3e3,u=window.setInterval(()=>{let v=performance.now()-a;v=v/1e3,v>d/1e3&&i.abort()},d),h=o??2e3,f=window.setInterval(()=>{Aa({msg:{},options:{topic:`${Ln}${t}`,destinationAddress:e}})},h),m=()=>{window.clearInterval(f),window.clearInterval(u),c()},w=()=>{m(),s&&s(),i.signal.removeEventListener("abort",w)};return i.signal.addEventListener("abort",w),{cleanUpHeartbeat:m}},ec=(...t)=>e=>t.reduce((s,r)=>r(s),e),Uf={maxAttempts:5,baseDelayMs:100,backoffFactor:1.5};async function jf(t,e){let s=1;const r={...Uf,...e},{maxAttempts:o,baseDelayMs:n,backoffFactor:i}=r;let a=n;for(;s<=o;)try{return await t()}catch(c){if(p.error(`Attempt ${s} failed: ${c}`),s<o)a=n*Math.pow(i,s),await new Promise(d=>setTimeout(d,a)),s++;else throw c}throw new Error("All attempts failed")}const Bf=p.createLogger({name:"kos-service-request"}),se=t=>({isMock:!1,URL:exports.BASE_URL}),Kf=(t,e,s)=>async({id:r,tracker:o,urlOverride:n,ordered:i,studio:a,fos:c,bridge:d,destinationAddress:u})=>{const h={method:"DELETE"};t&&(h.destinationAddress=t),o&&(h.tracker=o),gt(h,{ordered:i,studio:a,fos:c,bridge:d,destinationAddress:u});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()},gt=(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),Hf=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,timeout:c,destinationAddress:d})=>{const u={method:"GET"};t&&(u.destinationAddress=t),gt(u,{timeout:c,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:d});const f=await s(r||e,u);if(!f.ok){let w;try{w=await f.json()}catch{}throw new ce(`There was a problem retrieving the model; returned status ${f.status}`,w)}return await f.json()},zf=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,tracker:c,timeout:d,destinationAddress:u})=>{const h={method:"GET"};t&&(h.destinationAddress=t),c&&(h.tracker=c),gt(h,{timeout:d,ordered:o,studio:n,fos:i,bridge:a,destinationAddress:u});const f=r||e;Bf.debug(`resolvedUrl: ${f}`);const m=await s(f,h);if(!m.ok){let v;try{v=await m.json()}catch{}throw new ce(`There was a problem retrieving the model; returned status ${m.status}`,v)}return await m.json()},Gf=(t,e,s)=>async({urlOverride:r,id:o,ordered:n,studio:i,fos:a,bridge:c,timeout:d,destinationAddress:u})=>{const h={method:"GET"};t&&(h.destinationAddress=t),gt(h,{timeout:d,ordered:n,studio:i,fos:a,bridge:c,destinationAddress:u});const f=r||`${e}/${o}`,m=await s(f,h);if(!m.ok){let v;try{v=await m.json()}catch{}throw new ce(`There was a problem retrieving the model; returned status ${m.status}`,v)}return await m.json()};class ce extends Error{constructor(s,r){super(s);l(this,"payload");this.name="FetchException",this.payload=r}}const kn=(t,e,s)=>async({model:r,urlOverride:o,ordered:n,tracker:i,studio:a,fos:c,bridge:d,timeout:u,destinationAddress:h})=>{const f={method:"POST",body:typeof r=="string"?r:JSON.stringify(r)};t&&(f.destinationAddress=t),i&&(f.tracker=i),gt(f,{timeout:u,ordered:n,studio:a,fos:c,bridge:d,destinationAddress:h});const m=await s(o||e,f);if(!m.ok){let v;try{v=await m.json()}catch{}throw new ce(`There was a problem sending the POST data; returned status ${m.status}`,v)}return await m.json()},Fn=(t="POST",e,s,r)=>async({model:o,id:n,urlOverride:i,ordered:a,studio:c,fos:d,bridge:u,timeout:h,destinationAddress:f})=>{const m={method:t};o&&(m.body=JSON.stringify(o)),e&&(m.destinationAddress=e),gt(m,{timeout:h,ordered:a,studio:c,fos:d,bridge:u,destinationAddress:f});const w=await r(i||`${s}/${n}`,m);if(!w.ok){let E;try{E=await w.json()}catch{}throw new ce(`There was a problem modifying the model; returned status ${w.status}`,E)}return await w.json()},ee={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:Hf(t,s||e,c),getModelById:Gf(t,r||e,c),getOne:zf(t,r||e,c),addModel:kn(t,n||e,c),deleteModel:Kf(t,o||e,c),modifyModel:Fn("POST",t,i||e,c),putModel:Fn("PUT",t,i||e,c),postModel:kn(t,n||e,c)}}},Vf=ut(),tc=()=>`kos-${Vf}`,Yf=t=>!!t&&!t.includes("VM_SERVICE")&&t.startsWith(tc()),So=async(t,e=6e4)=>new Promise((s,r)=>{const{unsubscribe:o}=$(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)}),qf=async(t,e,s)=>{const r=So(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)},Wf=async({topic:t,msg:e,requestId:s})=>{const r=s??ut(),o=So(r);B(t,e,{sync:r});const n=await o;if(n.error)throw Error(n.error);return n},ie=new Map;class sc{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){W(()=>{this._parent=e})}get id(){return this._id}get context(){return this._context}get parentModel(){var e;if(this._parent)return(e=me(this._parent))==null?void 0:e.model}get companionModels(){const e=me(this._id);return e!=null&&e.model?za(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||!ie.has(n.id)?!1:(i=ie.get(n.id))==null?void 0:i.context.has(e)});if(o)return(s=ie.get(o.id))==null?void 0:s.get(e)}if(this._parent)return(r=ie.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 K={createContext:(t,e)=>{const s=ie.get(t)??new sc(t);if(e){if(!ie.has(e))throw new Error(`Parent context ${e} does not exist`);s.setParent(e)}else t!=="root"&&s.setParent("root");return ie.set(t,s),s},getContext:t=>ie.get(t),deleteContext:t=>{ie.delete(t)},setParentContext:(t,e)=>{var s;if(!ie.has(e))throw new Error(`Parent context ${e} does not exist`);(s=ie.get(t))==null||s.setParent(e)},rootContext:()=>ie.get("root")};K.createContext("root");const Qf=t=>K.getContext(t.id);function Zf(t,e){return t.length!==e.length?!1:t.every(s=>e.includes(s))}class Oo{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=De(),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(Zf(n,i))p.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 Jf(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 bt=p.createLogger({name:"kos-container-model"});class we{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?O.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=De(),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 Oo({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&&K.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(([u,h])=>[h,u])),a=u=>{var f,m;n.includes(u.name)&&((f=this.index.get(i.get(u.name)))==null||f.refresh());const h=o.filter(([,w])=>typeof w=="function");for(const[w]of h)(m=this.index.get(w))==null||m.refresh()},c=Jf(e,a,n.filter(u=>typeof u=="string")),d=M.observe(e,a);this._disposerMap.set(e.id||"",()=>[d,...c].forEach(u=>u()))}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??[]:(bt.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):(bt.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return bt.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async clear(){this._data.forEach(e=>{const s=e.id;Ue(e).then(()=>{bt.debug(`${s} destroyed, removing from map`),this.removeModel(s,!0)}).catch(r=>bt.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 Pr=p.createLogger({name:"kos-data-container"});class $o{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=De(),M.makeAutoObservable(this,{}),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new Oo({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??[]:(Pr.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):(Pr.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return Pr.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 Xf{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 X.Factory.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!1,factory:this.factory},...this.childRegistration}}get predicate(){return de(this.type)}}class eg{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 X.Singleton.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!0,factory:this.factory},...this.childRegistration}}get predicate(){return de(this.type)}}class rc{constructor(){l(this,"_token");M.makeAutoObservable(this),$("token",e=>{this.token=e==null?void 0:e.body})}get token(){return this._token}set token(e){this._token=e}}class oc{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 d=this.matchRoute(c.path,r);if(c.method===e.method&&d){i.params=d;let u=0;const h=async()=>{if(u<c.middlewares.length){const f=c.middlewares[u++];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 nc=p.createLogger({name:"intent-service"}),tg=t=>{ho(`/kos/intent/${t.type}`)?B(`/kos/intent/${t.type}`,t.options,{"kos.intent.type":t.type}):nc.info(`No subscribers for intent ${t.type}. Intent not sent.`)},sg=async t=>new Promise(e=>{const{type:s,options:r}=t;if(ho(`/kos/intent/${t.type}`)){const o=ut(),{unsubscribe:n}=$(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);B(`/kos/intent/${s}`,r,{"kos.intent.type":s,sync:o})}else nc.info(`No subscribers for intent ${t.type}. Intent not sent.`),e([null,{body:void 0,payload:void 0}])}),Me=p.createLogger({name:"app-startup-service"});async function ic(t,e={}){const{timeout:s=3e4,throwOnTimeout:r=!0,requirePostStarted:o=!1}=e;if(t.length===0)return Me.warn("No app IDs provided to waitForAppsToStart"),!0;Me.debug(`Waiting for apps to start: ${t.join(", ")}`);try{const n=t.map(c=>`/kos/app/started/${c}`),i=await po(n,{getCurrentState:async()=>{try{const{default:c}=await Promise.resolve().then(()=>np),[d,u]=await c.get("/api/kos/apps/started");return d?(Me.error("Error fetching started apps:",d),[]):u}catch(c){Me.error("Failed to fetch app startup status:",c)}return[]},shouldUseFetchedState:c=>t.every(d=>{const u=c.find(h=>h.appId===d);return!(!u||!u.started||o&&!u.postStarted)}),timeout:s}),a=t.filter(c=>{const d=i.find(u=>u.appId===c);return!!(!d||!d.started||o&&!d.postStarted)});if(a.length>0){const c=`Apps not started: ${a.join(", ")}`;if(Me.error(c),r)throw new Error(`App startup timeout: ${c}`);return!1}return Me.info(`All apps started successfully: ${t.join(", ")}`),!0}catch(n){const i=`Failed to wait for apps to start: ${t.join(", ")}`;if(Me.error(i,n),r)throw new Error(`${i} - ${n instanceof Error?n.message:String(n)}`);return!1}}async function rg(t,e={}){return ic([t],e)}async function og(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){Me.error("Failed to check app startup status:",r),t.forEach(o=>s[o]=!1)}return s}async function ng(){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 Me.error("Failed to fetch started apps:",t),[]}}const Gr=M.when,Do=M.computed,W=M.runInAction,H=M.autorun,ac=M.reaction,Co=M.observable,Po="Not Assigned",ig="kos.trouble.added",ag="kos.trouble.removed";var he=(t=>(t.TroubleRank="kos.trouble.rank.mapper",t.TroubleColor="kos.trouble.color.mapper",t.TroubleRole="kos.trouble.role.mapper",t))(he||{}),Bt=(t=>(t.TIME_CHANGE="/kos/internal/time/time",t.DAY_CHANGE="/kos/internal/time/day",t.TIMEZONE_CHANGE="/kos/internal/time/timezone",t))(Bt||{});const cc=p.createLogger({name:"config-bean-service",group:"Services"}),Ro=exports.BASE_URL,lc=t=>(t==null?void 0:t.decimals)!==void 0,{postModel:cg,getOne:lg}=ee.build({destinationAddress:"",basePath:`${Ro}/kos/config/`}),dc=async(t,e,s="/api/kos/config")=>(cc.debug(`sending modify request for ConfigBean: ${t}`),cg({model:e,urlOverride:`${Ro}${s}/${t}`})),uc=async(t,e="/api/kos/config")=>(cc.debug(`sending get request for ConfigBean: ${t}`),await lg({urlOverride:`${Ro}${e}/details/${t}/15`})),xo=t=>t.toLowerCase()==="true"||t.toLowerCase()==="false",dr=t=>{try{const e=Number(t);return!isNaN(e)}catch{return!1}};function hc(t=[]){return t.reverse().reduce((e,s)=>{const{overrides:r}=s;return r&&(e={...e,...r}),e},{})}function fc(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])?fc(t[r],o,s):s[o]=t[r]}return s}const gc=(t,e)=>{const s=t.details[0].bean||hc(t.details[0].scopes),r=fc(s);M.runInAction(()=>{const o={...r};e.props.setValues(o)})},pc=(t,e)=>{M.runInAction(()=>{t.changes.forEach(s=>{const r=s.attr;let o=s.currentValue,n=s.previousValue;typeof o=="string"&&xo(o)&&(o=o.toLowerCase()=="true",n=(n==null?void 0:n.toLowerCase())=="true"),typeof o=="string"&&dr(o)&&(o=Number(o),n=Number(n)),e.props[r]=o,e.prevProps[r]=n})})},mc=t=>Object.fromEntries(t.props.entries),dg=t=>e=>s=>t.build(e,s);var ug=Object.defineProperty,hg=Object.getOwnPropertyDescriptor,yc=(t,e,s,r)=>{for(var o=r>1?void 0:r?hg(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&&ug(e,s,o),o};function fg(t,e){for(const s of t)if(new RegExp(`^${s}$`).test(e))return s}const Ao="config-bean-model",ms=p.getLogger(Ao),gg=Be("path");let As=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=dc,getConfigBean:r=uc}=e;this._modifyConfigBean=s,this._getConfigBean=r,this.props=De(),this.prevProps=De()}get values(){return this.props.values}async ready(){ms.debug(`readying config bean ${this.path}`),ms.debug(`complete readying config bean ${this.path}`)}async load(){ms.debug(`loading config bean ${this.path}`);const t=await this._getConfigBean(this.path,this.serviceBasePath);if(t!=null&&t.data){const e=t.data;gc(e,this),ms.debug(this.values);const s=t==null?void 0:t.data.details[0].schema;W(()=>{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=fg(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=mc(this);await this._modifyConfigBean(this.path,t,this.serviceBasePath)}handleConfigBeanUpdated(t){pc(t,this)}};yc([k({topic:`/kos/config/${gg}`,websocket:!0})],As.prototype,"handleConfigBeanUpdated",1);As=yc([P(Ao)],As);const zt=new pe({class:As,type:Ao}),ur=({path:t,lazy:e,serviceBasePath:s})=>(r,o)=>{r[L]=r[L]||{},r[L][o]={modelType:zt.type,id:`${zt.type}-${t}`,options:{path:t,serviceBasePath:s},lifecycle:j.INIT,lazy:e}},{URL:bc}=se(),{getOne:pg,getAll:mg}=ee.build({basePath:`${bc}/api/kos/regions/info`}),wc=async()=>await pg({}),vc=async()=>await mg({urlOverride:`${bc}/api/kos/regions`}),yg=Object.freeze(Object.defineProperty({__proto__:null,getRegionInfo:wc,getRegions:vc},Symbol.toStringTag,{value:"Module"}));var oe=(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))(oe||{});const Mc={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 bg(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},{...Mc});return{...t,...r}}function wg(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]:{...Mc}}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}function vg(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 Mg=Object.defineProperty,Eg=Object.getOwnPropertyDescriptor,Lo=(t,e,s,r)=>{for(var o=r>1?void 0:r?Eg(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&&Mg(e,s,o),o};const Ss="region-info-model",wt=p.createLogger({name:"region-info-model"});let Gt=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[oe.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[oe.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[oe.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[oe.family]!==s[oe.family])throw new Error(`Cannot convert between units of different families: ${e[oe.family]} and ${s[oe.family]}`);const r=e[oe.offset],o=e[oe.scale],n=s[oe.scale],i=s[oe.offset],a=s[oe.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 d=this.measureMap[s.measure];if(!d)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);i=(a=d[s.system])==null?void 0:a.default,i||wt.info("Could not find default unit for measure",s.measure)}if(!n&&e.measure&&e.system){const d=this.measureMap[e.measure];if(!d)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);n=(c=d[e.system])==null?void 0:c.default,n||wt.info("Could not find default unit for measure",e.measure)}return!n||!i?(wt.warn("Could not find unit to convert to or from. Return value as is"),String(t)):this.convertByUnit(t,n,i)}async init(){wt.debug("initializing region info")}async load(){wt.debug("loading region info");const t=await vc();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 wc();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(bg,{}),this.measureMap=e.data.unitSystems.reduce(wg,{}),this.defaultMeasureMap=e.data.unitSystems.reduce(vg,{}),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))}};Lo([ur({path:"kos:service:region:settings"})],Gt.prototype,"regionSource",2);Lo([ur({path:"kos:service:region"})],Gt.prototype,"region",2);Gt=Lo([P(Ss)],Gt);const J={registration:{[Ss]:{class:Gt,singleton:!0}},type:Ss,factory:X.Singleton.create(Ss)},Ls=({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},ko=(t,e,s)=>{const{model:r}=me(J.type);if(!r)throw new Error("RegionInfo model not found");if(!xs(r))throw new Error("RegionInfo model not ready");const o={system:r.defaultUnitSystem},n=Ls({source:e}),i=Ls({source:s||o,defaultMeasure:r.getUnitMeasure(n.unit||"")});return r.convert(t,n,i)};function Nn(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 Tg=(t,e,s,r)=>{const o=ko(t,e,s),n=Ls({source:e}),{model:i}=me(J.type);if(!i)throw new Error("RegionInfo model not found");const a=i.getUnitMeasure(n.unit||""),c={system:i.defaultUnitSystem},d=Ls({source:s||c,defaultMeasure:i.getUnitMeasure(n.unit||"")}),u=i.getDefaultUnitForMeasure(a,d.system),h=i.getDefaultUnitDecimalPlaces(a,d.system),f={...r,minDecimals:(r==null?void 0:r.minDecimals)??h,maxDecimals:(r==null?void 0:r.maxDecimals)??h};return{value:o,unit:u||n.unit||"",display:Nn(o,u||n.unit||"",{...f,mode:"long"}),shortDisplay:Nn(o,u||n.unit||"",{...f,mode:"short"})}};function Un({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 jn({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 Ve=(t,e)=>s=>!t||!e?s:dr(s)?ko(Number(s),t,e):s,_g=(t,e,s,r)=>{if((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options))return[];if(t.options.type==="rangeCount")return Un(t.options).map(Ve(s,r));if(t.options.type==="rangeInterval")return jn(t.options).map(Ve(s,r));if(t.options.type==="list"){const{list:o}=t.options;return o.map(Ve(s,r))}else{if(t.options.type==="unitSystemRangeCount"&&e)return Un(t.options.unitSystems[e]).map(Ve(s,r));if(t.options.type==="unitSystemRangeInterval"&&e)return jn(t.options.unitSystems[e]).map(Ve(s,r));if(t.options.type==="unitSystemList"&&e){const{list:o}=t.options.unitSystems[e];return o.map(Ve(s,r))}}return[]},Ig=(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 Sg=Object.defineProperty,Og=Object.getOwnPropertyDescriptor,Fo=(t,e,s,r)=>{for(var o=r>1?void 0:r?Og(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&&Sg(e,s,o),o};function $g(t){return(t==null?void 0:t.type)==="enum"}function Dg(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 Cg(t,e){const s=new Date;s.setHours(0,0,0,0);const r=new Date(s.getTime()+t*1e3);return $e.format(r,e)}const Os="config-bean-prop-model",Ye=p.createLogger({name:"config-bean-prop-model"}),Pg=Be("path"),Rg=Be("serviceBasePath");let Vt=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 lc(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?Dg(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=$g(r)?r.values:_g(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 d=String(t);return d=c.formatToParts(Number(t))[0].value,Number(d)}}catch(c){Ye.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(){Ye.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 Cg(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){Ye.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 Ig(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,d=this.formatter||c;if(d){let u=typeof d=="function"?d(((n=t==null?void 0:t.to)==null?void 0:n.system)||e):d;s&&(u={unit:this.getDefaultUnit(t),...u},u.style==="unit"&&(u.maximumFractionDigits=u.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,{...u})}catch(h){Ye.error(`error creating formatter ${u}. Returning the raw value`,h)}}else Ye.debug(`no formatter found for config bean prop ${this.id}. Returning the raw value`)}return o}getConverter(){var r,o,n,i,a,c,d,u,h,f,m;const{unit:t,measure:e}=this.getConverterFromFormat(),s=t==="drt"?"second":t;if(this.converter){const w=(r=this.converter)==null?void 0:r.measure,v=(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,_=w||v||E||e,F=((d=(c=this.converter)==null?void 0:c.to)==null?void 0:d.unit)||this.regionInfo.getDefaultUnitForMeasure(_,((h=(u=this.converter)==null?void 0:u.to)==null?void 0:h.system)??this.regionInfo.defaultUnitSystem),te=((m=(f=this.converter)==null?void 0:f.to)==null?void 0:m.system)??this.regionInfo.getUnitSystem(F),R=this.schemaFormat==="drt"?"second":this.schemaFormat||s;return{...this.converter,from:{unit:R,...this.converter.from},to:{...this.converter.to,unit:F,system:te},measure:_}}if(s&&e){const w=this.regionInfo.getDefaultUnitForMeasure(e,this.regionInfo.defaultUnitSystem),v=this.regionInfo.getUnitSystem(s),E=this.regionInfo.getUnitSystem(w);return{measure:e,to:{unit:v===E?s:w}}}}async updateProperty(t){Ye.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)}};Fo([ht({modelType:J.type})],Vt.prototype,"regionInfo",2);Fo([ur({path:Pg,serviceBasePath:Rg})],Vt.prototype,"bean",2);Vt=Fo([P(Os)],Vt);const Ke={registration:{[Os]:{class:Vt,singleton:!1}},type:Os,factory:X.Factory.create(Os)};function xg(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})),(d,u)=>{d[L]=d[L]||{},d[L][u]={modelType:Ke.type,id:`${e}-${s}`,options:{path:e,attribute:s,serviceBasePath:a,converter:c,formatter:o,optionsExpander:i},lifecycle:j.INIT,lazy:n}}}class Ag{constructor(e,s){l(this,"futures");l(this,"defaultContext");l(this,"context");l(this,"disposers",new Map);l(this,"container");this.futures=Co.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=H(()=>{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 hr{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=H(()=>{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 p.error(e),e}}}const Ec="future-model",pt=ft(Ec),fr=p.createLogger({name:"future-service",group:"Services"}),{isMock:Lg,URL:ns}=se();var Ce=(t=>(t.Success="SUCCESS",t.Fail="FAIL",t.Aborted="ABORT",t.Canceled="CANCEL",t))(Ce||{});const{getAll:kg,modifyModel:Fg,addModel:Ng,deleteModel:Ug,postModel:jg}=ee.build({destinationAddress:"",basePath:`${ns}/api/future`,mock:Lg}),Bg=async()=>await kg({}),Tc=async(t,e="/api/kos/future")=>(fr.info(`sending delete request for Future: ${t}`),await Ug({id:t,urlOverride:`${ns}${e}/${t}`})),_c=async(t,e="/api/kos/future")=>(fr.info("sending add request for Future"),await Ng({model:t,urlOverride:`${ns}${e}`})),Kg=async(t,e,s="/api/kos/future")=>(fr.info(`sending modify request for Future: ${t}`),Fg({model:e,id:t,urlOverride:`${ns}${s}/${t}`})),Ic=async(t,e="/api/kos/future")=>(fr.info(`sending cancel request for Future: ${t}`),jg({urlOverride:`${ns}${e}/${t}/cancel`,ordered:!0,model:{}})),No=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}),Uo=(t,e)=>{p.debug(`future dto ${t.id} end state ${t.endState}`),p.debug(`future model ${e.id} end state ${e.endState}`),e.endState?p.debug(`future model ${e.id} is already complete`):(p.debug(`updating future model ${e.id}`),M.runInAction(()=>{const s=No(t);W(()=>{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]})})}))},Sc=t=>e=>s=>t.build(String(e),s),jo=t=>e=>ec(No,Sc(t)(e.tracker||e.id))(e);var Hg=Object.defineProperty,zg=Object.getOwnPropertyDescriptor,Oc=(t,e,s,r)=>{for(var o=r>1?void 0:r?zg(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&&Hg(e,s,o),o};const Rr=p.getLogger(pt.type);let ks=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=Ic,Gr(()=>this.status===Ce.Success||this.status===Ce.Fail,()=>{Rr.info(`Future ${this.id} has completed with status ${this.status}`),Ue(this)})}async load(){Rr.debug(`loading Future ${this.id}`)}unload(){Rr.info(`unloading Future ${this.id}`)}async cancelFuture(){const t=this.namespace==="studio"?"/api/future":`/api/${this.namespace}/future`;await Gr(()=>this.futureId!==Po),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[d,u]of Object.entries(e))if(Math.abs(t)>=u){s=d,r=Math.round(t/u);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}`),Uo(t,this)}};Oc([k({topic:`kos.future/${Ds}`})],ks.prototype,"handleFutureUpdated",1);ks=Oc([P(pt.type)],ks);const $c=ks,Dc=Io();var Gg=Object.defineProperty,Vg=Object.getOwnPropertyDescriptor,Cc=(t,e,s,r)=>{for(var o=r>1?void 0:r?Vg(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&&Gg(e,s,o),o};const Pc="browser-router-model",Yg="kos.http.request",qg="kos.http.response";let Fs=class{constructor(t,e,s){l(this,"_id");l(this,"logger");l(this,"router");this._id=t,this.logger=s.logger,this.router=new oc}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 d={send:u=>{this.logger.debug(`sending response to ${r}`),this.logger.debug(u),La({msg:u,options:{responseId:i,destinationAddress:s,type:qg,sourceAddress:r,status:c}})},status:function(u){return c=u,this}};if(a.path==="/openapi.json"){d.send(this.router.generateOpenApiSpec());return}await this.router.handle(a,d)}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}`)}};Cc([k({topic:Yg})],Fs.prototype,"handleRequest",1);Fs=Cc([P(Pc)],Fs);const Bo=new be({class:Fs,type:Pc}),Rc="future-container-model",Pe=ft(Rc),xc=t=>jo(pt)(t),Wg=t=>{const e=xc(t);return Pe.build(Pe.type,{}).addFutureModel(e),e},Qg=t=>Pe.build(Pe.type,{}).getFuture(String(t)),je={buildFutureModel:xc,initiateFuture:Wg,getFuture:Qg};var Zg=Object.defineProperty,Jg=Object.getOwnPropertyDescriptor,Ko=(t,e,s,r)=>{for(var o=r>1?void 0:r?Jg(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&&Zg(e,s,o),o};const ys=p.getLogger(Pe.type);let Yt=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=Tc,addFuture:o=_c}=e;this.logger=s.logger,this._deleteFuture=r,this._addFuture=o,this.id=t,this._futures=new we,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){ys.error("error deleting a Future"),ys.error(e)}}async createFuture(t){try{const e=await this._addFuture(t),s=e==null?void 0:e.data;if(s){const r=jo(pt)(s);return this.addFutureModel(r),r}}catch(e){throw ys.error("error creating a Future"),ys.error(e),e}}handleFutureUpdated(t,e){const s=je.buildFutureModel(t);this.addFutureModel(s);const r=`kos.future/${t.tracker||t.id}`;this.logger.debug(`publishing future update to ${r}`),B(r,e.body,e.headers)}};Ko([ge],Yt.prototype,"_futures",2);Ko([k({topic:"kos.future"})],Yt.prototype,"handleFutureUpdated",1);Yt=Ko([P(Pe.type)],Yt);const Ac=Yt,{URL:is}=se(),{getOne:Xg,postModel:ep,deleteModel:Lc}=ee.build({basePath:`${is}/api/keyVal`}),Vr=p.createLogger({name:"key-value-service",group:"Services"}),kc=async(t,e)=>{await Lc({urlOverride:`${is}/api/keyVal/${t}/${e}`,id:e})},Fc=async(t,e,s)=>{const r=await ep({urlOverride:`${is}/api/keyVal/${t}/${e}`,model:s.toString()});if((r==null?void 0:r.status)!==200)throw Vr.error("Failed to update studio-state data",r),new Error(`Failed to update studio-state data for namespace ${t}`);return r.data},Nc=async(t="studio")=>{Vr.debug("sending GET for studio-state");const e=await Xg({urlOverride:`${is}/api/keyVal/${t}`});if((e==null?void 0:e.status)!==200)throw Vr.error("Failed to retrieve studio-state data",e),new Error(`Failed to retrieve studio-state data for namespace ${t}`);return e.data},tp=async t=>{await Lc({urlOverride:`${is}/api/keyVal/${t}}`,id:""})},sp=Object.freeze(Object.defineProperty({__proto__:null,deleteKeyValue:kc,deleteKeyValueNamespace:tp,getKeyValue:Nc,updateKeyValue:Fc},Symbol.toStringTag,{value:"Module"}));var rp=Object.defineProperty,op=Object.getOwnPropertyDescriptor,Ho=(t,e,s,r)=>{for(var o=r>1?void 0:r?op(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&&rp(e,s,o),o};const Uc="key-value-model";let qt=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=De(),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 Fc(this.namespace,t,e),this.data[t]=e):(await kc(this.namespace,t),this.data[t]=void 0)}async load(){this.logger.debug(`loading studio-state ${this.id}`);const t=await Nc(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)}};Ho([k({topic:"/keyVal/set"})],qt.prototype,"handleStateUpdate",1);Ho([k({topic:"/keyVal/remove"})],qt.prototype,"handleStateDelete",1);qt=Ho([P(Uc)],qt);const zo=new pe({class:qt,type:Uc}),Se=Io(),np=Object.freeze(Object.defineProperty({__proto__:null,default:Se},Symbol.toStringTag,{value:"Module"})),ip=p.createLogger({name:"kos-log-manager-service",group:"Services"}),ap="/api/kos/logs/overrides",jc=async()=>(ip.debug("sending GET for kos-log-manager"),await Se.get(ap)),cp=Object.freeze(Object.defineProperty({__proto__:null,getLogOverrides:jc},Symbol.toStringTag,{value:"Module"}));var lp=Object.defineProperty,dp=Object.getOwnPropertyDescriptor,gr=(t,e,s,r)=>{for(var o=r>1?void 0:r?dp(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&&lp(e,s,o),o};const Bc="kos-log-manager-model",up="/kos/logs/override/add/*",hp="/kos/logs/override/remove/*",fp=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 st=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_overrides");this.id=t,this.logger=s.logger,this._overrides=new $o}updateModel(t){}resolveLoggers(){const t=p.getLoggers(),s=Object.entries(t).map(([r,o])=>({name:r,level:fp(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=p.getLoggers()[r.name];if(!o){this.logger.debug(`Logger ${r.name} not found`);return}o.setLevel(t.level)});const s=p.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=p.getLoggers()[r.name];o||this.logger.debug(`Logger ${r.name} not found`),o==null||o.resetLevel()});const s=p.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 jc();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)})}};gr([oa("/api/kos/ui/loggers")],st.prototype,"getAllLoggers",1);gr([k({topic:up,websocket:!0,wildcardName:"nodeType"})],st.prototype,"handleOverrideAdded",1);gr([k({topic:hp,websocket:!0,wildcardName:"nodeType"})],st.prototype,"handleOverrideRemoved",1);st=gr([P(Bc)],st);const Kc=new be({class:st,type:Bc}),{URL:as}=se(),{postModel:Go,getOne:gp}=ee.build({basePath:`${as}/api/kos-time`});p.createLogger({name:"kos-time-service",group:"Services"});const Hc=async t=>{const e=await Go({model:t,urlOverride:`${as}/api/kos/time/time`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},zc=async t=>{const e=await Go({model:t,urlOverride:`${as}/api/kos/time/date`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},Gc=async t=>{const e=await Go({model:{},urlOverride:`${as}/api/kos/time/timezone?tz=${t}`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set timezone");return e.data},Vc=async()=>{const t=await gp({urlOverride:`${as}/api/kos/time/timezone`});if((t==null?void 0:t.status)!==200)throw Error("Failed to set timezone");return t.data.timeZone},pp=Object.freeze(Object.defineProperty({__proto__:null,getTimezone:Vc,setDate:zc,setTime:Hc,setTimezone:Gc},Symbol.toStringTag,{value:"Module"}));var mp=Object.defineProperty,yp=Object.getOwnPropertyDescriptor,pr=(t,e,s,r)=>{for(var o=r>1?void 0:r?yp(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&&mp(e,s,o),o};const Tt="kos-time-model",bp="/kos/time/time",wp="/kos/time/day",vp="/kos/time/timezone";let rt=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 Hc(t)}async updateSystemDate(t){await zc(t)}async updateSystemTimezone(t){await Gc(t)}handleTimeChange(){B(Bt.TIME_CHANGE,{})}handleDayChange(){B(Bt.DAY_CHANGE,{})}async handleTimeZoneChange(){await this.retrieveTimezone(),B(Bt.TIMEZONE_CHANGE,{})}async init(){this.logger.debug(`initializing kos-time ${this.id}`)}async retrieveTimezone(){const t=await Vc();this.setTimezone(t)}setTimezone(t){this.timezone=t}async load(){this.logger.debug(`loading kos-time ${this.id}`),this.retrieveTimezone()}};pr([k({topic:bp,websocket:!0})],rt.prototype,"handleTimeChange",1);pr([k({topic:wp,websocket:!0})],rt.prototype,"handleDayChange",1);pr([k({topic:vp,websocket:!0})],rt.prototype,"handleTimeZoneChange",1);rt=pr([P(Tt)],rt);const Ns={registration:{[Tt]:{class:rt,singleton:!0}},type:Tt,predicate:de(Tt),factory:X.Singleton.create(Tt)};var Mp=Object.defineProperty,Ep=Object.getOwnPropertyDescriptor,Yc=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ep(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&&Mp(e,s,o),o};const qc="log-block-container-model";let Us=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new we({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}`)}};Yc([ge],Us.prototype,"_models",2);Us=Yc([P(qc)],Us);const Tp=p.createLogger({name:"log-stream-container-service",group:"Services"}),Wc=()=>{var r;const t=le(),s=(t==null?void 0:t.connId)||((r=window==null?void 0:window.kosBridge)==null?void 0:r.call(window,"connId"));return p.error(`getKosConnectionId: ${s}`),s},mt=Wc(),_p="/api/kos/logs/node/{nodeId}/streams",Qc=async()=>(Tp.debug("sending GET for log-stream-container"),await Se.get(_p,{path:{nodeId:"primary"}},{destinationAddress:mt})),Zc=async(t,e="primary")=>{await Se.post("/api/kos/logs/node/{nodeId}/{stream}/subscribe",{path:{nodeId:e,stream:t}},void 0,{destinationAddress:mt})},Jc=async t=>{await Se.post("/api/kos/logs/node/{nodeId}/{stream}/unsubscribe",{path:{nodeId:"primary",stream:t}},void 0,{destinationAddress:mt})},Ip=async()=>{await Se.post("/api/kos/logs/overrides",{},{level:"WARN",name:"com.example",nodeType:"java",type:"package"},{destinationAddress:mt})},Xc=async t=>await Se.get("/api/kos/logs/node/{nodeId}/{stream}/blocks",{path:{nodeId:"primary",stream:t}},{destinationAddress:mt}),el=async(t,e)=>await Se.get("/api/kos/logs/node/{nodeId}/{stream}/blocks/{blockId}",{path:{nodeId:"primary",stream:t,blockId:e}},{destinationAddress:mt}),Sp=Object.freeze(Object.defineProperty({__proto__:null,createOverride:Ip,getKosConnectionId:Wc,getLogStreamBlock:el,getLogStreamBlocks:Xc,getLogStreams:Qc,subscribeToLogStream:Zc,unsubscribeFromLogStream:Jc},Symbol.toStringTag,{value:"Module"}));var Op=Object.defineProperty,$p=Object.getOwnPropertyDescriptor,Dp=(t,e,s,r)=>{for(var o=r>1?void 0:r?$p(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&&Op(e,s,o),o};const tl="log-block-model";let Yr=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 el(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}`)}};Yr=Dp([P(tl)],Yr);const Wt=new pe({class:Yr,type:tl}),mr=new pe({class:Us,type:qc});mr.addRelatedModel(Wt);var Cp=Object.defineProperty,Pp=Object.getOwnPropertyDescriptor,sl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Pp(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&&Cp(e,s,o),o};const rl="log-stream-model";let js=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=mr.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=Wt.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=Wt.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 Zc(this.name)}async unsubscribe(){await Jc(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 Xc(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=ac(()=>{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()}}};sl([ge],js.prototype,"_blocks",2);js=sl([P(rl)],js);const Kt=new pe({class:js,type:rl});var Rp=Object.defineProperty,xp=Object.getOwnPropertyDescriptor,He=(t,e,s,r)=>{for(var o=r>1?void 0:r?xp(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&&Rp(e,s,o),o};const ol="log-stream-container-model",Ap="/kos/logs/subscription/addBlock/*",Lp="/kos/logs/subscription/updateBlock/*",kp="/kos/logs/subscription/removeBlock/*",Fp="/kos/logs/subscription/lines/*",nl="/kos/logs/streams/add/*";let Te=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 we({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: ${nl}`);const e=t.stream,s=Kt.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=Kt.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 Qc();if(t){this.logger.error(`Error loading log-streams: ${t}`);return}e&&e.forEach(s=>{const r=Kt.instance(s).options({name:s,nodeId:"primary"}).build();this.addModel(r)})}};He([ge],Te.prototype,"_models",2);He([k({topic:[nl],websocket:!0})],Te.prototype,"handleStreamAdded",1);He([k({topic:[Ap],websocket:!0})],Te.prototype,"handleAddBlock",1);He([k({topic:[kp],websocket:!0})],Te.prototype,"handleRemoveBlock",1);He([k({topic:[Lp],websocket:!0})],Te.prototype,"handleUpdateBlock",1);He([k({topic:[Fp],websocket:!0})],Te.prototype,"handleLogLine",1);Te=He([P(ol)],Te);const cs=new be({class:Te,type:ol});cs.addRelatedModel(Kt);cs.addRelatedModel(mr);cs.addRelatedModel(Wt);const Np=t=>t.rank!==void 0,Up=t=>t.visibleRole!==void 0,jp=t=>t.color!==void 0,Bp=t=>{const e=t.info;return Np(e)?e.rank:0},Kp=t=>{const e=t.info;return jp(e)?e.color:"orange"},Hp=t=>{const e=t.info;return Up(e)?e.visibleRole:"TECHNICIAN"},{URL:Vo}=se(),{getAll:zp,postModel:il}=ee.build({basePath:`${Vo}/api/kos/troubles`}),al=async()=>await zp({}),cl=async(t,e)=>{try{const s=await il({model:{},urlOverride:`${Vo}/api/kos/troubles/resolve/${t}`,tracker:e});return s!=null&&s.data&&je.initiateFuture(s.data),s.data}catch{const r={id:e||"",endState:Ce.Fail,tracker:e,reason:"Failed to resolve trouble"};return je.initiateFuture(r),r}},Gp=async(t,e)=>{try{const s=await il({model:t,urlOverride:`${Vo}/api/kos/troubles/resolve/`,tracker:e});return s!=null&&s.data&&je.initiateFuture(s.data),s.data}catch{const r={id:e||"",endState:Ce.Fail,tracker:e,reason:"Failed to resolve troubles"};return je.initiateFuture(r),r}},Vp=Object.freeze(Object.defineProperty({__proto__:null,bulkResolveTroubles:Gp,getTroubles:al,resolveTrouble:cl},Symbol.toStringTag,{value:"Module"})),Bs="troubleDataMapper",bs=new Map;rs(Bs,{register:(t,e)=>{var s;bs.has(t)||bs.set(t,[]),(s=bs.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=bs.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}:p.info(`Trouble mapper ${t} failed: ${a.reason}`),i),{...e.data})}});const ls="troubleMapper",ws=new Map;rs(ls,{register:(t,e)=>{var s;ws.has(t)||ws.set(t,[]),(s=ws.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=ws.get(t);if(!s)return[];const r=s.map(i=>i(e)),n=(await Promise.allSettled(r)).map(i=>i.status==="fulfilled"?i.value:(p.info(`Trouble mapper ${t} failed: ${i.reason}`),[])).flat();return Array.from(new Set(n))}});O[ls].register("nozzle",async t=>[t.data.nozzlePath]);O[ls].register("path",async t=>[t.data.path]);const Yp=async t=>{const e=new Set,s=t.ifaces,r=s==null?void 0:s.map(n=>O[ls].execute(n,t));return(await Promise.allSettled(r)).forEach(n=>{n.status==="fulfilled"&&n.value.forEach(i=>e.add(i))}),Array.from(e)},ll=async t=>{const e=t.ifaces,s=e==null?void 0:e.map(i=>O[Bs].execute(i,t)),r=O[Bs].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 qp{constructor(){l(this,"type","ResolvableTrouble");l(this,"title","Resolvable Trouble");l(this,"subtitle","Trouble")}}class Wp{constructor(){l(this,"type","BlockPumpTrouble");l(this,"title","Block Pump Trouble");l(this,"subtitle","Trouble")}}class qe{static getHandler(e){switch(e){case"ResolvableTrouble":return new qp;case"BlockPumpTrouble":return new Wp;default:return}}}var Qp=Object.defineProperty,Zp=Object.getOwnPropertyDescriptor,dl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Zp(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&&Qp(e,s,o),o};const _t="trouble-model";function vs(t){return typeof t.shouldDefer=="boolean"}let Ks=class{constructor(t,{resolvable:e,tags:s,info:r,id:o,clientData:n,rank:i,ifaces:a,type:c,group:d,createTime:u,role:h,color:f,...m},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,"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=d,this.createTime=u,this.clientData=n,this.data={},Object.assign(this.data,m),this.futureHandler=new hr(this)}getTitleWithContext(t){var s,r;const e=t?(r=(s=qe.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:qe.getHandler(this.type);return(e==null?void 0:e.title)||"Trouble"}getSubtitleWithContext(t){var s,r;const e=t?(r=(s=qe.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:qe.getHandler(this.type);return(e==null?void 0:e.subtitle)||"Trouble"}get rawId(){return this._troubleId}get title(){var t;return((t=qe.getHandler(this.type))==null?void 0:t.title)||"Trouble"}get subtitle(){var t;return((t=qe.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 ll(this)}get deferredCompanion(){const t=Hr(this.id,e=>vs(e));if(t&&vs(t.modelData))return t.modelData}get deferred(){return this.deferredCompanion?this.deferredCompanion.deferred:!1}get shouldDefer(){const t=Hr(this.id,e=>vs(e));return t&&vs(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 cl(this._troubleId,t)}};dl([dn()],Ks.prototype,"resolve",1);Ks=dl([P(_t)],Ks);const Qt={registration:{[_t]:{class:Ks,singleton:!1}},type:_t,predicate:de(_t),factory:X.Factory.create(_t)};var Jp=Object.defineProperty,Xp=Object.getOwnPropertyDescriptor,yr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Xp(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&&Jp(e,s,o),o};const Bn=p.createLogger({name:"trouble-container-model"});function Kn(t){return O.propertyMapper.hasMapper(he.TroubleRank)?O.propertyMapper.executeMapper(he.TroubleRank,t):Bp(t)}function Hn(t){return(O.propertyMapper.hasMapper(he.TroubleColor)?O.propertyMapper.executeMapper(he.TroubleColor,t):Kp(t)).toLowerCase()}function zn(t){return(O.propertyMapper.hasMapper(he.TroubleRole)?O.propertyMapper.executeMapper(he.TroubleRole,t):Hp(t)).toLowerCase()}const em="trouble-container-model";class ae{}l(ae,"INDEX_TROUBLES_BY_IFACE","byIface"),l(ae,"INDEX_TROUBLES_BY_TYPE","byType"),l(ae,"INDEX_TROUBLES_BY_GROUP","byGroup"),l(ae,"INDEX_TROUBLES_BY_DEFERRED","byDeferred"),l(ae,"SORT_KEY_RANK","rank"),l(ae,"TROUBLES_DEFERRED","true");let ot=class{constructor(t){l(this,"id");l(this,"troubles");this.id=t,this.troubles=new we({indexMap:{[ae.INDEX_TROUBLES_BY_IFACE]:Yp,[ae.INDEX_TROUBLES_BY_TYPE]:"type",[ae.INDEX_TROUBLES_BY_GROUP]:"group",[ae.INDEX_TROUBLES_BY_DEFERRED]:"deferred"},sortKey:ae.SORT_KEY_RANK,parentId:t})}async load(){Bn.debug("loading trouble container");const t=await al();try{t==null||t.data.forEach(e=>{const s={...e,rank:Kn(e),color:Hn(e),role:zn(e),id:String(e.id)},r=Qt.factory(`trouble-${e.id}`)(s);this.troubles.addModel(r)})}catch(e){throw Bn.error(e),e}}handleTroubleRemoved(t){const e=`trouble-${t}`,s=this.troubles.getModel(e);this.troubles.removeModel(e),s&&Ue(s)}handleTroubleAdded(t){const e={...t,rank:Kn(t),color:Hn(t),role:zn(t),id:String(t.id)};if(e.role==="NONE")return;const s=Qt.factory(`trouble-${t.id}`)(e);this.troubles.addModel(s)}};yr([ge],ot.prototype,"troubles",2);yr([k({topic:"/kos/trouble/remove",websocket:!0,lifecycle:j.INIT})],ot.prototype,"handleTroubleRemoved",1);yr([k({topic:"/kos/trouble/add",websocket:!0})],ot.prototype,"handleTroubleAdded",1);ot=yr([P(em)],ot);const Ms="trouble-container-model",nt={registration:{[Ms]:{class:ot,singleton:!0}},type:Ms,predicate:de(Ms),factory:X.Singleton.create(Ms)},{URL:ul}=se(),{getAll:tm}=ee.build({basePath:`${ul}/api/kos/ota`}),Gn=p.createLogger({name:"ota-service",group:"Services"}),sm=async()=>{Gn.debug("sending GET request to /api/kos/ota/artifacts");const t=await tm({urlOverride:`${ul}/api/kos/ota/artifacts`});return Gn.debug("getArtifacts - response:",t),t==null?void 0:t.data};var rm=Object.defineProperty,om=Object.getOwnPropertyDescriptor,br=(t,e,s,r)=>{for(var o=r>1?void 0:r?om(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&&rm(e,s,o),o};const hl="ota-model",nm=t=>{let e=null;for(const s in t){const r=t[s],o=r.lastUpdateTime;(!e||e.lastUpdateTime<o)&&(e=r)}return e},xr=t=>{const e=t.artifactInfo,s=nm(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 it=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"data",new $o);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 sm();t&&t.forEach(e=>{const s=xr(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=xr(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=xr(e);s&&this.data.updateModel(s)})}catch(e){this.logger.error(`handleChangedArtifacts ${this.id} - error:`,e)}}};br([ht({modelType:nt.type})],it.prototype,"troubleContainer",2);br([k({topic:"/kos/ota/artifacts/all",websocket:!0})],it.prototype,"handleAllArtifacts",1);br([k({topic:"/kos/ota/artifacts/changed",websocket:!0})],it.prototype,"handleChangedArtifacts",1);it=br([P(hl)],it);const Hs=new be({class:it,type:hl});function im(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 Ar=p.createLogger({name:"software-info-service",group:"Services"}),Yo=async t=>{Ar.debug("sending GET for software-info");const[e,s]=await Dc.get("/api/kos/manifest/info",void 0,{signal:t});if(!s)throw t!=null&&t.aborted?(Ar.debug("Request was aborted"),new ce("Request was aborted")):(Ar.error("Failed to fetch software-info",e),new ce("Failed to fetch software-info"));return s},am=im(Yo),cm=Object.freeze(Object.defineProperty({__proto__:null,getSoftwareInfos:Yo,getSoftwareInfosWithCancel:am},Symbol.toStringTag,{value:"Module"}));var lm=Object.defineProperty,dm=Object.getOwnPropertyDescriptor,um=(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&&lm(e,s,o),o};const It="software-info-model";let qr=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 Yo(),e=(t==null?void 0:t.nodes)||{};W(()=>{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 ce&&this.logger.error("Failed to fetch software-info",t)}}};qr=um([P(It)],qr);const zs={registration:{[It]:{class:qr,singleton:!1}},type:It,predicate:de(It),factory:X.Factory.create(It)},{URL:fl}=se(),{getOne:hm}=ee.build({basePath:`${fl}/api/kos/state`}),fm=p.createLogger({name:"state-bean-service",group:"Services"}),gl=async({path:t})=>(fm.debug("sending GET for state-bean"),await hm({urlOverride:`${fl}/api/kos/state/${t}`})),gm=Object.freeze(Object.defineProperty({__proto__:null,getStateBeanData:gl},Symbol.toStringTag,{value:"Module"}));var pm=Object.defineProperty,mm=Object.getOwnPropertyDescriptor,pl=(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&&pm(e,s,o),o};const St="state-bean-model",ym=Be("path");let Gs=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=Co.map(new Map),jr(e,this)}updateModel(t){jr(t,this)}handleConfigBeanUpdated(t){Object.entries(t).forEach(([e,s])=>{let r=s;typeof r=="string"&&xo(r)&&(r=r.toLowerCase()=="true"),typeof r=="string"&&dr(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 gl({path:this.path});t!=null&&t.data&&this.updateProps(t.data)}};pl([k({topic:`/kos/state/${ym}`,websocket:!0})],Gs.prototype,"handleConfigBeanUpdated",1);Gs=pl([P(St)],Gs);const Zt={registration:{[St]:{class:Gs,singleton:!1}},type:St,predicate:de(St),factory:X.Factory.create(St)};var bm=Object.defineProperty,wm=Object.getOwnPropertyDescriptor,ml=(t,e,s,r)=>{for(var o=r>1?void 0:r?wm(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&&bm(e,s,o),o};const Ot="state-prop-model",Vn=Be("path");let Vs=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())??""}};ml([ht({modelType:Zt.type,id:`state-bean-${Vn}`,options:{path:Vn}})],Vs.prototype,"stateBean",2);Vs=ml([P(Ot)],Vs);const qo={registration:{[Ot]:{class:Vs,singleton:!1}},type:Ot,predicate:de(Ot),factory:X.Factory.create(Ot)},{URL:vm}=se(),{getAll:Mm}=ee.build({basePath:`${vm}/api/state-prop`}),Em=p.createLogger({name:"state-prop-service",group:"Services"}),Tm=async()=>(Em.debug("sending GET for state-prop"),await Mm({})),_m=Object.freeze(Object.defineProperty({__proto__:null,getStateProps:Tm},Symbol.toStringTag,{value:"Module"})),{URL:Wo}=se(),{getOne:yl}=ee.build({basePath:`${Wo}/api/translation`}),Ht=p.createLogger({name:"translation-service",group:"Services"}),Im=()=>{const t=window.location.origin,e=le();return(e==null?void 0:e.host)||t},bl=async(t,e)=>{Ht.debug("sending GET for translation");const s=e??Im();try{const r=await fetch(`${s}${t}`);return r.status!==200?(Ht.warn(`Failed to fetch translations at ${t}: ${r.status}`),{}):await r.json()}catch(r){throw Ht.error("Error fetching translations",r),r}},Sm=async()=>{Ht.debug("getting localization descriptor");const t=await yl({urlOverride:`${Wo}/api/system/kos/localization`});if((t==null?void 0:t.status)!==200)throw new Error(`Failed to get tool localization descriptor ${t==null?void 0:t.status}`);return t.data},wl=t=>async()=>{Ht.debug("getting kos localization descriptor");const e=await yl({urlOverride:`${Wo}/api/kos/localization/contexts`});if((e==null?void 0:e.status)!==200)throw new Error(`Failed to get tool localization descriptor ${e==null?void 0:e.status}`);return e.data[t]},vl="langResolver";var Om=Object.defineProperty,$m=Object.getOwnPropertyDescriptor,Dm=(t,e,s,r)=>{for(var o=r>1?void 0:r?$m(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&&Om(e,s,o),o};const $t="translation-model";function Cm(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 Ml(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=Ml(t[r],o);return{...s,...n}}else return{...s,[o]:t[r]}},{})}function El(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]=El(t[r],e[r]):s[r]=e[r]);return s}const Wr=(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)?Wr(r,e):r},Es=(t,e,s)=>{const r=/{{(.*?)}}/g,n=Wr(t,e).replace(r,(a,c)=>Object.prototype.hasOwnProperty.call(s||{},c.trim())?s==null?void 0:s[c.trim()]:a);return Wr(n,e)},Yn=(t,e)=>{if(e.includes(":")){const[s,r]=e.split(":");return{namespace:s,key:r}}else return{namespace:t,key:e}};let Qr=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(vl),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=K.getContext(this.id);return this.bundleResolver(this.namespace,r,o)}try{const o=this.resolver(this.namespace,r);return bl(o,this.rootUrl)}catch{return Promise.resolve({})}}),s=await Promise.allSettled(e);W(()=>{const r=s.reduce((o,n,i)=>(n.status==="fulfilled"?(this.logger.debug(`resolved ${t[i]}`,n.value),n.value&&(o=El(o,n.value))):this.logger.error(`failed to load translation ${this.id} for ${t[i]}`),o),{});this.data=Ml(r)})}async init(){this.logger.debug(`initializing translation ${this.id}`)}exists(t){const{namespace:e,key:s}=Yn(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}=Cm(e),{namespace:n,key:i}=Yn(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(d=>Es(d,this.data,o)):Es(this.data[a],this.data,o)}if(this.data[i]){const c=this.data[a];return Array.isArray(c)?c.map(d=>Es(d,this.data,o)):Es(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()})}};Qr=Dm([cr(),P($t)],Qr);const Ys={registration:{[$t]:{class:Qr,singleton:!1}},type:$t,predicate:de($t),factory:X.Factory.create($t)};var Pm=Object.defineProperty,Rm=Object.getOwnPropertyDescriptor,Tl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Rm(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};const Dt="translation-container-model",xm=(t,e="/")=>t.join(e).replace(new RegExp(e+"{1,}","g"),e);function Am(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 xm([r,o])}let qs=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||Am.bind(this),s.kosContext.set(vl,this.resolver),this.logger=s.logger,this._models=new we({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(){this._models.clear(),await Ba(this);for(const t of this.namespaces){const e=this.resolveNamespace(t);await ne(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=Ys.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)||W(()=>{this.namespaces.push(t)}),n}else{this.logger.warn(`namespace ${t} not found in descriptor`);const r=Ys.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}`)}};Tl([ge],qs.prototype,"_models",2);qs=Tl([P(Dt)],qs);const _e={registration:{[Dt]:{class:qs,singleton:!0}},type:Dt,predicate:de(Dt),factory:X.Singleton.create(Dt)},Lm={set(t,e){const s=K.getContext(_e.type);s&&s.set(t,e)},get(t){const e=K.getContext(_e.type);return e==null?void 0:e.get(t)}},_l={async init(t){const e=_e.factory(t);return await ne(e),{translations:e}}};function km(t){return t.troubles!==void 0&&t.troubles instanceof Array&&t.troublesByType!==void 0&&typeof t.troublesByType=="object"}const Fm=(t,e)=>{const s=e.type;return t[s]||(t[s]=[]),t[s].push(e),t},Il="kos-ws-event",Qo=ft(Il);var Nm=Object.defineProperty,Um=Object.getOwnPropertyDescriptor,Zo=(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 jm=({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){p.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 d=this._topicMap.get(i)||0;a=`${a}-${d+1}`,this._topicMap.set(i,d+1)}const c={msgId:a,content:r,headers:o,timestamp:Date.now(),raw:jm({headers:o,body:r}),direction:s?"send":"receive",mocked:!!o.mocked};this.events.set(a,c),p.debug(`logged ${this.events.size} events`)}}};Zo([k({topic:[ss.SEND]})],exports.WsEventModel.prototype,"handleSendEvent",1);Zo([k({topic:[ss.RECEIVED]})],exports.WsEventModel.prototype,"handleReceiveEvent",1);exports.WsEventModel=Zo([P(Qo.type)],exports.WsEventModel);const qn=le(),Bm=qn.debug==="true"||qn.debug===!0,Km="/api/system/canvas",Sl=async(t,e)=>{const s=e||Km,r=`${exports.BASE_URL}${s}`;await exports.kosFetch(r,{method:"POST",headers:{hide:Bm?"false":"true"},body:t})},Hm=Object.freeze(Object.defineProperty({__proto__:null,sendCanvasData:Sl},Symbol.toStringTag,{value:"Module"})),zm=(t,e,s)=>t>>5<<5|e>>5<<2|s>>6;function Wn(t,e,s){if(e==="base64"){const r=s?t.filter((o,n)=>n%4!==3):Array.from(t);return btoa(String.fromCharCode(...r))}else{const r=[];for(let o=0;o<t.length;o+=4)r.push(zm(t[o],t[o+1],t[o+2]));return String.fromCharCode(...r)}}var Gm=Object.defineProperty,Vm=Object.getOwnPropertyDescriptor,Ol=(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&&Gm(e,s,o),o};const $l="canvas-renderer-model";function Lr(t){return typeof t.onDone=="function"}let Ws=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){Sl(t,e)}checkStreaming(){if(this.isOneShotDone()||!this.isStreaming){requestAnimationFrame(()=>{const t=this.isOneShotDone();this.stopStreaming(!t)});return}}handleFrame(t){var s;const e=Wn(t,"base64",!0);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=Wn(o,"base64",!0);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 Lr(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=Lr(this._renderer);Lr(this._renderer)&&this._renderer.onDone(()=>{var c,d,u;this.logger.debug(`Renderer completed for ${this.id}`),B("/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=!(((u=(d=this._renderer)==null?void 0:d.isOneShot)==null?void 0:u.call(d))??!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,d;const a=(d=(c=this._renderer)==null?void 0:c.readPixels)==null?void 0:d.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"})})}};Ol([ht({modelType:Bo.type})],Ws.prototype,"router",2);Ws=Ol([P($l)],Ws);const Jo=new pe({class:Ws,type:$l});class Dl{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 Ym{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 qm extends Ym{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=`
78
78
  attribute vec2 a_position;
79
79
  void main() {
80
80
  gl_Position = vec4(a_position, 0, 1);
@@ -108,7 +108,8 @@ ${d}topics:${e}
108
108
  vec3 rgb = hslToRgb(hue, 1.0, 0.5);
109
109
  gl_FragColor = vec4(rgb, 1.0);
110
110
  }
111
- `,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 ze{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 Jo(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 Wm=Jo(ze);class Qm extends Wm{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,d)=>{i.addColorStop(d*a,c)}),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,s,r),!this.loop&&!this.isOneShotDone&&this.signalDoneIfNeeded()}}const Zm=Jo(ze);class Cl extends Zm{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 Xm extends Dl{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 Jm(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 Pl(t){return typeof t=="string"?Jm(t):t}function Qs(t){const e=Pl(t);return`rgb(${e.r},${e.g},${e.b})`}class ey extends ze{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=Pl(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 d=0,u=0,h=0;if(i===c)d=this.baseColor.r,u=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 w=this.trailColors[p];d=w.r,u=w.g,h=w.b}}const f=(i*s+a)*4;n[f]=d,n[f+1]=u,n[f+2]=h,n[f+3]=255}this.ctx.putImageData(o,0,0)}}class Rl extends ze{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(),d=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const u=n*d;switch(o){case"left":this.position+=u;break;case"right":this.position+=u;break;case"up":this.position+=u;break;case"down":this.position+=u;break}}this.drawScrollingImage(s,r,o,i),this.checkScrollCompletion(s,r,o,i)}drawScrollingImage(s,r,o,n){var h,f,p,w,v,E,_,k,te;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=((w=this.scrollConfig)==null?void 0:w.width)||s,c=((v=this.scrollConfig)==null?void 0:v.height)||r);let d,u;switch(o==="left"||o==="right"?(d=0,((E=this.scrollConfig)==null?void 0:E.offsetY)==="center"||((_=this.scrollConfig)==null?void 0:_.offsetY)===void 0?u=(r-c)/2:u=this.scrollConfig.offsetY):(((k=this.scrollConfig)==null?void 0:k.offsetX)==="center"||((te=this.scrollConfig)==null?void 0:te.offsetX)===void 0?d=(s-a)/2:d=this.scrollConfig.offsetX,u=0),o){case"left":{const R=s-this.position;if(R<s&&R>-a&&this.ctx.drawImage(this.img,R,u,a,c),this.loopConfig&&this.pauseDuration===0&&this.position>n){const I=R+a+n;I<s&&this.ctx.drawImage(this.img,I,u,a,c)}break}case"right":{const R=-a+this.position;if(R>-a&&R<s&&this.ctx.drawImage(this.img,R,u,a,c),this.loopConfig&&this.pauseDuration===0&&R-n-a>-a){const I=R-a-n;I<s&&this.ctx.drawImage(this.img,I,u,a,c)}break}case"up":{const R=r-this.position;if(R>-c&&R<r&&this.ctx.drawImage(this.img,d,R,a,c),this.loopConfig&&this.pauseDuration===0&&R+c+n<r){const I=R+c+n;I>-c&&this.ctx.drawImage(this.img,d,I,a,c)}break}case"down":{const R=-c+this.position;if(R>-c&&R<r&&this.ctx.drawImage(this.img,d,R,a,c),this.loopConfig&&this.pauseDuration===0&&R-n-c>-c){const I=R-c-n;I<r&&this.ctx.drawImage(this.img,d,I,a,c)}break}}}checkScrollCompletion(s,r,o,n){var h,f,p,w,v;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=((w=this.scrollConfig)==null?void 0:w.width)||s,c=((v=this.scrollConfig)==null?void 0:v.height)||r),o){case"left":case"right":this.loopConfig;break;case"up":case"down":this.loopConfig;break}let d=!1;const u=1;switch(o){case"left":d=s-this.position<-a-u;break;case"right":d=-a+this.position>s+u;break;case"up":d=r-this.position<-c-u;break;case"down":d=-c+this.position>r+u;break}d&&(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=Qs(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 ty extends ze{constructor(s){super();l(this,"text");l(this,"fontSize");l(this,"fontFamily");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,"textMeasured",!1);this.text=s.text,this.fontSize=s.fontSize??8,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=Qs(s.color):this.textColor="rgb(255,255,255)"}measureText(){if(this.textMeasured)return;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`;const s=this.ctx.measureText(this.text);this.textWidth=s.width,this.textHeight=this.fontSize,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}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(),d=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const u=n*d;switch(o){case"left":case"right":case"up":case"down":this.position+=u;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="middle";const o=(s-this.textWidth)/2,n=r/2;this.ctx.fillText(this.text,o,n)}drawScrollingText(s,r,o,n){var c,d,u,h;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="middle";let i,a;switch(o==="left"||o==="right"?(i=0,((c=this.scrollConfig)==null?void 0:c.offsetY)==="center"||((d=this.scrollConfig)==null?void 0:d.offsetY)===void 0?a=r/2:a=this.scrollConfig.offsetY):(((u=this.scrollConfig)==null?void 0:u.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),o){case"left":{const f=s-this.position;if(f<s&&f>-this.textWidth&&this.ctx.fillText(this.text,f,a),this.loopConfig&&this.pauseDuration===0&&this.position>n){const p=f+this.textWidth+n;p<s&&this.ctx.fillText(this.text,p,a)}break}case"right":{const f=-this.textWidth+this.position;if(f>-this.textWidth&&f<s&&this.ctx.fillText(this.text,f,a),this.loopConfig&&this.pauseDuration===0&&f-n-this.textWidth>-this.textWidth){const p=f-this.textWidth-n;p<s&&this.ctx.fillText(this.text,p,a)}break}case"up":{const f=r-this.position;if(f>-this.textHeight&&f<r&&this.ctx.fillText(this.text,i,f),this.loopConfig&&this.pauseDuration===0&&f+this.textHeight+n<r){const p=f+this.textHeight+n;p>-this.textHeight&&this.ctx.fillText(this.text,i,p)}break}case"down":{const f=-this.textHeight+this.position;if(f>-this.textHeight&&f<r&&this.ctx.fillText(this.text,i,f),this.loopConfig&&this.pauseDuration===0&&f-n-this.textHeight>-this.textHeight){const p=f-this.textHeight-n;p<r&&this.ctx.fillText(this.text,i,p)}break}}}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 sy{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=Zr({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(d){console.error(`Failed to create renderer for pattern "${e}":`,d),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 ry=Jo(ze);class oy extends ry{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=Qs(r)}setColor(s){this.color=Qs(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 ny extends ze{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),d=o<.5?o*(1+r):o+r-o*r,u=2*o-d;n=c(u,d,s+1/3),i=c(u,d,s),a=c(u,d,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 d=(c+this.offset)%s/s,u=this.minHue/360+d*((this.maxHue-this.minHue)/360),[h,f,p]=this.hslToRgb(u,1,.5);n[i++]=h,n[i++]=f,n[i++]=p,n[i++]=255}this.ctx.putImageData(o,0,0)}}const Qn=new Map;rs(Z,{register(t,e){Qn.set(t,e)},execute(t,e){const s=Qn.get(t);return s?new s(e):null}});O.canvas.registerRenderer("video",Xm);O.canvas.registerRenderer("video-basic",Dl);O[Z].register("image-static",Cl);O[Z].register("image-scrolling",Rl);const iy=class{constructor(t){var e;return(e=t.scroll)!=null&&e.enabled?new Rl(t):new Cl(t)}};O[Z].register("image",iy);O[Z].register("color",oy);O[Z].register("matrix",ey);O[Z].register("sweep",ny);O[Z].register("gradient",Qm);O[Z].register("drop",qm);O[Z].register("sequence",sy);O[Z].register("text",ty);const Zr=({mode:t,data:e})=>{const s=O[Z].execute(t,e);if(s)return s;throw new Error(`Unknown mode: ${t}`)};var ay=Object.defineProperty,cy=Object.getOwnPropertyDescriptor,yt=(t,e,s,r)=>{for(var o=r>1?void 0:r?cy(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&&ay(e,s,o),o};const xl="canvas-dispatcher-model";function ly(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 Re=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 we}addNamedEndpoint(t,e){this._endpointRenderers.getModel(t)&&this.logger.warn(`Endpoint "${t}" already exists. Overwriting.`);const s=Xo.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 d,u,h;const s=t.params.pattern,r=t.params.endpoint,o=this._endpointRenderers.getModel(r);if(!o){(d=e.status)==null||d.call(e,404).send({error:`Endpoint "${r}" not found`});return}if(!this._patterns.has(s)){(u=e.status)==null||u.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=Zr({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 d,u,h;const s=t.params.color,r=ly(s);if(!r){(d=e.status)==null||d.call(e,400).send({error:"Invalid color format"});return}const o=t.params.endpoint,n=this._endpointRenderers.getModel(o);if(!n){(u=e.status)==null||u.call(e,404).send({error:`Endpoint "${o}" not found`});return}const{r:i,b:a,g:c}=r;n.renderer=Zr({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)}))}};yt([ge],Re.prototype,"_endpointRenderers",2);yt([os("/api/ui/canvas/patterns")],Re.prototype,"handlePatternsPost",1);yt([os("/api/ui/canvas/pattern/:endpoint/:pattern")],Re.prototype,"handlePatternApplication",1);yt([os("/api/ui/canvas/color/:endpoint/:color")],Re.prototype,"handleColorApplication",1);yt([os("/api/ui/canvas/endpoint")],Re.prototype,"handleEndpointCreation",1);Re=yt([P(xl)],Re);const at=new be({class:Re,type:xl}),{URL:en}=se(),{getOne:Al}=ee.build({basePath:`${en}/api/device`}),Zs=m.createLogger({name:"device-service",group:"Services"}),Ll=async()=>{Zs.debug("sending GET for device serial number");try{const t=await Al({urlOverride:`${en}/api/kos/device/serialNumber`});return[void 0,t==null?void 0:t.data.serialNumber]}catch(t){if(t instanceof ce)return Zs.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},Fl=async()=>{Zs.debug("sending GET for device details");try{const t=await Al({urlOverride:`${en}/api/kos/device`});return t?[void 0,t.data]:["unknownError",void 0]}catch(t){if(t instanceof ce)return Zs.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},dy=Object.freeze(Object.defineProperty({__proto__:null,getDeviceDetails:Fl,getSerialNumber:Ll},Symbol.toStringTag,{value:"Module"}));var uy=Object.defineProperty,hy=Object.getOwnPropertyDescriptor,kl=(t,e,s,r)=>{for(var o=r>1?void 0:r?hy(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&&uy(e,s,o),o};const Nl="device-model",fy="/kos/criticalData/changed",gy="/kos/criticalData/available";let Xs=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 Fl();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 Ll();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()}};kl([F({topic:[fy,gy],websocket:!0})],Xs.prototype,"handleCriticalDataChanged",1);Xs=kl([P(Nl)],Xs);const Js=new be({class:Xs,type:Nl});var py=Object.defineProperty,my=Object.getOwnPropertyDescriptor,yy=(t,e,s,r)=>{for(var o=r>1?void 0:r?my(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&&py(e,s,o),o};const Ul="network-interface-model";let Xr=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}`)}};Xr=yy([P(Ul)],Xr);const tn=new pe({class:Xr,type:Ul}),{URL:by}=se(),{getAll:wy}=ee.build({basePath:`${by}/api/kos/network/interfaces`}),Zn=m.createLogger({name:"network-interface-service",group:"Services"}),jl=async()=>{Zn.debug("sending GET for copy-logs");try{const t=await wy({});return[void 0,t==null?void 0:t.data]}catch(t){if(t instanceof ce)return Zn.error(`Error fetching log file size: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},vy=Object.freeze(Object.defineProperty({__proto__:null,getNetworkInterfaces:jl},Symbol.toStringTag,{value:"Module"}));var My=Object.defineProperty,Ey=Object.getOwnPropertyDescriptor,Bl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ey(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&&My(e,s,o),o};const Kl="network-interface-container-model";let er=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new we({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 jl();if(t){this.logger.error(`Error loading network interfaces: ${t}`);return}e&&e.forEach(s=>{const r=tn.instance(s.name).forceUpdate.options(s).build();this.addModel(r)})}async load(){this.logger.debug(`loading network-interface-container container ${this.id}`),this.refreshInterfaces()}};Bl([ge],er.prototype,"_models",2);er=Bl([P(Kl)],er);const Xt=new be({class:er,type:Kl});Xt.addRelatedModel(tn);const{URL:Ty}=se(),{getAll:_y}=ee.build({basePath:`${Ty}/api/kos/storage/devices`}),Xn=m.createLogger({name:"storage-device-service",group:"Services"}),Hl=async()=>{Xn.debug("sending GET for storage-device");const t=await _y({});return!(t!=null&&t.data)||t.status!==200?(Xn.error("Failed to retrieve storage-device data",t),[]):t.data},Iy=Object.freeze(Object.defineProperty({__proto__:null,getStorageDevices:Hl},Symbol.toStringTag,{value:"Module"}));var Sy=Object.defineProperty,Oy=Object.getOwnPropertyDescriptor,$y=(t,e,s,r)=>{for(var o=r>1?void 0:r?Oy(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&&Sy(e,s,o),o};const zl="storage-device-model";let Jr=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}`)}};Jr=$y([cr(),P(zl)],Jr);const tr=new pe({class:Jr,type:zl});var Dy=Object.defineProperty,Cy=Object.getOwnPropertyDescriptor,sn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Cy(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&&Dy(e,s,o),o};const Gl="storage-device-container-model",Py="/kos/storage";let Jt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new we({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=tr.instance(s.id).options(o).build();this.addModel(n)}})}async load(){this.logger.debug(`loading storage-device-container container ${this.id}`),(await Hl()).forEach(e=>{const s={...e,kosParentId:this.id},r=tr.instance(e.id).options(s).build();this.addModel(r)})}};sn([ge],Jt.prototype,"_models",2);sn([F({topic:Py,websocket:!0})],Jt.prototype,"handleStorageAvailability",1);Jt=sn([P(Gl)],Jt);const ct=new be({class:Jt,type:Gl});ct.addRelatedModel(tr);const{URL:rn}=se(),{getAll:Ry,postModel:xy}=ee.build({basePath:`${rn}/api/kos/update/available`}),Jn=m.createLogger({name:"usb-update-service",group:"Services"}),Vl=async()=>{Jn.debug("sending GET for usb-update");const t=await Ry({urlOverride:`${rn}/api/kos/update/available`});return!(t!=null&&t.data)||(t==null?void 0:t.status)!==200?(Jn.error("Failed to retrieve usb-update data",t),[]):t.data},Yl=async(t,e,s)=>{const r=await xy({model:{manifestId:t,deviceId:e},tracker:s,urlOverride:`${rn}/api/kos/update/install`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},Ay=Object.freeze(Object.defineProperty({__proto__:null,getAvailableUpdates:Vl,installUpdate:Yl},Symbol.toStringTag,{value:"Module"}));var Ly=Object.defineProperty,Fy=Object.getOwnPropertyDescriptor,ql=(t,e,s,r)=>{for(var o=r>1?void 0:r?Fy(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&&Ly(e,s,o),o};const Wl="usb-update-model";let sr=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 hr(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}`),Yl(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}`)}};ql([dn()],sr.prototype,"install",1);sr=ql([P(Wl)],sr);const on=new pe({class:sr,type:Wl});var ky=Object.defineProperty,Ny=Object.getOwnPropertyDescriptor,wr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ny(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&&ky(e,s,o),o};const Ql="usb-update-container-model";let lt=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 we({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 Vl();W(()=>{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=on.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}`)}};wr([ht({modelType:ct.type})],lt.prototype,"storageService",2);wr([ge],lt.prototype,"_models",2);wr([aa({dependencies:t=>[t.isUsbInserted]})],lt.prototype,"usbInsertedEffect",1);lt=wr([P(Ql)],lt);const es=new be({class:lt,type:Ql});es.addRelatedModel(on);const Uy=()=>({...{[pt.type]:{class:$c},[Pe.type]:{class:Ac,singleton:!0},...X.registration,...Ke.registration,...nt.registration,...Ys.registration,..._e.registration,[Qo.type]:{class:exports.WsEventModel,singleton:!0},...Zt.registration,...qo.registration,...Ns.registration}}),nn=Uy(),jy={models:nn,preloadModels:[]},ei=!0,Zl=t=>()=>{const e=nn;return Va(eo)(Qt).model(nt).model(ct).model(es).model(Js).model(Hs).model(zt).model(zs).model(zo).model(Xt).model(at).model(Xo).model(Bo,ei).model(cs).model(Kc,ei),Object.keys(e).forEach(s=>{const r=e[s];Ga(eo)(s,r)}),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t)}},fe={};fe.core={models:Zl(fe)};fe.preload=C.model.preloadModel(fe);fe.model=C.model.register(fe);fe.companion=C.companion.register(fe);fe.legacy=C.model.registerLegacyModel(fe);const eo=fe;class By{registerTroubleRankMapper(e){return O.propertyMapper.registerPropertyMapper(he.TroubleRank,e),this}registerTroubleRoleMapper(e){return O.propertyMapper.registerPropertyMapper(he.TroubleRole,e),this}registerTroubleColorMapper(e){return O.propertyMapper.registerPropertyMapper(he.TroubleColor,e),this}registerModelLoader(e,s){O.loader.registerLoader(e,s)}registerCanvasPatternLoader(e){O.loader.registerLoader(at.loader,e)}}class ds{constructor(e){l(this,"futureHandler");this.futureHandler=new hr(e)}get future(){return this.futureHandler.future}get progress(){var e;return((e=this.future)==null?void 0:e.progress)||0}get status(){var e;return((e=this.future)==null?void 0:e.status)||"IDLE"}get isRunning(){return this.future?!this.future.endState:!1}get isCancelled(){var e;return((e=this.future)==null?void 0:e.status)==="CANCELLED"||!1}async cancelFuture(){this.future&&await this.future.cancelFuture()}}function Ky(t){const e=new ds(t);t.futureHandler=e.futureHandler,Object.defineProperty(t,"_futureMixin",{value:e,enumerable:!1,configurable:!1,writable:!1})}function Xl(t){const e=new ds(t),s=t;s.futureHandler=e.futureHandler,Object.defineProperty(t,"_futureMixin",{value:e,enumerable:!1,configurable:!1,writable:!1}),Object.defineProperty(t,"future",{get(){return e.future},enumerable:!0,configurable:!0}),Object.defineProperty(t,"progress",{get(){return e.progress},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){return e.status},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return e.isRunning},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){return e.isCancelled},enumerable:!0,configurable:!0}),s.cancelFuture=async()=>e.cancelFuture()}function Hy(){return function(t){const e=t;function s(...r){const o=e.apply(this,r)||this;return Xl(o),o}return s.prototype=e.prototype,Object.setPrototypeOf(s,e),Object.getOwnPropertyNames(e).forEach(r=>{if(r!=="prototype"&&r!=="length"&&r!=="name"){const o=Object.getOwnPropertyDescriptor(e,r);o&&Object.defineProperty(s,r,o)}}),s}}function zy(t){return new ds(t)}function Gy(t){let e;const s=()=>(e||(e=new ds(t())),e);return{get futureHandler(){return s().futureHandler},get future(){return s().future},get progress(){return s().progress},get status(){return s().status},get isRunning(){return s().isRunning},get isCancelled(){return s().isCancelled},async cancelFuture(){return s().cancelFuture()}}}function Vy(t){return t&&typeof t=="object"&&"futureHandler"in t&&"future"in t&&"_futureMixin"in t&&typeof t.cancelFuture=="function"}function Yy(t){const e=["future","progress","status","isRunning","isCancelled","futureHandler"],s={};for(const r of e){const o=Object.getOwnPropertyDescriptor(t,r);s[r]={exists:r in t,descriptor:o?{enumerable:o.enumerable,configurable:o.configurable,hasGetter:typeof o.get=="function",hasSetter:typeof o.set=="function"}:null,isObservable:t&&typeof t=="object"&&Object.getOwnPropertySymbols(t).some(n=>n.toString().includes("mobx")&&n.toString().includes(r))}}return s}class Jl{constructor(e,s){l(this,"parent");l(this,"companion");this.companion=e,this.parent=s}getParent(){return this.parent}setupProxy(e={}){const{excludeProperties:s=[],includeLifecycle:r=!1}=e,o=r?[]:["init","load","unload","ready","dispose","destroy","onInit","onLoad","onUnload","onReady","onDispose","onDestroy"],n=["getDependencies","getChildren","update","toJSON","forceUpdate","makeAutoObservable","runInAction","transaction","observe","unobserve","intercept","spy","trace"],i=c=>c==="constructor"||c.startsWith("_")||c.startsWith("__")||o.includes(c)||n.includes(c)||s.includes(c)||c in this.companion,a=this.getAllParentProperties(i);for(const c of a)this.createProxyProperty(c)}getAllParentProperties(e){const s=new Set;Object.getOwnPropertyNames(this.parent).filter(o=>!e(o)).forEach(o=>s.add(o));let r=Object.getPrototypeOf(this.parent);for(;r&&r!==Object.prototype;)Object.getOwnPropertyNames(r).filter(o=>!e(o)).forEach(o=>s.add(o)),r=Object.getPrototypeOf(r);return Array.from(s)}createProxyProperty(e){try{const s=this.parent[e];typeof s=="function"?this.companion[e]=(...r)=>s.apply(this.parent,r):Object.defineProperty(this.companion,e,{get:()=>this.parent[e],set:r=>{this.parent[e]=r},enumerable:!0,configurable:!0})}catch(s){console.debug(`Skipping companion proxy for property ${e}:`,s)}}}function qy(t,e,s={}){const r=new Jl(t,e);return t.getParent=()=>r.getParent(),Object.defineProperty(t,"_companionMixin",{value:r,enumerable:!1,configurable:!1,writable:!1}),r.setupProxy(s),r}function ed(t){return t&&typeof t=="object"&&"_companionMixin"in t&&typeof t.getParent=="function"}function td(t){return ed(t)?t._companionMixin:null}function Wy(t){const e=td(t);if(!e)return{error:"No companion mixin found"};const s=e.getParent(),r=Object.getOwnPropertyNames(t),o=Object.getOwnPropertyNames(s),n=r.filter(i=>o.includes(i)&&i!=="constructor"&&!i.startsWith("_"));return{parentType:s.constructor.name,companionType:t.constructor.name,proxiedProps:n,proxiedCount:n.length}}const Qy=async(t,e)=>{const s=zo.instance(t).options({}).build(),r=e?`${e}-`:"";return await ne(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:()=>{Ue(s)}}},sd="kos:service:region",rd="regionId",Zy=`${sd}-${rd}`,od=async t=>{const e=Ke.factory(Zy)({path:sd,attribute:rd});await ne(e),e.updateProperty(t)},an="/kos-timer-event",cn="/kos-timer-event/tick",ln="defaultTimerEnd",Ct=m.createLogger({name:"timer-manager"}),Xy=t=>t.updateProperty!==void 0;class nd{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,Xy(s)&&H(()=>{m.info(`Updating config value timer ${e} with new timeout value ${s.value}`);const n=s.value||60;this.updateTimeout(n)}),this.addTimeoutAction({name:ln}),r&&r.forEach(n=>{this.addTimeoutAction(n)})}get id(){return this.name}start(){if(this.state==="active"){Ct.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&&(Ct.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;Ct.debug(`Executing timer action ${s.name} at ${e}`),(r=s.action)==null||r.call(s,s.name,e),this.notifyTimeoutAction(s),s.singleUse&&(Ct.info(`${this.name} Removing single-use action ${s.name}`),this.removeTimeoutAction(s.name))}),this.notifyTick()}notifyTick(){B(`${cn}/${this.name}`,{name:this.name,remainingTime:this.remainingTime})}notifyTimeoutAction(e){B(an,{name:this.name,action:e.name,remainingTime:this.remainingTime})}}const Pt=new Map,We=(t,e)=>{const s=Pt.get(t);if(!s){Ct.error(`Timer ${t} not found`);return}e(s)},id={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(Pt.has(t))return Pt.get(t);const r=new nd(t,e,s);return Pt.set(t,r),r},getTimer(t){return Pt.get(t)},clearTimer(t){We(t,e=>e.pause())},restartTimer(t){We(t,e=>e.restart())},resetTimer(t){We(t,e=>e.reset())},addTimeoutAction(t,e){We(t,s=>s.addTimeoutAction(e))},removeTimeoutAction(t,e){We(t,s=>s.removeTimeoutAction(e))},startTimer(t){We(t,e=>e.start())}},ad="kos:service:region:settings",cd="timeZone",Jy=`${ad}-${cd}`,to=async t=>{const e=Ke.factory(Jy)({path:ad,attribute:cd});await ne(e),e.updateProperty(t)},eb=t=>!t||!t.data;function dn(t={}){const{alias:e,namespace:s,abortController:r=!1}=t;return(o,n,i)=>{o[At]=o[At]||{};const a=i.value,c=async function(...d){const u=ut();m.debug(`Calling future service ${n} with tracker ${u}`);let h,f;r&&(h=new AbortController);const p=je.initiateFuture({tracker:u,id:Po});s&&(p.namespace=s),m.debug(`waiting for future ${p.id} to be ready`),await ne(p),m.debug(`future ${p.id} is ready`),W(()=>{m.debug(`Adding future ${p.id} to futureHandler`),this.futureHandler.addFuture(p,e)}),r&&h&&(f=H(()=>{(p.status==="CANCELLED"||p.endState===Ce.Canceled)&&(m.debug(`Future ${p.id} cancelled, aborting request`),h==null||h.abort())}),h.signal.addEventListener("abort",async()=>{if(p.status!=="CANCELLED"&&p.endState!==Ce.Canceled&&!p.endState){m.debug(`AbortController aborted, cancelling future ${p.id}`);try{await p.cancelFuture()}catch(v){m.error(`Failed to cancel future ${p.id}:`,v)}}},{once:!0}));const w=()=>{f&&(f(),f=void 0)};try{const v=[...d];if(r&&h){const k=v[v.length-1];k&&typeof k=="object"&&"aborted"in k?v[v.length-1]=h.signal:v.push(h.signal)}v.push(u);const E=await a.apply(this,v);m.debug(`received future response for ${u}`,E);const _=eb(E)?E:E==null?void 0:E.data;return _?(_.progress=1,m.debug("mapping future response to future model"),p.endState?m.debug(`future ${p.id} has already completed. Not updating the model`):Uo(_,p)):this.futureHandler.removeFuture(e),w(),_}catch(v){if(w(),r&&(h!=null&&h.signal.aborted)){const E=new Error("Operation cancelled");throw m.debug(`Operation ${n} was cancelled`),E}throw m.error(v),v}};o[At][n]={handler:c}}}const tb=({path:t})=>(e,s)=>{e[L]=e[L]||{},e[L][s]={modelType:Zt.type,id:`${Zt.type}-${t}`,options:{path:t},lifecycle:j.INIT}};function sb(t){const{path:e,attribute:s}=t;return(r,o)=>{r[L]=r[L]||{},r[L][o]={modelType:qo.type,id:`${e}-${s}`,options:{path:e,attribute:s},lifecycle:j.INIT}}}const Xe=m.createLogger({name:"services",group:"Services"}),rb=async(t,e)=>ld(t,e,`${exports.BASE_URL}/api/server/login`),ld=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()},ob=async t=>dd(t,`${exports.BASE_URL}/api/server/startPasswordReset`,""),dd=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()},nb=async(t,e)=>ud(t,e,`${exports.BASE_URL}/api/server/resetPassword`),ud=async(t,e,s=`${exports.BASE_URL}/api/resetPassword`)=>{Xe.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(Xe.debug(`password reset returned status ${r.status}`),!r.ok){Xe.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()},ib=async(t,e,s)=>hd(t,e,s,`${exports.BASE_URL}/api/server/acceptInvite`),hd=async(t,e,s,r=`${exports.BASE_URL}/api/server/acceptInvite`)=>{Xe.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(Xe.debug(`invitation accept returned status ${o.status}`),!o.ok){Xe.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 ab(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,d=n;let u=0,h="PENDING",f=!0;const p=new Set;let w;return c&&typeof c=="object"&&(w=M.autorun(()=>{const v=c.progress||0,E=c.status||"PENDING",_=!c.endState;(v!==u||E!==h||_!==f)&&(u=v,h=E,f=_,p.forEach(k=>{try{k(u,h)}catch(te){console.warn("Progress callback error:",te)}}))})),n.finally(()=>{f=!1,i!=null&&i.signal.aborted||(h="COMPLETED",p.forEach(v=>{try{v(u,h)}catch(E){console.warn("Progress callback error:",E)}})),w&&w(),p.clear()}),d.cancel=async()=>{i&&!i.signal.aborted&&i.abort(),a&&await a(),f=!1,h="CANCELLED",p.forEach(v=>{try{v(u,h)}catch(E){console.warn("Progress callback error:",E)}}),w&&w()},d.getController=()=>i,d.isCancelled=()=>(i==null?void 0:i.signal.aborted)??!1,Object.defineProperty(d,"progress",{get:()=>u,enumerable:!0}),Object.defineProperty(d,"status",{get:()=>h,enumerable:!0}),Object.defineProperty(d,"isRunning",{get:()=>f,enumerable:!0}),d.onProgressUpdate=v=>(p.add(v),v(u,h),()=>p.delete(v)),d}const cb=Fe.keyframes`
111
+ `,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 ze{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 Xo(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 Wm=Xo(ze);class Qm extends Wm{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,d)=>{i.addColorStop(d*a,c)}),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,s,r),!this.loop&&!this.isOneShotDone&&this.signalDoneIfNeeded()}}const Zm=Xo(ze);class Cl extends Zm{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 Jm extends Dl{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 Xm(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 Pl(t){return typeof t=="string"?Xm(t):t}function Qs(t){const e=Pl(t);return`rgb(${e.r},${e.g},${e.b})`}class ey extends ze{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=Pl(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 d=0,u=0,h=0;if(i===c)d=this.baseColor.r,u=this.baseColor.g,h=this.baseColor.b;else if(i<c&&i>c-this.trailColors.length){const m=c-i;if(m<this.trailColors.length){const w=this.trailColors[m];d=w.r,u=w.g,h=w.b}}const f=(i*s+a)*4;n[f]=d,n[f+1]=u,n[f+2]=h,n[f+3]=255}this.ctx.putImageData(o,0,0)}}class Rl extends ze{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(),d=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const u=n*d;switch(o){case"left":this.position+=u;break;case"right":this.position+=u;break;case"up":this.position+=u;break;case"down":this.position+=u;break}}this.drawScrollingImage(s,r,o,i),this.checkScrollCompletion(s,r,o,i)}drawScrollingImage(s,r,o,n){var h,f,m,w,v,E,_,F,te;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):(m=this.scrollConfig)!=null&&m.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((w=this.scrollConfig)==null?void 0:w.width)||s,c=((v=this.scrollConfig)==null?void 0:v.height)||r);let d,u;switch(o==="left"||o==="right"?(d=0,((E=this.scrollConfig)==null?void 0:E.offsetY)==="center"||((_=this.scrollConfig)==null?void 0:_.offsetY)===void 0?u=(r-c)/2:u=this.scrollConfig.offsetY):(((F=this.scrollConfig)==null?void 0:F.offsetX)==="center"||((te=this.scrollConfig)==null?void 0:te.offsetX)===void 0?d=(s-a)/2:d=this.scrollConfig.offsetX,u=0),o){case"left":{const R=s-this.position;if(R<s&&R>-a&&this.ctx.drawImage(this.img,R,u,a,c),this.loopConfig&&this.pauseDuration===0&&this.position>n){const I=R+a+n;I<s&&this.ctx.drawImage(this.img,I,u,a,c)}break}case"right":{const R=-a+this.position;if(R>-a&&R<s&&this.ctx.drawImage(this.img,R,u,a,c),this.loopConfig&&this.pauseDuration===0&&R-n-a>-a){const I=R-a-n;I<s&&this.ctx.drawImage(this.img,I,u,a,c)}break}case"up":{const R=r-this.position;if(R>-c&&R<r&&this.ctx.drawImage(this.img,d,R,a,c),this.loopConfig&&this.pauseDuration===0&&R+c+n<r){const I=R+c+n;I>-c&&this.ctx.drawImage(this.img,d,I,a,c)}break}case"down":{const R=-c+this.position;if(R>-c&&R<r&&this.ctx.drawImage(this.img,d,R,a,c),this.loopConfig&&this.pauseDuration===0&&R-n-c>-c){const I=R-c-n;I<r&&this.ctx.drawImage(this.img,d,I,a,c)}break}}}checkScrollCompletion(s,r,o,n){var h,f,m,w,v;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):(m=this.scrollConfig)!=null&&m.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((w=this.scrollConfig)==null?void 0:w.width)||s,c=((v=this.scrollConfig)==null?void 0:v.height)||r),o){case"left":case"right":this.loopConfig;break;case"up":case"down":this.loopConfig;break}let d=!1;const u=1;switch(o){case"left":d=s-this.position<-a-u;break;case"right":d=-a+this.position>s+u;break;case"up":d=r-this.position<-c-u;break;case"down":d=-c+this.position>r+u;break}d&&(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=Qs(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 ty extends ze{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(`
112
+ `),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=Qs(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(),d=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const u=n*d;switch(o){case"left":case"right":case"up":case"down":this.position+=u;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],d=(s-c)/2,u=n+i*this.lineHeight;this.ctx.fillText(a,d,u)}}drawScrollingText(s,r,o,n){var c,d,u,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"||((d=this.scrollConfig)==null?void 0:d.offsetY)===void 0?a=(r-this.textHeight)/2:a=this.scrollConfig.offsetY):(((u=this.scrollConfig)==null?void 0:u.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 d=c+this.textWidth+n;d<r&&this.drawTextBlock(d,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 d=c-this.textWidth-n;d<r&&this.drawTextBlock(d,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 d=c+this.textHeight+n;d>-this.textHeight&&this.drawTextBlock(i,d,"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 d=c-this.textHeight-n;d<o&&this.drawTextBlock(i,d,"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 d=r+n*this.lineHeight;this.ctx.fillText(i,c,d)}}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 sy{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=Zr({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(d){console.error(`Failed to create renderer for pattern "${e}":`,d),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 ry=Xo(ze);class oy extends ry{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=Qs(r)}setColor(s){this.color=Qs(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 ny extends ze{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,m)=>(m<0&&(m+=1),m>1&&(m-=1),m<.16666666666666666?h+(f-h)*6*m:m<.5?f:m<.6666666666666666?h+(f-h)*(.6666666666666666-m)*6:h),d=o<.5?o*(1+r):o+r-o*r,u=2*o-d;n=c(u,d,s+1/3),i=c(u,d,s),a=c(u,d,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 d=(c+this.offset)%s/s,u=this.minHue/360+d*((this.maxHue-this.minHue)/360),[h,f,m]=this.hslToRgb(u,1,.5);n[i++]=h,n[i++]=f,n[i++]=m,n[i++]=255}this.ctx.putImageData(o,0,0)}}const Qn=new Map;rs(Z,{register(t,e){Qn.set(t,e)},execute(t,e){const s=Qn.get(t);return s?new s(e):null}});O.canvas.registerRenderer("video",Jm);O.canvas.registerRenderer("video-basic",Dl);O[Z].register("image-static",Cl);O[Z].register("image-scrolling",Rl);const iy=class{constructor(t){var e;return(e=t.scroll)!=null&&e.enabled?new Rl(t):new Cl(t)}};O[Z].register("image",iy);O[Z].register("color",oy);O[Z].register("matrix",ey);O[Z].register("sweep",ny);O[Z].register("gradient",Qm);O[Z].register("drop",qm);O[Z].register("sequence",sy);O[Z].register("text",ty);const Zr=({mode:t,data:e})=>{const s=O[Z].execute(t,e);if(s)return s;throw new Error(`Unknown mode: ${t}`)};var ay=Object.defineProperty,cy=Object.getOwnPropertyDescriptor,yt=(t,e,s,r)=>{for(var o=r>1?void 0:r?cy(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&&ay(e,s,o),o};const xl="canvas-dispatcher-model";function ly(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 Re=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 we}addNamedEndpoint(t,e){this._endpointRenderers.getModel(t)&&this.logger.warn(`Endpoint "${t}" already exists. Overwriting.`);const s=Jo.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 d,u,h;const s=t.params.pattern,r=t.params.endpoint,o=this._endpointRenderers.getModel(r);if(!o){(d=e.status)==null||d.call(e,404).send({error:`Endpoint "${r}" not found`});return}if(!this._patterns.has(s)){(u=e.status)==null||u.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=Zr({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 d,u,h;const s=t.params.color,r=ly(s);if(!r){(d=e.status)==null||d.call(e,400).send({error:"Invalid color format"});return}const o=t.params.endpoint,n=this._endpointRenderers.getModel(o);if(!n){(u=e.status)==null||u.call(e,404).send({error:`Endpoint "${o}" not found`});return}const{r:i,b:a,g:c}=r;n.renderer=Zr({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)}))}};yt([ge],Re.prototype,"_endpointRenderers",2);yt([os("/api/ui/canvas/patterns")],Re.prototype,"handlePatternsPost",1);yt([os("/api/ui/canvas/pattern/:endpoint/:pattern")],Re.prototype,"handlePatternApplication",1);yt([os("/api/ui/canvas/color/:endpoint/:color")],Re.prototype,"handleColorApplication",1);yt([os("/api/ui/canvas/endpoint")],Re.prototype,"handleEndpointCreation",1);Re=yt([P(xl)],Re);const at=new be({class:Re,type:xl}),{URL:en}=se(),{getOne:Al}=ee.build({basePath:`${en}/api/device`}),Zs=p.createLogger({name:"device-service",group:"Services"}),Ll=async()=>{Zs.debug("sending GET for device serial number");try{const t=await Al({urlOverride:`${en}/api/kos/device/serialNumber`});return[void 0,t==null?void 0:t.data.serialNumber]}catch(t){if(t instanceof ce)return Zs.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},kl=async()=>{Zs.debug("sending GET for device details");try{const t=await Al({urlOverride:`${en}/api/kos/device`});return t?[void 0,t.data]:["unknownError",void 0]}catch(t){if(t instanceof ce)return Zs.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},dy=Object.freeze(Object.defineProperty({__proto__:null,getDeviceDetails:kl,getSerialNumber:Ll},Symbol.toStringTag,{value:"Module"}));var uy=Object.defineProperty,hy=Object.getOwnPropertyDescriptor,Fl=(t,e,s,r)=>{for(var o=r>1?void 0:r?hy(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&&uy(e,s,o),o};const Nl="device-model",fy="/kos/criticalData/changed",gy="/kos/criticalData/available";let Js=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 kl();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 Ll();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()}};Fl([k({topic:[fy,gy],websocket:!0})],Js.prototype,"handleCriticalDataChanged",1);Js=Fl([P(Nl)],Js);const Xs=new be({class:Js,type:Nl});var py=Object.defineProperty,my=Object.getOwnPropertyDescriptor,yy=(t,e,s,r)=>{for(var o=r>1?void 0:r?my(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&&py(e,s,o),o};const Ul="network-interface-model";let Jr=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}`)}};Jr=yy([P(Ul)],Jr);const tn=new pe({class:Jr,type:Ul}),{URL:by}=se(),{getAll:wy}=ee.build({basePath:`${by}/api/kos/network/interfaces`}),Zn=p.createLogger({name:"network-interface-service",group:"Services"}),jl=async()=>{Zn.debug("sending GET for copy-logs");try{const t=await wy({});return[void 0,t==null?void 0:t.data]}catch(t){if(t instanceof ce)return Zn.error(`Error fetching log file size: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},vy=Object.freeze(Object.defineProperty({__proto__:null,getNetworkInterfaces:jl},Symbol.toStringTag,{value:"Module"}));var My=Object.defineProperty,Ey=Object.getOwnPropertyDescriptor,Bl=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ey(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&&My(e,s,o),o};const Kl="network-interface-container-model";let er=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new we({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 jl();if(t){this.logger.error(`Error loading network interfaces: ${t}`);return}e&&e.forEach(s=>{const r=tn.instance(s.name).forceUpdate.options(s).build();this.addModel(r)})}async load(){this.logger.debug(`loading network-interface-container container ${this.id}`),this.refreshInterfaces()}};Bl([ge],er.prototype,"_models",2);er=Bl([P(Kl)],er);const Jt=new be({class:er,type:Kl});Jt.addRelatedModel(tn);const{URL:Ty}=se(),{getAll:_y}=ee.build({basePath:`${Ty}/api/kos/storage/devices`}),Jn=p.createLogger({name:"storage-device-service",group:"Services"}),Hl=async()=>{Jn.debug("sending GET for storage-device");const t=await _y({});return!(t!=null&&t.data)||t.status!==200?(Jn.error("Failed to retrieve storage-device data",t),[]):t.data},Iy=Object.freeze(Object.defineProperty({__proto__:null,getStorageDevices:Hl},Symbol.toStringTag,{value:"Module"}));var Sy=Object.defineProperty,Oy=Object.getOwnPropertyDescriptor,$y=(t,e,s,r)=>{for(var o=r>1?void 0:r?Oy(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&&Sy(e,s,o),o};const zl="storage-device-model";let Xr=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}`)}};Xr=$y([cr(),P(zl)],Xr);const tr=new pe({class:Xr,type:zl});var Dy=Object.defineProperty,Cy=Object.getOwnPropertyDescriptor,sn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Cy(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&&Dy(e,s,o),o};const Gl="storage-device-container-model",Py="/kos/storage";let Xt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new we({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=tr.instance(s.id).options(o).build();this.addModel(n)}})}async load(){this.logger.debug(`loading storage-device-container container ${this.id}`),(await Hl()).forEach(e=>{const s={...e,kosParentId:this.id},r=tr.instance(e.id).options(s).build();this.addModel(r)})}};sn([ge],Xt.prototype,"_models",2);sn([k({topic:Py,websocket:!0})],Xt.prototype,"handleStorageAvailability",1);Xt=sn([P(Gl)],Xt);const ct=new be({class:Xt,type:Gl});ct.addRelatedModel(tr);const{URL:rn}=se(),{getAll:Ry,postModel:xy}=ee.build({basePath:`${rn}/api/kos/update/available`}),Xn=p.createLogger({name:"usb-update-service",group:"Services"}),Vl=async()=>{Xn.debug("sending GET for usb-update");const t=await Ry({urlOverride:`${rn}/api/kos/update/available`});return!(t!=null&&t.data)||(t==null?void 0:t.status)!==200?(Xn.error("Failed to retrieve usb-update data",t),[]):t.data},Yl=async(t,e,s)=>{const r=await xy({model:{manifestId:t,deviceId:e},tracker:s,urlOverride:`${rn}/api/kos/update/install`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},Ay=Object.freeze(Object.defineProperty({__proto__:null,getAvailableUpdates:Vl,installUpdate:Yl},Symbol.toStringTag,{value:"Module"}));var Ly=Object.defineProperty,ky=Object.getOwnPropertyDescriptor,ql=(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=(r?i(e,s,o):i(o))||o);return r&&o&&Ly(e,s,o),o};const Wl="usb-update-model";let sr=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 hr(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}`),Yl(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}`)}};ql([dn()],sr.prototype,"install",1);sr=ql([P(Wl)],sr);const on=new pe({class:sr,type:Wl});var Fy=Object.defineProperty,Ny=Object.getOwnPropertyDescriptor,wr=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ny(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&&Fy(e,s,o),o};const Ql="usb-update-container-model";let lt=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 we({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 Vl();W(()=>{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=on.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}`)}};wr([ht({modelType:ct.type})],lt.prototype,"storageService",2);wr([ge],lt.prototype,"_models",2);wr([aa({dependencies:t=>[t.isUsbInserted]})],lt.prototype,"usbInsertedEffect",1);lt=wr([P(Ql)],lt);const es=new be({class:lt,type:Ql});es.addRelatedModel(on);const Uy=()=>({...{[pt.type]:{class:$c},[Pe.type]:{class:Ac,singleton:!0},...J.registration,...Ke.registration,...nt.registration,...Ys.registration,..._e.registration,[Qo.type]:{class:exports.WsEventModel,singleton:!0},...Zt.registration,...qo.registration,...Ns.registration}}),nn=Uy(),jy={models:nn,preloadModels:[]},ei=!0,Zl=t=>()=>{const e=nn;return Va(eo)(Qt).model(nt).model(ct).model(es).model(Xs).model(Hs).model(zt).model(zs).model(zo).model(Jt).model(at).model(Jo).model(Bo,ei).model(cs).model(Kc,ei),Object.keys(e).forEach(s=>{const r=e[s];Ga(eo)(s,r)}),{preload:C.model.preloadModel(t),model:C.model.register(t),companion:C.companion.register(t),legacy:C.model.registerLegacyModel(t)}},fe={};fe.core={models:Zl(fe)};fe.preload=C.model.preloadModel(fe);fe.model=C.model.register(fe);fe.companion=C.companion.register(fe);fe.legacy=C.model.registerLegacyModel(fe);const eo=fe;class By{registerTroubleRankMapper(e){return O.propertyMapper.registerPropertyMapper(he.TroubleRank,e),this}registerTroubleRoleMapper(e){return O.propertyMapper.registerPropertyMapper(he.TroubleRole,e),this}registerTroubleColorMapper(e){return O.propertyMapper.registerPropertyMapper(he.TroubleColor,e),this}registerModelLoader(e,s){O.loader.registerLoader(e,s)}registerCanvasPatternLoader(e){O.loader.registerLoader(at.loader,e)}}class ds{constructor(e){l(this,"futureHandler");this.futureHandler=new hr(e)}get future(){return this.futureHandler.future}get progress(){var e;return((e=this.future)==null?void 0:e.progress)||0}get status(){var e;return((e=this.future)==null?void 0:e.status)||"IDLE"}get isRunning(){return this.future?!this.future.endState:!1}get isCancelled(){var e;return((e=this.future)==null?void 0:e.status)==="CANCELLED"||!1}async cancelFuture(){this.future&&await this.future.cancelFuture()}}function Ky(t){const e=new ds(t);t.futureHandler=e.futureHandler,Object.defineProperty(t,"_futureMixin",{value:e,enumerable:!1,configurable:!1,writable:!1})}function Jl(t){const e=new ds(t),s=t;s.futureHandler=e.futureHandler,Object.defineProperty(t,"_futureMixin",{value:e,enumerable:!1,configurable:!1,writable:!1}),Object.defineProperty(t,"future",{get(){return e.future},enumerable:!0,configurable:!0}),Object.defineProperty(t,"progress",{get(){return e.progress},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){return e.status},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return e.isRunning},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){return e.isCancelled},enumerable:!0,configurable:!0}),s.cancelFuture=async()=>e.cancelFuture()}function Hy(){return function(t){const e=t;function s(...r){const o=e.apply(this,r)||this;return Jl(o),o}return s.prototype=e.prototype,Object.setPrototypeOf(s,e),Object.getOwnPropertyNames(e).forEach(r=>{if(r!=="prototype"&&r!=="length"&&r!=="name"){const o=Object.getOwnPropertyDescriptor(e,r);o&&Object.defineProperty(s,r,o)}}),s}}function zy(t){return new ds(t)}function Gy(t){let e;const s=()=>(e||(e=new ds(t())),e);return{get futureHandler(){return s().futureHandler},get future(){return s().future},get progress(){return s().progress},get status(){return s().status},get isRunning(){return s().isRunning},get isCancelled(){return s().isCancelled},async cancelFuture(){return s().cancelFuture()}}}function Vy(t){return t&&typeof t=="object"&&"futureHandler"in t&&"future"in t&&"_futureMixin"in t&&typeof t.cancelFuture=="function"}function Yy(t){const e=["future","progress","status","isRunning","isCancelled","futureHandler"],s={};for(const r of e){const o=Object.getOwnPropertyDescriptor(t,r);s[r]={exists:r in t,descriptor:o?{enumerable:o.enumerable,configurable:o.configurable,hasGetter:typeof o.get=="function",hasSetter:typeof o.set=="function"}:null,isObservable:t&&typeof t=="object"&&Object.getOwnPropertySymbols(t).some(n=>n.toString().includes("mobx")&&n.toString().includes(r))}}return s}class Xl{constructor(e,s){l(this,"parent");l(this,"companion");this.companion=e,this.parent=s}getParent(){return this.parent}setupProxy(e={}){const{excludeProperties:s=[],includeLifecycle:r=!1}=e,o=r?[]:["init","load","unload","ready","dispose","destroy","onInit","onLoad","onUnload","onReady","onDispose","onDestroy"],n=["getDependencies","getChildren","update","toJSON","forceUpdate","makeAutoObservable","runInAction","transaction","observe","unobserve","intercept","spy","trace"],i=c=>c==="constructor"||c.startsWith("_")||c.startsWith("__")||o.includes(c)||n.includes(c)||s.includes(c)||c in this.companion,a=this.getAllParentProperties(i);for(const c of a)this.createProxyProperty(c)}getAllParentProperties(e){const s=new Set;Object.getOwnPropertyNames(this.parent).filter(o=>!e(o)).forEach(o=>s.add(o));let r=Object.getPrototypeOf(this.parent);for(;r&&r!==Object.prototype;)Object.getOwnPropertyNames(r).filter(o=>!e(o)).forEach(o=>s.add(o)),r=Object.getPrototypeOf(r);return Array.from(s)}createProxyProperty(e){try{const s=this.parent[e];typeof s=="function"?this.companion[e]=(...r)=>s.apply(this.parent,r):Object.defineProperty(this.companion,e,{get:()=>this.parent[e],set:r=>{this.parent[e]=r},enumerable:!0,configurable:!0})}catch(s){console.debug(`Skipping companion proxy for property ${e}:`,s)}}}function qy(t,e,s={}){const r=new Xl(t,e);return t.getParent=()=>r.getParent(),Object.defineProperty(t,"_companionMixin",{value:r,enumerable:!1,configurable:!1,writable:!1}),r.setupProxy(s),r}function ed(t){return t&&typeof t=="object"&&"_companionMixin"in t&&typeof t.getParent=="function"}function td(t){return ed(t)?t._companionMixin:null}function Wy(t){const e=td(t);if(!e)return{error:"No companion mixin found"};const s=e.getParent(),r=Object.getOwnPropertyNames(t),o=Object.getOwnPropertyNames(s),n=r.filter(i=>o.includes(i)&&i!=="constructor"&&!i.startsWith("_"));return{parentType:s.constructor.name,companionType:t.constructor.name,proxiedProps:n,proxiedCount:n.length}}const Qy=async(t,e)=>{const s=zo.instance(t).options({}).build(),r=e?`${e}-`:"";return await ne(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:()=>{Ue(s)}}},sd="kos:service:region",rd="regionId",Zy=`${sd}-${rd}`,od=async t=>{const e=Ke.factory(Zy)({path:sd,attribute:rd});await ne(e),e.updateProperty(t)},an="/kos-timer-event",cn="/kos-timer-event/tick",ln="defaultTimerEnd",Ct=p.createLogger({name:"timer-manager"}),Jy=t=>t.updateProperty!==void 0;class nd{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,Jy(s)&&H(()=>{p.info(`Updating config value timer ${e} with new timeout value ${s.value}`);const n=s.value||60;this.updateTimeout(n)}),this.addTimeoutAction({name:ln}),r&&r.forEach(n=>{this.addTimeoutAction(n)})}get id(){return this.name}start(){if(this.state==="active"){Ct.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&&(Ct.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;Ct.debug(`Executing timer action ${s.name} at ${e}`),(r=s.action)==null||r.call(s,s.name,e),this.notifyTimeoutAction(s),s.singleUse&&(Ct.info(`${this.name} Removing single-use action ${s.name}`),this.removeTimeoutAction(s.name))}),this.notifyTick()}notifyTick(){B(`${cn}/${this.name}`,{name:this.name,remainingTime:this.remainingTime})}notifyTimeoutAction(e){B(an,{name:this.name,action:e.name,remainingTime:this.remainingTime})}}const Pt=new Map,We=(t,e)=>{const s=Pt.get(t);if(!s){Ct.error(`Timer ${t} not found`);return}e(s)},id={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(Pt.has(t))return Pt.get(t);const r=new nd(t,e,s);return Pt.set(t,r),r},getTimer(t){return Pt.get(t)},clearTimer(t){We(t,e=>e.pause())},restartTimer(t){We(t,e=>e.restart())},resetTimer(t){We(t,e=>e.reset())},addTimeoutAction(t,e){We(t,s=>s.addTimeoutAction(e))},removeTimeoutAction(t,e){We(t,s=>s.removeTimeoutAction(e))},startTimer(t){We(t,e=>e.start())}},ad="kos:service:region:settings",cd="timeZone",Xy=`${ad}-${cd}`,to=async t=>{const e=Ke.factory(Xy)({path:ad,attribute:cd});await ne(e),e.updateProperty(t)},eb=t=>!t||!t.data;function dn(t={}){const{alias:e,namespace:s,abortController:r=!1}=t;return(o,n,i)=>{o[At]=o[At]||{};const a=i.value,c=async function(...d){const u=ut();p.debug(`Calling future service ${n} with tracker ${u}`);let h,f;r&&(h=new AbortController);const m=je.initiateFuture({tracker:u,id:Po});s&&(m.namespace=s),p.debug(`waiting for future ${m.id} to be ready`),await ne(m),p.debug(`future ${m.id} is ready`),W(()=>{p.debug(`Adding future ${m.id} to futureHandler`),this.futureHandler.addFuture(m,e)}),r&&h&&(f=H(()=>{(m.status==="CANCELLED"||m.endState===Ce.Canceled)&&(p.debug(`Future ${m.id} cancelled, aborting request`),h==null||h.abort())}),h.signal.addEventListener("abort",async()=>{if(m.status!=="CANCELLED"&&m.endState!==Ce.Canceled&&!m.endState){p.debug(`AbortController aborted, cancelling future ${m.id}`);try{await m.cancelFuture()}catch(v){p.error(`Failed to cancel future ${m.id}:`,v)}}},{once:!0}));const w=()=>{f&&(f(),f=void 0)};try{const v=[...d];if(r&&h){const F=v[v.length-1];F&&typeof F=="object"&&"aborted"in F?v[v.length-1]=h.signal:v.push(h.signal)}v.push(u);const E=await a.apply(this,v);p.debug(`received future response for ${u}`,E);const _=eb(E)?E:E==null?void 0:E.data;return _?(_.progress=1,p.debug("mapping future response to future model"),m.endState?p.debug(`future ${m.id} has already completed. Not updating the model`):Uo(_,m)):this.futureHandler.removeFuture(e),w(),_}catch(v){if(w(),r&&(h!=null&&h.signal.aborted)){const E=new Error("Operation cancelled");throw p.debug(`Operation ${n} was cancelled`),E}throw p.error(v),v}};o[At][n]={handler:c}}}const tb=({path:t})=>(e,s)=>{e[L]=e[L]||{},e[L][s]={modelType:Zt.type,id:`${Zt.type}-${t}`,options:{path:t},lifecycle:j.INIT}};function sb(t){const{path:e,attribute:s}=t;return(r,o)=>{r[L]=r[L]||{},r[L][o]={modelType:qo.type,id:`${e}-${s}`,options:{path:e,attribute:s},lifecycle:j.INIT}}}const Je=p.createLogger({name:"services",group:"Services"}),rb=async(t,e)=>ld(t,e,`${exports.BASE_URL}/api/server/login`),ld=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()},ob=async t=>dd(t,`${exports.BASE_URL}/api/server/startPasswordReset`,""),dd=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()},nb=async(t,e)=>ud(t,e,`${exports.BASE_URL}/api/server/resetPassword`),ud=async(t,e,s=`${exports.BASE_URL}/api/resetPassword`)=>{Je.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(Je.debug(`password reset returned status ${r.status}`),!r.ok){Je.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()},ib=async(t,e,s)=>hd(t,e,s,`${exports.BASE_URL}/api/server/acceptInvite`),hd=async(t,e,s,r=`${exports.BASE_URL}/api/server/acceptInvite`)=>{Je.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(Je.debug(`invitation accept returned status ${o.status}`),!o.ok){Je.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 ab(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,d=n;let u=0,h="PENDING",f=!0;const m=new Set;let w;return c&&typeof c=="object"&&(w=M.autorun(()=>{const v=c.progress||0,E=c.status||"PENDING",_=!c.endState;(v!==u||E!==h||_!==f)&&(u=v,h=E,f=_,m.forEach(F=>{try{F(u,h)}catch(te){console.warn("Progress callback error:",te)}}))})),n.finally(()=>{f=!1,i!=null&&i.signal.aborted||(h="COMPLETED",m.forEach(v=>{try{v(u,h)}catch(E){console.warn("Progress callback error:",E)}})),w&&w(),m.clear()}),d.cancel=async()=>{i&&!i.signal.aborted&&i.abort(),a&&await a(),f=!1,h="CANCELLED",m.forEach(v=>{try{v(u,h)}catch(E){console.warn("Progress callback error:",E)}}),w&&w()},d.getController=()=>i,d.isCancelled=()=>(i==null?void 0:i.signal.aborted)??!1,Object.defineProperty(d,"progress",{get:()=>u,enumerable:!0}),Object.defineProperty(d,"status",{get:()=>h,enumerable:!0}),Object.defineProperty(d,"isRunning",{get:()=>f,enumerable:!0}),d.onProgressUpdate=v=>(m.add(v),v(u,h),()=>m.delete(v)),d}const cb=ke.keyframes`
112
113
  0% {
113
114
  left: -90px;
114
115
  color: #eee;
@@ -120,7 +121,7 @@ ${d}topics:${e}
120
121
  left: 90px;
121
122
  color: #eee;
122
123
  }
123
- `,lb=Fe.css`
124
+ `,lb=ke.css`
124
125
  font-size: 100px;
125
126
  margin-top: -80px;
126
127
  position: relative;
@@ -140,31 +141,31 @@ ${d}topics:${e}
140
141
  left: 0;
141
142
  color: ${({theme:t})=>t==="light"?"black":"white"};
142
143
  z-index: 10000;
143
- `;class gd 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 hb={normal:"#B5F7F6",warn:"#F3D78A",error:"#FC8486"},fb=({value:t=0,title:e,status:s="normal",subtitle:r})=>{const o=Fe.css`
144
+ `;class gd 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 hb={normal:"#B5F7F6",warn:"#F3D78A",error:"#FC8486"},fb=({value:t=0,title:e,status:s="normal",subtitle:r})=>{const o=ke.css`
144
145
  display: flex;
145
146
  flex-direction: column;
146
- `,n=Fe.css`
147
+ `,n=ke.css`
147
148
  position: relative;
148
149
  height: 18px;
149
150
  width: 100%;
150
151
  background-color: #ddd;
151
152
  border-radius: 5px;
152
153
  overflow: hidden;
153
- `,i=Fe.css`
154
+ `,i=ke.css`
154
155
  position: absolute;
155
156
  top: 50%; /* position the top edge of the element at the middle of the parent */
156
157
  left: 50%; /* position the left edge of the element at the middle of the parent */
157
158
  z-index: 5;
158
159
  transform: translate(-50%, -50%);
159
160
  font-size: smaller;
160
- `,a=Fe.css`
161
+ `,a=ke.css`
161
162
  width: ${t}%;
162
163
  height: 35px;
163
164
  background-color: ${hb[s]};
164
165
  text-align: center;
165
166
  line-height: 32px;
166
167
  color: black;
167
- `,c=Fe.css`
168
+ `,c=ke.css`
168
169
  animation: indeterminateAnimation 1s infinite linear;
169
170
  transform-origin: 0% 50%;
170
171
  @keyframes indeterminateAnimation {
@@ -178,7 +179,7 @@ ${d}topics:${e}
178
179
  transform: translateX(100%) scaleX(0.5);
179
180
  }
180
181
  }
181
- `;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})]})},gb={setModel:()=>!1},vr=g.createContext(gb),pb=()=>{const t=g.useContext(vr);if(t==null)throw new Error("useModels must be used within a KosModelProvider");return t.model},pd=({children:t})=>{const[e,s]=g.useState(),r=g.useCallback(o=>(s(o),!0),[s]);return T.jsx(vr.Provider,{value:{model:e,setModel:r},children:t})},md=m.createLogger({name:"kos-model-hierarchy-context"}),mb={models:[],addModel:()=>{md.debug("Default implementation being used. Do Nothing.")}},Mr=g.createContext(mb),yb=({children:t})=>{const[e,s]=g.useState([]),r=g.useCallback(o=>{e.includes(o)||(md.debug("adding to hierarchy context",o.id),s(n=>[...n,o]))},[e]);return T.jsx(Mr.Provider,{value:{models:e,addModel:r},children:t})},bb=()=>!0,yd=t=>{const e=g.useContext(Mr);if(!e)throw new Error("useContextModelHierarchy must be used within a KosModelCollectionProvider");const s=(t==null?void 0:t.filter)||bb;return g.useMemo(()=>e.models.filter(s),[e.models,s])},wb=t=>yd({filter:s=>{const r=me(s.id);return(r==null?void 0:r.type)===t}})[0],vb=m.createLogger({name:"kos-model-loader"}),Mb=()=>T.jsx("div",{}),bd=({fallback:t,children:e,...s})=>T.jsx(pd,{children:T.jsx(gd,{fallback:t,children:T.jsx(g.Suspense,{children:T.jsx(wd,{...s,children:e})})})}),wd=t=>{const[e,s]=g.useState(),[r,o]=g.useState(!1),{setModel:n}=g.useContext(vr),i=g.useContext(Mr);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 vb.error(t.error),new Error(t.error);const a=t.loading||T.jsx(Mb,{});return T.jsx(T.Fragment,{children:e&&r?t.children:a})},$s={header:{title:"Model",createLabel:"Create new Model",deleteLabel:"Delete"},createModal:{okText:"OK",cancelText:"Cancel",title:"Create New Model"}},vd=g.createContext($s),Eb=({translations:t=$s,children:e})=>{const s={header:{...$s.header,...t.header},createModal:{...$s.createModal,...t.createModal}};return T.jsx(vd.Provider,{value:s,children:e})};function Tb(t,e){const s=S.create(t,!1,e),r=s.whenReady().then(()=>s);return mo(r)}const Md=g.createContext(void 0),_b=(t={models:{},preloadModels:[]},e)=>{const s=Tb(t,e),r=({children:o})=>{const n=s.read(),[i,a]=g.useState(n.isOnline);return g.useEffect(()=>{const c=H(()=>{a(n.isOnline)});return()=>{c()}},[n]),T.jsx(Md.Provider,{value:{kosCore:n,online:i},children:o})};return{KosCoreContextProvider:io.observer(r)}},Ed=()=>{const t=g.useContext(Md);if(t===void 0)throw new Error("useKosCore must be used within a KosCoreContextProvider");return t},Ib=8,Sb=(t=0)=>new Promise(e=>{setTimeout(()=>{e(!0)},2**t*10)}),ke=new Map;function Ob(t,e){if(ke.has(t)){const s=ke.get(t);if(s.status==="finished"){const r=S.getInstance().modelManager.getModelById(t);return{kosModel:r,model:r==null?void 0:r.modelData}}else throw s.promise}else{const s=e().then(()=>{ke.set(t,{status:"finished",key:t})},o=>{throw ke.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw ke.set(t,r),s}}function $b(t,e){return Ob(t,e)}async function Db(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 u=typeof o=="string"?t.modelManager.getModelFactory(o):r;if(!u)throw Error("No Factory Specified. Cannot create a new instance");c=u.build(s,n)}const d=t.modelManager.getModelById(s);if(!d){if(a>Ib)throw Error(`KOS Model ${s} has not been found`);await Sb(a),a=a+1}return await(d==null?void 0:d.whenReady()),d?(c=d.modelData,{kosModel:d,model:c}):{kosModel:void 0,model:void 0}}const G=t=>{const{modelId:e,modelType:s,activate:r,destroyOnUnmount:o}=t,n=Ed(),[i,a]=g.useState(!1),[c,d]=g.useState(),{kosModel:u,model:h}=$b(e||s||"",()=>Db(n.kosCore,t));return g.useEffect(()=>{async function f(){try{return await n.kosCore.whenReady(),r&&await(u==null?void 0:u.fsm.transitionTo(x.GO_ACTIVE,b.ACTIVE)),a(!0),u}catch(w){d(w.message)}}let p;return n.kosCore&&e&&f().then(w=>{p=H(()=>{const v=(w==null?void 0:w.status)===b.READY;a(v)})}).catch(w=>{console.error(w)}),()=>{if(r){if(h!=null&&h.id){const w=n.kosCore.modelManager.getModelById(h.id);w==null||w.fsm.transitionTo(x.GO_INACTIVE,b.INACTIVE).then(()=>{if(o){const v=h.id;Ue(h).then(()=>{ke.delete(v),p==null||p()})}})}}else o&&h&&Ue(h).then(()=>{ke.delete(e),p==null||p()})}},[r,o,n.kosCore,u,h,e]),{model:h,ready:i,error:c,status:{model:h,ready:i,error:c},KosModelLoader:bd}},un=()=>{const t=Ns.type;return G({modelId:t,modelType:Ns.type,options:{}})},hn=g.createContext(void 0),Cb=({children:t})=>{const{model:e,ready:s}=un(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(hn.Provider,{value:r,children:t})},Pb=()=>{const t=g.useContext(hn);if(!t)throw new Error("useKosTimeContext must be used within a KosTimeProvider");return t},fn=()=>{const t=zs.type;return G({modelId:t,modelType:zs.type,options:{}})};function Rb(t){return()=>e=>{const{model:s,status:r,KosModelLoader:o}=fn();return T.jsx(o,{...r,children:T.jsx(t,{...e,softwareInfo:s})})}}const gn=g.createContext(void 0),xb=({children:t})=>{const{model:e,ready:s}=fn(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(gn.Provider,{value:r,children:t})},Ab=()=>{const t=g.useContext(gn);if(!t)throw new Error("useSoftwareInfoContext must be used within a SoftwareInfoProvider");return t},Td=new rc,_d=g.createContext(Td);function Lb({children:t}){return T.jsx(_d.Provider,{value:Td,children:t})}const pn=g.createContext(void 0),Fb=()=>{const t=window.location.origin,e=le();return(e==null?void 0:e.host)||t},kb=({children:t,appContext:e,locale:s="en",resolver:r,rootUrl:o,descriptorResolver:n})=>{const[i,a]=g.useState(!1),[c,d]=g.useState(),[u,h]=g.useState(),f=o||Fb(),p=g.useMemo(()=>e??"app/system",[e]);g.useEffect(()=>{async function E(){const k=(Array.isArray(p)?p:[p]).map(V=>(n||wl(V))()),I=(await Promise.allSettled(k)).map(V=>{if(V.status==="rejected"){m.warn("Failed to load localization descriptor",V.reason);return}return V.value}).filter(V=>!!V).reverse().reduce((V,N)=>{const Y=N.path;return Object.keys(N.namespaces).forEach(Oe=>{const ve=N.namespaces[Oe];ve.basePath=Y}),{...V,namespaces:{...V.namespaces,...N.namespaces}}},{});d(I)}E()},[p,n]),g.useEffect(()=>{async function E(){if(c){const _=f,{translations:k}=await _l.init({lang:s,descriptor:c,defaultNamespace:"common",resolver:r,rootUrl:_});h(k),a(!0)}}E()},[s,c,r,f]);const w=g.useMemo(()=>i?{setLocale:E=>{u&&(u.currentLocale=E)}}:{setLocale:()=>{throw new Error("Translations not ready")}},[i,u]),v=i?t:null;return T.jsx(pn.Provider,{value:w,children:v})},Nb=()=>{const t=g.useContext(pn);if(!t)throw new Error("useTranslationContainerContext must be used within a TranslationContainerProvider");return t},Ub=()=>{const t=at.type;return G({modelId:t,modelType:at.type,options:{}})};function jb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ub();return T.jsx(o,{...r,children:T.jsx(t,{...e,canvasDispatcher:s})})}}const Bb=(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},Kb=(t,e,s)=>{const r=new Uint8ClampedArray(e*s*4);for(let o=0;o<t.length;o++){const n=t.charCodeAt(o),i=(n>>5&7)*255/7,a=(n>>2&7)*255/7,c=(n&3)*255/3,d=o*4;r[d]=i,r[d+1]=a,r[d+2]=c,r[d+3]=255}return r};function Hb({ctx:t,format:e,dataString:s,width:r,height:o,pixelSize:n}){const i=e==="base64"?Bb(s,r,o):Kb(s,r,o),a=new ImageData(i,r,o),c=document.createElement("canvas");c.width=r,c.height=o;const d=c.getContext("2d");d==null||d.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 zb=m.createLogger({name:"canvas-streamer"});zb.debug("main-view component loaded");const Fr=10,Id=io.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,d]=g.useState();g.useEffect(()=>{const h=t.addNamedEndpoint(n,{apiPath:i,fps:r,width:s,height:e,id:n});d(h)},[t]);const u=g.useCallback(h=>{if(a.current&&o){const f=a.current.getContext("2d");f&&Hb({ctx:f,format:"base64",dataString:h,height:e,width:s,pixelSize:Fr})}},[s,e,o]);return g.useEffect(()=>{c&&(c.onFrame=u,c.width=s,c.height=e,c.fps=r)},[c,u,s,e,r]),o&&oi.createPortal(T.jsx(Vb,{children:T.jsx(Yb,{children:T.jsx("canvas",{ref:a,width:s*Fr,height:e*Fr,style:{border:"1px solid black"}})})}),document.body)}),Gb=jb(Id),Vb=no.div`
182
+ `;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})]})},gb={setModel:()=>!1},vr=g.createContext(gb),pb=()=>{const t=g.useContext(vr);if(t==null)throw new Error("useModels must be used within a KosModelProvider");return t.model},pd=({children:t})=>{const[e,s]=g.useState(),r=g.useCallback(o=>(s(o),!0),[s]);return T.jsx(vr.Provider,{value:{model:e,setModel:r},children:t})},md=p.createLogger({name:"kos-model-hierarchy-context"}),mb={models:[],addModel:()=>{md.debug("Default implementation being used. Do Nothing.")}},Mr=g.createContext(mb),yb=({children:t})=>{const[e,s]=g.useState([]),r=g.useCallback(o=>{e.includes(o)||(md.debug("adding to hierarchy context",o.id),s(n=>[...n,o]))},[e]);return T.jsx(Mr.Provider,{value:{models:e,addModel:r},children:t})},bb=()=>!0,yd=t=>{const e=g.useContext(Mr);if(!e)throw new Error("useContextModelHierarchy must be used within a KosModelCollectionProvider");const s=(t==null?void 0:t.filter)||bb;return g.useMemo(()=>e.models.filter(s),[e.models,s])},wb=t=>yd({filter:s=>{const r=me(s.id);return(r==null?void 0:r.type)===t}})[0],vb=p.createLogger({name:"kos-model-loader"}),Mb=()=>T.jsx("div",{}),bd=({fallback:t,children:e,...s})=>T.jsx(pd,{children:T.jsx(gd,{fallback:t,children:T.jsx(g.Suspense,{children:T.jsx(wd,{...s,children:e})})})}),wd=t=>{const[e,s]=g.useState(),[r,o]=g.useState(!1),{setModel:n}=g.useContext(vr),i=g.useContext(Mr);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 vb.error(t.error),new Error(t.error);const a=t.loading||T.jsx(Mb,{});return T.jsx(T.Fragment,{children:e&&r?t.children:a})},$s={header:{title:"Model",createLabel:"Create new Model",deleteLabel:"Delete"},createModal:{okText:"OK",cancelText:"Cancel",title:"Create New Model"}},vd=g.createContext($s),Eb=({translations:t=$s,children:e})=>{const s={header:{...$s.header,...t.header},createModal:{...$s.createModal,...t.createModal}};return T.jsx(vd.Provider,{value:s,children:e})};function Tb(t,e){const s=S.create(t,!1,e),r=s.whenReady().then(()=>s);return mo(r)}const Md=g.createContext(void 0),_b=(t={models:{},preloadModels:[]},e)=>{const s=Tb(t,e),r=({children:o})=>{const n=s.read(),[i,a]=g.useState(n.isOnline);return g.useEffect(()=>{const c=H(()=>{a(n.isOnline)});return()=>{c()}},[n]),T.jsx(Md.Provider,{value:{kosCore:n,online:i},children:o})};return{KosCoreContextProvider:io.observer(r)}},Ed=()=>{const t=g.useContext(Md);if(t===void 0)throw new Error("useKosCore must be used within a KosCoreContextProvider");return t},Ib=8,Sb=(t=0)=>new Promise(e=>{setTimeout(()=>{e(!0)},2**t*10)}),Fe=new Map;function Ob(t,e){if(Fe.has(t)){const s=Fe.get(t);if(s.status==="finished"){const r=S.getInstance().modelManager.getModelById(t);return{kosModel:r,model:r==null?void 0:r.modelData}}else throw s.promise}else{const s=e().then(()=>{Fe.set(t,{status:"finished",key:t})},o=>{throw Fe.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Fe.set(t,r),s}}function $b(t,e){return Ob(t,e)}async function Db(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 u=typeof o=="string"?t.modelManager.getModelFactory(o):r;if(!u)throw Error("No Factory Specified. Cannot create a new instance");c=u.build(s,n)}const d=t.modelManager.getModelById(s);if(!d){if(a>Ib)throw Error(`KOS Model ${s} has not been found`);await Sb(a),a=a+1}return await(d==null?void 0:d.whenReady()),d?(c=d.modelData,{kosModel:d,model:c}):{kosModel:void 0,model:void 0}}const G=t=>{const{modelId:e,modelType:s,activate:r,destroyOnUnmount:o}=t,n=Ed(),[i,a]=g.useState(!1),[c,d]=g.useState(),{kosModel:u,model:h}=$b(e||s||"",()=>Db(n.kosCore,t));return g.useEffect(()=>{async function f(){try{return await n.kosCore.whenReady(),r&&await(u==null?void 0:u.fsm.transitionTo(x.GO_ACTIVE,b.ACTIVE)),a(!0),u}catch(w){d(w.message)}}let m;return n.kosCore&&e&&f().then(w=>{m=H(()=>{const v=(w==null?void 0:w.status)===b.READY;a(v)})}).catch(w=>{console.error(w)}),()=>{if(r){if(h!=null&&h.id){const w=n.kosCore.modelManager.getModelById(h.id);w==null||w.fsm.transitionTo(x.GO_INACTIVE,b.INACTIVE).then(()=>{if(o){const v=h.id;Ue(h).then(()=>{Fe.delete(v),m==null||m()})}})}}else o&&h&&Ue(h).then(()=>{Fe.delete(e),m==null||m()})}},[r,o,n.kosCore,u,h,e]),{model:h,ready:i,error:c,status:{model:h,ready:i,error:c},KosModelLoader:bd}},un=()=>{const t=Ns.type;return G({modelId:t,modelType:Ns.type,options:{}})},hn=g.createContext(void 0),Cb=({children:t})=>{const{model:e,ready:s}=un(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(hn.Provider,{value:r,children:t})},Pb=()=>{const t=g.useContext(hn);if(!t)throw new Error("useKosTimeContext must be used within a KosTimeProvider");return t},fn=()=>{const t=zs.type;return G({modelId:t,modelType:zs.type,options:{}})};function Rb(t){return()=>e=>{const{model:s,status:r,KosModelLoader:o}=fn();return T.jsx(o,{...r,children:T.jsx(t,{...e,softwareInfo:s})})}}const gn=g.createContext(void 0),xb=({children:t})=>{const{model:e,ready:s}=fn(),r=g.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(gn.Provider,{value:r,children:t})},Ab=()=>{const t=g.useContext(gn);if(!t)throw new Error("useSoftwareInfoContext must be used within a SoftwareInfoProvider");return t},Td=new rc,_d=g.createContext(Td);function Lb({children:t}){return T.jsx(_d.Provider,{value:Td,children:t})}const pn=g.createContext(void 0),kb=()=>{const t=window.location.origin,e=le();return(e==null?void 0:e.host)||t},Fb=({children:t,appContext:e,locale:s="en",resolver:r,rootUrl:o,descriptorResolver:n})=>{const[i,a]=g.useState(!1),[c,d]=g.useState(),[u,h]=g.useState(),f=o||kb(),m=g.useMemo(()=>e??"app/system",[e]);g.useEffect(()=>{async function E(){const F=(Array.isArray(m)?m:[m]).map(V=>(n||wl(V))()),I=(await Promise.allSettled(F)).map(V=>{if(V.status==="rejected"){p.warn("Failed to load localization descriptor",V.reason);return}return V.value}).filter(V=>!!V).reverse().reduce((V,N)=>{const Y=N.path;return Object.keys(N.namespaces).forEach(Oe=>{const ve=N.namespaces[Oe];ve.basePath=Y}),{...V,namespaces:{...V.namespaces,...N.namespaces}}},{});d(I)}E()},[m,n]),g.useEffect(()=>{async function E(){if(c){const _=f,{translations:F}=await _l.init({lang:s,descriptor:c,defaultNamespace:"common",resolver:r,rootUrl:_});h(F),a(!0)}}E()},[s,c,r,f]);const w=g.useMemo(()=>i?{setLocale:E=>{u&&(u.currentLocale=E)}}:{setLocale:()=>{throw new Error("Translations not ready")}},[i,u]),v=i?t:null;return T.jsx(pn.Provider,{value:w,children:v})},Nb=()=>{const t=g.useContext(pn);if(!t)throw new Error("useTranslationContainerContext must be used within a TranslationContainerProvider");return t},Ub=()=>{const t=at.type;return G({modelId:t,modelType:at.type,options:{}})};function jb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ub();return T.jsx(o,{...r,children:T.jsx(t,{...e,canvasDispatcher:s})})}}const Bb=(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},Kb=(t,e,s)=>{const r=new Uint8ClampedArray(e*s*4);for(let o=0;o<t.length;o++){const n=t.charCodeAt(o),i=(n>>5&7)*255/7,a=(n>>2&7)*255/7,c=(n&3)*255/3,d=o*4;r[d]=i,r[d+1]=a,r[d+2]=c,r[d+3]=255}return r};function Hb({ctx:t,format:e,dataString:s,width:r,height:o,pixelSize:n}){const i=e==="base64"?Bb(s,r,o):Kb(s,r,o),a=new ImageData(i,r,o),c=document.createElement("canvas");c.width=r,c.height=o;const d=c.getContext("2d");d==null||d.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 zb=p.createLogger({name:"canvas-streamer"});zb.debug("main-view component loaded");const kr=10,Id=io.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,d]=g.useState();g.useEffect(()=>{const h=t.addNamedEndpoint(n,{apiPath:i,fps:r,width:s,height:e,id:n});d(h)},[t]);const u=g.useCallback(h=>{if(a.current&&o){const f=a.current.getContext("2d");f&&Hb({ctx:f,format:"base64",dataString:h,height:e,width:s,pixelSize:kr})}},[s,e,o]);return g.useEffect(()=>{c&&(c.onFrame=u,c.width=s,c.height=e,c.fps=r)},[c,u,s,e,r]),o&&oi.createPortal(T.jsx(Vb,{children:T.jsx(Yb,{children:T.jsx("canvas",{ref:a,width:s*kr,height:e*kr,style:{border:"1px solid black"}})})}),document.body)}),Gb=jb(Id),Vb=no.div`
182
183
  display: flex;
183
184
  flex-direction: column;
184
185
  gap: 8px;
@@ -190,5 +191,5 @@ ${d}topics:${e}
190
191
  display: flex;
191
192
  flex-direction: column;
192
193
  align-items: center;
193
- `,Sd=()=>{const t=Js.type;return G({modelId:t,modelType:Js.type,options:{}})};function qb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Sd();return T.jsx(o,{...r,children:T.jsx(t,{...e,device:s})})}}function Wb(t,e,s){const r=new Promise(o=>{S.getInstance().whenReady().then(()=>{const{model:n}=S.getInstance().modelManager.createModelInstance(t,e??t,s);return n.whenReady().then(()=>{o(n.modelData)})})});return mo(r)}function Qb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=un();return T.jsx(o,{...r,children:T.jsx(t,{...e,kosTime:s})})}}const Od=()=>{const t=Xt.type;return G({modelId:t,modelType:Xt.type,options:{}})};function Zb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Od();return T.jsx(o,{...r,children:T.jsx(t,{...e,networkInterfaceContainer:s})})}}const $d=()=>{const t=Hs.type;return G({modelId:t,modelType:Hs.type,options:{}})};function Xb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=$d();return T.jsx(o,{...r,children:T.jsx(t,{...e,oTA:s})})}}function Jb(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 ew(t){const e=g.useRef(null),s=t.onAlert;return Jb(e,s),T.jsx("div",{ref:e,style:{width:"100%"},children:t.children})}const tw=t=>{var d;const{stateProp:e}=t,[s,r]=g.useState((d=t.stateProp)==null?void 0:d.value),[o,n]=g.useState(!1),[i,a]=g.useState(void 0);return g.useEffect(()=>{async function u(h){try{h&&(await ne(h),n(!0))}catch(f){a(f.message)}}u(e)},[e]),g.useEffect(()=>{const u=H(()=>{e&&o&&r(e.value)});return()=>{u()}},[o,e]),[s,{ready:o,error:i}]},Dd=()=>{const[t,e]=g.useState(!1),[s,r]=g.useState([]),o=ct.type,n=G({modelId:o,modelType:ct.type,options:{}});return g.useEffect(()=>{const i=H(()=>{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 sw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Dd();return T.jsx(o,{...r,children:T.jsx(t,{...e,storageDeviceContainer:s})})}}const kr=m.createLogger({name:"use-timer"}),rw=({timerName:t,onTimerExpired:e,onTimerTick:s,timerEventActions:r,autoStart:o})=>{const n=id.getTimer(t);g.useEffect(()=>{if(!n){console.warn(`Timer with name ${t} does not exist.`);return}const d=$(an,u=>{const{name:h,action:f,remainingTime:p}=u==null?void 0:u.body;h===t&&(f===ln?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(),()=>{d.unsubscribe()}},[o,e,r,t,n]),g.useEffect(()=>{if(!n||!s)return;const d=`${cn}/${t}`,u=$(d,h=>{const{name:f,remainingTime:p}=h==null?void 0:h.body;f===t&&s({name:f,remainingTime:p,timer:n})});return()=>{u.unsubscribe()}},[s,t,n]);const i=g.useCallback(()=>{n?n.start():kr.warn(`Timer with name ${t} does not exist.`)},[n,t]),a=g.useCallback(()=>{n?n.reset():kr.warn(`Timer with name ${t} does not exist.`)},[n,t]),c=g.useCallback(()=>{n?n.pause():kr.warn(`Timer with name ${t} does not exist.`)},[n,t]);return{timer:n,start:i,reset:a,pause:c}},ow=t=>{const e=/[\\^$.*+?()[\]{}|]/g;return RegExp(e.source).test(t)?t.replace(e,"\\$&"):t},nw=t=>t instanceof RegExp,iw=t=>typeof t=="string",aw=(t,e,s)=>{if(t===""||e==="")return t;let r=e;nw(r)||(r=new RegExp("("+ow(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},Cd=(t,e,s)=>{let r=t;return Array.isArray(r)||(r=[r]),r.flatMap(o=>iw(o)?aw(o,e,s):o)};function cw(t,e){let s=t;return Object.entries(e).forEach(([r,o])=>{const n=new RegExp(`<${r}>(.*?)</${r}>|<${r}/>`,"g");s=Cd(s,n,(i,a)=>o.type==="br"?T.jsx("br",{}):g.cloneElement(o,{key:`${r}-${a}`},i))}),s}const lw=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=cw(a,o||{});return T.jsx("span",{className:t.className,children:c})},Ze=new Map;function dw(t,e){if(Ze.has(t)){const s=Ze.get(t);if(s.status==="finished")return s.result;throw s.promise}else{const s=e().then(o=>{Ze.set(t,{status:"finished",result:o})},o=>{throw Ze.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Ze.set(t,r),s}}function so(t,e){return dw(t,e)}const uw=async()=>{const t=await Ka(_e.type);return await ne(t.model),t.model},hw=async(t,e,s)=>{const r=t.resolveNamespace(e);await ne(r);for(const o of s){const n=t.resolveNamespace(o);await ne(n),Ze.set(o,{status:"finished",result:n})}return r},fw=(t,e)=>{const s=[t].flat(),[r,...o]=s,n=so(_e.type,uw),i=s.join("__"),a=so(i,()=>hw(n,r,o)),c=g.useMemo(()=>({exists:u=>{const h=e!=null&&e.keyPrefix?`${e.keyPrefix}.${u}`:u;return a?a.exists(h):!1}}),[e==null?void 0:e.keyPrefix,a]);return{t:g.useCallback((u,h)=>{const f=e!=null&&e.keyPrefix?`${e.keyPrefix}.${u}`:u;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}},Pd=()=>{const t=_e.type;return G({modelId:t,modelType:_e.type,options:{}})};function gw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Pd();return T.jsx(o,{...r,children:T.jsx(t,{...e,translationContainer:s})})}}const pw=t=>G({modelId:t,modelType:Qt.type}),mn=()=>G({modelId:nt.type,modelType:nt.type,options:{}}),mw=({troubleType:t,condition:e})=>{const{model:s}=mn(),[r,o]=g.useState(!1),[n,i]=g.useState([]),a=g.useCallback(()=>{var c,d;return n.length>0&&((c=n[0])!=null&&c.resolvable)?(d=n[0])==null?void 0:d.resolve():Promise.resolve(void 0)},[n]);return g.useEffect(()=>H(()=>{const d=(t?s==null?void 0:s.troubles.getIndexByKey("byType",t):s==null?void 0:s.troubles.data)||[],u=e?d.filter(e):d;o(u.length>0),i(u)}),[e,s,t]),[r,a,n.length>0?n[0]:void 0,n]};function yw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=mn();return T.jsx(o,{...r,children:T.jsx(t,{...e,troubleContainer:s})})}}const Rd=()=>{const t=es.type,e=G({modelId:t,modelType:es.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=H(()=>{var d,u,h;r(((d=e.model)==null?void 0:d.isUsbInserted)??!1),n(((u=e.model)==null?void 0:u.hasAvailableUpdates)??!1),a(((h=e.model)==null?void 0:h.data)??[])});return()=>{c()}},[e.model]),{...e,inserted:s,updateAvailable:o,updates:i}};function bw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Rd();return T.jsx(o,{...r,children:T.jsx(t,{...e,usbUpdateContainer:s})})}}const ww=({path:t,propKey:e})=>{const{status:s}=G({modelType:zt.type,modelId:t,options:{path:t}}),[r,o]=g.useState(!1),[n,i]=g.useState(),[a,c]=g.useState(""),[d,u]=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]):u(`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:d,updateValue:h}},vw=(t,e)=>{switch(e.type){case"UPDATE":return e.payload;default:return t}},xd=({configProperty:t,optionsTransformer:e})=>{const[s,r]=g.useState(!1),[o,n]=g.useState(""),[i,a]=g.useReducer(vw,{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(d=>{var h;let u="factory";typeof d=="string"?u=d:(h=d==null?void 0:d.target)!=null&&h.value&&(u=d.target.value),u&&(t==null||t.updateProperty(u))},[t]);return g.useEffect(()=>{async function d(u){try{u&&(await ne(u),r(!0))}catch(h){n(h.message)}}d(t)},[t]),g.useEffect(()=>{const d=H(()=>{if(t&&s){let u=[];e&&(u=e(t.options)),a({type:"UPDATE",payload:{value:String(t.value),displayValue:t.displayValue,significantValue:t.significantValue,unit:t.unit,options:t.options,mappedOptions:u,updateProperty:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}})}});return()=>{d()}},[t,e,s]),{...i,configSelectProps:{onChange:c,value:i.value,options:e?i.mappedOptions||[]:i.options||[]},ready:s,error:o}};function Mw(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 Ew(t,e){return new Date(t,e,0).getDate()}function Ad(t,e){const s=Mw(e,t),r=[];for(let o=1;o<=s;o++)r.push(o);return r}function Ld(){return[...Array(12).keys()].map(e=>new Date(0,e).getMonth())}function Fd(t=[2018,2028]){const e=[];for(let s=t[0];s<=t[1];s++)e.push(s);return e}function kd(t,e=[2018,2028]){const s=Fd(e);return t==="long"?s:s.map(r=>Number(r.toString().substring(2)))}function yn(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 Tw({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),d=new Intl.DateTimeFormat(t,{year:o.year}).format(a),u=new Intl.DateTimeFormat(t,{day:o.day}).format(a);return n?n=="MMDDYY"?`${c} ${u} ${d}`:n==="DDMMYY"?`${u} ${c} ${d}`:n==="YYMMDD"?`${d} ${c} ${u}`:`${d} ${u} ${c}`:new Intl.DateTimeFormat(t,o).format(a)}function ue(t){return t.toString().length===2?new Date(Date.parse(`01 Jan 20${t}`)).getFullYear():t}function _w(t){return typeof t=="string"?new Date(Date.parse(`01 ${t.substring(0,3)} 2023`)).getMonth()+1:t}function Nd(t,e,s){const r=ue(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 Rt(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 xt(t,e){return new Date(t,e,0).getDate()}function Ud(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=bn(n,r),d=Bd(n,r,t),u=Kd(i,t),h=Hd(i,t),f=wn(e,s),p=zd(e,s,t,o),w=Yd(s,e,p),v=Gd(t,a);return{daysArray:f,monthsArray:u,yearsArray:c,yearsOptionsArray:d,monthsOptionsArray:h,daysOptionsArray:p,calendarDayArray:w,dayNamesArray:v}}function bn(t="long",e=[2018,2028]){return g.useMemo(()=>kd(t,e),[t,e])}function Bd(t="long",e=[2018,2028],s="en-US"){const r=bn(t,e);return g.useMemo(()=>r.map(n=>({label:n.toLocaleString(s).replace(",",""),value:n})),[s,r])}function Kd(t,e="en-US"){return g.useMemo(()=>yn(t,e),[t,e])}function Hd(t,e="en-US"){const s=g.useMemo(()=>Ld(),[]),r=g.useMemo(()=>yn(t,e),[t,e]);return g.useMemo(()=>[...Array(12).keys()].map(n=>({label:r[n],value:Number(s[n])})),[r,s])}function wn(t,e){const s=ue(t);return g.useMemo(()=>Ad(s,e),[e,s])}const Iw=(t,e,s,r=[])=>{const o=new Date(t,e,s).getDay();return r.length>0&&r.includes(o)};function zd(t,e,s="en-US",r=[]){const o=wn(t,e);return g.useMemo(()=>o.map(i=>({label:i.toLocaleString(s),value:i,disabled:Iw(t,e,i,r)})),[r,s,e,o,t])}function Gd(t="en-US",e="short"){return g.useMemo(()=>Ud(t,e),[t,e])}function Vd({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:$e.format(n,r)}}function Yd(t,e,s){return g.useMemo(()=>Nd(t,e,s),[t,e,s])}var qd=(t=>(t.MMDDYY="MMDDYY",t.DDMMYY="DDMMYY",t.YYMMDD="YYMMDD",t.YYDDMM="YYDDMM",t))(qd||{});function Sw({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:d=[]}={}}){const[u,h]=g.useState(e),[f,p]=g.useState(c),[w,v]=g.useState(s),[E,_]=g.useState(r);g.useEffect(()=>{h(e)},[e]),g.useEffect(()=>{v(s)},[s]),g.useEffect(()=>{_(r)},[r]);const{yearsArray:k,yearsOptionsArray:te,monthsArray:R,monthsOptionsArray:I,daysArray:V,daysOptionsArray:N,calendarDayArray:Y,dayNamesArray:Oe}=jd({locale:t,year:u,yearRange:f,month:w,formatOptions:{yearFormat:o,monthFormat:n,dayFormat:i},daysOfWeekFilter:d}),{formattedDate:ve}=Vd({year:u,month:w,day:E,formatString:a});return{dateActions:{setYear:h,setYearRange:p,setMonth:v,setDay:_,nextMonth:()=>{const q=w<11?ue(u):ue(u+1),re=w<11?w+1:0;if(!Rt(q,re,E)){const Ae=xt(q,re);_(Ae)}re===0&&h(q),v(re)},previousMonth:()=>{const q=ue(w===0?u-1:u),re=w===0?11:w-1;if(!Rt(q,re,E)){const Ae=xt(q,re);_(Ae)}re===11&&h(q),v(re)},nextYear:()=>{const q=u<f[1]?u+1:f[0],re=ue(q);if(Rt(re,w,E))h(q);else{const Ae=xt(ue(u+1),w);_(Ae),h(q)}},previousYear:()=>{const q=u>f[0]?u-1:f[0],re=ue(q);if(Rt(re,w,E))h(q);else{const Ae=xt(ue(u-1),w);_(Ae),h(q)}}},dateState:{year:u,yearRange:f,month:w,day:E,yearsArray:k,yearsOptionsArray:te,monthsArray:R,monthsOptionsArray:I,daysArray:V,daysOptionsArray:N,calendarDayNames:Oe,calendarDayArray:Y,formattedDate:ve}}}function Wd({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:d,ready:u}=G({modelId:X.type,modelType:X.type,options:{}}),h=typeof t=="string"?$e.parseISO(t):t;return g.useEffect(()=>{c?a(""):e?a($e.format(h,e)):u&&a($e.format(h,d!=null&&d.selectedDateFormat?d==null?void 0:d.selectedDateFormat:""))},[c,t,e,h,d,u]),g.useEffect(()=>{s?n($e.format(h,s)):u&&n($e.format(h,d!=null&&d.selectedTimeFormat?d==null?void 0:d.selectedTimeFormat:""))},[t,s,h,d,u]),{formattedDate:i,formattedTime:o}}const Qd=({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:d}=Wd({date:a,options:{ignoreDateFormat:!0}});return g.useEffect(()=>{const u=Number(t),h=Math.floor(u/3600),f=Math.floor(u%3600/60),p=u%60;s(h),o(f),i(p);const w=new Date;w.setHours(0,0,0,0);const v=new Date(w.getTime()+u*1e3);c(new Date(v))},[t]),{hours:e,minutes:r,seconds:n,formattedTime:d,timeActions:{setHours:s,setMinutes:o,setSeconds:i}}},Ow=({configProperty:t})=>{const{value:e}=xd({configProperty:t}),s=parseInt(e||"0",10),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}=Qd({secondsFromMidnight:s}),c=g.useRef();return g.useEffect(()=>{const d=r*3600+o*60+n;return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{t&&t.updateProperty(d.toString())},100),()=>{c.current&&clearTimeout(c.current)}},[t,r,o,n]),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}};function $w(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 Dw=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),Cw=(t=Dw)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=G({modelType:X.type,modelId:X.type,options:{}});g.useEffect(()=>{const c=H(()=>{s((n==null?void 0:n.dateFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=H(()=>{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 u;let d="";typeof c=="string"?d=c:(u=c==null?void 0:c.target)!=null&&u.value&&(d=c.target.value),d&&(n==null||n.setSelectedDateFormat(d))},[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}}},Pw=t=>T.jsx("option",{title:t,value:t,children:t},t),Zd="kos:service:region:settings",Xd="timeZone",Rw=`${Zd}-${Xd}`,xw=(t=Pw)=>{const[e,s]=g.useState([]),[r,o]=g.useState(""),{model:n,ready:i}=G({modelType:X.type,modelId:X.type,options:{}}),a=Ke.factory(Rw)({path:Zd,attribute:Xd});g.useEffect(()=>{const d=H(()=>{s((n==null?void 0:n.timeZones.map(t))||[]),n!=null&&n.timeZones.length&&to(n==null?void 0:n.timeZones[0])});return()=>{d()}},[n,i,t]),g.useEffect(()=>{const d=H(()=>{o(a.value||"")});return()=>{d()}},[a.value]);const c=g.useCallback(d=>{var h;let u="factory";typeof d=="string"?u=d:(h=d==null?void 0:d.target)!=null&&h.value&&(u=d.target.value),u&&to(u)},[]);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}}},Jd="kos:service:region",eu="regionId",Aw=`${Jd}-${eu}`,Lw=t=>T.jsx("option",{title:t,value:t,children:t},t),tu=(t=Lw)=>{const[e,s]=g.useState([]),[r,o]=g.useState("factory"),{model:n,ready:i}=G({modelType:X.type,modelId:X.type,options:{}}),a=Ke.factory(Aw)({path:Jd,attribute:eu});g.useEffect(()=>{const d=H(()=>{s((n==null?void 0:n.availableRegions.map(t))||[])});return()=>{d()}},[n,i,t]),g.useEffect(()=>{const d=H(()=>{o(a.value||"factory")});return()=>{d()}},[a.value]);const c=g.useCallback(d=>{var h;let u="factory";typeof d=="string"?u=d:(h=d==null?void 0:d.target)!=null&&h.value&&(u=d.target.value),u&&od(u)},[]);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}}},Fw=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),kw=(t=Fw)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=G({modelType:X.type,modelId:X.type,options:{}});g.useEffect(()=>{const c=H(()=>{s((n==null?void 0:n.timeFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=H(()=>{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 u;let d="";typeof c=="string"?d=c:(u=c==null?void 0:c.target)!=null&&u.value&&(d=c.target.value),d&&(n==null||n.setSelectedTimeFormat(d))},[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}}},Nw=(t,e)=>g.useMemo(()=>Do(t),e),Uw={config:{attributes:!0,childList:!0,subtree:!0}};function jw(t,e,s=Uw){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 su={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}},Nr=m.createLogger({name:"usePressGesture",group:"kos-hooks"});function Bw({onPressed:t,onRelease:e,intersectionStrategy:s=su}){const r=g.useRef(!1),o=fu.useGesture({onDragStart:c=>{Nr.info("onDragStart",c.type),s.validateStart(c)&&(t&&t(),r.current=!0)},onDrag:c=>{Nr.info("onDrag",c.type),r.current&&s.validateStop(c)&&(e&&e(),r.current=!1)},onDragEnd:c=>{Nr.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 ru=()=>{const[t,e]=g.useState(!1),s=S.getInstance();return g.useEffect(()=>{const r=H(()=>{s&&s.reloading!==t&&e(s.reloading)});return()=>{r()}},[s,t]),[t]};function ou(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 ro(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 nu(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 iu({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=ou(t,e),i=ro(60,s),a=ro(60,r),c=nu(o);return{hourOptions:n,minuteOptions:i,secondOptions:a,amPmOptions:c}}function au(t,e){return $e.format(t,e)}function cu({formatOptions:t,initialDate:e=new Date,locale:s="en-US",format:r="HH:mm"}){const[o,n]=g.useState(e),i=g.useCallback(v=>{n(E=>{const _=new Date(E);return _.setHours(Number(v)),_})},[]),a=g.useCallback(v=>{n(E=>{const _=new Date(E);return _.setMinutes(Number(v)),_})},[]),c=g.useCallback(v=>{n(E=>{const _=new Date(E);return _.setSeconds(Number(v)),_})},[]),d=g.useCallback(v=>{const E=new Date(v);n(E)},[]),u=au(o,r),{hourOptions:h,minuteOptions:f,secondOptions:p,amPmOptions:w}=iu({formatOptions:t,locale:s});return{amPmOptions:w,formattedTime:u,hourOptions:h,minuteOptions:f,secondOptions:p,setHours:i,setMinutes:a,setSeconds:c,setTime:d,time:new Date(o)}}const Kw=t=>{const{regionModel:e}=tu(),s=g.useMemo(()=>({hour12:e==null?void 0:e.is12HourTimeFormat}),[e==null?void 0:e.is12HourTimeFormat]);return cu({...t,locale:e==null?void 0:e.regionId,format:e==null?void 0:e.selectedTimeFormat,formatOptions:s})};function Hw(t){return e=>{const[s]=ru();return s?T.jsx(fd,{message:"Wait a moment while your project reloads..."}):T.jsx(t,{...e})}}const ti=m.createLogger({name:"studio-properties-service",group:"Services"}),zw="/api/kos/studio/properties",lu=async t=>{if(ti.debug("sending GET for studio-properties"),!t)throw ti.error("connectionId is undefined"),new Error("connectionId is undefined");return await Se.get(zw,{},{destinationAddress:t,timeout:500})},Gw=Object.freeze(Object.defineProperty({__proto__:null,getStudioProperties:lu},Symbol.toStringTag,{value:"Module"}));var Vw=Object.defineProperty,Yw=Object.getOwnPropertyDescriptor,qw=(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=(r?i(e,s,o):i(o))||o);return r&&o&&Vw(e,s,o),o};const du="studio-properties-model",Ww="/kos/studio/properties",si={"kos.studio.tool.legacy":1};let oo=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=De(),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:Ww,destinationAddress:this.connectionId,callback:s=>{this.logger.error(`Received studio-properties message for connection ${this.connectionId}: ${JSON.stringify(s)}`)}});const[t,e]=await lu(this.connectionId);if(t){this.logger.error(`Error loading studio-properties: ${t}`),this.data.setValues(si);return}if(e){const s=Object.keys(e).reduce((r,o)=>(r[o]=e[o]??o,r),{});this.data.setValues(s??si),m.ifDebug(()=>this.logger.debug(`studio-properties loaded: ${JSON.stringify(s)}`))}}get(t){return this.data[t]}createObservableProperty(t){return Do(()=>this.get(t))}};oo=qw([P(du)],oo);const Qw=new pe({class:oo,type:du});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:()=>io.observer});exports.AuthState=Wa;exports.BrowserKosRouter=oc;exports.BrowserRouter=Bo;exports.CanvasDispatcher=at;exports.CanvasDispatcherServices=Hm;exports.CanvasRenderer=Xo;exports.CanvasStreamer=Gb;exports.CanvasStreamerBase=Id;exports.ChildModels=Lt;exports.CompanionDecoratorMixin=Jl;exports.CompanionParentModel=Ps;exports.ConfigBean=zt;exports.CoreExtensionManager=By;exports.CoreModels=nn;exports.CreateModelTranslationsContext=vd;exports.CreateModelTranslationsProvider=Eb;exports.DateDisplayFormat=qd;exports.DateHelpers=Du;exports.DependencyLifecycle=j;exports.DependencyModels=L;exports.Device=Js;exports.DeviceServices=dy;exports.DomIntersectionStrategy=su;exports.EVENT_KOS_MODEL_READY=uo;exports.EVENT_TROUBLE_ADDED=ig;exports.EVENT_TROUBLE_REMOVED=ag;exports.EXTENSION_CANVAS_RENDERER=Z;exports.EXTENSION_FEATURE_FLAG_RESOLVER=Qi;exports.EXTENSION_TROUBLE_DATA_MAPPER=Bs;exports.EXTENSION_TROUBLE_MAPPER=ls;exports.ErrorBoundaryWithFallback=gd;exports.EventBus=yu;exports.EventBusFunctional=wu;exports.EventBusState=Mu;exports.ExtensionManager=O;exports.FUTURE_CONTAINER_MODEL_TYPE=Rc;exports.FUTURE_MODEL_TYPE=Ec;exports.FUTURE_NOT_ASSIGNED=Po;exports.FeatureFlagService=Zi;exports.FetchError=ce;exports.FutureContainerFactory=Pe;exports.FutureContainerModel=Ac;exports.FutureEndState=Ce;exports.FutureFactory=pt;exports.FutureHandler=hr;exports.FutureManager=je;exports.FutureModel=$c;exports.FutureService=At;exports.HEADER_CACHE_CONTROL=ci;exports.HEADER_CONTENT_TYPE=ai;exports.HEADER_DESTINATION_ADDR=Ie;exports.HEADER_FOS_REQUEST_ID=li;exports.HEADER_METHOD=rr;exports.HEADER_ORDERED=co;exports.HEADER_REQUEST_ID=ts;exports.HEADER_REQUEST_TYPE=ye;exports.HEADER_RESPONSE_ID=or;exports.HEADER_SOURCE_ADDR=ii;exports.HEADER_TOPIC=ni;exports.HEADER_URL=dt;exports.HEADER_WORK_TRACKER=lo;exports.HttpRouteHandlers=Ee;exports.KOS_MODEL_ID=Ds;exports.KeyValue=zo;exports.KeyValueServices=sp;exports.Kos=J;exports.KosConfigPropertySpec=Ke;exports.KosContainerIndex=Oo;exports.KosContextBean=sc;exports.KosContextManager=K;exports.KosCore=S;exports.KosCoreModelPropertyMapper=he;exports.KosDataContainer=$o;exports.KosDependencyTypes=ah;exports.KosExtensionUtils=xu;exports.KosFeatureFlags=Xi;exports.KosFetchMethods=_a;exports.KosGlobalConfig=vo;exports.KosHttpRouteManager=To;exports.KosLog=m;exports.KosLogManager=Kc;exports.KosLogManagerServices=cp;exports.KosMockEvents=hi;exports.KosModel=ka;exports.KosModelCollectionProvider=yb;exports.KosModelContainer=we;exports.KosModelContext=vr;exports.KosModelEvents=x;exports.KosModelFactory=jt;exports.KosModelFutureContainerMixin=ds;exports.KosModelLoader=bd;exports.KosModelLoaderDisplay=wd;exports.KosModelManager=ja;exports.KosModelProvider=pd;exports.KosModelRegistrationFactory=pe;exports.KosModelRegistry=eo;exports.KosModelState=b;exports.KosModelSymbol=ra;exports.KosModelVisitor=Pf;exports.KosObservableData=Xa;exports.KosRegistration=Jf;exports.KosSingletonRegistration=eg;exports.KosTime=Ns;exports.KosTimeContext=hn;exports.KosTimeProvider=Cb;exports.KosTimeServices=pp;exports.KosTimer=nd;exports.KosToken=rc;exports.KosTranslationProvider=kb;exports.KosTranslations=_l;exports.KosWSTransportStatus=Fa;exports.KosWsEvents=ss;exports.LOADER_FEATURE_FLAG=Gu;exports.LOGIN_HOST=di;exports.LOGIN_URL=gu;exports.LoadingMessage=fd;exports.LogBlock=Wt;exports.LogBlockContainer=mr;exports.LogConfig=kt;exports.LogStream=Kt;exports.LogStreamContainer=cs;exports.LogStreamServices=Sp;exports.MODEL_DELETION_DELAY=Ua;exports.MiddlewareChain=Za;exports.ModelEffects=Ne;exports.MultipleFutureHandler=Ag;exports.NestedModelContext=Mr;exports.NetworkInterface=tn;exports.NetworkInterfaceContainer=Xt;exports.NetworkInterfaceServices=vy;exports.ObservableData=De;exports.Ota=Hs;exports.OutsideAlerter=ew;exports.PLUGIN_EXTENSION_NAME=Au;exports.PORT=ui;exports.PROFILE_LOG_DEBUG=ji;exports.PROFILE_LOG_INFO=Bi;exports.PROFILE_RELAX_STORE_VALIDATION=Fu;exports.PROFILE_TOOLS_PREVIEW=Ui;exports.ParentModel=Ft;exports.PluginExtensionManager=Lu;exports.ProgressBar=fb;exports.ReferenceConfig=Ts;exports.RegionInfo=X;exports.RegionServices=yg;exports.RegistrationManager=C;exports.Registry=jy;exports.STATUS=ao;exports.ServiceFactory=ee;exports.SingletonKosModelRegistrationFactory=be;exports.SoftwareInfo=zs;exports.SoftwareInfoContext=gn;exports.SoftwareInfoProvider=xb;exports.SoftwareInfoServices=cm;exports.StateBean=Zt;exports.StateBeanServices=gm;exports.StateProp=qo;exports.StatePropServices=_m;exports.StorageDevice=tr;exports.StorageDeviceContainer=ct;exports.StorageDeviceServices=Iy;exports.StudioProperties=Qw;exports.StudioPropertiesServices=Gw;exports.SubscriptionHandlers=Q;exports.TIMER_END=ln;exports.TIMER_EVENT=an;exports.TOPIC_TIMER_TICK_EVENT=cn;exports.TimerManager=id;exports.TokenContext=_d;exports.TokenProvider=Lb;exports.Topics=Bt;exports.Trans=lw;exports.TransitionMap=_s;exports.Transitions=Mo;exports.Translation=Ys;exports.TranslationContainer=_e;exports.TranslationContainerContext=pn;exports.TranslationContext=Lm;exports.TransportFactory=Kr;exports.Trouble=Qt;exports.TroubleContainer=nt;exports.TroubleServices=Vp;exports.Troubles=ae;exports.UsbUpdate=on;exports.UsbUpdateContainer=es;exports.UsbUpdateServices=Ay;exports.WS_EVENT_TYPE=Il;exports.WebSocketEvents=Ut;exports.WebSocketTransport=tt;exports.WsEventFactory=Qo;exports.acceptOrgInvitation=hd;exports.addDaysToDate=Pi;exports.addFuture=_c;exports.addMonthsToDate=Ci;exports.api=Dc;exports.applyMixins=Tu;exports.arraysEqual=_u;exports.buildConfigBeanModel=dg;exports.buildFuture=jo;exports.buildFutureModel=Sc;exports.cancelFuture=Ic;exports.checkAppsStarted=og;exports.convert=Fo;exports.convertFileSizeRaw=Eu;exports.convertWithUnits=Tg;exports.createBaseMessage=Oa;exports.createBroadcastMessageResponse=Pa;exports.createCancellablePromise=ab;exports.createClient=Io;exports.createFosBaseMessage=Sa;exports.createHeaders=Mt;exports.createKosHtpMessageResponse=Ra;exports.createKosMessage=Da;exports.createKosMessageResponse=xa;exports.createKosModelFutureManager=zy;exports.createLazyKosModelFutureManager=Gy;exports.createMessageBody=xe;exports.createModelDependency=ba;exports.createOptionKey=Zu;exports.createPropKey=Be;exports.createReadableStream=Et;exports.createStudioMessage=Ia;exports.createStudioMessageRequest=$a;exports.createStudioMessageResponse=Ca;exports.debounce=ki;exports.del=na;exports.deleteFuture=Tc;exports.destroyKosModel=Ue;exports.evaluateScopes=hc;exports.executeChildrenModelLifecycle=Ma;exports.executeDependentModelLifecycle=vt;exports.executeListLifecycle=va;exports.extractTrailingWildcard=ca;exports.fetchModel=Wb;exports.findModel=cf;exports.findModels=Ha;exports.formatDate=Ai;exports.formatDateSince=Di;exports.formatDateTime=Fi;exports.formatTime=Li;exports.get=oa;exports.getAllKosCompanionModels=za;exports.getCalendarMonthArray=Nd;exports.getCompanionMixin=td;exports.getConfigBean=uc;exports.getDayStrings=Ud;exports.getDays=Ew;exports.getDaysArray=Ad;exports.getDaysInMonth=wo;exports.getDependenciesByLifecycle=wa;exports.getFormattedDate=Tw;exports.getFormattedMonth=_w;exports.getFormattedMonthsArray=yn;exports.getFormattedYear=ue;exports.getFormattedYearsArray=kd;exports.getFutures=Bg;exports.getHttpRouteHandlers=ia;exports.getKosCompanionModel=lf;exports.getKosLocalizationDescriptor=wl;exports.getKosMessageLogging=Gi;exports.getKosModel=Ka;exports.getKosModelSync=me;exports.getKosModelType=af;exports.getKosSessionKey=tc;exports.getLastDayOfMonth=xt;exports.getLocalizationDescriptor=Sm;exports.getLogLevel=zi;exports.getLogMessageToStudio=Vi;exports.getMessageBody=Br;exports.getMonthsArray=Ld;exports.getObservableCompanions=df;exports.getQueryParams=le;exports.getStartedApps=ng;exports.getTranslations=bl;exports.getYearsArray=Fd;exports.hasCompanionMixin=ed;exports.hasDecimals=lc;exports.hasHttpRouteHandlers=Rs;exports.hasKosModelFutureSupport=Vy;exports.hasKosProfile=Ur;exports.hasTrailingWildcard=la;exports.hslStringToHex=ea;exports.hslToHex=Ji;exports.httpDelete=lh;exports.initKosProvider=_b;exports.inspectCompanionMixin=Wy;exports.inspectFutureObservability=Yy;exports.isBoolean=xo;exports.isKosCompanionTypeFactory=Na;exports.isKosDataModel=Nt;exports.isKosLoggingEnabled=Uu;exports.isKosModel=de;exports.isKosModelContainer=Eo;exports.isKosModelReady=xs;exports.isLeapYear=bo;exports.isLocalRefId=Yf;exports.isNumber=dr;exports.isPrintable=vh;exports.isTroubleAware=Fm;exports.isValidDate=Rt;exports.kosAction=W;exports.kosAutoEffect=H;exports.kosChild=ge;exports.kosCompanion=nh;exports.kosComputed=Do;exports.kosConfigBean=ur;exports.kosConfigProperty=xg;exports.kosContext=ih;exports.kosDependency=ht;exports.kosEffect=ac;exports.kosFuture=dn;exports.kosLogger=dh;exports.kosModel=P;exports.kosModelEffect=aa;exports.kosObservable=Co;exports.kosParentAware=cr;exports.kosReference=uh;exports.kosStateBean=tb;exports.kosStateProp=sb;exports.kosSubscribe=hh;exports.kosTopicHandler=F;exports.kosWhen=Gr;exports.login=ld;exports.mapConfigBeanModelToDto=mc;exports.mapDataToModel=jr;exports.mapDtoToConfigBeanModel=gc;exports.mapDtoToFutureModel=Uo;exports.mapDtoToFutureOptions=No;exports.mapUpdateDtoToConfigBeanModel=pc;exports.modelEventTopicFactory=da;exports.modelFactory=ft;exports.modelTypeEventTopicFactory=ua;exports.modifyConfigBean=dc;exports.modifyFuture=Kg;exports.pairedClientHeartbeat=Nf;exports.pipe=ec;exports.post=os;exports.preloadKosModel=ff;exports.processId=$u;exports.processMiddleware=Af;exports.put=ch;exports.registerCompanionModel=hf;exports.registerCoreModels=Zl;exports.registerExtensionPoint=rs;exports.registerHttpRoutes=xh;exports.registerKosModel=Va;exports.registerLegacyModel=Ga;exports.resetKosModel=Ba;exports.resetPassword=ud;exports.resolveBaseUrl=Qa;exports.resolveChild=Ea;exports.resolveContainerDeltas=Iu;exports.resolveItemListDeltas=Ou;exports.resolveKosCompanion=Hr;exports.resolveKosContext=Qf;exports.resolveKosProfiles=Hi;exports.resolveListDeltas=Su;exports.resolveServiceUrl=se;exports.resolveVariable=ta;exports.retryWithExponentialBackoff=jf;exports.sendAsyncIntent=sg;exports.sendBroadcastMessage=Bh;exports.sendIntent=tg;exports.sendKosHttpMessageResponse=La;exports.sendKosMessage=Nh;exports.sendKosMessageResponse=Aa;exports.sendRequest=qf;exports.sendStudioMessage=jh;exports.sendStudioMessageRequest=Uh;exports.setupCompanionDecoratorMixin=qy;exports.setupCompleteFutureSupport=Xl;exports.setupMinimalFutureSupport=Ky;exports.startPasswordReset=dd;exports.stringComponentInsert=Cd;exports.studioAcceptOrgInvitation=ib;exports.studioLogin=rb;exports.studioResetPassword=nb;exports.studioStartPasswordReset=ob;exports.subscribeStore=Qy;exports.syncPublish=Wf;exports.transitionToActive=ga;exports.transitionToInit=ya;exports.transitionToLoad=ma;exports.transitionToReady=pa;exports.transitionToUnload=wh;exports.troubleByTypeReducer=km;exports.troubleDataFactory=ll;exports.unloadKosModel=nf;exports.updateCompanionModelRegistration=Ff;exports.updateModelRegistration=Lf;exports.updateRegion=od;exports.updateTimeZone=to;exports.useAmPmValues=nu;exports.useCalendarDayArray=Yd;exports.useConfigBean=ww;exports.useConfigProperty=xd;exports.useContextModel=pb;exports.useContextModelHierarchy=yd;exports.useDateArrays=jd;exports.useDateProps=Sw;exports.useDateRelativeConfig=Ow;exports.useDateRelativeData=Qd;exports.useDayNames=Gd;exports.useDayOptions=zd;exports.useDays=wn;exports.useDevice=Sd;exports.useFormattedDate=Vd;exports.useFormattedTime=au;exports.useFunctionWarmup=$w;exports.useHourValues=ou;exports.useKosCore=Ed;exports.useKosDateFormats=Cw;exports.useKosModel=G;exports.useKosRegions=tu;exports.useKosTime=un;exports.useKosTimeContext=Pb;exports.useKosTimeFormats=kw;exports.useKosTimeZones=xw;exports.useKosTranslation=fw;exports.useKosTranslationContext=Nb;exports.useLocalComputed=Nw;exports.useModelFromHierarchy=wb;exports.useMonths=Kd;exports.useMonthsOptions=Hd;exports.useMutationObserver=jw;exports.useNetworkInterfaceContainer=Od;exports.useOta=$d;exports.usePressGesture=Bw;exports.useProjectReload=ru;exports.useRegionTimeProps=Kw;exports.useRegionalTimeDate=Wd;exports.useSoftwareInfo=fn;exports.useSoftwareInfoContext=Ab;exports.useStateProperty=tw;exports.useStorageDeviceContainer=Dd;exports.useSuspenseData=so;exports.useTimeOptions=iu;exports.useTimeProps=cu;exports.useTimeValues=ro;exports.useTimer=rw;exports.useTranslationContainer=Pd;exports.useTroubleContainerModel=mn;exports.useTroubleModel=pw;exports.useTroublePresence=mw;exports.useUsbUpdateContainer=Rd;exports.useYears=bn;exports.useYearsOptions=Bd;exports.uuid=ut;exports.variableToHex=Vu;exports.waitForAppToStart=rg;exports.waitForAppsToStart=ic;exports.waitForRequest=So;exports.whenReady=ne;exports.withDevice=qb;exports.withKosModelFutures=Hy;exports.withKosTime=Qb;exports.withNetworkInterfaceContainer=Zb;exports.withOta=Xb;exports.withProjectReloading=Hw;exports.withSoftwareInfo=Rb;exports.withStorageDeviceContainer=sw;exports.withTranslationContainer=gw;exports.withTroubleContainer=yw;exports.withUsbUpdateContainer=bw;exports.wrapPromise=mo;
194
+ `,Sd=()=>{const t=Xs.type;return G({modelId:t,modelType:Xs.type,options:{}})};function qb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Sd();return T.jsx(o,{...r,children:T.jsx(t,{...e,device:s})})}}function Wb(t,e,s){const r=new Promise(o=>{S.getInstance().whenReady().then(()=>{const{model:n}=S.getInstance().modelManager.createModelInstance(t,e??t,s);return n.whenReady().then(()=>{o(n.modelData)})})});return mo(r)}function Qb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=un();return T.jsx(o,{...r,children:T.jsx(t,{...e,kosTime:s})})}}const Od=()=>{const t=Jt.type;return G({modelId:t,modelType:Jt.type,options:{}})};function Zb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Od();return T.jsx(o,{...r,children:T.jsx(t,{...e,networkInterfaceContainer:s})})}}const $d=()=>{const t=Hs.type;return G({modelId:t,modelType:Hs.type,options:{}})};function Jb(t){return e=>{const{model:s,status:r,KosModelLoader:o}=$d();return T.jsx(o,{...r,children:T.jsx(t,{...e,oTA:s})})}}function Xb(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 ew(t){const e=g.useRef(null),s=t.onAlert;return Xb(e,s),T.jsx("div",{ref:e,style:{width:"100%"},children:t.children})}const tw=t=>{var d;const{stateProp:e}=t,[s,r]=g.useState((d=t.stateProp)==null?void 0:d.value),[o,n]=g.useState(!1),[i,a]=g.useState(void 0);return g.useEffect(()=>{async function u(h){try{h&&(await ne(h),n(!0))}catch(f){a(f.message)}}u(e)},[e]),g.useEffect(()=>{const u=H(()=>{e&&o&&r(e.value)});return()=>{u()}},[o,e]),[s,{ready:o,error:i}]},Dd=()=>{const[t,e]=g.useState(!1),[s,r]=g.useState([]),o=ct.type,n=G({modelId:o,modelType:ct.type,options:{}});return g.useEffect(()=>{const i=H(()=>{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 sw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Dd();return T.jsx(o,{...r,children:T.jsx(t,{...e,storageDeviceContainer:s})})}}const Fr=p.createLogger({name:"use-timer"}),rw=({timerName:t,onTimerExpired:e,onTimerTick:s,timerEventActions:r,autoStart:o})=>{const n=id.getTimer(t);g.useEffect(()=>{if(!n){console.warn(`Timer with name ${t} does not exist.`);return}const d=$(an,u=>{const{name:h,action:f,remainingTime:m}=u==null?void 0:u.body;h===t&&(f===ln?e({name:h,action:f,remainingTime:m,timer:n}):r!=null&&r[f]&&r[f]({name:h,action:f,remainingTime:m,timer:n}))});return o&&n.start(),()=>{d.unsubscribe()}},[o,e,r,t,n]),g.useEffect(()=>{if(!n||!s)return;const d=`${cn}/${t}`,u=$(d,h=>{const{name:f,remainingTime:m}=h==null?void 0:h.body;f===t&&s({name:f,remainingTime:m,timer:n})});return()=>{u.unsubscribe()}},[s,t,n]);const i=g.useCallback(()=>{n?n.start():Fr.warn(`Timer with name ${t} does not exist.`)},[n,t]),a=g.useCallback(()=>{n?n.reset():Fr.warn(`Timer with name ${t} does not exist.`)},[n,t]),c=g.useCallback(()=>{n?n.pause():Fr.warn(`Timer with name ${t} does not exist.`)},[n,t]);return{timer:n,start:i,reset:a,pause:c}},ow=t=>{const e=/[\\^$.*+?()[\]{}|]/g;return RegExp(e.source).test(t)?t.replace(e,"\\$&"):t},nw=t=>t instanceof RegExp,iw=t=>typeof t=="string",aw=(t,e,s)=>{if(t===""||e==="")return t;let r=e;nw(r)||(r=new RegExp("("+ow(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},Cd=(t,e,s)=>{let r=t;return Array.isArray(r)||(r=[r]),r.flatMap(o=>iw(o)?aw(o,e,s):o)};function cw(t,e){let s=t;return Object.entries(e).forEach(([r,o])=>{const n=new RegExp(`<${r}>(.*?)</${r}>|<${r}/>`,"g");s=Cd(s,n,(i,a)=>o.type==="br"?T.jsx("br",{}):g.cloneElement(o,{key:`${r}-${a}`},i))}),s}const lw=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=cw(a,o||{});return T.jsx("span",{className:t.className,children:c})},Ze=new Map;function dw(t,e){if(Ze.has(t)){const s=Ze.get(t);if(s.status==="finished")return s.result;throw s.promise}else{const s=e().then(o=>{Ze.set(t,{status:"finished",result:o})},o=>{throw Ze.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Ze.set(t,r),s}}function so(t,e){return dw(t,e)}const uw=async()=>{const t=await Ka(_e.type);return await ne(t.model),t.model},hw=async(t,e,s)=>{const r=t.resolveNamespace(e);await ne(r);for(const o of s){const n=t.resolveNamespace(o);await ne(n),Ze.set(o,{status:"finished",result:n})}return r},fw=(t,e)=>{const s=[t].flat(),[r,...o]=s,n=so(_e.type,uw),i=s.join("__"),a=so(i,()=>hw(n,r,o)),c=g.useMemo(()=>({exists:u=>{const h=e!=null&&e.keyPrefix?`${e.keyPrefix}.${u}`:u;return a?a.exists(h):!1}}),[e==null?void 0:e.keyPrefix,a]);return{t:g.useCallback((u,h)=>{const f=e!=null&&e.keyPrefix?`${e.keyPrefix}.${u}`:u;return a?a.resolveKey(f,h):(p.debug(`Translation model ${t} not ready for key: ${f}`),f)},[e==null?void 0:e.keyPrefix,t,a]),i18n:c}},Pd=()=>{const t=_e.type;return G({modelId:t,modelType:_e.type,options:{}})};function gw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Pd();return T.jsx(o,{...r,children:T.jsx(t,{...e,translationContainer:s})})}}const pw=t=>G({modelId:t,modelType:Qt.type}),mn=()=>G({modelId:nt.type,modelType:nt.type,options:{}}),mw=({troubleType:t,condition:e})=>{const{model:s}=mn(),[r,o]=g.useState(!1),[n,i]=g.useState([]),a=g.useCallback(()=>{var c,d;return n.length>0&&((c=n[0])!=null&&c.resolvable)?(d=n[0])==null?void 0:d.resolve():Promise.resolve(void 0)},[n]);return g.useEffect(()=>H(()=>{const d=(t?s==null?void 0:s.troubles.getIndexByKey("byType",t):s==null?void 0:s.troubles.data)||[],u=e?d.filter(e):d;o(u.length>0),i(u)}),[e,s,t]),[r,a,n.length>0?n[0]:void 0,n]};function yw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=mn();return T.jsx(o,{...r,children:T.jsx(t,{...e,troubleContainer:s})})}}const Rd=()=>{const t=es.type,e=G({modelId:t,modelType:es.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=H(()=>{var d,u,h;r(((d=e.model)==null?void 0:d.isUsbInserted)??!1),n(((u=e.model)==null?void 0:u.hasAvailableUpdates)??!1),a(((h=e.model)==null?void 0:h.data)??[])});return()=>{c()}},[e.model]),{...e,inserted:s,updateAvailable:o,updates:i}};function bw(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Rd();return T.jsx(o,{...r,children:T.jsx(t,{...e,usbUpdateContainer:s})})}}const ww=({path:t,propKey:e})=>{const{status:s}=G({modelType:zt.type,modelId:t,options:{path:t}}),[r,o]=g.useState(!1),[n,i]=g.useState(),[a,c]=g.useState(""),[d,u]=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]):u(`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:d,updateValue:h}},vw=(t,e)=>{switch(e.type){case"UPDATE":return e.payload;default:return t}},xd=({configProperty:t,optionsTransformer:e})=>{const[s,r]=g.useState(!1),[o,n]=g.useState(""),[i,a]=g.useReducer(vw,{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(d=>{var h;let u="factory";typeof d=="string"?u=d:(h=d==null?void 0:d.target)!=null&&h.value&&(u=d.target.value),u&&(t==null||t.updateProperty(u))},[t]);return g.useEffect(()=>{async function d(u){try{u&&(await ne(u),r(!0))}catch(h){n(h.message)}}d(t)},[t]),g.useEffect(()=>{const d=H(()=>{if(t&&s){let u=[];e&&(u=e(t.options)),a({type:"UPDATE",payload:{value:String(t.value),displayValue:t.displayValue,significantValue:t.significantValue,unit:t.unit,options:t.options,mappedOptions:u,updateProperty:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}})}});return()=>{d()}},[t,e,s]),{...i,configSelectProps:{onChange:c,value:i.value,options:e?i.mappedOptions||[]:i.options||[]},ready:s,error:o}};function Mw(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 Ew(t,e){return new Date(t,e,0).getDate()}function Ad(t,e){const s=Mw(e,t),r=[];for(let o=1;o<=s;o++)r.push(o);return r}function Ld(){return[...Array(12).keys()].map(e=>new Date(0,e).getMonth())}function kd(t=[2018,2028]){const e=[];for(let s=t[0];s<=t[1];s++)e.push(s);return e}function Fd(t,e=[2018,2028]){const s=kd(e);return t==="long"?s:s.map(r=>Number(r.toString().substring(2)))}function yn(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 Tw({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),d=new Intl.DateTimeFormat(t,{year:o.year}).format(a),u=new Intl.DateTimeFormat(t,{day:o.day}).format(a);return n?n=="MMDDYY"?`${c} ${u} ${d}`:n==="DDMMYY"?`${u} ${c} ${d}`:n==="YYMMDD"?`${d} ${c} ${u}`:`${d} ${u} ${c}`:new Intl.DateTimeFormat(t,o).format(a)}function ue(t){return t.toString().length===2?new Date(Date.parse(`01 Jan 20${t}`)).getFullYear():t}function _w(t){return typeof t=="string"?new Date(Date.parse(`01 ${t.substring(0,3)} 2023`)).getMonth()+1:t}function Nd(t,e,s){const r=ue(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 Rt(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 xt(t,e){return new Date(t,e,0).getDate()}function Ud(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=bn(n,r),d=Bd(n,r,t),u=Kd(i,t),h=Hd(i,t),f=wn(e,s),m=zd(e,s,t,o),w=Yd(s,e,m),v=Gd(t,a);return{daysArray:f,monthsArray:u,yearsArray:c,yearsOptionsArray:d,monthsOptionsArray:h,daysOptionsArray:m,calendarDayArray:w,dayNamesArray:v}}function bn(t="long",e=[2018,2028]){return g.useMemo(()=>Fd(t,e),[t,e])}function Bd(t="long",e=[2018,2028],s="en-US"){const r=bn(t,e);return g.useMemo(()=>r.map(n=>({label:n.toLocaleString(s).replace(",",""),value:n})),[s,r])}function Kd(t,e="en-US"){return g.useMemo(()=>yn(t,e),[t,e])}function Hd(t,e="en-US"){const s=g.useMemo(()=>Ld(),[]),r=g.useMemo(()=>yn(t,e),[t,e]);return g.useMemo(()=>[...Array(12).keys()].map(n=>({label:r[n],value:Number(s[n])})),[r,s])}function wn(t,e){const s=ue(t);return g.useMemo(()=>Ad(s,e),[e,s])}const Iw=(t,e,s,r=[])=>{const o=new Date(t,e,s).getDay();return r.length>0&&r.includes(o)};function zd(t,e,s="en-US",r=[]){const o=wn(t,e);return g.useMemo(()=>o.map(i=>({label:i.toLocaleString(s),value:i,disabled:Iw(t,e,i,r)})),[r,s,e,o,t])}function Gd(t="en-US",e="short"){return g.useMemo(()=>Ud(t,e),[t,e])}function Vd({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:$e.format(n,r)}}function Yd(t,e,s){return g.useMemo(()=>Nd(t,e,s),[t,e,s])}var qd=(t=>(t.MMDDYY="MMDDYY",t.DDMMYY="DDMMYY",t.YYMMDD="YYMMDD",t.YYDDMM="YYDDMM",t))(qd||{});function Sw({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:d=[]}={}}){const[u,h]=g.useState(e),[f,m]=g.useState(c),[w,v]=g.useState(s),[E,_]=g.useState(r);g.useEffect(()=>{h(e)},[e]),g.useEffect(()=>{v(s)},[s]),g.useEffect(()=>{_(r)},[r]);const{yearsArray:F,yearsOptionsArray:te,monthsArray:R,monthsOptionsArray:I,daysArray:V,daysOptionsArray:N,calendarDayArray:Y,dayNamesArray:Oe}=jd({locale:t,year:u,yearRange:f,month:w,formatOptions:{yearFormat:o,monthFormat:n,dayFormat:i},daysOfWeekFilter:d}),{formattedDate:ve}=Vd({year:u,month:w,day:E,formatString:a});return{dateActions:{setYear:h,setYearRange:m,setMonth:v,setDay:_,nextMonth:()=>{const q=w<11?ue(u):ue(u+1),re=w<11?w+1:0;if(!Rt(q,re,E)){const Ae=xt(q,re);_(Ae)}re===0&&h(q),v(re)},previousMonth:()=>{const q=ue(w===0?u-1:u),re=w===0?11:w-1;if(!Rt(q,re,E)){const Ae=xt(q,re);_(Ae)}re===11&&h(q),v(re)},nextYear:()=>{const q=u<f[1]?u+1:f[0],re=ue(q);if(Rt(re,w,E))h(q);else{const Ae=xt(ue(u+1),w);_(Ae),h(q)}},previousYear:()=>{const q=u>f[0]?u-1:f[0],re=ue(q);if(Rt(re,w,E))h(q);else{const Ae=xt(ue(u-1),w);_(Ae),h(q)}}},dateState:{year:u,yearRange:f,month:w,day:E,yearsArray:F,yearsOptionsArray:te,monthsArray:R,monthsOptionsArray:I,daysArray:V,daysOptionsArray:N,calendarDayNames:Oe,calendarDayArray:Y,formattedDate:ve}}}function Wd({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:d,ready:u}=G({modelId:J.type,modelType:J.type,options:{}}),h=typeof t=="string"?$e.parseISO(t):t;return g.useEffect(()=>{c?a(""):e?a($e.format(h,e)):u&&a($e.format(h,d!=null&&d.selectedDateFormat?d==null?void 0:d.selectedDateFormat:""))},[c,t,e,h,d,u]),g.useEffect(()=>{s?n($e.format(h,s)):u&&n($e.format(h,d!=null&&d.selectedTimeFormat?d==null?void 0:d.selectedTimeFormat:""))},[t,s,h,d,u]),{formattedDate:i,formattedTime:o}}const Qd=({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:d}=Wd({date:a,options:{ignoreDateFormat:!0}});return g.useEffect(()=>{const u=Number(t),h=Math.floor(u/3600),f=Math.floor(u%3600/60),m=u%60;s(h),o(f),i(m);const w=new Date;w.setHours(0,0,0,0);const v=new Date(w.getTime()+u*1e3);c(new Date(v))},[t]),{hours:e,minutes:r,seconds:n,formattedTime:d,timeActions:{setHours:s,setMinutes:o,setSeconds:i}}},Ow=({configProperty:t})=>{const{value:e}=xd({configProperty:t}),s=parseInt(e||"0",10),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}=Qd({secondsFromMidnight:s}),c=g.useRef();return g.useEffect(()=>{const d=r*3600+o*60+n;return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{t&&t.updateProperty(d.toString())},100),()=>{c.current&&clearTimeout(c.current)}},[t,r,o,n]),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}};function $w(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 Dw=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),Cw=(t=Dw)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=G({modelType:J.type,modelId:J.type,options:{}});g.useEffect(()=>{const c=H(()=>{s((n==null?void 0:n.dateFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=H(()=>{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 u;let d="";typeof c=="string"?d=c:(u=c==null?void 0:c.target)!=null&&u.value&&(d=c.target.value),d&&(n==null||n.setSelectedDateFormat(d))},[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}}},Pw=t=>T.jsx("option",{title:t,value:t,children:t},t),Zd="kos:service:region:settings",Jd="timeZone",Rw=`${Zd}-${Jd}`,xw=(t=Pw)=>{const[e,s]=g.useState([]),[r,o]=g.useState(""),{model:n,ready:i}=G({modelType:J.type,modelId:J.type,options:{}}),a=Ke.factory(Rw)({path:Zd,attribute:Jd});g.useEffect(()=>{const d=H(()=>{s((n==null?void 0:n.timeZones.map(t))||[]),n!=null&&n.timeZones.length&&to(n==null?void 0:n.timeZones[0])});return()=>{d()}},[n,i,t]),g.useEffect(()=>{const d=H(()=>{o(a.value||"")});return()=>{d()}},[a.value]);const c=g.useCallback(d=>{var h;let u="factory";typeof d=="string"?u=d:(h=d==null?void 0:d.target)!=null&&h.value&&(u=d.target.value),u&&to(u)},[]);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}}},Xd="kos:service:region",eu="regionId",Aw=`${Xd}-${eu}`,Lw=t=>T.jsx("option",{title:t,value:t,children:t},t),tu=(t=Lw)=>{const[e,s]=g.useState([]),[r,o]=g.useState("factory"),{model:n,ready:i}=G({modelType:J.type,modelId:J.type,options:{}}),a=Ke.factory(Aw)({path:Xd,attribute:eu});g.useEffect(()=>{const d=H(()=>{s((n==null?void 0:n.availableRegions.map(t))||[])});return()=>{d()}},[n,i,t]),g.useEffect(()=>{const d=H(()=>{o(a.value||"factory")});return()=>{d()}},[a.value]);const c=g.useCallback(d=>{var h;let u="factory";typeof d=="string"?u=d:(h=d==null?void 0:d.target)!=null&&h.value&&(u=d.target.value),u&&od(u)},[]);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}}},kw=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),Fw=(t=kw)=>{const[e,s]=g.useState([]),[r,o]=g.useState(),{model:n,ready:i}=G({modelType:J.type,modelId:J.type,options:{}});g.useEffect(()=>{const c=H(()=>{s((n==null?void 0:n.timeFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),g.useEffect(()=>{const c=H(()=>{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 u;let d="";typeof c=="string"?d=c:(u=c==null?void 0:c.target)!=null&&u.value&&(d=c.target.value),d&&(n==null||n.setSelectedTimeFormat(d))},[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}}},Nw=(t,e)=>g.useMemo(()=>Do(t),e),Uw={config:{attributes:!0,childList:!0,subtree:!0}};function jw(t,e,s=Uw){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){p.error(i)}return()=>{r&&r.disconnect()}},[r,t,s])}const su={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}},Nr=p.createLogger({name:"usePressGesture",group:"kos-hooks"});function Bw({onPressed:t,onRelease:e,intersectionStrategy:s=su}){const r=g.useRef(!1),o=fu.useGesture({onDragStart:c=>{Nr.info("onDragStart",c.type),s.validateStart(c)&&(t&&t(),r.current=!0)},onDrag:c=>{Nr.info("onDrag",c.type),r.current&&s.validateStop(c)&&(e&&e(),r.current=!1)},onDragEnd:c=>{Nr.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 ru=()=>{const[t,e]=g.useState(!1),s=S.getInstance();return g.useEffect(()=>{const r=H(()=>{s&&s.reloading!==t&&e(s.reloading)});return()=>{r()}},[s,t]),[t]};function ou(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 ro(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 nu(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 iu({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=ou(t,e),i=ro(60,s),a=ro(60,r),c=nu(o);return{hourOptions:n,minuteOptions:i,secondOptions:a,amPmOptions:c}}function au(t,e){return $e.format(t,e)}function cu({formatOptions:t,initialDate:e=new Date,locale:s="en-US",format:r="HH:mm"}){const[o,n]=g.useState(e),i=g.useCallback(v=>{n(E=>{const _=new Date(E);return _.setHours(Number(v)),_})},[]),a=g.useCallback(v=>{n(E=>{const _=new Date(E);return _.setMinutes(Number(v)),_})},[]),c=g.useCallback(v=>{n(E=>{const _=new Date(E);return _.setSeconds(Number(v)),_})},[]),d=g.useCallback(v=>{const E=new Date(v);n(E)},[]),u=au(o,r),{hourOptions:h,minuteOptions:f,secondOptions:m,amPmOptions:w}=iu({formatOptions:t,locale:s});return{amPmOptions:w,formattedTime:u,hourOptions:h,minuteOptions:f,secondOptions:m,setHours:i,setMinutes:a,setSeconds:c,setTime:d,time:new Date(o)}}const Kw=t=>{const{regionModel:e}=tu(),s=g.useMemo(()=>({hour12:e==null?void 0:e.is12HourTimeFormat}),[e==null?void 0:e.is12HourTimeFormat]);return cu({...t,locale:e==null?void 0:e.regionId,format:e==null?void 0:e.selectedTimeFormat,formatOptions:s})};function Hw(t){return e=>{const[s]=ru();return s?T.jsx(fd,{message:"Wait a moment while your project reloads..."}):T.jsx(t,{...e})}}const ti=p.createLogger({name:"studio-properties-service",group:"Services"}),zw="/api/kos/studio/properties",lu=async t=>{if(ti.debug("sending GET for studio-properties"),!t)throw ti.error("connectionId is undefined"),new Error("connectionId is undefined");return await Se.get(zw,{},{destinationAddress:t,timeout:500})},Gw=Object.freeze(Object.defineProperty({__proto__:null,getStudioProperties:lu},Symbol.toStringTag,{value:"Module"}));var Vw=Object.defineProperty,Yw=Object.getOwnPropertyDescriptor,qw=(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=(r?i(e,s,o):i(o))||o);return r&&o&&Vw(e,s,o),o};const du="studio-properties-model",Ww="/kos/studio/properties",si={"kos.studio.tool.legacy":1};let oo=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=De(),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:Ww,destinationAddress:this.connectionId,callback:s=>{this.logger.error(`Received studio-properties message for connection ${this.connectionId}: ${JSON.stringify(s)}`)}});const[t,e]=await lu(this.connectionId);if(t){this.logger.error(`Error loading studio-properties: ${t}`),this.data.setValues(si);return}if(e){const s=Object.keys(e).reduce((r,o)=>(r[o]=e[o]??o,r),{});this.data.setValues(s??si),p.ifDebug(()=>this.logger.debug(`studio-properties loaded: ${JSON.stringify(s)}`))}}get(t){return this.data[t]}createObservableProperty(t){return Do(()=>this.get(t))}};oo=qw([P(du)],oo);const Qw=new pe({class:oo,type:du});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:()=>io.observer});exports.AuthState=Wa;exports.BrowserKosRouter=oc;exports.BrowserRouter=Bo;exports.CanvasDispatcher=at;exports.CanvasDispatcherServices=Hm;exports.CanvasRenderer=Jo;exports.CanvasStreamer=Gb;exports.CanvasStreamerBase=Id;exports.ChildModels=Lt;exports.CompanionDecoratorMixin=Xl;exports.CompanionParentModel=Ps;exports.ConfigBean=zt;exports.CoreExtensionManager=By;exports.CoreModels=nn;exports.CreateModelTranslationsContext=vd;exports.CreateModelTranslationsProvider=Eb;exports.DateDisplayFormat=qd;exports.DateHelpers=Du;exports.DependencyLifecycle=j;exports.DependencyModels=L;exports.Device=Xs;exports.DeviceServices=dy;exports.DomIntersectionStrategy=su;exports.EVENT_KOS_MODEL_READY=uo;exports.EVENT_TROUBLE_ADDED=ig;exports.EVENT_TROUBLE_REMOVED=ag;exports.EXTENSION_CANVAS_RENDERER=Z;exports.EXTENSION_FEATURE_FLAG_RESOLVER=Qi;exports.EXTENSION_TROUBLE_DATA_MAPPER=Bs;exports.EXTENSION_TROUBLE_MAPPER=ls;exports.ErrorBoundaryWithFallback=gd;exports.EventBus=yu;exports.EventBusFunctional=wu;exports.EventBusState=Mu;exports.ExtensionManager=O;exports.FUTURE_CONTAINER_MODEL_TYPE=Rc;exports.FUTURE_MODEL_TYPE=Ec;exports.FUTURE_NOT_ASSIGNED=Po;exports.FeatureFlagService=Zi;exports.FetchError=ce;exports.FutureContainerFactory=Pe;exports.FutureContainerModel=Ac;exports.FutureEndState=Ce;exports.FutureFactory=pt;exports.FutureHandler=hr;exports.FutureManager=je;exports.FutureModel=$c;exports.FutureService=At;exports.HEADER_CACHE_CONTROL=ci;exports.HEADER_CONTENT_TYPE=ai;exports.HEADER_DESTINATION_ADDR=Ie;exports.HEADER_FOS_REQUEST_ID=li;exports.HEADER_METHOD=rr;exports.HEADER_ORDERED=co;exports.HEADER_REQUEST_ID=ts;exports.HEADER_REQUEST_TYPE=ye;exports.HEADER_RESPONSE_ID=or;exports.HEADER_SOURCE_ADDR=ii;exports.HEADER_TOPIC=ni;exports.HEADER_URL=dt;exports.HEADER_WORK_TRACKER=lo;exports.HttpRouteHandlers=Ee;exports.KOS_MODEL_ID=Ds;exports.KeyValue=zo;exports.KeyValueServices=sp;exports.Kos=X;exports.KosConfigPropertySpec=Ke;exports.KosContainerIndex=Oo;exports.KosContextBean=sc;exports.KosContextManager=K;exports.KosCore=S;exports.KosCoreModelPropertyMapper=he;exports.KosDataContainer=$o;exports.KosDependencyTypes=ah;exports.KosExtensionUtils=xu;exports.KosFeatureFlags=Ji;exports.KosFetchMethods=_a;exports.KosGlobalConfig=vo;exports.KosHttpRouteManager=To;exports.KosLog=p;exports.KosLogManager=Kc;exports.KosLogManagerServices=cp;exports.KosMockEvents=hi;exports.KosModel=Fa;exports.KosModelCollectionProvider=yb;exports.KosModelContainer=we;exports.KosModelContext=vr;exports.KosModelEvents=x;exports.KosModelFactory=jt;exports.KosModelFutureContainerMixin=ds;exports.KosModelLoader=bd;exports.KosModelLoaderDisplay=wd;exports.KosModelManager=ja;exports.KosModelProvider=pd;exports.KosModelRegistrationFactory=pe;exports.KosModelRegistry=eo;exports.KosModelState=b;exports.KosModelSymbol=ra;exports.KosModelVisitor=Pf;exports.KosObservableData=Ja;exports.KosRegistration=Xf;exports.KosSingletonRegistration=eg;exports.KosTime=Ns;exports.KosTimeContext=hn;exports.KosTimeProvider=Cb;exports.KosTimeServices=pp;exports.KosTimer=nd;exports.KosToken=rc;exports.KosTranslationProvider=Fb;exports.KosTranslations=_l;exports.KosWSTransportStatus=ka;exports.KosWsEvents=ss;exports.LOADER_FEATURE_FLAG=Gu;exports.LOGIN_HOST=di;exports.LOGIN_URL=gu;exports.LoadingMessage=fd;exports.LogBlock=Wt;exports.LogBlockContainer=mr;exports.LogConfig=Ft;exports.LogStream=Kt;exports.LogStreamContainer=cs;exports.LogStreamServices=Sp;exports.MODEL_DELETION_DELAY=Ua;exports.MiddlewareChain=Za;exports.ModelEffects=Ne;exports.MultipleFutureHandler=Ag;exports.NestedModelContext=Mr;exports.NetworkInterface=tn;exports.NetworkInterfaceContainer=Jt;exports.NetworkInterfaceServices=vy;exports.ObservableData=De;exports.Ota=Hs;exports.OutsideAlerter=ew;exports.PLUGIN_EXTENSION_NAME=Au;exports.PORT=ui;exports.PROFILE_LOG_DEBUG=ji;exports.PROFILE_LOG_INFO=Bi;exports.PROFILE_RELAX_STORE_VALIDATION=ku;exports.PROFILE_TOOLS_PREVIEW=Ui;exports.ParentModel=kt;exports.PluginExtensionManager=Lu;exports.ProgressBar=fb;exports.ReferenceConfig=Ts;exports.RegionInfo=J;exports.RegionServices=yg;exports.RegistrationManager=C;exports.Registry=jy;exports.STATUS=ao;exports.ServiceFactory=ee;exports.SingletonKosModelRegistrationFactory=be;exports.SoftwareInfo=zs;exports.SoftwareInfoContext=gn;exports.SoftwareInfoProvider=xb;exports.SoftwareInfoServices=cm;exports.StateBean=Zt;exports.StateBeanServices=gm;exports.StateProp=qo;exports.StatePropServices=_m;exports.StorageDevice=tr;exports.StorageDeviceContainer=ct;exports.StorageDeviceServices=Iy;exports.StudioProperties=Qw;exports.StudioPropertiesServices=Gw;exports.SubscriptionHandlers=Q;exports.TIMER_END=ln;exports.TIMER_EVENT=an;exports.TOPIC_TIMER_TICK_EVENT=cn;exports.TimerManager=id;exports.TokenContext=_d;exports.TokenProvider=Lb;exports.Topics=Bt;exports.Trans=lw;exports.TransitionMap=_s;exports.Transitions=Mo;exports.Translation=Ys;exports.TranslationContainer=_e;exports.TranslationContainerContext=pn;exports.TranslationContext=Lm;exports.TransportFactory=Kr;exports.Trouble=Qt;exports.TroubleContainer=nt;exports.TroubleServices=Vp;exports.Troubles=ae;exports.UsbUpdate=on;exports.UsbUpdateContainer=es;exports.UsbUpdateServices=Ay;exports.WS_EVENT_TYPE=Il;exports.WebSocketEvents=Ut;exports.WebSocketTransport=tt;exports.WsEventFactory=Qo;exports.acceptOrgInvitation=hd;exports.addDaysToDate=Pi;exports.addFuture=_c;exports.addMonthsToDate=Ci;exports.api=Dc;exports.applyMixins=Tu;exports.arraysEqual=_u;exports.buildConfigBeanModel=dg;exports.buildFuture=jo;exports.buildFutureModel=Sc;exports.cancelFuture=Ic;exports.checkAppsStarted=og;exports.convert=ko;exports.convertFileSizeRaw=Eu;exports.convertWithUnits=Tg;exports.createBaseMessage=Oa;exports.createBroadcastMessageResponse=Pa;exports.createCancellablePromise=ab;exports.createClient=Io;exports.createFosBaseMessage=Sa;exports.createHeaders=Mt;exports.createKosHtpMessageResponse=Ra;exports.createKosMessage=Da;exports.createKosMessageResponse=xa;exports.createKosModelFutureManager=zy;exports.createLazyKosModelFutureManager=Gy;exports.createMessageBody=xe;exports.createModelDependency=ba;exports.createOptionKey=Zu;exports.createPropKey=Be;exports.createReadableStream=Et;exports.createStudioMessage=Ia;exports.createStudioMessageRequest=$a;exports.createStudioMessageResponse=Ca;exports.debounce=Fi;exports.del=na;exports.deleteFuture=Tc;exports.destroyKosModel=Ue;exports.evaluateScopes=hc;exports.executeChildrenModelLifecycle=Ma;exports.executeDependentModelLifecycle=vt;exports.executeListLifecycle=va;exports.extractTrailingWildcard=ca;exports.fetchModel=Wb;exports.findModel=cf;exports.findModels=Ha;exports.formatDate=Ai;exports.formatDateSince=Di;exports.formatDateTime=ki;exports.formatTime=Li;exports.get=oa;exports.getAllKosCompanionModels=za;exports.getCalendarMonthArray=Nd;exports.getCompanionMixin=td;exports.getConfigBean=uc;exports.getDayStrings=Ud;exports.getDays=Ew;exports.getDaysArray=Ad;exports.getDaysInMonth=wo;exports.getDependenciesByLifecycle=wa;exports.getFormattedDate=Tw;exports.getFormattedMonth=_w;exports.getFormattedMonthsArray=yn;exports.getFormattedYear=ue;exports.getFormattedYearsArray=Fd;exports.getFutures=Bg;exports.getHttpRouteHandlers=ia;exports.getKosCompanionModel=lf;exports.getKosLocalizationDescriptor=wl;exports.getKosMessageLogging=Gi;exports.getKosModel=Ka;exports.getKosModelSync=me;exports.getKosModelType=af;exports.getKosSessionKey=tc;exports.getLastDayOfMonth=xt;exports.getLocalizationDescriptor=Sm;exports.getLogLevel=zi;exports.getLogMessageToStudio=Vi;exports.getMessageBody=Br;exports.getMonthsArray=Ld;exports.getObservableCompanions=df;exports.getQueryParams=le;exports.getStartedApps=ng;exports.getTranslations=bl;exports.getYearsArray=kd;exports.hasCompanionMixin=ed;exports.hasDecimals=lc;exports.hasHttpRouteHandlers=Rs;exports.hasKosModelFutureSupport=Vy;exports.hasKosProfile=Ur;exports.hasTrailingWildcard=la;exports.hslStringToHex=ea;exports.hslToHex=Xi;exports.httpDelete=lh;exports.initKosProvider=_b;exports.inspectCompanionMixin=Wy;exports.inspectFutureObservability=Yy;exports.isBoolean=xo;exports.isKosCompanionTypeFactory=Na;exports.isKosDataModel=Nt;exports.isKosLoggingEnabled=Uu;exports.isKosModel=de;exports.isKosModelContainer=Eo;exports.isKosModelReady=xs;exports.isLeapYear=bo;exports.isLocalRefId=Yf;exports.isNumber=dr;exports.isPrintable=vh;exports.isTroubleAware=km;exports.isValidDate=Rt;exports.kosAction=W;exports.kosAutoEffect=H;exports.kosChild=ge;exports.kosCompanion=nh;exports.kosComputed=Do;exports.kosConfigBean=ur;exports.kosConfigProperty=xg;exports.kosContext=ih;exports.kosDependency=ht;exports.kosEffect=ac;exports.kosFuture=dn;exports.kosLogger=dh;exports.kosModel=P;exports.kosModelEffect=aa;exports.kosObservable=Co;exports.kosParentAware=cr;exports.kosReference=uh;exports.kosStateBean=tb;exports.kosStateProp=sb;exports.kosSubscribe=hh;exports.kosTopicHandler=k;exports.kosWhen=Gr;exports.login=ld;exports.mapConfigBeanModelToDto=mc;exports.mapDataToModel=jr;exports.mapDtoToConfigBeanModel=gc;exports.mapDtoToFutureModel=Uo;exports.mapDtoToFutureOptions=No;exports.mapUpdateDtoToConfigBeanModel=pc;exports.modelEventTopicFactory=da;exports.modelFactory=ft;exports.modelTypeEventTopicFactory=ua;exports.modifyConfigBean=dc;exports.modifyFuture=Kg;exports.pairedClientHeartbeat=Nf;exports.pipe=ec;exports.post=os;exports.preloadKosModel=ff;exports.processId=$u;exports.processMiddleware=Af;exports.put=ch;exports.registerCompanionModel=hf;exports.registerCoreModels=Zl;exports.registerExtensionPoint=rs;exports.registerHttpRoutes=xh;exports.registerKosModel=Va;exports.registerLegacyModel=Ga;exports.resetKosModel=Ba;exports.resetPassword=ud;exports.resolveBaseUrl=Qa;exports.resolveChild=Ea;exports.resolveContainerDeltas=Iu;exports.resolveItemListDeltas=Ou;exports.resolveKosCompanion=Hr;exports.resolveKosContext=Qf;exports.resolveKosProfiles=Hi;exports.resolveListDeltas=Su;exports.resolveServiceUrl=se;exports.resolveVariable=ta;exports.retryWithExponentialBackoff=jf;exports.sendAsyncIntent=sg;exports.sendBroadcastMessage=Bh;exports.sendIntent=tg;exports.sendKosHttpMessageResponse=La;exports.sendKosMessage=Nh;exports.sendKosMessageResponse=Aa;exports.sendRequest=qf;exports.sendStudioMessage=jh;exports.sendStudioMessageRequest=Uh;exports.setupCompanionDecoratorMixin=qy;exports.setupCompleteFutureSupport=Jl;exports.setupMinimalFutureSupport=Ky;exports.startPasswordReset=dd;exports.stringComponentInsert=Cd;exports.studioAcceptOrgInvitation=ib;exports.studioLogin=rb;exports.studioResetPassword=nb;exports.studioStartPasswordReset=ob;exports.subscribeStore=Qy;exports.syncPublish=Wf;exports.transitionToActive=ga;exports.transitionToInit=ya;exports.transitionToLoad=ma;exports.transitionToReady=pa;exports.transitionToUnload=wh;exports.troubleByTypeReducer=Fm;exports.troubleDataFactory=ll;exports.unloadKosModel=nf;exports.updateCompanionModelRegistration=kf;exports.updateModelRegistration=Lf;exports.updateRegion=od;exports.updateTimeZone=to;exports.useAmPmValues=nu;exports.useCalendarDayArray=Yd;exports.useConfigBean=ww;exports.useConfigProperty=xd;exports.useContextModel=pb;exports.useContextModelHierarchy=yd;exports.useDateArrays=jd;exports.useDateProps=Sw;exports.useDateRelativeConfig=Ow;exports.useDateRelativeData=Qd;exports.useDayNames=Gd;exports.useDayOptions=zd;exports.useDays=wn;exports.useDevice=Sd;exports.useFormattedDate=Vd;exports.useFormattedTime=au;exports.useFunctionWarmup=$w;exports.useHourValues=ou;exports.useKosCore=Ed;exports.useKosDateFormats=Cw;exports.useKosModel=G;exports.useKosRegions=tu;exports.useKosTime=un;exports.useKosTimeContext=Pb;exports.useKosTimeFormats=Fw;exports.useKosTimeZones=xw;exports.useKosTranslation=fw;exports.useKosTranslationContext=Nb;exports.useLocalComputed=Nw;exports.useModelFromHierarchy=wb;exports.useMonths=Kd;exports.useMonthsOptions=Hd;exports.useMutationObserver=jw;exports.useNetworkInterfaceContainer=Od;exports.useOta=$d;exports.usePressGesture=Bw;exports.useProjectReload=ru;exports.useRegionTimeProps=Kw;exports.useRegionalTimeDate=Wd;exports.useSoftwareInfo=fn;exports.useSoftwareInfoContext=Ab;exports.useStateProperty=tw;exports.useStorageDeviceContainer=Dd;exports.useSuspenseData=so;exports.useTimeOptions=iu;exports.useTimeProps=cu;exports.useTimeValues=ro;exports.useTimer=rw;exports.useTranslationContainer=Pd;exports.useTroubleContainerModel=mn;exports.useTroubleModel=pw;exports.useTroublePresence=mw;exports.useUsbUpdateContainer=Rd;exports.useYears=bn;exports.useYearsOptions=Bd;exports.uuid=ut;exports.variableToHex=Vu;exports.waitForAppToStart=rg;exports.waitForAppsToStart=ic;exports.waitForRequest=So;exports.whenReady=ne;exports.withDevice=qb;exports.withKosModelFutures=Hy;exports.withKosTime=Qb;exports.withNetworkInterfaceContainer=Zb;exports.withOta=Jb;exports.withProjectReloading=Hw;exports.withSoftwareInfo=Rb;exports.withStorageDeviceContainer=sw;exports.withTranslationContainer=gw;exports.withTroubleContainer=yw;exports.withUsbUpdateContainer=bw;exports.wrapPromise=mo;
194
195
  //# sourceMappingURL=index.cjs.map