ouider 0.0.5 → 0.0.7

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/dist/index.d.cts CHANGED
@@ -230,11 +230,14 @@ declare class OUIDBridge implements OUIDBridgeInterface {
230
230
  fetch(url: string, input: RequestData, encodeAs: "text"): Promise<string>;
231
231
  fetch(url: string, input: RequestData, encodeAs: "base64"): Promise<string>;
232
232
  }
233
- declare const OUID: OUIDBridge;
233
+ declare const OUID: OUIDBridge & Record<string, (...args: any[]) => Promise<any>>;
234
234
  declare global {
235
- var OUID: OUIDBridge;
235
+ var OUID: OUIDBridge & Record<string, (...args: any[]) => Promise<any>>;
236
236
  }
237
237
 
238
+ declare const deferMicro: (fn?: () => void) => void | Promise<void>;
239
+ declare const deferMacro: () => Promise<void>;
240
+ type TemplateFn = (scope: any) => string;
238
241
  declare class RenderContext {
239
242
  private app;
240
243
  component: OComponent<Record<string, any>, Record<string, any>>;
@@ -247,10 +250,13 @@ declare class RenderContext {
247
250
  private componentsRegistry;
248
251
  private updatingDirectives;
249
252
  private updatingBindings;
250
- stack: Record<string, any>[];
253
+ private _stack;
254
+ private flatStack;
251
255
  hydradationActions: ODOM.BatchActions;
252
256
  constructor(app: App, component: OComponent<Record<string, any>, Record<string, any>>, parentContext: RenderContext | null, ...frames: Record<string, any>[]);
253
257
  get hostElement(): ODOM.OElement;
258
+ get stack(): Record<string, any>[];
259
+ set stack(value: Record<string, any>[]);
254
260
  bind(binding: Binding): void;
255
261
  directive(directive: Directive): void;
256
262
  evaluateExpression(expr: string | null | undefined): boolean;
@@ -283,10 +289,27 @@ declare class RenderContext {
283
289
  unmountComponent(node: ODOM.OElement): Promise<void>;
284
290
  }
285
291
  type Binding = {
286
- type: 'model' | 'interpolation' | 'attribute' | 'prop';
292
+ type: 'model';
287
293
  node: ODOM.OElement;
288
294
  key: string;
289
- template?: string | null;
295
+ context: RenderContext;
296
+ } | {
297
+ type: 'interpolation';
298
+ node: ODOM.OElement;
299
+ key: string;
300
+ templateFn: TemplateFn;
301
+ context: RenderContext;
302
+ } | {
303
+ type: 'attribute';
304
+ node: ODOM.OElement;
305
+ key: string;
306
+ template: string | null;
307
+ context: RenderContext;
308
+ } | {
309
+ type: 'prop';
310
+ node: ODOM.OElement;
311
+ key: string;
312
+ template: string;
290
313
  context: RenderContext;
291
314
  };
292
315
  type Directive = {
@@ -422,7 +445,7 @@ type OComponentType<P extends Record<string, any> = {}, O extends Record<string,
422
445
 
423
446
  /**
424
447
  * Component responsible for display routes
425
- * Usage: <o-router></o-router>
448
+ * Usage: `<o-router></o-router>`
426
449
  */
427
450
  declare class ORouter extends OComponent {
428
451
  private router;
@@ -494,4 +517,4 @@ declare class OIcon extends OComponent {
494
517
 
495
518
  declare function components(): Record<string, OComponent<any, any>>;
496
519
 
497
- export { ACTIVE_ROUTE_TOKEN, App, type Binding, Component, type ComponentConstructor, type ComponentProps, type Directive, Emits, type InjectionKey, type LazyLoader, Native, OComponent, type OComponentType, ODOM, OIcon, ORouter, OUID, OUIDBridge, type OUIDBridgeInterface, type OUIDConfig, type Plugin, type Promised, type Provider, type Providers, ROUTER_INJECTION_TOKEN, RenderContext, RenderNode, type Route, type RouteGaurdFunction, type RouteGuard, type RouteGuardReturn, type RouteLocationNamed, Router, type Routes, State, type StateWatcher, Stated, StyleData, WebOUID, components, createComponent, createRouter, inject, isStated, node, o, provide, stated, useRouter };
520
+ export { ACTIVE_ROUTE_TOKEN, App, type Binding, Component, type ComponentConstructor, type ComponentProps, type Directive, Emits, type InjectionKey, type LazyLoader, Native, OComponent, type OComponentType, ODOM, OIcon, ORouter, OUID, OUIDBridge, type OUIDBridgeInterface, type OUIDConfig, type Plugin, type Promised, type Provider, type Providers, ROUTER_INJECTION_TOKEN, RenderContext, RenderNode, type Route, type RouteGaurdFunction, type RouteGuard, type RouteGuardReturn, type RouteLocationNamed, Router, type Routes, State, type StateWatcher, Stated, StyleData, WebOUID, components, createComponent, createRouter, deferMacro, deferMicro, inject, isStated, node, o, provide, stated, useRouter };
package/dist/index.d.ts CHANGED
@@ -230,11 +230,14 @@ declare class OUIDBridge implements OUIDBridgeInterface {
230
230
  fetch(url: string, input: RequestData, encodeAs: "text"): Promise<string>;
231
231
  fetch(url: string, input: RequestData, encodeAs: "base64"): Promise<string>;
232
232
  }
233
- declare const OUID: OUIDBridge;
233
+ declare const OUID: OUIDBridge & Record<string, (...args: any[]) => Promise<any>>;
234
234
  declare global {
235
- var OUID: OUIDBridge;
235
+ var OUID: OUIDBridge & Record<string, (...args: any[]) => Promise<any>>;
236
236
  }
237
237
 
238
+ declare const deferMicro: (fn?: () => void) => void | Promise<void>;
239
+ declare const deferMacro: () => Promise<void>;
240
+ type TemplateFn = (scope: any) => string;
238
241
  declare class RenderContext {
239
242
  private app;
240
243
  component: OComponent<Record<string, any>, Record<string, any>>;
@@ -247,10 +250,13 @@ declare class RenderContext {
247
250
  private componentsRegistry;
248
251
  private updatingDirectives;
249
252
  private updatingBindings;
250
- stack: Record<string, any>[];
253
+ private _stack;
254
+ private flatStack;
251
255
  hydradationActions: ODOM.BatchActions;
252
256
  constructor(app: App, component: OComponent<Record<string, any>, Record<string, any>>, parentContext: RenderContext | null, ...frames: Record<string, any>[]);
253
257
  get hostElement(): ODOM.OElement;
258
+ get stack(): Record<string, any>[];
259
+ set stack(value: Record<string, any>[]);
254
260
  bind(binding: Binding): void;
255
261
  directive(directive: Directive): void;
256
262
  evaluateExpression(expr: string | null | undefined): boolean;
@@ -283,10 +289,27 @@ declare class RenderContext {
283
289
  unmountComponent(node: ODOM.OElement): Promise<void>;
284
290
  }
285
291
  type Binding = {
286
- type: 'model' | 'interpolation' | 'attribute' | 'prop';
292
+ type: 'model';
287
293
  node: ODOM.OElement;
288
294
  key: string;
289
- template?: string | null;
295
+ context: RenderContext;
296
+ } | {
297
+ type: 'interpolation';
298
+ node: ODOM.OElement;
299
+ key: string;
300
+ templateFn: TemplateFn;
301
+ context: RenderContext;
302
+ } | {
303
+ type: 'attribute';
304
+ node: ODOM.OElement;
305
+ key: string;
306
+ template: string | null;
307
+ context: RenderContext;
308
+ } | {
309
+ type: 'prop';
310
+ node: ODOM.OElement;
311
+ key: string;
312
+ template: string;
290
313
  context: RenderContext;
291
314
  };
292
315
  type Directive = {
@@ -422,7 +445,7 @@ type OComponentType<P extends Record<string, any> = {}, O extends Record<string,
422
445
 
423
446
  /**
424
447
  * Component responsible for display routes
425
- * Usage: <o-router></o-router>
448
+ * Usage: `<o-router></o-router>`
426
449
  */
427
450
  declare class ORouter extends OComponent {
428
451
  private router;
@@ -494,4 +517,4 @@ declare class OIcon extends OComponent {
494
517
 
495
518
  declare function components(): Record<string, OComponent<any, any>>;
496
519
 
497
- export { ACTIVE_ROUTE_TOKEN, App, type Binding, Component, type ComponentConstructor, type ComponentProps, type Directive, Emits, type InjectionKey, type LazyLoader, Native, OComponent, type OComponentType, ODOM, OIcon, ORouter, OUID, OUIDBridge, type OUIDBridgeInterface, type OUIDConfig, type Plugin, type Promised, type Provider, type Providers, ROUTER_INJECTION_TOKEN, RenderContext, RenderNode, type Route, type RouteGaurdFunction, type RouteGuard, type RouteGuardReturn, type RouteLocationNamed, Router, type Routes, State, type StateWatcher, Stated, StyleData, WebOUID, components, createComponent, createRouter, inject, isStated, node, o, provide, stated, useRouter };
520
+ export { ACTIVE_ROUTE_TOKEN, App, type Binding, Component, type ComponentConstructor, type ComponentProps, type Directive, Emits, type InjectionKey, type LazyLoader, Native, OComponent, type OComponentType, ODOM, OIcon, ORouter, OUID, OUIDBridge, type OUIDBridgeInterface, type OUIDConfig, type Plugin, type Promised, type Provider, type Providers, ROUTER_INJECTION_TOKEN, RenderContext, RenderNode, type Route, type RouteGaurdFunction, type RouteGuard, type RouteGuardReturn, type RouteLocationNamed, Router, type Routes, State, type StateWatcher, Stated, StyleData, WebOUID, components, createComponent, createRouter, deferMacro, deferMicro, inject, isStated, node, o, provide, stated, useRouter };
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import ot from'route-parser';var et=Object.defineProperty;var lt=(a,t,e)=>t in a?et(a,t,{enumerable:true,configurable:true,writable:true,value:e}):a[t]=e;var h=(a,t)=>et(a,"name",{value:t,configurable:true});var l=(a,t,e)=>lt(a,typeof t!="symbol"?t+"":t,e);var H=class H{constructor(){l(this,"components",new Map);}register(t,e){console.log(`[OUID] - Registering component: ${t}`);let n=t.toLocaleLowerCase();if(this.components.has(n)){console.warn(`[OUID] - ${n} component already registered`);return}this.components.set(n,e);}unregister(t){let e=t.toLocaleLowerCase();this.components.delete(e);}get(t){return this.components.get(t.toLocaleLowerCase())}has(t){return this.components.has(t)}getAll(){return Array.from(this.components.entries())}};h(H,"ComponentsRegistry");var S=H,T=new S;var q=class q{constructor(t){l(this,"events");this.events=t;}emit(t,...e){let n=this.events[t];console.log("Emitting event",t,n),n&&n(...e);}};h(q,"Emits");var P=q;var W=class W{constructor(t){l(this,"value");this.value=t;}};h(W,"Stated");var N=W;function nt(a){return typeof a=="object"&&!Array.isArray(a)&&"value"in a&&a instanceof N}h(nt,"isStated");function ut(a,t){let e=h((n,s=new Map)=>{if(s.has(n))return s.get(n);let o=new Proxy(n,{set:h((c,d,p)=>{let y=c[d];return typeof p=="object"?c[d]=e(p):c[d]=p,t.didChange(d,y,p),true},"set"),get:h((c,d)=>Reflect.get(c,d),"get")});s.set(n,o);for(let c=n;c;c=Object.getPrototypeOf(c))Object.keys(c).forEach(d=>{let p=n[d];typeof p=="object"&&(n[d]=e(p,s));});return o},"proxify");if(typeof a=="function")throw new Error("Can't create reactive element over a function");return typeof a!="object"&&typeof a!="symbol"?new Proxy(new N(a),{set:h((n,s,o)=>{if(s!=="value")throw new Error(`Undefined property ${String(s)} access`);let c=n[s];return n[s]=o,t.didChange(s,c,o),true},"set"),get:h((n,s)=>{if(s!=="value")throw new Error(`Undefined property ${String(s)} access`);return n[s]},"get")}):new N(e(a))}h(ut,"stated");var F=class F{constructor(t){l(this,"THRESHOLD_TIME",50);l(this,"debounceTime",new Date().getTime());l(this,"state");l(this,"listeners",[]);l(this,"timer",null);this.state=new Proxy(t,{set:h((e,n,s)=>{let o=e[n];return e[n]=s,this.didChange(n,o,s),true},"set"),get:h((e,n)=>e[n],"get")});}wrap(t){return ut(t,this)}has(t){return t in this.state}setValue(t,e){this.state[t]=e;}getValue(t){return this.state[t]}get value(){return this.state}dispatchChanges(t,e,n){for(let s of this.listeners)s(t,e,n);}async didChange(t,e,n){let s=Date.now();s-this.debounceTime<=this.THRESHOLD_TIME&&this.timer&&await OUID.clearTimeout(this.timer),this.debounceTime=s,this.timer=await OUID.setTimeout(()=>{this.dispatchChanges(t,e,n);},this.THRESHOLD_TIME);}watch(t){return this.listeners.push(t),this.listeners.length-1}unwatch(t){if(typeof t=="number"){this.listeners.splice(t,1);return}this.listeners.splice(this.listeners.indexOf(t),1);}};h(F,"State");var U=F;var ht=0;function st(a){return function(t){var s;let e=(s=class extends t{constructor(){super(...arguments);l(this,"template",a.template);l(this,"css",a.css);l(this,"tag",a.tag);l(this,"use",a.use);l(this,"hostClasses",a.hostClasses);l(this,"hash","component-"+ht+"-"+a.tag);}},h(s,"WithDecoration"),s),n=e;return n.tag=a.tag,e}}h(st,"Component");var B=class B{constructor(t,e=[]){l(this,"node");l(this,"children");this.node=t,this.children=e;}attachTo(t){if(typeof this.node=="string"){t.innerHTML=this.node;return}let e=this.node;for(let n of this.children)n.attachTo(e);t.appendChild(e);}static of(t,e=[]){return new B(t,e)}addChild(t){return this.children.push(t),this}};h(B,"RenderNode");var A=B,R=class R{constructor(t,e){l(this,"data");l(this,"css");this.data=t,this.css=e;}toString(){let t=this.css?this.css+`
1
+ import dt from'route-parser';var nt=Object.defineProperty;var mt=(i,t,e)=>t in i?nt(i,t,{enumerable:true,configurable:true,writable:true,value:e}):i[t]=e;var u=(i,t)=>nt(i,"name",{value:t,configurable:true});var l=(i,t,e)=>mt(i,typeof t!="symbol"?t+"":t,e);var q=class q{constructor(){l(this,"components",new Map);}register(t,e){console.log(`[OUID] - Registering component: ${t}`);let n=t.toLocaleLowerCase();if(this.components.has(n)){console.warn(`[OUID] - ${n} component already registered`);return}this.components.set(n,e);}unregister(t){let e=t.toLocaleLowerCase();this.components.delete(e);}get(t){return this.components.get(t.toLocaleLowerCase())}has(t){return this.components.has(t)}getAll(){return Array.from(this.components.entries())}};u(q,"ComponentsRegistry");var k=q,T=new k;var $=class ${constructor(t){l(this,"events");this.events=t;}emit(t,...e){let n=this.events[t];n&&n(...e);}};u($,"Emits");var P=$;var W=class W{constructor(t){l(this,"value");this.value=t;}};u(W,"Stated");var j=W;function st(i){return typeof i=="object"&&!Array.isArray(i)&&"value"in i&&i instanceof j}u(st,"isStated");function wt(i,t){let e=u((n,s=new Map)=>{if(s.has(n))return s.get(n);let o=new Proxy(n,{set:u((c,p,h)=>{let y=c[p];return typeof h=="object"?c[p]=e(h):c[p]=h,t.didChange(p,y,h),true},"set"),get:u((c,p)=>Reflect.get(c,p),"get")});s.set(n,o);for(let c=n;c;c=Object.getPrototypeOf(c))Object.keys(c).forEach(p=>{let h=n[p];typeof h=="object"&&(n[p]=e(h,s));});return o},"proxify");if(typeof i=="function")throw new Error("Can't create reactive element over a function");return typeof i!="object"&&typeof i!="symbol"?new Proxy(new j(i),{set:u((n,s,o)=>{if(s!=="value")throw new Error(`Undefined property ${String(s)} access`);let c=n[s];return n[s]=o,t.didChange(s,c,o),true},"set"),get:u((n,s)=>{if(s!=="value")throw new Error(`Undefined property ${String(s)} access`);return n[s]},"get")}):new j(e(i))}u(wt,"stated");var F=class F{constructor(t){l(this,"THRESHOLD_TIME",20);l(this,"debounceTime",new Date().getTime());l(this,"state");l(this,"listeners",[]);l(this,"timer",null);this.state=new Proxy(t,{set:u((e,n,s)=>{let o=e[n];return e[n]=s,this.didChange(n,o,s),true},"set"),get:u((e,n)=>e[n],"get")});}wrap(t){return wt(t,this)}has(t){return t in this.state}setValue(t,e){this.state[t]=e;}getValue(t){return this.state[t]}get value(){return this.state}dispatchChanges(t,e,n){for(let s of this.listeners)s(t,e,n);}async didChange(t,e,n){let s=Date.now();s-this.debounceTime<=this.THRESHOLD_TIME&&this.timer&&clearTimeout(this.timer),this.debounceTime=s,this.timer=setTimeout(()=>{this.dispatchChanges(t,e,n);},this.THRESHOLD_TIME);}watch(t){return this.listeners.push(t),this.listeners.length-1}unwatch(t){if(typeof t=="number"){this.listeners.splice(t,1);return}this.listeners.splice(this.listeners.indexOf(t),1);}};u(F,"State");var U=F;var yt=0;function rt(i){return function(t){var s;let e=(s=class extends t{constructor(){super(...arguments);l(this,"template",i.template);l(this,"css",i.css);l(this,"tag",i.tag);l(this,"use",i.use);l(this,"hostClasses",i.hostClasses);l(this,"hash","component-"+yt+"-"+i.tag);}},u(s,"WithDecoration"),s),n=e;return n.tag=i.tag,e}}u(rt,"Component");var V=class V{constructor(t,e=[]){l(this,"node");l(this,"children");this.node=t,this.children=e;}attachTo(t){if(typeof this.node=="string"){t.innerHTML=this.node;return}let e=this.node;for(let n of this.children)n.attachTo(e);t.appendChild(e);}static of(t,e=[]){return new V(t,e)}addChild(t){return this.children.push(t),this}};u(V,"RenderNode");var S=V,I=class I{constructor(t,e){l(this,"data");l(this,"css");this.data=t,this.css=e;}toString(){let t=this.css?this.css+`
2
2
  `:"";for(let e in this.data){let n=this.data[e];typeof n=="string"?t+=`${e} { ${n} }
3
- `:n instanceof R&&(t+=`${e} {
3
+ `:n instanceof I&&(t+=`${e} {
4
4
  ${n.toString()}}
5
- `);}return t}static of(t,...e){return new R(t,e.join(`
6
- `))}};h(R,"StyleData");var V=R;function J(a,t,e){return new a(t,e)}h(J,"createComponent");var K=class K{constructor(t={},e={}){l(this,"state");l(this,"parent");l(this,"emits");l(this,"props");l(this,"provides",new Map);this.state=new U(this),this.props=t,this.emits=new P(e);}onMounted(){}willMount(){}willUnmount(){}provide(t,e){this.provides.set(t,e);}inject(t){let e=this;for(;e;){if(e.provides.has(t))return e.provides.get(t);e=e.parent;}}decorateHostElement(t){return Promise.resolve()}};h(K,"OComponent");var _=K;function L(a){let t=Date.now();return `${(1e3+Math.floor(Math.random()*9e3)+a.length).toString(16)}-${t.toString(16)}`}h(L,"generateUIID");(function(a){var c,d,p,y,m;let t=(c=class{constructor(){l(this,"actions",[]);}async exec(){}add(i){return this.actions.push(i),this}async commit(){let i=this.actions;this.actions=[],await Promise.all(i.map(async r=>await r()));}},h(c,"BatchActions"),c);a.BatchActions=t;let e=(d=class{constructor(i){l(this,"node");l(this,"operations",[]);this.node=i;}async exec(){let i=this.operations.map(r=>typeof r=="object"?this.node[r.fn].apply(this.node,r.args):Promise.resolve(r()));try{await Promise.all(i);}catch{console.error("Error while batch updates");}}append(i,...r){return this.operations.push({fn:i,args:r}),this}add(i){return this.operations.push(i),this}addEventListener(i,r){return this.append("addEventListener",i,r)}setProperty(i,r){return this.append("setAttribute",i,r)}dettachEventListener(i,r){return this.append("dettachEventListener",i,r)}invoke(i,...r){return this.append("invoke",i,...r)}dispatchEvent(i,r,u){return this.append("dispatchEvent",i,r,u)}addClass(...i){return this.append("addClass",...i)}removeClass(...i){return this.append("removeClass",...i)}setAttribute(i,r){return this.append("setAttribute",i,r)}removeAttribute(i){return this.append("removeAttribute",i)}appendChild(i){return this.append("appendChild",i)}removeChild(i){return this.append("removeChild",i)}remove(){return this.append("remove")}removeAndRelease(){return this.append("removeAndRelease")}release(){return this.append("release")}innerHTML(i){return this.append("setHTML",i)}replaceChildNode(i,r){return this.append("replaceChildNode",i,r)}replaceWith(i){return this.append("replaceWith",i)}after(i){return this.append("after",i)}setInnerText(i){return this.append("setInnerText",i)}setContentText(i){return this.append("setContentText",i)}insertBefore(i,r){return this.append("insertBefore",i,r)}setInputValue(i){return this.append("setInputValue",i)}setStyle(i,r){return this.append("setStyle",i,r)}},h(d,"BatchUpdates"),d);a.BatchUpdates=e;let n=(p=class{constructor(i,r){l(this,"uid");l(this,"tag");this.uid=i,this.tag=r;}async addEventListener(i,r){return f.addEventListener(this,i,r)}async dettachEventListener(i,r){await f.dettachEventListener(this,i,r);}async invoke(i,...r){await f.call("invokeObjectMethod",this.uid,i,...r);}async getProperty(i){return await f.call("getObjectProperty",this.uid,i)}async setProperty(i,r){await f.call("setObjectProperty",this.uid,i,r);}async dispatchEvent(i,r,u){await f.call("dispatchEvent",this.uid,i,r,u);}},h(p,"OObject"),p);a.OObject=n;let s=(y=class extends n{constructor(r){super(r.uid,r.tag);l(this,"textContent");l(this,"type","Unknown");l(this,"attributes");l(this,"children");l(this,"classes");l(this,"style");for(let u in r)this[u]=r[u];this.attributes??(this.attributes=[]),this.classes??(this.classes=[]),this.style??(this.style="");}},h(y,"ONode"),y);a.ONode=s;let o=(m=class extends s{constructor(r){super(r);l(this,"_hydrated",false);}async addClass(...r){await f.call("addClass",this.uid,...r);}async removeClass(...r){await f.call("removeClass",this.uid,...r);}async setAttribute(r,u){let v=await f.call("setAttribute",this.uid,r,u);v&&(this.attributes=v);}async removeAttribute(r){let u=await f.call("removeAttribute",this.uid,r);u&&(this.attributes=u);}async appendChild(r){await f.call("appendChild",this.uid,r.uid);}set innerHTML(r){this.setHTML(r);}async cloneNode(r){let u=await f.call("cloneNode",this.uid,r);return u?new m(u):null}async remove(){await f.call("removeNode",this.uid);}async removeAndRelease(){await this.remove(),await this.release();}async removeChild(r){await f.call("removeChild",this.uid,r.uid);}async replaceChildNode(r,u){await f.call("removeChild",this.uid,r.uid,u.uid);}async replaceWith(r){await f.call("replaceWith",this.uid,r.uid);}async after(r){await f.call("insertAfter",this.uid,r.uid);}async setHTML(r){await f.call("setInnerHTML",this.uid,r);}async HTML(){return await f.call("getInnerHTML",this.uid)??""}async setInnerText(r){await f.call("setInnerText",this.uid,r);}async setContentText(r){await f.call("setContentText",this.uid,r);}async getContentText(){return await f.call("getContentText",this.uid)??""}async content(){try{return await f.call("getInnerText",this.uid)??""}catch(r){return console.error(r),""}}async childNodes(){return (await f.call("childNodes",this.uid))?.map(r=>new m(r))??[]}hasAttribute(r){return !!this.attributes.find(u=>u.name===r)}async getAttribute(r){return await f.call("getAttribte",this.uid,r)??""}attribute(r){return this.attributes.find(u=>u.name===r)?.value??null}async nextSibling(){let r=await f.call("nextSibling",this.uid);return r?new m(r):null}async getAttributeNames(){return await f.call("getAttributeNames",this.uid)??[]}async parentNode(){let r=await f.call("parentNode",this.uid);return r?new m(r):null}async insertBefore(r,u){await f.call("insertBefore",this.uid,u.uid,r.uid);}async setInputValue(r){await f.call("setInputValue",this.uid,r);}async inputValue(r){return await f.call("inputValue",this.uid,r)??""}get hydrated(){return this._hydrated}hydrate(){this._hydrated=true,this.addClass("hydrated");}async query(r,u){return await f.query(r,u,this.uid)}async queryAll(r,u){return await f.queryAll(r,u,this.uid)}async release(){await f.call("releaseNode",this.uid);}async setStyle(r,u){await f.call("setStyle",this.uid,r,u);}updates(){return new e(this)}},h(m,"OElement"),m);a.OElement=o;})(b||(b={}));function Mt(){return function(a,t,e){e.value;e.value=async(...s)=>{let o=s[0];try{let c=await f.invoke(t,[{props:o.getSafePropsForNative}]);console.log("result from native function"),o.setSafePropsFromNative;}catch{console.error("Failed to invoke native function");}};}}h(Mt,"Native");var z=class z{constructor(){l(this,"callbacks",new Map);l(this,"DOM_EVENT_LISTENERS",new Map);l(this,"timers",new Map);l(this,"_config");l(this,"listeners",new Map);this.subscribe("__ouid_native_event_success__",(t,e)=>{let n=this.callbacks.get(t);if(n)return this.callbacks.delete(t),n.success(...JSON.parse(e))}),this.subscribe("__ouid_native_event_error__",(t,e)=>{let n=this.callbacks.get(t);if(n)return console.error("Failure:",t,e),this.callbacks.delete(t),n.error(...JSON.parse(e))}),this.subscribe("__ouid_web_event__",(t,e)=>{let n=this.DOM_EVENT_LISTENERS.get(t);if(n){let o=JSON.parse(e)[1];return o&&(o.target=o?.target?new b.OElement(o.target):null),n(o)}});}config(t){return this._config=t,this}invoke(t,...e){let n=L(t);return new Promise((s,o)=>{this.callbacks.set(n,{success:s,error:o});try{if(!WebOUID)throw new Error("NativeOUID bridge not available");WebOUID.invoke(n,t,JSON.stringify(e));}catch(c){console.error(c),this.callbacks.delete(n);}})}registerComponent(t,e){T.register(t,e);}unregisterComponent(t,e){T.unregister(t);}async call(t,...e){try{return (await this.invoke(`_ouid_${t}`,...e)).data}catch(n){return console.error(n),null}}emit(t,e){WebOUID?.invoke("event",t,JSON.stringify(e));}subscribe(t,e){this.listeners.has(t)||(this.listeners.set(t,[]),globalThis[t]=(n,s)=>{this.listeners.get(t)?.forEach(o=>o(n,s));}),this.listeners.get(t).push(e);}async query(t,e,n){let s=await this.call("query",t,e,n);return s?new b.OElement(s):null}async queryAll(t,e,n){let s=await this.call("queryAll",t,e,n);return s?s.map(o=>new b.OElement(o)):[]}async createElement(t,e={}){let n=await this.call("createElement",t,e);return n?new b.OElement(n):null}async createComment(t){let e=await this.call("createComment",t);return e?new b.OElement(e):null}async addEventListener(t,e,n){let s=L(e+(typeof t=="string"?t:t.tag));return this.DOM_EVENT_LISTENERS.set(s,n),await f.call("attachEventListener",typeof t=="string"?t:t.uid,s,e),s}async dettachEventListener(t,e,n){this.DOM_EVENT_LISTENERS.delete(n),await f.call("dettachEventListener",typeof t=="string"?t:t.uid,n,e);}async injectComponentStyles(t){let e=await f.call("injectComponentStyles",t);return e?new b.OElement(e):null}async rejectComponentStyles(t){await f.call("rejectComponentStyles",t.uid);}async getOObject(t){let e=await f.call("getOObject",t);return e?new b.OObject(e.uid,e.tag):null}async acquireObject(t){let e=await f.call("acquireObject",t);return e?new b.OObject(e.uid,e.tag):null}async setTimeout(t,e){let n=L("setTimeout"+e);this.DOM_EVENT_LISTENERS.set(n,()=>{t();let o=this.timers.get(s);o&&(this.timers.delete(s),this.DOM_EVENT_LISTENERS.delete(o));});let s=await f.call("setTimeout",n,e)??-1;return console.log("Timer id",s),s>=0&&this.timers.set(s,n),s}async clearTimeout(t){let e=this.timers.get(t);e&&(this.timers.delete(t),this.DOM_EVENT_LISTENERS.delete(e),await f.call("clearTimeout",t));}async setInterval(t,e){let n=L("setInterval"+e);this.DOM_EVENT_LISTENERS.set(n,t);let s=await f.call("setInterval",n,e)??-1;return s>=0&&this.timers.set(s,n),s}async clearInterval(t){let e=this.timers.get(t);e&&(this.timers.delete(t),this.DOM_EVENT_LISTENERS.delete(e),await f.call("clearInterval",t));}async fetch(t,e,n="json"){return await f.call("fetch",t,e,n)}};h(z,"OUIDBridge");var Y=z,f=new Y;globalThis.OUID=f;var b;function dt(a){return a.replace(/-([a-z])/g,(t,e)=>e.toUpperCase())}h(dt,"toCamelCase");function pt(a){return a.replace(/(?!^)([A-Z])/g,(t,e)=>`-${e.toLowerCase()}`)}h(pt,"toSnakeCase");function x(a){return nt(a)?a.value:a}h(x,"normaliseValue");function ft(a){let t={};for(let e=a;e;e=Object.getPrototypeOf(e))Object.getOwnPropertyNames(e).forEach(n=>{let s=a[n];typeof s=="function"&&n!=="constructor"&&!n.startsWith("__")&&!n.endsWith("__")?n in t||(t[n]=s.bind(a)):n!=="constructor"&&!n.startsWith("__")&&!n.endsWith("__")&&(n in t||(t[n]=s));});return t}h(ft,"toObjectWithFunctions");function mt(a){return typeof a=="function"&&!("prototype"in a)}h(mt,"isLazyLoader");var E=class E{constructor(t,e,n,...s){l(this,"app");l(this,"component");l(this,"parentContext");l(this,"bindings",[]);l(this,"directives",[]);l(this,"mountedComponents",new WeakMap);l(this,"componentsRegistry",new S);l(this,"updatingDirectives",false);l(this,"updatingBindings",false);l(this,"stack",[]);l(this,"hydradationActions",new b.BatchActions);this.app=t,this.component=e,this.parentContext=n;for(let o of s)this.stack.push(o);}get hostElement(){return this.component._hostElement}bind(t){this.bindings.push(t);}directive(t){this.directives.push(t);}evaluateExpression(t){return this.resolve(t)}resolve(t,e=true,...n){if(!t)return;let s=this.component.state.value,c={...ft(s)};for(let d of [...this.stack.reverse(),...n])Object.assign(c,d);try{let d=`${e?'"use strict";':""}return ${t};`,p=Object.keys(c),y=new Function(...p,d);return y.bind(this.component),y.apply(this.component,Object.values(c))}catch(d){console.log(this,t),console.error(d);}}updateValue(t,e){t.split(/[\.\[]/)[0]in this.component?this.resolve(`this.${t}=__o_model_value__`,true,{__o_model_value__:e}):this.resolve(`${t}=__o_model_value__`,true,{__o_model_value__:e}),this.component.state.didChange("","","");}push(t){this.stack.unshift(t);}pop(){this.stack.shift();}resolveTag(t){let e=this;for(;;){if(e.componentsRegistry.has(t))return e.componentsRegistry.get(t);if(e=e?.parentContext??null,!e)break}return T.get(t)}async updateBindings(t){if(this.updatingBindings)return;let e=!t;t=t??new b.BatchActions,this.updatingBindings=true,this.bindings.forEach(n=>this.updateBinding(n,t)),e&&await t.commit(),this.updatingBindings=false;}updateBinding(t,e){if(t.type==="model")t.node.setProperty("value",x(t.context.resolve(t.key)));else if(t.type==="interpolation")e.add(async()=>{await t.node.setContentText(t.template?.replace(/\{\{(.*?)\}\}/g,(n,s)=>(s=s.trim(),x(t.context.resolve(s))))??"");});else if(t.type==="attribute"){let n=t.key,s=x(this.resolve(t.template));n==="class"?e.add(()=>this.expandClass(t.node,s)):n==="style"?this.expandStyle(t.node,s):typeof s!="object"&&typeof s!="function"&&typeof s!="symbol"&&typeof s<"u"&&e.add(()=>t.node.setAttribute(n,s.toString()));}else if(t.type==="prop"&&t.context.component){let n=x(this.resolve(t.template));try{t.context.component.props[t.key]=n,t.context.updateBindings(),t.context.updateDirectives();}catch(s){console.error(s);}}}async updateDirectives(t){if(this.updatingDirectives)return;let e=!t;this.updatingDirectives=true,t=t??new b.BatchActions;for(let n of this.directives){if(n.type==="if"){if(!x(n.context.evaluateExpression(n.expr))){if(n.active===false)continue;n.active=false,n.renderedNode&&(n.destroy?(this.unmountComponent(n.node),await n.renderedNode.removeAndRelease()):await n.renderedNode.addClass("oui-hidden"));continue}if(n.active===true)continue;n.active=true;let o=n.renderedNode;if(!o||n.destroy){let c=await n.node.cloneNode(true);n.renderedNode=c,await n.context.render(c),await n.placeholder.after(c),await n.context.hydradationActions.commit();}else await o.removeClass("oui-hidden");}if(n.type==="for"){let s=n.children??new Map,o=new Map,c=h((y,m)=>n.key?x(n.context.resolve(n.key,true,{[n.item]:y})):m,"keyFn"),d=x(n.context.resolve(n.list))||[],p=n.placeholder;for(let y=0;y<d.length;y++){let m=d[y],O=c(m,y),i=s.get(O),r,u;i?(r=i.node,u=i.ctx,console.log("Reusing entry"),u.stack=[{[n.item]:m},...n.context.stack],r.uid!==(await p.nextSibling())?.uid&&await p.after(r),await Promise.all([u.updateBindings(),u.updateDirectives()])):(u=new E(this.app,this.component,this),u.hydradationActions=this.hydradationActions,u.stack=[{[n.item]:m},...n.context.stack],r=await n.node.cloneNode(true),await u.render(r),await p.after(r),u.updateDirectives()),p=r,o.set(O,{node:r,ctx:u});}for(let[y,m]of s.entries())o.has(y)||(this.unmountComponent(m.node),t.add(()=>m.node.removeAndRelease()));n.children=o;}}e&&await t.commit(),await this.hydradationActions.commit(),this.updatingDirectives=false;}async render(t,e){if(!t.hydrated&&!(e?.skipSlotted&&t.hasAttribute("slotted"))){switch(t.type){case "Text":this.handleTextNode(t);break;case "Element":await this.handleElementNode(t,e);break;default:console.warn("Unknown node",t);}await Promise.all([this.updateBindings(),this.updateDirectives()]),this.hydradationActions.add(()=>t.hydrate());}}async expandClass(t,e){let n;typeof e=="object"?Array.isArray(e)?n=e:n=Object.keys(e).filter(s=>e[s]):n=e.toString().split(/\s+/),n.length>0&&await t.addClass(...n);}expandStyle(t,e){let n=e;typeof e=="object"&&!Array.isArray(e)&&(n=Object.keys(e).filter(s=>e[s]).map(s=>`${pt(s)}: ${e[s]}`).join(";")),n&&t.setAttribute("style",n);}expandStandardAttributes(t){let e=t.updates();[...t.attributes].filter(n=>n.name.startsWith(":")).forEach(n=>{let s=n.name.substring(1);this.bind({type:"attribute",node:t,key:s,context:this,template:n.value.trim()}),e.removeAttribute(n.name);}),e.exec();}async handleElementNode(t,e){let n=await t.parentNode(),s=null,o=t.hasAttribute("o-if")?"o-if":t.hasAttribute("o-show")?"o-show":null;if(o){let u=await t.getAttribute(o),v=await OUID.createComment(o+":"+u),w=o==="o-if";await n.insertBefore(v,t),await t.updates().removeAttribute(o).remove().exec(),this.directive({type:"if",expr:u,node:t,placeholder:v,context:this,active:void 0,destroy:w}),s="if";return}if(t.hasAttribute("o-for")){if(s==="if")throw new Error("Can't have o-if and o-for on the same component");let u=await t.getAttribute("o-for"),[v,w]=u.split(" of ").map(I=>I.trim()),g=await OUID.createComment("for:"+u),C=t.attribute(":key")??"";await n?.insertBefore(g,t),await t.updates().removeAttribute("o-for").removeAttribute(":key").remove().exec(),this.directive({type:"for",item:v,list:w,node:t,placeholder:g,context:this,key:C}),s="for";return}let c=t.tag.toLowerCase(),d=this.resolveTag(c),p=t.updates();[...t.attributes].forEach(async u=>{if(u.name==="o-model"){let v=u.value.trim();(t.tag==="input"||t.tag==="textarea")&&(p.setInputValue(x(this.resolve(v))).addEventListener("input",async w=>{let g=await w.target.getProperty("value");this.updateValue(v,g);}),this.bind({node:t,key:v,type:"model",context:this})),p.removeAttribute(u.name);}});let y={},m={},{props:O,events:i}=this.componentAttributes(t,this);if(y=O,m=i,this.expandStandardAttributes(t),Object.keys(m).forEach(async u=>{let v=m[u];d||p.addEventListener(u,w=>{typeof v=="function"&&v.apply(this.component,[w]);}),p.removeAttribute("@"+u);}),await p.exec(),d){await this.mountComponent(t,d,this,y,m);return}let r=await t.childNodes();e?.skipSlotted&&(r=r.filter(u=>!u.hasAttribute("slotted")));for(let u of r)await this.render(u,e);}handleTextNode(t){let e=t.textContent?.match(/\{\{(.*?)\}\}/g);e&&e.forEach(n=>{let s=n.replace(/[{}]/g,"").trim();this.bind({type:"interpolation",node:t,key:s,template:t.textContent,context:this});});}componentAttributes(t,e){let n={},s={},o=["import","interface","module","o-model","o-if","o-for"];return [...t.attributes].filter(c=>!o.includes(c.name)).forEach(c=>{let d=c.name;if(d.startsWith("@")){let m=e?.resolve(c.value,true);if(typeof m!="function")throw new Error("Event handler can only be function");d=d.substring(1),s[d]=m;return}let p=null,y=c.value;d.startsWith(":")&&(p=c.value,d=d.substring(1),y=x(e?.resolve(c.value))),d=dt(d),n[d]={name:d,value:y,expr:p};}),{props:n,events:s}}async mountComponent(t,e,n,s={},o={}){if(this.mountedComponents.has(t))return;let c=new E(this.app,{},this),d={};Object.keys(s).forEach(w=>{let g=s[w];g.expr&&this.bind({type:"prop",node:t,key:w,context:c,template:g.expr}),d[w]=g.value;});let p=await wt(e,d,o);c.component=p,c.stack=[],this.mountedComponents.set(t,p);let y=t.updates();Object.keys(s).filter(w=>!s[w].expr).forEach(w=>y.setAttribute(w,s[w].value));let m=p.hostClasses??[];m&&(m=typeof m=="string"?[m]:m),m.push("o-component-host"),t.tag.toLowerCase()!=="div"&&m.push("c-"+t.tag.toLowerCase()),y.addClass(...m),await y.exec(),await p.decorateHostElement(t);let O=p.use??{};if(Object.keys(O).forEach(w=>{let g=O[w],C=w;c.componentsRegistry.register(C,g);}),p.willMount(),!e.cssInstance){let w=p.style?p.style()?.toString():p.css;w&&(e.cssInstance??(e.cssInstance=await OUID.injectComponentStyles(w)));}let i=e.cssInstance;if(i){let w=E.STYLE_REF.get(i)??0;E.STYLE_REF.set(i,w+1),p.cssInstance=i;}let r=await t.childNodes();if(p.render){let w=await p.render(c);w&&w.attachTo(t);}else await t.setHTML(p.template.trim());let u=await t.queryAll("slot");if(u){let w=u.filter(g=>!g.classes?.includes("hydrated")).map(async g=>{let C=g.attribute("name");for(let I of r.filter(k=>C?C&&k.type==="Element"&&k.attribute("slot")===C:k.type!=="Element"||!k.hasAttribute("slot")))await I.setAttribute("slotted","true"),await g.appendChild(I),await this.render(I);});await Promise.all(w);}p._hostElement=t,p.parent=n?.component??void 0,p.provide(E.PROVIDE_TOKEN,this);let v=await t.childNodes();await Promise.all(v.map(w=>c.render(w,{skipSlotted:true}))),c.updateDirectives(),p.onMounted(),await c.hydradationActions.commit(),p.state.watch(()=>{c.updateBindings(),c.updateDirectives();});}async unmountComponent(t){let e=this.mountedComponents.get(t);if(e){let s=e.cssInstance;if(s){let o=E.STYLE_REF.get(s)??1;o===1?(await OUID.rejectComponentStyles(s),E.STYLE_REF.delete(s)):E.STYLE_REF.set(s,o-1);}e.willUnmount(),e._hostElement=null,e.cssInstance=null;}let n=await t.queryAll("*")??[];for(let s of n)await this.unmountComponent(s);this.mountedComponents.delete(t);}};h(E,"RenderContext"),l(E,"PROVIDE_TOKEN","RENDER_CONTEXT"),l(E,"STYLE_REF",new WeakMap);var j=E;async function Ht(a,t,e=[],n){let s=t??{},o=await OUID.createElement(a,Object.keys(s).reduce((c,d)=>(c[d]=s[d],c),{}));return Object.keys(n??{}).forEach(c=>{o?.addEventListener(c,d=>{let p=n[c];typeof p=="function"&&p(d);});}),new A(o,e)}h(Ht,"node");function wt(a,t,e){return mt(a)?a().then(n=>J(n.default,t,e)):J(a,t,e)}h(wt,"o");function yt(a){return typeof a=="function"}h(yt,"isProvideFunction");var D=class D{constructor(t,e){l(this,"root");l(this,"options");l(this,"providers",new Map);this.root=t,this.options=e,D.currentApp=this;}provide(t,e){if(this.providers.has(t)){console.warn(`[OUID] - Provider ${t} already exists`);return}this.providers.set(t,yt(e)?{provide:e}:{value:e});}inject(t){return this.providers.get(t)?.value}use(t,e){return t.install(this,e),this}async mount(t){if(!globalThis.__OUI_PUR_JS_CONTEXT__)return;this.options?.css&&(console.log("Injecting app css",this.options.css),await OUID.injectComponentStyles(this.options.css)),await OUID.injectComponentStyles(`
5
+ `);}return t}static of(t,...e){return new I(t,e.join(`
6
+ `))}};u(I,"StyleData");var B=I;function Y(i,t,e){return new i(t,e)}u(Y,"createComponent");var J=class J{constructor(t={},e={}){l(this,"state");l(this,"parent");l(this,"emits");l(this,"props");l(this,"provides",new Map);this.state=new U(this),this.props=t,this.emits=new P(e);}onMounted(){}willMount(){}willUnmount(){}provide(t,e){this.provides.set(t,e);}inject(t){let e=this;for(;e;){if(e.provides.has(t))return e.provides.get(t);e=e.parent;}}decorateHostElement(t){return Promise.resolve()}};u(J,"OComponent");var _=J;function N(i){let t=Date.now();return `${(1e3+Math.floor(Math.random()*9e3)+i.length).toString(16)}-${t.toString(16)}`}u(N,"generateUIID");(function(i){var c,p,h,y,v;let t=(c=class{constructor(){l(this,"actions",[]);}async exec(){await this.commit();}add(a){return this.actions.push(a),this}async commit(){let a=this.actions;this.actions=[],await Promise.all(a.map(async r=>await r()));}},u(c,"BatchActions"),c);i.BatchActions=t;let e=(p=class{constructor(a){l(this,"node");l(this,"operations",[]);this.node=a;}async exec(){let a=this.operations.map(r=>typeof r=="object"?this.node[r.fn].apply(this.node,r.args):Promise.resolve(r()));try{await Promise.all(a);}catch{console.error("Error while batch updates");}}append(a,...r){return this.operations.push({fn:a,args:r}),this}add(a){return this.operations.push(a),this}addEventListener(a,r){return this.append("addEventListener",a,r)}setProperty(a,r){return this.append("setAttribute",a,r)}dettachEventListener(a,r){return this.append("dettachEventListener",a,r)}invoke(a,...r){return this.append("invoke",a,...r)}dispatchEvent(a,r,d){return this.append("dispatchEvent",a,r,d)}addClass(...a){return this.append("addClass",...a)}removeClass(...a){return this.append("removeClass",...a)}setAttribute(a,r){return this.append("setAttribute",a,r)}removeAttribute(a){return this.append("removeAttribute",a)}appendChild(a){return this.append("appendChild",a)}removeChild(a){return this.append("removeChild",a)}remove(){return this.append("remove")}removeAndRelease(){return this.append("removeAndRelease")}release(){return this.append("release")}innerHTML(a){return this.append("setHTML",a)}replaceChildNode(a,r){return this.append("replaceChildNode",a,r)}replaceWith(a){return this.append("replaceWith",a)}after(a){return this.append("after",a)}setInnerText(a){return this.append("setInnerText",a)}setContentText(a){return this.append("setContentText",a)}insertBefore(a,r){return this.append("insertBefore",a,r)}setInputValue(a){return this.append("setInputValue",a)}setStyle(a,r){return this.append("setStyle",a,r)}},u(p,"BatchUpdates"),p);i.BatchUpdates=e;let n=(h=class{constructor(a,r){l(this,"uid");l(this,"tag");this.uid=a,this.tag=r;}async addEventListener(a,r){return f.addEventListener(this,a,r)}async dettachEventListener(a,r){await f.dettachEventListener(this,a,r);}async invoke(a,...r){await f.call("invokeObjectMethod",this.uid,a,...r);}async getProperty(a){return await f.call("getObjectProperty",this.uid,a)}async setProperty(a,r){await f.call("setObjectProperty",this.uid,a,r);}async dispatchEvent(a,r,d){await f.call("dispatchEvent",this.uid,a,r,d);}},u(h,"OObject"),h);i.OObject=n;let s=(y=class extends n{constructor(r){super(r.uid,r.tag);l(this,"textContent");l(this,"type","Unknown");l(this,"attributes");l(this,"children");l(this,"classes");l(this,"style");for(let d in r)this[d]=r[d];this.attributes??(this.attributes=[]),this.classes??(this.classes=[]),this.style??(this.style="");}},u(y,"ONode"),y);i.ONode=s;let o=(v=class extends s{constructor(r){super(r);l(this,"_hydrated",false);}async addClass(...r){await f.call("addClass",this.uid,...r);}async removeClass(...r){await f.call("removeClass",this.uid,...r);}async setAttribute(r,d){let w=await f.call("setAttribute",this.uid,r,d);w&&(this.attributes=w);}async removeAttribute(r){let d=await f.call("removeAttribute",this.uid,r);d&&(this.attributes=d);}async appendChild(r){await f.call("appendChild",this.uid,r.uid);}set innerHTML(r){this.setHTML(r);}async cloneNode(r){let d=await f.call("cloneNode",this.uid,r);return d?new v(d):null}async remove(){await f.call("removeNode",this.uid);}async removeAndRelease(){await this.remove(),await this.release();}async removeChild(r){await f.call("removeChild",this.uid,r.uid);}async replaceChildNode(r,d){await f.call("removeChild",this.uid,r.uid,d.uid);}async replaceWith(r){await f.call("replaceWith",this.uid,r.uid);}async after(r){await f.call("insertAfter",this.uid,r.uid);}async setHTML(r){await f.call("setInnerHTML",this.uid,r);}async HTML(){return await f.call("getInnerHTML",this.uid)??""}async setInnerText(r){await f.call("setInnerText",this.uid,r);}async setContentText(r){await f.call("setContentText",this.uid,r);}async getContentText(){return await f.call("getContentText",this.uid)??""}async content(){try{return await f.call("getInnerText",this.uid)??""}catch(r){return console.error(r),""}}async childNodes(){return (await f.call("childNodes",this.uid))?.map(r=>new v(r))??[]}hasAttribute(r){return !!this.attributes.find(d=>d.name===r)}async getAttribute(r){return await f.call("getAttribte",this.uid,r)??""}attribute(r){return this.attributes.find(d=>d.name===r)?.value??null}async nextSibling(){let r=await f.call("nextSibling",this.uid);return r?new v(r):null}async getAttributeNames(){return await f.call("getAttributeNames",this.uid)??[]}async parentNode(){let r=await f.call("parentNode",this.uid);return r?new v(r):null}async insertBefore(r,d){await f.call("insertBefore",this.uid,d.uid,r.uid);}async setInputValue(r){await f.call("setInputValue",this.uid,r);}async inputValue(r){return await f.call("inputValue",this.uid,r)??""}get hydrated(){return this._hydrated}hydrate(){this._hydrated=true,this.addClass("hydrated");}async query(r,d){return await f.query(r,d,this.uid)}async queryAll(r,d){return await f.queryAll(r,d,this.uid)}async release(){await f.call("releaseNode",this.uid);}async setStyle(r,d){await f.call("setStyle",this.uid,r,d);}updates(){return new e(this)}},u(v,"OElement"),v);i.OElement=o;})(g||(g={}));function qt(){return function(i,t,e){e.value;e.value=async(...s)=>{let o=s[0];try{let c=await f.invoke(t,[{props:o.getSafePropsForNative}]);o.setSafePropsFromNative;}catch{console.error("Failed to invoke native function");}};}}u(qt,"Native");var z=class z{constructor(){l(this,"callbacks",new Map);l(this,"DOM_EVENT_LISTENERS",new Map);l(this,"timers",new Map);l(this,"_config");l(this,"listeners",new Map);this.subscribe("__ouid_native_event_success__",(t,e)=>{let n=this.callbacks.get(t);if(n)return this.callbacks.delete(t),n.success(...JSON.parse(e))}),this.subscribe("__ouid_native_event_error__",(t,e)=>{let n=this.callbacks.get(t);if(n)return console.error("Failure:",t,e),this.callbacks.delete(t),n.error(...JSON.parse(e))}),this.subscribe("__ouid_web_event__",(t,e)=>{let n=this.DOM_EVENT_LISTENERS.get(t);if(n){let o=JSON.parse(e)[1];return o&&(o.target=o?.target?new g.OElement(o.target):null),n(o)}});}config(t){return this._config=t,this}invoke(t,...e){let n=N(t);return new Promise((s,o)=>{this.callbacks.set(n,{success:s,error:o});try{if(!WebOUID)throw new Error("NativeOUID bridge not available");WebOUID.invoke(n,t,JSON.stringify(e));}catch(c){console.error(c),this.callbacks.delete(n);}})}registerComponent(t,e){T.register(t,e);}unregisterComponent(t,e){T.unregister(t);}async call(t,...e){try{return (await this.invoke(`_ouid_${t}`,...e)).data}catch(n){return console.error(n),null}}emit(t,e){WebOUID?.invoke("event",t,JSON.stringify(e));}subscribe(t,e){this.listeners.has(t)||(this.listeners.set(t,[]),globalThis[t]=(n,s)=>{this.listeners.get(t)?.forEach(o=>o(n,s));}),this.listeners.get(t).push(e);}async query(t,e,n){let s=await this.call("query",t,e,n);return s?new g.OElement(s):null}async queryAll(t,e,n){let s=await this.call("queryAll",t,e,n);return s?s.map(o=>new g.OElement(o)):[]}async createElement(t,e={}){let n=await this.call("createElement",t,e);return n?new g.OElement(n):null}async createComment(t){let e=await this.call("createComment",t);return e?new g.OElement(e):null}async addEventListener(t,e,n){let s=N(e+(typeof t=="string"?t:t.tag));return this.DOM_EVENT_LISTENERS.set(s,n),await f.call("attachEventListener",typeof t=="string"?t:t.uid,s,e),s}async dettachEventListener(t,e,n){this.DOM_EVENT_LISTENERS.delete(n),await f.call("dettachEventListener",typeof t=="string"?t:t.uid,n,e);}async injectComponentStyles(t){let e=await f.call("injectComponentStyles",t);return e?new g.OElement(e):null}async rejectComponentStyles(t){await f.call("rejectComponentStyles",t.uid);}async getOObject(t){let e=await f.call("getOObject",t);return e?new g.OObject(e.uid,e.tag):null}async acquireObject(t){let e=await f.call("acquireObject",t);return e?new g.OObject(e.uid,e.tag):null}async setTimeout(t,e){let n=N("setTimeout"+e);this.DOM_EVENT_LISTENERS.set(n,()=>{t();let o=this.timers.get(s);o&&(this.timers.delete(s),this.DOM_EVENT_LISTENERS.delete(o));});let s=await f.call("setTimeout",n,e)??-1;return s>=0&&this.timers.set(s,n),s}async clearTimeout(t){let e=this.timers.get(t);e&&(this.timers.delete(t),this.DOM_EVENT_LISTENERS.delete(e),await f.call("clearTimeout",t));}async setInterval(t,e){let n=N("setInterval"+e);this.DOM_EVENT_LISTENERS.set(n,t);let s=await f.call("setInterval",n,e)??-1;return s>=0&&this.timers.set(s,n),s}async clearInterval(t){let e=this.timers.get(t);e&&(this.timers.delete(t),this.DOM_EVENT_LISTENERS.delete(e),await f.call("clearInterval",t));}async fetch(t,e,n="json"){return await f.call("fetch",t,e,n)}};u(z,"OUIDBridge");var K=z,f=new Proxy(new K,{get:u((i,t)=>t in i?i[t]:async(...e)=>await i.call(t,...e),"get")});globalThis.OUID=f;var g;function vt(i){return i.replace(/-([a-z])/g,(t,e)=>e.toUpperCase())}u(vt,"toCamelCase");function gt(i){return i.replace(/(?!^)([A-Z])/g,(t,e)=>`-${e.toLowerCase()}`)}u(gt,"toSnakeCase");function C(i){return st(i)?i.value:i}u(C,"normaliseValue");var bt=typeof globalThis.queueMicrotask=="function",R=u(i=>i?bt?queueMicrotask(i):Promise.resolve().then(i):Promise.resolve(),"deferMicro"),zt=u(()=>new Promise(i=>setTimeout(i,0)),"deferMacro");function Et(i){return typeof i=="function"&&!("prototype"in i)}u(Et,"isLazyLoader");var it=new Map,at=new Map,ot=new WeakMap;function ct(i){if(!i||typeof i!="object"&&typeof i!="function")return {};let t=ot.get(i);if(t)return t;let e=Object.create(null);for(let n=i;n&&n!==Object.prototype;n=Object.getPrototypeOf(n))for(let s of Object.getOwnPropertyNames(n)){if(s==="constructor"||s.startsWith("__")||s.endsWith("__")||s in e)continue;let o=Object.getOwnPropertyDescriptor(n,s);if(!o)continue;let c=o.value??(o.get?o.get.call(i):void 0);e[s]=typeof c=="function"?c.bind(i):c;}return ot.set(i,e),e}u(ct,"getMethodsView");function lt(i,t){let e=it.get(i);return e||(e=new Function("s","with (s) { return ("+i+"); }"),it.set(i,e)),e(t)}u(lt,"evalInScope");function xt(i){let t=at.get(i);if(t)return t;let e=[],n=0;for(;n<i.length;){let s=i.indexOf("{{",n);if(s<0){e.push({t:i.slice(n)});break}s>n&&e.push({t:i.slice(n,s)});let o=i.indexOf("}}",s+2),c=o>=0?i.slice(s+2,o).trim():i.slice(s+2).trim();e.push({e:c}),n=o>=0?o+2:i.length;}return t=u(s=>{let o="";for(let c of e)if(c.t!==void 0)o+=c.t;else if(c.e!==void 0){let p=lt(c.e,s);o+=p==null?"":String(p);}return o},"fn"),at.set(i,t),t}u(xt,"compileInterpolated");var x=class x{constructor(t,e,n,...s){l(this,"app");l(this,"component");l(this,"parentContext");l(this,"bindings",[]);l(this,"directives",[]);l(this,"mountedComponents",new WeakMap);l(this,"componentsRegistry",new k);l(this,"updatingDirectives",false);l(this,"updatingBindings",false);l(this,"_stack",[]);l(this,"flatStack",Object.create(null));l(this,"hydradationActions",new g.BatchActions);this.app=t,this.component=e,this.parentContext=n;for(let o of s)this.push(o);}get hostElement(){return this.component._hostElement}get stack(){return this._stack}set stack(t){this.flatStack=Object.create(null),this._stack=[];for(let e of t)this.push(e);}bind(t){this.bindings.push(t);}directive(t){this.directives.push(t);}evaluateExpression(t){return this.resolve(t)}resolve(t,e=true,...n){if(!t)return;let s=this.component.state?.value??{},o=ct(s),c=new Proxy(Object.create(null),{get:u((p,h)=>{for(let y=n.length-1;y>=0;y--)if(h in n[y])return n[y][h];return h in this.flatStack?this.flatStack[h]:h in o?o[h]:s[h]},"get"),has:u((p,h)=>n.some(y=>h in y)||h in this.flatStack||h in o||h in s,"has")});try{return lt(t,c)}catch(p){console.log(this,t),console.error(p);return}}updateValue(t,e){let n=t.split(/[\.\[]/)[0];n in this.component?this.resolve(`this.${t}=__o_model_value__`,true,{__o_model_value__:e}):this.resolve(`${t}=__o_model_value__`,true,{__o_model_value__:e}),this.component.state.didChange(n,void 0,e);}push(t){this._stack.unshift(t),Object.assign(this.flatStack,t);}pop(){let t=this._stack.shift();if(t)for(let e of Object.keys(t))delete this.flatStack[e];}resolveTag(t){let e=this;for(;;){if(e.componentsRegistry.has(t))return e.componentsRegistry.get(t);if(e=e?.parentContext??null,!e)break}return T.get(t)}async updateBindings(t){if(this.updatingBindings)return;let e=!t;t=t??new g.BatchActions,this.updatingBindings=true;for(let n of this.bindings)this.updateBinding(n,t);this.updatingBindings=false,e&&await t.commit();}updateBinding(t,e){if(t.type==="model"){t.node.setProperty("value",C(t.context.resolve(t.key)));return}if(t.type==="interpolation"){e.add(async()=>{let n=t.templateFn({...this.flatStack,...ct(this.component.state?.value??{}),...this.component.state?.value??{}});await t.node.setContentText(n);});return}if(t.type==="attribute"){let n=t.key,s=C(this.resolve(t.template));n==="class"?e.add(()=>this.expandClass(t.node,s)):n==="style"?this.expandStyle(t.node,s):typeof s!="object"&&typeof s!="function"&&typeof s!="symbol"&&typeof s<"u"&&e.add(()=>t.node.setAttribute(n,s.toString()));return}if(t.type==="prop"&&t.context.component){let n=C(this.resolve(t.template));try{t.context.component.props[t.key]=n,t.context.updateBindings(),t.context.updateDirectives();}catch(s){console.error(s);}return}}async updateDirectives(t){if(this.updatingDirectives)return;let e=!t;this.updatingDirectives=true,t=t??new g.BatchActions;for(let n of this.directives){if(n.type==="if"){if(!C(n.context.evaluateExpression(n.expr))){if(n.active===false)continue;n.active=false,n.renderedNode&&(n.destroy?(this.unmountComponent(n.node),await n.renderedNode.removeAndRelease()):await n.renderedNode.addClass("oui-hidden"));continue}if(n.active===true)continue;n.active=true;let o=n.renderedNode;if(!o||n.destroy){let c=await n.node.cloneNode(true);n.renderedNode=c,await n.context.render(c),await n.placeholder.after(c),await n.context.hydradationActions.commit();}else await o.removeClass("oui-hidden");}if(n.type==="for"){let s=n.children??new Map,o=new Map,c=u((r,d)=>n.key?C(n.context.resolve(n.key,true,{[n.item]:r})):d,"keyFn"),p=C(n.context.resolve(n.list))||[],h=new g.BatchActions,y=32,v=0,m=[],a=n.placeholder;for(let r=0;r<p.length;r++){let d=p[r],w=c(d,r),b=s.get(w),E,O,M=a;b?(E=b.node,O=b.ctx,O.stack=[{[n.item]:d},...n.context.stack],h.add(async()=>{let et=await a.nextSibling();E.uid!==et?.uid&&h.add(()=>M.after(E));}),await Promise.all([O.updateBindings(t),O.updateDirectives(t)])):(O=new x(this.app,this.component,this),O.hydradationActions=this.hydradationActions,O.stack=[{[n.item]:d},...n.context.stack],E=await n.node.cloneNode(true),h.add(async()=>{await M.after(E);}),m.push(async()=>{await O.render(E),await O.updateDirectives(t);})),a=E,o.set(w,{node:E,ctx:O}),++v>=y&&(v=0,await h.commit(),await R());}for(let[r,d]of s.entries())o.has(r)||(this.unmountComponent(d.node),h.add(()=>d.node.removeAndRelease()));if(await h.commit(),m.length)for(let d=0;d<m.length;d+=12){let w=m.slice(d,d+12).map(b=>b());await Promise.all(w),await R();}n.children=o;}}e&&await t.commit(),await this.hydradationActions.commit(),this.updatingDirectives=false;}async render(t,e){if(t.hydrated||e?.skipSlotted&&t.hasAttribute("slotted"))return;switch(t.type){case "Text":this.handleTextNode(t);break;case "Element":await this.handleElementNode(t,e);break;default:console.warn("Unknown node",t);}let n=new g.BatchActions;await Promise.all([this.updateBindings(n),this.updateDirectives(n)]),n.commit(),this.hydradationActions.add(()=>t.hydrate());}async expandClass(t,e){let n;typeof e=="object"?Array.isArray(e)?n=e:n=Object.keys(e).filter(s=>e[s]):n=e.toString().split(/\s+/),n.length>0&&await t.addClass(...n);}expandStyle(t,e){let n=e;typeof e=="object"&&!Array.isArray(e)&&(n=Object.keys(e).filter(s=>e[s]).map(s=>`${gt(s)}: ${e[s]}`).join(";")),n&&t.setAttribute("style",n);}expandStandardAttributes(t){let e=t.updates();[...t.attributes].filter(n=>n.name.startsWith(":")).forEach(n=>{let s=n.name.substring(1);this.bind({type:"attribute",node:t,key:s,context:this,template:n.value.trim()}),e.removeAttribute(n.name);}),e.exec();}async handleElementNode(t,e){let n=await t.parentNode(),s=null,o=t.hasAttribute("o-if")?"o-if":t.hasAttribute("o-show")?"o-show":null;if(o){let d=await t.getAttribute(o),w=await OUID.createComment(o+":"+d),b=o==="o-if";await n.insertBefore(w,t),await t.updates().removeAttribute(o).remove().exec(),this.directive({type:"if",expr:d,node:t,placeholder:w,context:this,active:void 0,destroy:b}),s="if";return}if(t.hasAttribute("o-for")){if(s==="if")throw new Error("Can't have o-if and o-for on the same component");let d=await t.getAttribute("o-for"),[w,b]=d.split(" of ").map(M=>M.trim()),E=await OUID.createComment("for:"+d),O=t.attribute(":key")??"";await n?.insertBefore(E,t),await t.updates().removeAttribute("o-for").removeAttribute(":key").remove().exec(),this.directive({type:"for",item:w,list:b,node:t,placeholder:E,context:this,key:O}),s="for";return}let c=t.tag.toLowerCase(),p=this.resolveTag(c),h=t.updates();[...t.attributes].forEach(async d=>{if(d.name==="o-model"){let w=d.value.trim();(t.tag==="input"||t.tag==="textarea")&&(h.setInputValue(C(this.resolve(w))).addEventListener("input",async b=>{let E=await b.target.getProperty("value");this.updateValue(w,E);}),this.bind({node:t,key:w,type:"model",context:this})),h.removeAttribute(d.name);}});let y={},v={},{props:m,events:a}=this.componentAttributes(t,this);if(y=m,v=a,this.expandStandardAttributes(t),Object.keys(v).forEach(async d=>{let w=v[d];p||h.addEventListener(d,b=>{typeof w=="function"&&w.apply(this.component,[b]);}),h.removeAttribute("@"+d);}),await h.exec(),p){await this.mountComponent(t,p,this,y,v);return}let r=await t.childNodes();e?.skipSlotted&&(r=r.filter(d=>!d.hasAttribute("slotted")));for(let d of r)await this.render(d,e);}handleTextNode(t){let e=t.textContent??"";e.includes("{{")&&this.bind({type:"interpolation",node:t,key:"__template__",templateFn:xt(e),context:this});}componentAttributes(t,e){let n={},s={},o=["import","interface","module","o-model","o-if","o-for"];return [...t.attributes].filter(c=>!o.includes(c.name)).forEach(c=>{let p=c.name;if(p.startsWith("@")){let v=e?.resolve(c.value,true);if(typeof v!="function")throw new Error("Event handler can only be function");p=p.substring(1),s[p]=v;return}let h=null,y=c.value;p.startsWith(":")&&(h=c.value,p=p.substring(1),y=C(e?.resolve(c.value))),p=vt(p),n[p]={name:p,value:y,expr:h};}),{props:n,events:s}}async mountComponent(t,e,n,s={},o={}){if(this.mountedComponents.has(t))return;let c=new x(this.app,{},this),p={};for(let m of Object.keys(s)){let a=s[m];a.expr&&this.bind({type:"prop",node:t,key:m,context:c,template:a.expr}),p[m]=a.value;}let h=await Ot(e,p,o);c.component=h,c.stack=[],this.mountedComponents.set(t,h);{let m=t.updates();for(let r of Object.keys(s))s[r].expr||m.setAttribute(r,s[r].value);let a=h.hostClasses??[];a&&(a=typeof a=="string"?[a]:a),a.push("o-component-host"),t.tag.toLowerCase()!=="div"&&a.push("c-"+t.tag.toLowerCase()),m.addClass(...a),await m.exec();}R(async()=>{try{await h.decorateHostElement(t);}catch{}});{let m=h.use??{};for(let a of Object.keys(m))c.componentsRegistry.register(a,m[a]);}if(h.willMount(),!e.cssInstance){let m=h.style?h.style()?.toString():h.css;m&&(e.cssInstance??(e.cssInstance=await OUID.injectComponentStyles(m)));}R(()=>{let m=e.cssInstance;if(m){let a=x.STYLE_REF.get(m)??0;x.STYLE_REF.set(m,a+1),h.cssInstance=m;}});let y=await t.childNodes();if(h.render){let m=await h.render(c);m&&m.attachTo(t);}else await t.setHTML(h.template.trim());let v=await t.queryAll("slot");v&&v.length&&await Promise.all(v.filter(m=>!m.classes?.includes("hydrated")).map(async m=>{let a=m.attribute("name"),r=y.filter(w=>a?w.type==="Element"&&w.attribute("slot")===a:w.type!=="Element"||!w.hasAttribute("slot"));if(!r.length)return;let d=new g.BatchActions;for(let w of r)d.add(()=>w.setAttribute("slotted","true")),d.add(()=>m.appendChild(w));await d.commit(),await Promise.all(r.map(w=>this.render(w)));})),h._hostElement=t,h.parent=n?.component??void 0,h.provide(x.PROVIDE_TOKEN,this);{let m=await t.childNodes(),a=6,r=0;for(;r<m.length;){let d=m.slice(r,r+a);await Promise.all(d.map(w=>c.render(w,{skipSlotted:true}))),r+=a;}await c.hydradationActions.commit();}R(()=>{try{h.onMounted();}catch{}}),h.state.watch(()=>{let m=new g.BatchActions;c.updateBindings(m),c.updateDirectives(m),m.commit();});}async unmountComponent(t){let e=this.mountedComponents.get(t);if(e){let s=e.cssInstance;if(s){let o=x.STYLE_REF.get(s)??1;o===1?(await OUID.rejectComponentStyles(s),x.STYLE_REF.delete(s)):x.STYLE_REF.set(s,o-1);}e.willUnmount(),e._hostElement=null,e.cssInstance=null;}let n=await t.queryAll("*")??[];for(let s of n)await this.unmountComponent(s);this.mountedComponents.delete(t);}};u(x,"RenderContext"),l(x,"PROVIDE_TOKEN","RENDER_CONTEXT"),l(x,"STYLE_REF",new WeakMap);var A=x;async function Gt(i,t,e=[],n){let s=t??{},o=await OUID.createElement(i,Object.keys(s).reduce((c,p)=>(c[p]=s[p],c),{}));return Object.keys(n??{}).forEach(c=>{o?.addEventListener(c,p=>{let h=n[c];typeof h=="function"&&h(p);});}),new S(o,e)}u(Gt,"node");function Ot(i,t,e){return Et(i)?i().then(n=>Y(n.default,t,e)):Y(i,t,e)}u(Ot,"o");function Ct(i){return typeof i=="function"}u(Ct,"isProvideFunction");var L=class L{constructor(t,e){l(this,"root");l(this,"options");l(this,"providers",new Map);this.root=t,this.options=e,L.currentApp=this;}provide(t,e){if(this.providers.has(t)){console.warn(`[OUID] - Provider ${t} already exists`);return}this.providers.set(t,Ct(e)?{provide:e}:{value:e});}inject(t){return this.providers.get(t)?.value}use(t,e){return t.install(this,e),this}async mount(t){if(!globalThis.__OUI_PUR_JS_CONTEXT__)return;this.options?.css&&await OUID.injectComponentStyles(this.options.css),await OUID.injectComponentStyles(`
7
7
  * {
8
8
  ${t} * {
9
9
  visibility: hidden;
@@ -14,17 +14,17 @@ ${n.toString()}}
14
14
  .oui-hidden {
15
15
  display: none !important;
16
16
  }
17
- `);let e=await OUID.query(t);if(console.log("Mounting app on",e),!e)throw new Error("No selector found for "+t);let n=new j(this,{},null);n.mountComponent(e,this.root,null).then(()=>{n.updateBindings(),n.updateDirectives();});}};h(D,"App"),l(D,"currentApp",null);var $=D;function Jt(a,t){$.currentApp?.provide(a,t);}h(Jt,"provide");function rt(a){return $.currentApp?.inject(a)??void 0}h(rt,"inject");function vt(a,t,e,n){var s=arguments.length,o=s<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,e):n,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(a,t,e,n);else for(var d=a.length-1;d>=0;d--)(c=a[d])&&(o=(s<3?c(o):s>3?c(t,e,o):c(t,e))||o);return s>3&&o&&Object.defineProperty(t,e,o),o}h(vt,"_ts_decorate");var Z=class Z extends _{constructor(){super(...arguments);l(this,"router");}willMount(){}onMounted(){this.router=gt(),console.log("Router mounted"),this.router?.bind(this).then(e=>{e?.();});}willUnmount(){console.log("Router will unmount"),this.router?.unbind();}};h(Z,"ORouter");var M=Z;M=vt([st({tag:"o-router",template:`
17
+ `);let e=await OUID.query(t);if(!e)throw new Error("No selector found for "+t);let n=new A(this,{},null);n.mountComponent(e,this.root,null).then(()=>{n.updateBindings(),n.updateDirectives();});}};u(L,"App"),l(L,"currentApp",null);var H=L;function te(i,t){H.currentApp?.provide(i,t);}u(te,"provide");function ut(i){return H.currentApp?.inject(i)??void 0}u(ut,"inject");function Tt(i,t,e,n){var s=arguments.length,o=s<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,e):n,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(i,t,e,n);else for(var p=i.length-1;p>=0;p--)(c=i[p])&&(o=(s<3?c(o):s>3?c(t,e,o):c(t,e))||o);return s>3&&o&&Object.defineProperty(t,e,o),o}u(Tt,"_ts_decorate");var Q=class Q extends _{constructor(){super(...arguments);l(this,"router");}willMount(){}onMounted(){this.router=St(),this.router?.bind(this).then(e=>{e?.();});}willUnmount(){this.router?.unbind();}};u(Q,"ORouter");var D=Q;D=Tt([rt({tag:"o-router",template:`
18
18
  <div id="router-view"></div>
19
19
  `,css:`
20
20
  #router-view {
21
21
  height: 100%;
22
22
  }
23
- `})],M);var at="OROUTER_TOKEN",G="ACTIVE_ROUTE";function gt(){return rt(at)}h(gt,"useRouter");function Qt(a){return new X(a)}h(Qt,"createRouter");function it(a,t){let e=new ot(a.path).reverse(t);return e===false?"":e}h(it,"generatePath");var Q=class Q{constructor(t){l(this,"routes");l(this,"windowObject",null);l(this,"guards",[]);l(this,"eventRegistration",null);this.routes=t;}install(t){t.provide(at,this),OUID.registerComponent("o-router",M);}resolve(t){let e=new ot(t),n=t.split("?").reverse()[0].split("&").reduce((s,o)=>{let c=o.split("=");return s[c[0]]=decodeURIComponent(c[1]),s},{});for(let s of this.routes){let o=e.match(s.path);if(o)return {route:s,params:o,query:n}}return null}push(t){if(!t.path&&!t.name){console.warn("[OUID-Router]: no path or name provided to push");return}if(t.name){let e=this.routes.find(s=>s.name===t.name);if(!e){console.warn("[OUID-Router]: No matched route name found");return}let n=it(e,t.params??{});this.windowObject?.invoke("history.pushState",{},"",n),this.windowObject?.dispatchEvent("popstate","PopStateEvent",{state:{}});return}if(t.absolute&&t.path&&this.windowObject?.invoke("history.pushState",{},"",t.path),t.path){let e=this.routes.find(n=>n.path===t.path);if(e){let n=it(e,t.params??{});this.windowObject?.invoke("history.pushState",{},"",n),this.windowObject?.dispatchEvent("popstate","PopStateEvent",{state:{}});return}}}pop(){this.windowObject?.invoke("history.back"),this.windowObject?.dispatchEvent("popstate","PopStateEvent",{state:{}});}async beforeRouteGoing(t,e){for(let n of this.guards.filter(s=>s.type==="before")){let s=await n.fn(t,e);if(s)return s}}async afterRouteGoing(t,e){for(let n of this.guards.filter(s=>s.type==="after")){let s=await n.fn(t,e);if(s)return s}}async bind(t){this.windowObject=await OUID.acquireObject("window");let e=h(async()=>{console.log("Handling routing",this);let n=await this.windowObject?.getProperty("location.pathname"),s=this.resolve(n);if(console.log("Matched::",s),!s){console.warn(`[Router] No route found for: ${n}`);return}let o=await this.beforeRouteGoing({url:n,path:n,name:s.route.name},t.inject(G));if(o){typeof o=="object"&&"name"in o&&this.push({name:o.name,params:o.params});return}let c=t.inject(j.PROVIDE_TOKEN),d=await c?.hostElement.query("#router-view");console.log("Outlet",d),d&&(d.innerHTML="",t.provide(G,{params:s.params,query:s.query}),await c?.mountComponent(d,s.route.component,c),await this.afterRouteGoing({url:n,path:n,name:s.route.name},t.inject(G)));},"handler");return this.eventRegistration=await this.windowObject.addEventListener("popstate",e.bind(this)),e}unbind(){this.eventRegistration&&this.windowObject?.dettachEventListener("popstate",this.eventRegistration);}beforeEach(t){let e={fn:t,type:"before"};return this.guards.push(e),()=>{this.guards.splice(this.guards.indexOf(e));}}afterEach(t){let e={fn:t,type:"after"};return this.guards.push(e),()=>{this.guards.splice(this.guards.indexOf(e));}}};h(Q,"Router");var X=Q;var tt=class tt extends _{render(t){return A.of('<i class="o-icon"><slot></slot></i>')}style(){return V.of({i:`
23
+ `})],D);var pt="OROUTER_TOKEN",G="ACTIVE_ROUTE";function St(){return ut(pt)}u(St,"useRouter");function oe(i){return new X(i)}u(oe,"createRouter");function ht(i,t){let e=new dt(i.path).reverse(t);return e===false?"":e}u(ht,"generatePath");var Z=class Z{constructor(t){l(this,"routes");l(this,"windowObject",null);l(this,"guards",[]);l(this,"eventRegistration",null);this.routes=t;}install(t){t.provide(pt,this),OUID.registerComponent("o-router",D);}resolve(t){let e=new dt(t),n=t.split("?").reverse()[0].split("&").reduce((s,o)=>{let c=o.split("=");return s[c[0]]=decodeURIComponent(c[1]),s},{});for(let s of this.routes){let o=e.match(s.path);if(o)return {route:s,params:o,query:n}}return null}push(t){if(!t.path&&!t.name){console.warn("[OUID-Router]: no path or name provided to push");return}if(t.name){let e=this.routes.find(s=>s.name===t.name);if(!e){console.warn("[OUID-Router]: No matched route name found");return}let n=ht(e,t.params??{});this.windowObject?.invoke("history.pushState",{},"",n),this.windowObject?.dispatchEvent("popstate","PopStateEvent",{state:{}});return}if(t.absolute&&t.path&&this.windowObject?.invoke("history.pushState",{},"",t.path),t.path){let e=this.routes.find(n=>n.path===t.path);if(e){let n=ht(e,t.params??{});this.windowObject?.invoke("history.pushState",{},"",n),this.windowObject?.dispatchEvent("popstate","PopStateEvent",{state:{}});return}}}pop(){this.windowObject?.invoke("history.back"),this.windowObject?.dispatchEvent("popstate","PopStateEvent",{state:{}});}async beforeRouteGoing(t,e){for(let n of this.guards.filter(s=>s.type==="before")){let s=await n.fn(t,e);if(s)return s}}async afterRouteGoing(t,e){for(let n of this.guards.filter(s=>s.type==="after")){let s=await n.fn(t,e);if(s)return s}}async bind(t){this.windowObject=await OUID.acquireObject("window");let e=u(async()=>{let n=await this.windowObject?.getProperty("location.pathname"),s=this.resolve(n);if(!s){console.warn(`[Router] No route found for: ${n}`);return}let o=await this.beforeRouteGoing({url:n,path:n,name:s.route.name},t.inject(G));if(o){typeof o=="object"&&"name"in o&&this.push({name:o.name,params:o.params});return}let c=t.inject(A.PROVIDE_TOKEN),p=await c?.hostElement.query("#router-view");p&&(t.provide(G,{params:s.params,query:s.query}),await c?.mountComponent(p,s.route.component,c),await this.afterRouteGoing({url:n,path:n,name:s.route.name},t.inject(G)));},"handler");return this.eventRegistration=await this.windowObject.addEventListener("popstate",e.bind(this)),e}unbind(){this.eventRegistration&&this.windowObject?.dettachEventListener("popstate",this.eventRegistration);}beforeEach(t){let e={fn:t,type:"before"};return this.guards.push(e),()=>{this.guards.splice(this.guards.indexOf(e));}}afterEach(t){let e={fn:t,type:"after"};return this.guards.push(e),()=>{this.guards.splice(this.guards.indexOf(e));}}};u(Z,"Router");var X=Z;var tt=class tt extends _{render(t){return S.of('<i class="o-icon"><slot></slot></i>')}style(){return B.of({i:`
24
24
  display: inline-block;
25
25
  width: 1em;
26
26
  height: 1em;
27
27
  vertical-align: -0.15em;
28
28
  overflow: hidden;
29
- `})}};h(tt,"OIcon");var ct=tt;function oe(){return T.getAll().reduce((t,[e,n])=>(t[e]=n,t),{})}h(oe,"components");export{G as ACTIVE_ROUTE_TOKEN,$ as App,st as Component,P as Emits,Mt as Native,_ as OComponent,b as ODOM,ct as OIcon,M as ORouter,f as OUID,Y as OUIDBridge,at as ROUTER_INJECTION_TOKEN,j as RenderContext,A as RenderNode,X as Router,U as State,N as Stated,V as StyleData,oe as components,J as createComponent,Qt as createRouter,rt as inject,nt as isStated,Ht as node,wt as o,Jt as provide,ut as stated,gt as useRouter};//# sourceMappingURL=index.js.map
29
+ `})}};u(tt,"OIcon");var ft=tt;function fe(){return T.getAll().reduce((t,[e,n])=>(t[e]=n,t),{})}u(fe,"components");export{G as ACTIVE_ROUTE_TOKEN,H as App,rt as Component,P as Emits,qt as Native,_ as OComponent,g as ODOM,ft as OIcon,D as ORouter,f as OUID,K as OUIDBridge,pt as ROUTER_INJECTION_TOKEN,A as RenderContext,S as RenderNode,X as Router,U as State,j as Stated,B as StyleData,fe as components,Y as createComponent,oe as createRouter,zt as deferMacro,R as deferMicro,ut as inject,st as isStated,Gt as node,Ot as o,te as provide,wt as stated,St as useRouter};//# sourceMappingURL=index.js.map
30
30
  //# sourceMappingURL=index.js.map