@realmorg/realm 0.0.15 → 0.0.17
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.
|
@@ -1876,23 +1876,15 @@ var scriptAction = defineAction({
|
|
|
1876
1876
|
actionArgs,
|
|
1877
1877
|
RealmAttributeNames.SCRIPT_ID
|
|
1878
1878
|
);
|
|
1879
|
-
const
|
|
1880
|
-
const eventTarget = event2?.target;
|
|
1879
|
+
const eventValue = event2?.target?.[RealmAttributeNames.VALUE];
|
|
1881
1880
|
const waitForScriptLoaded = () => reqAnim(() => {
|
|
1882
1881
|
const scriptFlow = getScriptFlow(elementName, scriptIdAttr);
|
|
1883
1882
|
const isScriptLoaded = !!scriptFlow;
|
|
1884
1883
|
if (!isScriptLoaded)
|
|
1885
1884
|
return waitForScriptLoaded();
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
element,
|
|
1890
|
-
!hasEventTarget ? event2 : {
|
|
1891
|
-
...event2,
|
|
1892
|
-
target: eventTarget
|
|
1893
|
-
}
|
|
1894
|
-
)
|
|
1895
|
-
);
|
|
1885
|
+
if (eventValue !== void 0 && !!event2?.target)
|
|
1886
|
+
event2.target[RealmAttributeNames.VALUE] = eventValue;
|
|
1887
|
+
scriptFlow?.apply(element, getScriptArgs(element, event2));
|
|
1896
1888
|
});
|
|
1897
1889
|
waitForScriptLoaded();
|
|
1898
1890
|
}
|
|
@@ -2075,17 +2067,26 @@ var listenEventFlow = defineFlow({
|
|
|
2075
2067
|
var sendTriggerEvent = (dispatcherElement, debounceTimer, debounceTime, eventName, actions) => (event2) => {
|
|
2076
2068
|
const [, clearTimeout2] = debounceTimer || [];
|
|
2077
2069
|
clearTimeout2?.();
|
|
2078
|
-
|
|
2070
|
+
if (debounceTime > 0) {
|
|
2071
|
+
const eventValue = event2?.target?.[RealmAttributeNames.VALUE];
|
|
2072
|
+
debounceTimer = timerOnce(() => {
|
|
2073
|
+
if (eventValue !== void 0 && !!event2?.target)
|
|
2074
|
+
event2.target[RealmAttributeNames.VALUE] = eventValue;
|
|
2075
|
+
dispatcherElement._sendEvent(FlowEventNames.TRIGGER_EVENT, [
|
|
2076
|
+
EMPTY_STRING,
|
|
2077
|
+
eventName,
|
|
2078
|
+
actions,
|
|
2079
|
+
event2
|
|
2080
|
+
]);
|
|
2081
|
+
}, debounceTime);
|
|
2082
|
+
return;
|
|
2083
|
+
}
|
|
2084
|
+
return dispatcherElement._sendEvent(FlowEventNames.TRIGGER_EVENT, [
|
|
2079
2085
|
EMPTY_STRING,
|
|
2080
2086
|
eventName,
|
|
2081
2087
|
actions,
|
|
2082
2088
|
event2
|
|
2083
2089
|
]);
|
|
2084
|
-
if (debounceTime > 0) {
|
|
2085
|
-
debounceTimer = timerOnce(triggerEvent, debounceTime);
|
|
2086
|
-
return;
|
|
2087
|
-
}
|
|
2088
|
-
return triggerEvent();
|
|
2089
2090
|
};
|
|
2090
2091
|
var dispatchEvent2 = (hostElement, isRemoveEvent) => (dispatcherElement, debounceTime, eventName, actions) => (listenerElement) => {
|
|
2091
2092
|
let debounceTimer;
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
* This source code is licensed under the MIT license found in the
|
|
9
9
|
* LICENSE file in the root directory of this source tree.
|
|
10
10
|
*/
|
|
11
|
-
var t={t:"action",AS:"as",o:"async",i:"children",l:"debounce",u:"debug",h:"defer",m:"element",g:"every",T:"from",S:"global",v:"href",R:"index",p:"loaded",_:"mount",A:"mutate",O:"name",M:"of",I:"once",L:"ref",N:"rel",C:"script-id",D:"slot",U:"src",P:"storage",q:"to",B:"toggle",j:"type",G:"value",H:"method",F:"url"},e="attr",n="meta",o="src",s="state",r="",a="$",i="RLM:",c="data-",l="-",u=":",h=".",m="contains",d="slot",f="custom-element",E="element-attr",$="element-flow",g="import-script",T="import-style",S="script",y=JSON.stringify,v=JSON.parse,R=(t="")=>"object"==typeof t?y(t):""+t,p=t=>v(R(t)),_=/([A-Z])+/g,b=/(?=[A-Z])|[.\-\s_]/,A=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?/:host\(\[([#@][a-zA-Z0-9-_.]+?)\](\[(global)\])?(\[(eq|neq|gt|gte|lt|lte|contains)=\"(\w+?)\"\])?\)/g:/:host\(\[\\([#@][a-zA-Z0-9-_.]+?)\](\[(global)\])?(\[(eq|neq|gt|gte|lt|lte|contains)="(\w+?)"\])?\)/g,w=/[$|#|@|!]([.]?(?:\w+[.-])*\w+)/gm,O=class{#t;#e;constructor(){this.#t=B(),this.#e=j()}set(t,e,n){const o=et(this.#t,t),s="function"==typeof e?e(o):e;"memory"!==n&&window?.[n]?.setItem(t,R(s)),nt(this.#t,t,s),x(this.#e,e=>e.call(this,t,s,o))}get(t,e){if("memory"!==e){const n=window?.[e]?.getItem(t);if(void 0!==n)return v(y(n))}return et(this.#t,t)}async subscribe(t){this.#n(t),ot(this.#e,t)}#n(t){k(this.#t,(e,n)=>t.call(this,n,e))}},M=t=>t.trim(),I=(t,e=1,n)=>null==t?r:t.slice(e,n),L=(t,e)=>t.split(e),N=t=>t?.toLowerCase?.(),C=(t,e,n)=>t.replace(e,n),D=(t,e)=>t.startsWith(e),U=(t,e)=>t.includes(e),P=t=>{if(!t)return r;const[e,...n]=L(N(t),r);return(t=>t.toUpperCase())(e)+X(n,r)},q=t=>Error(t),B=(t=[])=>new Map(t),j=t=>new Set(t),G=t=>Array.from(t),H=(t,e,n)=>{if(!e)return t;if(!w.test(e))return e;if(n&&!D(e,n))return e;const o=t instanceof O;return e.replace(w,(e,n)=>{const s=z(I(n),h),r=Q(s,(t=>(e,n,o)=>t&&0===o?e.get(n):e[n])(o),t);return"object"==typeof r?y(r):r})},F=(t,e=a)=>{const n=rt(t);return Q(n,(t,[n,o])=>"object"==typeof o?Q(F(o),(t,o)=>[...t,`${e}${h}${n}${h}${o}`],t):[...t,`${e}${h}${n}`],[])},V=t=>Array.isArray(t),x=(t,e)=>{Q(G(t),(t,n,o)=>(e?.(n,o),t))},k=(t,e)=>t.forEach(e),Y=(t,e)=>t.forEach(e),Q=(t,e,n)=>t.reduce(e,n),Z=(t,e)=>t.push(e),J=(t,e)=>t.map(e),X=(t,e)=>t.join(e),z=(t,e)=>t.split(e),K=(t,e,n,...o)=>t.splice(e,n,...o),W=(t,e)=>t.some(e),tt=(t,e)=>t.find(e),et=(t,e)=>t.get(e),nt=(t,e,n)=>t.set(e,n),ot=(t,e)=>t.add(e),st=t=>Object.fromEntries(t),rt=t=>Object.entries(t),at=document,it=at.head,ct=window,lt=(t,e)=>t.innerHTML=e,ut=t=>(e,n)=>(n??t).append(e),ht=t=>e=>(e??t).remove(),mt=t=>at.createElement(t),dt=()=>at.createDocumentFragment(),ft=t=>(e,n)=>{const o=n??t,s=o.setAttribute.bind(o),a=o.removeAttribute.bind(o),i=(t,e)=>t in o&&(o[t]=e);x(e.filter(t=>t),([t,e])=>{if("boolean"!=typeof e){const n=R(e);return s(t,n),void i(t,n)}e?s(t,r):a(t),i(t,e)})},Et=t=>(e,n,o)=>ft(t)([[e,n]],o),$t=(t,e)=>t&&!!e&&t.assign(...e),gt=t=>(e,n,o)=>(o??t).addEventListener(e,n),Tt=()=>parseInt(C(Math.random().toString(),h,r)).toString(16),St=t=>t?.innerHTML,yt=t=>e=>(e??t).cloneNode(1),vt=(t,e)=>V(e)?Q(e.filter(t=>V(t)),(t,[e,n])=>(e&&(t+=`[${e}${n?`="${n}"`:r}]`),t),t):t,Rt=t=>(e,n,o)=>(o??t)?.querySelector(vt(e,n)),pt=t=>(e,n,o)=>(o??t)?.querySelectorAll(vt(e,n)),_t=t=>t.name,bt=t=>t.value,At=t=>e=>G((e||t)?.attributes??[]),wt=t=>(e,n)=>(n||t)?.getAttribute?.(e),Ot=t=>(e,n,o)=>Rt(t)(e,V(n)?n:[[n,o]]),Mt=t=>(e,n,o)=>pt(t)(e,V(n)?n:[[n,o]]),It=t=>"@"+t,Lt=t=>"#"+t,Nt=t=>()=>t.V,Ct=t=>()=>t.getRootNode(),Dt=":host",Ut="comp",Pt="style",qt="global",Bt=(t,e,n)=>{const o="eq"===t?e:null,s="neq"===t?e:null,r="gt"===t?e:null,a="gte"===t?e:null,i="lt"===t?e:null,c="lte"===t?e:null,l=t===m?e:null;return["true","false"].includes(n)||isNaN(+n)?!!o&&n===o||!!s&&n!==s||!!l&&U(n,l):!!o&&+n==+o||!!s&&+n!=+s||!!r&&+n>+r||!!a&&+n>=+a||!!i&&+n<+i||!!c&&+n<=+c},jt=t=>t?.style,Gt=(t,e)=>{if(!e)return t?.selectorText;t.selectorText=e},Ht=(t,e,n)=>t.setProperty(e,n),Ft=(t,e)=>t.getPropertyValue(e),Vt=(t,e)=>x(t,t=>x(Object.values(t.cssRules),e)),xt=t=>Nt(t)().adoptedStyleSheets,kt=t=>()=>{const e=new CSSStyleSheet;return Z(xt(t),e),e},Yt=(t,e,n,o=1)=>{const s=`${l}${l}${CSS.escape((t=>{const e=J((t=>L(t?.replace(_,P),b))(t),N)??[],n=e.length;return 0===n?r:1===n?e.at(0):X(e,l)})(t))}`,a=jt(e);if(!a)return s;const i=()=>Ft(a,s);if(void 0===n)return i();o||i(),Ht(a,s,""+n)},Qt=t=>`var(${l}${l}${t})`,Zt=(t,e)=>t.insertRule(Q(e,(t,[e,n])=>t+(e+"{")+X(Q(n,(t,[e,n])=>[...t,X([e,n],u)],[]),";")+"}",r)),Jt=class extends HTMLElement{name;id;#o;V;k;Y;Z;J=(t=>e=>lt(e??t,r))(this);X=(t,e)=>{e?lt(e,""+t):(()=>{this.#o=""+t})()};K=(t=>e=>{if(!e)return;const n=yt(t),o=e instanceof HTMLTemplateElement?n(e).content:e;ut(t)(o,Nt(t)())})(this);W=t=>t&&ut(this)(yt(this)(t),this.tt());et=(t=>(e,n)=>(n??t).textContent="object"==typeof e?y(e):""+e)(this);nt=(t=>()=>{const e=t;return e.V=t.attachShadow({mode:"closed",slotAssignment:"manual"}),Nt(e)()})(this);ot=ut(this);st=ht(this);rt=(t=>(e,n)=>(n??t).replaceWith(e))(this);it=mt;ct=dt;lt=ft(this);ut=Et(this);ht=(t=>(e,n)=>(n??t).removeAttribute(e))(this);dt=(t=>(e,n,o)=>Et(t)(`${c}${e}`,n,o))(this);ft=(t=>(e,n)=>ft(t)(e,n))(this);Et=$t;$t=gt(this);gt=(t=>(e,n,o)=>(o??t).removeEventListener(e,n))(this);Tt=(t=>(e,n,o)=>gt(t)(i+e,e=>n.call(o??t,e.detail)))(this);St=(t=>(e,n,o)=>(o??t).dispatchEvent(new CustomEvent(i+e,{detail:n})))(this);yt=(e=>(n,o,s)=>{const r=wt(s??e)(t.u,n);r&&((t,e="log")=>{console[e](...t)})([r,o])})(this);vt=t=>St(t??this);Rt=Tt;_t=(t=>()=>t.name)(this);bt=(t=>e=>(e??t).id)(this);At=(t=>e=>N((e??t)?.tagName))(this);wt=(t=>e=>(e??t).parentElement)(this);Ot=(t=>e=>(e??t).parentNode)(this);tt=Nt(this);Mt=Ct(this);It=t=>{return(e=t??this,()=>Ct(e)().host)();var e};Lt=yt(this);Nt=vt;Ct=Rt(this);Dt=pt(this);Ut=(t=>e=>G((e??t).children))(this);Pt=(t=>e=>G((e??t).childNodes))(this);qt=At(this);Bt=(t=>e=>Q(At(t)(e),(t,e)=>(t[_t(e)]=bt(e),t),{}))(this);jt=wt(this);Gt=(t=>(e,n)=>(n||t).hasAttribute(e))(this);Ht=(t=>(e,n)=>wt(t)(`${c}${e}`,n))(this);Ft=Ot(this);Vt=Mt(this);xt=(t=>(e,n,o)=>Rt(t)(e,V(n)?n:[[n,o]],Nt(t)()))(this);kt=(t=>(e,n,o)=>pt(t)(e,V(n)?n:[[n,o]],Nt(t)()))(this);Yt=It;Qt=Lt;Zt=kt(this);Jt=(t=>n=>{if(!n)return;const o=St(n),r=kt(t)();Z(xt(t),r),r.replaceSync(o),Vt([r],t=>{const n=Gt(t),o=G(n?.matchAll(A)??[]);if(!o.length)return;const r=jt(t),a=Q(z(r.cssText,";"),(t,e)=>e?[...t,J(z(e,u),M)]:t,[]);Gt(t,C(n,A,Dt)),Yt(Pt,t,X(J(a,t=>X(t,u)),"|"));for(const n of o){const[,o,r,a,...i]=n,c=D(o,"#")?s:e,u=I(o);Yt(c,t,u);const h=u+l;a===qt&&Yt(h+qt,t,1);const[m,d,f]=i??[];if(!m)return;Yt(h+"op",t,d),Yt(h+Ut,t,f)}}),ht(n)()})(this);Xt=Zt;zt=(t=>(e,n,o)=>Vt(xt(t),t=>{if(Gt(t)!==e)return;const s=t.style;Ft(s,n)!==o&&Ht(s,n,o)}))(this);Kt=Yt;Wt=Qt},Xt=(t,e)=>{let n=setTimeout(t,e);return[n,()=>clearTimeout(n)]},zt=t=>{let e=requestAnimationFrame(t);return[e,()=>cancelAnimationFrame(e)]},Kt=class extends Jt{te;ee;ne;oe;k=new O;Y=j();Z=j();#s=[];constructor({name:t,te:e,se:n,ee:o,ne:s,oe:r}){super(),this.name=t,this.id=this.Rt(),this.ee=o,this.ne=s,this.oe=r,n?.(this),this.X(this.vt()),e?.(this),zt(()=>this.ee?.(this))}subscribe(t){Z(this.#s,t)}async connectedCallback(){const[t]=ue(this,(t,e,n)=>{x(this.#s,o=>o?.(t,e,n)),this.oe?.(this,t,e,n)});t()}disconnectedCallback(){this.ne?.(this)}},Wt=(t=>(t.re="string",t.ae="number",t.ie="boolean",t.ce="array",t.le="object",t.ue="html",t.he="json",t))(Wt||{}),te=({name:t,extends:e,me:n,de:o,fe:s,...r})=>()=>new Promise(a=>{const i=U(t,l),c=customElements.get(t);if(!i||c)throw q(`Element \`${t}\` has invalid name or already defined`);customElements.whenDefined(t).then(async()=>{o?.(t),a(1)}),n?.(t),customElements.define(t,class extends Kt{constructor(){super({name:t,...r})}async connectedCallback(){super.connectedCallback(),s?.(this)}},{extends:e})}),ee=(t,e)=>{const n=t=>"string"!=typeof e?e:p(e||t),o={number:()=>+e,boolean:()=>n(e),array:()=>n("[]"),object:()=>n("{}")};return o?.[t]?.()??e},ne=(t,e=E)=>G(t.Vt(e)),oe=(e,n)=>j(Q(ne(e,n),(n,o)=>{const s=e.jt(t.O,o),r=e.jt(t.j,o);return[...n,[s,r,ee(r,e.vt(o))]]},[])),se=(t,e)=>x(ne(t,e),e=>t.st(e)),re=(t,e)=>tt(G(e),([e])=>e===t)?.at(1),ae=(r,a,i,h,m,f,E)=>(((t,n,o,r,a=0)=>{const i=xt(t),c=""+o;Vt(i,t=>{Yt((a?qt:r)+l+n,t,c,0);const o=Yt(s,t),i=Yt(e,t);if(!o&&!i)return;if(o&&o!==n||i&&i!==n)return;const h=n+l;Yt(h+"value",t,c);const m=Yt(h+"op",t),d=Yt(Pt,t),f=J(z(d,"|"),t=>z(t,u)),E=!!m,$=Yt(h+Ut,t),g=Bt(m,$,c);if(E&&!g){if(!W(f,([e])=>!!jt(t)[e]))return;return x(f,(t=>([e])=>jt(t).removeProperty(e))(t))}x(f,(t=>([e,n])=>Ht(jt(t),e,n))(t))})})(r,h,m,a,f),x(i,([i,...c])=>((r,a,i,c,l,u,h)=>{const m=()=>u,d=()=>H(u,l),f={[s]:m,[e]:m,[o]:d,[n]:d}[a](),E=r.Gt(t.S,c);x(i,([t,e,n])=>{(h?n:!n||E)&&l===e&&r.ut(t,f,c)})})(r,a,((t=j(),r=j(),a=j(),i=j())=>({[s]:t,[e]:r,[o]:a,[n]:i}))?.(...c)[a],i,h,m,f)),E?((n,r,a,i,l)=>{const u={[s]:n.Qt(a),[e]:n.Yt(a),[o]:a}[r],h={[s]:re(a,n.Y),[e]:re(a,n.Z)}[r],m=l?d:`[${c}${r}="${u}"]:not([${t.S}])`,f=l?[[t.S],[`${c}${r}`,u]]:[],E=G([...n.Dt(m,f),...n.Dt(m,f,l?at:void 0)]);x(E,e=>{e&&("html"===h?n.X(i,e):n.et(i,e),n.yt(n.xt(m,[...f,[t.O,n.jt(t.D,e)],[t.u]]),i))})})(r,a,h,m,f):(f||a!==s||r.k.set(h,m),((r,a,i,c,l)=>{const u=()=>i,h=()=>c,m=()=>H(c,i),f={[s]:()=>r.Qt(i),[e]:()=>r.Yt(i),[o]:u,[n]:u},E=f[a]?.(),$={[s]:h,[e]:h,[o]:m,[n]:m},g=$[a]?.(),T={[s]:re(i,r.Y),[e]:re(i,r.Z)}[a];Y(r.kt(t.D,[[t.O,E],l&&[t.S]]),e=>{if(!e)return;if(!l&&r.Gt(t.S,e))return;const n=r.it(d),o=r.Qt(r.Rt()),s=B();nt(s,e,t.O),nt(s,n,t.D),x([e,n],e=>{r.dt(a,E,e),r.lt([[et(s,e),o],l&&[t.S]],e)}),"html"===T?r.X(g,n):r.et(g,n),r.ot(n),r.Et(e,[n]),r.yt(e,g)})})(r,a,h,m,f))),ie=(e,n)=>{const o=`${n}${u}${t.S}`,s=e.Gt(o)?o:n;e.ut("_"+s,e.jt(s))},ce=(t,e,n,o,s)=>t&&ot(e,[n,o,s]),le=e=>Q(G(e.kt("*")),(n,o)=>{const s=j(),r=j(),i=j(),c=j(),[l,h,m,d]=Q(e.qt(o),(n,l)=>{const h=D(_t(l),"_");if(e.Gt(_t(l),o)&&!h)return n;const[m,d]=L(_t(l),u),f=d===t.S,E=bt(l),$=I(m),g=I(E),T=D(E,"#");ce(T,s,$,g,f);const S=D(E,"@");ce(S,r,$,g,0);const y=D(E,a);ce(y,i,$,E,0);const v=D(E,"!");return ce(v,c,$,E,0),(y||v)&&e.ht(l.name,o),[s,r,i,c]},[]);return[...n,[o,l,h,m,d]]},[]),ue=(t,e)=>((t,e)=>{const n=new MutationObserver(e?.Ee);return[()=>n.observe(t,e),()=>n.disconnect()]})(t,{attributes:1,attributeOldValue:1,Ee:n=>{for(const o of n){if("attributes"!==o.type)return;const n=o.attributeName,s=t.jt(n,o.target),r=o.oldValue;r!==s&&e?.(n,s,r)}}}),he=(t,e,n)=>{return n?J((o=([t])=>t===e,t.filter(o)),([,t])=>t):tt(t,([t])=>t===e)?.at(1);var o},me=t=>st(J(G(t.Z),([t,,e])=>[t,e])),de=B(),fe=te({name:"import-element",async se(e){const{from:n,automount:o,as:s,...r}=e.Bt(),[,a]=et(de,n)??[];if(!a)try{const t=await fetch(n),e=await t.text();nt(de,n,e)}catch{q(`Failed to fetch "${n}"`)}const i=e.Ct(f,[],(c=et(de,n),(new DOMParser).parseFromString(c,"text/html")));var c;if(!i)return e.st();const l=e.jt(t.O,i);let u=s??l;if(!!customElements.get(u)&&(u=u+h+e.Rt()),e.ut(t.O,u,i),void 0!==o){const t=e.it(u);e.lt(rt(r),t),e.ot(i,at.body),e.rt(t,e)}else e.ot(i,at.body),e.st()}}),Ee=B(),$e=B(),ge=(t,e,n,o)=>{const s=t.it(e);t.lt(n,s),t.ot(s,o)},Te=te({name:g,ee(e){if(!(e.Ot()instanceof ShadowRoot))return;const{from:n,local:o,...s}=e.Bt();et(Ee,n)||void 0!==o||(ge(e,S,[[t.U,n],...rt(s)],it),nt(Ee,n,1)),e.st()}}),Se=te({name:T,ee(e){if(!(e.Ot()instanceof ShadowRoot))return;const{from:n,local:o,...s}=e.Bt(),r=et($e,n),a=void 0!==o,i=[e,"link",[[t.v,n],[t.N,"stylesheet"],...rt(s)]];r||(ge(...i,it),nt($e,n,1)),a&&ge(...i,e.It().tt()),e.st()}}),ye=t=>Q(["eq","neq","gt","gte","lt","lte",m],(e,n)=>t.Gt(n)?[n,t.jt(n)]:e,[]),ve=(e,n,o,s,r)=>{const a=e.Gt(t.G),i=((t,e)=>{const[n,o]=ye(t);return Bt(n,o,""+e)})(e,n||a&&""===n);e.zt(Dt,e.Kt(o),i?s:r)},Re=(e,[n,o])=>{const s="var-"+Tt();return te({name:e,se(e){const[n]=ye(e);ie(e,t.G),ie(e,n);const r=e.it(d),a=[[Dt,[[Yt(s),o],["display",e.Wt(s)]]]];e.nt(),e.ot(r,e.tt()),e.Xt(e.Zt(),a),e.Et(r,e.Pt())},te(e){ve(e,e.jt(t.G),s,o,n)},oe(e,r,a){r===t.G&&ve(e,a,s,o,n)}})},pe="contents",_e="none",be=Re("is-visible",[_e,pe]),Ae=Re("is-hidden",[pe,_e]),we={$e:"trigger-event",ge:"listen-event"},Oe="on",Me={[e]:"attrchanged",[s]:"statechanged"},Ie={Te:"set-state",Se:"set-attr",ye:"set-timer",ve:"send-event",Re:"trigger-element",pe:"script",_e:"http-request",be:"request-header",Ae:"request-body",we:"response-ok",Oe:"response-fail"},Le={Me:"=",Ie:"+",Le:"-",Ne:"*",Ce:"/",De:"add",Ue:"assign",Pe:"push",qe:"pop",Be:"remove"},Ne=B(),Ce=B(),De=t=>et(Ne,t);window.__REALM_ADD_CUSTOM_FLOW=(t,e,n)=>nt(De(t),e,n);var Ue=t=>et(Ce,t)??B(),Pe=(e,n)=>()=>(o,s)=>((e,n,o,s)=>{const r=n.At(s),a=n.qt(s),i=n.vt(s),c=Q(a,qe,[]);if(r===Ie.Te&&Z(c,[t.G,i]),r===S){const{type:o,use:s=""}=st(c);if("module/realm"===o){const o=`${r}-${n.bt()}-${n.Rt()}`,a=z("*"===s?"localState,globalState,event,attrs, attr,$":s,",").map(t=>t.trim());Z(c,[t.C,o]),((e,n,o,s,r)=>{const a=((t,e,n,o)=>{const s=`__REALM_ADD_CUSTOM_FLOW('${t}', '${e}', async (${o.length?`{ ${X(o,", ")} }`:""})=>{\n${n}\n})`;return URL.createObjectURL((t=>new Blob([t],{type:"application/javascript"}))(s))})(e,n,o,s),i=mt(S);i.onload=()=>{URL.revokeObjectURL(a),ht(it)(i)},ft(i)([[t.U,a],[t.j,"module"],[t.o],[t.C,n]]),ut(it)(i)})(e,o,i,a)}}if([Ie.ye,Ie._e,Ie.we,Ie.Oe].includes(r)){const o=Pe(e,n);Z(c,[t.t,Q(n.Ut(s),o(),[])])}return[Ie.ve,Ie.Ae].includes(r)&&Z(c,[t.t,n.vt(s)]),[...o,[r,c]]})(e,n,o,s),qe=(t,e)=>[...t,[_t(e),bt(e)]],Be=({name:t,me:e,de:n,je:o,Ge:s})=>{const r=e=>async(n,o)=>{const s=((t,e)=>et(Ue(t),e))(t,n.At());s&&e?.(s,n,o)};return[async(o,s)=>{const r=G(s.Vt(t)),a=Pe(o,s),i=j(Q(r,(t,e)=>[...t,[Q(s.qt(e),(t,e)=>qe(t,e),[]),Q(s.Ut(e),a(),[])]],[]));nt(Ne,o,B()),e?.(o),((t,e,n)=>{const o=Ue(t)??B();nt(o,e,n),nt(Ce,t,o)})(t,o,i),n?.(o,i)},r(o),r(s)]},je=ct.globalState=new O,Ge=j(),He=t=>tt(G(Ge),([e])=>e===t),Fe=t=>{const e=He(t)?.at(3);return e?.storage??"memory"},Ve=()=>je,xe=(t,e)=>je.set(t,e,Fe(t)),ke=te({name:"global-state",se(e){const[n,o,s]=J([t.O,t.j,t.P],t=>e.jt(t)),r=ee(o,e.vt());ot(Ge,[n,o,r,{storage:s}]),xe(n,(t=>je.get(t,Fe(t)))(n)??r)},ee(t){t.st()}}),Ye=B(),Qe=B(),Ze=B(),Je=(t,e,n)=>n.size&&nt(t,e,n),Xe=(t,e)=>Je(Qe,t,e),ze=(t,e)=>Je(Ze,t,e),{Me:Ke,Be:We,qe:tn,Pe:en,Ue:nn,De:on}=Le,{A:sn,R:rn,G:an,T:cn,B:ln}=t,{ce:un,ue:hn,ie:mn}=Wt,dn=(t,e,n,o)=>{const s=""+e,r={event:()=>H(o,s),globalState:()=>H(Ve(),s),localState:()=>H(t.k,s),"event:attr":()=>{const e=o.target,n=t.Bt(e);return H(n,s)},attr:()=>H({...me(t),...t.Bt(t)},s)};return r?.[n]?.()},fn=(t,e,n,o,s)=>{const r=()=>dn(t,n,o,s),a={event:()=>ee(e,r()),"event:attr":r,attr:r,globalState:()=>ee(e,r()),localState:()=>ee(e,r())};return a?.[o]?.()??ee(e,n)},En=(t,e,n,o=0)=>{const s=he(t,e,o),r=void 0!==s;return[r?s:n,r]},$n=(t,e,n,o)=>{const[s]=En(e,sn,Ke),[r,i]=En(e,rn),[c,l]=En(e,an),u=n===un,h=n===mn;if(!(!u&&l||n===hn||u&&(s===tn||(s===We||s===on||s===nn)&&i||(s===en||s===Ke)&&l)))return;const[m]=En(e,cn),d=i?fn(t,n,r,m,o):"-1";let f=fn(t,n,c,m,o);const[,E]=En(e,ln);E&&h&&(f=!f);const $=(([t,e,n,o,s])=>{const r=["number","array"].includes(e);return e=>{if(!r)return n;const i={[Le.Me]:()=>V(n)?n:+n,[Le.Ie]:()=>+e+ +n,[Le.Le]:()=>+e-+n,[Le.Ne]:()=>+e*+n,[Le.Ce]:()=>+e/+n,[Le.Ue]:()=>{const t=[...e],s=t[+o];return void 0!==s&&(t[+o]="object"==typeof s?{...s,...n?.[0]}:n),t},[Le.Pe]:()=>Q(n,(t,e)=>{const n=(o=t=>t===e,t.findIndex(o));var o;if(s&&n>-1)return K(t,n,1),t;const r=`${a}${a}${Tt()}`;return[...t,"object"==typeof e?{[r]:Symbol(r),...e}:e]},[...e]),[Le.qe]:()=>{const t=[...e];return(t=>{t.pop()})(t),t},[Le.Be]:()=>{const t=[...e];return K(t,+o,1),t}};return i?.[t]?.()}})([s,n,f,+d,E]);return $},gn=(t,e)=>Q(G(e),(e,[n,o])=>n===t?o:e),Tn=(t,e,n)=>(o,s,r)=>x(n,([n,a])=>{const[i=[],c]=et(Ye,n),l=W(i,t=>{const[,e]=En(a,t);return e});if(!i.length||l)return c?.(t,e,a,r,o,s)}),Sn=({name:t,He:e,Fe:n})=>()=>nt(Ye,t,[e,n]),yn={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE",PATCH:"PATCH"},vn={JSON:"json",ue:"html",TEXT:"text"},Rn=Sn({name:Ie._e,async Fe(e,n,o,s,r,a){const[i,c]=En(o,t.F);if(!c)throw q(`Missing "${t.F}" attribute on <${Ie._e} />`);const[l]=En(o,t.t),[u=[],h]=En(l,Ie.we),[m,d]=En(u,t.t),[f=[],E]=En(l,Ie.Oe),[$,g]=En(f,t.t);if(!h&&!E)return;const[T=yn.GET]=En(o,t.H),[S=vn.TEXT]=En(o,t.AS),[y=[]]=En(l,Ie.be,[],1),v=new Headers;x(y,e=>{const n=st(e);v.set(n[t.O],n[t.G])});const[R,p]=En(l,Ie.Ae);let _;if(p){const[n,o]=En(R,t.t);p&&o&&(_=n);const[r,a]=En(R,t.G),[i,c]=En(R,t.T);a&&c&&(_=dn(e,r,i,s))}const b=(t,o)=>Tn(e,n,t)(a,r,o);try{const t=await fetch(i,{body:_,method:T,headers:v});if(!t.ok)throw q(`[${t.status}] ${i}`);if(!d)return;const e=()=>t.text(),n={[vn.JSON]:()=>t.json(),[vn.ue]:e,[vn.TEXT]:e};b(m,await(n?.[S]?.()))}catch(t){if(!g)return;b($,{message:"[ERROR] "+t?.message})}}}),pn=Sn({name:Ie.pe,He:[t.C],Fe(e,n,o,s){const[a]=En(o,t.C),i=!!s?.target,c=s?.target,l=()=>zt(()=>{const o=((t,e)=>et(De(t),e))(n,a);if(!o)return l();o?.apply(e,((e,n)=>{event=void 0;const o={...me(e),...e.Bt()},s=e=>[r,[[t.L,e]]];return[{$:e,attr:{get:t=>e.jt(t)??o?.[t],set:e.ut},refs:t=>e.kt.apply(null,s(t)),ref:t=>e.xt.apply(null,s(t)),attrs:e.Bt(),localState:e.k,globalState:Ve(),event:n}]})(e,i?{...s,target:c}:s))});l()}}),_n=Sn({name:Ie.ve,He:[t.O],Fe(e,n,o,s){const[a]=En(o,t.O),[i,c]=En(o,t.q),[l,h]=En(o,t.q+u+"parent"),[m,d]=En(o,t.j),[f,E]=En(o,t.G),[$,g]=En(o,t.T),[T]=En(o,t.t),S={html:()=>T,json:()=>p(T)},y=[r,t.L,i],v=Oe+u+a;let R=s;d&&(R=E&&g?fn(e,m,f,$,s)||f:S[m]?.()??f);let _=[e];if(c&&(_=G(e.kt.apply(null,y))),h){const t=e.It();_=[t],l!==r&&(_=G(t.kt.apply(null,y)))}x(_,t=>t.St(v,R))}}),bn=Sn({name:Ie.Te,He:[t.O],Fe(e,n,o,s){const[r]=En(o,t.O),[,a]=En(o,t.S),i=a?(c=r,He(c)?.at(1)):gn(r,e.Y);var c;const l=a?xe:(t,n)=>e.k.set(t,n);l(r,$n(e,o,i,s))}}),An=Sn({name:Ie.Se,He:[t.O],Fe(e,n,o,s){const[r]=En(o,t.O),a=gn(r,e.Z),i=$n(e,o,a,s)(ee(a,e.jt(r)));e.ut(r,""+i)}}),wn=Sn({name:Ie.ye,He:[t.I,t.g],Fe(e,n,o,s,r,a){const[i,c]=En(o,t.t);if(!c)return;const[l,u]=En(o,t.I),[h,m]=En(o,t.g),d=()=>Tn(e,n,i)(a,r,s);u?Xt(d,+l):m&&setInterval(d,+h)}}),On=Sn({name:Ie.Re,Fe(e,n,o,s){x(o,([n,o])=>Y(e.kt(r,[[t.L,o]]),t=>t?.[n]?.(s)))}}),Mn=t=>(e,n,o,s)=>{const r=!!o,a=t?e.gt:e.Tt,i=n===Oe;a(i?Oe+u+o:n,t=>{!i&&r&&o!==t[0]||zt(()=>e.St(we.ge,[n,o,s,t]))})},In=(t,e,n)=>x(t,([t,o])=>x(t,([t,s])=>n(e,t,s,o))),Ln=Be({name:we.ge,async je(t,e,n){In(t,n??e,Mn())},async Ge(t,e,n){In(t,n??e,Mn(1))}}),Nn=(t,e)=>(n,o,s,a)=>i=>{(e?n.gt:n.$t)(s,((t,e,n,o,s)=>a=>{const[,i]=e||[];i?.();const c=()=>t.St(we.$e,[r,o,s,a]);if(!(n>0))return c();e=Xt(c,n)})(t,void 0,o,s,a),i)},Cn=(e,n,o)=>x(e,([e,s])=>{const a=+he(e,t.l);x(e,([e,i])=>{e!==t.l&&Y(n.kt(r,t.L,i),o(n,a,e,s))})}),Dn=[Ln,Be({name:we.$e,async je(t,e,n){Cn(t,n??e,Nn(e))},async Ge(t,e,n){Cn(t,n??e,Nn(e,1))}})],Un=[Rn,pn,_n,An,bn,wn,On],Pn=te({name:$,async se(e){const n=e.wt();if(!n)return;const o=e.jt(t.O,n);for(const t of Un)await t();for(const[t]of Dn)await t(o,e)},async ee(t){if(!(t.Ot()instanceof ShadowRoot))return;const e=t.It();for(const[,t]of Dn)await t(e);t.st()}}),qn=te({name:"repeat-list",se(r){const a=r.ct();x(r.Pt(),t=>{r.ot(r.Lt(t),a),r.st(t)}),r.nt(),r.J();const i=r.It();if(!i)return;const c=r.jt(t.M),l=I(c);if(!l)return;const u=i?.k,h=i.Y,m=i.Z;x(G([[i,e],[u,s],[Ve(),s,1]]),([t,c,d])=>{t.subscribe(async(t,f)=>{if(!V(f)||t!==l)return ae(r,c,le(r),t,f,d,1);await(async()=>{for(const[,,t]of Dn)await t(i,r)})(),(t=>{const c=r.tt();r.J(),r.J(c),x(t,(e,s)=>{r.ot(r.Lt(a),c);const i=le(r);x(F(e),t=>ae(r,o,i,t,e,0));const l={index:s,length:t.length};x(F(l,"!"),t=>ae(r,n,i,t,l,0))});const l=le(r);x(G([[h,s],[m,e]]),([t,n])=>x(t,([t])=>{ae(r,n,l,t,{[e]:()=>i.jt(t),[s]:()=>u.get(t)}[n](),0)}))})(f),await(async()=>{for(const[,t]of Dn)await t(i,r)})()})})}}),Bn=te({name:"web-app",ee(e){e.ut(t.p,1)}}),jn=B(),Gn=B(),Hn=B(),Fn=B(),Vn=B(),xn=te({name:f,se(e){const n=[[E,Xe],["element-state",ze]],o=e.jt(t.O);for(const[t,s]of n){const n=oe(e,t);n&&s(o,n),se(e,t)}},te(r){var a;(a=r.jt(t.O),te({name:a,me(){const e=Ot(at)(f,t.O,a),n=Ot(e)("template");nt(jn,a,n),n&&Y(Mt(n.content)("style"),t=>nt(Gn,a,t)),x([[$,Hn],[g,Fn],[T,Vn]],([t,n])=>{nt(n,a,j(G(Mt(e)(t))))})},se(r){r.nt(),r.Jt(et(Gn,a)),r.K(et(jn,a)),x([Hn,Fn,Vn],t=>x(et(t,a),r.W));const i=r.xt(d,[[t.i]]),c=Q(r.Pt(),(e,n)=>{const o=r.jt(t.D,n);return o?(r.Et(r.xt(d,[[t.O,o]]),[n]),e):[...e,n]},[]);r.Et(i,c);const l=le(r),u=(t=>et(Qe,t)??j())(a),h=(t=>et(Ze,t)??j())(a);x(G([[G(u),e],[G(h),s],[Ge,s,1]]),([t,a,i])=>x(t,([t,c,u])=>{const h=()=>ee(c,u),m=()=>H(u,t),d={[e]:()=>r.jt(t)??h(),[s]:h,[o]:m,[n]:m};a===e&&ot(r.Z,[t,c,u]),i||a!==s||ot(r.Y,[t,c,u]),ae(r,a,l,t,d[a](),i)})),x(G([[r,e],[r.k,s,0],[Ve(),s,1]]),([t,e,n])=>t.subscribe((t,o,a)=>{const i=[t,o,a];e===s&&Z(i,n),r.St(Me[e],i),ae(r,e,l,t,o,n,1)}));const m=(t=>((t,e)=>n=>Tn(t,e,n))(t,t._t()))(r);x(rt(we),([,t])=>r.Tt(t,([t,e,n,o])=>m(n)(t,e,o)))},ee(t){t.St("mounted")},ne(t){t.St("unmounted")}})).call(this)},ee(t){t.st()}}),kn=[fe,Te,Se,qn,be,Ae,Pn],Yn=[ke,xn,Bn];(async()=>{for(const t of kn)await t();for(const t of Yn)t()})()}();//# sourceMappingURL=realm.production.min.js.map
|
|
11
|
+
var t={t:"action",AS:"as",o:"async",i:"children",l:"debounce",u:"debug",h:"defer",m:"element",g:"every",T:"from",S:"global",v:"href",R:"index",p:"loaded",_:"mount",A:"mutate",O:"name",M:"of",I:"once",L:"ref",N:"rel",C:"script-id",D:"slot",U:"src",P:"storage",q:"to",B:"toggle",j:"type",G:"value",H:"method",F:"url"},e="attr",n="meta",o="src",s="state",r="",a="$",i="RLM:",c="data-",l="-",u=":",h=".",d="contains",m="slot",f="custom-element",E="element-attr",$="element-flow",g="import-script",T="import-style",S="script",y=JSON.stringify,v=JSON.parse,R=(t="")=>"object"==typeof t?y(t):""+t,p=t=>v(R(t)),_=/([A-Z])+/g,b=/(?=[A-Z])|[.\-\s_]/,A=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)?/:host\(\[([#@][a-zA-Z0-9-_.]+?)\](\[(global)\])?(\[(eq|neq|gt|gte|lt|lte|contains)=\"(\w+?)\"\])?\)/g:/:host\(\[\\([#@][a-zA-Z0-9-_.]+?)\](\[(global)\])?(\[(eq|neq|gt|gte|lt|lte|contains)="(\w+?)"\])?\)/g,w=/[$|#|@|!]([.]?(?:\w+[.-])*\w+)/gm,O=class{#t;#e;constructor(){this.#t=B(),this.#e=j()}set(t,e,n){const o=et(this.#t,t),s="function"==typeof e?e(o):e;"memory"!==n&&window?.[n]?.setItem(t,R(s)),nt(this.#t,t,s),x(this.#e,e=>e.call(this,t,s,o))}get(t,e){if("memory"!==e){const n=window?.[e]?.getItem(t);if(void 0!==n)return v(y(n))}return et(this.#t,t)}async subscribe(t){this.#n(t),ot(this.#e,t)}#n(t){k(this.#t,(e,n)=>t.call(this,n,e))}},M=t=>t.trim(),I=(t,e=1,n)=>null==t?r:t.slice(e,n),L=(t,e)=>t.split(e),N=t=>t?.toLowerCase?.(),C=(t,e,n)=>t.replace(e,n),D=(t,e)=>t.startsWith(e),U=(t,e)=>t.includes(e),P=t=>{if(!t)return r;const[e,...n]=L(N(t),r);return(t=>t.toUpperCase())(e)+X(n,r)},q=t=>Error(t),B=(t=[])=>new Map(t),j=t=>new Set(t),G=t=>Array.from(t),H=(t,e,n)=>{if(!e)return t;if(!w.test(e))return e;if(n&&!D(e,n))return e;const o=t instanceof O;return e.replace(w,(e,n)=>{const s=z(I(n),h),r=Q(s,(t=>(e,n,o)=>t&&0===o?e.get(n):e[n])(o),t);return"object"==typeof r?y(r):r})},F=(t,e=a)=>{const n=rt(t);return Q(n,(t,[n,o])=>"object"==typeof o?Q(F(o),(t,o)=>[...t,`${e}${h}${n}${h}${o}`],t):[...t,`${e}${h}${n}`],[])},V=t=>Array.isArray(t),x=(t,e)=>{Q(G(t),(t,n,o)=>(e?.(n,o),t))},k=(t,e)=>t.forEach(e),Y=(t,e)=>t.forEach(e),Q=(t,e,n)=>t.reduce(e,n),Z=(t,e)=>t.push(e),J=(t,e)=>t.map(e),X=(t,e)=>t.join(e),z=(t,e)=>t.split(e),K=(t,e,n,...o)=>t.splice(e,n,...o),W=(t,e)=>t.some(e),tt=(t,e)=>t.find(e),et=(t,e)=>t.get(e),nt=(t,e,n)=>t.set(e,n),ot=(t,e)=>t.add(e),st=t=>Object.fromEntries(t),rt=t=>Object.entries(t),at=document,it=at.head,ct=window,lt=(t,e)=>t.innerHTML=e,ut=t=>(e,n)=>(n??t).append(e),ht=t=>e=>(e??t).remove(),dt=t=>at.createElement(t),mt=()=>at.createDocumentFragment(),ft=t=>(e,n)=>{const o=n??t,s=o.setAttribute.bind(o),a=o.removeAttribute.bind(o),i=(t,e)=>t in o&&(o[t]=e);x(e.filter(t=>t),([t,e])=>{if("boolean"!=typeof e){const n=R(e);return s(t,n),void i(t,n)}e?s(t,r):a(t),i(t,e)})},Et=t=>(e,n,o)=>ft(t)([[e,n]],o),$t=(t,e)=>t&&!!e&&t.assign(...e),gt=t=>(e,n,o)=>(o??t).addEventListener(e,n),Tt=()=>parseInt(C(Math.random().toString(),h,r)).toString(16),St=t=>t?.innerHTML,yt=t=>e=>(e??t).cloneNode(1),vt=(t,e)=>V(e)?Q(e.filter(t=>V(t)),(t,[e,n])=>(e&&(t+=`[${e}${n?`="${n}"`:r}]`),t),t):t,Rt=t=>(e,n,o)=>(o??t)?.querySelector(vt(e,n)),pt=t=>(e,n,o)=>(o??t)?.querySelectorAll(vt(e,n)),_t=t=>t.name,bt=t=>t.value,At=t=>e=>G((e||t)?.attributes??[]),wt=t=>(e,n)=>(n||t)?.getAttribute?.(e),Ot=t=>(e,n,o)=>Rt(t)(e,V(n)?n:[[n,o]]),Mt=t=>(e,n,o)=>pt(t)(e,V(n)?n:[[n,o]]),It=t=>"@"+t,Lt=t=>"#"+t,Nt=t=>()=>t.V,Ct=t=>()=>t.getRootNode(),Dt=":host",Ut="comp",Pt="style",qt="global",Bt=(t,e,n)=>{const o="eq"===t?e:null,s="neq"===t?e:null,r="gt"===t?e:null,a="gte"===t?e:null,i="lt"===t?e:null,c="lte"===t?e:null,l=t===d?e:null;return["true","false"].includes(n)||isNaN(+n)?!!o&&n===o||!!s&&n!==s||!!l&&U(n,l):!!o&&+n==+o||!!s&&+n!=+s||!!r&&+n>+r||!!a&&+n>=+a||!!i&&+n<+i||!!c&&+n<=+c},jt=t=>t?.style,Gt=(t,e)=>{if(!e)return t?.selectorText;t.selectorText=e},Ht=(t,e,n)=>t.setProperty(e,n),Ft=(t,e)=>t.getPropertyValue(e),Vt=(t,e)=>x(t,t=>x(Object.values(t.cssRules),e)),xt=t=>Nt(t)().adoptedStyleSheets,kt=t=>()=>{const e=new CSSStyleSheet;return Z(xt(t),e),e},Yt=(t,e,n,o=1)=>{const s=`${l}${l}${CSS.escape((t=>{const e=J((t=>L(t?.replace(_,P),b))(t),N)??[],n=e.length;return 0===n?r:1===n?e.at(0):X(e,l)})(t))}`,a=jt(e);if(!a)return s;const i=()=>Ft(a,s);if(void 0===n)return i();o||i(),Ht(a,s,""+n)},Qt=t=>`var(${l}${l}${t})`,Zt=(t,e)=>t.insertRule(Q(e,(t,[e,n])=>t+(e+"{")+X(Q(n,(t,[e,n])=>[...t,X([e,n],u)],[]),";")+"}",r)),Jt=class extends HTMLElement{name;id;#o;V;k;Y;Z;J=(t=>e=>lt(e??t,r))(this);X=(t,e)=>{e?lt(e,""+t):(()=>{this.#o=""+t})()};K=(t=>e=>{if(!e)return;const n=yt(t),o=e instanceof HTMLTemplateElement?n(e).content:e;ut(t)(o,Nt(t)())})(this);W=t=>t&&ut(this)(yt(this)(t),this.tt());et=(t=>(e,n)=>(n??t).textContent="object"==typeof e?y(e):""+e)(this);nt=(t=>()=>{const e=t;return e.V=t.attachShadow({mode:"closed",slotAssignment:"manual"}),Nt(e)()})(this);ot=ut(this);st=ht(this);rt=(t=>(e,n)=>(n??t).replaceWith(e))(this);it=dt;ct=mt;lt=ft(this);ut=Et(this);ht=(t=>(e,n)=>(n??t).removeAttribute(e))(this);dt=(t=>(e,n,o)=>Et(t)(`${c}${e}`,n,o))(this);ft=(t=>(e,n)=>ft(t)(e,n))(this);Et=$t;$t=gt(this);gt=(t=>(e,n,o)=>(o??t).removeEventListener(e,n))(this);Tt=(t=>(e,n,o)=>gt(t)(i+e,e=>n.call(o??t,e.detail)))(this);St=(t=>(e,n,o)=>(o??t).dispatchEvent(new CustomEvent(i+e,{detail:n})))(this);yt=(e=>(n,o,s)=>{const r=wt(s??e)(t.u,n);r&&((t,e="log")=>{console[e](...t)})([r,o])})(this);vt=t=>St(t??this);Rt=Tt;_t=(t=>()=>t.name)(this);bt=(t=>e=>(e??t).id)(this);At=(t=>e=>N((e??t)?.tagName))(this);wt=(t=>e=>(e??t).parentElement)(this);Ot=(t=>e=>(e??t).parentNode)(this);tt=Nt(this);Mt=Ct(this);It=t=>{return(e=t??this,()=>Ct(e)().host)();var e};Lt=yt(this);Nt=vt;Ct=Rt(this);Dt=pt(this);Ut=(t=>e=>G((e??t).children))(this);Pt=(t=>e=>G((e??t).childNodes))(this);qt=At(this);Bt=(t=>e=>Q(At(t)(e),(t,e)=>(t[_t(e)]=bt(e),t),{}))(this);jt=wt(this);Gt=(t=>(e,n)=>(n||t).hasAttribute(e))(this);Ht=(t=>(e,n)=>wt(t)(`${c}${e}`,n))(this);Ft=Ot(this);Vt=Mt(this);xt=(t=>(e,n,o)=>Rt(t)(e,V(n)?n:[[n,o]],Nt(t)()))(this);kt=(t=>(e,n,o)=>pt(t)(e,V(n)?n:[[n,o]],Nt(t)()))(this);Yt=It;Qt=Lt;Zt=kt(this);Jt=(t=>n=>{if(!n)return;const o=St(n),r=kt(t)();Z(xt(t),r),r.replaceSync(o),Vt([r],t=>{const n=Gt(t),o=G(n?.matchAll(A)??[]);if(!o.length)return;const r=jt(t),a=Q(z(r.cssText,";"),(t,e)=>e?[...t,J(z(e,u),M)]:t,[]);Gt(t,C(n,A,Dt)),Yt(Pt,t,X(J(a,t=>X(t,u)),"|"));for(const n of o){const[,o,r,a,...i]=n,c=D(o,"#")?s:e,u=I(o);Yt(c,t,u);const h=u+l;a===qt&&Yt(h+qt,t,1);const[d,m,f]=i??[];if(!d)return;Yt(h+"op",t,m),Yt(h+Ut,t,f)}}),ht(n)()})(this);Xt=Zt;zt=(t=>(e,n,o)=>Vt(xt(t),t=>{if(Gt(t)!==e)return;const s=t.style;Ft(s,n)!==o&&Ht(s,n,o)}))(this);Kt=Yt;Wt=Qt},Xt=(t,e)=>{let n=setTimeout(t,e);return[n,()=>clearTimeout(n)]},zt=t=>{let e=requestAnimationFrame(t);return[e,()=>cancelAnimationFrame(e)]},Kt=class extends Jt{te;ee;ne;oe;k=new O;Y=j();Z=j();#s=[];constructor({name:t,te:e,se:n,ee:o,ne:s,oe:r}){super(),this.name=t,this.id=this.Rt(),this.ee=o,this.ne=s,this.oe=r,n?.(this),this.X(this.vt()),e?.(this),zt(()=>this.ee?.(this))}subscribe(t){Z(this.#s,t)}async connectedCallback(){const[t]=ue(this,(t,e,n)=>{x(this.#s,o=>o?.(t,e,n)),this.oe?.(this,t,e,n)});t()}disconnectedCallback(){this.ne?.(this)}},Wt=(t=>(t.re="string",t.ae="number",t.ie="boolean",t.ce="array",t.le="object",t.ue="html",t.he="json",t))(Wt||{}),te=({name:t,extends:e,de:n,me:o,fe:s,...r})=>()=>new Promise(a=>{const i=U(t,l),c=customElements.get(t);if(!i||c)throw q(`Element \`${t}\` has invalid name or already defined`);customElements.whenDefined(t).then(async()=>{o?.(t),a(1)}),n?.(t),customElements.define(t,class extends Kt{constructor(){super({name:t,...r})}async connectedCallback(){super.connectedCallback(),s?.(this)}},{extends:e})}),ee=(t,e)=>{const n=t=>"string"!=typeof e?e:p(e||t),o={number:()=>+e,boolean:()=>n(e),array:()=>n("[]"),object:()=>n("{}")};return o?.[t]?.()??e},ne=(t,e=E)=>G(t.Vt(e)),oe=(e,n)=>j(Q(ne(e,n),(n,o)=>{const s=e.jt(t.O,o),r=e.jt(t.j,o);return[...n,[s,r,ee(r,e.vt(o))]]},[])),se=(t,e)=>x(ne(t,e),e=>t.st(e)),re=(t,e)=>tt(G(e),([e])=>e===t)?.at(1),ae=(r,a,i,h,d,f,E)=>(((t,n,o,r,a=0)=>{const i=xt(t),c=""+o;Vt(i,t=>{Yt((a?qt:r)+l+n,t,c,0);const o=Yt(s,t),i=Yt(e,t);if(!o&&!i)return;if(o&&o!==n||i&&i!==n)return;const h=n+l;Yt(h+"value",t,c);const d=Yt(h+"op",t),m=Yt(Pt,t),f=J(z(m,"|"),t=>z(t,u)),E=!!d,$=Yt(h+Ut,t),g=Bt(d,$,c);if(E&&!g){if(!W(f,([e])=>!!jt(t)[e]))return;return x(f,(t=>([e])=>jt(t).removeProperty(e))(t))}x(f,(t=>([e,n])=>Ht(jt(t),e,n))(t))})})(r,h,d,a,f),x(i,([i,...c])=>((r,a,i,c,l,u,h)=>{const d=()=>u,m=()=>H(u,l),f={[s]:d,[e]:d,[o]:m,[n]:m}[a](),E=r.Gt(t.S,c);x(i,([t,e,n])=>{(h?n:!n||E)&&l===e&&r.ut(t,f,c)})})(r,a,((t=j(),r=j(),a=j(),i=j())=>({[s]:t,[e]:r,[o]:a,[n]:i}))?.(...c)[a],i,h,d,f)),E?((n,r,a,i,l)=>{const u={[s]:n.Qt(a),[e]:n.Yt(a),[o]:a}[r],h={[s]:re(a,n.Y),[e]:re(a,n.Z)}[r],d=l?m:`[${c}${r}="${u}"]:not([${t.S}])`,f=l?[[t.S],[`${c}${r}`,u]]:[],E=G([...n.Dt(d,f),...n.Dt(d,f,l?at:void 0)]);x(E,e=>{e&&("html"===h?n.X(i,e):n.et(i,e),n.yt(n.xt(d,[...f,[t.O,n.jt(t.D,e)],[t.u]]),i))})})(r,a,h,d,f):(f||a!==s||r.k.set(h,d),((r,a,i,c,l)=>{const u=()=>i,h=()=>c,d=()=>H(c,i),f={[s]:()=>r.Qt(i),[e]:()=>r.Yt(i),[o]:u,[n]:u},E=f[a]?.(),$={[s]:h,[e]:h,[o]:d,[n]:d},g=$[a]?.(),T={[s]:re(i,r.Y),[e]:re(i,r.Z)}[a];Y(r.kt(t.D,[[t.O,E],l&&[t.S]]),e=>{if(!e)return;if(!l&&r.Gt(t.S,e))return;const n=r.it(m),o=r.Qt(r.Rt()),s=B();nt(s,e,t.O),nt(s,n,t.D),x([e,n],e=>{r.dt(a,E,e),r.lt([[et(s,e),o],l&&[t.S]],e)}),"html"===T?r.X(g,n):r.et(g,n),r.ot(n),r.Et(e,[n]),r.yt(e,g)})})(r,a,h,d,f))),ie=(e,n)=>{const o=`${n}${u}${t.S}`,s=e.Gt(o)?o:n;e.ut("_"+s,e.jt(s))},ce=(t,e,n,o,s)=>t&&ot(e,[n,o,s]),le=e=>Q(G(e.kt("*")),(n,o)=>{const s=j(),r=j(),i=j(),c=j(),[l,h,d,m]=Q(e.qt(o),(n,l)=>{const h=D(_t(l),"_");if(e.Gt(_t(l),o)&&!h)return n;const[d,m]=L(_t(l),u),f=m===t.S,E=bt(l),$=I(d),g=I(E),T=D(E,"#");ce(T,s,$,g,f);const S=D(E,"@");ce(S,r,$,g,0);const y=D(E,a);ce(y,i,$,E,0);const v=D(E,"!");return ce(v,c,$,E,0),(y||v)&&e.ht(l.name,o),[s,r,i,c]},[]);return[...n,[o,l,h,d,m]]},[]),ue=(t,e)=>((t,e)=>{const n=new MutationObserver(e?.Ee);return[()=>n.observe(t,e),()=>n.disconnect()]})(t,{attributes:1,attributeOldValue:1,Ee:n=>{for(const o of n){if("attributes"!==o.type)return;const n=o.attributeName,s=t.jt(n,o.target),r=o.oldValue;r!==s&&e?.(n,s,r)}}}),he=(t,e,n)=>{return n?J((o=([t])=>t===e,t.filter(o)),([,t])=>t):tt(t,([t])=>t===e)?.at(1);var o},de=t=>st(J(G(t.Z),([t,,e])=>[t,e])),me=B(),fe=te({name:"import-element",async se(e){const{from:n,automount:o,as:s,...r}=e.Bt(),[,a]=et(me,n)??[];if(!a)try{const t=await fetch(n),e=await t.text();nt(me,n,e)}catch{q(`Failed to fetch "${n}"`)}const i=e.Ct(f,[],(c=et(me,n),(new DOMParser).parseFromString(c,"text/html")));var c;if(!i)return e.st();const l=e.jt(t.O,i);let u=s??l;if(!!customElements.get(u)&&(u=u+h+e.Rt()),e.ut(t.O,u,i),void 0!==o){const t=e.it(u);e.lt(rt(r),t),e.ot(i,at.body),e.rt(t,e)}else e.ot(i,at.body),e.st()}}),Ee=B(),$e=B(),ge=(t,e,n,o)=>{const s=t.it(e);t.lt(n,s),t.ot(s,o)},Te=te({name:g,ee(e){if(!(e.Ot()instanceof ShadowRoot))return;const{from:n,local:o,...s}=e.Bt();et(Ee,n)||void 0!==o||(ge(e,S,[[t.U,n],...rt(s)],it),nt(Ee,n,1)),e.st()}}),Se=te({name:T,ee(e){if(!(e.Ot()instanceof ShadowRoot))return;const{from:n,local:o,...s}=e.Bt(),r=et($e,n),a=void 0!==o,i=[e,"link",[[t.v,n],[t.N,"stylesheet"],...rt(s)]];r||(ge(...i,it),nt($e,n,1)),a&&ge(...i,e.It().tt()),e.st()}}),ye=t=>Q(["eq","neq","gt","gte","lt","lte",d],(e,n)=>t.Gt(n)?[n,t.jt(n)]:e,[]),ve=(e,n,o,s,r)=>{const a=e.Gt(t.G),i=((t,e)=>{const[n,o]=ye(t);return Bt(n,o,""+e)})(e,n||a&&""===n);e.zt(Dt,e.Kt(o),i?s:r)},Re=(e,[n,o])=>{const s="var-"+Tt();return te({name:e,se(e){const[n]=ye(e);ie(e,t.G),ie(e,n);const r=e.it(m),a=[[Dt,[[Yt(s),o],["display",e.Wt(s)]]]];e.nt(),e.ot(r,e.tt()),e.Xt(e.Zt(),a),e.Et(r,e.Pt())},te(e){ve(e,e.jt(t.G),s,o,n)},oe(e,r,a){r===t.G&&ve(e,a,s,o,n)}})},pe="contents",_e="none",be=Re("is-visible",[_e,pe]),Ae=Re("is-hidden",[pe,_e]),we={$e:"trigger-event",ge:"listen-event"},Oe="on",Me={[e]:"attrchanged",[s]:"statechanged"},Ie={Te:"set-state",Se:"set-attr",ye:"set-timer",ve:"send-event",Re:"trigger-element",pe:"script",_e:"http-request",be:"request-header",Ae:"request-body",we:"response-ok",Oe:"response-fail"},Le={Me:"=",Ie:"+",Le:"-",Ne:"*",Ce:"/",De:"add",Ue:"assign",Pe:"push",qe:"pop",Be:"remove"},Ne=B(),Ce=B(),De=t=>et(Ne,t);window.__REALM_ADD_CUSTOM_FLOW=(t,e,n)=>nt(De(t),e,n);var Ue=t=>et(Ce,t)??B(),Pe=(e,n)=>()=>(o,s)=>((e,n,o,s)=>{const r=n.At(s),a=n.qt(s),i=n.vt(s),c=Q(a,qe,[]);if(r===Ie.Te&&Z(c,[t.G,i]),r===S){const{type:o,use:s=""}=st(c);if("module/realm"===o){const o=`${r}-${n.bt()}-${n.Rt()}`,a=z("*"===s?"localState,globalState,event,attrs, attr,$":s,",").map(t=>t.trim());Z(c,[t.C,o]),((e,n,o,s,r)=>{const a=((t,e,n,o)=>{const s=`__REALM_ADD_CUSTOM_FLOW('${t}', '${e}', async (${o.length?`{ ${X(o,", ")} }`:""})=>{\n${n}\n})`;return URL.createObjectURL((t=>new Blob([t],{type:"application/javascript"}))(s))})(e,n,o,s),i=dt(S);i.onload=()=>{URL.revokeObjectURL(a),ht(it)(i)},ft(i)([[t.U,a],[t.j,"module"],[t.o],[t.C,n]]),ut(it)(i)})(e,o,i,a)}}if([Ie.ye,Ie._e,Ie.we,Ie.Oe].includes(r)){const o=Pe(e,n);Z(c,[t.t,Q(n.Ut(s),o(),[])])}return[Ie.ve,Ie.Ae].includes(r)&&Z(c,[t.t,n.vt(s)]),[...o,[r,c]]})(e,n,o,s),qe=(t,e)=>[...t,[_t(e),bt(e)]],Be=({name:t,de:e,me:n,je:o,Ge:s})=>{const r=e=>async(n,o)=>{const s=((t,e)=>et(Ue(t),e))(t,n.At());s&&e?.(s,n,o)};return[async(o,s)=>{const r=G(s.Vt(t)),a=Pe(o,s),i=j(Q(r,(t,e)=>[...t,[Q(s.qt(e),(t,e)=>qe(t,e),[]),Q(s.Ut(e),a(),[])]],[]));nt(Ne,o,B()),e?.(o),((t,e,n)=>{const o=Ue(t)??B();nt(o,e,n),nt(Ce,t,o)})(t,o,i),n?.(o,i)},r(o),r(s)]},je=ct.globalState=new O,Ge=j(),He=t=>tt(G(Ge),([e])=>e===t),Fe=t=>{const e=He(t)?.at(3);return e?.storage??"memory"},Ve=()=>je,xe=(t,e)=>je.set(t,e,Fe(t)),ke=te({name:"global-state",se(e){const[n,o,s]=J([t.O,t.j,t.P],t=>e.jt(t)),r=ee(o,e.vt());ot(Ge,[n,o,r,{storage:s}]),xe(n,(t=>je.get(t,Fe(t)))(n)??r)},ee(t){t.st()}}),Ye=B(),Qe=B(),Ze=B(),Je=(t,e,n)=>n.size&&nt(t,e,n),Xe=(t,e)=>Je(Qe,t,e),ze=(t,e)=>Je(Ze,t,e),{Me:Ke,Be:We,qe:tn,Pe:en,Ue:nn,De:on}=Le,{A:sn,R:rn,G:an,T:cn,B:ln}=t,{ce:un,ue:hn,ie:dn}=Wt,mn=(t,e,n,o)=>{const s=""+e,r={event:()=>H(o,s),globalState:()=>H(Ve(),s),localState:()=>H(t.k,s),"event:attr":()=>{const e=o.target,n=t.Bt(e);return H(n,s)},attr:()=>H({...de(t),...t.Bt(t)},s)};return r?.[n]?.()},fn=(t,e,n,o,s)=>{const r=()=>mn(t,n,o,s),a={event:()=>ee(e,r()),"event:attr":r,attr:r,globalState:()=>ee(e,r()),localState:()=>ee(e,r())};return a?.[o]?.()??ee(e,n)},En=(t,e,n,o=0)=>{const s=he(t,e,o),r=void 0!==s;return[r?s:n,r]},$n=(t,e,n,o)=>{const[s]=En(e,sn,Ke),[r,i]=En(e,rn),[c,l]=En(e,an),u=n===un,h=n===dn;if(!(!u&&l||n===hn||u&&(s===tn||(s===We||s===on||s===nn)&&i||(s===en||s===Ke)&&l)))return;const[d]=En(e,cn),m=i?fn(t,n,r,d,o):"-1";let f=fn(t,n,c,d,o);const[,E]=En(e,ln);E&&h&&(f=!f);const $=(([t,e,n,o,s])=>{const r=["number","array"].includes(e);return e=>{if(!r)return n;const i={[Le.Me]:()=>V(n)?n:+n,[Le.Ie]:()=>+e+ +n,[Le.Le]:()=>+e-+n,[Le.Ne]:()=>+e*+n,[Le.Ce]:()=>+e/+n,[Le.Ue]:()=>{const t=[...e],s=t[+o];return void 0!==s&&(t[+o]="object"==typeof s?{...s,...n?.[0]}:n),t},[Le.Pe]:()=>Q(n,(t,e)=>{const n=(o=t=>t===e,t.findIndex(o));var o;if(s&&n>-1)return K(t,n,1),t;const r=`${a}${a}${Tt()}`;return[...t,"object"==typeof e?{[r]:Symbol(r),...e}:e]},[...e]),[Le.qe]:()=>{const t=[...e];return(t=>{t.pop()})(t),t},[Le.Be]:()=>{const t=[...e];return K(t,+o,1),t}};return i?.[t]?.()}})([s,n,f,+m,E]);return $},gn=(t,e)=>Q(G(e),(e,[n,o])=>n===t?o:e),Tn=(t,e,n)=>(o,s,r)=>x(n,([n,a])=>{const[i=[],c]=et(Ye,n),l=W(i,t=>{const[,e]=En(a,t);return e});if(!i.length||l)return c?.(t,e,a,r,o,s)}),Sn=({name:t,He:e,Fe:n})=>()=>nt(Ye,t,[e,n]),yn={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE",PATCH:"PATCH"},vn={JSON:"json",ue:"html",TEXT:"text"},Rn=Sn({name:Ie._e,async Fe(e,n,o,s,r,a){const[i,c]=En(o,t.F);if(!c)throw q(`Missing "${t.F}" attribute on <${Ie._e} />`);const[l]=En(o,t.t),[u=[],h]=En(l,Ie.we),[d,m]=En(u,t.t),[f=[],E]=En(l,Ie.Oe),[$,g]=En(f,t.t);if(!h&&!E)return;const[T=yn.GET]=En(o,t.H),[S=vn.TEXT]=En(o,t.AS),[y=[]]=En(l,Ie.be,[],1),v=new Headers;x(y,e=>{const n=st(e);v.set(n[t.O],n[t.G])});const[R,p]=En(l,Ie.Ae);let _;if(p){const[n,o]=En(R,t.t);p&&o&&(_=n);const[r,a]=En(R,t.G),[i,c]=En(R,t.T);a&&c&&(_=mn(e,r,i,s))}const b=(t,o)=>Tn(e,n,t)(a,r,o);try{const t=await fetch(i,{body:_,method:T,headers:v});if(!t.ok)throw q(`[${t.status}] ${i}`);if(!m)return;const e=()=>t.text(),n={[vn.JSON]:()=>t.json(),[vn.ue]:e,[vn.TEXT]:e};b(d,await(n?.[S]?.()))}catch(t){if(!g)return;b($,{message:"[ERROR] "+t?.message})}}}),pn=Sn({name:Ie.pe,He:[t.C],Fe(e,n,o,s){const[a]=En(o,t.C),i=s?.target?.[t.G],c=()=>zt(()=>{const o=((t,e)=>et(De(t),e))(n,a);if(!o)return c();void 0!==i&&s?.target&&(s.target[t.G]=i),o?.apply(e,((e,n)=>{event=void 0;const o={...de(e),...e.Bt()},s=e=>[r,[[t.L,e]]];return[{$:e,attr:{get:t=>e.jt(t)??o?.[t],set:e.ut},refs:t=>e.kt.apply(null,s(t)),ref:t=>e.xt.apply(null,s(t)),attrs:e.Bt(),localState:e.k,globalState:Ve(),event:n}]})(e,s))});c()}}),_n=Sn({name:Ie.ve,He:[t.O],Fe(e,n,o,s){const[a]=En(o,t.O),[i,c]=En(o,t.q),[l,h]=En(o,t.q+u+"parent"),[d,m]=En(o,t.j),[f,E]=En(o,t.G),[$,g]=En(o,t.T),[T]=En(o,t.t),S={html:()=>T,json:()=>p(T)},y=[r,t.L,i],v=Oe+u+a;let R=s;m&&(R=E&&g?fn(e,d,f,$,s)||f:S[d]?.()??f);let _=[e];if(c&&(_=G(e.kt.apply(null,y))),h){const t=e.It();_=[t],l!==r&&(_=G(t.kt.apply(null,y)))}x(_,t=>t.St(v,R))}}),bn=Sn({name:Ie.Te,He:[t.O],Fe(e,n,o,s){const[r]=En(o,t.O),[,a]=En(o,t.S),i=a?(c=r,He(c)?.at(1)):gn(r,e.Y);var c;const l=a?xe:(t,n)=>e.k.set(t,n);l(r,$n(e,o,i,s))}}),An=Sn({name:Ie.Se,He:[t.O],Fe(e,n,o,s){const[r]=En(o,t.O),a=gn(r,e.Z),i=$n(e,o,a,s)(ee(a,e.jt(r)));e.ut(r,""+i)}}),wn=Sn({name:Ie.ye,He:[t.I,t.g],Fe(e,n,o,s,r,a){const[i,c]=En(o,t.t);if(!c)return;const[l,u]=En(o,t.I),[h,d]=En(o,t.g),m=()=>Tn(e,n,i)(a,r,s);u?Xt(m,+l):d&&setInterval(m,+h)}}),On=Sn({name:Ie.Re,Fe(e,n,o,s){x(o,([n,o])=>Y(e.kt(r,[[t.L,o]]),t=>t?.[n]?.(s)))}}),Mn=t=>(e,n,o,s)=>{const r=!!o,a=t?e.gt:e.Tt,i=n===Oe;a(i?Oe+u+o:n,t=>{!i&&r&&o!==t[0]||zt(()=>e.St(we.ge,[n,o,s,t]))})},In=(t,e,n)=>x(t,([t,o])=>x(t,([t,s])=>n(e,t,s,o))),Ln=Be({name:we.ge,async je(t,e,n){In(t,n??e,Mn())},async Ge(t,e,n){In(t,n??e,Mn(1))}}),Nn=(e,n)=>(o,s,a,i)=>c=>{(n?o.gt:o.$t)(a,((e,n,o,s,a)=>i=>{const[,c]=n||[];if(c?.(),!(o>0))return e.St(we.$e,[r,s,a,i]);{const c=i?.target?.[t.G];n=Xt(()=>{void 0!==c&&i?.target&&(i.target[t.G]=c),e.St(we.$e,[r,s,a,i])},o)}})(e,void 0,s,a,i),c)},Cn=(e,n,o)=>x(e,([e,s])=>{const a=+he(e,t.l);x(e,([e,i])=>{e!==t.l&&Y(n.kt(r,t.L,i),o(n,a,e,s))})}),Dn=[Ln,Be({name:we.$e,async je(t,e,n){Cn(t,n??e,Nn(e))},async Ge(t,e,n){Cn(t,n??e,Nn(e,1))}})],Un=[Rn,pn,_n,An,bn,wn,On],Pn=te({name:$,async se(e){const n=e.wt();if(!n)return;const o=e.jt(t.O,n);for(const t of Un)await t();for(const[t]of Dn)await t(o,e)},async ee(t){if(!(t.Ot()instanceof ShadowRoot))return;const e=t.It();for(const[,t]of Dn)await t(e);t.st()}}),qn=te({name:"repeat-list",se(r){const a=r.ct();x(r.Pt(),t=>{r.ot(r.Lt(t),a),r.st(t)}),r.nt(),r.J();const i=r.It();if(!i)return;const c=r.jt(t.M),l=I(c);if(!l)return;const u=i?.k,h=i.Y,d=i.Z;x(G([[i,e],[u,s],[Ve(),s,1]]),([t,c,m])=>{t.subscribe(async(t,f)=>{if(!V(f)||t!==l)return ae(r,c,le(r),t,f,m,1);await(async()=>{for(const[,,t]of Dn)await t(i,r)})(),(t=>{const c=r.tt();r.J(),r.J(c),x(t,(e,s)=>{r.ot(r.Lt(a),c);const i=le(r);x(F(e),t=>ae(r,o,i,t,e,0));const l={index:s,length:t.length};x(F(l,"!"),t=>ae(r,n,i,t,l,0))});const l=le(r);x(G([[h,s],[d,e]]),([t,n])=>x(t,([t])=>{ae(r,n,l,t,{[e]:()=>i.jt(t),[s]:()=>u.get(t)}[n](),0)}))})(f),await(async()=>{for(const[,t]of Dn)await t(i,r)})()})})}}),Bn=te({name:"web-app",ee(e){e.ut(t.p,1)}}),jn=B(),Gn=B(),Hn=B(),Fn=B(),Vn=B(),xn=te({name:f,se(e){const n=[[E,Xe],["element-state",ze]],o=e.jt(t.O);for(const[t,s]of n){const n=oe(e,t);n&&s(o,n),se(e,t)}},te(r){var a;(a=r.jt(t.O),te({name:a,de(){const e=Ot(at)(f,t.O,a),n=Ot(e)("template");nt(jn,a,n),n&&Y(Mt(n.content)("style"),t=>nt(Gn,a,t)),x([[$,Hn],[g,Fn],[T,Vn]],([t,n])=>{nt(n,a,j(G(Mt(e)(t))))})},se(r){r.nt(),r.Jt(et(Gn,a)),r.K(et(jn,a)),x([Hn,Fn,Vn],t=>x(et(t,a),r.W));const i=r.xt(m,[[t.i]]),c=Q(r.Pt(),(e,n)=>{const o=r.jt(t.D,n);return o?(r.Et(r.xt(m,[[t.O,o]]),[n]),e):[...e,n]},[]);r.Et(i,c);const l=le(r),u=(t=>et(Qe,t)??j())(a),h=(t=>et(Ze,t)??j())(a);x(G([[G(u),e],[G(h),s],[Ge,s,1]]),([t,a,i])=>x(t,([t,c,u])=>{const h=()=>ee(c,u),d=()=>H(u,t),m={[e]:()=>r.jt(t)??h(),[s]:h,[o]:d,[n]:d};a===e&&ot(r.Z,[t,c,u]),i||a!==s||ot(r.Y,[t,c,u]),ae(r,a,l,t,m[a](),i)})),x(G([[r,e],[r.k,s,0],[Ve(),s,1]]),([t,e,n])=>t.subscribe((t,o,a)=>{const i=[t,o,a];e===s&&Z(i,n),r.St(Me[e],i),ae(r,e,l,t,o,n,1)}));const d=(t=>((t,e)=>n=>Tn(t,e,n))(t,t._t()))(r);x(rt(we),([,t])=>r.Tt(t,([t,e,n,o])=>d(n)(t,e,o)))},ee(t){t.St("mounted")},ne(t){t.St("unmounted")}})).call(this)},ee(t){t.st()}}),kn=[fe,Te,Se,qn,be,Ae,Pn],Yn=[ke,xn,Bn];(async()=>{for(const t of kn)await t();for(const t of Yn)t()})()}();//# sourceMappingURL=realm.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/attrs.ts","../src/constants/chars.ts","../src/constants/tags.ts","../src/constants/data.ts","../src/utils/json.ts","../src/utils/logger.ts","../src/constants/regx.ts","../src/libs/RealmState.class.ts","../src/utils/string.ts","../src/utils/object.ts","../src/utils/dom.ts","../src/constants/styles.ts","../src/utils/logic.ts","../src/utils/cssom.ts","../src/libs/RealmBase.class.ts","../src/utils/timer.ts","../src/libs/RealmElement.class.ts","../src/utils/element.ts","../src/elements/import-element.ts","../src/elements/import-resource.ts","../src/elements/visibility-element.ts","../src/constants/flow.ts","../src/constants/scripts.ts","../src/utils/script.ts","../src/utils/flow.ts","../src/elements/global-state.ts","../src/utils/action.ts","../src/actions/http-request.ts","../src/actions/script-flow.ts","../src/actions/send-event.ts","../src/actions/set-action.ts","../src/actions/set-timer.ts","../src/actions/trigger-element.ts","../src/flows/listen-event.ts","../src/flows/trigger-event.ts","../src/elements/element-flow.ts","../src/elements/repeat-list.ts","../src/elements/web-app.ts","../src/elements/core-element.ts","../src/elements/custom-element.ts","../src/index.ts"],"sourcesContent":["export const RealmAttributeNames = {\n ACTION: \"action\",\n AS: \"as\",\n ASYNC: \"async\",\n CHILDREN: \"children\",\n DEBOUNCE: \"debounce\",\n DEBUG: \"debug\",\n DEFER: \"defer\",\n ELEMENT: \"element\",\n EVERY: \"every\",\n FROM: \"from\",\n GLOBAL: \"global\",\n HREF: \"href\",\n INDEX: \"index\",\n IS_LOADED: \"loaded\",\n MOUNT: \"mount\",\n MUTATE: \"mutate\",\n NAME: \"name\",\n OF: \"of\",\n ONCE: \"once\",\n REF: \"ref\",\n REL: \"rel\",\n SCRIPT_ID: \"script-id\",\n SLOT: \"slot\",\n SRC: \"src\",\n STORAGE: \"storage\",\n TO: \"to\",\n TOGGLE: \"toggle\",\n TYPE: \"type\",\n VALUE: \"value\",\n METHOD: \"method\",\n HTTP_URL: \"url\",\n} as const;\n\nexport const RealmMutableAttr = {\n ATTR: \"attr\",\n META: \"meta\",\n SRC: \"src\",\n STATE: \"state\",\n} as const;\n\nexport type BindingAttrValue = [\n attrName: string,\n attrValue: string,\n isGlobal: boolean,\n debug: string\n];\n\nexport type ElementBinding = Array<\n [\n Element,\n Set<BindingAttrValue>,\n Set<BindingAttrValue>,\n Set<BindingAttrValue>,\n Set<BindingAttrValue>\n ]\n>;\n","export const EMPTY_STRING = \"\";\n\nexport const BIND_ATTR_PREFIX = \"_\";\n\nexport const STATE_PREFIX = \"#\";\n\nexport const ATTR_PREFIX = \"@\";\n\nexport const SOURCE_PREFIX = \"$\";\n\nexport const EVENT_PREFIX = \"RLM:\";\n\nexport const DATA_PREFIX = \"data-\";\n\nexport const VAR_PREFIX = \"var\";\n\nexport const COMMA_SEPARATOR = \",\";\n\nexport const DASH_SEPARATOR = \"-\";\n\nexport const PIPELINE_SEPARATOR = \"|\";\n\nexport const COLON = \":\";\n\nexport const SEMICOLON = \";\";\n\nexport const LEFT_PARENTHESES = \"(\";\n\nexport const RIGHT_PARENTHESES = \")\";\n\nexport const LEFT_BRACES = \"{\";\n\nexport const RIGHT_BRACES = \"}\";\n\nexport const DOT_NOTATION = \".\";\n\nexport const META_PREFIX = \"!\";\n\nexport const ALL = \"*\";\n\nexport const RealmLogicOp = {\n EQUALS_TO: \"eq\",\n NOT_EQUALS_TO: \"neq\",\n GREATER_THAN: \"gt\",\n GREATER_THAN_OR_EQUALS_TO: \"gte\",\n LESS_THAN: \"lt\",\n LESS_THAN_OR_EQUALS_TO: \"lte\",\n CONTAINS: \"contains\",\n} as const;\n","import { ALL } from \"./chars\";\n\nexport const RealmTagNames = {\n ALL: ALL,\n TEMPLATE: \"template\",\n EMBED: \"embed\",\n SLOT: \"slot\",\n WEB_APP: \"web-app\",\n GLOBAL_STATE: \"global-state\",\n DEFINE_ELEMENT: \"define-element\",\n CUSTOM_ELEMENT: \"custom-element\",\n ELEMENT_ATTR: \"element-attr\",\n ELEMENT_STATE: \"element-state\",\n ELEMENT_FLOW: \"element-flow\",\n REPEAT_LIST: \"repeat-list\",\n IS_VISIBLE: \"is-visible\",\n IS_HIDDEN: \"is-hidden\",\n IMPORT_ELEMENT: \"import-element\",\n IMPORT_SCRIPT: \"import-script\",\n IMPORT_STYLE: \"import-style\",\n SCRIPT: \"script\",\n LINK: \"link\",\n STYLE: \"style\",\n HEAD: \"head\",\n} as const;\n","export type MixedDataType = string | number | object | boolean | Array<unknown>;\n\nexport const RealmMimeTypes = {\n HTML: \"text/html\",\n JSON: \"application/json\",\n TEXT: \"text/plain\",\n} as const;\n","import { EMPTY_STRING } from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\n\nexport const JSONstringify = JSON.stringify;\n\nexport const JSONparse = JSON.parse;\n\nexport const JSONSafeStringify = (value: MixedDataType = EMPTY_STRING) =>\n typeof value === \"object\" ? JSONstringify(value) : `${value}`;\n\nexport const JSONSafeParse = (value: MixedDataType) =>\n JSONparse(JSONSafeStringify(value));\n","export const logger = (messsages: unknown[], type: string = \"log\") =>\n console[type](...messsages);\n","export const UPPERCASE_ALPHABET_REGEX = /([A-Z])+/g;\n\nexport const SPECIAL_CHARS_REGEX = /(?=[A-Z])|[.\\-\\s_]/;\n\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nexport const CSS_CUSTOM_SELECTOR_REGEX = isSafari\n ? /:host\\(\\[([#@][a-zA-Z0-9-_.]+?)\\](\\[(global)\\])?(\\[(eq|neq|gt|gte|lt|lte|contains)=\\\"(\\w+?)\\\"\\])?\\)/g\n : /:host\\(\\[\\\\([#@][a-zA-Z0-9-_.]+?)\\](\\[(global)\\])?(\\[(eq|neq|gt|gte|lt|lte|contains)=\"(\\w+?)\"\\])?\\)/g;\n\nexport const DOT_NOTATION_REGEX = /[$|#|@|!]([.]?(?:\\w+[.-])*\\w+)/gm;\n","import { MixedDataType } from \"../constants/data\";\nimport { JSONSafeStringify, JSONparse, JSONstringify } from \"../utils/json\";\nimport {\n addSet,\n createMap,\n createSet,\n forEach,\n forEachMap,\n getMap,\n setMap,\n} from \"../utils/object\";\n\nexport enum StateStorage {\n MEMORY = \"memory\",\n LOCAL = \"localStorage\",\n SESSION = \"sessionStorage\",\n}\n\ntype StateValue = Map<string, unknown>;\n\ntype StateObserver = (\n stateName: string,\n newValue: unknown,\n prevValue: unknown\n) => Promise<void> | void;\n\ntype StateFunction<T> = (prevValue: unknown) => T;\n\nexport class RealmState {\n #states: StateValue;\n #observers: Set<StateObserver>;\n\n constructor() {\n this.#states = createMap();\n this.#observers = createSet();\n }\n\n set<T>(\n stateName: string,\n value: StateFunction<T> | T,\n storage?: StateStorage\n ) {\n const prevValue = getMap(this.#states, stateName);\n const newValue =\n typeof value === \"function\"\n ? (value as StateFunction<T>)(prevValue)\n : value;\n if (storage !== StateStorage.MEMORY) {\n window?.[storage]?.setItem(\n stateName,\n JSONSafeStringify(newValue as MixedDataType)\n );\n }\n setMap(this.#states, stateName, newValue);\n forEach(this.#observers, (fn) =>\n fn?.apply?.(this, [stateName, newValue, prevValue])\n );\n }\n\n get<T>(name?: string, storage?: StateStorage) {\n if (storage !== StateStorage.MEMORY) {\n const value = window?.[storage]?.getItem(name);\n if (value !== undefined) return JSONparse(JSONstringify(value));\n }\n return getMap(this.#states, name) as T;\n }\n\n async subscribe(observer: StateObserver) {\n this.#observe(observer);\n addSet(this.#observers, observer);\n }\n\n #observe(observer?: StateObserver) {\n forEachMap(this.#states, (value, stateName) =>\n observer?.apply?.(this, [stateName, value])\n );\n }\n}\n","import { DASH_SEPARATOR, EMPTY_STRING } from \"../constants/chars\";\nimport {\n SPECIAL_CHARS_REGEX,\n UPPERCASE_ALPHABET_REGEX,\n} from \"../constants/regx\";\nimport { arrayJoin, arrayMap, arrayReduce } from \"./object\";\n\nexport const strTrim = (str: string): string => str.trim();\n\nexport const strSlice = (\n str: string,\n start: number = 1,\n end?: number\n): string => {\n if (str == null) return EMPTY_STRING;\n return str.slice(start, end);\n};\n\nexport const strSplit = (str: string, split: string | RegExp) =>\n str.split(split);\n\nexport const strToLower = (str: string) => str?.toLowerCase?.();\n\nexport const strReplace = (\n str: string,\n searchValue: string | RegExp,\n replaceValue: string\n) => str.replace(searchValue, replaceValue);\n\nexport const strStartWith = (str: string, searchValue: string) =>\n str.startsWith(searchValue);\n\nexport const strIncludes = (str: string, searchValue: string) =>\n str.includes(searchValue);\n\nexport const toUpperCase = (str: string) => str.toUpperCase();\n\n/**\n * Capitalize string\n * @param str - string\n * @returns {string}\n */\nexport const capitalize = (str: string): string => {\n if (!str) return EMPTY_STRING;\n const [first, ...rest] = strSplit(strToLower(str), EMPTY_STRING);\n return toUpperCase(first) + arrayJoin(rest, EMPTY_STRING);\n};\n\nconst splitChars = (str: string) =>\n strSplit(\n str?.replace(UPPERCASE_ALPHABET_REGEX, capitalize),\n SPECIAL_CHARS_REGEX\n );\n\n/**\n * Convert string to dash\n * @param str - string\n * @returns {string}\n */\nexport const dash = (str: string): string => {\n const parts = arrayMap(splitChars(str), strToLower) ?? [];\n const length = parts.length;\n if (length === 0) return EMPTY_STRING;\n if (length === 1) return parts.at(0);\n return arrayJoin(parts, DASH_SEPARATOR);\n};\n\nexport const newError = (errorMessage: string) => new Error(errorMessage);\n","import { DOT_NOTATION, SOURCE_PREFIX } from \"../constants/chars\";\nimport { DOT_NOTATION_REGEX } from \"../constants/regx\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport { JSONstringify } from \"./json\";\nimport { strSlice, strStartWith } from \"./string\";\n\n/**\n * Creates new Map\n * @template TKey\n * @template TValue\n * @returns {Map<TKey, TValue>}\n */\nexport const createMap = <TKey, TValue>(map = []) => new Map<TKey, TValue>(map);\n\n/**\n * Creates new Set\n * @template T\n * @returns {Set<T>}\n */\nexport const createSet = <T>(entries?: T[]) => new Set<T>(entries);\n\n/**\n * Creates array from source\n * @param from - source\n * @returns {T[]}\n */\nexport const createArray = <T>(from) => Array.from<T>(from);\n\n/**\n * Dot notation reduce from array\n * e.g `a.b.c` is equal to `a[b][c]`\n * @param acc\n * @param item\n * @param index\n * @returns\n */\ntype ObjectNotationAccumulator = Record<string, unknown> | Event | RealmState;\nconst getObject =\n (isState: boolean) =>\n (acc: ObjectNotationAccumulator, item: string, index: number) =>\n isState && index === 0 ? (<RealmState>acc).get(item) : acc[item];\n\n/**\n * Select object from string as dot notation\n * @param object\n * @param str\n * @returns {unknown}\n */\nexport type DataSource =\n | Record<string, unknown>\n | Event\n | RealmState\n | Attr[]\n | Object\n | ArrayLike<unknown>;\n\nexport const getValueFrom = (\n source: DataSource,\n dotNotation: string,\n prefix?: string\n) => {\n if (!dotNotation) return source;\n if (!DOT_NOTATION_REGEX.test(dotNotation)) return dotNotation;\n if (!!prefix && !strStartWith(dotNotation, prefix)) return dotNotation;\n\n const isState = source instanceof RealmState;\n return dotNotation.replace(DOT_NOTATION_REGEX, (_match, group) => {\n const target = arraySplit(strSlice(group), DOT_NOTATION);\n const replaceValue = arrayReduce(target, getObject(isState), source);\n return typeof replaceValue === \"object\"\n ? JSONstringify(replaceValue)\n : replaceValue;\n });\n};\n\n/**\n * Convert object to dot notation array of string support nested object\n * @param object\n * @returns {string[]}\n */\nexport const toDotNotation = (\n object: DataSource,\n prefix: string = SOURCE_PREFIX\n): string[] => {\n const entries = entriesOf(object);\n return arrayReduce(\n entries,\n (acc, [key, value]) => {\n if (typeof value === \"object\")\n return arrayReduce(\n toDotNotation(value as Record<string, unknown>),\n (acc, item) => [\n ...acc,\n `${prefix}${DOT_NOTATION}${key}${DOT_NOTATION}${item}`,\n ],\n acc\n );\n return [...acc, `${prefix}${DOT_NOTATION}${key}`];\n },\n []\n );\n};\n\n/**\n * Check if value is an array\n * @param array\n * @returns {boolean}\n */\nexport const isArray = (array) => Array.isArray(array);\n\n/**\n * Iterates over array or set\n * @param array\n * @param fn\n * @returns\n */\nexport const forEach = <T>(\n array: T[] | Set<T>,\n fn: (item: T, index: number) => void\n) =>\n void arrayReduce(createArray(array), (acc, item: T, index: number) => {\n fn?.(item, index);\n return acc;\n });\n\n/**\n * Iterates over map\n * @param array\n * @param fn\n * @returns\n */\nexport const forEachMap = <K, V>(\n map: Map<K, V>,\n fn: (value: V, key: K, map: Map<K, V>) => void\n) => map.forEach(fn);\n\n/**\n * Iterates over node element\n * @param array\n * @param fn\n * @returns\n */\nexport const forEachNode = <T extends Node>(\n nodes: NodeListOf<T>,\n fn: (value: T, index: number, array: NodeListOf<T>) => void\n) => nodes.forEach(fn);\n\nexport const arrayReduce = <T, R>(\n array: T[],\n fn: (acc: R, value: T, index?: number) => R,\n initialValue?: R\n) => array.reduce(fn, initialValue);\n\nexport const arrayPush = <T, R>(array: T[], value: T) => array.push(value);\n\nexport const arrayPop = <T>(array: T[]) => array.pop();\n\nexport const arrayMap = <T, R>(array: T[], fn: (value: T) => R) =>\n array.map(fn);\n\nexport const arrayJoin = <T>(array: T[], separator?: string) =>\n array.join(separator);\n\nexport const arraySplit = (str: string, separator?: string | RegExp) =>\n str.split(separator);\n\nexport const arraySplice = <T>(\n array: T[],\n start?: number,\n deleteCount?: number,\n ...items: T[]\n) => array.splice(start, deleteCount, ...items);\n\nexport const arrayIncludes = <T>(value: T, array: T[]) => array.includes(value);\n\nexport const trimArrayString = (array: string[]) =>\n array.map((item) => item.trim());\n\nexport const someArray = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.some(fn);\n\nexport const findArray = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.find(fn);\n\nexport const findIndex = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.findIndex(fn);\n\nexport const filterArray = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.filter(fn);\n\nexport const getMap = <K, V>(map: Map<K, V>, key: K) => map.get(key);\n\nexport const setMap = <K, V>(map: Map<K, V>, key: K, value: V) =>\n map.set(key, value);\n\nexport const addSet = <T>(set: Set<T>, value: T) => set.add(value);\n\nexport const fromEntries = <T>(\n entries: Array<unknown[]> | IterableIterator<[number, T]>\n): T => Object.fromEntries(entries);\n\nexport const entriesOf = <T>(object: T) => Object.entries(object);\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport {\n ATTR_PREFIX,\n DATA_PREFIX,\n DOT_NOTATION,\n EMPTY_STRING,\n EVENT_PREFIX,\n STATE_PREFIX,\n} from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmMimeTypes } from \"../constants/data\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport { JSONSafeStringify, JSONstringify } from \"./json\";\nimport { logger } from \"./logger\";\nimport { arrayReduce, createArray, forEach, isArray } from \"./object\";\nimport { strReplace, strToLower } from \"./string\";\n\nexport interface RealmBaseInterface {\n name: string;\n id: string;\n shadow: ShadowRoot;\n states: RealmState;\n}\n\ntype ShadowAcceptedElement = HTMLElement | Document | RealmBaseInterface;\n\ntype HTMLElementLike = DocumentFragment | Element | HTMLElement | Document;\n\nexport type WindowWithCustomType<T> = Window & typeof globalThis & T;\n\nexport const doc = document;\n\nexport const head = doc.head;\n\nexport const win = window;\n\n// Set html content of element\nexport const _html = (self: HTMLElement | ShadowRoot, html: string) =>\n (self.innerHTML = html);\n\n// Set html content of element\nexport const _clear =\n (self: HTMLElement) => (element?: HTMLElement | ShadowRoot) =>\n _html(element ?? self, EMPTY_STRING);\n\n// Set content of element\nexport const _content =\n (self: HTMLElement | Document) =>\n (content: MixedDataType, element?: Element) =>\n ((element ?? self).textContent =\n typeof content === \"object\" ? JSONstringify(content) : `${content}`);\n\n// Attach to shadow root\nexport const _attach = (self: ShadowAcceptedElement) => () => {\n const element = self as RealmBaseInterface;\n element.shadow = (self as HTMLElement).attachShadow({\n mode: \"closed\",\n slotAssignment: \"manual\",\n });\n return $shadow(element)();\n};\n\n// Append element to current or shadow root\nexport const _append =\n (self: HTMLElementLike) => (element: Node, appendTo?: HTMLElementLike) =>\n (appendTo ?? self).append(element);\n\n// Render element as template tag\nexport const _renderTemplate =\n (self: ShadowAcceptedElement) =>\n (node: HTMLTemplateElement | DocumentFragment) => {\n if (!node) return;\n\n const $$clone = $clone(self as HTMLElement);\n const element =\n node instanceof HTMLTemplateElement\n ? $$clone<HTMLTemplateElement>(node).content\n : node;\n _append(<HTMLElement>self)(element, $shadow(<RealmBaseInterface>self)());\n };\n\n// Remove element\nexport const _remove = (self: Element) => (element?: Element) =>\n (element ?? self).remove();\n\n// Replace element\nexport const _replace =\n (self: HTMLElement) =>\n (newElement?: HTMLElementLike, targetElement?: Element) =>\n (targetElement ?? self).replaceWith(newElement);\n\n// Create element tag\nexport const _createElement = <T>(tagName: string) =>\n doc.createElement(tagName) as T;\n\n// Create fragment element\nexport const _createFragment = () => doc.createDocumentFragment();\n\nexport const _removeAttr =\n (self: HTMLElement) => (attrName: string, element?: Element) =>\n (element ?? self).removeAttribute(attrName);\n\n// Set multiple element attributes\nexport const _attrs =\n (self: HTMLElement) =>\n (\n attributes: Array<[name: string, value?: MixedDataType]>,\n element?: Element\n ) => {\n const el = element ?? self;\n const setAttribute = el.setAttribute.bind(el);\n const removeAttribute = el.removeAttribute.bind(el);\n const setDOMAttribute = (name: string, value: string | boolean) =>\n name in el && (el[name] = value);\n\n forEach(\n attributes.filter((attr) => attr),\n ([name, value]) => {\n if (typeof value !== \"boolean\") {\n const finalValue = JSONSafeStringify(value);\n setAttribute(name, finalValue);\n setDOMAttribute(name, finalValue);\n return;\n }\n\n if (value) {\n setAttribute(name, EMPTY_STRING);\n } else {\n removeAttribute(name);\n }\n\n setDOMAttribute(name, value);\n }\n );\n };\n\n// Set Element attribute\nexport const _attr =\n (self: HTMLElement) =>\n (name: string, value: MixedDataType, element?: Element) =>\n _attrs(self)([[name, value]], element);\n\n// Set Element data\nexport const _data =\n (self: HTMLElement) => (name: string, value: string, element?: Element) =>\n _attr(self)(`${DATA_PREFIX}${name}`, value, element);\n\n// Set multiple element data\nexport const _datas =\n (self: HTMLElement) =>\n (attributes: Array<[name: string, value: string]>, element?: Element) =>\n _attrs(self)(attributes, element);\n\n// Assign slot\nexport const _slotTo = (\n slot: HTMLSlotElement,\n nodes?:\n | Array<Element | HTMLElement | HTMLSlotElement | Text>\n | NodeListOf<Element | HTMLElement | HTMLSlotElement | Text>\n) => slot && !!nodes && slot.assign(...nodes);\n\n// Add event listener\nexport const _addEvent =\n (self: HTMLElement | Document) =>\n (name: string, callback?: EventListener, element?: Element) =>\n (element ?? self).addEventListener(name, callback);\n\n// Remove event listener\nexport const _removeEvent =\n (self: HTMLElement | Document) =>\n (name: string, callback?: EventListener, element?: Element) =>\n (element ?? self).removeEventListener(name, callback);\n\n// Add custom event listener\nexport const _addCustomEvent =\n (self: HTMLElement | Document) =>\n <T>(name: string, callback?: (args: T) => void, element?: Element) =>\n _addEvent(self)(EVENT_PREFIX + name, (event: CustomEvent<T>) =>\n callback?.apply(element ?? self, [event.detail])\n );\n\n// Dispatch event\nexport const _sendEvent =\n (self: HTMLElement | Document) =>\n <T>(name: string, detail?: T, element?: Element) =>\n (element ?? self).dispatchEvent(\n new CustomEvent<T>(EVENT_PREFIX + name, {\n detail,\n })\n );\n\nexport const _debug =\n (self: HTMLElement) =>\n (slot: HTMLSlotElement, value: unknown, element?: HTMLElement) => {\n const debug = $attr(element ?? self)<string>(\n RealmAttributeNames.DEBUG,\n slot\n );\n if (debug) logger([debug, value]);\n };\n\n// Generate random ID\nexport const $randId = () =>\n parseInt(\n strReplace(Math.random().toString(), DOT_NOTATION, EMPTY_STRING)\n ).toString(0x10);\n\n// Get innerHTML\nexport const $html = (element?: Element) => element?.innerHTML;\n\n// Get name of element\nexport const $name = (self: RealmBaseInterface) => () => self.name;\n\n// Get element's id\nexport const $id = (self: RealmBaseInterface) => (element?: Element) =>\n (element ?? self).id;\n\n// Get element's tag name\nexport const $tagName = (self: HTMLElement) => (element?: Element) =>\n strToLower((element ?? self)?.tagName);\n\n// Clone node\nexport const $clone =\n (self: HTMLElement | Document | DocumentFragment) =>\n <T>(element?: Element | DocumentFragment) =>\n (element ?? self).cloneNode(true) as T;\n\n// Query selector string builder\nexport const $qsString = (selector: string, attrs?: Array<string[]>) => {\n if (!isArray(attrs)) return selector;\n return arrayReduce(\n attrs.filter((item) => isArray(item)),\n (acc, [attrName, attrValue]) => {\n const attrValueAssignment = `=\"${attrValue}\"`;\n if (attrName)\n acc += `[${attrName}${attrValue ? attrValueAssignment : EMPTY_STRING}]`;\n return acc;\n },\n selector\n );\n};\n\n// Query selector for element or it's shadow root\nexport const $qs =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrs?: Array<string[]>,\n element?: HTMLElementLike\n ) =>\n (element ?? self)?.querySelector<T>($qsString(selector, attrs));\n\n// Query selector all for element or it's shadow root\nexport const $qsAll =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrs?: Array<string[]>,\n element?: HTMLElementLike\n ) =>\n (element ?? self)?.querySelectorAll<T>($qsString(selector, attrs));\n\n// Get children of element\nexport const $children =\n (self: HTMLElement | Document) =>\n (element?: Element | DocumentFragment): Element[] =>\n createArray<HTMLElement>((element ?? self).children);\n\n// Get node list, it's like a children but return nodes\nexport const $nodes =\n (self: HTMLElement | Document) =>\n (element?: Element | DocumentFragment): Element[] =>\n createArray<HTMLElement>((element ?? self).childNodes);\n\nexport const $attrName = (attr: Attr) => attr.name;\n\nexport const $attrValue = (attr: Attr) => attr.value;\n\nexport const $attrs = (self: HTMLElement) => (element?: Element) =>\n createArray<Attr>((element || self)?.attributes ?? []);\n\nexport const $attrsKv = (self: HTMLElement) => (element?: Element) =>\n arrayReduce<Attr, Record<string, unknown>>(\n $attrs(self)(element),\n (acc, attr) => {\n acc[$attrName(attr)] = $attrValue(attr);\n return acc;\n },\n {}\n );\n\n// Get element's attribute\nexport const $attr =\n (self: HTMLElement) =>\n <T>(name: string, element?: Element) =>\n (element || self)?.getAttribute?.(name) as T;\n\n// Check if element has attribute\nexport const $hasAttr =\n (self: HTMLElement) => (name: string, element?: Element) =>\n (element || self).hasAttribute(name);\n\n// Get element's data\nexport const $data = (self: HTMLElement) => (name: string, element?: Element) =>\n $attr(self)(`${DATA_PREFIX}${name}`, element);\n\n// Get query selector for current element\nexport const $el =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qs(self)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>)\n );\n\n// Get query selector all for current element\nexport const $els =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qsAll(self)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>)\n );\n\n// Get query selector for current element's shadow root\nexport const $shadowEl =\n (self: ShadowAcceptedElement) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qs(self as HTMLElement)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>),\n $shadow(<RealmBaseInterface>self)()\n );\n\n// Get query selector all for current element's shadow root\nexport const $shadowEls =\n (self: ShadowAcceptedElement) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qsAll(self as HTMLElement)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>),\n $shadow(<RealmBaseInterface>self)()\n );\n\n// Get attribute slot's name\nexport const $slotAttrName = (name: string) => `${ATTR_PREFIX}${name}`;\n\n// Get state slot's name\nexport const $slotStateName = (name: string) => `${STATE_PREFIX}${name}`;\n\n// Get parent's element\nexport const $parent =\n (self: HTMLElement) =>\n <T extends HTMLElement>(element?: Element) =>\n (element ?? self).parentElement as T;\n\n// Get parent's node\nexport const $parentNode = (self: HTMLElement) => (element?: Element) =>\n (element ?? self).parentNode;\n\nexport const $shadow = (self: RealmBaseInterface) => () => self.shadow;\n\nexport const $root = (self: HTMLElementLike) => () =>\n <ShadowRoot>self.getRootNode();\n\nexport const $host =\n (self: HTMLElementLike) =>\n <T>() =>\n $root(self)().host as T;\n\nexport const DOMFrom = (string: string) => {\n const domParser = new DOMParser();\n return domParser.parseFromString(string, RealmMimeTypes.HTML);\n};\n","export const HOST_SELECTOR = \":host\";\n\nexport const RealmCSSVarConst = {\n OPERATOR: \"op\",\n COMPARATOR: \"comp\",\n VALUE: \"value\",\n STYLE: \"style\",\n GLOBAL: \"global\",\n} as const;\n","import { RealmLogicOp } from \"../constants/chars\";\nimport { strIncludes } from \"./string\";\n\nexport const isTruthy = (\n operator: string,\n comparator: string,\n value: string\n) => {\n const eq = operator === RealmLogicOp.EQUALS_TO ? comparator : null;\n const neq = operator === RealmLogicOp.NOT_EQUALS_TO ? comparator : null;\n const gt = operator === RealmLogicOp.GREATER_THAN ? comparator : null;\n const gte =\n operator === RealmLogicOp.GREATER_THAN_OR_EQUALS_TO ? comparator : null;\n const lt = operator === RealmLogicOp.LESS_THAN ? comparator : null;\n const lte =\n operator === RealmLogicOp.LESS_THAN_OR_EQUALS_TO ? comparator : null;\n const contains = operator === RealmLogicOp.CONTAINS ? comparator : null;\n\n const isStringOrBoolLike = [\"true\", \"false\"].includes(value) || isNaN(+value);\n if (isStringOrBoolLike) {\n return (\n (!!eq && value === eq) ||\n (!!neq && value !== neq) ||\n (!!contains && strIncludes(value, contains))\n );\n }\n\n return (\n (!!eq && +value === +eq) ||\n (!!neq && +value !== +neq) ||\n (!!gt && +value > +gt) ||\n (!!gte && +value >= +gte) ||\n (!!lt && +value < +lt) ||\n (!!lte && +value <= +lte)\n );\n};\n","import { RealmMutableAttr } from \"../constants/attrs\";\nimport {\n COLON as ATTR_SEPARATOR,\n DASH_SEPARATOR,\n EMPTY_STRING,\n LEFT_BRACES,\n LEFT_PARENTHESES,\n PIPELINE_SEPARATOR,\n RIGHT_BRACES,\n RIGHT_PARENTHESES,\n SEMICOLON,\n STATE_PREFIX,\n VAR_PREFIX,\n} from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { CSS_CUSTOM_SELECTOR_REGEX } from \"../constants/regx\";\nimport { HOST_SELECTOR, RealmCSSVarConst } from \"../constants/styles\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { $html, $shadow, RealmBaseInterface, _remove } from \"./dom\";\nimport { isTruthy } from \"./logic\";\nimport {\n arrayJoin,\n arrayMap,\n arrayPush,\n arrayReduce,\n arraySplit,\n createArray,\n forEach,\n someArray,\n} from \"./object\";\nimport { dash, strReplace, strSlice, strStartWith, strTrim } from \"./string\";\n\nexport type CSSRules = Array<[string, [property: string, value: string][]]>;\n\nconst getStyle = (rule: CSSStyleRule) => rule?.style;\n\nconst selectorText = (rule: CSSStyleRule, value?: string) => {\n if (!value) return rule?.selectorText;\n rule.selectorText = value;\n};\n\nconst CSSText = (style: CSSStyleDeclaration, value?: string) => {\n if (!value) return style.cssText;\n style.cssText = value;\n};\n\nconst setStyleProperty = (\n style: CSSStyleDeclaration,\n propName: string,\n propValue: string\n) => style.setProperty(propName, propValue);\n\nconst getStyleProperty = (style: CSSStyleDeclaration, propName: string) =>\n style.getPropertyValue(propName);\n\nconst forEachCSSRules = (\n sheets: CSSStyleSheet[],\n callback: (rule: CSSStyleRule) => void\n) =>\n forEach(sheets, (sheet) => forEach(Object.values(sheet.cssRules), callback));\n\nexport const $adoptedStyleSheets = (self: RealmBaseInterface) =>\n $shadow(self)().adoptedStyleSheets;\n\nexport const _attachStyle = (self: RealmBaseInterface) => () => {\n const sheet = new CSSStyleSheet();\n arrayPush($adoptedStyleSheets(self), sheet);\n return sheet;\n};\n\nexport const _CSSvar = (\n name: string,\n rule?: CSSStyleRule,\n value?: string | number,\n overwrite: boolean = true\n) => {\n const varName = `${DASH_SEPARATOR}${DASH_SEPARATOR}${CSS.escape(dash(name))}`;\n const style = getStyle(rule);\n if (!style) return varName;\n\n const getProperty = () => getStyleProperty(style, varName);\n if (value === undefined) return getProperty();\n\n const setProperty = () => setStyleProperty(style, varName, `${value}`);\n if (!overwrite && !getProperty()) {\n setProperty();\n return;\n }\n\n setProperty();\n};\n\nexport const $CSSvar = (name: string) =>\n `${VAR_PREFIX}${LEFT_PARENTHESES}${DASH_SEPARATOR}${DASH_SEPARATOR}${name}${RIGHT_PARENTHESES}`;\n\nexport const _renderStyle =\n (self: RealmBaseInterface) => (styleElement: HTMLStyleElement) => {\n if (!styleElement) return;\n\n const cssRules = $html(styleElement);\n const sheet = _attachStyle(self)();\n arrayPush($adoptedStyleSheets(self), sheet);\n sheet.replaceSync(cssRules);\n\n forEachCSSRules([sheet], (rule) => {\n const selector = selectorText(rule);\n const matches = createArray<string>(\n selector?.matchAll(CSS_CUSTOM_SELECTOR_REGEX) ?? []\n );\n if (!matches.length) return;\n\n const currentRule = getStyle(rule);\n\n // @note: get css property and value as entries\n const cssPropValue = arrayReduce(\n arraySplit(CSSText(currentRule), SEMICOLON),\n (acc, style) =>\n !style\n ? acc\n : [...acc, arrayMap(arraySplit(style, ATTR_SEPARATOR), strTrim)],\n []\n );\n\n // @note: replace selector :host(\\(@|#)name) with :host only\n selectorText(\n rule,\n strReplace(selector, CSS_CUSTOM_SELECTOR_REGEX, HOST_SELECTOR)\n );\n\n // @note: add --style css var to rule\n _CSSvar(\n RealmCSSVarConst.STYLE,\n rule,\n arrayJoin(\n arrayMap(cssPropValue, (item) => arrayJoin(item, ATTR_SEPARATOR)),\n PIPELINE_SEPARATOR\n )\n );\n\n for (const match of matches) {\n const [, mutator, _hasCondition, operatorOrGlobal, ...operators] =\n match;\n const mutatorType = strStartWith(mutator, STATE_PREFIX)\n ? RealmMutableAttr.STATE\n : RealmMutableAttr.ATTR;\n const mutatorName = strSlice(mutator);\n _CSSvar(mutatorType, rule, mutatorName);\n\n const isGlobal = operatorOrGlobal === RealmCSSVarConst.GLOBAL;\n const cssVarPrefix = mutatorName + DASH_SEPARATOR;\n if (isGlobal) _CSSvar(cssVarPrefix + RealmCSSVarConst.GLOBAL, rule, 1);\n\n const [hasOperator, operator, value] = operators ?? [];\n if (!hasOperator) return;\n _CSSvar(cssVarPrefix + RealmCSSVarConst.OPERATOR, rule, operator);\n _CSSvar(cssVarPrefix + RealmCSSVarConst.COMPARATOR, rule, value);\n }\n });\n\n _remove(styleElement)();\n };\n\nexport const _addCSS = (sheet: CSSStyleSheet, cssRules: CSSRules) =>\n sheet.insertRule(\n arrayReduce(\n cssRules,\n (acc, [selector, rules]) => {\n acc +=\n selector +\n LEFT_BRACES +\n arrayJoin(\n arrayReduce(\n rules,\n (acc, [property, value]) => [\n ...acc,\n arrayJoin([property, value], ATTR_SEPARATOR),\n ],\n []\n ),\n SEMICOLON\n ) +\n RIGHT_BRACES;\n return acc;\n },\n EMPTY_STRING\n )\n );\n\nexport const _setCSSProperty =\n (self: RealmBaseInterface) =>\n (selector: string, name: string, value: string | null) =>\n forEachCSSRules($adoptedStyleSheets(self), (rule: CSSStyleRule) => {\n if (selectorText(rule) !== selector) return;\n const style = rule.style;\n if (getStyleProperty(style, name) !== value)\n setStyleProperty(style, name, value);\n });\n\nconst updateRuleProperty =\n (rule: CSSStyleRule) =>\n ([property, value]: Array<string>): void =>\n setStyleProperty(getStyle(rule), property, value);\n\nconst removeRuleProperty =\n (rule: CSSStyleRule) =>\n ([property]: Array<string>) =>\n getStyle(rule).removeProperty(property);\n\nexport const bindCSS = (\n element: RealmElement,\n name: string,\n value: MixedDataType,\n dataType: string,\n isGlobalUpdate: boolean = false\n): void => {\n const sheet = $adoptedStyleSheets(element);\n const strValue = `${value}`;\n\n forEachCSSRules(sheet, (rule) => {\n // @note: convert all states or attributes to css vars\n const defaultCSSVarPrefix =\n (isGlobalUpdate ? RealmCSSVarConst.GLOBAL : dataType) + DASH_SEPARATOR;\n _CSSvar(defaultCSSVarPrefix + name, rule, strValue, false);\n\n // @note: matching css selector\n const state = _CSSvar(RealmMutableAttr.STATE, rule);\n const attr = _CSSvar(RealmMutableAttr.ATTR, rule);\n if (!state && !attr) return;\n if ((state && state !== name) || (attr && attr !== name)) return;\n\n const cssVarPrefix = name + DASH_SEPARATOR;\n _CSSvar(cssVarPrefix + RealmCSSVarConst.VALUE, rule, strValue);\n\n const operator = _CSSvar(cssVarPrefix + RealmCSSVarConst.OPERATOR, rule);\n const styles = _CSSvar(RealmCSSVarConst.STYLE, rule);\n const cssText = arrayMap(arraySplit(styles, PIPELINE_SEPARATOR), (style) =>\n arraySplit(style, ATTR_SEPARATOR)\n );\n const hasOperator = !!operator;\n\n const comparator = _CSSvar(\n cssVarPrefix + RealmCSSVarConst.COMPARATOR,\n rule\n );\n\n const isTrue = isTruthy(operator, comparator, strValue);\n const isUpdateStyle = hasOperator ? isTrue : true;\n\n if (!isUpdateStyle) {\n if (!someArray(cssText, ([property]) => !!getStyle(rule)[property]))\n return;\n return forEach(cssText, removeRuleProperty(rule));\n }\n\n forEach(cssText, updateRuleProperty(rule));\n });\n};\n","import * as DOMUtils from \"../utils/dom\";\nimport * as CSSOMUtils from \"../utils/cssom\";\nimport { RealmState } from \"./RealmState.class\";\nimport { ElementAttributeEntries } from \"../utils/element\";\nimport { MixedDataType } from \"../constants/data\";\n\nexport class RealmBase\n extends HTMLElement\n implements DOMUtils.RealmBaseInterface\n{\n // Element's name / tag's name\n name: string;\n\n // Element's random id\n id: string;\n\n // innerHTML cacche\n #html: string;\n\n // Shadow root assigned to element\n shadow: ShadowRoot;\n\n // Element's state\n states: RealmState;\n\n // Default element's states and attributes\n statesRegistry: Set<ElementAttributeEntries>;\n attrsRegistry: Set<ElementAttributeEntries>;\n\n // Clear HTML content\n _clear = DOMUtils._clear(this);\n\n // Set innerHTML\n _html = (html: MixedDataType, element?: HTMLElement) => {\n const setCurrentHtml = () => (this.#html = `${html}`);\n element ? DOMUtils._html(element, `${html}`) : setCurrentHtml();\n };\n\n //#region manipulate DOM utility functions\n _renderTemplate = DOMUtils._renderTemplate(this);\n _renderShadow = (flowElement: RealmBase) =>\n flowElement &&\n DOMUtils._append(this)(DOMUtils.$clone(this)(flowElement), this.$shadow());\n _content = DOMUtils._content(this);\n _attach = DOMUtils._attach(this);\n _append = DOMUtils._append(this);\n _remove = DOMUtils._remove(this);\n _replace = DOMUtils._replace(this);\n _createElement = DOMUtils._createElement;\n _createFragment = DOMUtils._createFragment;\n _attrs = DOMUtils._attrs(this);\n _attr = DOMUtils._attr(this);\n _removeAttr = DOMUtils._removeAttr(this);\n _data = DOMUtils._data(this);\n _datas = DOMUtils._datas(this);\n _slotTo = DOMUtils._slotTo;\n _addEvent = DOMUtils._addEvent(this);\n _removeEvent = DOMUtils._removeEvent(this);\n _addCustomEvent = DOMUtils._addCustomEvent(this);\n _sendEvent = DOMUtils._sendEvent(this);\n _debug = DOMUtils._debug(this);\n //#endregion\n\n //#region get DOM infos utility functions\n $html = (element?: Element) => DOMUtils.$html(element ?? this);\n $randId = DOMUtils.$randId;\n $name = DOMUtils.$name(this);\n $id = DOMUtils.$id(this);\n $tagName = DOMUtils.$tagName(this);\n $parent = DOMUtils.$parent(this);\n $parentNode = DOMUtils.$parentNode(this);\n $shadow = DOMUtils.$shadow(this);\n $root = DOMUtils.$root(this);\n $host = <T>(element?: Element) => DOMUtils.$host(element ?? this)<T>();\n $clone = DOMUtils.$clone(this);\n $qsString = DOMUtils.$qsString;\n $qs = DOMUtils.$qs(this);\n $qsAll = DOMUtils.$qsAll(this);\n $children = DOMUtils.$children(this);\n $nodes = DOMUtils.$nodes(this);\n $attrs = DOMUtils.$attrs(this);\n $attrsKv = DOMUtils.$attrsKv(this);\n $attr = DOMUtils.$attr(this);\n $hasAttr = DOMUtils.$hasAttr(this);\n $data = DOMUtils.$data(this);\n $el = DOMUtils.$el(this);\n $els = DOMUtils.$els(this);\n $shadowEl = DOMUtils.$shadowEl(this);\n $shadowEls = DOMUtils.$shadowEls(this);\n $slotAttrName = DOMUtils.$slotAttrName;\n $slotStateName = DOMUtils.$slotStateName;\n //#endregion\n\n //#region CSSOM utility functions\n _attachStyle = CSSOMUtils._attachStyle(this);\n _renderStyle = CSSOMUtils._renderStyle(this);\n _addCSS = CSSOMUtils._addCSS;\n _setCSSProperty = CSSOMUtils._setCSSProperty(this);\n _CSSvar = CSSOMUtils._CSSvar;\n $CSSvar = CSSOMUtils.$CSSvar;\n //#endregion\n}\n","export type TimerReturn = [number, () => void];\n\nexport const timerOnce = (\n handler: TimerHandler,\n timeout: number\n): TimerReturn => {\n let timer = setTimeout(handler, timeout);\n return [timer, () => clearTimeout(timer)];\n};\n\nexport const timerEvery = (\n handler: TimerHandler,\n timeout: number\n): TimerReturn => {\n let interval = setInterval(handler, timeout);\n return [interval, () => clearInterval(interval)];\n};\n\nexport const reqAnim = (handler: FrameRequestCallback): TimerReturn => {\n let req = requestAnimationFrame(handler);\n return [req, () => cancelAnimationFrame(req)];\n};\n","import { RealmBase } from \"./RealmBase.class\";\nimport { RealmState } from \"./RealmState.class\";\nimport {\n ElementAttributeEntries,\n subscribeAttrMutation,\n} from \"../utils/element\";\nimport { arrayPush, createSet, forEach } from \"../utils/object\";\nimport { reqAnim } from \"../utils/timer\";\n\ntype RealmElementAttrMutationCallback = (\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n) => void;\n\ninterface ReamlElementParams {\n name: string;\n onBeforeInit?: (element: HTMLElement) => void;\n onInit?: (element: HTMLElement) => void;\n onMounted?: (element: HTMLElement) => void;\n onUnmounted?: (element: HTMLElement) => void;\n onAttributeChanged?: (\n element: HTMLElement,\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n ) => void;\n}\n\nexport class RealmElement extends RealmBase {\n onInit?: ReamlElementParams[\"onInit\"];\n onMounted?: ReamlElementParams[\"onMounted\"];\n onUnmounted?: ReamlElementParams[\"onUnmounted\"];\n onAttributeChanged?: ReamlElementParams[\"onAttributeChanged\"];\n states: RealmState = new RealmState();\n statesRegistry = createSet<ElementAttributeEntries>();\n attrsRegistry = createSet<ElementAttributeEntries>();\n #attrObserver: Array<RealmElementAttrMutationCallback> = [];\n\n constructor({\n name,\n onInit,\n onBeforeInit,\n onMounted,\n onUnmounted,\n onAttributeChanged,\n }: ReamlElementParams) {\n super();\n\n this.name = name;\n this.id = this.$randId();\n this.onMounted = onMounted;\n this.onUnmounted = onUnmounted;\n this.onAttributeChanged = onAttributeChanged;\n\n onBeforeInit?.(this);\n this._html(this.$html());\n onInit?.(this);\n reqAnim(() => this.onMounted?.(this));\n }\n\n subscribe(callback: RealmElementAttrMutationCallback) {\n arrayPush(this.#attrObserver, callback);\n }\n\n async connectedCallback() {\n const [observeAttr] = subscribeAttrMutation(\n this,\n (attrName, attrValue, prevAttrValue) => {\n forEach(this.#attrObserver, (callback) =>\n callback?.(attrName, attrValue, prevAttrValue)\n );\n this.onAttributeChanged?.(this, attrName, attrValue, prevAttrValue);\n }\n );\n observeAttr();\n }\n\n disconnectedCallback() {\n this.onUnmounted?.(this);\n }\n}\n","import {\n BindingAttrValue,\n ElementBinding,\n RealmAttributeNames,\n RealmMutableAttr,\n} from \"../constants/attrs\";\nimport {\n ATTR_PREFIX,\n COLON as ATTR_SEPARATOR,\n BIND_ATTR_PREFIX,\n DASH_SEPARATOR,\n DATA_PREFIX,\n META_PREFIX,\n SOURCE_PREFIX,\n STATE_PREFIX,\n} from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { bindCSS } from \"./cssom\";\nimport { $attrName, $attrValue, doc } from \"./dom\";\nimport { JSONSafeParse } from \"./json\";\nimport {\n DataSource,\n addSet,\n arrayMap,\n arrayReduce,\n createArray,\n createMap,\n createSet,\n filterArray,\n findArray,\n forEach,\n forEachNode,\n fromEntries,\n getMap,\n getValueFrom,\n setMap,\n} from \"./object\";\nimport {\n newError,\n strIncludes,\n strSlice,\n strSplit,\n strStartWith,\n} from \"./string\";\n\ninterface DefineElementOption extends ElementDefinitionOptions {\n name: string;\n onBeforeRegister?: (elementName: string) => Promise<void> | void;\n onRegistered?: (elementName: string) => Promise<void> | void;\n onConnected?: (element: RealmElement) => Promise<void> | void;\n onBeforeInit?: (element: RealmElement) => Promise<void> | void;\n onInit?: (element: RealmElement) => Promise<void> | void;\n onMounted?: (element: RealmElement) => Promise<void> | void;\n onUnmounted?: (element: RealmElement) => Promise<void> | void;\n onAttributeChanged?: (\n element: RealmElement,\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n ) => Promise<void> | void;\n}\n\nexport enum ElementDataTypes {\n STRING = \"string\",\n NUMBER = \"number\",\n BOOLEAN = \"boolean\",\n ARRAY = \"array\",\n OBJECT = \"object\",\n HTML = \"html\",\n JSON_STRING = \"json\",\n}\n\nexport type ElementAttributeEntries = [\n name: string,\n type: ElementDataTypes,\n value: MixedDataType,\n options?: Record<string, unknown>\n];\n\ntype ElementRuntimeEventArgs = {\n $: RealmElement;\n $$?: HTMLElement;\n event?: Event;\n attrs?: Object;\n};\n\n/**\n * Register element to customElements\n * @param elementName\n * @param ...params DefineElementOption\n */\nexport const defineElement =\n ({\n name,\n extends: extendsTagName,\n onBeforeRegister,\n onRegistered,\n onConnected,\n ...params\n }: DefineElementOption) =>\n (): Promise<boolean> =>\n new Promise((resolve) => {\n const isNameValid = strIncludes(name, DASH_SEPARATOR);\n const isDefined = customElements.get(name);\n if (!isNameValid || isDefined)\n throw newError(\n `Element \\`${name}\\` has invalid name or already defined`\n );\n\n customElements.whenDefined(name).then(async () => {\n onRegistered?.(name);\n resolve(true);\n });\n\n onBeforeRegister?.(name);\n\n class CustomElement extends RealmElement {\n constructor() {\n super({ name, ...params });\n }\n\n async connectedCallback() {\n super.connectedCallback();\n onConnected?.(this);\n }\n }\n\n customElements.define(name, CustomElement, { extends: extendsTagName });\n });\n\n/**\n * Parse attribute value to specific type based on attribute type definition\n * @param type\n * @param value\n * @returns {string | number | object | boolean}\n */\nexport const parseValue = (type: ElementDataTypes, value: MixedDataType) => {\n const transformValue = (defaultValue: MixedDataType) =>\n typeof value !== \"string\" ? value : JSONSafeParse(value || defaultValue);\n const valueLookup: Record<string, () => MixedDataType> = {\n [ElementDataTypes.NUMBER]: () => +value,\n [ElementDataTypes.BOOLEAN]: () => transformValue(value),\n [ElementDataTypes.ARRAY]: () => transformValue(\"[]\"),\n [ElementDataTypes.OBJECT]: () => transformValue(\"{}\"),\n };\n return valueLookup?.[type]?.() ?? value;\n};\n\n/**\n * Get custom element attributes as an array\n * @param element\n */\nconst getElementEntries = (\n element: RealmElement,\n tagName: string = RealmTagNames.ELEMENT_ATTR\n) => createArray<Element>(element.$els(tagName));\n\n/**\n * Get custom element attributes entries as definitions\n * @param element\n */\nexport const getCustomElementAttrs = (\n element: RealmElement,\n tagName?: string\n): Set<ElementAttributeEntries> =>\n createSet(\n arrayReduce(\n getElementEntries(element, tagName),\n (acc, item) => {\n const name = element.$attr<string>(RealmAttributeNames.NAME, item);\n const type = element.$attr<ElementDataTypes>(\n RealmAttributeNames.TYPE,\n item\n );\n const value = parseValue(type, element.$html(item));\n const attrs: ElementAttributeEntries = [name, type, value];\n return [...acc, attrs];\n },\n []\n )\n );\n\n/**\n * Remove custom element attributes, it is called when element is initialized\n * @param element\n */\nexport const removeCustomElementAttrs = (\n element: RealmElement,\n tagName?: string\n) => forEach(getElementEntries(element, tagName), (el) => element._remove(el));\n\nconst getValueType = (\n slotName: string,\n registry: Set<ElementAttributeEntries>\n) =>\n findArray(\n createArray<ElementAttributeEntries>(registry),\n ([name]) => name === slotName\n )?.at(1) as ElementDataTypes;\n\n/**\n * Create slot element inside shadow root\n * @param element\n * @param name\n * @param value\n * @returns {HTMLSlotElement|void}\n */\nconst bindSlot = (\n element: RealmElement,\n dataType: string,\n slotName: string,\n slotValue: MixedDataType | DataSource,\n hasGlobalAttr?: boolean\n) => {\n const getSlotName = () => slotName;\n const getSlotValue = () => slotValue;\n\n const getSlotValueFromObject = () => getValueFrom(slotValue, slotName);\n\n const attrNameLookup: Record<string, () => string> = {\n [RealmMutableAttr.STATE]: () => element.$slotStateName(slotName),\n [RealmMutableAttr.ATTR]: () => element.$slotAttrName(slotName),\n [RealmMutableAttr.SRC]: getSlotName,\n [RealmMutableAttr.META]: getSlotName,\n };\n const slotAttrName = attrNameLookup[dataType]?.();\n\n const attrValueLookup: Record<string, () => MixedDataType> = {\n [RealmMutableAttr.STATE]: getSlotValue,\n [RealmMutableAttr.ATTR]: getSlotValue,\n [RealmMutableAttr.SRC]: getSlotValueFromObject,\n [RealmMutableAttr.META]: getSlotValueFromObject,\n };\n const slotAttrValue = attrValueLookup[dataType]?.();\n\n const attrTypeLookup: Record<string, ElementDataTypes> = {\n [RealmMutableAttr.STATE]: getValueType(slotName, element.statesRegistry),\n [RealmMutableAttr.ATTR]: getValueType(slotName, element.attrsRegistry),\n };\n const slotAttrType = attrTypeLookup[dataType];\n\n forEachNode(\n element.$shadowEls<HTMLSlotElement>(RealmAttributeNames.SLOT, [\n [RealmAttributeNames.NAME, slotAttrName],\n hasGlobalAttr && [RealmAttributeNames.GLOBAL],\n ]),\n (shadowSlot) => {\n if (!shadowSlot) return;\n if (\n !hasGlobalAttr &&\n element.$hasAttr(RealmAttributeNames.GLOBAL, shadowSlot)\n )\n return;\n\n const slot = element._createElement<HTMLSlotElement>(RealmTagNames.SLOT);\n const slotId = element.$slotStateName(element.$randId());\n\n const slotAttrMap = createMap<HTMLSlotElement, string>();\n setMap(slotAttrMap, shadowSlot, RealmAttributeNames.NAME);\n setMap(slotAttrMap, slot, RealmAttributeNames.SLOT);\n forEach([shadowSlot, slot], (slotElement) => {\n element._data(dataType, slotAttrName, slotElement);\n element._attrs(\n [\n [getMap(slotAttrMap, slotElement), slotId],\n hasGlobalAttr && [RealmAttributeNames.GLOBAL],\n ],\n slotElement\n );\n });\n\n if (slotAttrType === ElementDataTypes.HTML) {\n element._html(slotAttrValue, slot);\n } else {\n element._content(slotAttrValue, slot);\n }\n element._append(slot);\n element._slotTo(shadowSlot, [slot]);\n element._debug(shadowSlot, slotAttrValue);\n }\n );\n};\n\n/**\n * Update `slot[slot]` value\n * @param element\n * @param slotName\n * @param slotValue\n * @returns\n */\nconst updateSlot = (\n element: RealmElement,\n dataType: string,\n slotName: string,\n slotValue: MixedDataType,\n isGlobalUpdate?: boolean\n) => {\n const attrNameLookup: Record<string, string> = {\n [RealmMutableAttr.STATE]: element.$slotStateName(slotName),\n [RealmMutableAttr.ATTR]: element.$slotAttrName(slotName),\n [RealmMutableAttr.SRC]: slotName,\n };\n const slotAttrName = attrNameLookup[dataType];\n\n const attrTypeLookup: Record<string, ElementDataTypes> = {\n [RealmMutableAttr.STATE]: getValueType(slotName, element.statesRegistry),\n [RealmMutableAttr.ATTR]: getValueType(slotName, element.attrsRegistry),\n };\n const slotAttrType = attrTypeLookup[dataType];\n\n const selector = !isGlobalUpdate\n ? `[${DATA_PREFIX}${dataType}=\"${slotAttrName}\"]:not([${RealmAttributeNames.GLOBAL}])`\n : RealmTagNames.SLOT;\n\n const attrs = !isGlobalUpdate\n ? []\n : [\n [RealmAttributeNames.GLOBAL],\n [`${DATA_PREFIX}${dataType}`, slotAttrName],\n ];\n\n const nodes = createArray<HTMLSlotElement>([\n ...element.$qsAll<HTMLSlotElement>(selector, attrs),\n ...element.$qsAll<HTMLSlotElement>(\n selector,\n attrs,\n isGlobalUpdate ? doc : undefined\n ),\n ]);\n\n forEach(nodes, (slot) => {\n if (!slot) return;\n if (slotAttrType === ElementDataTypes.HTML) {\n element._html(slotValue, slot);\n } else {\n element._content(slotValue, slot);\n }\n element._debug(\n element.$shadowEl<HTMLSlotElement>(selector, [\n ...attrs,\n [\n RealmAttributeNames.NAME,\n element.$attr(RealmAttributeNames.SLOT, slot),\n ],\n [RealmAttributeNames.DEBUG],\n ]),\n slotValue\n );\n });\n};\n\n/**\n * Bind attributes with dynamic value\n * @param element {RealmElement}\n * @param bindings {Set<[attrName: string, attrValue: string, isGlobal: boolean]>}\n * @param name {string}\n * @param value {string}\n * @returns {void}\n */\nconst bindAttr = (\n element: RealmElement,\n dataType: string,\n dataBinding: Set<BindingAttrValue>,\n node: Element,\n name: string,\n value: MixedDataType,\n isGlobalUpdate?: boolean\n): void => {\n const getValue = () => value;\n const getSlotValueFromObject = () => getValueFrom(value, name);\n const attrValueLookup: Record<string, () => MixedDataType> = {\n [RealmMutableAttr.STATE]: getValue,\n [RealmMutableAttr.ATTR]: getValue,\n [RealmMutableAttr.SRC]: getSlotValueFromObject,\n [RealmMutableAttr.META]: getSlotValueFromObject,\n };\n const attrValue = attrValueLookup[dataType]();\n const nodeHasGlobalAttr = element.$hasAttr(RealmAttributeNames.GLOBAL, node);\n forEach(dataBinding, ([attrName, attrSrc, isGlobalFlag]) => {\n const shouldUpdateGlobalState = isGlobalUpdate\n ? isGlobalFlag\n : !(isGlobalFlag && !nodeHasGlobalAttr);\n const shouldUpdate = shouldUpdateGlobalState && name === attrSrc;\n if (shouldUpdate) element._attr(attrName, attrValue, node);\n });\n};\n\n/**\n * Update element's value that binded to attr / state / global state,\n * Slot element will be updated too\n */\nconst attrMutableLookup = (\n statesBinding: Set<BindingAttrValue> = createSet(),\n attrsBinding: Set<BindingAttrValue> = createSet(),\n srcDataBinding: Set<BindingAttrValue> = createSet(),\n metasBinding: Set<BindingAttrValue> = createSet()\n) => ({\n [RealmMutableAttr.STATE]: statesBinding,\n [RealmMutableAttr.ATTR]: attrsBinding,\n [RealmMutableAttr.SRC]: srcDataBinding,\n [RealmMutableAttr.META]: metasBinding,\n});\n\nexport const bindElement = (\n element: RealmElement,\n dataType: string,\n dataBinding: ElementBinding,\n name: string,\n value: MixedDataType | DataSource,\n isGlobalUpdate?: boolean,\n isUpdate?: boolean\n) => {\n bindCSS(element, name, value, dataType, isGlobalUpdate);\n forEach(dataBinding, ([node, ...bindings]) =>\n bindAttr(\n element,\n dataType,\n attrMutableLookup?.(...bindings)[dataType],\n node,\n name,\n value,\n isGlobalUpdate\n )\n );\n\n if (isUpdate)\n return updateSlot(element, dataType, name, value, isGlobalUpdate);\n\n if (!isGlobalUpdate && dataType === RealmMutableAttr.STATE)\n element.states.set(name, value);\n\n return bindSlot(element, dataType, name, value, isGlobalUpdate);\n};\n\n/**\n * Bind attributes with dynamic value\n * @param element {RealmElement}\n * @param attrName {string}\n */\nexport const addAttrBinding = (element: RealmElement, attrName: string) => {\n const globalAttrName = `${attrName}${ATTR_SEPARATOR}${RealmAttributeNames.GLOBAL}`;\n const isGlobal = element.$hasAttr(globalAttrName);\n const attrSelector = isGlobal ? globalAttrName : attrName;\n element._attr(BIND_ATTR_PREFIX + attrSelector, element.$attr(attrSelector));\n};\n\n/**\n * Element's mutation observer\n */\nconst mutationObserver = (\n target: Element,\n options?: MutationObserverInit & { callback: MutationCallback }\n): [() => void, () => void] => {\n const observer = new MutationObserver(options?.callback);\n return [() => observer.observe(target, options), () => observer.disconnect()];\n};\n\nconst addToBindList = (\n shouldAdded: boolean,\n bindAttrValues: Set<BindingAttrValue>,\n attrName: string,\n attrValue: string,\n isGlobal: boolean\n) => shouldAdded && addSet(bindAttrValues, [attrName, attrValue, isGlobal]);\n\n/**\n * Get element's attribute bindings list by element data\n * @param element\n * @returns ElementBinding\n */\nexport const getElementAttrBindings = (element: RealmElement) =>\n arrayReduce<Element, ElementBinding>(\n createArray<Element>(element.$shadowEls(RealmTagNames.ALL)),\n (acc, node) => {\n const stateBindList = createSet<BindingAttrValue>();\n const attrBindList = createSet<BindingAttrValue>();\n const srcBindList = createSet<BindingAttrValue>();\n const metaBindList = createSet<BindingAttrValue>();\n\n const [statesBinding, attrsBinding, srcDataBinding, metasBinding] =\n arrayReduce<Attr, Array<Set<BindingAttrValue>>>(\n element.$attrs(node),\n (acc, attr) => {\n const hasBindAttr = strStartWith($attrName(attr), BIND_ATTR_PREFIX);\n const hasAttr = element.$hasAttr($attrName(attr), node);\n if (hasAttr && !hasBindAttr) return acc;\n\n const [attrName, global] = strSplit(\n $attrName(attr),\n ATTR_SEPARATOR\n );\n const isGlobal = global === RealmAttributeNames.GLOBAL;\n\n const attrValue = $attrValue(attr);\n const slicedAttrName = strSlice(attrName);\n const slicedAttrValue = strSlice(attrValue);\n\n const isState = strStartWith(attrValue, STATE_PREFIX);\n addToBindList(\n isState,\n stateBindList,\n slicedAttrName,\n slicedAttrValue,\n isGlobal\n );\n\n const isAttr = strStartWith(attrValue, ATTR_PREFIX);\n addToBindList(\n isAttr,\n attrBindList,\n slicedAttrName,\n slicedAttrValue,\n false\n );\n\n const isSource = strStartWith(attrValue, SOURCE_PREFIX);\n addToBindList(\n isSource,\n srcBindList,\n slicedAttrName,\n attrValue,\n false\n );\n\n const isMeta = strStartWith(attrValue, META_PREFIX);\n addToBindList(\n isMeta,\n metaBindList,\n slicedAttrName,\n attrValue,\n false\n );\n\n if (isSource || isMeta) element._removeAttr(attr.name, node);\n return [stateBindList, attrBindList, srcBindList, metaBindList];\n },\n []\n );\n\n return [\n ...acc,\n [node, statesBinding, attrsBinding, srcDataBinding, metasBinding],\n ];\n },\n []\n );\n\n/**\n * Subscribe element's attr mutation\n */\nexport const subscribeAttrMutation = (\n element: RealmElement,\n observer: (\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n ) => void\n) =>\n mutationObserver(element, {\n attributes: true,\n attributeOldValue: true,\n callback: (mutationList) => {\n for (const mutation of mutationList) {\n if (mutation.type !== \"attributes\") return;\n const attrName = mutation.attributeName;\n // @ts-expect-error\n const attrValue = element.$attr(attrName, mutation.target);\n const prevAttrValue = mutation.oldValue;\n if (prevAttrValue !== attrValue) {\n observer?.(attrName, attrValue, prevAttrValue);\n }\n }\n },\n });\n\n/**\n * Find element flow's actions by event name\n * @param actionArgs\n * @param comparator\n * @param isMultipleResult\n * @returns\n */\nexport const findAttrFrom = <T>(\n actionArgs: Array<T[]>,\n comparator: T,\n isMultipleResult?: boolean\n) =>\n isMultipleResult\n ? arrayMap(\n filterArray(actionArgs, ([argName]) => argName === comparator),\n ([, argValue]) => argValue\n )\n : findArray(actionArgs, ([argName]) => argName === comparator)?.at(1);\n\n/**\n * Get default value from element's attribute registry\n * @param element {RealmElement}\n * @returns Record<string, unknown>\n */\n\nexport const getDefaultAttrValues = (element: RealmElement) =>\n fromEntries<Record<string, unknown>>(\n arrayMap(createArray(element.attrsRegistry), ([attrName, , attrValue]) => [\n attrName,\n attrValue,\n ])\n );\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { DOT_NOTATION } from \"../constants/chars\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { DOMFrom, doc } from \"../utils/dom\";\nimport { defineElement } from \"../utils/element\";\nimport { createMap, entriesOf, getMap, setMap } from \"../utils/object\";\nimport { newError } from \"../utils/string\";\n\nconst IMPORT_ELEMENT_REQUEST_CACHE = createMap<string, string>();\n\nexport const importElement = defineElement({\n name: RealmTagNames.IMPORT_ELEMENT,\n\n async onBeforeInit(element) {\n const { from, automount, as: tagAlias, ...attrs } = element.$attrsKv();\n const [, cachedHtml] =\n getMap<string, string>(IMPORT_ELEMENT_REQUEST_CACHE, <string>from) ?? [];\n\n if (!cachedHtml) {\n try {\n const response = await fetch(<string>from);\n const html = await response.text();\n setMap(IMPORT_ELEMENT_REQUEST_CACHE, from, html);\n } catch {\n newError(`Failed to fetch \"${from}\"`);\n }\n }\n\n const customElement = element.$qs(\n RealmTagNames.CUSTOM_ELEMENT,\n [],\n DOMFrom(getMap(IMPORT_ELEMENT_REQUEST_CACHE, from))\n );\n if (!customElement) return element._remove();\n\n const nameAttr = element.$attr<string>(\n RealmAttributeNames.NAME,\n customElement\n );\n let customElementName = <string>tagAlias ?? nameAttr;\n const hasDefined = !!customElements.get(customElementName);\n if (hasDefined) {\n customElementName = customElementName + DOT_NOTATION + element.$randId();\n }\n element._attr(RealmAttributeNames.NAME, customElementName, customElement);\n\n if (automount !== undefined) {\n const mountElement =\n element._createElement<HTMLElement>(customElementName);\n element._attrs(entriesOf(attrs), mountElement);\n element._append(customElement, doc.body);\n element._replace(mountElement, element);\n } else {\n element._append(customElement, doc.body);\n element._remove();\n }\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { head } from \"../utils/dom\";\nimport { defineElement } from \"../utils/element\";\nimport { createMap, entriesOf, getMap, setMap } from \"../utils/object\";\n\nconst SCRIPT_RESOURCE_REGISTRY = createMap<string, boolean>();\n\nconst STYLES_RESOURCE_REGISTRY = createMap<string, boolean>();\n\nconst appendResource = <T extends Element>(\n element: RealmElement,\n tagName: string,\n attrs: [name: string, value?: MixedDataType][],\n appendTo: HTMLElement | ShadowRoot\n) => {\n const createdElement = element._createElement<T>(tagName);\n element._attrs(attrs, createdElement);\n element._append(createdElement, appendTo);\n};\n\nexport const importScriptElement = defineElement({\n name: RealmTagNames.IMPORT_SCRIPT,\n\n onMounted(element) {\n const parentNode = element.$parentNode();\n const isValidParentNode = parentNode instanceof ShadowRoot;\n if (!isValidParentNode) return;\n\n const { from, local, ...attrs } = element.$attrsKv();\n const hasAdded = getMap(SCRIPT_RESOURCE_REGISTRY, from);\n const hasLocal = local !== undefined;\n if (!hasAdded && !hasLocal) {\n appendResource<HTMLScriptElement>(\n element,\n RealmTagNames.SCRIPT,\n [[RealmAttributeNames.SRC, <string>from], ...entriesOf(attrs)],\n head\n );\n setMap(SCRIPT_RESOURCE_REGISTRY, from, true);\n }\n element._remove();\n },\n});\n\nexport const importStyleElement = defineElement({\n name: RealmTagNames.IMPORT_STYLE,\n\n onMounted(element) {\n const parentNode = element.$parentNode();\n const isValidParentNode = parentNode instanceof ShadowRoot;\n if (!isValidParentNode) return;\n\n const { from, local, ...attrs } = element.$attrsKv();\n const hasAdded = getMap(STYLES_RESOURCE_REGISTRY, from);\n const hasLocalAttr = local !== undefined;\n const resourceArgs = [\n element,\n RealmTagNames.LINK,\n [\n [RealmAttributeNames.HREF, from],\n [RealmAttributeNames.REL, \"stylesheet\"],\n ...entriesOf(attrs),\n ],\n ];\n if (!hasAdded) {\n appendResource.apply(null, [...resourceArgs, head]);\n setMap(STYLES_RESOURCE_REGISTRY, from, true);\n }\n\n if (hasLocalAttr) {\n appendResource.apply(null, [\n ...resourceArgs,\n element.$host<RealmElement>().$shadow(),\n ]);\n }\n element._remove();\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { DASH_SEPARATOR, RealmLogicOp, VAR_PREFIX } from \"../constants/chars\";\nimport { HOST_SELECTOR } from \"../constants/styles\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { CSSRules, _CSSvar } from \"../utils/cssom\";\nimport { $randId } from \"../utils/dom\";\nimport { addAttrBinding, defineElement } from \"../utils/element\";\nimport { isTruthy } from \"../utils/logic\";\nimport { arrayReduce } from \"../utils/object\";\n\ntype VisibilitySwitch = [on: string | null, off: string | null];\n\nconst getOperatorComparator = (element: RealmElement) =>\n arrayReduce<string, string[]>(\n [\n RealmLogicOp.EQUALS_TO,\n RealmLogicOp.NOT_EQUALS_TO,\n RealmLogicOp.GREATER_THAN,\n RealmLogicOp.GREATER_THAN_OR_EQUALS_TO,\n RealmLogicOp.LESS_THAN,\n RealmLogicOp.LESS_THAN_OR_EQUALS_TO,\n RealmLogicOp.CONTAINS,\n ],\n (acc, operator) => {\n if (!element.$hasAttr(operator)) return acc;\n return [operator, element.$attr(operator)];\n },\n []\n );\n\nconst isVisibleTruthy = (element: RealmElement, value: string | boolean) => {\n const [operator, comparator] = getOperatorComparator(element);\n return isTruthy(operator, comparator, `${value}`);\n};\n\nconst updateIsVisibleCSSProperty = (\n element: RealmElement,\n attrValue: string,\n cssVarName: string,\n isVisiblePropName,\n isHiddenPropName\n) => {\n const hasAttrValue = element.$hasAttr(RealmAttributeNames.VALUE);\n const isVisible = isVisibleTruthy(\n element,\n attrValue || (hasAttrValue && attrValue === \"\")\n );\n element._setCSSProperty(\n HOST_SELECTOR,\n element._CSSvar(cssVarName),\n isVisible ? isVisiblePropName : isHiddenPropName\n );\n};\n\nconst createVisibilityElement = (\n elementName: string,\n [visible, hidden]: VisibilitySwitch\n) => {\n const displayVarName = VAR_PREFIX + DASH_SEPARATOR + $randId();\n\n return defineElement({\n name: elementName,\n\n onBeforeInit(element) {\n const [operator] = getOperatorComparator(element);\n addAttrBinding(element, RealmAttributeNames.VALUE);\n addAttrBinding(element, operator);\n\n const slot = element._createElement<HTMLSlotElement>(RealmTagNames.SLOT);\n const cssRules = <CSSRules>[\n [\n HOST_SELECTOR,\n [\n [_CSSvar(displayVarName), hidden],\n [\"display\", element.$CSSvar(displayVarName)],\n ],\n ],\n ];\n element._attach();\n element._append(slot, element.$shadow());\n element._addCSS(element._attachStyle(), cssRules);\n element._slotTo(slot, element.$nodes());\n },\n\n onInit(element) {\n updateIsVisibleCSSProperty(\n element,\n element.$attr<string>(RealmAttributeNames.VALUE),\n displayVarName,\n hidden,\n visible\n );\n },\n\n onAttributeChanged(element, attrName, attrValue: string) {\n if (attrName !== RealmAttributeNames.VALUE) return;\n updateIsVisibleCSSProperty(\n element,\n attrValue,\n displayVarName,\n hidden,\n visible\n );\n },\n });\n};\n\nconst VISIBLE_VALUE = \"contents\";\nconst HIDDEN_VALUE = \"none\";\n\nexport const isVisibleElement = createVisibilityElement(\n RealmTagNames.IS_VISIBLE,\n [HIDDEN_VALUE, VISIBLE_VALUE]\n);\n\nexport const isHiddenElement = createVisibilityElement(\n RealmTagNames.IS_HIDDEN,\n [VISIBLE_VALUE, HIDDEN_VALUE]\n);\n","import { RealmMutableAttr } from \"./attrs\";\n\nexport const FlowEventNames = {\n TRIGGER_EVENT: \"trigger-event\",\n LISTEN_EVENT: \"listen-event\",\n} as const;\n\nexport const FlowRuntimeEventTypes = {\n MOUNTED: \"mounted\",\n UNMOUNTED: \"unmounted\",\n ATTR_CHANGED: \"attrchanged\",\n STATE_CHANGED: \"statechanged\",\n ON: \"on\",\n} as const;\n\nexport const FlowRuntimeMutableEventTypesLookup = {\n [RealmMutableAttr.ATTR]: FlowRuntimeEventTypes.ATTR_CHANGED,\n [RealmMutableAttr.STATE]: FlowRuntimeEventTypes.STATE_CHANGED,\n};\n\nexport const FlowActionTypes = {\n SET_STATE: \"set-state\",\n SET_ATTR: \"set-attr\",\n SET_TIMER: \"set-timer\",\n SEND_EVENT: \"send-event\",\n TRIGGER_ELEMENT: \"trigger-element\",\n SCRIPT: \"script\",\n HTTP_REQUEST: \"http-request\",\n REQUEST_HEADER: \"request-header\",\n REQUEST_BODY: \"request-body\",\n RESPONSE_SUCCESS: \"response-ok\",\n RESPONSE_ERROR: \"response-fail\",\n} as const;\n\nexport const FlowMutateTypes = {\n EQUALS_TO: \"=\",\n ADD: \"+\",\n SUBTRACT: \"-\",\n MULTIPLY: \"*\",\n DIVIDE: \"/\",\n ADD_STR: \"add\",\n ASSIGN: \"assign\",\n PUSH: \"push\",\n POP: \"pop\",\n REMOVE: \"remove\",\n} as const;\n\nexport enum FlowDataSource {\n EVENT = \"event\",\n EVENT_ATTR = \"event:attr\",\n LOCAL_STATE = \"localState\",\n GLOBAL_STATE = \"globalState\",\n ATTR = \"attr\",\n}\n\nexport const ALL_USE_FN = `${FlowDataSource.LOCAL_STATE},${FlowDataSource.GLOBAL_STATE},${FlowDataSource.EVENT},attrs, ${FlowDataSource.ATTR},$`;\n","export const RealmScriptTypes = {\n REALM_MODULE: \"module/realm\",\n JS: \"application/javascript\",\n MODULE: \"module\",\n} as const;\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmScriptTypes } from \"../constants/scripts\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { _append, _attrs, _createElement, _remove, head } from \"./dom\";\nimport { arrayJoin } from \"./object\";\n\nconst createScriptBlob = (script: string) =>\n new Blob([script], { type: RealmScriptTypes.JS });\n\nconst createScriptURL = (\n elementName: string,\n scriptId: string,\n script: string,\n params: string[]\n) => {\n const fnParams = params.length ? `{ ${arrayJoin(params, \", \")} }` : \"\";\n const scriptWrapper = `async (${fnParams})=>{\\n${script}\\n}`;\n const scriptContent = `__REALM_ADD_CUSTOM_FLOW('${elementName}', '${scriptId}', ${scriptWrapper})`;\n return URL.createObjectURL(createScriptBlob(scriptContent));\n};\n\nexport const attatchScriptFlow = (\n elementName: string,\n scriptId: string,\n script: string,\n params: string[],\n onScriptLoad?: (elementName: string) => void\n) => {\n const scriptURL = createScriptURL(elementName, scriptId, script, params);\n const scriptElement = _createElement<HTMLElement>(RealmTagNames.SCRIPT);\n scriptElement.onload = () => {\n onScriptLoad?.(elementName);\n URL.revokeObjectURL(scriptURL);\n _remove(head)(scriptElement);\n };\n _attrs(scriptElement)([\n [RealmAttributeNames.SRC, scriptURL],\n [RealmAttributeNames.TYPE, RealmScriptTypes.MODULE],\n [RealmAttributeNames.ASYNC],\n [RealmAttributeNames.SCRIPT_ID, scriptId],\n ]);\n _append(head)(scriptElement);\n};\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { ALL, COMMA_SEPARATOR, SOURCE_PREFIX } from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport {\n ALL_USE_FN,\n FlowActionTypes,\n FlowMutateTypes,\n} from \"../constants/flow\";\nimport { $attrName, $attrValue, $randId, WindowWithCustomType } from \"./dom\";\nimport { ElementDataTypes } from \"./element\";\nimport {\n arrayIncludes,\n arrayPop,\n arrayPush,\n arrayReduce,\n arraySplice,\n arraySplit,\n createArray,\n createMap,\n createSet,\n findIndex,\n fromEntries,\n getMap,\n isArray,\n setMap,\n trimArrayString,\n} from \"./object\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmScriptTypes } from \"../constants/scripts\";\nimport { attatchScriptFlow } from \"./script\";\nimport { RealmState } from \"../libs/RealmState.class\";\n\ntype ScriptParams = {\n $: RealmElement;\n ref: (refName: string) => Element;\n refs: (refName: string) => Element[];\n localState: RealmState;\n globalState: RealmState;\n event: Event;\n attrs: Record<string, unknown>;\n attr: {\n get: (attrName: string) => unknown;\n set: (attrName: string, attrValue: string) => void;\n };\n};\n\nexport type ScriptFlow = (params: ScriptParams) => void;\n\ntype AddScriptFlowType = {\n __REALM_ADD_CUSTOM_FLOW: typeof addScriptFlow;\n};\n\nexport type ActionArg = Array<string>;\n\nexport type ActionAttr = [attrName: string, attrValue: string];\n\nexport type FlowAction = [actionName: string, actionArgs: ActionArg[]];\n\nexport type FlowEvent = [attrs: Array<ActionAttr>, action: FlowAction[]];\n\nconst CUSTOM_SCRIPT_FLOW_REGISTRY = createMap<\n string,\n Map<string, ScriptFlow>\n>();\n\nconst FLOW_REGISTRY = createMap<string, Map<string, Set<FlowEvent>>>();\n\nexport type FlowRegistry = typeof FLOW_REGISTRY;\n\nexport type CallFlow = (\n flow: Set<FlowEvent>,\n hostElement: RealmElement,\n dispatcherElement?: RealmElement\n) => Promise<void>;\n\nexport interface DefineFlowOption {\n name: string;\n onBeforeRegister?: (eventFlowOwnerName: string) => void;\n onRegistered?: (eventFlowOwnerName: string, flows: Set<FlowEvent>) => void;\n onApply?: CallFlow;\n onRemove?: CallFlow;\n}\n\nexport type ActionElementReducerCallback = (\n eventFlowOwnerName: string,\n eventOwnerElement: RealmElement,\n acc: FlowEvent[],\n actionElement: Element\n) => FlowEvent[];\n\nexport type EventAttrReducerCallback = (\n acc: FlowEvent[],\n eventElement: Attr\n) => FlowEvent[];\n\nexport type RegisterFlowCallback = (\n eventFlowOwnerName: string,\n eventOwnerElement: RealmElement\n) => void;\n\nexport type ApplyFlowCallback = (\n eventOwnerElement: RealmElement,\n dispatcherElement?: RealmElement\n) => Promise<void>;\n\nexport type DefineFlowReturn = [\n registerFlow: RegisterFlowCallback,\n applyFlow: ApplyFlowCallback,\n removeFlow: ApplyFlowCallback\n];\n\nconst getScriptFlowRegistry = (elementName: string) =>\n getMap(CUSTOM_SCRIPT_FLOW_REGISTRY, elementName);\n\nconst addScriptFlow = (elementName: string, scriptId: string, fn: ScriptFlow) =>\n setMap(getScriptFlowRegistry(elementName), scriptId, fn);\n\n(window as WindowWithCustomType<AddScriptFlowType>).__REALM_ADD_CUSTOM_FLOW =\n addScriptFlow;\n\nexport const registerScriptFlow = (eventFlowOwnerName: string) =>\n setMap(\n CUSTOM_SCRIPT_FLOW_REGISTRY,\n eventFlowOwnerName,\n createMap<string, () => void>()\n );\n\nexport const getScriptFlow = (elementName: string, scriptId: string) =>\n getMap(getScriptFlowRegistry(elementName), scriptId);\n\nexport const getFlowRegistry = (name: string) =>\n getMap(FLOW_REGISTRY, name) ?? createMap();\n\nexport const registerFlow = (\n name: string,\n elementName: string,\n flow: Set<FlowEvent>\n) => {\n const flowMap = getFlowRegistry(name) ?? createMap<string, Set<FlowEvent>>();\n setMap(flowMap, elementName, flow);\n setMap(FLOW_REGISTRY, name, flowMap);\n};\n\nexport const getFlow = (name: string, elementName: string) =>\n getMap(getFlowRegistry(name), elementName);\n\n/**\n * Assign value to element state / attribute\n * @param param0\n * @returns\n */\nexport const mutatesValue = ([\n mutateType,\n attrType,\n attrValue,\n attrIndex,\n toggleArray,\n]: [\n mutateType: string,\n attrType: ElementDataTypes,\n attrValue: MixedDataType,\n attrIndex: number,\n toggleArray?: boolean\n]) => {\n const isAllowedMutation = arrayIncludes(attrType, [\n ElementDataTypes.NUMBER,\n ElementDataTypes.ARRAY,\n ]);\n\n return (prevValue: MixedDataType) => {\n if (!isAllowedMutation) return attrValue;\n\n const mutateLookup: Record<string, () => MixedDataType | void> = {\n [FlowMutateTypes.EQUALS_TO]: () =>\n isArray(attrValue) ? attrValue : +attrValue,\n [FlowMutateTypes.ADD]: () => +prevValue + +attrValue,\n [FlowMutateTypes.SUBTRACT]: () => +prevValue - +attrValue,\n [FlowMutateTypes.MULTIPLY]: () => +prevValue * +attrValue,\n [FlowMutateTypes.DIVIDE]: () => +prevValue / +attrValue,\n [FlowMutateTypes.ASSIGN]: () => {\n const array = [...(prevValue as MixedDataType[])];\n const prevValueIndex = array[+attrIndex];\n if (prevValueIndex !== undefined)\n array[+attrIndex] =\n typeof prevValueIndex === \"object\"\n ? {\n ...prevValueIndex,\n ...attrValue?.[0],\n }\n : attrValue;\n return array;\n },\n [FlowMutateTypes.PUSH]: () =>\n arrayReduce(\n attrValue as Array<unknown>,\n (acc, value) => {\n const prevIndex = findIndex(acc, (val) => val === value);\n if (toggleArray && prevIndex > -1) {\n arraySplice(acc, prevIndex, 1);\n return acc;\n }\n\n const newId = `${SOURCE_PREFIX}${SOURCE_PREFIX}${$randId()}`;\n return [\n ...acc,\n typeof value === \"object\"\n ? {\n [newId]: Symbol(newId),\n ...value,\n }\n : value,\n ];\n },\n [...(prevValue as Array<unknown>)]\n ),\n [FlowMutateTypes.POP]: () => {\n const array = [...(prevValue as MixedDataType[])];\n arrayPop(array);\n return array;\n },\n [FlowMutateTypes.REMOVE]: () => {\n const array = [...(prevValue as MixedDataType[])];\n arraySplice(array, +attrIndex, 1);\n return array;\n },\n };\n return mutateLookup?.[mutateType]?.();\n };\n};\n\n/**\n * Default event reducer callback\n * @param eventFlowOwnerName\n * @param eventOwnerElement\n * @param acc\n * @param attr\n */\nexport const actionFlowReducer = (\n eventFlowOwnerName: string,\n eventOwnerElement: RealmElement,\n acc: FlowEvent[],\n actionElement: Element\n): Array<FlowAction | FlowEvent> | string => {\n const actionName = eventOwnerElement.$tagName(actionElement);\n const actionAttrs = eventOwnerElement.$attrs(actionElement);\n const actionContent = eventOwnerElement.$html(actionElement);\n const actionArgs = arrayReduce<Attr, ActionArg[]>(\n actionAttrs,\n eventFlowReducer,\n []\n );\n\n // Exceptional for `set-state` type `html`\n // Push html to `actionArgs`\n if (actionName === FlowActionTypes.SET_STATE) {\n arrayPush(actionArgs, [RealmAttributeNames.VALUE, actionContent]);\n }\n\n // Exceptional for `script` tag\n // Push script id in the `actionArgs`\n if (actionName === RealmTagNames.SCRIPT) {\n const { type, use = \"\" } = fromEntries<{\n type: string;\n use: string;\n }>(actionArgs);\n const isValidScriptType = type === RealmScriptTypes.REALM_MODULE;\n\n if (isValidScriptType) {\n const scriptId = `${actionName}-${eventOwnerElement.$id()}-${eventOwnerElement.$randId()}`;\n const dependencies = trimArrayString(\n arraySplit(use === ALL ? ALL_USE_FN : use, COMMA_SEPARATOR)\n );\n arrayPush(actionArgs, [RealmAttributeNames.SCRIPT_ID, scriptId]);\n attatchScriptFlow(\n eventFlowOwnerName,\n scriptId,\n actionContent,\n dependencies\n );\n }\n }\n\n // Exceptional for `set-timer`, `http-request`, `response-success`, `response-error` tag\n // Push child nodes in the `actionArg`\n if (\n (<string[]>[\n FlowActionTypes.SET_TIMER,\n FlowActionTypes.HTTP_REQUEST,\n FlowActionTypes.RESPONSE_SUCCESS,\n FlowActionTypes.RESPONSE_ERROR,\n ]).includes(actionName)\n ) {\n const actionReducer = createActionReducer(\n eventFlowOwnerName,\n eventOwnerElement\n );\n arrayPush(actionArgs, [\n RealmAttributeNames.ACTION,\n arrayReduce(\n eventOwnerElement.$children(actionElement),\n actionReducer(),\n []\n ),\n ]);\n }\n\n // Exceptional for `send-event`, `request-body` tag\n // Push HTML in the `actionArg`\n if (\n (<string[]>[\n FlowActionTypes.SEND_EVENT,\n FlowActionTypes.REQUEST_BODY,\n ]).includes(actionName)\n ) {\n arrayPush(actionArgs, [\n RealmAttributeNames.ACTION,\n eventOwnerElement.$html(actionElement),\n ]);\n }\n\n const actionFlow: FlowAction = [actionName, actionArgs];\n return [...acc, actionFlow];\n};\n\nconst createActionReducer =\n (eventFlowOwnerName: string, eventOwnerElement: RealmElement) =>\n () =>\n (acc: Array<FlowEvent>, actionElement: Element) =>\n actionFlowReducer(\n eventFlowOwnerName,\n eventOwnerElement,\n acc,\n actionElement\n );\n\nexport const eventFlowReducer = (acc: Array<ActionAttr>, attr: Attr) => [\n ...acc,\n [$attrName(attr), $attrValue(attr)],\n];\n\nconst createEventReducer = () => () => (acc: Array<ActionAttr>, attr: Attr) =>\n eventFlowReducer(acc, attr);\n\n/**\n * Define a flow for an event type\n * @param eventFlowType - event flow type\n * @param actionReducerCallback - event reducer callback\n * @returns flow definition\n */\nexport const defineFlow = ({\n name,\n onBeforeRegister,\n onRegistered,\n onApply,\n onRemove,\n}: DefineFlowOption): DefineFlowReturn => {\n // Add flow to registry\n const registerFlowFn = async (\n eventOwnerName: string,\n eventOwnerElement: RealmElement\n ) => {\n const flowElements = createArray<HTMLElement>(eventOwnerElement.$els(name));\n const attrReducer = createEventReducer();\n const actionReducer = createActionReducer(\n eventOwnerName,\n eventOwnerElement\n );\n const flow = createSet<FlowEvent>(\n arrayReduce(\n flowElements,\n (acc, eventElement) => [\n ...acc,\n [\n // @note: attributes\n arrayReduce(\n eventOwnerElement.$attrs(eventElement),\n attrReducer(),\n []\n ),\n // @note: actions\n arrayReduce(\n eventOwnerElement.$children(eventElement),\n actionReducer(),\n []\n ),\n ],\n ],\n []\n )\n );\n\n registerScriptFlow(eventOwnerName);\n onBeforeRegister?.(eventOwnerName);\n registerFlow(name, eventOwnerName, flow);\n onRegistered?.(eventOwnerName, flow);\n };\n\n const flowCallback =\n (callback?: CallFlow) =>\n async (hostElement: RealmElement, dispatcherElement?: RealmElement) => {\n const flow = getFlow(name, hostElement.$tagName());\n if (flow) callback?.(flow, hostElement, dispatcherElement);\n };\n\n return [registerFlowFn, flowCallback(onApply), flowCallback(onRemove)];\n};\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmState, StateStorage } from \"../libs/RealmState.class\";\nimport { WindowWithCustomType, win } from \"../utils/dom\";\nimport {\n ElementAttributeEntries,\n ElementDataTypes,\n parseValue,\n defineElement,\n} from \"../utils/element\";\nimport {\n addSet,\n arrayMap,\n createArray,\n createSet,\n findArray,\n} from \"../utils/object\";\n\nconst globalState = ((\n win as WindowWithCustomType<{ globalState: RealmState }>\n).globalState = new RealmState());\n\nconst GLOBAL_STATE_REGISTRY = createSet<ElementAttributeEntries>();\n\nexport const getGlobalStateRegistry = () => GLOBAL_STATE_REGISTRY;\n\nconst findGlobalStateRegistry = (name: string) =>\n findArray(\n createArray<ElementAttributeEntries>(GLOBAL_STATE_REGISTRY),\n ([stateName]) => stateName === name\n );\n\nexport const getGlobalStateType = (name: string) =>\n findGlobalStateRegistry(name)?.at(1) as ElementDataTypes;\n\nconst getGlobalStateStorage = (name: string): StateStorage => {\n const options = findGlobalStateRegistry(name)?.at(3) as Record<\n string,\n StateStorage\n >;\n return options?.storage ?? StateStorage.MEMORY;\n};\n\nexport const getGlobalState = () => globalState;\n\nconst getGlobalStateValue = (name?: string): MixedDataType =>\n globalState.get(name, getGlobalStateStorage(name));\n\nexport const updateGlobalState = (name: string, value: unknown) =>\n globalState.set(name, value, getGlobalStateStorage(name));\n\nexport const globalStateElement = defineElement({\n name: RealmTagNames.GLOBAL_STATE,\n\n onBeforeInit(element) {\n const [name, type, storage] = arrayMap<string, string>(\n [\n RealmAttributeNames.NAME,\n RealmAttributeNames.TYPE,\n RealmAttributeNames.STORAGE,\n ],\n (item) => element.$attr(item)\n );\n const value = parseValue(<ElementDataTypes>type, element.$html());\n addSet(GLOBAL_STATE_REGISTRY, [name, type, value, { storage }]);\n updateGlobalState(name, getGlobalStateValue(name) ?? value);\n },\n\n onMounted(element) {\n element._remove();\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport { FlowMutateTypes, FlowDataSource } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport {\n ElementDataTypes,\n ElementAttributeEntries,\n parseValue,\n findAttrFrom,\n getDefaultAttrValues,\n} from \"../utils/element\";\nimport { ActionArg, FlowAction, mutatesValue } from \"../utils/flow\";\nimport {\n DataSource,\n arrayReduce,\n createArray,\n createMap,\n createSet,\n forEach,\n getMap,\n getValueFrom,\n setMap,\n someArray,\n} from \"../utils/object\";\nimport { getGlobalState } from \"../elements/global-state\";\n\ntype TriggerAction = (\n element: RealmElement,\n elementName: string,\n actionArgs: ActionArg[],\n event: Event | Record<string, unknown>,\n eventType: string,\n eventName: string\n) => Promise<void> | void;\n\nconst ACTIONS_REGISTRY = createMap<\n string,\n [requiredAttrs: string[], triggerActionFn: TriggerAction]\n>();\n\nconst ATTRS_REGISTRY = createMap<string, Set<ElementAttributeEntries>>();\n\nconst STATE_REGISTRY = createMap<string, Set<ElementAttributeEntries>>();\n\nconst setAttrMapRegistry = (\n attrMap: Map<string, Set<ElementAttributeEntries>>,\n elementName: string,\n attrs: Set<ElementAttributeEntries>\n) => attrs.size && setMap(attrMap, elementName, attrs);\n\nexport const setAttrRegistry = (\n elementName: string,\n attrs: Set<ElementAttributeEntries>\n) => setAttrMapRegistry(ATTRS_REGISTRY, elementName, attrs);\n\nexport const setStateRegistry = (\n elementName: string,\n attrs: Set<ElementAttributeEntries>\n) => setAttrMapRegistry(STATE_REGISTRY, elementName, attrs);\n\nexport const getAttrRegistry = (elementName: string) =>\n getMap(ATTRS_REGISTRY, elementName) ?? createSet();\n\nexport const getStateRegistry = (elementName: string) =>\n getMap(STATE_REGISTRY, elementName) ?? createSet();\n\nconst {\n EQUALS_TO: MutateTypeEqual,\n REMOVE: MutateTypeRemove,\n POP: MutateTypeArrayPop,\n PUSH: MutateTypeArrayPush,\n ASSIGN: MutateTypeArrayAssign,\n ADD_STR: MutateTypeArrayAdd,\n} = FlowMutateTypes;\n\nconst {\n MUTATE: AttrMutate,\n INDEX: AttrIndex,\n VALUE: AttrValue,\n FROM: AttrFrom,\n TOGGLE: AttrToggle,\n} = RealmAttributeNames;\n\nconst {\n ARRAY: DataTypeArray,\n HTML: DataTypeHTML,\n BOOLEAN: DataTypeBool,\n} = ElementDataTypes;\n\n/**\n * Get value from dot notation raw, without parsing by type\n * @param element\n * @param value\n * @param sourceType\n * @param event\n * @returns\n */\nexport const getRawSourceFrom = (\n element: RealmElement,\n value: MixedDataType,\n sourceType?: string,\n event?: DataSource\n) => {\n const strValue = `${value}`;\n const eventLookup: Record<string, () => MixedDataType> = {\n [FlowDataSource.EVENT]: () => getValueFrom(event, strValue),\n [FlowDataSource.GLOBAL_STATE]: () =>\n getValueFrom(getGlobalState(), strValue),\n [FlowDataSource.LOCAL_STATE]: () => getValueFrom(element.states, strValue),\n [FlowDataSource.EVENT_ATTR]: () => {\n const attrOwner = (<Event>event).target as RealmElement;\n const attrs = element.$attrsKv(attrOwner);\n return getValueFrom(attrs, strValue);\n },\n [FlowDataSource.ATTR]: () =>\n getValueFrom(\n {\n ...getDefaultAttrValues(element),\n ...element.$attrsKv(element),\n },\n strValue\n ),\n };\n return eventLookup?.[sourceType]?.();\n};\n\n/**\n * Get value from dot notation and parse by type\n * @param element\n * @param type\n * @param value\n * @param sourceType\n * @param event\n * @returns\n */\nexport const getSourceFrom = (\n element: RealmElement,\n type: ElementDataTypes,\n value: MixedDataType,\n sourceType?: string,\n event?: DataSource\n) => {\n const getRawValue = () => getRawSourceFrom(element, value, sourceType, event);\n const eventLookup: Record<string, () => MixedDataType> = {\n [FlowDataSource.EVENT]: () => parseValue(type, getRawValue()),\n [FlowDataSource.EVENT_ATTR]: getRawValue,\n [FlowDataSource.ATTR]: getRawValue,\n [FlowDataSource.GLOBAL_STATE]: () => parseValue(type, getRawValue()),\n [FlowDataSource.LOCAL_STATE]: () => parseValue(type, getRawValue()),\n };\n return eventLookup?.[sourceType]?.() ?? parseValue(type, value);\n};\n\n/**\n * Find attribute for the action element\n * @param actionArgs\n * @param attrName\n * @param fallbackAttr\n * @returns\n */\nexport const findAttr = <T>(\n actionArgs: Array<string[]>,\n attrName: string,\n fallbackAttr?: T,\n isMultipleResult = false\n) => {\n const attr = findAttrFrom(actionArgs, attrName, isMultipleResult);\n const hasAttr = attr !== undefined;\n return [hasAttr ? attr : fallbackAttr, hasAttr] as [T, boolean];\n};\n\n/**\n * Update state or attribute\n * @returns\n */\nexport const getMutatedValue = (\n element: RealmElement,\n actionArgs: Array<string[]>,\n attrType: ElementDataTypes,\n event: Event | Record<string, unknown>\n): ((\n prevValue: MixedDataType\n) => string | number | boolean | void | object) => {\n const [mutateAttr] = findAttr<string>(\n actionArgs,\n AttrMutate,\n MutateTypeEqual\n );\n const [indexAttr, hasIndexAttr] = findAttr<number>(actionArgs, AttrIndex);\n const [valueAttr, hasValueAttr] = findAttr<MixedDataType>(\n actionArgs,\n AttrValue\n );\n\n const isDataTypeArray = attrType === DataTypeArray;\n const isDataTypeHTML = attrType === DataTypeHTML;\n const isDataTypeBool = attrType === DataTypeBool;\n const isMutateTypeEqualsTo = mutateAttr === MutateTypeEqual;\n const isMutateTypeArrayRemove = mutateAttr === MutateTypeRemove;\n const isMutateTypeArrayPop = mutateAttr === MutateTypeArrayPop;\n const isMutateTypeArrayPush = mutateAttr === MutateTypeArrayPush;\n const isMutateTypeArrayAdd = mutateAttr === MutateTypeArrayAdd;\n const isMutateTypeArrayAssign = mutateAttr === MutateTypeArrayAssign;\n\n const isMutationArrayNotRequiredIndex =\n isMutateTypeArrayPush || isMutateTypeEqualsTo;\n const isMutationArrayRequiredIndex =\n isMutateTypeArrayRemove || isMutateTypeArrayAdd || isMutateTypeArrayAssign;\n const isStringMutationAllowed = !isDataTypeArray && hasValueAttr;\n const isHTMLMutationAllowed = isDataTypeHTML;\n const isArrayMutationAllowed =\n isDataTypeArray &&\n (isMutateTypeArrayPop ||\n (isMutationArrayRequiredIndex && hasIndexAttr) ||\n (isMutationArrayNotRequiredIndex && hasValueAttr));\n const isMutationAllowed =\n isStringMutationAllowed || isHTMLMutationAllowed || isArrayMutationAllowed;\n if (!isMutationAllowed) return;\n\n const [sourceType] = findAttr<string>(actionArgs, AttrFrom);\n const attrIndex = hasIndexAttr\n ? getSourceFrom(element, attrType, indexAttr, sourceType, event)\n : \"-1\";\n let attrValue = getSourceFrom(\n element,\n attrType,\n valueAttr,\n sourceType,\n event\n );\n\n const [, hasToggleAttr] = findAttr(actionArgs, AttrToggle);\n const isToggleBoolean = hasToggleAttr && isDataTypeBool;\n if (isToggleBoolean) attrValue = !attrValue;\n\n const mutatedValue = mutatesValue([\n mutateAttr,\n attrType,\n attrValue,\n +attrIndex,\n hasToggleAttr,\n ]);\n\n return mutatedValue;\n};\n\n/**\n * Get element's attribute type\n * @param name\n * @param attrEntries\n * @returns\n */\nexport const getAttrType = (\n name: string,\n attrEntries: Set<ElementAttributeEntries>\n): ElementDataTypes | undefined =>\n arrayReduce(\n createArray<ElementAttributeEntries>(attrEntries),\n (acc, [attrName, attrType]) => (attrName === name ? attrType : acc)\n );\n\n/**\n * Execute the action\n * @param element\n * @param elementName\n * @param actions\n * @returns\n */\nexport const doAction =\n (element: RealmElement, elementName: string, actions: Array<FlowAction>) =>\n (\n eventType: string,\n eventName: string,\n event?: Event | Record<string, unknown>\n ) =>\n forEach<FlowAction>(actions, ([actionName, actionArgs]) => {\n const [requiredAttrs = [], triggerAction] = getMap(\n ACTIONS_REGISTRY,\n actionName\n );\n\n const isValidAction = someArray(requiredAttrs, (attrName) => {\n const [, hasAttr] = findAttr(actionArgs, attrName);\n return hasAttr;\n });\n\n if (requiredAttrs.length && !isValidAction) return;\n return triggerAction?.(\n element,\n elementName,\n actionArgs,\n event,\n eventType,\n eventName\n );\n });\n\n/**\n * Trigger action wrapper\n * @param element\n * @param elementName\n * @returns\n */\nconst actionTrigger =\n (element: RealmElement, elementName: string) =>\n (actions: Array<FlowAction>) =>\n doAction(element, elementName, actions);\n\n/**\n * Create action trigger for element flow actions\n */\nexport const createActionTrigger = (element: RealmElement) =>\n actionTrigger(element, element.$name());\n\ninterface DefineActionOption {\n name: string;\n requiredAttrs?: string[];\n onTrigger: TriggerAction;\n}\n\nexport const defineAction =\n ({ name, requiredAttrs, onTrigger }: DefineActionOption) =>\n () =>\n setMap(ACTIONS_REGISTRY, name, [requiredAttrs, onTrigger]);\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport {\n defineAction,\n doAction,\n findAttr,\n getRawSourceFrom,\n} from \"../utils/action\";\nimport { ElementDataTypes } from \"../utils/element\";\nimport { ActionArg, FlowAction } from \"../utils/flow\";\nimport { forEach, fromEntries } from \"../utils/object\";\nimport { newError } from \"../utils/string\";\n\nconst HttpMethod = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n DELETE: \"DELETE\",\n PATCH: \"PATCH\",\n} as const;\n\nconst ResponseType = {\n JSON: ElementDataTypes.JSON_STRING,\n HTML: ElementDataTypes.HTML,\n TEXT: \"text\",\n} as const;\n\n/**\n * Trigger <http-request /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const httpRequestAction = defineAction({\n name: FlowActionTypes.HTTP_REQUEST,\n\n async onTrigger(\n element: RealmElement,\n elementName: string,\n actionArgs: Array<string[]>,\n $event: Event,\n eventType: string,\n eventName: string\n ) {\n const [urlAttr, hasUrlAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.HTTP_URL\n );\n if (!hasUrlAttr)\n throw newError(\n `Missing \"${RealmAttributeNames.HTTP_URL}\" attribute on <${FlowActionTypes.HTTP_REQUEST} />`\n );\n\n const [actionAttrs] = findAttr<ActionArg[]>(\n actionArgs,\n RealmAttributeNames.ACTION\n );\n\n const [responseResponseOkAttr = [], hasResponseOkAttr] = findAttr<\n ActionArg[]\n >(actionAttrs, FlowActionTypes.RESPONSE_SUCCESS);\n const [responseOkActions, hasResponseOkActions] = findAttr<FlowAction[]>(\n responseResponseOkAttr,\n RealmAttributeNames.ACTION\n );\n\n const [responseResponseFailAttr = [], hasResponseFailAttr] = findAttr<\n ActionArg[]\n >(actionAttrs, FlowActionTypes.RESPONSE_ERROR);\n const [responseFailActions, hasResponseFailActions] = findAttr<\n FlowAction[]\n >(responseResponseFailAttr, RealmAttributeNames.ACTION);\n\n const isValidHttpRequest = hasResponseOkAttr || hasResponseFailAttr;\n if (!isValidHttpRequest) return;\n\n const [method = HttpMethod.GET] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.METHOD\n );\n const [asAttr = ResponseType.TEXT] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.AS\n );\n const [headersAttrs = []] = findAttr<ActionArg[][]>(\n actionAttrs,\n FlowActionTypes.REQUEST_HEADER,\n [],\n true\n );\n\n const headers = new Headers();\n forEach(headersAttrs, (headerAttr) => {\n const header = fromEntries(headerAttr);\n headers.set(\n header[RealmAttributeNames.NAME],\n header[RealmAttributeNames.VALUE]\n );\n });\n\n const [bodyAttr, hasBodyAttr] = findAttr<ActionArg[]>(\n actionAttrs,\n FlowActionTypes.REQUEST_BODY\n );\n\n let body;\n if (hasBodyAttr) {\n const [bodyContent, hasBodyContent] = findAttr<ElementDataTypes>(\n bodyAttr,\n RealmAttributeNames.ACTION\n );\n if (hasBodyAttr && hasBodyContent) body = bodyContent;\n\n const [bodyValueAttr, hasBodyValueAttr] = findAttr<ElementDataTypes>(\n bodyAttr,\n RealmAttributeNames.VALUE\n );\n const [bodyFromAttr, hasBodyFromAttr] = findAttr<ElementDataTypes>(\n bodyAttr,\n RealmAttributeNames.FROM\n );\n if (hasBodyValueAttr && hasBodyFromAttr) {\n body = getRawSourceFrom(element, bodyValueAttr, bodyFromAttr, $event);\n }\n }\n\n const doActionWrapper = (\n responseAction: FlowAction[],\n $event: Event | Record<string, unknown>\n ) =>\n doAction(element, elementName, responseAction)(\n eventName,\n eventType,\n $event\n );\n\n try {\n const response = await fetch(urlAttr, {\n body,\n method,\n headers,\n });\n if (!response.ok) throw newError(`[${response.status}] ${urlAttr}`);\n if (!hasResponseOkActions) return;\n\n const getTextResponse = () => response.text();\n const valueLookup = {\n [ResponseType.JSON]: () => response.json(),\n [ResponseType.HTML]: getTextResponse,\n [ResponseType.TEXT]: getTextResponse,\n };\n const responseValue = await valueLookup?.[asAttr]?.();\n doActionWrapper(responseOkActions, responseValue);\n } catch (err) {\n if (!hasResponseFailActions) return;\n doActionWrapper(responseFailActions, {\n message: \"[ERROR] \" + err?.message ?? `unknown error, URL: ${urlAttr}`,\n });\n }\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { EMPTY_STRING } from \"../constants/chars\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { getGlobalState } from \"../elements/global-state\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction, findAttr } from \"../utils/action\";\nimport { getDefaultAttrValues } from \"../utils/element\";\nimport { getScriptFlow } from \"../utils/flow\";\nimport { reqAnim } from \"../utils/timer\";\n\nconst getScriptArgs = (element: RealmElement, $event: Event) => {\n event = undefined;\n const attrs = {\n ...getDefaultAttrValues(element),\n ...element.$attrsKv(),\n };\n\n const getShadowArgs = (refName: string) => [\n EMPTY_STRING,\n [[RealmAttributeNames.REF, refName]],\n ];\n\n return [\n {\n $: element,\n attr: {\n get: (name: string) => element.$attr(name) ?? attrs?.[name],\n set: element._attr,\n },\n refs: (refName: string) =>\n element.$shadowEls.apply(null, getShadowArgs(refName)),\n ref: (refName: string) =>\n element.$shadowEl.apply(null, getShadowArgs(refName)),\n attrs: element.$attrsKv(),\n localState: element.states,\n globalState: getGlobalState(),\n event: $event,\n },\n ];\n};\n\n/**\n * Trigger <script type=\"module/realm\" /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const scriptAction = defineAction({\n name: FlowActionTypes.SCRIPT,\n\n requiredAttrs: [RealmAttributeNames.SCRIPT_ID],\n\n onTrigger(\n element: RealmElement,\n elementName: string,\n actionArgs: Array<string[]>,\n event: Event\n ) {\n const [scriptIdAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.SCRIPT_ID\n );\n\n const hasEventTarget = !!event?.target;\n const eventTarget = event?.target;\n const waitForScriptLoaded = () =>\n reqAnim(() => {\n const scriptFlow = getScriptFlow(elementName, scriptIdAttr);\n const isScriptLoaded = !!scriptFlow;\n if (!isScriptLoaded) return waitForScriptLoaded();\n scriptFlow?.apply(\n element,\n getScriptArgs(\n element,\n !hasEventTarget\n ? event\n : {\n ...event,\n target: eventTarget,\n }\n )\n );\n });\n waitForScriptLoaded();\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { COLON, EMPTY_STRING } from \"../constants/chars\";\nimport { FlowActionTypes, FlowRuntimeEventTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction, findAttr, getSourceFrom } from \"../utils/action\";\nimport { ElementDataTypes } from \"../utils/element\";\nimport { JSONSafeParse } from \"../utils/json\";\nimport { createArray, forEach } from \"../utils/object\";\n\n/**\n * Trigger <send-event /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const sendEventAction = defineAction({\n name: FlowActionTypes.SEND_EVENT,\n\n requiredAttrs: [RealmAttributeNames.NAME],\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n $event: Event\n ) {\n const [eventNameAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.NAME\n );\n const [targetAttr, hasTargetAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.TO\n );\n const [parentTargetAttr, hasParentTargetAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.TO + COLON + \"parent\"\n );\n const [typeAttr, hasTypeAttr] = findAttr<ElementDataTypes>(\n actionArgs,\n RealmAttributeNames.TYPE\n );\n const [valueAttr, hasValueAttr] = findAttr<ElementDataTypes>(\n actionArgs,\n RealmAttributeNames.VALUE\n );\n const [fromAttr, hasFromAttr] = findAttr<ElementDataTypes>(\n actionArgs,\n RealmAttributeNames.FROM\n );\n const [actionAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.ACTION\n );\n const hasValueFromAttr = hasValueAttr && hasFromAttr;\n\n const getValue = () =>\n getSourceFrom(element, typeAttr, valueAttr, fromAttr, $event) ||\n valueAttr;\n\n const eventDetailExtendedTypeLookup = {\n [ElementDataTypes.HTML]: () => actionAttr,\n [ElementDataTypes.JSON_STRING]: () => JSONSafeParse(actionAttr),\n };\n\n const selector = [EMPTY_STRING, RealmAttributeNames.REF, targetAttr];\n const eventName = FlowRuntimeEventTypes.ON + COLON + eventNameAttr;\n let eventDetail = $event;\n if (hasTypeAttr)\n eventDetail = !hasValueFromAttr\n ? eventDetailExtendedTypeLookup[typeAttr]?.() ?? valueAttr\n : getValue();\n\n let targetElements: RealmElement[] = [element];\n\n if (hasTargetAttr) {\n targetElements = createArray(element.$shadowEls.apply(null, selector));\n }\n\n if (hasParentTargetAttr) {\n const parentElement = element.$host<RealmElement>();\n targetElements = [parentElement];\n if (parentTargetAttr !== EMPTY_STRING) {\n targetElements = createArray(\n parentElement.$shadowEls.apply(null, selector)\n );\n }\n }\n\n forEach(targetElements, (targetElement: RealmElement) =>\n targetElement._sendEvent(eventName, eventDetail)\n );\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport {\n getGlobalStateType,\n updateGlobalState,\n} from \"../elements/global-state\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport {\n defineAction,\n findAttr,\n getAttrType,\n getMutatedValue,\n} from \"../utils/action\";\nimport { parseValue } from \"../utils/element\";\n\n/**\n * Trigger <set-state /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const setStateAction = defineAction({\n name: FlowActionTypes.SET_STATE,\n requiredAttrs: [RealmAttributeNames.NAME],\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n event\n ) {\n const updateLocalState = (name: string, value: unknown) =>\n element.states.set(name, value);\n const [nameAttr] = findAttr<string>(actionArgs, RealmAttributeNames.NAME);\n const [, hasGlobalAttr] = findAttr(actionArgs, RealmAttributeNames.GLOBAL);\n const attrType = hasGlobalAttr\n ? getGlobalStateType(nameAttr)\n : getAttrType(nameAttr, element.statesRegistry);\n const updateState = hasGlobalAttr ? updateGlobalState : updateLocalState;\n const value = getMutatedValue(element, actionArgs, attrType, event);\n updateState(nameAttr, value);\n },\n});\n\n/**\n * Trigger <set-attr /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const setAttrAction = defineAction({\n name: FlowActionTypes.SET_ATTR,\n requiredAttrs: [RealmAttributeNames.NAME],\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n event\n ) {\n const [nameAttr] = findAttr<string>(actionArgs, RealmAttributeNames.NAME);\n const attrType = getAttrType(nameAttr, element.attrsRegistry);\n const mutatedValue = getMutatedValue(element, actionArgs, attrType, event);\n const prevValue = parseValue(attrType, element.$attr(nameAttr));\n const value = mutatedValue(prevValue);\n element._attr(nameAttr, `${value}`);\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction, doAction, findAttr } from \"../utils/action\";\nimport { FlowAction } from \"../utils/flow\";\nimport { timerEvery, timerOnce } from \"../utils/timer\";\n\n/**\n * Trigger <set-timer /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const setTimerAction = defineAction({\n name: FlowActionTypes.SET_TIMER,\n\n requiredAttrs: [RealmAttributeNames.ONCE, RealmAttributeNames.EVERY],\n\n onTrigger(\n element: RealmElement,\n elementName: string,\n actionArgs: Array<string[]>,\n event: Event,\n eventType: string,\n eventName: string\n ) {\n const [actionAttr, hasActionAttr] = findAttr<FlowAction[]>(\n actionArgs,\n RealmAttributeNames.ACTION\n );\n\n if (!hasActionAttr) return;\n\n const [onceAttr, hasOnceAttr] = findAttr(\n actionArgs,\n RealmAttributeNames.ONCE\n );\n const [everyAttr, hasEveryAttr] = findAttr(\n actionArgs,\n RealmAttributeNames.EVERY\n );\n\n const doTimer = () =>\n doAction(element, elementName, actionAttr)(eventName, eventType, event);\n\n if (hasOnceAttr) {\n timerOnce(doTimer, +onceAttr);\n } else if (hasEveryAttr) {\n timerEvery(doTimer, +everyAttr);\n }\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { EMPTY_STRING } from \"../constants/chars\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction } from \"../utils/action\";\nimport { forEach, forEachNode } from \"../utils/object\";\n\n/**\n * Trigger <trigger-action /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const triggerElementAction = defineAction({\n name: FlowActionTypes.TRIGGER_ELEMENT,\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n event: Event\n ) {\n forEach(actionArgs, ([actionName, selector]) =>\n forEachNode(\n element.$shadowEls(EMPTY_STRING, [[RealmAttributeNames.REF, selector]]),\n (el) => el?.[actionName]?.(event)\n )\n );\n },\n});\n","import { COLON } from \"../constants/chars\";\nimport { FlowEventNames, FlowRuntimeEventTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { FlowAction, FlowEvent, defineFlow } from \"../utils/flow\";\nimport { forEach } from \"../utils/object\";\nimport { reqAnim } from \"../utils/timer\";\n\ntype ApplyEventCallback = (\n dispatcherElement: RealmElement,\n eventType: string,\n eventName: string,\n actions: FlowAction[]\n) => void;\n\nconst dispatchEvent =\n (isRemoveEvent?: boolean) =>\n (\n dispatcherElement: RealmElement,\n eventType: string,\n eventName: string,\n actions: FlowAction[]\n ) => {\n const hasEventName = !!eventName;\n const eventCaller = isRemoveEvent\n ? dispatcherElement._removeEvent\n : dispatcherElement._addCustomEvent;\n const isCustomEvent = eventType === FlowRuntimeEventTypes.ON;\n const finalEventName = isCustomEvent\n ? FlowRuntimeEventTypes.ON + COLON + eventName\n : eventType;\n\n eventCaller(finalEventName, (event) => {\n if (!isCustomEvent && hasEventName && eventName !== event[0]) return;\n reqAnim(() =>\n dispatcherElement._sendEvent(FlowEventNames.LISTEN_EVENT, [\n eventType,\n eventName,\n actions,\n event,\n ])\n );\n });\n };\n\nconst applyEventListener = (\n flow: Set<FlowEvent>,\n hostElement: RealmElement,\n applyEventCallback: ApplyEventCallback\n) =>\n forEach(flow, ([attrs, actions]) =>\n forEach(attrs, ([eventType, eventName]) =>\n applyEventCallback(hostElement, eventType, eventName, actions)\n )\n );\n\nexport const listenEventFlow = defineFlow({\n name: FlowEventNames.LISTEN_EVENT,\n\n async onApply(flow, hostElement, dispatcherElement) {\n applyEventListener(flow, dispatcherElement ?? hostElement, dispatchEvent());\n },\n\n async onRemove(flow, hostElement, dispatcherElement) {\n applyEventListener(\n flow,\n dispatcherElement ?? hostElement,\n dispatchEvent(true)\n );\n },\n});\n","import { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmAttributeNames } from \"../constants/attrs\";\nimport { EMPTY_STRING } from \"../constants/chars\";\nimport { FlowEventNames } from \"../constants/flow\";\nimport { findAttrFrom } from \"../utils/element\";\nimport { FlowAction, FlowEvent, defineFlow } from \"../utils/flow\";\nimport { forEach, forEachNode } from \"../utils/object\";\nimport { TimerReturn, timerOnce } from \"../utils/timer\";\n\ntype ApplyEventCallback<T> = (\n dispatcherElement: RealmElement,\n debounceTime: number,\n eventName: string,\n actions: FlowAction[]\n) => (element: T) => void;\n\nconst sendTriggerEvent =\n (\n dispatcherElement: RealmElement,\n debounceTimer: TimerReturn,\n debounceTime: number,\n eventName: string,\n actions: FlowAction[]\n ) =>\n (event: Event) => {\n const [, clearTimeout] = debounceTimer || [];\n clearTimeout?.();\n const triggerEvent = () =>\n dispatcherElement._sendEvent(FlowEventNames.TRIGGER_EVENT, [\n EMPTY_STRING,\n eventName,\n actions,\n event,\n ]);\n\n if (debounceTime > 0) {\n debounceTimer = timerOnce(triggerEvent, debounceTime);\n return;\n }\n\n return triggerEvent();\n };\n\nconst dispatchEvent =\n (hostElement?: RealmElement, isRemoveEvent?: boolean) =>\n (\n dispatcherElement: RealmElement,\n debounceTime: number,\n eventName: string,\n actions: FlowAction[]\n ) =>\n (listenerElement: RealmElement) => {\n let debounceTimer: TimerReturn;\n const eventCaller = isRemoveEvent\n ? dispatcherElement._removeEvent\n : dispatcherElement._addEvent;\n eventCaller(\n eventName,\n sendTriggerEvent(\n hostElement,\n debounceTimer,\n debounceTime,\n eventName,\n actions\n ),\n listenerElement\n );\n };\n\nconst applyTriggerEvent = (\n flow: Set<FlowEvent>,\n hostElement: RealmElement,\n applyEventCallback: ApplyEventCallback<RealmElement>\n) =>\n forEach(flow, ([attrs, actions]) => {\n const debounceTime = +findAttrFrom(attrs, RealmAttributeNames.DEBOUNCE);\n forEach(attrs, ([attrName, attrValue]) => {\n if (attrName === RealmAttributeNames.DEBOUNCE) return;\n forEachNode(\n hostElement.$shadowEls(\n EMPTY_STRING,\n RealmAttributeNames.REF,\n attrValue\n ),\n applyEventCallback(hostElement, debounceTime, attrName, actions)\n );\n });\n });\n\nexport const triggerEventFlow = defineFlow({\n name: FlowEventNames.TRIGGER_EVENT,\n\n async onApply(flow, hostElement, dispatcherElement) {\n applyTriggerEvent(\n flow,\n dispatcherElement ?? hostElement,\n dispatchEvent(hostElement)\n );\n },\n\n async onRemove(flow, hostElement, dispatcherElement) {\n applyTriggerEvent(\n flow,\n dispatcherElement ?? hostElement,\n dispatchEvent(hostElement, true)\n );\n },\n});\n","import { httpRequestAction } from \"../actions/http-request\";\nimport { scriptAction } from \"../actions/script-flow\";\nimport { sendEventAction } from \"../actions/send-event\";\nimport { setAttrAction, setStateAction } from \"../actions/set-action\";\nimport { setTimerAction } from \"../actions/set-timer\";\nimport { triggerElementAction } from \"../actions/trigger-element\";\nimport { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { listenEventFlow } from \"../flows/listen-event\";\nimport { triggerEventFlow } from \"../flows/trigger-event\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineElement } from \"../utils/element\";\n\nexport const eventFlowList = [listenEventFlow, triggerEventFlow];\nconst actionList = [\n httpRequestAction,\n scriptAction,\n sendEventAction,\n setAttrAction,\n setStateAction,\n setTimerAction,\n triggerElementAction,\n];\n\nexport const elementFlow = defineElement({\n name: RealmTagNames.ELEMENT_FLOW,\n\n async onBeforeInit(element) {\n const parentElement = element.$parent<RealmElement>();\n if (!parentElement) return;\n\n const eventFlowOwnerName = element.$attr<string>(\n RealmAttributeNames.NAME,\n parentElement\n );\n\n for (const registerAction of actionList) await registerAction();\n for (const [registerEventFlow] of eventFlowList)\n await registerEventFlow(eventFlowOwnerName, element);\n },\n\n async onMounted(element) {\n const parentNode = element.$parentNode();\n const isValidParentNode = parentNode instanceof ShadowRoot;\n if (!isValidParentNode) return;\n\n const hostElement = element.$host<RealmElement>();\n for (const [, applyEventFlow] of eventFlowList)\n await applyEventFlow(hostElement);\n element._remove();\n },\n});\n","import { RealmAttributeNames, RealmMutableAttr } from \"../constants/attrs\";\nimport { META_PREFIX } from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport {\n ElementAttributeEntries,\n bindElement,\n defineElement,\n getElementAttrBindings,\n} from \"../utils/element\";\nimport { createArray, forEach, isArray, toDotNotation } from \"../utils/object\";\nimport { strSlice } from \"../utils/string\";\nimport { eventFlowList } from \"./element-flow\";\nimport { getGlobalState } from \"./global-state\";\n\nexport const repeatListElement = defineElement({\n name: RealmTagNames.REPEAT_LIST,\n\n onBeforeInit(element) {\n const fragment = element._createFragment();\n forEach(element.$nodes(), (node) => {\n element._append(element.$clone(node), fragment);\n element._remove(node);\n });\n\n element._attach();\n element._clear();\n\n const hostElement = element.$host<RealmElement>();\n if (!hostElement) return;\n\n const ofAttr = element.$attr<string>(RealmAttributeNames.OF);\n const dataSource = strSlice(ofAttr);\n if (!dataSource) return;\n\n const hostElementStates = hostElement?.states;\n const hostElementStatesRegistry = hostElement.statesRegistry;\n const hostElementAttrsRegistry = hostElement.attrsRegistry;\n\n const removeElementFlow = async () => {\n for (const [, , removeEventFlow] of eventFlowList)\n await removeEventFlow(hostElement, element);\n };\n\n const updateElementFlow = async () => {\n for (const [, applyEventFlow] of eventFlowList)\n await applyEventFlow(hostElement, element);\n };\n\n const updateIterableContent = (entries: Array<MixedDataType>) => {\n const elementShadow = element.$shadow();\n element._clear();\n element._clear(elementShadow);\n\n forEach(entries, (item, index) => {\n element._append(\n element.$clone<DocumentFragment>(fragment),\n elementShadow\n );\n\n const elementAttrBindings = getElementAttrBindings(element);\n forEach(toDotNotation(item), (name) =>\n bindElement(\n element,\n RealmMutableAttr.SRC,\n elementAttrBindings,\n name,\n item,\n false\n )\n );\n\n const meta = { index, length: entries.length };\n forEach(toDotNotation(meta, META_PREFIX), (name) =>\n bindElement(\n element,\n RealmMutableAttr.META,\n elementAttrBindings,\n name,\n meta,\n false\n )\n );\n });\n\n const elementAttrBindings = getElementAttrBindings(element);\n forEach(\n createArray<[Set<ElementAttributeEntries>, string]>([\n [hostElementStatesRegistry, RealmMutableAttr.STATE],\n [hostElementAttrsRegistry, RealmMutableAttr.ATTR],\n ]),\n ([registry, dataType]) =>\n forEach(registry, ([mutateName]) => {\n const valueLookup: Record<string, () => unknown> = {\n [RealmMutableAttr.ATTR]: () => hostElement.$attr(mutateName),\n [RealmMutableAttr.STATE]: () =>\n hostElementStates.get<MixedDataType>(mutateName),\n };\n bindElement(\n element,\n dataType,\n elementAttrBindings,\n mutateName,\n valueLookup[dataType](),\n false\n );\n })\n );\n };\n\n // Whenever attributes, local & global state changes, reupdate binding elements\n forEach(\n createArray<[RealmState, string, boolean]>([\n [hostElement, RealmMutableAttr.ATTR],\n [hostElementStates, RealmMutableAttr.STATE],\n [getGlobalState(), RealmMutableAttr.STATE, true],\n ]),\n ([mutator, mutateType, isGlobalState]) => {\n mutator.subscribe(\n async (mutatorName, value: MixedDataType | Array<MixedDataType>) => {\n const isValidIterableSource =\n isArray(value) && mutatorName === dataSource;\n\n if (!isValidIterableSource)\n return bindElement(\n element,\n mutateType,\n getElementAttrBindings(element),\n mutatorName,\n value,\n isGlobalState,\n true\n );\n\n await removeElementFlow();\n updateIterableContent(value as Array<MixedDataType>);\n await updateElementFlow();\n }\n );\n }\n );\n //#endregion\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { defineElement } from \"../utils/element\";\n\nexport const webAppElement = defineElement({\n name: RealmTagNames.WEB_APP,\n\n onMounted(element) {\n element._attr(RealmAttributeNames.IS_LOADED, true);\n },\n});\n","import { RealmAttributeNames, RealmMutableAttr } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport {\n FlowEventNames,\n FlowRuntimeEventTypes,\n FlowRuntimeMutableEventTypesLookup,\n} from \"../constants/flow\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport {\n createActionTrigger,\n getAttrRegistry,\n getStateRegistry,\n} from \"../utils/action\";\nimport { $el, $els, doc } from \"../utils/dom\";\nimport {\n ElementAttributeEntries,\n defineElement,\n parseValue,\n getElementAttrBindings,\n bindElement,\n} from \"../utils/element\";\nimport { FlowAction } from \"../utils/flow\";\nimport {\n addSet,\n arrayPush,\n arrayReduce,\n createArray,\n createMap,\n createSet,\n entriesOf,\n forEach,\n forEachNode,\n getMap,\n getValueFrom,\n setMap,\n} from \"../utils/object\";\nimport { getGlobalStateRegistry, getGlobalState } from \"./global-state\";\n\nconst HTML_REGISTRY = createMap<string, HTMLTemplateElement>();\n\nconst STYLE_REGISTRY = createMap<string, HTMLStyleElement>();\n\nconst ELEMENT_FLOW_REGISTRY = createMap<string, Set<RealmElement>>();\n\nconst SCRIPT_REGISTRY = createMap<string, Set<RealmElement>>();\n\nconst LINK_STYLE_REGISTRY = createMap<string, Set<RealmElement>>();\n\n/**\n * Register custom element\n * @param elementName\n * @returns\n */\nexport const registerElement = (elementName: string) =>\n defineElement({\n name: elementName,\n\n onBeforeRegister() {\n const element = $el(doc)<RealmElement>(\n RealmTagNames.CUSTOM_ELEMENT,\n RealmAttributeNames.NAME,\n elementName\n );\n\n //#region register html definition\n const template = $el(element)<HTMLTemplateElement>(\n RealmTagNames.TEMPLATE\n );\n setMap(HTML_REGISTRY, elementName, template);\n //#endregion\n\n //#region register style definition\n if (template) {\n forEachNode(\n $els(template.content)<HTMLStyleElement>(RealmTagNames.STYLE),\n (style) => setMap(STYLE_REGISTRY, elementName, style)\n );\n }\n //#endregioin\n\n //#region register element to shadow\n forEach<[string, Map<string, Set<RealmElement>>]>(\n [\n [RealmTagNames.ELEMENT_FLOW, ELEMENT_FLOW_REGISTRY],\n [RealmTagNames.IMPORT_SCRIPT, SCRIPT_REGISTRY],\n [RealmTagNames.IMPORT_STYLE, LINK_STYLE_REGISTRY],\n ],\n ([tagName, registry]) => {\n setMap(\n registry,\n elementName,\n createSet(createArray($els(element)<RealmElement>(tagName)))\n );\n }\n );\n //#endregion\n },\n\n onBeforeInit(element) {\n //#region render styles and DOM to shadow DOM\n element._attach();\n element._renderStyle(getMap(STYLE_REGISTRY, elementName));\n element._renderTemplate(getMap(HTML_REGISTRY, elementName));\n forEach(\n [ELEMENT_FLOW_REGISTRY, SCRIPT_REGISTRY, LINK_STYLE_REGISTRY],\n (registry) =>\n forEach(getMap(registry, elementName), element._renderShadow)\n );\n //#endregion\n\n //#region slot element's children to shadow element\n const slotChildren = element.$shadowEl<HTMLSlotElement>(\n RealmTagNames.SLOT,\n [[RealmAttributeNames.CHILDREN]]\n );\n const slottedChildren = arrayReduce(\n element.$nodes(),\n (acc, childElement) => {\n const slotName = element.$attr<string>(\n RealmAttributeNames.SLOT,\n childElement\n );\n\n if (slotName) {\n element._slotTo(\n element.$shadowEl<HTMLSlotElement>(RealmTagNames.SLOT, [\n [RealmAttributeNames.NAME, slotName],\n ]),\n [childElement]\n );\n return acc;\n }\n return [...acc, childElement];\n },\n []\n );\n element._slotTo(slotChildren, slottedChildren);\n //#endregion\n\n //#region register and apply element that contains binding attributes\n const bindingElements = getElementAttrBindings(element);\n //#endregion\n\n //#region apply attributes, local & global states to element\n const attributesRegistry = getAttrRegistry(elementName);\n const statesRegistry = getStateRegistry(elementName);\n forEach(\n createArray<[Set<ElementAttributeEntries>, string, boolean]>([\n [createArray(attributesRegistry), RealmMutableAttr.ATTR],\n [createArray(statesRegistry), RealmMutableAttr.STATE],\n [getGlobalStateRegistry(), RealmMutableAttr.STATE, true],\n ]),\n ([registry, dataType, isGlobalState]) =>\n forEach(registry, ([mutateName, valueType, value]) => {\n const getParsedValue = () => parseValue(valueType, value);\n const getValueFromSource = () => getValueFrom(value, mutateName);\n const valueLookup: Record<string, () => MixedDataType> = {\n [RealmMutableAttr.ATTR]: () =>\n element.$attr<string>(mutateName) ?? getParsedValue(),\n [RealmMutableAttr.STATE]: getParsedValue,\n [RealmMutableAttr.SRC]: getValueFromSource,\n [RealmMutableAttr.META]: getValueFromSource,\n };\n\n if (dataType === RealmMutableAttr.ATTR)\n addSet(element.attrsRegistry, [mutateName, valueType, value]);\n\n if (!isGlobalState && dataType === RealmMutableAttr.STATE)\n addSet(element.statesRegistry, [mutateName, valueType, value]);\n\n bindElement(\n element,\n dataType,\n bindingElements,\n mutateName,\n valueLookup[dataType](),\n isGlobalState\n );\n })\n );\n\n // Update whenever element's attr, local & global state changes\n forEach(\n createArray<[RealmState, string, boolean]>([\n [element, RealmMutableAttr.ATTR],\n [element.states, RealmMutableAttr.STATE, false],\n [getGlobalState(), RealmMutableAttr.STATE, true],\n ]),\n ([mutator, mutateType, globalState]) =>\n mutator.subscribe((mutatorName, value: string, oldValue) => {\n const eventDetail = [mutatorName, value, oldValue];\n if (mutateType === RealmMutableAttr.STATE)\n arrayPush(eventDetail, globalState);\n element._sendEvent(\n FlowRuntimeMutableEventTypesLookup[mutateType],\n eventDetail\n );\n bindElement(\n element,\n mutateType,\n bindingElements,\n mutatorName,\n value,\n globalState,\n true\n );\n })\n );\n //#endregion\n\n //#region apply actions to element\n const actionTrigger = createActionTrigger(element);\n forEach(entriesOf(FlowEventNames), ([, flowName]) =>\n element._addCustomEvent<\n [\n eventType: string,\n eventName: string,\n actions: FlowAction[],\n event: Event\n ]\n >(flowName, ([eventType, eventName, actions, event]) =>\n actionTrigger(actions)(eventType, eventName, event)\n )\n );\n //#endregion\n },\n\n onMounted(element) {\n element._sendEvent(FlowRuntimeEventTypes.MOUNTED);\n },\n\n onUnmounted(element) {\n element._sendEvent(FlowRuntimeEventTypes.UNMOUNTED);\n },\n });\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { setAttrRegistry, setStateRegistry } from \"../utils/action\";\nimport {\n getCustomElementAttrs,\n defineElement,\n removeCustomElementAttrs,\n} from \"../utils/element\";\nimport { registerElement } from \"./core-element\";\n\nexport const customElement = defineElement({\n name: RealmTagNames.CUSTOM_ELEMENT,\n\n /**\n * Preparing attributes and states for `custom-element` element\n * @param element RealmElement\n */\n onBeforeInit(element) {\n //#region register attributes and states definition\n const mutableStores: Array<\n [string, typeof setAttrRegistry | typeof setStateRegistry]\n > = [\n [RealmTagNames.ELEMENT_ATTR, setAttrRegistry],\n [RealmTagNames.ELEMENT_STATE, setStateRegistry],\n ];\n\n const customElementName = element.$attr<string>(RealmAttributeNames.NAME);\n for (const [tagName, setRegistry] of mutableStores) {\n const attrs = getCustomElementAttrs(element, tagName);\n if (attrs) setRegistry(customElementName, attrs);\n removeCustomElementAttrs(element, tagName);\n }\n //#endregion\n },\n\n /**\n * Initializing custom element\n * @param element RealmElement\n */\n onInit(element) {\n registerElement(element.$attr<string>(RealmAttributeNames.NAME)).call(this);\n },\n\n /**\n * Mounting custom element\n * @param element RealmElement\n */\n onMounted(element) {\n element._remove();\n },\n});\n","import { importElement } from \"./elements/import-element\";\nimport {\n importScriptElement,\n importStyleElement,\n} from \"./elements/import-resource\";\nimport {\n isVisibleElement,\n isHiddenElement,\n} from \"./elements/visibility-element\";\nimport { repeatListElement } from \"./elements/repeat-list\";\nimport { globalStateElement } from \"./elements/global-state\";\nimport { webAppElement } from \"./elements/web-app\";\nimport { customElement } from \"./elements/custom-element\";\nimport { elementFlow } from \"./elements/element-flow\";\n\nconst ASYNC_ELEMENT = [\n importElement,\n importScriptElement,\n importStyleElement,\n repeatListElement,\n isVisibleElement,\n isHiddenElement,\n elementFlow,\n];\n\nconst SYNC_ELEMENT = [globalStateElement, customElement, webAppElement];\n\n(async () => {\n for (const defineElement of ASYNC_ELEMENT) await defineElement();\n for (const defineElement of SYNC_ELEMENT) defineElement();\n})();\n"],"mappings":";;;;;;;;;;;;AAAO,IAAM,sBAAsB;AAAA,EACjC,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,WAAW;AAAA,EACX,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AACZ;AAEO,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AACT;;;ACvCO,IAAM,eAAe;AAErB,IAAM,mBAAmB;AAEzB,IAAM,eAAe;AAErB,IAAM,cAAc;AAEpB,IAAM,gBAAgB;AAEtB,IAAM,eAAe;AAErB,IAAM,cAAc;AAEpB,IAAM,aAAa;AAEnB,IAAM,kBAAkB;AAExB,IAAM,iBAAiB;AAEvB,IAAM,qBAAqB;AAE3B,IAAM,QAAQ;AAEd,IAAM,YAAY;AAElB,IAAM,mBAAmB;AAEzB,IAAM,oBAAoB;AAE1B,IAAM,cAAc;AAEpB,IAAM,eAAe;AAErB,IAAM,eAAe;AAErB,IAAM,cAAc;AAEpB,IAAM,MAAM;AAEZ,IAAM,eAAe;AAAA,EAC1B,WAAW;AAAA,EACX,eAAe;AAAA,EACf,cAAc;AAAA,EACd,2BAA2B;AAAA,EAC3B,WAAW;AAAA,EACX,wBAAwB;AAAA,EACxB,UAAU;AACZ;;;AC9CO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AACR;;;ACtBO,IAAM,iBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACR;;;ACHO,IAAM,gBAAgB,KAAK;AAE3B,IAAM,YAAY,KAAK;AAEvB,IAAM,oBAAoB,CAAC,QAAuB,iBACvD,OAAO,UAAU,WAAW,cAAc,KAAK,IAAI,GAAG;AAEjD,IAAM,gBAAgB,CAAC,UAC5B,UAAU,kBAAkB,KAAK,CAAC;;;ACX7B,IAAM,SAAS,CAAC,WAAsB,OAAe,UAC1D,QAAQ,IAAI,EAAE,GAAG,SAAS;;;ACDrB,IAAM,2BAA2B;AAEjC,IAAM,sBAAsB;AAEnC,IAAM,WAAW,iCAAiC,KAAK,UAAU,SAAS;AAEnE,IAAM,4BAA4B,WACrC,yGACA;AAEG,IAAM,qBAAqB;;;ACkB3B,IAAM,aAAN,MAAiB;AAAA,EACtB;AAAA,EACA;AAAA,EAEA,cAAc;AACZ,SAAK,UAAU,UAAU;AACzB,SAAK,aAAa,UAAU;AAAA,EAC9B;AAAA,EAEA,IACE,WACA,OACA,SACA;AACA,UAAM,YAAY,OAAO,KAAK,SAAS,SAAS;AAChD,UAAM,WACJ,OAAO,UAAU,aACZ,MAA2B,SAAS,IACrC;AACN,QAAI,YAAY,uBAAqB;AACnC,eAAS,OAAO,GAAG;AAAA,QACjB;AAAA,QACA,kBAAkB,QAAyB;AAAA,MAC7C;AAAA,IACF;AACA,WAAO,KAAK,SAAS,WAAW,QAAQ;AACxC;AAAA,MAAQ,KAAK;AAAA,MAAY,CAAC,OACxB,IAAI,QAAQ,MAAM,CAAC,WAAW,UAAU,SAAS,CAAC;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,IAAO,MAAe,SAAwB;AAC5C,QAAI,YAAY,uBAAqB;AACnC,YAAM,QAAQ,SAAS,OAAO,GAAG,QAAQ,IAAI;AAC7C,UAAI,UAAU;AAAW,eAAO,UAAU,cAAc,KAAK,CAAC;AAAA,IAChE;AACA,WAAO,OAAO,KAAK,SAAS,IAAI;AAAA,EAClC;AAAA,EAEA,MAAM,UAAU,UAAyB;AACvC,SAAK,SAAS,QAAQ;AACtB,WAAO,KAAK,YAAY,QAAQ;AAAA,EAClC;AAAA,EAEA,SAAS,UAA0B;AACjC;AAAA,MAAW,KAAK;AAAA,MAAS,CAAC,OAAO,cAC/B,UAAU,QAAQ,MAAM,CAAC,WAAW,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;;;ACtEO,IAAM,UAAU,CAAC,QAAwB,IAAI,KAAK;AAElD,IAAM,WAAW,CACtB,KACA,QAAgB,GAChB,QACW;AACX,MAAI,OAAO;AAAM,WAAO;AACxB,SAAO,IAAI,MAAM,OAAO,GAAG;AAC7B;AAEO,IAAM,WAAW,CAAC,KAAa,UACpC,IAAI,MAAM,KAAK;AAEV,IAAM,aAAa,CAAC,QAAgB,KAAK,cAAc;AAEvD,IAAM,aAAa,CACxB,KACA,aACA,iBACG,IAAI,QAAQ,aAAa,YAAY;AAEnC,IAAM,eAAe,CAAC,KAAa,gBACxC,IAAI,WAAW,WAAW;AAErB,IAAM,cAAc,CAAC,KAAa,gBACvC,IAAI,SAAS,WAAW;AAEnB,IAAM,cAAc,CAAC,QAAgB,IAAI,YAAY;AAOrD,IAAM,aAAa,CAAC,QAAwB;AACjD,MAAI,CAAC;AAAK,WAAO;AACjB,QAAM,CAAC,OAAO,GAAG,IAAI,IAAI,SAAS,WAAW,GAAG,GAAG,YAAY;AAC/D,SAAO,YAAY,KAAK,IAAI,UAAU,MAAM,YAAY;AAC1D;AAEA,IAAM,aAAa,CAAC,QAClB;AAAA,EACE,KAAK,QAAQ,0BAA0B,UAAU;AAAA,EACjD;AACF;AAOK,IAAM,OAAO,CAAC,QAAwB;AAC3C,QAAM,QAAQ,SAAS,WAAW,GAAG,GAAG,UAAU,KAAK,CAAC;AACxD,QAAM,SAAS,MAAM;AACrB,MAAI,WAAW;AAAG,WAAO;AACzB,MAAI,WAAW;AAAG,WAAO,MAAM,GAAG,CAAC;AACnC,SAAO,UAAU,OAAO,cAAc;AACxC;AAEO,IAAM,WAAW,CAAC,iBAAyB,IAAI,MAAM,YAAY;;;ACvDjE,IAAM,YAAY,CAAe,MAAM,CAAC,MAAM,IAAI,IAAkB,GAAG;AAOvE,IAAM,YAAY,CAAI,YAAkB,IAAI,IAAO,OAAO;AAO1D,IAAM,cAAc,CAAI,SAAS,MAAM,KAAQ,IAAI;AAW1D,IAAM,YACJ,CAAC,YACD,CAAC,KAAgC,MAAc,UAC7C,WAAW,UAAU,IAAiB,IAAK,IAAI,IAAI,IAAI,IAAI,IAAI;AAgB5D,IAAM,eAAe,CAC1B,QACA,aACA,WACG;AACH,MAAI,CAAC;AAAa,WAAO;AACzB,MAAI,CAAC,mBAAmB,KAAK,WAAW;AAAG,WAAO;AAClD,MAAI,CAAC,CAAC,UAAU,CAAC,aAAa,aAAa,MAAM;AAAG,WAAO;AAE3D,QAAM,UAAU,kBAAkB;AAClC,SAAO,YAAY,QAAQ,oBAAoB,CAAC,QAAQ,UAAU;AAChE,UAAM,SAAS,WAAW,SAAS,KAAK,GAAG,YAAY;AACvD,UAAM,eAAeA,aAAY,QAAQ,UAAU,OAAO,GAAG,MAAM;AACnE,WAAO,OAAO,iBAAiB,WAC3B,cAAc,YAAY,IAC1B;AAAA,EACN,CAAC;AACH;AAOO,IAAM,gBAAgB,CAC3B,QACA,SAAiB,kBACJ;AACb,QAAM,UAAU,UAAU,MAAM;AAChC,SAAOA;AAAA,IACL;AAAA,IACA,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,UAAI,OAAO,UAAU;AACnB,eAAOA;AAAA,UACL,cAAc,KAAgC;AAAA,UAC9C,CAACC,MAAK,SAAS;AAAA,YACb,GAAGA;AAAA,YACH,GAAG,SAAS,eAAe,MAAM,eAAe;AAAA,UAClD;AAAA,UACA;AAAA,QACF;AACF,aAAO,CAAC,GAAG,KAAK,GAAG,SAAS,eAAe,KAAK;AAAA,IAClD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAOO,IAAM,UAAU,CAAC,UAAU,MAAM,QAAQ,KAAK;AAQ9C,IAAM,UAAU,CACrB,OACA,OAEA,KAAKD,aAAY,YAAY,KAAK,GAAG,CAAC,KAAK,MAAS,UAAkB;AACpE,OAAK,MAAM,KAAK;AAChB,SAAO;AACT,CAAC;AAQI,IAAM,aAAa,CACxB,KACA,OACG,IAAI,QAAQ,EAAE;AAQZ,IAAM,cAAc,CACzB,OACA,OACG,MAAM,QAAQ,EAAE;AAEd,IAAMA,eAAc,CACzB,OACA,IACA,iBACG,MAAM,OAAO,IAAI,YAAY;AAE3B,IAAM,YAAY,CAAO,OAAY,UAAa,MAAM,KAAK,KAAK;AAElE,IAAM,WAAW,CAAI,UAAe,MAAM,IAAI;AAE9C,IAAM,WAAW,CAAO,OAAY,OACzC,MAAM,IAAI,EAAE;AAEP,IAAM,YAAY,CAAI,OAAY,cACvC,MAAM,KAAK,SAAS;AAEf,IAAM,aAAa,CAAC,KAAa,cACtC,IAAI,MAAM,SAAS;AAEd,IAAM,cAAc,CACzB,OACA,OACA,gBACG,UACA,MAAM,OAAO,OAAO,aAAa,GAAG,KAAK;AAEvC,IAAM,gBAAgB,CAAI,OAAU,UAAe,MAAM,SAAS,KAAK;AAEvE,IAAM,kBAAkB,CAAC,UAC9B,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAE1B,IAAM,YAAY,CACvB,OACA,OACG,MAAM,KAAK,EAAE;AAEX,IAAM,YAAY,CACvB,OACA,OACG,MAAM,KAAK,EAAE;AAEX,IAAM,YAAY,CACvB,OACA,OACG,MAAM,UAAU,EAAE;AAEhB,IAAM,cAAc,CACzB,OACA,OACG,MAAM,OAAO,EAAE;AAEb,IAAM,SAAS,CAAO,KAAgB,QAAW,IAAI,IAAI,GAAG;AAE5D,IAAM,SAAS,CAAO,KAAgB,KAAQ,UACnD,IAAI,IAAI,KAAK,KAAK;AAEb,IAAM,SAAS,CAAI,KAAa,UAAa,IAAI,IAAI,KAAK;AAE1D,IAAM,cAAc,CACzB,YACM,OAAO,YAAY,OAAO;AAE3B,IAAM,YAAY,CAAI,WAAc,OAAO,QAAQ,MAAM;;;ACnLzD,IAAM,MAAM;AAEZ,IAAM,OAAO,IAAI;AAEjB,IAAM,MAAM;AAGZ,IAAM,QAAQ,CAAC,MAAgC,SACnD,KAAK,YAAY;AAGb,IAAM,SACX,CAAC,SAAsB,CAAC,YACtB,MAAM,WAAW,MAAM,YAAY;AAGhC,IAAM,WACX,CAAC,SACD,CAAC,SAAwB,aACrB,WAAW,MAAM,cACjB,OAAO,YAAY,WAAW,cAAc,OAAO,IAAI,GAAG;AAGzD,IAAM,UAAU,CAAC,SAAgC,MAAM;AAC5D,QAAM,UAAU;AAChB,UAAQ,SAAU,KAAqB,aAAa;AAAA,IAClD,MAAM;AAAA,IACN,gBAAgB;AAAA,EAClB,CAAC;AACD,SAAO,QAAQ,OAAO,EAAE;AAC1B;AAGO,IAAM,UACX,CAAC,SAA0B,CAAC,SAAe,cACxC,YAAY,MAAM,OAAO,OAAO;AAG9B,IAAM,kBACX,CAAC,SACD,CAAC,SAAiD;AAChD,MAAI,CAAC;AAAM;AAEX,QAAM,UAAU,OAAO,IAAmB;AAC1C,QAAM,UACJ,gBAAgB,sBACZ,QAA6B,IAAI,EAAE,UACnC;AACN,UAAqB,IAAI,EAAE,SAAS,QAA4B,IAAI,EAAE,CAAC;AACzE;AAGK,IAAM,UAAU,CAAC,SAAkB,CAAC,aACxC,WAAW,MAAM,OAAO;AAGpB,IAAM,WACX,CAAC,SACD,CAAC,YAA8B,mBAC5B,iBAAiB,MAAM,YAAY,UAAU;AAG3C,IAAM,iBAAiB,CAAI,YAChC,IAAI,cAAc,OAAO;AAGpB,IAAM,kBAAkB,MAAM,IAAI,uBAAuB;AAEzD,IAAM,cACX,CAAC,SAAsB,CAAC,UAAkB,aACvC,WAAW,MAAM,gBAAgB,QAAQ;AAGvC,IAAM,SACX,CAAC,SACD,CACE,YACA,YACG;AACH,QAAM,KAAK,WAAW;AACtB,QAAM,eAAe,GAAG,aAAa,KAAK,EAAE;AAC5C,QAAM,kBAAkB,GAAG,gBAAgB,KAAK,EAAE;AAClD,QAAM,kBAAkB,CAAC,MAAc,UACrC,QAAQ,OAAO,GAAG,IAAI,IAAI;AAE5B;AAAA,IACE,WAAW,OAAO,CAAC,SAAS,IAAI;AAAA,IAChC,CAAC,CAAC,MAAM,KAAK,MAAM;AACjB,UAAI,OAAO,UAAU,WAAW;AAC9B,cAAM,aAAa,kBAAkB,KAAK;AAC1C,qBAAa,MAAM,UAAU;AAC7B,wBAAgB,MAAM,UAAU;AAChC;AAAA,MACF;AAEA,UAAI,OAAO;AACT,qBAAa,MAAM,YAAY;AAAA,MACjC,OAAO;AACL,wBAAgB,IAAI;AAAA,MACtB;AAEA,sBAAgB,MAAM,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;AAGK,IAAM,QACX,CAAC,SACD,CAAC,MAAc,OAAsB,YACnC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO;AAGlC,IAAM,QACX,CAAC,SAAsB,CAAC,MAAc,OAAe,YACnD,MAAM,IAAI,EAAE,GAAG,cAAc,QAAQ,OAAO,OAAO;AAGhD,IAAM,SACX,CAAC,SACD,CAAC,YAAkD,YACjD,OAAO,IAAI,EAAE,YAAY,OAAO;AAG7B,IAAM,UAAU,CACrB,MACA,UAGG,QAAQ,CAAC,CAAC,SAAS,KAAK,OAAO,GAAG,KAAK;AAGrC,IAAM,YACX,CAAC,SACD,CAAC,MAAc,UAA0B,aACtC,WAAW,MAAM,iBAAiB,MAAM,QAAQ;AAG9C,IAAM,eACX,CAAC,SACD,CAAC,MAAc,UAA0B,aACtC,WAAW,MAAM,oBAAoB,MAAM,QAAQ;AAGjD,IAAM,kBACX,CAAC,SACD,CAAI,MAAc,UAA8B,YAC9C,UAAU,IAAI;AAAA,EAAE,eAAe;AAAA,EAAM,CAACE,WACpC,UAAU,MAAM,WAAW,MAAM,CAACA,OAAM,MAAM,CAAC;AACjD;AAGG,IAAM,aACX,CAAC,SACD,CAAI,MAAc,QAAY,aAC3B,WAAW,MAAM;AAAA,EAChB,IAAI,YAAe,eAAe,MAAM;AAAA,IACtC;AAAA,EACF,CAAC;AACH;AAEG,IAAM,SACX,CAAC,SACD,CAAC,MAAuB,OAAgB,YAA0B;AAChE,QAAM,QAAQ,MAAM,WAAW,IAAI;AAAA,IACjC,oBAAoB;AAAA,IACpB;AAAA,EACF;AACA,MAAI;AAAO,WAAO,CAAC,OAAO,KAAK,CAAC;AAClC;AAGK,IAAM,UAAU,MACrB;AAAA,EACE,WAAW,KAAK,OAAO,EAAE,SAAS,GAAG,cAAc,YAAY;AACjE,EAAE,SAAS,EAAI;AAGV,IAAM,QAAQ,CAAC,YAAsB,SAAS;AAG9C,IAAM,QAAQ,CAAC,SAA6B,MAAM,KAAK;AAGvD,IAAM,MAAM,CAAC,SAA6B,CAAC,aAC/C,WAAW,MAAM;AAGb,IAAM,WAAW,CAAC,SAAsB,CAAC,YAC9C,YAAY,WAAW,OAAO,OAAO;AAGhC,IAAM,SACX,CAAC,SACD,CAAI,aACD,WAAW,MAAM,UAAU,IAAI;AAG7B,IAAM,YAAY,CAAC,UAAkB,UAA4B;AACtE,MAAI,CAAC,QAAQ,KAAK;AAAG,WAAO;AAC5B,SAAOC;AAAA,IACL,MAAM,OAAO,CAAC,SAAS,QAAQ,IAAI,CAAC;AAAA,IACpC,CAAC,KAAK,CAAC,UAAU,SAAS,MAAM;AAC9B,YAAM,sBAAsB,KAAK;AACjC,UAAI;AACF,eAAO,IAAI,WAAW,YAAY,sBAAsB;AAC1D,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;AAGO,IAAM,MACX,CAAC,SACD,CACE,UACA,OACA,aAEC,WAAW,OAAO,cAAiB,UAAU,UAAU,KAAK,CAAC;AAG3D,IAAM,SACX,CAAC,SACD,CACE,UACA,OACA,aAEC,WAAW,OAAO,iBAAoB,UAAU,UAAU,KAAK,CAAC;AAG9D,IAAM,YACX,CAAC,SACD,CAAC,YACC,aAA0B,WAAW,MAAM,QAAQ;AAGhD,IAAM,SACX,CAAC,SACD,CAAC,YACC,aAA0B,WAAW,MAAM,UAAU;AAElD,IAAM,YAAY,CAAC,SAAe,KAAK;AAEvC,IAAM,aAAa,CAAC,SAAe,KAAK;AAExC,IAAM,SAAS,CAAC,SAAsB,CAAC,YAC5C,aAAmB,WAAW,OAAO,cAAc,CAAC,CAAC;AAEhD,IAAM,WAAW,CAAC,SAAsB,CAAC,YAC9CA;AAAA,EACE,OAAO,IAAI,EAAE,OAAO;AAAA,EACpB,CAAC,KAAK,SAAS;AACb,QAAI,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI;AACtC,WAAO;AAAA,EACT;AAAA,EACA,CAAC;AACH;AAGK,IAAM,QACX,CAAC,SACD,CAAI,MAAc,aACf,WAAW,OAAO,eAAe,IAAI;AAGnC,IAAM,WACX,CAAC,SAAsB,CAAC,MAAc,aACnC,WAAW,MAAM,aAAa,IAAI;AAGhC,IAAM,QAAQ,CAAC,SAAsB,CAAC,MAAc,YACzD,MAAM,IAAI,EAAE,GAAG,cAAc,QAAQ,OAAO;AAGvC,IAAM,MACX,CAAC,SACD,CACE,UACA,iBACA,cAEA,IAAI,IAAI;AAAA,EACN;AAAA,EACA,QAAQ,eAAe,IAClB,kBACA,CAAC,CAAC,iBAAiB,SAAS,CAAC;AACpC;AAGG,IAAM,OACX,CAAC,SACD,CACE,UACA,iBACA,cAEA,OAAO,IAAI;AAAA,EACT;AAAA,EACA,QAAQ,eAAe,IAClB,kBACA,CAAC,CAAC,iBAAiB,SAAS,CAAC;AACpC;AAGG,IAAM,YACX,CAAC,SACD,CACE,UACA,iBACA,cAEA,IAAI,IAAmB;AAAA,EACrB;AAAA,EACA,QAAQ,eAAe,IAClB,kBACA,CAAC,CAAC,iBAAiB,SAAS,CAAC;AAAA,EAClC,QAA4B,IAAI,EAAE;AACpC;AAGG,IAAM,aACX,CAAC,SACD,CACE,UACA,iBACA,cAEA,OAAO,IAAmB;AAAA,EACxB;AAAA,EACA,QAAQ,eAAe,IAClB,kBACA,CAAC,CAAC,iBAAiB,SAAS,CAAC;AAAA,EAClC,QAA4B,IAAI,EAAE;AACpC;AAGG,IAAM,gBAAgB,CAAC,SAAiB,GAAG,cAAc;AAGzD,IAAM,iBAAiB,CAAC,SAAiB,GAAG,eAAe;AAG3D,IAAM,UACX,CAAC,SACD,CAAwB,aACrB,WAAW,MAAM;AAGf,IAAM,cAAc,CAAC,SAAsB,CAAC,aAChD,WAAW,MAAM;AAEb,IAAM,UAAU,CAAC,SAA6B,MAAM,KAAK;AAEzD,IAAM,QAAQ,CAAC,SAA0B,MAClC,KAAK,YAAY;AAExB,IAAM,QACX,CAAC,SACD,MACE,MAAM,IAAI,EAAE,EAAE;AAEX,IAAM,UAAU,CAAC,WAAmB;AACzC,QAAM,YAAY,IAAI,UAAU;AAChC,SAAO,UAAU,gBAAgB,QAAQ,eAAe,IAAI;AAC9D;;;AC7YO,IAAM,gBAAgB;AAEtB,IAAM,mBAAmB;AAAA,EAC9B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AACV;;;ACLO,IAAM,WAAW,CACtB,UACA,YACA,UACG;AACH,QAAM,KAAK,aAAa,aAAa,YAAY,aAAa;AAC9D,QAAM,MAAM,aAAa,aAAa,gBAAgB,aAAa;AACnE,QAAM,KAAK,aAAa,aAAa,eAAe,aAAa;AACjE,QAAM,MACJ,aAAa,aAAa,4BAA4B,aAAa;AACrE,QAAM,KAAK,aAAa,aAAa,YAAY,aAAa;AAC9D,QAAM,MACJ,aAAa,aAAa,yBAAyB,aAAa;AAClE,QAAM,WAAW,aAAa,aAAa,WAAW,aAAa;AAEnE,QAAM,qBAAqB,CAAC,QAAQ,OAAO,EAAE,SAAS,KAAK,KAAK,MAAM,CAAC,KAAK;AAC5E,MAAI,oBAAoB;AACtB,WACG,CAAC,CAAC,MAAM,UAAU,MAClB,CAAC,CAAC,OAAO,UAAU,OACnB,CAAC,CAAC,YAAY,YAAY,OAAO,QAAQ;AAAA,EAE9C;AAEA,SACG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MACpB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OACrB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAClB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OACpB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAClB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAEzB;;;ACDA,IAAM,WAAW,CAAC,SAAuB,MAAM;AAE/C,IAAM,eAAe,CAAC,MAAoB,UAAmB;AAC3D,MAAI,CAAC;AAAO,WAAO,MAAM;AACzB,OAAK,eAAe;AACtB;AAEA,IAAM,UAAU,CAAC,OAA4B,UAAmB;AAC9D,MAAI,CAAC;AAAO,WAAO,MAAM;AACzB,QAAM,UAAU;AAClB;AAEA,IAAM,mBAAmB,CACvB,OACA,UACA,cACG,MAAM,YAAY,UAAU,SAAS;AAE1C,IAAM,mBAAmB,CAAC,OAA4B,aACpD,MAAM,iBAAiB,QAAQ;AAEjC,IAAM,kBAAkB,CACtB,QACA,aAEA,QAAQ,QAAQ,CAAC,UAAU,QAAQ,OAAO,OAAO,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAEtE,IAAM,sBAAsB,CAAC,SAClC,QAAQ,IAAI,EAAE,EAAE;AAEX,IAAM,eAAe,CAAC,SAA6B,MAAM;AAC9D,QAAM,QAAQ,IAAI,cAAc;AAChC,YAAU,oBAAoB,IAAI,GAAG,KAAK;AAC1C,SAAO;AACT;AAEO,IAAM,UAAU,CACrB,MACA,MACA,OACA,YAAqB,SAClB;AACH,QAAM,UAAU,GAAG,iBAAiB,iBAAiB,IAAI,OAAO,KAAK,IAAI,CAAC;AAC1E,QAAM,QAAQ,SAAS,IAAI;AAC3B,MAAI,CAAC;AAAO,WAAO;AAEnB,QAAM,cAAc,MAAM,iBAAiB,OAAO,OAAO;AACzD,MAAI,UAAU;AAAW,WAAO,YAAY;AAE5C,QAAM,cAAc,MAAM,iBAAiB,OAAO,SAAS,GAAG,OAAO;AACrE,MAAI,CAAC,aAAa,CAAC,YAAY,GAAG;AAChC,gBAAY;AACZ;AAAA,EACF;AAEA,cAAY;AACd;AAEO,IAAM,UAAU,CAAC,SACtB,GAAG,aAAa,mBAAmB,iBAAiB,iBAAiB,OAAO;AAEvE,IAAM,eACX,CAAC,SAA6B,CAAC,iBAAmC;AAChE,MAAI,CAAC;AAAc;AAEnB,QAAM,WAAW,MAAM,YAAY;AACnC,QAAM,QAAQ,aAAa,IAAI,EAAE;AACjC,YAAU,oBAAoB,IAAI,GAAG,KAAK;AAC1C,QAAM,YAAY,QAAQ;AAE1B,kBAAgB,CAAC,KAAK,GAAG,CAAC,SAAS;AACjC,UAAM,WAAW,aAAa,IAAI;AAClC,UAAM,UAAU;AAAA,MACd,UAAU,SAAS,yBAAyB,KAAK,CAAC;AAAA,IACpD;AACA,QAAI,CAAC,QAAQ;AAAQ;AAErB,UAAM,cAAc,SAAS,IAAI;AAGjC,UAAM,eAAeC;AAAA,MACnB,WAAW,QAAQ,WAAW,GAAG,SAAS;AAAA,MAC1C,CAAC,KAAK,UACJ,CAAC,QACG,MACA,CAAC,GAAG,KAAK,SAAS,WAAW,OAAO,KAAc,GAAG,OAAO,CAAC;AAAA,MACnE,CAAC;AAAA,IACH;AAGA;AAAA,MACE;AAAA,MACA,WAAW,UAAU,2BAA2B,aAAa;AAAA,IAC/D;AAGA;AAAA,MACE,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,QACE,SAAS,cAAc,CAAC,SAAS,UAAU,MAAM,KAAc,CAAC;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,CAAC,EAAE,SAAS,eAAe,kBAAkB,GAAG,SAAS,IAC7D;AACF,YAAM,cAAc,aAAa,SAAS,YAAY,IAClD,iBAAiB,QACjB,iBAAiB;AACrB,YAAM,cAAc,SAAS,OAAO;AACpC,cAAQ,aAAa,MAAM,WAAW;AAEtC,YAAM,WAAW,qBAAqB,iBAAiB;AACvD,YAAM,eAAe,cAAc;AACnC,UAAI;AAAU,gBAAQ,eAAe,iBAAiB,QAAQ,MAAM,CAAC;AAErE,YAAM,CAAC,aAAa,UAAU,KAAK,IAAI,aAAa,CAAC;AACrD,UAAI,CAAC;AAAa;AAClB,cAAQ,eAAe,iBAAiB,UAAU,MAAM,QAAQ;AAChE,cAAQ,eAAe,iBAAiB,YAAY,MAAM,KAAK;AAAA,IACjE;AAAA,EACF,CAAC;AAED,UAAQ,YAAY,EAAE;AACxB;AAEK,IAAM,UAAU,CAAC,OAAsB,aAC5C,MAAM;AAAA,EACJA;AAAA,IACE;AAAA,IACA,CAAC,KAAK,CAAC,UAAU,KAAK,MAAM;AAC1B,aACE,WACA,cACA;AAAA,QACEA;AAAA,UACE;AAAA,UACA,CAACC,MAAK,CAAC,UAAU,KAAK,MAAM;AAAA,YAC1B,GAAGA;AAAA,YACH,UAAU,CAAC,UAAU,KAAK,GAAG,KAAc;AAAA,UAC7C;AAAA,UACA,CAAC;AAAA,QACH;AAAA,QACA;AAAA,MACF,IACA;AACF,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;AAEK,IAAM,kBACX,CAAC,SACD,CAAC,UAAkB,MAAc,UAC/B,gBAAgB,oBAAoB,IAAI,GAAG,CAAC,SAAuB;AACjE,MAAI,aAAa,IAAI,MAAM;AAAU;AACrC,QAAM,QAAQ,KAAK;AACnB,MAAI,iBAAiB,OAAO,IAAI,MAAM;AACpC,qBAAiB,OAAO,MAAM,KAAK;AACvC,CAAC;AAEL,IAAM,qBACJ,CAAC,SACD,CAAC,CAAC,UAAU,KAAK,MACf,iBAAiB,SAAS,IAAI,GAAG,UAAU,KAAK;AAEpD,IAAM,qBACJ,CAAC,SACD,CAAC,CAAC,QAAQ,MACR,SAAS,IAAI,EAAE,eAAe,QAAQ;AAEnC,IAAM,UAAU,CACrB,SACA,MACA,OACA,UACA,iBAA0B,UACjB;AACT,QAAM,QAAQ,oBAAoB,OAAO;AACzC,QAAM,WAAW,GAAG;AAEpB,kBAAgB,OAAO,CAAC,SAAS;AAE/B,UAAM,uBACH,iBAAiB,iBAAiB,SAAS,YAAY;AAC1D,YAAQ,sBAAsB,MAAM,MAAM,UAAU,KAAK;AAGzD,UAAM,QAAQ,QAAQ,iBAAiB,OAAO,IAAI;AAClD,UAAM,OAAO,QAAQ,iBAAiB,MAAM,IAAI;AAChD,QAAI,CAAC,SAAS,CAAC;AAAM;AACrB,QAAK,SAAS,UAAU,QAAU,QAAQ,SAAS;AAAO;AAE1D,UAAM,eAAe,OAAO;AAC5B,YAAQ,eAAe,iBAAiB,OAAO,MAAM,QAAQ;AAE7D,UAAM,WAAW,QAAQ,eAAe,iBAAiB,UAAU,IAAI;AACvE,UAAM,SAAS,QAAQ,iBAAiB,OAAO,IAAI;AACnD,UAAM,UAAU;AAAA,MAAS,WAAW,QAAQ,kBAAkB;AAAA,MAAG,CAAC,UAChE,WAAW,OAAO,KAAc;AAAA,IAClC;AACA,UAAM,cAAc,CAAC,CAAC;AAEtB,UAAM,aAAa;AAAA,MACjB,eAAe,iBAAiB;AAAA,MAChC;AAAA,IACF;AAEA,UAAM,SAAS,SAAS,UAAU,YAAY,QAAQ;AACtD,UAAM,gBAAgB,cAAc,SAAS;AAE7C,QAAI,CAAC,eAAe;AAClB,UAAI,CAAC,UAAU,SAAS,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,QAAQ,CAAC;AAChE;AACF,aAAO,QAAQ,SAAS,mBAAmB,IAAI,CAAC;AAAA,IAClD;AAEA,YAAQ,SAAS,mBAAmB,IAAI,CAAC;AAAA,EAC3C,CAAC;AACH;;;AC1PO,IAAM,YAAN,cACG,YAEV;AAAA;AAAA,EAEE;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA,SAAkB,OAAO,IAAI;AAAA;AAAA,EAG7B,QAAQ,CAAC,MAAqB,YAA0B;AACtD,UAAM,iBAAiB,MAAO,KAAK,QAAQ,GAAG;AAC9C,cAAmB,MAAM,SAAS,GAAG,MAAM,IAAI,eAAe;AAAA,EAChE;AAAA;AAAA,EAGA,kBAA2B,gBAAgB,IAAI;AAAA,EAC/C,gBAAgB,CAAC,gBACf,eACS,QAAQ,IAAI,EAAW,OAAO,IAAI,EAAE,WAAW,GAAG,KAAK,QAAQ,CAAC;AAAA,EAC3E,WAAoB,SAAS,IAAI;AAAA,EACjC,UAAmB,QAAQ,IAAI;AAAA,EAC/B,UAAmB,QAAQ,IAAI;AAAA,EAC/B,UAAmB,QAAQ,IAAI;AAAA,EAC/B,WAAoB,SAAS,IAAI;AAAA,EACjC,iBAA0B;AAAA,EAC1B,kBAA2B;AAAA,EAC3B,SAAkB,OAAO,IAAI;AAAA,EAC7B,QAAiB,MAAM,IAAI;AAAA,EAC3B,cAAuB,YAAY,IAAI;AAAA,EACvC,QAAiB,MAAM,IAAI;AAAA,EAC3B,SAAkB,OAAO,IAAI;AAAA,EAC7B,UAAmB;AAAA,EACnB,YAAqB,UAAU,IAAI;AAAA,EACnC,eAAwB,aAAa,IAAI;AAAA,EACzC,kBAA2B,gBAAgB,IAAI;AAAA,EAC/C,aAAsB,WAAW,IAAI;AAAA,EACrC,SAAkB,OAAO,IAAI;AAAA;AAAA;AAAA,EAI7B,QAAQ,CAAC,YAA+B,MAAM,WAAW,IAAI;AAAA,EAC7D,UAAmB;AAAA,EACnB,QAAiB,MAAM,IAAI;AAAA,EAC3B,MAAe,IAAI,IAAI;AAAA,EACvB,WAAoB,SAAS,IAAI;AAAA,EACjC,UAAmB,QAAQ,IAAI;AAAA,EAC/B,cAAuB,YAAY,IAAI;AAAA,EACvC,UAAmB,QAAQ,IAAI;AAAA,EAC/B,QAAiB,MAAM,IAAI;AAAA,EAC3B,QAAQ,CAAI,YAA+B,MAAM,WAAW,IAAI,EAAK;AAAA,EACrE,SAAkB,OAAO,IAAI;AAAA,EAC7B,YAAqB;AAAA,EACrB,MAAe,IAAI,IAAI;AAAA,EACvB,SAAkB,OAAO,IAAI;AAAA,EAC7B,YAAqB,UAAU,IAAI;AAAA,EACnC,SAAkB,OAAO,IAAI;AAAA,EAC7B,SAAkB,OAAO,IAAI;AAAA,EAC7B,WAAoB,SAAS,IAAI;AAAA,EACjC,QAAiB,MAAM,IAAI;AAAA,EAC3B,WAAoB,SAAS,IAAI;AAAA,EACjC,QAAiB,MAAM,IAAI;AAAA,EAC3B,MAAe,IAAI,IAAI;AAAA,EACvB,OAAgB,KAAK,IAAI;AAAA,EACzB,YAAqB,UAAU,IAAI;AAAA,EACnC,aAAsB,WAAW,IAAI;AAAA,EACrC,gBAAyB;AAAA,EACzB,iBAA0B;AAAA;AAAA;AAAA,EAI1B,eAA0B,aAAa,IAAI;AAAA,EAC3C,eAA0B,aAAa,IAAI;AAAA,EAC3C,UAAqB;AAAA,EACrB,kBAA6B,gBAAgB,IAAI;AAAA,EACjD,UAAqB;AAAA,EACrB,UAAqB;AAAA;AAEvB;;;ACnGO,IAAM,YAAY,CACvB,SACA,YACgB;AAChB,MAAI,QAAQ,WAAW,SAAS,OAAO;AACvC,SAAO,CAAC,OAAO,MAAM,aAAa,KAAK,CAAC;AAC1C;AAEO,IAAM,aAAa,CACxB,SACA,YACgB;AAChB,MAAI,WAAW,YAAY,SAAS,OAAO;AAC3C,SAAO,CAAC,UAAU,MAAM,cAAc,QAAQ,CAAC;AACjD;AAEO,IAAM,UAAU,CAAC,YAA+C;AACrE,MAAI,MAAM,sBAAsB,OAAO;AACvC,SAAO,CAAC,KAAK,MAAM,qBAAqB,GAAG,CAAC;AAC9C;;;ACQO,IAAM,eAAN,cAA2B,UAAU;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAqB,IAAI,WAAW;AAAA,EACpC,iBAAiB,UAAmC;AAAA,EACpD,gBAAgB,UAAmC;AAAA,EACnD,gBAAyD,CAAC;AAAA,EAE1D,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAuB;AACrB,UAAM;AAEN,SAAK,OAAO;AACZ,SAAK,KAAK,KAAK,QAAQ;AACvB,SAAK,YAAY;AACjB,SAAK,cAAc;AACnB,SAAK,qBAAqB;AAE1B,mBAAe,IAAI;AACnB,SAAK,MAAM,KAAK,MAAM,CAAC;AACvB,aAAS,IAAI;AACb,YAAQ,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,EACtC;AAAA,EAEA,UAAU,UAA4C;AACpD,cAAU,KAAK,eAAe,QAAQ;AAAA,EACxC;AAAA,EAEA,MAAM,oBAAoB;AACxB,UAAM,CAAC,WAAW,IAAI;AAAA,MACpB;AAAA,MACA,CAAC,UAAU,WAAW,kBAAkB;AACtC;AAAA,UAAQ,KAAK;AAAA,UAAe,CAAC,aAC3B,WAAW,UAAU,WAAW,aAAa;AAAA,QAC/C;AACA,aAAK,qBAAqB,MAAM,UAAU,WAAW,aAAa;AAAA,MACpE;AAAA,IACF;AACA,gBAAY;AAAA,EACd;AAAA,EAEA,uBAAuB;AACrB,SAAK,cAAc,IAAI;AAAA,EACzB;AACF;;;ACjBO,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,kBAAA,YAAS;AACT,EAAAA,kBAAA,YAAS;AACT,EAAAA,kBAAA,aAAU;AACV,EAAAA,kBAAA,WAAQ;AACR,EAAAA,kBAAA,YAAS;AACT,EAAAA,kBAAA,UAAO;AACP,EAAAA,kBAAA,iBAAc;AAPJ,SAAAA;AAAA,GAAA;AA6BL,IAAM,gBACX,CAAC;AAAA,EACC;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACA,MACE,IAAI,QAAQ,CAAC,YAAY;AACvB,QAAM,cAAc,YAAY,MAAM,cAAc;AACpD,QAAM,YAAY,eAAe,IAAI,IAAI;AACzC,MAAI,CAAC,eAAe;AAClB,UAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAEF,iBAAe,YAAY,IAAI,EAAE,KAAK,YAAY;AAChD,mBAAe,IAAI;AACnB,YAAQ,IAAI;AAAA,EACd,CAAC;AAED,qBAAmB,IAAI;AAEvB,QAAM,sBAAsB,aAAa;AAAA,IACvC,cAAc;AACZ,YAAM,EAAE,MAAM,GAAG,OAAO,CAAC;AAAA,IAC3B;AAAA,IAEA,MAAM,oBAAoB;AACxB,YAAM,kBAAkB;AACxB,oBAAc,IAAI;AAAA,IACpB;AAAA,EACF;AAEA,iBAAe,OAAO,MAAM,eAAe,EAAE,SAAS,eAAe,CAAC;AACxE,CAAC;AAQE,IAAM,aAAa,CAAC,MAAwB,UAAyB;AAC1E,QAAM,iBAAiB,CAAC,iBACtB,OAAO,UAAU,WAAW,QAAQ,cAAc,SAAS,YAAY;AACzE,QAAM,cAAmD;AAAA,IACvD,CAAC,qBAAuB,GAAG,MAAM,CAAC;AAAA,IAClC,CAAC,uBAAwB,GAAG,MAAM,eAAe,KAAK;AAAA,IACtD,CAAC,mBAAsB,GAAG,MAAM,eAAe,IAAI;AAAA,IACnD,CAAC,qBAAuB,GAAG,MAAM,eAAe,IAAI;AAAA,EACtD;AACA,SAAO,cAAc,IAAI,IAAI,KAAK;AACpC;AAMA,IAAM,oBAAoB,CACxB,SACA,UAAkB,cAAc,iBAC7B,YAAqB,QAAQ,KAAK,OAAO,CAAC;AAMxC,IAAM,wBAAwB,CACnC,SACA,YAEA;AAAA,EACEC;AAAA,IACE,kBAAkB,SAAS,OAAO;AAAA,IAClC,CAAC,KAAK,SAAS;AACb,YAAM,OAAO,QAAQ,MAAc,oBAAoB,MAAM,IAAI;AACjE,YAAM,OAAO,QAAQ;AAAA,QACnB,oBAAoB;AAAA,QACpB;AAAA,MACF;AACA,YAAM,QAAQ,WAAW,MAAM,QAAQ,MAAM,IAAI,CAAC;AAClD,YAAM,QAAiC,CAAC,MAAM,MAAM,KAAK;AACzD,aAAO,CAAC,GAAG,KAAK,KAAK;AAAA,IACvB;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAMK,IAAM,2BAA2B,CACtC,SACA,YACG,QAAQ,kBAAkB,SAAS,OAAO,GAAG,CAAC,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAE7E,IAAM,eAAe,CACnB,UACA,aAEA;AAAA,EACE,YAAqC,QAAQ;AAAA,EAC7C,CAAC,CAAC,IAAI,MAAM,SAAS;AACvB,GAAG,GAAG,CAAC;AAST,IAAM,WAAW,CACf,SACA,UACA,UACA,WACA,kBACG;AACH,QAAM,cAAc,MAAM;AAC1B,QAAM,eAAe,MAAM;AAE3B,QAAM,yBAAyB,MAAM,aAAa,WAAW,QAAQ;AAErE,QAAM,iBAA+C;AAAA,IACnD,CAAC,iBAAiB,KAAK,GAAG,MAAM,QAAQ,eAAe,QAAQ;AAAA,IAC/D,CAAC,iBAAiB,IAAI,GAAG,MAAM,QAAQ,cAAc,QAAQ;AAAA,IAC7D,CAAC,iBAAiB,GAAG,GAAG;AAAA,IACxB,CAAC,iBAAiB,IAAI,GAAG;AAAA,EAC3B;AACA,QAAM,eAAe,eAAe,QAAQ,IAAI;AAEhD,QAAM,kBAAuD;AAAA,IAC3D,CAAC,iBAAiB,KAAK,GAAG;AAAA,IAC1B,CAAC,iBAAiB,IAAI,GAAG;AAAA,IACzB,CAAC,iBAAiB,GAAG,GAAG;AAAA,IACxB,CAAC,iBAAiB,IAAI,GAAG;AAAA,EAC3B;AACA,QAAM,gBAAgB,gBAAgB,QAAQ,IAAI;AAElD,QAAM,iBAAmD;AAAA,IACvD,CAAC,iBAAiB,KAAK,GAAG,aAAa,UAAU,QAAQ,cAAc;AAAA,IACvE,CAAC,iBAAiB,IAAI,GAAG,aAAa,UAAU,QAAQ,aAAa;AAAA,EACvE;AACA,QAAM,eAAe,eAAe,QAAQ;AAE5C;AAAA,IACE,QAAQ,WAA4B,oBAAoB,MAAM;AAAA,MAC5D,CAAC,oBAAoB,MAAM,YAAY;AAAA,MACvC,iBAAiB,CAAC,oBAAoB,MAAM;AAAA,IAC9C,CAAC;AAAA,IACD,CAAC,eAAe;AACd,UAAI,CAAC;AAAY;AACjB,UACE,CAAC,iBACD,QAAQ,SAAS,oBAAoB,QAAQ,UAAU;AAEvD;AAEF,YAAM,OAAO,QAAQ,eAAgC,cAAc,IAAI;AACvE,YAAM,SAAS,QAAQ,eAAe,QAAQ,QAAQ,CAAC;AAEvD,YAAM,cAAc,UAAmC;AACvD,aAAO,aAAa,YAAY,oBAAoB,IAAI;AACxD,aAAO,aAAa,MAAM,oBAAoB,IAAI;AAClD,cAAQ,CAAC,YAAY,IAAI,GAAG,CAAC,gBAAgB;AAC3C,gBAAQ,MAAM,UAAU,cAAc,WAAW;AACjD,gBAAQ;AAAA,UACN;AAAA,YACE,CAAC,OAAO,aAAa,WAAW,GAAG,MAAM;AAAA,YACzC,iBAAiB,CAAC,oBAAoB,MAAM;AAAA,UAC9C;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,iBAAiB,mBAAuB;AAC1C,gBAAQ,MAAM,eAAe,IAAI;AAAA,MACnC,OAAO;AACL,gBAAQ,SAAS,eAAe,IAAI;AAAA,MACtC;AACA,cAAQ,QAAQ,IAAI;AACpB,cAAQ,QAAQ,YAAY,CAAC,IAAI,CAAC;AAClC,cAAQ,OAAO,YAAY,aAAa;AAAA,IAC1C;AAAA,EACF;AACF;AASA,IAAM,aAAa,CACjB,SACA,UACA,UACA,WACA,mBACG;AACH,QAAM,iBAAyC;AAAA,IAC7C,CAAC,iBAAiB,KAAK,GAAG,QAAQ,eAAe,QAAQ;AAAA,IACzD,CAAC,iBAAiB,IAAI,GAAG,QAAQ,cAAc,QAAQ;AAAA,IACvD,CAAC,iBAAiB,GAAG,GAAG;AAAA,EAC1B;AACA,QAAM,eAAe,eAAe,QAAQ;AAE5C,QAAM,iBAAmD;AAAA,IACvD,CAAC,iBAAiB,KAAK,GAAG,aAAa,UAAU,QAAQ,cAAc;AAAA,IACvE,CAAC,iBAAiB,IAAI,GAAG,aAAa,UAAU,QAAQ,aAAa;AAAA,EACvE;AACA,QAAM,eAAe,eAAe,QAAQ;AAE5C,QAAM,WAAW,CAAC,iBACd,IAAI,cAAc,aAAa,uBAAuB,oBAAoB,aAC1E,cAAc;AAElB,QAAM,QAAQ,CAAC,iBACX,CAAC,IACD;AAAA,IACE,CAAC,oBAAoB,MAAM;AAAA,IAC3B,CAAC,GAAG,cAAc,YAAY,YAAY;AAAA,EAC5C;AAEJ,QAAM,QAAQ,YAA6B;AAAA,IACzC,GAAG,QAAQ,OAAwB,UAAU,KAAK;AAAA,IAClD,GAAG,QAAQ;AAAA,MACT;AAAA,MACA;AAAA,MACA,iBAAiB,MAAM;AAAA,IACzB;AAAA,EACF,CAAC;AAED,UAAQ,OAAO,CAAC,SAAS;AACvB,QAAI,CAAC;AAAM;AACX,QAAI,iBAAiB,mBAAuB;AAC1C,cAAQ,MAAM,WAAW,IAAI;AAAA,IAC/B,OAAO;AACL,cAAQ,SAAS,WAAW,IAAI;AAAA,IAClC;AACA,YAAQ;AAAA,MACN,QAAQ,UAA2B,UAAU;AAAA,QAC3C,GAAG;AAAA,QACH;AAAA,UACE,oBAAoB;AAAA,UACpB,QAAQ,MAAM,oBAAoB,MAAM,IAAI;AAAA,QAC9C;AAAA,QACA,CAAC,oBAAoB,KAAK;AAAA,MAC5B,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAUA,IAAM,WAAW,CACf,SACA,UACA,aACA,MACA,MACA,OACA,mBACS;AACT,QAAM,WAAW,MAAM;AACvB,QAAM,yBAAyB,MAAM,aAAa,OAAO,IAAI;AAC7D,QAAM,kBAAuD;AAAA,IAC3D,CAAC,iBAAiB,KAAK,GAAG;AAAA,IAC1B,CAAC,iBAAiB,IAAI,GAAG;AAAA,IACzB,CAAC,iBAAiB,GAAG,GAAG;AAAA,IACxB,CAAC,iBAAiB,IAAI,GAAG;AAAA,EAC3B;AACA,QAAM,YAAY,gBAAgB,QAAQ,EAAE;AAC5C,QAAM,oBAAoB,QAAQ,SAAS,oBAAoB,QAAQ,IAAI;AAC3E,UAAQ,aAAa,CAAC,CAAC,UAAU,SAAS,YAAY,MAAM;AAC1D,UAAM,0BAA0B,iBAC5B,eACA,EAAE,gBAAgB,CAAC;AACvB,UAAM,eAAe,2BAA2B,SAAS;AACzD,QAAI;AAAc,cAAQ,MAAM,UAAU,WAAW,IAAI;AAAA,EAC3D,CAAC;AACH;AAMA,IAAM,oBAAoB,CACxB,gBAAuC,UAAU,GACjD,eAAsC,UAAU,GAChD,iBAAwC,UAAU,GAClD,eAAsC,UAAU,OAC5C;AAAA,EACJ,CAAC,iBAAiB,KAAK,GAAG;AAAA,EAC1B,CAAC,iBAAiB,IAAI,GAAG;AAAA,EACzB,CAAC,iBAAiB,GAAG,GAAG;AAAA,EACxB,CAAC,iBAAiB,IAAI,GAAG;AAC3B;AAEO,IAAM,cAAc,CACzB,SACA,UACA,aACA,MACA,OACA,gBACA,aACG;AACH,UAAQ,SAAS,MAAM,OAAO,UAAU,cAAc;AACtD;AAAA,IAAQ;AAAA,IAAa,CAAC,CAAC,MAAS,WAAQ,MACtC;AAAA,MACE;AAAA,MACA;AAAA,MACA,oBAAoB,GAAG,QAAQ,EAAE,QAAQ;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACF,WAAO,WAAW,SAAS,UAAU,MAAM,OAAO,cAAc;AAElE,MAAI,CAAC,kBAAkB,aAAa,iBAAiB;AACnD,YAAQ,OAAO,IAAI,MAAM,KAAK;AAEhC,SAAO,SAAS,SAAS,UAAU,MAAM,OAAO,cAAc;AAChE;AAOO,IAAM,iBAAiB,CAAC,SAAuB,aAAqB;AACzE,QAAM,iBAAiB,GAAG,WAAW,QAAiB,oBAAoB;AAC1E,QAAM,WAAW,QAAQ,SAAS,cAAc;AAChD,QAAM,eAAe,WAAW,iBAAiB;AACjD,UAAQ,MAAM,mBAAmB,cAAc,QAAQ,MAAM,YAAY,CAAC;AAC5E;AAKA,IAAM,mBAAmB,CACvB,QACA,YAC6B;AAC7B,QAAM,WAAW,IAAI,iBAAiB,SAAS,QAAQ;AACvD,SAAO,CAAC,MAAM,SAAS,QAAQ,QAAQ,OAAO,GAAG,MAAM,SAAS,WAAW,CAAC;AAC9E;AAEA,IAAM,gBAAgB,CACpB,aACA,gBACA,UACA,WACA,aACG,eAAe,OAAO,gBAAgB,CAAC,UAAU,WAAW,QAAQ,CAAC;AAOnE,IAAM,yBAAyB,CAAC,YACrCA;AAAA,EACE,YAAqB,QAAQ,WAAW,cAAc,GAAG,CAAC;AAAA,EAC1D,CAAC,KAAK,SAAS;AACb,UAAM,gBAAgB,UAA4B;AAClD,UAAM,eAAe,UAA4B;AACjD,UAAM,cAAc,UAA4B;AAChD,UAAM,eAAe,UAA4B;AAEjD,UAAM,CAAC,eAAe,cAAc,gBAAgB,YAAY,IAC9DA;AAAA,MACE,QAAQ,OAAO,IAAI;AAAA,MACnB,CAACC,MAAK,SAAS;AACb,cAAM,cAAc,aAAa,UAAU,IAAI,GAAG,gBAAgB;AAClE,cAAM,UAAU,QAAQ,SAAS,UAAU,IAAI,GAAG,IAAI;AACtD,YAAI,WAAW,CAAC;AAAa,iBAAOA;AAEpC,cAAM,CAAC,UAAU,MAAM,IAAI;AAAA,UACzB,UAAU,IAAI;AAAA,UACd;AAAA,QACF;AACA,cAAM,WAAW,WAAW,oBAAoB;AAEhD,cAAM,YAAY,WAAW,IAAI;AACjC,cAAM,iBAAiB,SAAS,QAAQ;AACxC,cAAM,kBAAkB,SAAS,SAAS;AAE1C,cAAM,UAAU,aAAa,WAAW,YAAY;AACpD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,cAAM,SAAS,aAAa,WAAW,WAAW;AAClD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,cAAM,WAAW,aAAa,WAAW,aAAa;AACtD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,cAAM,SAAS,aAAa,WAAW,WAAW;AAClD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,YAAI,YAAY;AAAQ,kBAAQ,YAAY,KAAK,MAAM,IAAI;AAC3D,eAAO,CAAC,eAAe,cAAc,aAAa,YAAY;AAAA,MAChE;AAAA,MACA,CAAC;AAAA,IACH;AAEF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,CAAC,MAAM,eAAe,cAAc,gBAAgB,YAAY;AAAA,IAClE;AAAA,EACF;AAAA,EACA,CAAC;AACH;AAKK,IAAM,wBAAwB,CACnC,SACA,aAMA,iBAAiB,SAAS;AAAA,EACxB,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,UAAU,CAAC,iBAAiB;AAC1B,eAAW,YAAY,cAAc;AACnC,UAAI,SAAS,SAAS;AAAc;AACpC,YAAM,WAAW,SAAS;AAE1B,YAAM,YAAY,QAAQ,MAAM,UAAU,SAAS,MAAM;AACzD,YAAM,gBAAgB,SAAS;AAC/B,UAAI,kBAAkB,WAAW;AAC/B,mBAAW,UAAU,WAAW,aAAa;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACF,CAAC;AASI,IAAM,eAAe,CAC1B,YACA,YACA,qBAEA,mBACI;AAAA,EACE,YAAY,YAAY,CAAC,CAAC,OAAO,MAAM,YAAY,UAAU;AAAA,EAC7D,CAAC,CAAC,EAAE,QAAQ,MAAM;AACpB,IACA,UAAU,YAAY,CAAC,CAAC,OAAO,MAAM,YAAY,UAAU,GAAG,GAAG,CAAC;AAQjE,IAAM,uBAAuB,CAAC,YACnC;AAAA,EACE,SAAS,YAAY,QAAQ,aAAa,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,MAAM;AAAA,IACxE;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;ACxlBF,IAAM,+BAA+B,UAA0B;AAExD,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM,cAAc;AAAA,EAEpB,MAAM,aAAa,SAAS;AAC1B,UAAM,EAAE,MAAM,WAAW,IAAI,UAAU,GAAG,MAAM,IAAI,QAAQ,SAAS;AACrE,UAAM,CAAC,EAAE,UAAU,IACjB,OAAuB,8BAAsC,IAAI,KAAK,CAAC;AAEzE,QAAI,CAAC,YAAY;AACf,UAAI;AACF,cAAM,WAAW,MAAM,MAAc,IAAI;AACzC,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,eAAO,8BAA8B,MAAM,IAAI;AAAA,MACjD,QAAE;AACA,iBAAS,oBAAoB,OAAO;AAAA,MACtC;AAAA,IACF;AAEA,UAAMC,iBAAgB,QAAQ;AAAA,MAC5B,cAAc;AAAA,MACd,CAAC;AAAA,MACD,QAAQ,OAAO,8BAA8B,IAAI,CAAC;AAAA,IACpD;AACA,QAAI,CAACA;AAAe,aAAO,QAAQ,QAAQ;AAE3C,UAAM,WAAW,QAAQ;AAAA,MACvB,oBAAoB;AAAA,MACpBA;AAAA,IACF;AACA,QAAI,oBAA4B,YAAY;AAC5C,UAAM,aAAa,CAAC,CAAC,eAAe,IAAI,iBAAiB;AACzD,QAAI,YAAY;AACd,0BAAoB,oBAAoB,eAAe,QAAQ,QAAQ;AAAA,IACzE;AACA,YAAQ,MAAM,oBAAoB,MAAM,mBAAmBA,cAAa;AAExE,QAAI,cAAc,QAAW;AAC3B,YAAM,eACJ,QAAQ,eAA4B,iBAAiB;AACvD,cAAQ,OAAO,UAAU,KAAK,GAAG,YAAY;AAC7C,cAAQ,QAAQA,gBAAe,IAAI,IAAI;AACvC,cAAQ,SAAS,cAAc,OAAO;AAAA,IACxC,OAAO;AACL,cAAQ,QAAQA,gBAAe,IAAI,IAAI;AACvC,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AACF,CAAC;;;ACjDD,IAAM,2BAA2B,UAA2B;AAE5D,IAAM,2BAA2B,UAA2B;AAE5D,IAAM,iBAAiB,CACrB,SACA,SACA,OACA,aACG;AACH,QAAM,iBAAiB,QAAQ,eAAkB,OAAO;AACxD,UAAQ,OAAO,OAAO,cAAc;AACpC,UAAQ,QAAQ,gBAAgB,QAAQ;AAC1C;AAEO,IAAM,sBAAsB,cAAc;AAAA,EAC/C,MAAM,cAAc;AAAA,EAEpB,UAAU,SAAS;AACjB,UAAM,aAAa,QAAQ,YAAY;AACvC,UAAM,oBAAoB,sBAAsB;AAChD,QAAI,CAAC;AAAmB;AAExB,UAAM,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,QAAQ,SAAS;AACnD,UAAM,WAAW,OAAO,0BAA0B,IAAI;AACtD,UAAM,WAAW,UAAU;AAC3B,QAAI,CAAC,YAAY,CAAC,UAAU;AAC1B;AAAA,QACE;AAAA,QACA,cAAc;AAAA,QACd,CAAC,CAAC,oBAAoB,KAAa,IAAI,GAAG,GAAG,UAAU,KAAK,CAAC;AAAA,QAC7D;AAAA,MACF;AACA,aAAO,0BAA0B,MAAM,IAAI;AAAA,IAC7C;AACA,YAAQ,QAAQ;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,qBAAqB,cAAc;AAAA,EAC9C,MAAM,cAAc;AAAA,EAEpB,UAAU,SAAS;AACjB,UAAM,aAAa,QAAQ,YAAY;AACvC,UAAM,oBAAoB,sBAAsB;AAChD,QAAI,CAAC;AAAmB;AAExB,UAAM,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,QAAQ,SAAS;AACnD,UAAM,WAAW,OAAO,0BAA0B,IAAI;AACtD,UAAM,eAAe,UAAU;AAC/B,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,cAAc;AAAA,MACd;AAAA,QACE,CAAC,oBAAoB,MAAM,IAAI;AAAA,QAC/B,CAAC,oBAAoB,KAAK,YAAY;AAAA,QACtC,GAAG,UAAU,KAAK;AAAA,MACpB;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,qBAAe,MAAM,MAAM,CAAC,GAAG,cAAc,IAAI,CAAC;AAClD,aAAO,0BAA0B,MAAM,IAAI;AAAA,IAC7C;AAEA,QAAI,cAAc;AAChB,qBAAe,MAAM,MAAM;AAAA,QACzB,GAAG;AAAA,QACH,QAAQ,MAAoB,EAAE,QAAQ;AAAA,MACxC,CAAC;AAAA,IACH;AACA,YAAQ,QAAQ;AAAA,EAClB;AACF,CAAC;;;ACnED,IAAM,wBAAwB,CAAC,YAC7BC;AAAA,EACE;AAAA,IACE,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,CAAC,KAAK,aAAa;AACjB,QAAI,CAAC,QAAQ,SAAS,QAAQ;AAAG,aAAO;AACxC,WAAO,CAAC,UAAU,QAAQ,MAAM,QAAQ,CAAC;AAAA,EAC3C;AAAA,EACA,CAAC;AACH;AAEF,IAAM,kBAAkB,CAAC,SAAuB,UAA4B;AAC1E,QAAM,CAAC,UAAU,UAAU,IAAI,sBAAsB,OAAO;AAC5D,SAAO,SAAS,UAAU,YAAY,GAAG,OAAO;AAClD;AAEA,IAAM,6BAA6B,CACjC,SACA,WACA,YACA,mBACA,qBACG;AACH,QAAM,eAAe,QAAQ,SAAS,oBAAoB,KAAK;AAC/D,QAAM,YAAY;AAAA,IAChB;AAAA,IACA,aAAc,gBAAgB,cAAc;AAAA,EAC9C;AACA,UAAQ;AAAA,IACN;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,YAAY,oBAAoB;AAAA,EAClC;AACF;AAEA,IAAM,0BAA0B,CAC9B,aACA,CAAC,SAAS,MAAM,MACb;AACH,QAAM,iBAAiB,aAAa,iBAAiB,QAAQ;AAE7D,SAAO,cAAc;AAAA,IACnB,MAAM;AAAA,IAEN,aAAa,SAAS;AACpB,YAAM,CAAC,QAAQ,IAAI,sBAAsB,OAAO;AAChD,qBAAe,SAAS,oBAAoB,KAAK;AACjD,qBAAe,SAAS,QAAQ;AAEhC,YAAM,OAAO,QAAQ,eAAgC,cAAc,IAAI;AACvE,YAAM,WAAqB;AAAA,QACzB;AAAA,UACE;AAAA,UACA;AAAA,YACE,CAAC,QAAQ,cAAc,GAAG,MAAM;AAAA,YAChC,CAAC,WAAW,QAAQ,QAAQ,cAAc,CAAC;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AACA,cAAQ,QAAQ;AAChB,cAAQ,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AACvC,cAAQ,QAAQ,QAAQ,aAAa,GAAG,QAAQ;AAChD,cAAQ,QAAQ,MAAM,QAAQ,OAAO,CAAC;AAAA,IACxC;AAAA,IAEA,OAAO,SAAS;AACd;AAAA,QACE;AAAA,QACA,QAAQ,MAAc,oBAAoB,KAAK;AAAA,QAC/C;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,mBAAmB,SAAS,UAAU,WAAmB;AACvD,UAAI,aAAa,oBAAoB;AAAO;AAC5C;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAM,gBAAgB;AACtB,IAAM,eAAe;AAEd,IAAM,mBAAmB;AAAA,EAC9B,cAAc;AAAA,EACd,CAAC,cAAc,aAAa;AAC9B;AAEO,IAAM,kBAAkB;AAAA,EAC7B,cAAc;AAAA,EACd,CAAC,eAAe,YAAY;AAC9B;;;ACrHO,IAAM,iBAAiB;AAAA,EAC5B,eAAe;AAAA,EACf,cAAc;AAChB;AAEO,IAAM,wBAAwB;AAAA,EACnC,SAAS;AAAA,EACT,WAAW;AAAA,EACX,cAAc;AAAA,EACd,eAAe;AAAA,EACf,IAAI;AACN;AAEO,IAAM,qCAAqC;AAAA,EAChD,CAAC,iBAAiB,IAAI,GAAG,sBAAsB;AAAA,EAC/C,CAAC,iBAAiB,KAAK,GAAG,sBAAsB;AAClD;AAEO,IAAM,kBAAkB;AAAA,EAC7B,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,gBAAgB;AAClB;AAEO,IAAM,kBAAkB;AAAA,EAC7B,WAAW;AAAA,EACX,KAAK;AAAA,EACL,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AACV;AAUO,IAAM,aAAa,GAAG,kCAA8B,oCAA+B,8BAA+B;;;ACvDlH,IAAM,mBAAmB;AAAA,EAC9B,cAAc;AAAA,EACd,IAAI;AAAA,EACJ,QAAQ;AACV;;;ACEA,IAAM,mBAAmB,CAAC,WACxB,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,MAAM,iBAAiB,GAAG,CAAC;AAElD,IAAM,kBAAkB,CACtB,aACA,UACA,QACA,WACG;AACH,QAAM,WAAW,OAAO,SAAS,KAAK,UAAU,QAAQ,IAAI,QAAQ;AACpE,QAAM,gBAAgB,UAAU;AAAA,EAAiB;AAAA;AACjD,QAAM,gBAAgB,4BAA4B,kBAAkB,cAAc;AAClF,SAAO,IAAI,gBAAgB,iBAAiB,aAAa,CAAC;AAC5D;AAEO,IAAM,oBAAoB,CAC/B,aACA,UACA,QACA,QACA,iBACG;AACH,QAAM,YAAY,gBAAgB,aAAa,UAAU,QAAQ,MAAM;AACvE,QAAM,gBAAgB,eAA4B,cAAc,MAAM;AACtE,gBAAc,SAAS,MAAM;AAC3B,mBAAe,WAAW;AAC1B,QAAI,gBAAgB,SAAS;AAC7B,YAAQ,IAAI,EAAE,aAAa;AAAA,EAC7B;AACA,SAAO,aAAa,EAAE;AAAA,IACpB,CAAC,oBAAoB,KAAK,SAAS;AAAA,IACnC,CAAC,oBAAoB,MAAM,iBAAiB,MAAM;AAAA,IAClD,CAAC,oBAAoB,KAAK;AAAA,IAC1B,CAAC,oBAAoB,WAAW,QAAQ;AAAA,EAC1C,CAAC;AACD,UAAQ,IAAI,EAAE,aAAa;AAC7B;;;ACmBA,IAAM,8BAA8B,UAGlC;AAEF,IAAM,gBAAgB,UAA+C;AA8CrE,IAAM,wBAAwB,CAAC,gBAC7B,OAAO,6BAA6B,WAAW;AAEjD,IAAM,gBAAgB,CAAC,aAAqB,UAAkB,OAC5D,OAAO,sBAAsB,WAAW,GAAG,UAAU,EAAE;AAExD,OAAmD,0BAClD;AAEK,IAAM,qBAAqB,CAAC,uBACjC;AAAA,EACE;AAAA,EACA;AAAA,EACA,UAA8B;AAChC;AAEK,IAAM,gBAAgB,CAAC,aAAqB,aACjD,OAAO,sBAAsB,WAAW,GAAG,QAAQ;AAE9C,IAAM,kBAAkB,CAAC,SAC9B,OAAO,eAAe,IAAI,KAAK,UAAU;AAEpC,IAAM,eAAe,CAC1B,MACA,aACA,SACG;AACH,QAAM,UAAU,gBAAgB,IAAI,KAAK,UAAkC;AAC3E,SAAO,SAAS,aAAa,IAAI;AACjC,SAAO,eAAe,MAAM,OAAO;AACrC;AAEO,IAAM,UAAU,CAAC,MAAc,gBACpC,OAAO,gBAAgB,IAAI,GAAG,WAAW;AAOpC,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,oBAAoB,cAAc,UAAU;AAAA;AAAA;AAAA,EAGlD,CAAC;AAED,SAAO,CAAC,cAA6B;AACnC,QAAI,CAAC;AAAmB,aAAO;AAE/B,UAAM,eAA2D;AAAA,MAC/D,CAAC,gBAAgB,SAAS,GAAG,MAC3B,QAAQ,SAAS,IAAI,YAAY,CAAC;AAAA,MACpC,CAAC,gBAAgB,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;AAAA,MAC3C,CAAC,gBAAgB,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;AAAA,MAChD,CAAC,gBAAgB,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;AAAA,MAChD,CAAC,gBAAgB,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAAA,MAC9C,CAAC,gBAAgB,MAAM,GAAG,MAAM;AAC9B,cAAM,QAAQ,CAAC,GAAI,SAA6B;AAChD,cAAM,iBAAiB,MAAM,CAAC,SAAS;AACvC,YAAI,mBAAmB;AACrB,gBAAM,CAAC,SAAS,IACd,OAAO,mBAAmB,WACtB;AAAA,YACE,GAAG;AAAA,YACH,GAAG,YAAY,CAAC;AAAA,UAClB,IACA;AACR,eAAO;AAAA,MACT;AAAA,MACA,CAAC,gBAAgB,IAAI,GAAG,MACtBC;AAAA,QACE;AAAA,QACA,CAAC,KAAK,UAAU;AACd,gBAAM,YAAY,UAAU,KAAK,CAAC,QAAQ,QAAQ,KAAK;AACvD,cAAI,eAAe,YAAY,IAAI;AACjC,wBAAY,KAAK,WAAW,CAAC;AAC7B,mBAAO;AAAA,UACT;AAEA,gBAAM,QAAQ,GAAG,gBAAgB,gBAAgB,QAAQ;AACzD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,OAAO,UAAU,WACb;AAAA,cACE,CAAC,KAAK,GAAG,OAAO,KAAK;AAAA,cACrB,GAAG;AAAA,YACL,IACA;AAAA,UACN;AAAA,QACF;AAAA,QACA,CAAC,GAAI,SAA4B;AAAA,MACnC;AAAA,MACF,CAAC,gBAAgB,GAAG,GAAG,MAAM;AAC3B,cAAM,QAAQ,CAAC,GAAI,SAA6B;AAChD,iBAAS,KAAK;AACd,eAAO;AAAA,MACT;AAAA,MACA,CAAC,gBAAgB,MAAM,GAAG,MAAM;AAC9B,cAAM,QAAQ,CAAC,GAAI,SAA6B;AAChD,oBAAY,OAAO,CAAC,WAAW,CAAC;AAChC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,eAAe,UAAU,IAAI;AAAA,EACtC;AACF;AASO,IAAM,oBAAoB,CAC/B,oBACA,mBACA,KACA,kBAC2C;AAC3C,QAAM,aAAa,kBAAkB,SAAS,aAAa;AAC3D,QAAM,cAAc,kBAAkB,OAAO,aAAa;AAC1D,QAAM,gBAAgB,kBAAkB,MAAM,aAAa;AAC3D,QAAM,aAAaA;AAAA,IACjB;AAAA,IACA;AAAA,IACA,CAAC;AAAA,EACH;AAIA,MAAI,eAAe,gBAAgB,WAAW;AAC5C,cAAU,YAAY,CAAC,oBAAoB,OAAO,aAAa,CAAC;AAAA,EAClE;AAIA,MAAI,eAAe,cAAc,QAAQ;AACvC,UAAM,EAAE,MAAM,MAAM,GAAG,IAAI,YAGxB,UAAU;AACb,UAAM,oBAAoB,SAAS,iBAAiB;AAEpD,QAAI,mBAAmB;AACrB,YAAM,WAAW,GAAG,cAAc,kBAAkB,IAAI,KAAK,kBAAkB,QAAQ;AACvF,YAAM,eAAe;AAAA,QACnB,WAAW,QAAQ,MAAM,aAAa,KAAK,eAAe;AAAA,MAC5D;AACA,gBAAU,YAAY,CAAC,oBAAoB,WAAW,QAAQ,CAAC;AAC/D;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,MACa;AAAA,IACT,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,EAAG,SAAS,UAAU,GACtB;AACA,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AACA,cAAU,YAAY;AAAA,MACpB,oBAAoB;AAAA,MACpBA;AAAA,QACE,kBAAkB,UAAU,aAAa;AAAA,QACzC,cAAc;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAIA,MACa;AAAA,IACT,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,EAAG,SAAS,UAAU,GACtB;AACA,cAAU,YAAY;AAAA,MACpB,oBAAoB;AAAA,MACpB,kBAAkB,MAAM,aAAa;AAAA,IACvC,CAAC;AAAA,EACH;AAEA,QAAM,aAAyB,CAAC,YAAY,UAAU;AACtD,SAAO,CAAC,GAAG,KAAK,UAAU;AAC5B;AAEA,IAAM,sBACJ,CAAC,oBAA4B,sBAC7B,MACA,CAAC,KAAuB,kBACtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEG,IAAM,mBAAmB,CAAC,KAAwB,SAAe;AAAA,EACtE,GAAG;AAAA,EACH,CAAC,UAAU,IAAI,GAAG,WAAW,IAAI,CAAC;AACpC;AAEA,IAAM,qBAAqB,MAAM,MAAM,CAAC,KAAwB,SAC9D,iBAAiB,KAAK,IAAI;AAQrB,IAAM,aAAa,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0C;AAExC,QAAM,iBAAiB,OACrB,gBACA,sBACG;AACH,UAAM,eAAe,YAAyB,kBAAkB,KAAK,IAAI,CAAC;AAC1E,UAAM,cAAc,mBAAmB;AACvC,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AACA,UAAM,OAAO;AAAA,MACXA;AAAA,QACE;AAAA,QACA,CAAC,KAAK,iBAAiB;AAAA,UACrB,GAAG;AAAA,UACH;AAAA;AAAA,YAEEA;AAAA,cACE,kBAAkB,OAAO,YAAY;AAAA,cACrC,YAAY;AAAA,cACZ,CAAC;AAAA,YACH;AAAA;AAAA,YAEAA;AAAA,cACE,kBAAkB,UAAU,YAAY;AAAA,cACxC,cAAc;AAAA,cACd,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF;AAEA,uBAAmB,cAAc;AACjC,uBAAmB,cAAc;AACjC,iBAAa,MAAM,gBAAgB,IAAI;AACvC,mBAAe,gBAAgB,IAAI;AAAA,EACrC;AAEA,QAAM,eACJ,CAAC,aACD,OAAO,aAA2B,sBAAqC;AACrE,UAAM,OAAO,QAAQ,MAAM,YAAY,SAAS,CAAC;AACjD,QAAI;AAAM,iBAAW,MAAM,aAAa,iBAAiB;AAAA,EAC3D;AAEF,SAAO,CAAC,gBAAgB,aAAa,OAAO,GAAG,aAAa,QAAQ,CAAC;AACvE;;;ACnYA,IAAM,cACJ,IACA,cAAc,IAAI,WAAW;AAE/B,IAAM,wBAAwB,UAAmC;AAE1D,IAAM,yBAAyB,MAAM;AAE5C,IAAM,0BAA0B,CAAC,SAC/B;AAAA,EACE,YAAqC,qBAAqB;AAAA,EAC1D,CAAC,CAAC,SAAS,MAAM,cAAc;AACjC;AAEK,IAAM,qBAAqB,CAAC,SACjC,wBAAwB,IAAI,GAAG,GAAG,CAAC;AAErC,IAAM,wBAAwB,CAAC,SAA+B;AAC5D,QAAM,UAAU,wBAAwB,IAAI,GAAG,GAAG,CAAC;AAInD,SAAO,SAAS;AAClB;AAEO,IAAM,iBAAiB,MAAM;AAEpC,IAAM,sBAAsB,CAAC,SAC3B,YAAY,IAAI,MAAM,sBAAsB,IAAI,CAAC;AAE5C,IAAM,oBAAoB,CAAC,MAAc,UAC9C,YAAY,IAAI,MAAM,OAAO,sBAAsB,IAAI,CAAC;AAEnD,IAAM,qBAAqB,cAAc;AAAA,EAC9C,MAAM,cAAc;AAAA,EAEpB,aAAa,SAAS;AACpB,UAAM,CAAC,MAAM,MAAM,OAAO,IAAI;AAAA,MAC5B;AAAA,QACE,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,MACtB;AAAA,MACA,CAAC,SAAS,QAAQ,MAAM,IAAI;AAAA,IAC9B;AACA,UAAM,QAAQ,WAA6B,MAAM,QAAQ,MAAM,CAAC;AAChE,WAAO,uBAAuB,CAAC,MAAM,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9D,sBAAkB,MAAM,oBAAoB,IAAI,KAAK,KAAK;AAAA,EAC5D;AAAA,EAEA,UAAU,SAAS;AACjB,YAAQ,QAAQ;AAAA,EAClB;AACF,CAAC;;;ACrCD,IAAM,mBAAmB,UAGvB;AAEF,IAAM,iBAAiB,UAAgD;AAEvE,IAAM,iBAAiB,UAAgD;AAEvE,IAAM,qBAAqB,CACzB,SACA,aACA,UACG,MAAM,QAAQ,OAAO,SAAS,aAAa,KAAK;AAE9C,IAAM,kBAAkB,CAC7B,aACA,UACG,mBAAmB,gBAAgB,aAAa,KAAK;AAEnD,IAAM,mBAAmB,CAC9B,aACA,UACG,mBAAmB,gBAAgB,aAAa,KAAK;AAEnD,IAAM,kBAAkB,CAAC,gBAC9B,OAAO,gBAAgB,WAAW,KAAK,UAAU;AAE5C,IAAM,mBAAmB,CAAC,gBAC/B,OAAO,gBAAgB,WAAW,KAAK,UAAU;AAEnD,IAAM;AAAA,EACJ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AACX,IAAI;AAEJ,IAAM;AAAA,EACJ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AACV,IAAI;AAEJ,IAAM;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX,IAAI;AAUG,IAAM,mBAAmB,CAC9B,SACA,OACA,YACAC,WACG;AACH,QAAM,WAAW,GAAG;AACpB,QAAM,cAAmD;AAAA,IACvD,oBAAqB,GAAG,MAAM,aAAaA,QAAO,QAAQ;AAAA,IAC1D,iCAA4B,GAAG,MAC7B,aAAa,eAAe,GAAG,QAAQ;AAAA,IACzC,+BAA2B,GAAG,MAAM,aAAa,QAAQ,QAAQ,QAAQ;AAAA,IACzE,8BAA0B,GAAG,MAAM;AACjC,YAAM,YAAoBA,OAAO;AACjC,YAAM,QAAQ,QAAQ,SAAS,SAAS;AACxC,aAAO,aAAa,OAAO,QAAQ;AAAA,IACrC;AAAA,IACA,kBAAoB,GAAG,MACrB;AAAA,MACE;AAAA,QACE,GAAG,qBAAqB,OAAO;AAAA,QAC/B,GAAG,QAAQ,SAAS,OAAO;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAAA,EACJ;AACA,SAAO,cAAc,UAAU,IAAI;AACrC;AAWO,IAAM,gBAAgB,CAC3B,SACA,MACA,OACA,YACAA,WACG;AACH,QAAM,cAAc,MAAM,iBAAiB,SAAS,OAAO,YAAYA,MAAK;AAC5E,QAAM,cAAmD;AAAA,IACvD,oBAAqB,GAAG,MAAM,WAAW,MAAM,YAAY,CAAC;AAAA,IAC5D,8BAA0B,GAAG;AAAA,IAC7B,kBAAoB,GAAG;AAAA,IACvB,iCAA4B,GAAG,MAAM,WAAW,MAAM,YAAY,CAAC;AAAA,IACnE,+BAA2B,GAAG,MAAM,WAAW,MAAM,YAAY,CAAC;AAAA,EACpE;AACA,SAAO,cAAc,UAAU,IAAI,KAAK,WAAW,MAAM,KAAK;AAChE;AASO,IAAM,WAAW,CACtB,YACA,UACA,cACA,mBAAmB,UAChB;AACH,QAAM,OAAO,aAAa,YAAY,UAAU,gBAAgB;AAChE,QAAM,UAAU,SAAS;AACzB,SAAO,CAAC,UAAU,OAAO,cAAc,OAAO;AAChD;AAMO,IAAM,kBAAkB,CAC7B,SACA,YACA,UACAA,WAGiD;AACjD,QAAM,CAAC,UAAU,IAAI;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB,YAAY,SAAS;AACxE,QAAM,CAAC,WAAW,YAAY,IAAI;AAAA,IAChC;AAAA,IACA;AAAA,EACF;AAEA,QAAM,kBAAkB,aAAa;AACrC,QAAM,iBAAiB,aAAa;AACpC,QAAM,iBAAiB,aAAa;AACpC,QAAM,uBAAuB,eAAe;AAC5C,QAAM,0BAA0B,eAAe;AAC/C,QAAM,uBAAuB,eAAe;AAC5C,QAAM,wBAAwB,eAAe;AAC7C,QAAM,uBAAuB,eAAe;AAC5C,QAAM,0BAA0B,eAAe;AAE/C,QAAM,kCACJ,yBAAyB;AAC3B,QAAM,+BACJ,2BAA2B,wBAAwB;AACrD,QAAM,0BAA0B,CAAC,mBAAmB;AACpD,QAAM,wBAAwB;AAC9B,QAAM,yBACJ,oBACC,wBACE,gCAAgC,gBAChC,mCAAmC;AACxC,QAAM,oBACJ,2BAA2B,yBAAyB;AACtD,MAAI,CAAC;AAAmB;AAExB,QAAM,CAAC,UAAU,IAAI,SAAiB,YAAY,QAAQ;AAC1D,QAAM,YAAY,eACd,cAAc,SAAS,UAAU,WAAW,YAAYA,MAAK,IAC7D;AACJ,MAAI,YAAY;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAA;AAAA,EACF;AAEA,QAAM,CAAC,EAAE,aAAa,IAAI,SAAS,YAAY,UAAU;AACzD,QAAM,kBAAkB,iBAAiB;AACzC,MAAI;AAAiB,gBAAY,CAAC;AAElC,QAAM,eAAe,aAAa;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAQO,IAAM,cAAc,CACzB,MACA,gBAEAC;AAAA,EACE,YAAqC,WAAW;AAAA,EAChD,CAAC,KAAK,CAAC,UAAU,QAAQ,MAAO,aAAa,OAAO,WAAW;AACjE;AASK,IAAM,WACX,CAAC,SAAuB,aAAqB,YAC7C,CACE,WACA,WACAD,WAEA,QAAoB,SAAS,CAAC,CAAC,YAAY,UAAU,MAAM;AACzD,QAAM,CAAC,gBAAgB,CAAC,GAAG,aAAa,IAAI;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AAEA,QAAM,gBAAgB,UAAU,eAAe,CAAC,aAAa;AAC3D,UAAM,CAAC,EAAE,OAAO,IAAI,SAAS,YAAY,QAAQ;AACjD,WAAO;AAAA,EACT,CAAC;AAED,MAAI,cAAc,UAAU,CAAC;AAAe;AAC5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAQL,IAAM,gBACJ,CAAC,SAAuB,gBACxB,CAAC,YACC,SAAS,SAAS,aAAa,OAAO;AAKnC,IAAM,sBAAsB,CAAC,YAClC,cAAc,SAAS,QAAQ,MAAM,CAAC;AAQjC,IAAM,eACX,CAAC,EAAE,MAAM,eAAe,UAAU,MAClC,MACE,OAAO,kBAAkB,MAAM,CAAC,eAAe,SAAS,CAAC;;;ACrT7D,IAAM,aAAa;AAAA,EACjB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA,MAAM;AACR;AAQO,IAAM,oBAAoB,aAAa;AAAA,EAC5C,MAAM,gBAAgB;AAAA,EAEtB,MAAM,UACJ,SACA,aACA,YACA,QACA,WACA,WACA;AACA,UAAM,CAAC,SAAS,UAAU,IAAI;AAAA,MAC5B;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,QAAI,CAAC;AACH,YAAM;AAAA,QACJ,YAAY,oBAAoB,2BAA2B,gBAAgB;AAAA,MAC7E;AAEF,UAAM,CAAC,WAAW,IAAI;AAAA,MACpB;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEA,UAAM,CAAC,yBAAyB,CAAC,GAAG,iBAAiB,IAAI,SAEvD,aAAa,gBAAgB,gBAAgB;AAC/C,UAAM,CAAC,mBAAmB,oBAAoB,IAAI;AAAA,MAChD;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEA,UAAM,CAAC,2BAA2B,CAAC,GAAG,mBAAmB,IAAI,SAE3D,aAAa,gBAAgB,cAAc;AAC7C,UAAM,CAAC,qBAAqB,sBAAsB,IAAI,SAEpD,0BAA0B,oBAAoB,MAAM;AAEtD,UAAM,qBAAqB,qBAAqB;AAChD,QAAI,CAAC;AAAoB;AAEzB,UAAM,CAAC,SAAS,WAAW,GAAG,IAAI;AAAA,MAChC;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,SAAS,aAAa,IAAI,IAAI;AAAA,MACnC;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,eAAe,CAAC,CAAC,IAAI;AAAA,MAC1B;AAAA,MACA,gBAAgB;AAAA,MAChB,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,UAAU,IAAI,QAAQ;AAC5B,YAAQ,cAAc,CAAC,eAAe;AACpC,YAAM,SAAS,YAAY,UAAU;AACrC,cAAQ;AAAA,QACN,OAAO,oBAAoB,IAAI;AAAA,QAC/B,OAAO,oBAAoB,KAAK;AAAA,MAClC;AAAA,IACF,CAAC;AAED,UAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B;AAAA,MACA,gBAAgB;AAAA,IAClB;AAEA,QAAI;AACJ,QAAI,aAAa;AACf,YAAM,CAAC,aAAa,cAAc,IAAI;AAAA,QACpC;AAAA,QACA,oBAAoB;AAAA,MACtB;AACA,UAAI,eAAe;AAAgB,eAAO;AAE1C,YAAM,CAAC,eAAe,gBAAgB,IAAI;AAAA,QACxC;AAAA,QACA,oBAAoB;AAAA,MACtB;AACA,YAAM,CAAC,cAAc,eAAe,IAAI;AAAA,QACtC;AAAA,QACA,oBAAoB;AAAA,MACtB;AACA,UAAI,oBAAoB,iBAAiB;AACvC,eAAO,iBAAiB,SAAS,eAAe,cAAc,MAAM;AAAA,MACtE;AAAA,IACF;AAEA,UAAM,kBAAkB,CACtB,gBACAE,YAEA,SAAS,SAAS,aAAa,cAAc;AAAA,MAC3C;AAAA,MACA;AAAA,MACAA;AAAA,IACF;AAEF,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,SAAS;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,CAAC,SAAS;AAAI,cAAM,SAAS,IAAI,SAAS,WAAW,SAAS;AAClE,UAAI,CAAC;AAAsB;AAE3B,YAAM,kBAAkB,MAAM,SAAS,KAAK;AAC5C,YAAM,cAAc;AAAA,QAClB,CAAC,aAAa,IAAI,GAAG,MAAM,SAAS,KAAK;AAAA,QACzC,CAAC,aAAa,IAAI,GAAG;AAAA,QACrB,CAAC,aAAa,IAAI,GAAG;AAAA,MACvB;AACA,YAAM,gBAAgB,MAAM,cAAc,MAAM,IAAI;AACpD,sBAAgB,mBAAmB,aAAa;AAAA,IAClD,SAAS,KAAP;AACA,UAAI,CAAC;AAAwB;AAC7B,sBAAgB,qBAAqB;AAAA,QACnC,SAAS,aAAa,KAAK;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;ACvJD,IAAM,gBAAgB,CAAC,SAAuB,WAAkB;AAC9D,UAAQ;AACR,QAAM,QAAQ;AAAA,IACZ,GAAG,qBAAqB,OAAO;AAAA,IAC/B,GAAG,QAAQ,SAAS;AAAA,EACtB;AAEA,QAAM,gBAAgB,CAAC,YAAoB;AAAA,IACzC;AAAA,IACA,CAAC,CAAC,oBAAoB,KAAK,OAAO,CAAC;AAAA,EACrC;AAEA,SAAO;AAAA,IACL;AAAA,MACE,GAAG;AAAA,MACH,MAAM;AAAA,QACJ,KAAK,CAAC,SAAiB,QAAQ,MAAM,IAAI,KAAK,QAAQ,IAAI;AAAA,QAC1D,KAAK,QAAQ;AAAA,MACf;AAAA,MACA,MAAM,CAAC,YACL,QAAQ,WAAW,MAAM,MAAM,cAAc,OAAO,CAAC;AAAA,MACvD,KAAK,CAAC,YACJ,QAAQ,UAAU,MAAM,MAAM,cAAc,OAAO,CAAC;AAAA,MACtD,OAAO,QAAQ,SAAS;AAAA,MACxB,YAAY,QAAQ;AAAA,MACpB,aAAa,eAAe;AAAA,MAC5B,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAQO,IAAM,eAAe,aAAa;AAAA,EACvC,MAAM,gBAAgB;AAAA,EAEtB,eAAe,CAAC,oBAAoB,SAAS;AAAA,EAE7C,UACE,SACA,aACA,YACAC,QACA;AACA,UAAM,CAAC,YAAY,IAAI;AAAA,MACrB;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEA,UAAM,iBAAiB,CAAC,CAACA,QAAO;AAChC,UAAM,cAAcA,QAAO;AAC3B,UAAM,sBAAsB,MAC1B,QAAQ,MAAM;AACZ,YAAM,aAAa,cAAc,aAAa,YAAY;AAC1D,YAAM,iBAAiB,CAAC,CAAC;AACzB,UAAI,CAAC;AAAgB,eAAO,oBAAoB;AAChD,kBAAY;AAAA,QACV;AAAA,QACA;AAAA,UACE;AAAA,UACA,CAAC,iBACGA,SACA;AAAA,YACE,GAAGA;AAAA,YACH,QAAQ;AAAA,UACV;AAAA,QACN;AAAA,MACF;AAAA,IACF,CAAC;AACH,wBAAoB;AAAA,EACtB;AACF,CAAC;;;ACtEM,IAAM,kBAAkB,aAAa;AAAA,EAC1C,MAAM,gBAAgB;AAAA,EAEtB,eAAe,CAAC,oBAAoB,IAAI;AAAA,EAExC,UACE,SACA,cACA,YACA,QACA;AACA,UAAM,CAAC,aAAa,IAAI;AAAA,MACtB;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,YAAY,aAAa,IAAI;AAAA,MAClC;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,kBAAkB,mBAAmB,IAAI;AAAA,MAC9C;AAAA,MACA,oBAAoB,KAAK,QAAQ;AAAA,IACnC;AACA,UAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,WAAW,YAAY,IAAI;AAAA,MAChC;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,UAAU,IAAI;AAAA,MACnB;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,mBAAmB,gBAAgB;AAEzC,UAAM,WAAW,MACf,cAAc,SAAS,UAAU,WAAW,UAAU,MAAM,KAC5D;AAEF,UAAM,gCAAgC;AAAA,MACpC,kBAAsB,GAAG,MAAM;AAAA,MAC/B,yBAA6B,GAAG,MAAM,cAAc,UAAU;AAAA,IAChE;AAEA,UAAM,WAAW,CAAC,cAAc,oBAAoB,KAAK,UAAU;AACnE,UAAM,YAAY,sBAAsB,KAAK,QAAQ;AACrD,QAAI,cAAc;AAClB,QAAI;AACF,oBAAc,CAAC,mBACX,8BAA8B,QAAQ,IAAI,KAAK,YAC/C,SAAS;AAEf,QAAI,iBAAiC,CAAC,OAAO;AAE7C,QAAI,eAAe;AACjB,uBAAiB,YAAY,QAAQ,WAAW,MAAM,MAAM,QAAQ,CAAC;AAAA,IACvE;AAEA,QAAI,qBAAqB;AACvB,YAAM,gBAAgB,QAAQ,MAAoB;AAClD,uBAAiB,CAAC,aAAa;AAC/B,UAAI,qBAAqB,cAAc;AACrC,yBAAiB;AAAA,UACf,cAAc,WAAW,MAAM,MAAM,QAAQ;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAEA;AAAA,MAAQ;AAAA,MAAgB,CAAC,kBACvB,cAAc,WAAW,WAAW,WAAW;AAAA,IACjD;AAAA,EACF;AACF,CAAC;;;ACxEM,IAAM,iBAAiB,aAAa;AAAA,EACzC,MAAM,gBAAgB;AAAA,EACtB,eAAe,CAAC,oBAAoB,IAAI;AAAA,EAExC,UACE,SACA,cACA,YACAC,QACA;AACA,UAAM,mBAAmB,CAAC,MAAcC,WACtC,QAAQ,OAAO,IAAI,MAAMA,MAAK;AAChC,UAAM,CAAC,QAAQ,IAAI,SAAiB,YAAY,oBAAoB,IAAI;AACxE,UAAM,CAAC,EAAE,aAAa,IAAI,SAAS,YAAY,oBAAoB,MAAM;AACzE,UAAM,WAAW,gBACb,mBAAmB,QAAQ,IAC3B,YAAY,UAAU,QAAQ,cAAc;AAChD,UAAM,cAAc,gBAAgB,oBAAoB;AACxD,UAAM,QAAQ,gBAAgB,SAAS,YAAY,UAAUD,MAAK;AAClE,gBAAY,UAAU,KAAK;AAAA,EAC7B;AACF,CAAC;AAQM,IAAM,gBAAgB,aAAa;AAAA,EACxC,MAAM,gBAAgB;AAAA,EACtB,eAAe,CAAC,oBAAoB,IAAI;AAAA,EAExC,UACE,SACA,cACA,YACAA,QACA;AACA,UAAM,CAAC,QAAQ,IAAI,SAAiB,YAAY,oBAAoB,IAAI;AACxE,UAAM,WAAW,YAAY,UAAU,QAAQ,aAAa;AAC5D,UAAM,eAAe,gBAAgB,SAAS,YAAY,UAAUA,MAAK;AACzE,UAAM,YAAY,WAAW,UAAU,QAAQ,MAAM,QAAQ,CAAC;AAC9D,UAAM,QAAQ,aAAa,SAAS;AACpC,YAAQ,MAAM,UAAU,GAAG,OAAO;AAAA,EACpC;AACF,CAAC;;;ACtDM,IAAM,iBAAiB,aAAa;AAAA,EACzC,MAAM,gBAAgB;AAAA,EAEtB,eAAe,CAAC,oBAAoB,MAAM,oBAAoB,KAAK;AAAA,EAEnE,UACE,SACA,aACA,YACAE,QACA,WACA,WACA;AACA,UAAM,CAAC,YAAY,aAAa,IAAI;AAAA,MAClC;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEA,QAAI,CAAC;AAAe;AAEpB,UAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B;AAAA,MACA,oBAAoB;AAAA,IACtB;AACA,UAAM,CAAC,WAAW,YAAY,IAAI;AAAA,MAChC;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEA,UAAM,UAAU,MACd,SAAS,SAAS,aAAa,UAAU,EAAE,WAAW,WAAWA,MAAK;AAExE,QAAI,aAAa;AACf,gBAAU,SAAS,CAAC,QAAQ;AAAA,IAC9B,WAAW,cAAc;AACvB,iBAAW,SAAS,CAAC,SAAS;AAAA,IAChC;AAAA,EACF;AACF,CAAC;;;ACtCM,IAAM,uBAAuB,aAAa;AAAA,EAC/C,MAAM,gBAAgB;AAAA,EAEtB,UACE,SACA,cACA,YACAC,QACA;AACA;AAAA,MAAQ;AAAA,MAAY,CAAC,CAAC,YAAY,QAAQ,MACxC;AAAA,QACE,QAAQ,WAAW,cAAc,CAAC,CAAC,oBAAoB,KAAK,QAAQ,CAAC,CAAC;AAAA,QACtE,CAAC,OAAO,KAAK,UAAU,IAAIA,MAAK;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACfD,IAAM,gBACJ,CAAC,kBACD,CACE,mBACA,WACA,WACA,YACG;AACH,QAAM,eAAe,CAAC,CAAC;AACvB,QAAM,cAAc,gBAChB,kBAAkB,eAClB,kBAAkB;AACtB,QAAM,gBAAgB,cAAc,sBAAsB;AAC1D,QAAM,iBAAiB,gBACnB,sBAAsB,KAAK,QAAQ,YACnC;AAEJ,cAAY,gBAAgB,CAACC,WAAU;AACrC,QAAI,CAAC,iBAAiB,gBAAgB,cAAcA,OAAM,CAAC;AAAG;AAC9D;AAAA,MAAQ,MACN,kBAAkB,WAAW,eAAe,cAAc;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,QACAA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEF,IAAM,qBAAqB,CACzB,MACA,aACA,uBAEA;AAAA,EAAQ;AAAA,EAAM,CAAC,CAAC,OAAO,OAAO,MAC5B;AAAA,IAAQ;AAAA,IAAO,CAAC,CAAC,WAAW,SAAS,MACnC,mBAAmB,aAAa,WAAW,WAAW,OAAO;AAAA,EAC/D;AACF;AAEK,IAAM,kBAAkB,WAAW;AAAA,EACxC,MAAM,eAAe;AAAA,EAErB,MAAM,QAAQ,MAAM,aAAa,mBAAmB;AAClD,uBAAmB,MAAM,qBAAqB,aAAa,cAAc,CAAC;AAAA,EAC5E;AAAA,EAEA,MAAM,SAAS,MAAM,aAAa,mBAAmB;AACnD;AAAA,MACE;AAAA,MACA,qBAAqB;AAAA,MACrB,cAAc,IAAI;AAAA,IACpB;AAAA,EACF;AACF,CAAC;;;ACrDD,IAAM,mBACJ,CACE,mBACA,eACA,cACA,WACA,YAEF,CAACC,WAAiB;AAChB,QAAM,CAAC,EAAEC,aAAY,IAAI,iBAAiB,CAAC;AAC3C,EAAAA,gBAAe;AACf,QAAM,eAAe,MACnB,kBAAkB,WAAW,eAAe,eAAe;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,IACAD;AAAA,EACF,CAAC;AAEH,MAAI,eAAe,GAAG;AACpB,oBAAgB,UAAU,cAAc,YAAY;AACpD;AAAA,EACF;AAEA,SAAO,aAAa;AACtB;AAEF,IAAME,iBACJ,CAAC,aAA4B,kBAC7B,CACE,mBACA,cACA,WACA,YAEF,CAAC,oBAAkC;AACjC,MAAI;AACJ,QAAM,cAAc,gBAChB,kBAAkB,eAClB,kBAAkB;AACtB;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAEF,IAAM,oBAAoB,CACxB,MACA,aACA,uBAEA,QAAQ,MAAM,CAAC,CAAC,OAAO,OAAO,MAAM;AAClC,QAAM,eAAe,CAAC,aAAa,OAAO,oBAAoB,QAAQ;AACtE,UAAQ,OAAO,CAAC,CAAC,UAAU,SAAS,MAAM;AACxC,QAAI,aAAa,oBAAoB;AAAU;AAC/C;AAAA,MACE,YAAY;AAAA,QACV;AAAA,QACA,oBAAoB;AAAA,QACpB;AAAA,MACF;AAAA,MACA,mBAAmB,aAAa,cAAc,UAAU,OAAO;AAAA,IACjE;AAAA,EACF,CAAC;AACH,CAAC;AAEI,IAAM,mBAAmB,WAAW;AAAA,EACzC,MAAM,eAAe;AAAA,EAErB,MAAM,QAAQ,MAAM,aAAa,mBAAmB;AAClD;AAAA,MACE;AAAA,MACA,qBAAqB;AAAA,MACrBA,eAAc,WAAW;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAM,aAAa,mBAAmB;AACnD;AAAA,MACE;AAAA,MACA,qBAAqB;AAAA,MACrBA,eAAc,aAAa,IAAI;AAAA,IACjC;AAAA,EACF;AACF,CAAC;;;AC9FM,IAAM,gBAAgB,CAAC,iBAAiB,gBAAgB;AAC/D,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,cAAc,cAAc;AAAA,EACvC,MAAM,cAAc;AAAA,EAEpB,MAAM,aAAa,SAAS;AAC1B,UAAM,gBAAgB,QAAQ,QAAsB;AACpD,QAAI,CAAC;AAAe;AAEpB,UAAM,qBAAqB,QAAQ;AAAA,MACjC,oBAAoB;AAAA,MACpB;AAAA,IACF;AAEA,eAAW,kBAAkB;AAAY,YAAM,eAAe;AAC9D,eAAW,CAAC,iBAAiB,KAAK;AAChC,YAAM,kBAAkB,oBAAoB,OAAO;AAAA,EACvD;AAAA,EAEA,MAAM,UAAU,SAAS;AACvB,UAAM,aAAa,QAAQ,YAAY;AACvC,UAAM,oBAAoB,sBAAsB;AAChD,QAAI,CAAC;AAAmB;AAExB,UAAM,cAAc,QAAQ,MAAoB;AAChD,eAAW,CAAC,EAAE,cAAc,KAAK;AAC/B,YAAM,eAAe,WAAW;AAClC,YAAQ,QAAQ;AAAA,EAClB;AACF,CAAC;;;AClCM,IAAM,oBAAoB,cAAc;AAAA,EAC7C,MAAM,cAAc;AAAA,EAEpB,aAAa,SAAS;AACpB,UAAM,WAAW,QAAQ,gBAAgB;AACzC,YAAQ,QAAQ,OAAO,GAAG,CAAC,SAAS;AAClC,cAAQ,QAAQ,QAAQ,OAAO,IAAI,GAAG,QAAQ;AAC9C,cAAQ,QAAQ,IAAI;AAAA,IACtB,CAAC;AAED,YAAQ,QAAQ;AAChB,YAAQ,OAAO;AAEf,UAAM,cAAc,QAAQ,MAAoB;AAChD,QAAI,CAAC;AAAa;AAElB,UAAM,SAAS,QAAQ,MAAc,oBAAoB,EAAE;AAC3D,UAAM,aAAa,SAAS,MAAM;AAClC,QAAI,CAAC;AAAY;AAEjB,UAAM,oBAAoB,aAAa;AACvC,UAAM,4BAA4B,YAAY;AAC9C,UAAM,2BAA2B,YAAY;AAE7C,UAAM,oBAAoB,YAAY;AACpC,iBAAW,CAAC,EAAE,EAAE,eAAe,KAAK;AAClC,cAAM,gBAAgB,aAAa,OAAO;AAAA,IAC9C;AAEA,UAAM,oBAAoB,YAAY;AACpC,iBAAW,CAAC,EAAE,cAAc,KAAK;AAC/B,cAAM,eAAe,aAAa,OAAO;AAAA,IAC7C;AAEA,UAAM,wBAAwB,CAAC,YAAkC;AAC/D,YAAM,gBAAgB,QAAQ,QAAQ;AACtC,cAAQ,OAAO;AACf,cAAQ,OAAO,aAAa;AAE5B,cAAQ,SAAS,CAAC,MAAM,UAAU;AAChC,gBAAQ;AAAA,UACN,QAAQ,OAAyB,QAAQ;AAAA,UACzC;AAAA,QACF;AAEA,cAAMC,uBAAsB,uBAAuB,OAAO;AAC1D;AAAA,UAAQ,cAAc,IAAI;AAAA,UAAG,CAAC,SAC5B;AAAA,YACE;AAAA,YACA,iBAAiB;AAAA,YACjBA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,cAAM,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAC7C;AAAA,UAAQ,cAAc,MAAM,WAAW;AAAA,UAAG,CAAC,SACzC;AAAA,YACE;AAAA,YACA,iBAAiB;AAAA,YACjBA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,sBAAsB,uBAAuB,OAAO;AAC1D;AAAA,QACE,YAAoD;AAAA,UAClD,CAAC,2BAA2B,iBAAiB,KAAK;AAAA,UAClD,CAAC,0BAA0B,iBAAiB,IAAI;AAAA,QAClD,CAAC;AAAA,QACD,CAAC,CAAC,UAAU,QAAQ,MAClB,QAAQ,UAAU,CAAC,CAAC,UAAU,MAAM;AAClC,gBAAM,cAA6C;AAAA,YACjD,CAAC,iBAAiB,IAAI,GAAG,MAAM,YAAY,MAAM,UAAU;AAAA,YAC3D,CAAC,iBAAiB,KAAK,GAAG,MACxB,kBAAkB,IAAmB,UAAU;AAAA,UACnD;AACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY,QAAQ,EAAE;AAAA,YACtB;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACL;AAAA,IACF;AAGA;AAAA,MACE,YAA2C;AAAA,QACzC,CAAC,aAAa,iBAAiB,IAAI;AAAA,QACnC,CAAC,mBAAmB,iBAAiB,KAAK;AAAA,QAC1C,CAAC,eAAe,GAAG,iBAAiB,OAAO,IAAI;AAAA,MACjD,CAAC;AAAA,MACD,CAAC,CAAC,SAAS,YAAY,aAAa,MAAM;AACxC,gBAAQ;AAAA,UACN,OAAO,aAAa,UAAgD;AAClE,kBAAM,wBACJ,QAAQ,KAAK,KAAK,gBAAgB;AAEpC,gBAAI,CAAC;AACH,qBAAO;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,uBAAuB,OAAO;AAAA,gBAC9B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEF,kBAAM,kBAAkB;AACxB,kCAAsB,KAA6B;AACnD,kBAAM,kBAAkB;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAEF;AACF,CAAC;;;AC7IM,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM,cAAc;AAAA,EAEpB,UAAU,SAAS;AACjB,YAAQ,MAAM,oBAAoB,WAAW,IAAI;AAAA,EACnD;AACF,CAAC;;;AC8BD,IAAM,gBAAgB,UAAuC;AAE7D,IAAM,iBAAiB,UAAoC;AAE3D,IAAM,wBAAwB,UAAqC;AAEnE,IAAM,kBAAkB,UAAqC;AAE7D,IAAM,sBAAsB,UAAqC;AAO1D,IAAM,kBAAkB,CAAC,gBAC9B,cAAc;AAAA,EACZ,MAAM;AAAA,EAEN,mBAAmB;AACjB,UAAM,UAAU,IAAI,GAAG;AAAA,MACrB,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB;AAAA,IACF;AAGA,UAAM,WAAW,IAAI,OAAO;AAAA,MAC1B,cAAc;AAAA,IAChB;AACA,WAAO,eAAe,aAAa,QAAQ;AAI3C,QAAI,UAAU;AACZ;AAAA,QACE,KAAK,SAAS,OAAO,EAAoB,cAAc,KAAK;AAAA,QAC5D,CAAC,UAAU,OAAO,gBAAgB,aAAa,KAAK;AAAA,MACtD;AAAA,IACF;AAIA;AAAA,MACE;AAAA,QACE,CAAC,cAAc,cAAc,qBAAqB;AAAA,QAClD,CAAC,cAAc,eAAe,eAAe;AAAA,QAC7C,CAAC,cAAc,cAAc,mBAAmB;AAAA,MAClD;AAAA,MACA,CAAC,CAAC,SAAS,QAAQ,MAAM;AACvB;AAAA,UACE;AAAA,UACA;AAAA,UACA,UAAU,YAAY,KAAK,OAAO,EAAgB,OAAO,CAAC,CAAC;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EAEF;AAAA,EAEA,aAAa,SAAS;AAEpB,YAAQ,QAAQ;AAChB,YAAQ,aAAa,OAAO,gBAAgB,WAAW,CAAC;AACxD,YAAQ,gBAAgB,OAAO,eAAe,WAAW,CAAC;AAC1D;AAAA,MACE,CAAC,uBAAuB,iBAAiB,mBAAmB;AAAA,MAC5D,CAAC,aACC,QAAQ,OAAO,UAAU,WAAW,GAAG,QAAQ,aAAa;AAAA,IAChE;AAIA,UAAM,eAAe,QAAQ;AAAA,MAC3B,cAAc;AAAA,MACd,CAAC,CAAC,oBAAoB,QAAQ,CAAC;AAAA,IACjC;AACA,UAAM,kBAAkBC;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,CAAC,KAAK,iBAAiB;AACrB,cAAM,WAAW,QAAQ;AAAA,UACvB,oBAAoB;AAAA,UACpB;AAAA,QACF;AAEA,YAAI,UAAU;AACZ,kBAAQ;AAAA,YACN,QAAQ,UAA2B,cAAc,MAAM;AAAA,cACrD,CAAC,oBAAoB,MAAM,QAAQ;AAAA,YACrC,CAAC;AAAA,YACD,CAAC,YAAY;AAAA,UACf;AACA,iBAAO;AAAA,QACT;AACA,eAAO,CAAC,GAAG,KAAK,YAAY;AAAA,MAC9B;AAAA,MACA,CAAC;AAAA,IACH;AACA,YAAQ,QAAQ,cAAc,eAAe;AAI7C,UAAM,kBAAkB,uBAAuB,OAAO;AAItD,UAAM,qBAAqB,gBAAgB,WAAW;AACtD,UAAM,iBAAiB,iBAAiB,WAAW;AACnD;AAAA,MACE,YAA6D;AAAA,QAC3D,CAAC,YAAY,kBAAkB,GAAG,iBAAiB,IAAI;AAAA,QACvD,CAAC,YAAY,cAAc,GAAG,iBAAiB,KAAK;AAAA,QACpD,CAAC,uBAAuB,GAAG,iBAAiB,OAAO,IAAI;AAAA,MACzD,CAAC;AAAA,MACD,CAAC,CAAC,UAAU,UAAU,aAAa,MACjC,QAAQ,UAAU,CAAC,CAAC,YAAY,WAAW,KAAK,MAAM;AACpD,cAAM,iBAAiB,MAAM,WAAW,WAAW,KAAK;AACxD,cAAM,qBAAqB,MAAM,aAAa,OAAO,UAAU;AAC/D,cAAM,cAAmD;AAAA,UACvD,CAAC,iBAAiB,IAAI,GAAG,MACvB,QAAQ,MAAc,UAAU,KAAK,eAAe;AAAA,UACtD,CAAC,iBAAiB,KAAK,GAAG;AAAA,UAC1B,CAAC,iBAAiB,GAAG,GAAG;AAAA,UACxB,CAAC,iBAAiB,IAAI,GAAG;AAAA,QAC3B;AAEA,YAAI,aAAa,iBAAiB;AAChC,iBAAO,QAAQ,eAAe,CAAC,YAAY,WAAW,KAAK,CAAC;AAE9D,YAAI,CAAC,iBAAiB,aAAa,iBAAiB;AAClD,iBAAO,QAAQ,gBAAgB,CAAC,YAAY,WAAW,KAAK,CAAC;AAE/D;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY,QAAQ,EAAE;AAAA,UACtB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACL;AAGA;AAAA,MACE,YAA2C;AAAA,QACzC,CAAC,SAAS,iBAAiB,IAAI;AAAA,QAC/B,CAAC,QAAQ,QAAQ,iBAAiB,OAAO,KAAK;AAAA,QAC9C,CAAC,eAAe,GAAG,iBAAiB,OAAO,IAAI;AAAA,MACjD,CAAC;AAAA,MACD,CAAC,CAAC,SAAS,YAAYC,YAAW,MAChC,QAAQ,UAAU,CAAC,aAAa,OAAe,aAAa;AAC1D,cAAM,cAAc,CAAC,aAAa,OAAO,QAAQ;AACjD,YAAI,eAAe,iBAAiB;AAClC,oBAAU,aAAaA,YAAW;AACpC,gBAAQ;AAAA,UACN,mCAAmC,UAAU;AAAA,UAC7C;AAAA,QACF;AACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACL;AAIA,UAAMC,iBAAgB,oBAAoB,OAAO;AACjD;AAAA,MAAQ,UAAU,cAAc;AAAA,MAAG,CAAC,CAAC,EAAE,QAAQ,MAC7C,QAAQ;AAAA,QAON;AAAA,QAAU,CAAC,CAAC,WAAW,WAAW,SAASC,MAAK,MAChDD,eAAc,OAAO,EAAE,WAAW,WAAWC,MAAK;AAAA,MACpD;AAAA,IACF;AAAA,EAEF;AAAA,EAEA,UAAU,SAAS;AACjB,YAAQ,WAAW,sBAAsB,OAAO;AAAA,EAClD;AAAA,EAEA,YAAY,SAAS;AACnB,YAAQ,WAAW,sBAAsB,SAAS;AAAA,EACpD;AACF,CAAC;;;AClOI,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpB,aAAa,SAAS;AAEpB,UAAM,gBAEF;AAAA,MACF,CAAC,cAAc,cAAc,eAAe;AAAA,MAC5C,CAAC,cAAc,eAAe,gBAAgB;AAAA,IAChD;AAEA,UAAM,oBAAoB,QAAQ,MAAc,oBAAoB,IAAI;AACxE,eAAW,CAAC,SAAS,WAAW,KAAK,eAAe;AAClD,YAAM,QAAQ,sBAAsB,SAAS,OAAO;AACpD,UAAI;AAAO,oBAAY,mBAAmB,KAAK;AAC/C,+BAAyB,SAAS,OAAO;AAAA,IAC3C;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS;AACd,oBAAgB,QAAQ,MAAc,oBAAoB,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,SAAS;AACjB,YAAQ,QAAQ;AAAA,EAClB;AACF,CAAC;;;ACnCD,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,eAAe,CAAC,oBAAoB,eAAe,aAAa;AAAA,CAErE,YAAY;AACX,aAAWC,kBAAiB;AAAe,UAAMA,eAAc;AAC/D,aAAWA,kBAAiB;AAAc,IAAAA,eAAc;AAC1D,GAAG;","names":["arrayReduce","acc","event","arrayReduce","arrayReduce","acc","ElementDataTypes","arrayReduce","acc","customElement","arrayReduce","arrayReduce","event","arrayReduce","$event","event","event","value","event","event","event","event","clearTimeout","dispatchEvent","elementAttrBindings","arrayReduce","globalState","actionTrigger","event","defineElement"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants/attrs.ts","../src/constants/chars.ts","../src/constants/tags.ts","../src/constants/data.ts","../src/utils/json.ts","../src/utils/logger.ts","../src/constants/regx.ts","../src/libs/RealmState.class.ts","../src/utils/string.ts","../src/utils/object.ts","../src/utils/dom.ts","../src/constants/styles.ts","../src/utils/logic.ts","../src/utils/cssom.ts","../src/libs/RealmBase.class.ts","../src/utils/timer.ts","../src/libs/RealmElement.class.ts","../src/utils/element.ts","../src/elements/import-element.ts","../src/elements/import-resource.ts","../src/elements/visibility-element.ts","../src/constants/flow.ts","../src/constants/scripts.ts","../src/utils/script.ts","../src/utils/flow.ts","../src/elements/global-state.ts","../src/utils/action.ts","../src/actions/http-request.ts","../src/actions/script-flow.ts","../src/actions/send-event.ts","../src/actions/set-action.ts","../src/actions/set-timer.ts","../src/actions/trigger-element.ts","../src/flows/listen-event.ts","../src/flows/trigger-event.ts","../src/elements/element-flow.ts","../src/elements/repeat-list.ts","../src/elements/web-app.ts","../src/elements/core-element.ts","../src/elements/custom-element.ts","../src/index.ts"],"sourcesContent":["export const RealmAttributeNames = {\n ACTION: \"action\",\n AS: \"as\",\n ASYNC: \"async\",\n CHILDREN: \"children\",\n DEBOUNCE: \"debounce\",\n DEBUG: \"debug\",\n DEFER: \"defer\",\n ELEMENT: \"element\",\n EVERY: \"every\",\n FROM: \"from\",\n GLOBAL: \"global\",\n HREF: \"href\",\n INDEX: \"index\",\n IS_LOADED: \"loaded\",\n MOUNT: \"mount\",\n MUTATE: \"mutate\",\n NAME: \"name\",\n OF: \"of\",\n ONCE: \"once\",\n REF: \"ref\",\n REL: \"rel\",\n SCRIPT_ID: \"script-id\",\n SLOT: \"slot\",\n SRC: \"src\",\n STORAGE: \"storage\",\n TO: \"to\",\n TOGGLE: \"toggle\",\n TYPE: \"type\",\n VALUE: \"value\",\n METHOD: \"method\",\n HTTP_URL: \"url\",\n} as const;\n\nexport const RealmMutableAttr = {\n ATTR: \"attr\",\n META: \"meta\",\n SRC: \"src\",\n STATE: \"state\",\n} as const;\n\nexport type BindingAttrValue = [\n attrName: string,\n attrValue: string,\n isGlobal: boolean,\n debug: string\n];\n\nexport type ElementBinding = Array<\n [\n Element,\n Set<BindingAttrValue>,\n Set<BindingAttrValue>,\n Set<BindingAttrValue>,\n Set<BindingAttrValue>\n ]\n>;\n","export const EMPTY_STRING = \"\";\n\nexport const BIND_ATTR_PREFIX = \"_\";\n\nexport const STATE_PREFIX = \"#\";\n\nexport const ATTR_PREFIX = \"@\";\n\nexport const SOURCE_PREFIX = \"$\";\n\nexport const EVENT_PREFIX = \"RLM:\";\n\nexport const DATA_PREFIX = \"data-\";\n\nexport const VAR_PREFIX = \"var\";\n\nexport const COMMA_SEPARATOR = \",\";\n\nexport const DASH_SEPARATOR = \"-\";\n\nexport const PIPELINE_SEPARATOR = \"|\";\n\nexport const COLON = \":\";\n\nexport const SEMICOLON = \";\";\n\nexport const LEFT_PARENTHESES = \"(\";\n\nexport const RIGHT_PARENTHESES = \")\";\n\nexport const LEFT_BRACES = \"{\";\n\nexport const RIGHT_BRACES = \"}\";\n\nexport const DOT_NOTATION = \".\";\n\nexport const META_PREFIX = \"!\";\n\nexport const ALL = \"*\";\n\nexport const RealmLogicOp = {\n EQUALS_TO: \"eq\",\n NOT_EQUALS_TO: \"neq\",\n GREATER_THAN: \"gt\",\n GREATER_THAN_OR_EQUALS_TO: \"gte\",\n LESS_THAN: \"lt\",\n LESS_THAN_OR_EQUALS_TO: \"lte\",\n CONTAINS: \"contains\",\n} as const;\n","import { ALL } from \"./chars\";\n\nexport const RealmTagNames = {\n ALL: ALL,\n TEMPLATE: \"template\",\n EMBED: \"embed\",\n SLOT: \"slot\",\n WEB_APP: \"web-app\",\n GLOBAL_STATE: \"global-state\",\n DEFINE_ELEMENT: \"define-element\",\n CUSTOM_ELEMENT: \"custom-element\",\n ELEMENT_ATTR: \"element-attr\",\n ELEMENT_STATE: \"element-state\",\n ELEMENT_FLOW: \"element-flow\",\n REPEAT_LIST: \"repeat-list\",\n IS_VISIBLE: \"is-visible\",\n IS_HIDDEN: \"is-hidden\",\n IMPORT_ELEMENT: \"import-element\",\n IMPORT_SCRIPT: \"import-script\",\n IMPORT_STYLE: \"import-style\",\n SCRIPT: \"script\",\n LINK: \"link\",\n STYLE: \"style\",\n HEAD: \"head\",\n} as const;\n","export type MixedDataType = string | number | object | boolean | Array<unknown>;\n\nexport const RealmMimeTypes = {\n HTML: \"text/html\",\n JSON: \"application/json\",\n TEXT: \"text/plain\",\n} as const;\n","import { EMPTY_STRING } from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\n\nexport const JSONstringify = JSON.stringify;\n\nexport const JSONparse = JSON.parse;\n\nexport const JSONSafeStringify = (value: MixedDataType = EMPTY_STRING) =>\n typeof value === \"object\" ? JSONstringify(value) : `${value}`;\n\nexport const JSONSafeParse = (value: MixedDataType) =>\n JSONparse(JSONSafeStringify(value));\n","export const logger = (messsages: unknown[], type: string = \"log\") =>\n console[type](...messsages);\n","export const UPPERCASE_ALPHABET_REGEX = /([A-Z])+/g;\n\nexport const SPECIAL_CHARS_REGEX = /(?=[A-Z])|[.\\-\\s_]/;\n\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nexport const CSS_CUSTOM_SELECTOR_REGEX = isSafari\n ? /:host\\(\\[([#@][a-zA-Z0-9-_.]+?)\\](\\[(global)\\])?(\\[(eq|neq|gt|gte|lt|lte|contains)=\\\"(\\w+?)\\\"\\])?\\)/g\n : /:host\\(\\[\\\\([#@][a-zA-Z0-9-_.]+?)\\](\\[(global)\\])?(\\[(eq|neq|gt|gte|lt|lte|contains)=\"(\\w+?)\"\\])?\\)/g;\n\nexport const DOT_NOTATION_REGEX = /[$|#|@|!]([.]?(?:\\w+[.-])*\\w+)/gm;\n","import { MixedDataType } from \"../constants/data\";\nimport { JSONSafeStringify, JSONparse, JSONstringify } from \"../utils/json\";\nimport {\n addSet,\n createMap,\n createSet,\n forEach,\n forEachMap,\n getMap,\n setMap,\n} from \"../utils/object\";\n\nexport enum StateStorage {\n MEMORY = \"memory\",\n LOCAL = \"localStorage\",\n SESSION = \"sessionStorage\",\n}\n\ntype StateValue = Map<string, unknown>;\n\ntype StateObserver = (\n stateName: string,\n newValue: unknown,\n prevValue: unknown\n) => Promise<void> | void;\n\ntype StateFunction<T> = (prevValue: unknown) => T;\n\nexport class RealmState {\n #states: StateValue;\n #observers: Set<StateObserver>;\n\n constructor() {\n this.#states = createMap();\n this.#observers = createSet();\n }\n\n set<T>(\n stateName: string,\n value: StateFunction<T> | T,\n storage?: StateStorage\n ) {\n const prevValue = getMap(this.#states, stateName);\n const newValue =\n typeof value === \"function\"\n ? (value as StateFunction<T>)(prevValue)\n : value;\n if (storage !== StateStorage.MEMORY) {\n window?.[storage]?.setItem(\n stateName,\n JSONSafeStringify(newValue as MixedDataType)\n );\n }\n setMap(this.#states, stateName, newValue);\n forEach(this.#observers, (fn) =>\n fn?.apply?.(this, [stateName, newValue, prevValue])\n );\n }\n\n get<T>(name?: string, storage?: StateStorage) {\n if (storage !== StateStorage.MEMORY) {\n const value = window?.[storage]?.getItem(name);\n if (value !== undefined) return JSONparse(JSONstringify(value));\n }\n return getMap(this.#states, name) as T;\n }\n\n async subscribe(observer: StateObserver) {\n this.#observe(observer);\n addSet(this.#observers, observer);\n }\n\n #observe(observer?: StateObserver) {\n forEachMap(this.#states, (value, stateName) =>\n observer?.apply?.(this, [stateName, value])\n );\n }\n}\n","import { DASH_SEPARATOR, EMPTY_STRING } from \"../constants/chars\";\nimport {\n SPECIAL_CHARS_REGEX,\n UPPERCASE_ALPHABET_REGEX,\n} from \"../constants/regx\";\nimport { arrayJoin, arrayMap, arrayReduce } from \"./object\";\n\nexport const strTrim = (str: string): string => str.trim();\n\nexport const strSlice = (\n str: string,\n start: number = 1,\n end?: number\n): string => {\n if (str == null) return EMPTY_STRING;\n return str.slice(start, end);\n};\n\nexport const strSplit = (str: string, split: string | RegExp) =>\n str.split(split);\n\nexport const strToLower = (str: string) => str?.toLowerCase?.();\n\nexport const strReplace = (\n str: string,\n searchValue: string | RegExp,\n replaceValue: string\n) => str.replace(searchValue, replaceValue);\n\nexport const strStartWith = (str: string, searchValue: string) =>\n str.startsWith(searchValue);\n\nexport const strIncludes = (str: string, searchValue: string) =>\n str.includes(searchValue);\n\nexport const toUpperCase = (str: string) => str.toUpperCase();\n\n/**\n * Capitalize string\n * @param str - string\n * @returns {string}\n */\nexport const capitalize = (str: string): string => {\n if (!str) return EMPTY_STRING;\n const [first, ...rest] = strSplit(strToLower(str), EMPTY_STRING);\n return toUpperCase(first) + arrayJoin(rest, EMPTY_STRING);\n};\n\nconst splitChars = (str: string) =>\n strSplit(\n str?.replace(UPPERCASE_ALPHABET_REGEX, capitalize),\n SPECIAL_CHARS_REGEX\n );\n\n/**\n * Convert string to dash\n * @param str - string\n * @returns {string}\n */\nexport const dash = (str: string): string => {\n const parts = arrayMap(splitChars(str), strToLower) ?? [];\n const length = parts.length;\n if (length === 0) return EMPTY_STRING;\n if (length === 1) return parts.at(0);\n return arrayJoin(parts, DASH_SEPARATOR);\n};\n\nexport const newError = (errorMessage: string) => new Error(errorMessage);\n","import { DOT_NOTATION, SOURCE_PREFIX } from \"../constants/chars\";\nimport { DOT_NOTATION_REGEX } from \"../constants/regx\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport { JSONstringify } from \"./json\";\nimport { strSlice, strStartWith } from \"./string\";\n\n/**\n * Creates new Map\n * @template TKey\n * @template TValue\n * @returns {Map<TKey, TValue>}\n */\nexport const createMap = <TKey, TValue>(map = []) => new Map<TKey, TValue>(map);\n\n/**\n * Creates new Set\n * @template T\n * @returns {Set<T>}\n */\nexport const createSet = <T>(entries?: T[]) => new Set<T>(entries);\n\n/**\n * Creates array from source\n * @param from - source\n * @returns {T[]}\n */\nexport const createArray = <T>(from) => Array.from<T>(from);\n\n/**\n * Dot notation reduce from array\n * e.g `a.b.c` is equal to `a[b][c]`\n * @param acc\n * @param item\n * @param index\n * @returns\n */\ntype ObjectNotationAccumulator = Record<string, unknown> | Event | RealmState;\nconst getObject =\n (isState: boolean) =>\n (acc: ObjectNotationAccumulator, item: string, index: number) =>\n isState && index === 0 ? (<RealmState>acc).get(item) : acc[item];\n\n/**\n * Select object from string as dot notation\n * @param object\n * @param str\n * @returns {unknown}\n */\nexport type DataSource =\n | Record<string, unknown>\n | Event\n | RealmState\n | Attr[]\n | Object\n | ArrayLike<unknown>;\n\nexport const getValueFrom = (\n source: DataSource,\n dotNotation: string,\n prefix?: string\n) => {\n if (!dotNotation) return source;\n if (!DOT_NOTATION_REGEX.test(dotNotation)) return dotNotation;\n if (!!prefix && !strStartWith(dotNotation, prefix)) return dotNotation;\n\n const isState = source instanceof RealmState;\n return dotNotation.replace(DOT_NOTATION_REGEX, (_match, group) => {\n const target = arraySplit(strSlice(group), DOT_NOTATION);\n const replaceValue = arrayReduce(target, getObject(isState), source);\n return typeof replaceValue === \"object\"\n ? JSONstringify(replaceValue)\n : replaceValue;\n });\n};\n\n/**\n * Convert object to dot notation array of string support nested object\n * @param object\n * @returns {string[]}\n */\nexport const toDotNotation = (\n object: DataSource,\n prefix: string = SOURCE_PREFIX\n): string[] => {\n const entries = entriesOf(object);\n return arrayReduce(\n entries,\n (acc, [key, value]) => {\n if (typeof value === \"object\")\n return arrayReduce(\n toDotNotation(value as Record<string, unknown>),\n (acc, item) => [\n ...acc,\n `${prefix}${DOT_NOTATION}${key}${DOT_NOTATION}${item}`,\n ],\n acc\n );\n return [...acc, `${prefix}${DOT_NOTATION}${key}`];\n },\n []\n );\n};\n\n/**\n * Check if value is an array\n * @param array\n * @returns {boolean}\n */\nexport const isArray = (array) => Array.isArray(array);\n\n/**\n * Iterates over array or set\n * @param array\n * @param fn\n * @returns\n */\nexport const forEach = <T>(\n array: T[] | Set<T>,\n fn: (item: T, index: number) => void\n) =>\n void arrayReduce(createArray(array), (acc, item: T, index: number) => {\n fn?.(item, index);\n return acc;\n });\n\n/**\n * Iterates over map\n * @param array\n * @param fn\n * @returns\n */\nexport const forEachMap = <K, V>(\n map: Map<K, V>,\n fn: (value: V, key: K, map: Map<K, V>) => void\n) => map.forEach(fn);\n\n/**\n * Iterates over node element\n * @param array\n * @param fn\n * @returns\n */\nexport const forEachNode = <T extends Node>(\n nodes: NodeListOf<T>,\n fn: (value: T, index: number, array: NodeListOf<T>) => void\n) => nodes.forEach(fn);\n\nexport const arrayReduce = <T, R>(\n array: T[],\n fn: (acc: R, value: T, index?: number) => R,\n initialValue?: R\n) => array.reduce(fn, initialValue);\n\nexport const arrayPush = <T, R>(array: T[], value: T) => array.push(value);\n\nexport const arrayPop = <T>(array: T[]) => array.pop();\n\nexport const arrayMap = <T, R>(array: T[], fn: (value: T) => R) =>\n array.map(fn);\n\nexport const arrayJoin = <T>(array: T[], separator?: string) =>\n array.join(separator);\n\nexport const arraySplit = (str: string, separator?: string | RegExp) =>\n str.split(separator);\n\nexport const arraySplice = <T>(\n array: T[],\n start?: number,\n deleteCount?: number,\n ...items: T[]\n) => array.splice(start, deleteCount, ...items);\n\nexport const arrayIncludes = <T>(value: T, array: T[]) => array.includes(value);\n\nexport const trimArrayString = (array: string[]) =>\n array.map((item) => item.trim());\n\nexport const someArray = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.some(fn);\n\nexport const findArray = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.find(fn);\n\nexport const findIndex = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.findIndex(fn);\n\nexport const filterArray = <T>(\n array: T[],\n fn: (value: T, index: number) => boolean\n) => array.filter(fn);\n\nexport const getMap = <K, V>(map: Map<K, V>, key: K) => map.get(key);\n\nexport const setMap = <K, V>(map: Map<K, V>, key: K, value: V) =>\n map.set(key, value);\n\nexport const addSet = <T>(set: Set<T>, value: T) => set.add(value);\n\nexport const fromEntries = <T>(\n entries: Array<unknown[]> | IterableIterator<[number, T]>\n): T => Object.fromEntries(entries);\n\nexport const entriesOf = <T>(object: T) => Object.entries(object);\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport {\n ATTR_PREFIX,\n DATA_PREFIX,\n DOT_NOTATION,\n EMPTY_STRING,\n EVENT_PREFIX,\n STATE_PREFIX,\n} from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmMimeTypes } from \"../constants/data\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport { JSONSafeStringify, JSONstringify } from \"./json\";\nimport { logger } from \"./logger\";\nimport { arrayReduce, createArray, forEach, isArray } from \"./object\";\nimport { strReplace, strToLower } from \"./string\";\n\nexport interface RealmBaseInterface {\n name: string;\n id: string;\n shadow: ShadowRoot;\n states: RealmState;\n}\n\ntype ShadowAcceptedElement = HTMLElement | Document | RealmBaseInterface;\n\ntype HTMLElementLike = DocumentFragment | Element | HTMLElement | Document;\n\nexport type WindowWithCustomType<T> = Window & typeof globalThis & T;\n\nexport const doc = document;\n\nexport const head = doc.head;\n\nexport const win = window;\n\n// Set html content of element\nexport const _html = (self: HTMLElement | ShadowRoot, html: string) =>\n (self.innerHTML = html);\n\n// Set html content of element\nexport const _clear =\n (self: HTMLElement) => (element?: HTMLElement | ShadowRoot) =>\n _html(element ?? self, EMPTY_STRING);\n\n// Set content of element\nexport const _content =\n (self: HTMLElement | Document) =>\n (content: MixedDataType, element?: Element) =>\n ((element ?? self).textContent =\n typeof content === \"object\" ? JSONstringify(content) : `${content}`);\n\n// Attach to shadow root\nexport const _attach = (self: ShadowAcceptedElement) => () => {\n const element = self as RealmBaseInterface;\n element.shadow = (self as HTMLElement).attachShadow({\n mode: \"closed\",\n slotAssignment: \"manual\",\n });\n return $shadow(element)();\n};\n\n// Append element to current or shadow root\nexport const _append =\n (self: HTMLElementLike) => (element: Node, appendTo?: HTMLElementLike) =>\n (appendTo ?? self).append(element);\n\n// Render element as template tag\nexport const _renderTemplate =\n (self: ShadowAcceptedElement) =>\n (node: HTMLTemplateElement | DocumentFragment) => {\n if (!node) return;\n\n const $$clone = $clone(self as HTMLElement);\n const element =\n node instanceof HTMLTemplateElement\n ? $$clone<HTMLTemplateElement>(node).content\n : node;\n _append(<HTMLElement>self)(element, $shadow(<RealmBaseInterface>self)());\n };\n\n// Remove element\nexport const _remove = (self: Element) => (element?: Element) =>\n (element ?? self).remove();\n\n// Replace element\nexport const _replace =\n (self: HTMLElement) =>\n (newElement?: HTMLElementLike, targetElement?: Element) =>\n (targetElement ?? self).replaceWith(newElement);\n\n// Create element tag\nexport const _createElement = <T>(tagName: string) =>\n doc.createElement(tagName) as T;\n\n// Create fragment element\nexport const _createFragment = () => doc.createDocumentFragment();\n\nexport const _removeAttr =\n (self: HTMLElement) => (attrName: string, element?: Element) =>\n (element ?? self).removeAttribute(attrName);\n\n// Set multiple element attributes\nexport const _attrs =\n (self: HTMLElement) =>\n (\n attributes: Array<[name: string, value?: MixedDataType]>,\n element?: Element\n ) => {\n const el = element ?? self;\n const setAttribute = el.setAttribute.bind(el);\n const removeAttribute = el.removeAttribute.bind(el);\n const setDOMAttribute = (name: string, value: string | boolean) =>\n name in el && (el[name] = value);\n\n forEach(\n attributes.filter((attr) => attr),\n ([name, value]) => {\n if (typeof value !== \"boolean\") {\n const finalValue = JSONSafeStringify(value);\n setAttribute(name, finalValue);\n setDOMAttribute(name, finalValue);\n return;\n }\n\n if (value) {\n setAttribute(name, EMPTY_STRING);\n } else {\n removeAttribute(name);\n }\n\n setDOMAttribute(name, value);\n }\n );\n };\n\n// Set Element attribute\nexport const _attr =\n (self: HTMLElement) =>\n (name: string, value: MixedDataType, element?: Element) =>\n _attrs(self)([[name, value]], element);\n\n// Set Element data\nexport const _data =\n (self: HTMLElement) => (name: string, value: string, element?: Element) =>\n _attr(self)(`${DATA_PREFIX}${name}`, value, element);\n\n// Set multiple element data\nexport const _datas =\n (self: HTMLElement) =>\n (attributes: Array<[name: string, value: string]>, element?: Element) =>\n _attrs(self)(attributes, element);\n\n// Assign slot\nexport const _slotTo = (\n slot: HTMLSlotElement,\n nodes?:\n | Array<Element | HTMLElement | HTMLSlotElement | Text>\n | NodeListOf<Element | HTMLElement | HTMLSlotElement | Text>\n) => slot && !!nodes && slot.assign(...nodes);\n\n// Add event listener\nexport const _addEvent =\n (self: HTMLElement | Document) =>\n (name: string, callback?: EventListener, element?: Element) =>\n (element ?? self).addEventListener(name, callback);\n\n// Remove event listener\nexport const _removeEvent =\n (self: HTMLElement | Document) =>\n (name: string, callback?: EventListener, element?: Element) =>\n (element ?? self).removeEventListener(name, callback);\n\n// Add custom event listener\nexport const _addCustomEvent =\n (self: HTMLElement | Document) =>\n <T>(name: string, callback?: (args: T) => void, element?: Element) =>\n _addEvent(self)(EVENT_PREFIX + name, (event: CustomEvent<T>) =>\n callback?.apply(element ?? self, [event.detail])\n );\n\n// Dispatch event\nexport const _sendEvent =\n (self: HTMLElement | Document) =>\n <T>(name: string, detail?: T, element?: Element) =>\n (element ?? self).dispatchEvent(\n new CustomEvent<T>(EVENT_PREFIX + name, {\n detail,\n })\n );\n\nexport const _debug =\n (self: HTMLElement) =>\n (slot: HTMLSlotElement, value: unknown, element?: HTMLElement) => {\n const debug = $attr(element ?? self)<string>(\n RealmAttributeNames.DEBUG,\n slot\n );\n if (debug) logger([debug, value]);\n };\n\n// Generate random ID\nexport const $randId = () =>\n parseInt(\n strReplace(Math.random().toString(), DOT_NOTATION, EMPTY_STRING)\n ).toString(0x10);\n\n// Get innerHTML\nexport const $html = (element?: Element) => element?.innerHTML;\n\n// Get name of element\nexport const $name = (self: RealmBaseInterface) => () => self.name;\n\n// Get element's id\nexport const $id = (self: RealmBaseInterface) => (element?: Element) =>\n (element ?? self).id;\n\n// Get element's tag name\nexport const $tagName = (self: HTMLElement) => (element?: Element) =>\n strToLower((element ?? self)?.tagName);\n\n// Clone node\nexport const $clone =\n (self: HTMLElement | Document | DocumentFragment) =>\n <T>(element?: Element | DocumentFragment) =>\n (element ?? self).cloneNode(true) as T;\n\n// Query selector string builder\nexport const $qsString = (selector: string, attrs?: Array<string[]>) => {\n if (!isArray(attrs)) return selector;\n return arrayReduce(\n attrs.filter((item) => isArray(item)),\n (acc, [attrName, attrValue]) => {\n const attrValueAssignment = `=\"${attrValue}\"`;\n if (attrName)\n acc += `[${attrName}${attrValue ? attrValueAssignment : EMPTY_STRING}]`;\n return acc;\n },\n selector\n );\n};\n\n// Query selector for element or it's shadow root\nexport const $qs =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrs?: Array<string[]>,\n element?: HTMLElementLike\n ) =>\n (element ?? self)?.querySelector<T>($qsString(selector, attrs));\n\n// Query selector all for element or it's shadow root\nexport const $qsAll =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrs?: Array<string[]>,\n element?: HTMLElementLike\n ) =>\n (element ?? self)?.querySelectorAll<T>($qsString(selector, attrs));\n\n// Get children of element\nexport const $children =\n (self: HTMLElement | Document) =>\n (element?: Element | DocumentFragment): Element[] =>\n createArray<HTMLElement>((element ?? self).children);\n\n// Get node list, it's like a children but return nodes\nexport const $nodes =\n (self: HTMLElement | Document) =>\n (element?: Element | DocumentFragment): Element[] =>\n createArray<HTMLElement>((element ?? self).childNodes);\n\nexport const $attrName = (attr: Attr) => attr.name;\n\nexport const $attrValue = (attr: Attr) => attr.value;\n\nexport const $attrs = (self: HTMLElement) => (element?: Element) =>\n createArray<Attr>((element || self)?.attributes ?? []);\n\nexport const $attrsKv = (self: HTMLElement) => (element?: Element) =>\n arrayReduce<Attr, Record<string, unknown>>(\n $attrs(self)(element),\n (acc, attr) => {\n acc[$attrName(attr)] = $attrValue(attr);\n return acc;\n },\n {}\n );\n\n// Get element's attribute\nexport const $attr =\n (self: HTMLElement) =>\n <T>(name: string, element?: Element) =>\n (element || self)?.getAttribute?.(name) as T;\n\n// Check if element has attribute\nexport const $hasAttr =\n (self: HTMLElement) => (name: string, element?: Element) =>\n (element || self).hasAttribute(name);\n\n// Get element's data\nexport const $data = (self: HTMLElement) => (name: string, element?: Element) =>\n $attr(self)(`${DATA_PREFIX}${name}`, element);\n\n// Get query selector for current element\nexport const $el =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qs(self)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>)\n );\n\n// Get query selector all for current element\nexport const $els =\n (self: HTMLElementLike) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qsAll(self)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>)\n );\n\n// Get query selector for current element's shadow root\nexport const $shadowEl =\n (self: ShadowAcceptedElement) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qs(self as HTMLElement)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>),\n $shadow(<RealmBaseInterface>self)()\n );\n\n// Get query selector all for current element's shadow root\nexport const $shadowEls =\n (self: ShadowAcceptedElement) =>\n <T extends Element>(\n selector: string,\n attrNameOrAttrs?: string | Array<string[]>,\n attrValue?: string\n ) =>\n $qsAll(self as HTMLElement)<T>(\n selector,\n isArray(attrNameOrAttrs)\n ? (attrNameOrAttrs as Array<string[]>)\n : ([[attrNameOrAttrs, attrValue]] as Array<string[]>),\n $shadow(<RealmBaseInterface>self)()\n );\n\n// Get attribute slot's name\nexport const $slotAttrName = (name: string) => `${ATTR_PREFIX}${name}`;\n\n// Get state slot's name\nexport const $slotStateName = (name: string) => `${STATE_PREFIX}${name}`;\n\n// Get parent's element\nexport const $parent =\n (self: HTMLElement) =>\n <T extends HTMLElement>(element?: Element) =>\n (element ?? self).parentElement as T;\n\n// Get parent's node\nexport const $parentNode = (self: HTMLElement) => (element?: Element) =>\n (element ?? self).parentNode;\n\nexport const $shadow = (self: RealmBaseInterface) => () => self.shadow;\n\nexport const $root = (self: HTMLElementLike) => () =>\n <ShadowRoot>self.getRootNode();\n\nexport const $host =\n (self: HTMLElementLike) =>\n <T>() =>\n $root(self)().host as T;\n\nexport const DOMFrom = (string: string) => {\n const domParser = new DOMParser();\n return domParser.parseFromString(string, RealmMimeTypes.HTML);\n};\n","export const HOST_SELECTOR = \":host\";\n\nexport const RealmCSSVarConst = {\n OPERATOR: \"op\",\n COMPARATOR: \"comp\",\n VALUE: \"value\",\n STYLE: \"style\",\n GLOBAL: \"global\",\n} as const;\n","import { RealmLogicOp } from \"../constants/chars\";\nimport { strIncludes } from \"./string\";\n\nexport const isTruthy = (\n operator: string,\n comparator: string,\n value: string\n) => {\n const eq = operator === RealmLogicOp.EQUALS_TO ? comparator : null;\n const neq = operator === RealmLogicOp.NOT_EQUALS_TO ? comparator : null;\n const gt = operator === RealmLogicOp.GREATER_THAN ? comparator : null;\n const gte =\n operator === RealmLogicOp.GREATER_THAN_OR_EQUALS_TO ? comparator : null;\n const lt = operator === RealmLogicOp.LESS_THAN ? comparator : null;\n const lte =\n operator === RealmLogicOp.LESS_THAN_OR_EQUALS_TO ? comparator : null;\n const contains = operator === RealmLogicOp.CONTAINS ? comparator : null;\n\n const isStringOrBoolLike = [\"true\", \"false\"].includes(value) || isNaN(+value);\n if (isStringOrBoolLike) {\n return (\n (!!eq && value === eq) ||\n (!!neq && value !== neq) ||\n (!!contains && strIncludes(value, contains))\n );\n }\n\n return (\n (!!eq && +value === +eq) ||\n (!!neq && +value !== +neq) ||\n (!!gt && +value > +gt) ||\n (!!gte && +value >= +gte) ||\n (!!lt && +value < +lt) ||\n (!!lte && +value <= +lte)\n );\n};\n","import { RealmMutableAttr } from \"../constants/attrs\";\nimport {\n COLON as ATTR_SEPARATOR,\n DASH_SEPARATOR,\n EMPTY_STRING,\n LEFT_BRACES,\n LEFT_PARENTHESES,\n PIPELINE_SEPARATOR,\n RIGHT_BRACES,\n RIGHT_PARENTHESES,\n SEMICOLON,\n STATE_PREFIX,\n VAR_PREFIX,\n} from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { CSS_CUSTOM_SELECTOR_REGEX } from \"../constants/regx\";\nimport { HOST_SELECTOR, RealmCSSVarConst } from \"../constants/styles\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { $html, $shadow, RealmBaseInterface, _remove } from \"./dom\";\nimport { isTruthy } from \"./logic\";\nimport {\n arrayJoin,\n arrayMap,\n arrayPush,\n arrayReduce,\n arraySplit,\n createArray,\n forEach,\n someArray,\n} from \"./object\";\nimport { dash, strReplace, strSlice, strStartWith, strTrim } from \"./string\";\n\nexport type CSSRules = Array<[string, [property: string, value: string][]]>;\n\nconst getStyle = (rule: CSSStyleRule) => rule?.style;\n\nconst selectorText = (rule: CSSStyleRule, value?: string) => {\n if (!value) return rule?.selectorText;\n rule.selectorText = value;\n};\n\nconst CSSText = (style: CSSStyleDeclaration, value?: string) => {\n if (!value) return style.cssText;\n style.cssText = value;\n};\n\nconst setStyleProperty = (\n style: CSSStyleDeclaration,\n propName: string,\n propValue: string\n) => style.setProperty(propName, propValue);\n\nconst getStyleProperty = (style: CSSStyleDeclaration, propName: string) =>\n style.getPropertyValue(propName);\n\nconst forEachCSSRules = (\n sheets: CSSStyleSheet[],\n callback: (rule: CSSStyleRule) => void\n) =>\n forEach(sheets, (sheet) => forEach(Object.values(sheet.cssRules), callback));\n\nexport const $adoptedStyleSheets = (self: RealmBaseInterface) =>\n $shadow(self)().adoptedStyleSheets;\n\nexport const _attachStyle = (self: RealmBaseInterface) => () => {\n const sheet = new CSSStyleSheet();\n arrayPush($adoptedStyleSheets(self), sheet);\n return sheet;\n};\n\nexport const _CSSvar = (\n name: string,\n rule?: CSSStyleRule,\n value?: string | number,\n overwrite: boolean = true\n) => {\n const varName = `${DASH_SEPARATOR}${DASH_SEPARATOR}${CSS.escape(dash(name))}`;\n const style = getStyle(rule);\n if (!style) return varName;\n\n const getProperty = () => getStyleProperty(style, varName);\n if (value === undefined) return getProperty();\n\n const setProperty = () => setStyleProperty(style, varName, `${value}`);\n if (!overwrite && !getProperty()) {\n setProperty();\n return;\n }\n\n setProperty();\n};\n\nexport const $CSSvar = (name: string) =>\n `${VAR_PREFIX}${LEFT_PARENTHESES}${DASH_SEPARATOR}${DASH_SEPARATOR}${name}${RIGHT_PARENTHESES}`;\n\nexport const _renderStyle =\n (self: RealmBaseInterface) => (styleElement: HTMLStyleElement) => {\n if (!styleElement) return;\n\n const cssRules = $html(styleElement);\n const sheet = _attachStyle(self)();\n arrayPush($adoptedStyleSheets(self), sheet);\n sheet.replaceSync(cssRules);\n\n forEachCSSRules([sheet], (rule) => {\n const selector = selectorText(rule);\n const matches = createArray<string>(\n selector?.matchAll(CSS_CUSTOM_SELECTOR_REGEX) ?? []\n );\n if (!matches.length) return;\n\n const currentRule = getStyle(rule);\n\n // @note: get css property and value as entries\n const cssPropValue = arrayReduce(\n arraySplit(CSSText(currentRule), SEMICOLON),\n (acc, style) =>\n !style\n ? acc\n : [...acc, arrayMap(arraySplit(style, ATTR_SEPARATOR), strTrim)],\n []\n );\n\n // @note: replace selector :host(\\(@|#)name) with :host only\n selectorText(\n rule,\n strReplace(selector, CSS_CUSTOM_SELECTOR_REGEX, HOST_SELECTOR)\n );\n\n // @note: add --style css var to rule\n _CSSvar(\n RealmCSSVarConst.STYLE,\n rule,\n arrayJoin(\n arrayMap(cssPropValue, (item) => arrayJoin(item, ATTR_SEPARATOR)),\n PIPELINE_SEPARATOR\n )\n );\n\n for (const match of matches) {\n const [, mutator, _hasCondition, operatorOrGlobal, ...operators] =\n match;\n const mutatorType = strStartWith(mutator, STATE_PREFIX)\n ? RealmMutableAttr.STATE\n : RealmMutableAttr.ATTR;\n const mutatorName = strSlice(mutator);\n _CSSvar(mutatorType, rule, mutatorName);\n\n const isGlobal = operatorOrGlobal === RealmCSSVarConst.GLOBAL;\n const cssVarPrefix = mutatorName + DASH_SEPARATOR;\n if (isGlobal) _CSSvar(cssVarPrefix + RealmCSSVarConst.GLOBAL, rule, 1);\n\n const [hasOperator, operator, value] = operators ?? [];\n if (!hasOperator) return;\n _CSSvar(cssVarPrefix + RealmCSSVarConst.OPERATOR, rule, operator);\n _CSSvar(cssVarPrefix + RealmCSSVarConst.COMPARATOR, rule, value);\n }\n });\n\n _remove(styleElement)();\n };\n\nexport const _addCSS = (sheet: CSSStyleSheet, cssRules: CSSRules) =>\n sheet.insertRule(\n arrayReduce(\n cssRules,\n (acc, [selector, rules]) => {\n acc +=\n selector +\n LEFT_BRACES +\n arrayJoin(\n arrayReduce(\n rules,\n (acc, [property, value]) => [\n ...acc,\n arrayJoin([property, value], ATTR_SEPARATOR),\n ],\n []\n ),\n SEMICOLON\n ) +\n RIGHT_BRACES;\n return acc;\n },\n EMPTY_STRING\n )\n );\n\nexport const _setCSSProperty =\n (self: RealmBaseInterface) =>\n (selector: string, name: string, value: string | null) =>\n forEachCSSRules($adoptedStyleSheets(self), (rule: CSSStyleRule) => {\n if (selectorText(rule) !== selector) return;\n const style = rule.style;\n if (getStyleProperty(style, name) !== value)\n setStyleProperty(style, name, value);\n });\n\nconst updateRuleProperty =\n (rule: CSSStyleRule) =>\n ([property, value]: Array<string>): void =>\n setStyleProperty(getStyle(rule), property, value);\n\nconst removeRuleProperty =\n (rule: CSSStyleRule) =>\n ([property]: Array<string>) =>\n getStyle(rule).removeProperty(property);\n\nexport const bindCSS = (\n element: RealmElement,\n name: string,\n value: MixedDataType,\n dataType: string,\n isGlobalUpdate: boolean = false\n): void => {\n const sheet = $adoptedStyleSheets(element);\n const strValue = `${value}`;\n\n forEachCSSRules(sheet, (rule) => {\n // @note: convert all states or attributes to css vars\n const defaultCSSVarPrefix =\n (isGlobalUpdate ? RealmCSSVarConst.GLOBAL : dataType) + DASH_SEPARATOR;\n _CSSvar(defaultCSSVarPrefix + name, rule, strValue, false);\n\n // @note: matching css selector\n const state = _CSSvar(RealmMutableAttr.STATE, rule);\n const attr = _CSSvar(RealmMutableAttr.ATTR, rule);\n if (!state && !attr) return;\n if ((state && state !== name) || (attr && attr !== name)) return;\n\n const cssVarPrefix = name + DASH_SEPARATOR;\n _CSSvar(cssVarPrefix + RealmCSSVarConst.VALUE, rule, strValue);\n\n const operator = _CSSvar(cssVarPrefix + RealmCSSVarConst.OPERATOR, rule);\n const styles = _CSSvar(RealmCSSVarConst.STYLE, rule);\n const cssText = arrayMap(arraySplit(styles, PIPELINE_SEPARATOR), (style) =>\n arraySplit(style, ATTR_SEPARATOR)\n );\n const hasOperator = !!operator;\n\n const comparator = _CSSvar(\n cssVarPrefix + RealmCSSVarConst.COMPARATOR,\n rule\n );\n\n const isTrue = isTruthy(operator, comparator, strValue);\n const isUpdateStyle = hasOperator ? isTrue : true;\n\n if (!isUpdateStyle) {\n if (!someArray(cssText, ([property]) => !!getStyle(rule)[property]))\n return;\n return forEach(cssText, removeRuleProperty(rule));\n }\n\n forEach(cssText, updateRuleProperty(rule));\n });\n};\n","import * as DOMUtils from \"../utils/dom\";\nimport * as CSSOMUtils from \"../utils/cssom\";\nimport { RealmState } from \"./RealmState.class\";\nimport { ElementAttributeEntries } from \"../utils/element\";\nimport { MixedDataType } from \"../constants/data\";\n\nexport class RealmBase\n extends HTMLElement\n implements DOMUtils.RealmBaseInterface\n{\n // Element's name / tag's name\n name: string;\n\n // Element's random id\n id: string;\n\n // innerHTML cacche\n #html: string;\n\n // Shadow root assigned to element\n shadow: ShadowRoot;\n\n // Element's state\n states: RealmState;\n\n // Default element's states and attributes\n statesRegistry: Set<ElementAttributeEntries>;\n attrsRegistry: Set<ElementAttributeEntries>;\n\n // Clear HTML content\n _clear = DOMUtils._clear(this);\n\n // Set innerHTML\n _html = (html: MixedDataType, element?: HTMLElement) => {\n const setCurrentHtml = () => (this.#html = `${html}`);\n element ? DOMUtils._html(element, `${html}`) : setCurrentHtml();\n };\n\n //#region manipulate DOM utility functions\n _renderTemplate = DOMUtils._renderTemplate(this);\n _renderShadow = (flowElement: RealmBase) =>\n flowElement &&\n DOMUtils._append(this)(DOMUtils.$clone(this)(flowElement), this.$shadow());\n _content = DOMUtils._content(this);\n _attach = DOMUtils._attach(this);\n _append = DOMUtils._append(this);\n _remove = DOMUtils._remove(this);\n _replace = DOMUtils._replace(this);\n _createElement = DOMUtils._createElement;\n _createFragment = DOMUtils._createFragment;\n _attrs = DOMUtils._attrs(this);\n _attr = DOMUtils._attr(this);\n _removeAttr = DOMUtils._removeAttr(this);\n _data = DOMUtils._data(this);\n _datas = DOMUtils._datas(this);\n _slotTo = DOMUtils._slotTo;\n _addEvent = DOMUtils._addEvent(this);\n _removeEvent = DOMUtils._removeEvent(this);\n _addCustomEvent = DOMUtils._addCustomEvent(this);\n _sendEvent = DOMUtils._sendEvent(this);\n _debug = DOMUtils._debug(this);\n //#endregion\n\n //#region get DOM infos utility functions\n $html = (element?: Element) => DOMUtils.$html(element ?? this);\n $randId = DOMUtils.$randId;\n $name = DOMUtils.$name(this);\n $id = DOMUtils.$id(this);\n $tagName = DOMUtils.$tagName(this);\n $parent = DOMUtils.$parent(this);\n $parentNode = DOMUtils.$parentNode(this);\n $shadow = DOMUtils.$shadow(this);\n $root = DOMUtils.$root(this);\n $host = <T>(element?: Element) => DOMUtils.$host(element ?? this)<T>();\n $clone = DOMUtils.$clone(this);\n $qsString = DOMUtils.$qsString;\n $qs = DOMUtils.$qs(this);\n $qsAll = DOMUtils.$qsAll(this);\n $children = DOMUtils.$children(this);\n $nodes = DOMUtils.$nodes(this);\n $attrs = DOMUtils.$attrs(this);\n $attrsKv = DOMUtils.$attrsKv(this);\n $attr = DOMUtils.$attr(this);\n $hasAttr = DOMUtils.$hasAttr(this);\n $data = DOMUtils.$data(this);\n $el = DOMUtils.$el(this);\n $els = DOMUtils.$els(this);\n $shadowEl = DOMUtils.$shadowEl(this);\n $shadowEls = DOMUtils.$shadowEls(this);\n $slotAttrName = DOMUtils.$slotAttrName;\n $slotStateName = DOMUtils.$slotStateName;\n //#endregion\n\n //#region CSSOM utility functions\n _attachStyle = CSSOMUtils._attachStyle(this);\n _renderStyle = CSSOMUtils._renderStyle(this);\n _addCSS = CSSOMUtils._addCSS;\n _setCSSProperty = CSSOMUtils._setCSSProperty(this);\n _CSSvar = CSSOMUtils._CSSvar;\n $CSSvar = CSSOMUtils.$CSSvar;\n //#endregion\n}\n","export type TimerReturn = [number, () => void];\n\nexport const timerOnce = (\n handler: TimerHandler,\n timeout: number\n): TimerReturn => {\n let timer = setTimeout(handler, timeout);\n return [timer, () => clearTimeout(timer)];\n};\n\nexport const timerEvery = (\n handler: TimerHandler,\n timeout: number\n): TimerReturn => {\n let interval = setInterval(handler, timeout);\n return [interval, () => clearInterval(interval)];\n};\n\nexport const reqAnim = (handler: FrameRequestCallback): TimerReturn => {\n let req = requestAnimationFrame(handler);\n return [req, () => cancelAnimationFrame(req)];\n};\n","import { RealmBase } from \"./RealmBase.class\";\nimport { RealmState } from \"./RealmState.class\";\nimport {\n ElementAttributeEntries,\n subscribeAttrMutation,\n} from \"../utils/element\";\nimport { arrayPush, createSet, forEach } from \"../utils/object\";\nimport { reqAnim } from \"../utils/timer\";\n\ntype RealmElementAttrMutationCallback = (\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n) => void;\n\ninterface ReamlElementParams {\n name: string;\n onBeforeInit?: (element: HTMLElement) => void;\n onInit?: (element: HTMLElement) => void;\n onMounted?: (element: HTMLElement) => void;\n onUnmounted?: (element: HTMLElement) => void;\n onAttributeChanged?: (\n element: HTMLElement,\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n ) => void;\n}\n\nexport class RealmElement extends RealmBase {\n onInit?: ReamlElementParams[\"onInit\"];\n onMounted?: ReamlElementParams[\"onMounted\"];\n onUnmounted?: ReamlElementParams[\"onUnmounted\"];\n onAttributeChanged?: ReamlElementParams[\"onAttributeChanged\"];\n states: RealmState = new RealmState();\n statesRegistry = createSet<ElementAttributeEntries>();\n attrsRegistry = createSet<ElementAttributeEntries>();\n #attrObserver: Array<RealmElementAttrMutationCallback> = [];\n\n constructor({\n name,\n onInit,\n onBeforeInit,\n onMounted,\n onUnmounted,\n onAttributeChanged,\n }: ReamlElementParams) {\n super();\n\n this.name = name;\n this.id = this.$randId();\n this.onMounted = onMounted;\n this.onUnmounted = onUnmounted;\n this.onAttributeChanged = onAttributeChanged;\n\n onBeforeInit?.(this);\n this._html(this.$html());\n onInit?.(this);\n reqAnim(() => this.onMounted?.(this));\n }\n\n subscribe(callback: RealmElementAttrMutationCallback) {\n arrayPush(this.#attrObserver, callback);\n }\n\n async connectedCallback() {\n const [observeAttr] = subscribeAttrMutation(\n this,\n (attrName, attrValue, prevAttrValue) => {\n forEach(this.#attrObserver, (callback) =>\n callback?.(attrName, attrValue, prevAttrValue)\n );\n this.onAttributeChanged?.(this, attrName, attrValue, prevAttrValue);\n }\n );\n observeAttr();\n }\n\n disconnectedCallback() {\n this.onUnmounted?.(this);\n }\n}\n","import {\n BindingAttrValue,\n ElementBinding,\n RealmAttributeNames,\n RealmMutableAttr,\n} from \"../constants/attrs\";\nimport {\n ATTR_PREFIX,\n COLON as ATTR_SEPARATOR,\n BIND_ATTR_PREFIX,\n DASH_SEPARATOR,\n DATA_PREFIX,\n META_PREFIX,\n SOURCE_PREFIX,\n STATE_PREFIX,\n} from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { bindCSS } from \"./cssom\";\nimport { $attrName, $attrValue, doc } from \"./dom\";\nimport { JSONSafeParse } from \"./json\";\nimport {\n DataSource,\n addSet,\n arrayMap,\n arrayReduce,\n createArray,\n createMap,\n createSet,\n filterArray,\n findArray,\n forEach,\n forEachNode,\n fromEntries,\n getMap,\n getValueFrom,\n setMap,\n} from \"./object\";\nimport {\n newError,\n strIncludes,\n strSlice,\n strSplit,\n strStartWith,\n} from \"./string\";\n\ninterface DefineElementOption extends ElementDefinitionOptions {\n name: string;\n onBeforeRegister?: (elementName: string) => Promise<void> | void;\n onRegistered?: (elementName: string) => Promise<void> | void;\n onConnected?: (element: RealmElement) => Promise<void> | void;\n onBeforeInit?: (element: RealmElement) => Promise<void> | void;\n onInit?: (element: RealmElement) => Promise<void> | void;\n onMounted?: (element: RealmElement) => Promise<void> | void;\n onUnmounted?: (element: RealmElement) => Promise<void> | void;\n onAttributeChanged?: (\n element: RealmElement,\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n ) => Promise<void> | void;\n}\n\nexport enum ElementDataTypes {\n STRING = \"string\",\n NUMBER = \"number\",\n BOOLEAN = \"boolean\",\n ARRAY = \"array\",\n OBJECT = \"object\",\n HTML = \"html\",\n JSON_STRING = \"json\",\n}\n\nexport type ElementAttributeEntries = [\n name: string,\n type: ElementDataTypes,\n value: MixedDataType,\n options?: Record<string, unknown>\n];\n\ntype ElementRuntimeEventArgs = {\n $: RealmElement;\n $$?: HTMLElement;\n event?: Event;\n attrs?: Object;\n};\n\n/**\n * Register element to customElements\n * @param elementName\n * @param ...params DefineElementOption\n */\nexport const defineElement =\n ({\n name,\n extends: extendsTagName,\n onBeforeRegister,\n onRegistered,\n onConnected,\n ...params\n }: DefineElementOption) =>\n (): Promise<boolean> =>\n new Promise((resolve) => {\n const isNameValid = strIncludes(name, DASH_SEPARATOR);\n const isDefined = customElements.get(name);\n if (!isNameValid || isDefined)\n throw newError(\n `Element \\`${name}\\` has invalid name or already defined`\n );\n\n customElements.whenDefined(name).then(async () => {\n onRegistered?.(name);\n resolve(true);\n });\n\n onBeforeRegister?.(name);\n\n class CustomElement extends RealmElement {\n constructor() {\n super({ name, ...params });\n }\n\n async connectedCallback() {\n super.connectedCallback();\n onConnected?.(this);\n }\n }\n\n customElements.define(name, CustomElement, { extends: extendsTagName });\n });\n\n/**\n * Parse attribute value to specific type based on attribute type definition\n * @param type\n * @param value\n * @returns {string | number | object | boolean}\n */\nexport const parseValue = (type: ElementDataTypes, value: MixedDataType) => {\n const transformValue = (defaultValue: MixedDataType) =>\n typeof value !== \"string\" ? value : JSONSafeParse(value || defaultValue);\n const valueLookup: Record<string, () => MixedDataType> = {\n [ElementDataTypes.NUMBER]: () => +value,\n [ElementDataTypes.BOOLEAN]: () => transformValue(value),\n [ElementDataTypes.ARRAY]: () => transformValue(\"[]\"),\n [ElementDataTypes.OBJECT]: () => transformValue(\"{}\"),\n };\n return valueLookup?.[type]?.() ?? value;\n};\n\n/**\n * Get custom element attributes as an array\n * @param element\n */\nconst getElementEntries = (\n element: RealmElement,\n tagName: string = RealmTagNames.ELEMENT_ATTR\n) => createArray<Element>(element.$els(tagName));\n\n/**\n * Get custom element attributes entries as definitions\n * @param element\n */\nexport const getCustomElementAttrs = (\n element: RealmElement,\n tagName?: string\n): Set<ElementAttributeEntries> =>\n createSet(\n arrayReduce(\n getElementEntries(element, tagName),\n (acc, item) => {\n const name = element.$attr<string>(RealmAttributeNames.NAME, item);\n const type = element.$attr<ElementDataTypes>(\n RealmAttributeNames.TYPE,\n item\n );\n const value = parseValue(type, element.$html(item));\n const attrs: ElementAttributeEntries = [name, type, value];\n return [...acc, attrs];\n },\n []\n )\n );\n\n/**\n * Remove custom element attributes, it is called when element is initialized\n * @param element\n */\nexport const removeCustomElementAttrs = (\n element: RealmElement,\n tagName?: string\n) => forEach(getElementEntries(element, tagName), (el) => element._remove(el));\n\nconst getValueType = (\n slotName: string,\n registry: Set<ElementAttributeEntries>\n) =>\n findArray(\n createArray<ElementAttributeEntries>(registry),\n ([name]) => name === slotName\n )?.at(1) as ElementDataTypes;\n\n/**\n * Create slot element inside shadow root\n * @param element\n * @param name\n * @param value\n * @returns {HTMLSlotElement|void}\n */\nconst bindSlot = (\n element: RealmElement,\n dataType: string,\n slotName: string,\n slotValue: MixedDataType | DataSource,\n hasGlobalAttr?: boolean\n) => {\n const getSlotName = () => slotName;\n const getSlotValue = () => slotValue;\n\n const getSlotValueFromObject = () => getValueFrom(slotValue, slotName);\n\n const attrNameLookup: Record<string, () => string> = {\n [RealmMutableAttr.STATE]: () => element.$slotStateName(slotName),\n [RealmMutableAttr.ATTR]: () => element.$slotAttrName(slotName),\n [RealmMutableAttr.SRC]: getSlotName,\n [RealmMutableAttr.META]: getSlotName,\n };\n const slotAttrName = attrNameLookup[dataType]?.();\n\n const attrValueLookup: Record<string, () => MixedDataType> = {\n [RealmMutableAttr.STATE]: getSlotValue,\n [RealmMutableAttr.ATTR]: getSlotValue,\n [RealmMutableAttr.SRC]: getSlotValueFromObject,\n [RealmMutableAttr.META]: getSlotValueFromObject,\n };\n const slotAttrValue = attrValueLookup[dataType]?.();\n\n const attrTypeLookup: Record<string, ElementDataTypes> = {\n [RealmMutableAttr.STATE]: getValueType(slotName, element.statesRegistry),\n [RealmMutableAttr.ATTR]: getValueType(slotName, element.attrsRegistry),\n };\n const slotAttrType = attrTypeLookup[dataType];\n\n forEachNode(\n element.$shadowEls<HTMLSlotElement>(RealmAttributeNames.SLOT, [\n [RealmAttributeNames.NAME, slotAttrName],\n hasGlobalAttr && [RealmAttributeNames.GLOBAL],\n ]),\n (shadowSlot) => {\n if (!shadowSlot) return;\n if (\n !hasGlobalAttr &&\n element.$hasAttr(RealmAttributeNames.GLOBAL, shadowSlot)\n )\n return;\n\n const slot = element._createElement<HTMLSlotElement>(RealmTagNames.SLOT);\n const slotId = element.$slotStateName(element.$randId());\n\n const slotAttrMap = createMap<HTMLSlotElement, string>();\n setMap(slotAttrMap, shadowSlot, RealmAttributeNames.NAME);\n setMap(slotAttrMap, slot, RealmAttributeNames.SLOT);\n forEach([shadowSlot, slot], (slotElement) => {\n element._data(dataType, slotAttrName, slotElement);\n element._attrs(\n [\n [getMap(slotAttrMap, slotElement), slotId],\n hasGlobalAttr && [RealmAttributeNames.GLOBAL],\n ],\n slotElement\n );\n });\n\n if (slotAttrType === ElementDataTypes.HTML) {\n element._html(slotAttrValue, slot);\n } else {\n element._content(slotAttrValue, slot);\n }\n element._append(slot);\n element._slotTo(shadowSlot, [slot]);\n element._debug(shadowSlot, slotAttrValue);\n }\n );\n};\n\n/**\n * Update `slot[slot]` value\n * @param element\n * @param slotName\n * @param slotValue\n * @returns\n */\nconst updateSlot = (\n element: RealmElement,\n dataType: string,\n slotName: string,\n slotValue: MixedDataType,\n isGlobalUpdate?: boolean\n) => {\n const attrNameLookup: Record<string, string> = {\n [RealmMutableAttr.STATE]: element.$slotStateName(slotName),\n [RealmMutableAttr.ATTR]: element.$slotAttrName(slotName),\n [RealmMutableAttr.SRC]: slotName,\n };\n const slotAttrName = attrNameLookup[dataType];\n\n const attrTypeLookup: Record<string, ElementDataTypes> = {\n [RealmMutableAttr.STATE]: getValueType(slotName, element.statesRegistry),\n [RealmMutableAttr.ATTR]: getValueType(slotName, element.attrsRegistry),\n };\n const slotAttrType = attrTypeLookup[dataType];\n\n const selector = !isGlobalUpdate\n ? `[${DATA_PREFIX}${dataType}=\"${slotAttrName}\"]:not([${RealmAttributeNames.GLOBAL}])`\n : RealmTagNames.SLOT;\n\n const attrs = !isGlobalUpdate\n ? []\n : [\n [RealmAttributeNames.GLOBAL],\n [`${DATA_PREFIX}${dataType}`, slotAttrName],\n ];\n\n const nodes = createArray<HTMLSlotElement>([\n ...element.$qsAll<HTMLSlotElement>(selector, attrs),\n ...element.$qsAll<HTMLSlotElement>(\n selector,\n attrs,\n isGlobalUpdate ? doc : undefined\n ),\n ]);\n\n forEach(nodes, (slot) => {\n if (!slot) return;\n if (slotAttrType === ElementDataTypes.HTML) {\n element._html(slotValue, slot);\n } else {\n element._content(slotValue, slot);\n }\n element._debug(\n element.$shadowEl<HTMLSlotElement>(selector, [\n ...attrs,\n [\n RealmAttributeNames.NAME,\n element.$attr(RealmAttributeNames.SLOT, slot),\n ],\n [RealmAttributeNames.DEBUG],\n ]),\n slotValue\n );\n });\n};\n\n/**\n * Bind attributes with dynamic value\n * @param element {RealmElement}\n * @param bindings {Set<[attrName: string, attrValue: string, isGlobal: boolean]>}\n * @param name {string}\n * @param value {string}\n * @returns {void}\n */\nconst bindAttr = (\n element: RealmElement,\n dataType: string,\n dataBinding: Set<BindingAttrValue>,\n node: Element,\n name: string,\n value: MixedDataType,\n isGlobalUpdate?: boolean\n): void => {\n const getValue = () => value;\n const getSlotValueFromObject = () => getValueFrom(value, name);\n const attrValueLookup: Record<string, () => MixedDataType> = {\n [RealmMutableAttr.STATE]: getValue,\n [RealmMutableAttr.ATTR]: getValue,\n [RealmMutableAttr.SRC]: getSlotValueFromObject,\n [RealmMutableAttr.META]: getSlotValueFromObject,\n };\n const attrValue = attrValueLookup[dataType]();\n const nodeHasGlobalAttr = element.$hasAttr(RealmAttributeNames.GLOBAL, node);\n forEach(dataBinding, ([attrName, attrSrc, isGlobalFlag]) => {\n const shouldUpdateGlobalState = isGlobalUpdate\n ? isGlobalFlag\n : !(isGlobalFlag && !nodeHasGlobalAttr);\n const shouldUpdate = shouldUpdateGlobalState && name === attrSrc;\n if (shouldUpdate) element._attr(attrName, attrValue, node);\n });\n};\n\n/**\n * Update element's value that binded to attr / state / global state,\n * Slot element will be updated too\n */\nconst attrMutableLookup = (\n statesBinding: Set<BindingAttrValue> = createSet(),\n attrsBinding: Set<BindingAttrValue> = createSet(),\n srcDataBinding: Set<BindingAttrValue> = createSet(),\n metasBinding: Set<BindingAttrValue> = createSet()\n) => ({\n [RealmMutableAttr.STATE]: statesBinding,\n [RealmMutableAttr.ATTR]: attrsBinding,\n [RealmMutableAttr.SRC]: srcDataBinding,\n [RealmMutableAttr.META]: metasBinding,\n});\n\nexport const bindElement = (\n element: RealmElement,\n dataType: string,\n dataBinding: ElementBinding,\n name: string,\n value: MixedDataType | DataSource,\n isGlobalUpdate?: boolean,\n isUpdate?: boolean\n) => {\n bindCSS(element, name, value, dataType, isGlobalUpdate);\n forEach(dataBinding, ([node, ...bindings]) =>\n bindAttr(\n element,\n dataType,\n attrMutableLookup?.(...bindings)[dataType],\n node,\n name,\n value,\n isGlobalUpdate\n )\n );\n\n if (isUpdate)\n return updateSlot(element, dataType, name, value, isGlobalUpdate);\n\n if (!isGlobalUpdate && dataType === RealmMutableAttr.STATE)\n element.states.set(name, value);\n\n return bindSlot(element, dataType, name, value, isGlobalUpdate);\n};\n\n/**\n * Bind attributes with dynamic value\n * @param element {RealmElement}\n * @param attrName {string}\n */\nexport const addAttrBinding = (element: RealmElement, attrName: string) => {\n const globalAttrName = `${attrName}${ATTR_SEPARATOR}${RealmAttributeNames.GLOBAL}`;\n const isGlobal = element.$hasAttr(globalAttrName);\n const attrSelector = isGlobal ? globalAttrName : attrName;\n element._attr(BIND_ATTR_PREFIX + attrSelector, element.$attr(attrSelector));\n};\n\n/**\n * Element's mutation observer\n */\nconst mutationObserver = (\n target: Element,\n options?: MutationObserverInit & { callback: MutationCallback }\n): [() => void, () => void] => {\n const observer = new MutationObserver(options?.callback);\n return [() => observer.observe(target, options), () => observer.disconnect()];\n};\n\nconst addToBindList = (\n shouldAdded: boolean,\n bindAttrValues: Set<BindingAttrValue>,\n attrName: string,\n attrValue: string,\n isGlobal: boolean\n) => shouldAdded && addSet(bindAttrValues, [attrName, attrValue, isGlobal]);\n\n/**\n * Get element's attribute bindings list by element data\n * @param element\n * @returns ElementBinding\n */\nexport const getElementAttrBindings = (element: RealmElement) =>\n arrayReduce<Element, ElementBinding>(\n createArray<Element>(element.$shadowEls(RealmTagNames.ALL)),\n (acc, node) => {\n const stateBindList = createSet<BindingAttrValue>();\n const attrBindList = createSet<BindingAttrValue>();\n const srcBindList = createSet<BindingAttrValue>();\n const metaBindList = createSet<BindingAttrValue>();\n\n const [statesBinding, attrsBinding, srcDataBinding, metasBinding] =\n arrayReduce<Attr, Array<Set<BindingAttrValue>>>(\n element.$attrs(node),\n (acc, attr) => {\n const hasBindAttr = strStartWith($attrName(attr), BIND_ATTR_PREFIX);\n const hasAttr = element.$hasAttr($attrName(attr), node);\n if (hasAttr && !hasBindAttr) return acc;\n\n const [attrName, global] = strSplit(\n $attrName(attr),\n ATTR_SEPARATOR\n );\n const isGlobal = global === RealmAttributeNames.GLOBAL;\n\n const attrValue = $attrValue(attr);\n const slicedAttrName = strSlice(attrName);\n const slicedAttrValue = strSlice(attrValue);\n\n const isState = strStartWith(attrValue, STATE_PREFIX);\n addToBindList(\n isState,\n stateBindList,\n slicedAttrName,\n slicedAttrValue,\n isGlobal\n );\n\n const isAttr = strStartWith(attrValue, ATTR_PREFIX);\n addToBindList(\n isAttr,\n attrBindList,\n slicedAttrName,\n slicedAttrValue,\n false\n );\n\n const isSource = strStartWith(attrValue, SOURCE_PREFIX);\n addToBindList(\n isSource,\n srcBindList,\n slicedAttrName,\n attrValue,\n false\n );\n\n const isMeta = strStartWith(attrValue, META_PREFIX);\n addToBindList(\n isMeta,\n metaBindList,\n slicedAttrName,\n attrValue,\n false\n );\n\n if (isSource || isMeta) element._removeAttr(attr.name, node);\n return [stateBindList, attrBindList, srcBindList, metaBindList];\n },\n []\n );\n\n return [\n ...acc,\n [node, statesBinding, attrsBinding, srcDataBinding, metasBinding],\n ];\n },\n []\n );\n\n/**\n * Subscribe element's attr mutation\n */\nexport const subscribeAttrMutation = (\n element: RealmElement,\n observer: (\n attrName: string,\n attrValue: unknown,\n prevAttrValue: unknown\n ) => void\n) =>\n mutationObserver(element, {\n attributes: true,\n attributeOldValue: true,\n callback: (mutationList) => {\n for (const mutation of mutationList) {\n if (mutation.type !== \"attributes\") return;\n const attrName = mutation.attributeName;\n // @ts-expect-error\n const attrValue = element.$attr(attrName, mutation.target);\n const prevAttrValue = mutation.oldValue;\n if (prevAttrValue !== attrValue) {\n observer?.(attrName, attrValue, prevAttrValue);\n }\n }\n },\n });\n\n/**\n * Find element flow's actions by event name\n * @param actionArgs\n * @param comparator\n * @param isMultipleResult\n * @returns\n */\nexport const findAttrFrom = <T>(\n actionArgs: Array<T[]>,\n comparator: T,\n isMultipleResult?: boolean\n) =>\n isMultipleResult\n ? arrayMap(\n filterArray(actionArgs, ([argName]) => argName === comparator),\n ([, argValue]) => argValue\n )\n : findArray(actionArgs, ([argName]) => argName === comparator)?.at(1);\n\n/**\n * Get default value from element's attribute registry\n * @param element {RealmElement}\n * @returns Record<string, unknown>\n */\n\nexport const getDefaultAttrValues = (element: RealmElement) =>\n fromEntries<Record<string, unknown>>(\n arrayMap(createArray(element.attrsRegistry), ([attrName, , attrValue]) => [\n attrName,\n attrValue,\n ])\n );\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { DOT_NOTATION } from \"../constants/chars\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { DOMFrom, doc } from \"../utils/dom\";\nimport { defineElement } from \"../utils/element\";\nimport { createMap, entriesOf, getMap, setMap } from \"../utils/object\";\nimport { newError } from \"../utils/string\";\n\nconst IMPORT_ELEMENT_REQUEST_CACHE = createMap<string, string>();\n\nexport const importElement = defineElement({\n name: RealmTagNames.IMPORT_ELEMENT,\n\n async onBeforeInit(element) {\n const { from, automount, as: tagAlias, ...attrs } = element.$attrsKv();\n const [, cachedHtml] =\n getMap<string, string>(IMPORT_ELEMENT_REQUEST_CACHE, <string>from) ?? [];\n\n if (!cachedHtml) {\n try {\n const response = await fetch(<string>from);\n const html = await response.text();\n setMap(IMPORT_ELEMENT_REQUEST_CACHE, from, html);\n } catch {\n newError(`Failed to fetch \"${from}\"`);\n }\n }\n\n const customElement = element.$qs(\n RealmTagNames.CUSTOM_ELEMENT,\n [],\n DOMFrom(getMap(IMPORT_ELEMENT_REQUEST_CACHE, from))\n );\n if (!customElement) return element._remove();\n\n const nameAttr = element.$attr<string>(\n RealmAttributeNames.NAME,\n customElement\n );\n let customElementName = <string>tagAlias ?? nameAttr;\n const hasDefined = !!customElements.get(customElementName);\n if (hasDefined) {\n customElementName = customElementName + DOT_NOTATION + element.$randId();\n }\n element._attr(RealmAttributeNames.NAME, customElementName, customElement);\n\n if (automount !== undefined) {\n const mountElement =\n element._createElement<HTMLElement>(customElementName);\n element._attrs(entriesOf(attrs), mountElement);\n element._append(customElement, doc.body);\n element._replace(mountElement, element);\n } else {\n element._append(customElement, doc.body);\n element._remove();\n }\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { head } from \"../utils/dom\";\nimport { defineElement } from \"../utils/element\";\nimport { createMap, entriesOf, getMap, setMap } from \"../utils/object\";\n\nconst SCRIPT_RESOURCE_REGISTRY = createMap<string, boolean>();\n\nconst STYLES_RESOURCE_REGISTRY = createMap<string, boolean>();\n\nconst appendResource = <T extends Element>(\n element: RealmElement,\n tagName: string,\n attrs: [name: string, value?: MixedDataType][],\n appendTo: HTMLElement | ShadowRoot\n) => {\n const createdElement = element._createElement<T>(tagName);\n element._attrs(attrs, createdElement);\n element._append(createdElement, appendTo);\n};\n\nexport const importScriptElement = defineElement({\n name: RealmTagNames.IMPORT_SCRIPT,\n\n onMounted(element) {\n const parentNode = element.$parentNode();\n const isValidParentNode = parentNode instanceof ShadowRoot;\n if (!isValidParentNode) return;\n\n const { from, local, ...attrs } = element.$attrsKv();\n const hasAdded = getMap(SCRIPT_RESOURCE_REGISTRY, from);\n const hasLocal = local !== undefined;\n if (!hasAdded && !hasLocal) {\n appendResource<HTMLScriptElement>(\n element,\n RealmTagNames.SCRIPT,\n [[RealmAttributeNames.SRC, <string>from], ...entriesOf(attrs)],\n head\n );\n setMap(SCRIPT_RESOURCE_REGISTRY, from, true);\n }\n element._remove();\n },\n});\n\nexport const importStyleElement = defineElement({\n name: RealmTagNames.IMPORT_STYLE,\n\n onMounted(element) {\n const parentNode = element.$parentNode();\n const isValidParentNode = parentNode instanceof ShadowRoot;\n if (!isValidParentNode) return;\n\n const { from, local, ...attrs } = element.$attrsKv();\n const hasAdded = getMap(STYLES_RESOURCE_REGISTRY, from);\n const hasLocalAttr = local !== undefined;\n const resourceArgs = [\n element,\n RealmTagNames.LINK,\n [\n [RealmAttributeNames.HREF, from],\n [RealmAttributeNames.REL, \"stylesheet\"],\n ...entriesOf(attrs),\n ],\n ];\n if (!hasAdded) {\n appendResource.apply(null, [...resourceArgs, head]);\n setMap(STYLES_RESOURCE_REGISTRY, from, true);\n }\n\n if (hasLocalAttr) {\n appendResource.apply(null, [\n ...resourceArgs,\n element.$host<RealmElement>().$shadow(),\n ]);\n }\n element._remove();\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { DASH_SEPARATOR, RealmLogicOp, VAR_PREFIX } from \"../constants/chars\";\nimport { HOST_SELECTOR } from \"../constants/styles\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { CSSRules, _CSSvar } from \"../utils/cssom\";\nimport { $randId } from \"../utils/dom\";\nimport { addAttrBinding, defineElement } from \"../utils/element\";\nimport { isTruthy } from \"../utils/logic\";\nimport { arrayReduce } from \"../utils/object\";\n\ntype VisibilitySwitch = [on: string | null, off: string | null];\n\nconst getOperatorComparator = (element: RealmElement) =>\n arrayReduce<string, string[]>(\n [\n RealmLogicOp.EQUALS_TO,\n RealmLogicOp.NOT_EQUALS_TO,\n RealmLogicOp.GREATER_THAN,\n RealmLogicOp.GREATER_THAN_OR_EQUALS_TO,\n RealmLogicOp.LESS_THAN,\n RealmLogicOp.LESS_THAN_OR_EQUALS_TO,\n RealmLogicOp.CONTAINS,\n ],\n (acc, operator) => {\n if (!element.$hasAttr(operator)) return acc;\n return [operator, element.$attr(operator)];\n },\n []\n );\n\nconst isVisibleTruthy = (element: RealmElement, value: string | boolean) => {\n const [operator, comparator] = getOperatorComparator(element);\n return isTruthy(operator, comparator, `${value}`);\n};\n\nconst updateIsVisibleCSSProperty = (\n element: RealmElement,\n attrValue: string,\n cssVarName: string,\n isVisiblePropName,\n isHiddenPropName\n) => {\n const hasAttrValue = element.$hasAttr(RealmAttributeNames.VALUE);\n const isVisible = isVisibleTruthy(\n element,\n attrValue || (hasAttrValue && attrValue === \"\")\n );\n element._setCSSProperty(\n HOST_SELECTOR,\n element._CSSvar(cssVarName),\n isVisible ? isVisiblePropName : isHiddenPropName\n );\n};\n\nconst createVisibilityElement = (\n elementName: string,\n [visible, hidden]: VisibilitySwitch\n) => {\n const displayVarName = VAR_PREFIX + DASH_SEPARATOR + $randId();\n\n return defineElement({\n name: elementName,\n\n onBeforeInit(element) {\n const [operator] = getOperatorComparator(element);\n addAttrBinding(element, RealmAttributeNames.VALUE);\n addAttrBinding(element, operator);\n\n const slot = element._createElement<HTMLSlotElement>(RealmTagNames.SLOT);\n const cssRules = <CSSRules>[\n [\n HOST_SELECTOR,\n [\n [_CSSvar(displayVarName), hidden],\n [\"display\", element.$CSSvar(displayVarName)],\n ],\n ],\n ];\n element._attach();\n element._append(slot, element.$shadow());\n element._addCSS(element._attachStyle(), cssRules);\n element._slotTo(slot, element.$nodes());\n },\n\n onInit(element) {\n updateIsVisibleCSSProperty(\n element,\n element.$attr<string>(RealmAttributeNames.VALUE),\n displayVarName,\n hidden,\n visible\n );\n },\n\n onAttributeChanged(element, attrName, attrValue: string) {\n if (attrName !== RealmAttributeNames.VALUE) return;\n updateIsVisibleCSSProperty(\n element,\n attrValue,\n displayVarName,\n hidden,\n visible\n );\n },\n });\n};\n\nconst VISIBLE_VALUE = \"contents\";\nconst HIDDEN_VALUE = \"none\";\n\nexport const isVisibleElement = createVisibilityElement(\n RealmTagNames.IS_VISIBLE,\n [HIDDEN_VALUE, VISIBLE_VALUE]\n);\n\nexport const isHiddenElement = createVisibilityElement(\n RealmTagNames.IS_HIDDEN,\n [VISIBLE_VALUE, HIDDEN_VALUE]\n);\n","import { RealmMutableAttr } from \"./attrs\";\n\nexport const FlowEventNames = {\n TRIGGER_EVENT: \"trigger-event\",\n LISTEN_EVENT: \"listen-event\",\n} as const;\n\nexport const FlowRuntimeEventTypes = {\n MOUNTED: \"mounted\",\n UNMOUNTED: \"unmounted\",\n ATTR_CHANGED: \"attrchanged\",\n STATE_CHANGED: \"statechanged\",\n ON: \"on\",\n} as const;\n\nexport const FlowRuntimeMutableEventTypesLookup = {\n [RealmMutableAttr.ATTR]: FlowRuntimeEventTypes.ATTR_CHANGED,\n [RealmMutableAttr.STATE]: FlowRuntimeEventTypes.STATE_CHANGED,\n};\n\nexport const FlowActionTypes = {\n SET_STATE: \"set-state\",\n SET_ATTR: \"set-attr\",\n SET_TIMER: \"set-timer\",\n SEND_EVENT: \"send-event\",\n TRIGGER_ELEMENT: \"trigger-element\",\n SCRIPT: \"script\",\n HTTP_REQUEST: \"http-request\",\n REQUEST_HEADER: \"request-header\",\n REQUEST_BODY: \"request-body\",\n RESPONSE_SUCCESS: \"response-ok\",\n RESPONSE_ERROR: \"response-fail\",\n} as const;\n\nexport const FlowMutateTypes = {\n EQUALS_TO: \"=\",\n ADD: \"+\",\n SUBTRACT: \"-\",\n MULTIPLY: \"*\",\n DIVIDE: \"/\",\n ADD_STR: \"add\",\n ASSIGN: \"assign\",\n PUSH: \"push\",\n POP: \"pop\",\n REMOVE: \"remove\",\n} as const;\n\nexport enum FlowDataSource {\n EVENT = \"event\",\n EVENT_ATTR = \"event:attr\",\n LOCAL_STATE = \"localState\",\n GLOBAL_STATE = \"globalState\",\n ATTR = \"attr\",\n}\n\nexport const ALL_USE_FN = `${FlowDataSource.LOCAL_STATE},${FlowDataSource.GLOBAL_STATE},${FlowDataSource.EVENT},attrs, ${FlowDataSource.ATTR},$`;\n","export const RealmScriptTypes = {\n REALM_MODULE: \"module/realm\",\n JS: \"application/javascript\",\n MODULE: \"module\",\n} as const;\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmScriptTypes } from \"../constants/scripts\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { _append, _attrs, _createElement, _remove, head } from \"./dom\";\nimport { arrayJoin } from \"./object\";\n\nconst createScriptBlob = (script: string) =>\n new Blob([script], { type: RealmScriptTypes.JS });\n\nconst createScriptURL = (\n elementName: string,\n scriptId: string,\n script: string,\n params: string[]\n) => {\n const fnParams = params.length ? `{ ${arrayJoin(params, \", \")} }` : \"\";\n const scriptWrapper = `async (${fnParams})=>{\\n${script}\\n}`;\n const scriptContent = `__REALM_ADD_CUSTOM_FLOW('${elementName}', '${scriptId}', ${scriptWrapper})`;\n return URL.createObjectURL(createScriptBlob(scriptContent));\n};\n\nexport const attatchScriptFlow = (\n elementName: string,\n scriptId: string,\n script: string,\n params: string[],\n onScriptLoad?: (elementName: string) => void\n) => {\n const scriptURL = createScriptURL(elementName, scriptId, script, params);\n const scriptElement = _createElement<HTMLElement>(RealmTagNames.SCRIPT);\n scriptElement.onload = () => {\n onScriptLoad?.(elementName);\n URL.revokeObjectURL(scriptURL);\n _remove(head)(scriptElement);\n };\n _attrs(scriptElement)([\n [RealmAttributeNames.SRC, scriptURL],\n [RealmAttributeNames.TYPE, RealmScriptTypes.MODULE],\n [RealmAttributeNames.ASYNC],\n [RealmAttributeNames.SCRIPT_ID, scriptId],\n ]);\n _append(head)(scriptElement);\n};\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { ALL, COMMA_SEPARATOR, SOURCE_PREFIX } from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport {\n ALL_USE_FN,\n FlowActionTypes,\n FlowMutateTypes,\n} from \"../constants/flow\";\nimport { $attrName, $attrValue, $randId, WindowWithCustomType } from \"./dom\";\nimport { ElementDataTypes } from \"./element\";\nimport {\n arrayIncludes,\n arrayPop,\n arrayPush,\n arrayReduce,\n arraySplice,\n arraySplit,\n createArray,\n createMap,\n createSet,\n findIndex,\n fromEntries,\n getMap,\n isArray,\n setMap,\n trimArrayString,\n} from \"./object\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmScriptTypes } from \"../constants/scripts\";\nimport { attatchScriptFlow } from \"./script\";\nimport { RealmState } from \"../libs/RealmState.class\";\n\ntype ScriptParams = {\n $: RealmElement;\n ref: (refName: string) => Element;\n refs: (refName: string) => Element[];\n localState: RealmState;\n globalState: RealmState;\n event: Event;\n attrs: Record<string, unknown>;\n attr: {\n get: (attrName: string) => unknown;\n set: (attrName: string, attrValue: string) => void;\n };\n};\n\nexport type ScriptFlow = (params: ScriptParams) => void;\n\ntype AddScriptFlowType = {\n __REALM_ADD_CUSTOM_FLOW: typeof addScriptFlow;\n};\n\nexport type ActionArg = Array<string>;\n\nexport type ActionAttr = [attrName: string, attrValue: string];\n\nexport type FlowAction = [actionName: string, actionArgs: ActionArg[]];\n\nexport type FlowEvent = [attrs: Array<ActionAttr>, action: FlowAction[]];\n\nconst CUSTOM_SCRIPT_FLOW_REGISTRY = createMap<\n string,\n Map<string, ScriptFlow>\n>();\n\nconst FLOW_REGISTRY = createMap<string, Map<string, Set<FlowEvent>>>();\n\nexport type FlowRegistry = typeof FLOW_REGISTRY;\n\nexport type CallFlow = (\n flow: Set<FlowEvent>,\n hostElement: RealmElement,\n dispatcherElement?: RealmElement\n) => Promise<void>;\n\nexport interface DefineFlowOption {\n name: string;\n onBeforeRegister?: (eventFlowOwnerName: string) => void;\n onRegistered?: (eventFlowOwnerName: string, flows: Set<FlowEvent>) => void;\n onApply?: CallFlow;\n onRemove?: CallFlow;\n}\n\nexport type ActionElementReducerCallback = (\n eventFlowOwnerName: string,\n eventOwnerElement: RealmElement,\n acc: FlowEvent[],\n actionElement: Element\n) => FlowEvent[];\n\nexport type EventAttrReducerCallback = (\n acc: FlowEvent[],\n eventElement: Attr\n) => FlowEvent[];\n\nexport type RegisterFlowCallback = (\n eventFlowOwnerName: string,\n eventOwnerElement: RealmElement\n) => void;\n\nexport type ApplyFlowCallback = (\n eventOwnerElement: RealmElement,\n dispatcherElement?: RealmElement\n) => Promise<void>;\n\nexport type DefineFlowReturn = [\n registerFlow: RegisterFlowCallback,\n applyFlow: ApplyFlowCallback,\n removeFlow: ApplyFlowCallback\n];\n\nconst getScriptFlowRegistry = (elementName: string) =>\n getMap(CUSTOM_SCRIPT_FLOW_REGISTRY, elementName);\n\nconst addScriptFlow = (elementName: string, scriptId: string, fn: ScriptFlow) =>\n setMap(getScriptFlowRegistry(elementName), scriptId, fn);\n\n(window as WindowWithCustomType<AddScriptFlowType>).__REALM_ADD_CUSTOM_FLOW =\n addScriptFlow;\n\nexport const registerScriptFlow = (eventFlowOwnerName: string) =>\n setMap(\n CUSTOM_SCRIPT_FLOW_REGISTRY,\n eventFlowOwnerName,\n createMap<string, () => void>()\n );\n\nexport const getScriptFlow = (elementName: string, scriptId: string) =>\n getMap(getScriptFlowRegistry(elementName), scriptId);\n\nexport const getFlowRegistry = (name: string) =>\n getMap(FLOW_REGISTRY, name) ?? createMap();\n\nexport const registerFlow = (\n name: string,\n elementName: string,\n flow: Set<FlowEvent>\n) => {\n const flowMap = getFlowRegistry(name) ?? createMap<string, Set<FlowEvent>>();\n setMap(flowMap, elementName, flow);\n setMap(FLOW_REGISTRY, name, flowMap);\n};\n\nexport const getFlow = (name: string, elementName: string) =>\n getMap(getFlowRegistry(name), elementName);\n\n/**\n * Assign value to element state / attribute\n * @param param0\n * @returns\n */\nexport const mutatesValue = ([\n mutateType,\n attrType,\n attrValue,\n attrIndex,\n toggleArray,\n]: [\n mutateType: string,\n attrType: ElementDataTypes,\n attrValue: MixedDataType,\n attrIndex: number,\n toggleArray?: boolean\n]) => {\n const isAllowedMutation = arrayIncludes(attrType, [\n ElementDataTypes.NUMBER,\n ElementDataTypes.ARRAY,\n ]);\n\n return (prevValue: MixedDataType) => {\n if (!isAllowedMutation) return attrValue;\n\n const mutateLookup: Record<string, () => MixedDataType | void> = {\n [FlowMutateTypes.EQUALS_TO]: () =>\n isArray(attrValue) ? attrValue : +attrValue,\n [FlowMutateTypes.ADD]: () => +prevValue + +attrValue,\n [FlowMutateTypes.SUBTRACT]: () => +prevValue - +attrValue,\n [FlowMutateTypes.MULTIPLY]: () => +prevValue * +attrValue,\n [FlowMutateTypes.DIVIDE]: () => +prevValue / +attrValue,\n [FlowMutateTypes.ASSIGN]: () => {\n const array = [...(prevValue as MixedDataType[])];\n const prevValueIndex = array[+attrIndex];\n if (prevValueIndex !== undefined)\n array[+attrIndex] =\n typeof prevValueIndex === \"object\"\n ? {\n ...prevValueIndex,\n ...attrValue?.[0],\n }\n : attrValue;\n return array;\n },\n [FlowMutateTypes.PUSH]: () =>\n arrayReduce(\n attrValue as Array<unknown>,\n (acc, value) => {\n const prevIndex = findIndex(acc, (val) => val === value);\n if (toggleArray && prevIndex > -1) {\n arraySplice(acc, prevIndex, 1);\n return acc;\n }\n\n const newId = `${SOURCE_PREFIX}${SOURCE_PREFIX}${$randId()}`;\n return [\n ...acc,\n typeof value === \"object\"\n ? {\n [newId]: Symbol(newId),\n ...value,\n }\n : value,\n ];\n },\n [...(prevValue as Array<unknown>)]\n ),\n [FlowMutateTypes.POP]: () => {\n const array = [...(prevValue as MixedDataType[])];\n arrayPop(array);\n return array;\n },\n [FlowMutateTypes.REMOVE]: () => {\n const array = [...(prevValue as MixedDataType[])];\n arraySplice(array, +attrIndex, 1);\n return array;\n },\n };\n return mutateLookup?.[mutateType]?.();\n };\n};\n\n/**\n * Default event reducer callback\n * @param eventFlowOwnerName\n * @param eventOwnerElement\n * @param acc\n * @param attr\n */\nexport const actionFlowReducer = (\n eventFlowOwnerName: string,\n eventOwnerElement: RealmElement,\n acc: FlowEvent[],\n actionElement: Element\n): Array<FlowAction | FlowEvent> | string => {\n const actionName = eventOwnerElement.$tagName(actionElement);\n const actionAttrs = eventOwnerElement.$attrs(actionElement);\n const actionContent = eventOwnerElement.$html(actionElement);\n const actionArgs = arrayReduce<Attr, ActionArg[]>(\n actionAttrs,\n eventFlowReducer,\n []\n );\n\n // Exceptional for `set-state` type `html`\n // Push html to `actionArgs`\n if (actionName === FlowActionTypes.SET_STATE) {\n arrayPush(actionArgs, [RealmAttributeNames.VALUE, actionContent]);\n }\n\n // Exceptional for `script` tag\n // Push script id in the `actionArgs`\n if (actionName === RealmTagNames.SCRIPT) {\n const { type, use = \"\" } = fromEntries<{\n type: string;\n use: string;\n }>(actionArgs);\n const isValidScriptType = type === RealmScriptTypes.REALM_MODULE;\n\n if (isValidScriptType) {\n const scriptId = `${actionName}-${eventOwnerElement.$id()}-${eventOwnerElement.$randId()}`;\n const dependencies = trimArrayString(\n arraySplit(use === ALL ? ALL_USE_FN : use, COMMA_SEPARATOR)\n );\n arrayPush(actionArgs, [RealmAttributeNames.SCRIPT_ID, scriptId]);\n attatchScriptFlow(\n eventFlowOwnerName,\n scriptId,\n actionContent,\n dependencies\n );\n }\n }\n\n // Exceptional for `set-timer`, `http-request`, `response-success`, `response-error` tag\n // Push child nodes in the `actionArg`\n if (\n (<string[]>[\n FlowActionTypes.SET_TIMER,\n FlowActionTypes.HTTP_REQUEST,\n FlowActionTypes.RESPONSE_SUCCESS,\n FlowActionTypes.RESPONSE_ERROR,\n ]).includes(actionName)\n ) {\n const actionReducer = createActionReducer(\n eventFlowOwnerName,\n eventOwnerElement\n );\n arrayPush(actionArgs, [\n RealmAttributeNames.ACTION,\n arrayReduce(\n eventOwnerElement.$children(actionElement),\n actionReducer(),\n []\n ),\n ]);\n }\n\n // Exceptional for `send-event`, `request-body` tag\n // Push HTML in the `actionArg`\n if (\n (<string[]>[\n FlowActionTypes.SEND_EVENT,\n FlowActionTypes.REQUEST_BODY,\n ]).includes(actionName)\n ) {\n arrayPush(actionArgs, [\n RealmAttributeNames.ACTION,\n eventOwnerElement.$html(actionElement),\n ]);\n }\n\n const actionFlow: FlowAction = [actionName, actionArgs];\n return [...acc, actionFlow];\n};\n\nconst createActionReducer =\n (eventFlowOwnerName: string, eventOwnerElement: RealmElement) =>\n () =>\n (acc: Array<FlowEvent>, actionElement: Element) =>\n actionFlowReducer(\n eventFlowOwnerName,\n eventOwnerElement,\n acc,\n actionElement\n );\n\nexport const eventFlowReducer = (acc: Array<ActionAttr>, attr: Attr) => [\n ...acc,\n [$attrName(attr), $attrValue(attr)],\n];\n\nconst createEventReducer = () => () => (acc: Array<ActionAttr>, attr: Attr) =>\n eventFlowReducer(acc, attr);\n\n/**\n * Define a flow for an event type\n * @param eventFlowType - event flow type\n * @param actionReducerCallback - event reducer callback\n * @returns flow definition\n */\nexport const defineFlow = ({\n name,\n onBeforeRegister,\n onRegistered,\n onApply,\n onRemove,\n}: DefineFlowOption): DefineFlowReturn => {\n // Add flow to registry\n const registerFlowFn = async (\n eventOwnerName: string,\n eventOwnerElement: RealmElement\n ) => {\n const flowElements = createArray<HTMLElement>(eventOwnerElement.$els(name));\n const attrReducer = createEventReducer();\n const actionReducer = createActionReducer(\n eventOwnerName,\n eventOwnerElement\n );\n const flow = createSet<FlowEvent>(\n arrayReduce(\n flowElements,\n (acc, eventElement) => [\n ...acc,\n [\n // @note: attributes\n arrayReduce(\n eventOwnerElement.$attrs(eventElement),\n attrReducer(),\n []\n ),\n // @note: actions\n arrayReduce(\n eventOwnerElement.$children(eventElement),\n actionReducer(),\n []\n ),\n ],\n ],\n []\n )\n );\n\n registerScriptFlow(eventOwnerName);\n onBeforeRegister?.(eventOwnerName);\n registerFlow(name, eventOwnerName, flow);\n onRegistered?.(eventOwnerName, flow);\n };\n\n const flowCallback =\n (callback?: CallFlow) =>\n async (hostElement: RealmElement, dispatcherElement?: RealmElement) => {\n const flow = getFlow(name, hostElement.$tagName());\n if (flow) callback?.(flow, hostElement, dispatcherElement);\n };\n\n return [registerFlowFn, flowCallback(onApply), flowCallback(onRemove)];\n};\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmState, StateStorage } from \"../libs/RealmState.class\";\nimport { WindowWithCustomType, win } from \"../utils/dom\";\nimport {\n ElementAttributeEntries,\n ElementDataTypes,\n parseValue,\n defineElement,\n} from \"../utils/element\";\nimport {\n addSet,\n arrayMap,\n createArray,\n createSet,\n findArray,\n} from \"../utils/object\";\n\nconst globalState = ((\n win as WindowWithCustomType<{ globalState: RealmState }>\n).globalState = new RealmState());\n\nconst GLOBAL_STATE_REGISTRY = createSet<ElementAttributeEntries>();\n\nexport const getGlobalStateRegistry = () => GLOBAL_STATE_REGISTRY;\n\nconst findGlobalStateRegistry = (name: string) =>\n findArray(\n createArray<ElementAttributeEntries>(GLOBAL_STATE_REGISTRY),\n ([stateName]) => stateName === name\n );\n\nexport const getGlobalStateType = (name: string) =>\n findGlobalStateRegistry(name)?.at(1) as ElementDataTypes;\n\nconst getGlobalStateStorage = (name: string): StateStorage => {\n const options = findGlobalStateRegistry(name)?.at(3) as Record<\n string,\n StateStorage\n >;\n return options?.storage ?? StateStorage.MEMORY;\n};\n\nexport const getGlobalState = () => globalState;\n\nconst getGlobalStateValue = (name?: string): MixedDataType =>\n globalState.get(name, getGlobalStateStorage(name));\n\nexport const updateGlobalState = (name: string, value: unknown) =>\n globalState.set(name, value, getGlobalStateStorage(name));\n\nexport const globalStateElement = defineElement({\n name: RealmTagNames.GLOBAL_STATE,\n\n onBeforeInit(element) {\n const [name, type, storage] = arrayMap<string, string>(\n [\n RealmAttributeNames.NAME,\n RealmAttributeNames.TYPE,\n RealmAttributeNames.STORAGE,\n ],\n (item) => element.$attr(item)\n );\n const value = parseValue(<ElementDataTypes>type, element.$html());\n addSet(GLOBAL_STATE_REGISTRY, [name, type, value, { storage }]);\n updateGlobalState(name, getGlobalStateValue(name) ?? value);\n },\n\n onMounted(element) {\n element._remove();\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport { FlowMutateTypes, FlowDataSource } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport {\n ElementDataTypes,\n ElementAttributeEntries,\n parseValue,\n findAttrFrom,\n getDefaultAttrValues,\n} from \"../utils/element\";\nimport { ActionArg, FlowAction, mutatesValue } from \"../utils/flow\";\nimport {\n DataSource,\n arrayReduce,\n createArray,\n createMap,\n createSet,\n forEach,\n getMap,\n getValueFrom,\n setMap,\n someArray,\n} from \"../utils/object\";\nimport { getGlobalState } from \"../elements/global-state\";\n\ntype TriggerAction = (\n element: RealmElement,\n elementName: string,\n actionArgs: ActionArg[],\n event: Event | Record<string, unknown>,\n eventType: string,\n eventName: string\n) => Promise<void> | void;\n\nconst ACTIONS_REGISTRY = createMap<\n string,\n [requiredAttrs: string[], triggerActionFn: TriggerAction]\n>();\n\nconst ATTRS_REGISTRY = createMap<string, Set<ElementAttributeEntries>>();\n\nconst STATE_REGISTRY = createMap<string, Set<ElementAttributeEntries>>();\n\nconst setAttrMapRegistry = (\n attrMap: Map<string, Set<ElementAttributeEntries>>,\n elementName: string,\n attrs: Set<ElementAttributeEntries>\n) => attrs.size && setMap(attrMap, elementName, attrs);\n\nexport const setAttrRegistry = (\n elementName: string,\n attrs: Set<ElementAttributeEntries>\n) => setAttrMapRegistry(ATTRS_REGISTRY, elementName, attrs);\n\nexport const setStateRegistry = (\n elementName: string,\n attrs: Set<ElementAttributeEntries>\n) => setAttrMapRegistry(STATE_REGISTRY, elementName, attrs);\n\nexport const getAttrRegistry = (elementName: string) =>\n getMap(ATTRS_REGISTRY, elementName) ?? createSet();\n\nexport const getStateRegistry = (elementName: string) =>\n getMap(STATE_REGISTRY, elementName) ?? createSet();\n\nconst {\n EQUALS_TO: MutateTypeEqual,\n REMOVE: MutateTypeRemove,\n POP: MutateTypeArrayPop,\n PUSH: MutateTypeArrayPush,\n ASSIGN: MutateTypeArrayAssign,\n ADD_STR: MutateTypeArrayAdd,\n} = FlowMutateTypes;\n\nconst {\n MUTATE: AttrMutate,\n INDEX: AttrIndex,\n VALUE: AttrValue,\n FROM: AttrFrom,\n TOGGLE: AttrToggle,\n} = RealmAttributeNames;\n\nconst {\n ARRAY: DataTypeArray,\n HTML: DataTypeHTML,\n BOOLEAN: DataTypeBool,\n} = ElementDataTypes;\n\n/**\n * Get value from dot notation raw, without parsing by type\n * @param element\n * @param value\n * @param sourceType\n * @param event\n * @returns\n */\nexport const getRawSourceFrom = (\n element: RealmElement,\n value: MixedDataType,\n sourceType?: string,\n event?: DataSource\n) => {\n const strValue = `${value}`;\n const eventLookup: Record<string, () => MixedDataType> = {\n [FlowDataSource.EVENT]: () => getValueFrom(event, strValue),\n [FlowDataSource.GLOBAL_STATE]: () =>\n getValueFrom(getGlobalState(), strValue),\n [FlowDataSource.LOCAL_STATE]: () => getValueFrom(element.states, strValue),\n [FlowDataSource.EVENT_ATTR]: () => {\n const attrOwner = (<Event>event).target as RealmElement;\n const attrs = element.$attrsKv(attrOwner);\n return getValueFrom(attrs, strValue);\n },\n [FlowDataSource.ATTR]: () =>\n getValueFrom(\n {\n ...getDefaultAttrValues(element),\n ...element.$attrsKv(element),\n },\n strValue\n ),\n };\n return eventLookup?.[sourceType]?.();\n};\n\n/**\n * Get value from dot notation and parse by type\n * @param element\n * @param type\n * @param value\n * @param sourceType\n * @param event\n * @returns\n */\nexport const getSourceFrom = (\n element: RealmElement,\n type: ElementDataTypes,\n value: MixedDataType,\n sourceType?: string,\n event?: DataSource\n) => {\n const getRawValue = () => getRawSourceFrom(element, value, sourceType, event);\n const eventLookup: Record<string, () => MixedDataType> = {\n [FlowDataSource.EVENT]: () => parseValue(type, getRawValue()),\n [FlowDataSource.EVENT_ATTR]: getRawValue,\n [FlowDataSource.ATTR]: getRawValue,\n [FlowDataSource.GLOBAL_STATE]: () => parseValue(type, getRawValue()),\n [FlowDataSource.LOCAL_STATE]: () => parseValue(type, getRawValue()),\n };\n return eventLookup?.[sourceType]?.() ?? parseValue(type, value);\n};\n\n/**\n * Find attribute for the action element\n * @param actionArgs\n * @param attrName\n * @param fallbackAttr\n * @returns\n */\nexport const findAttr = <T>(\n actionArgs: Array<string[]>,\n attrName: string,\n fallbackAttr?: T,\n isMultipleResult = false\n) => {\n const attr = findAttrFrom(actionArgs, attrName, isMultipleResult);\n const hasAttr = attr !== undefined;\n return [hasAttr ? attr : fallbackAttr, hasAttr] as [T, boolean];\n};\n\n/**\n * Update state or attribute\n * @returns\n */\nexport const getMutatedValue = (\n element: RealmElement,\n actionArgs: Array<string[]>,\n attrType: ElementDataTypes,\n event: Event | Record<string, unknown>\n): ((\n prevValue: MixedDataType\n) => string | number | boolean | void | object) => {\n const [mutateAttr] = findAttr<string>(\n actionArgs,\n AttrMutate,\n MutateTypeEqual\n );\n const [indexAttr, hasIndexAttr] = findAttr<number>(actionArgs, AttrIndex);\n const [valueAttr, hasValueAttr] = findAttr<MixedDataType>(\n actionArgs,\n AttrValue\n );\n\n const isDataTypeArray = attrType === DataTypeArray;\n const isDataTypeHTML = attrType === DataTypeHTML;\n const isDataTypeBool = attrType === DataTypeBool;\n const isMutateTypeEqualsTo = mutateAttr === MutateTypeEqual;\n const isMutateTypeArrayRemove = mutateAttr === MutateTypeRemove;\n const isMutateTypeArrayPop = mutateAttr === MutateTypeArrayPop;\n const isMutateTypeArrayPush = mutateAttr === MutateTypeArrayPush;\n const isMutateTypeArrayAdd = mutateAttr === MutateTypeArrayAdd;\n const isMutateTypeArrayAssign = mutateAttr === MutateTypeArrayAssign;\n\n const isMutationArrayNotRequiredIndex =\n isMutateTypeArrayPush || isMutateTypeEqualsTo;\n const isMutationArrayRequiredIndex =\n isMutateTypeArrayRemove || isMutateTypeArrayAdd || isMutateTypeArrayAssign;\n const isStringMutationAllowed = !isDataTypeArray && hasValueAttr;\n const isHTMLMutationAllowed = isDataTypeHTML;\n const isArrayMutationAllowed =\n isDataTypeArray &&\n (isMutateTypeArrayPop ||\n (isMutationArrayRequiredIndex && hasIndexAttr) ||\n (isMutationArrayNotRequiredIndex && hasValueAttr));\n const isMutationAllowed =\n isStringMutationAllowed || isHTMLMutationAllowed || isArrayMutationAllowed;\n if (!isMutationAllowed) return;\n\n const [sourceType] = findAttr<string>(actionArgs, AttrFrom);\n const attrIndex = hasIndexAttr\n ? getSourceFrom(element, attrType, indexAttr, sourceType, event)\n : \"-1\";\n let attrValue = getSourceFrom(\n element,\n attrType,\n valueAttr,\n sourceType,\n event\n );\n\n const [, hasToggleAttr] = findAttr(actionArgs, AttrToggle);\n const isToggleBoolean = hasToggleAttr && isDataTypeBool;\n if (isToggleBoolean) attrValue = !attrValue;\n\n const mutatedValue = mutatesValue([\n mutateAttr,\n attrType,\n attrValue,\n +attrIndex,\n hasToggleAttr,\n ]);\n\n return mutatedValue;\n};\n\n/**\n * Get element's attribute type\n * @param name\n * @param attrEntries\n * @returns\n */\nexport const getAttrType = (\n name: string,\n attrEntries: Set<ElementAttributeEntries>\n): ElementDataTypes | undefined =>\n arrayReduce(\n createArray<ElementAttributeEntries>(attrEntries),\n (acc, [attrName, attrType]) => (attrName === name ? attrType : acc)\n );\n\n/**\n * Execute the action\n * @param element\n * @param elementName\n * @param actions\n * @returns\n */\nexport const doAction =\n (element: RealmElement, elementName: string, actions: Array<FlowAction>) =>\n (\n eventType: string,\n eventName: string,\n event?: Event | Record<string, unknown>\n ) =>\n forEach<FlowAction>(actions, ([actionName, actionArgs]) => {\n const [requiredAttrs = [], triggerAction] = getMap(\n ACTIONS_REGISTRY,\n actionName\n );\n\n const isValidAction = someArray(requiredAttrs, (attrName) => {\n const [, hasAttr] = findAttr(actionArgs, attrName);\n return hasAttr;\n });\n\n if (requiredAttrs.length && !isValidAction) return;\n return triggerAction?.(\n element,\n elementName,\n actionArgs,\n event,\n eventType,\n eventName\n );\n });\n\n/**\n * Trigger action wrapper\n * @param element\n * @param elementName\n * @returns\n */\nconst actionTrigger =\n (element: RealmElement, elementName: string) =>\n (actions: Array<FlowAction>) =>\n doAction(element, elementName, actions);\n\n/**\n * Create action trigger for element flow actions\n */\nexport const createActionTrigger = (element: RealmElement) =>\n actionTrigger(element, element.$name());\n\ninterface DefineActionOption {\n name: string;\n requiredAttrs?: string[];\n onTrigger: TriggerAction;\n}\n\nexport const defineAction =\n ({ name, requiredAttrs, onTrigger }: DefineActionOption) =>\n () =>\n setMap(ACTIONS_REGISTRY, name, [requiredAttrs, onTrigger]);\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport {\n defineAction,\n doAction,\n findAttr,\n getRawSourceFrom,\n} from \"../utils/action\";\nimport { ElementDataTypes } from \"../utils/element\";\nimport { ActionArg, FlowAction } from \"../utils/flow\";\nimport { forEach, fromEntries } from \"../utils/object\";\nimport { newError } from \"../utils/string\";\n\nconst HttpMethod = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n DELETE: \"DELETE\",\n PATCH: \"PATCH\",\n} as const;\n\nconst ResponseType = {\n JSON: ElementDataTypes.JSON_STRING,\n HTML: ElementDataTypes.HTML,\n TEXT: \"text\",\n} as const;\n\n/**\n * Trigger <http-request /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const httpRequestAction = defineAction({\n name: FlowActionTypes.HTTP_REQUEST,\n\n async onTrigger(\n element: RealmElement,\n elementName: string,\n actionArgs: Array<string[]>,\n $event: Event,\n eventType: string,\n eventName: string\n ) {\n const [urlAttr, hasUrlAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.HTTP_URL\n );\n if (!hasUrlAttr)\n throw newError(\n `Missing \"${RealmAttributeNames.HTTP_URL}\" attribute on <${FlowActionTypes.HTTP_REQUEST} />`\n );\n\n const [actionAttrs] = findAttr<ActionArg[]>(\n actionArgs,\n RealmAttributeNames.ACTION\n );\n\n const [responseResponseOkAttr = [], hasResponseOkAttr] = findAttr<\n ActionArg[]\n >(actionAttrs, FlowActionTypes.RESPONSE_SUCCESS);\n const [responseOkActions, hasResponseOkActions] = findAttr<FlowAction[]>(\n responseResponseOkAttr,\n RealmAttributeNames.ACTION\n );\n\n const [responseResponseFailAttr = [], hasResponseFailAttr] = findAttr<\n ActionArg[]\n >(actionAttrs, FlowActionTypes.RESPONSE_ERROR);\n const [responseFailActions, hasResponseFailActions] = findAttr<\n FlowAction[]\n >(responseResponseFailAttr, RealmAttributeNames.ACTION);\n\n const isValidHttpRequest = hasResponseOkAttr || hasResponseFailAttr;\n if (!isValidHttpRequest) return;\n\n const [method = HttpMethod.GET] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.METHOD\n );\n const [asAttr = ResponseType.TEXT] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.AS\n );\n const [headersAttrs = []] = findAttr<ActionArg[][]>(\n actionAttrs,\n FlowActionTypes.REQUEST_HEADER,\n [],\n true\n );\n\n const headers = new Headers();\n forEach(headersAttrs, (headerAttr) => {\n const header = fromEntries(headerAttr);\n headers.set(\n header[RealmAttributeNames.NAME],\n header[RealmAttributeNames.VALUE]\n );\n });\n\n const [bodyAttr, hasBodyAttr] = findAttr<ActionArg[]>(\n actionAttrs,\n FlowActionTypes.REQUEST_BODY\n );\n\n let body;\n if (hasBodyAttr) {\n const [bodyContent, hasBodyContent] = findAttr<ElementDataTypes>(\n bodyAttr,\n RealmAttributeNames.ACTION\n );\n if (hasBodyAttr && hasBodyContent) body = bodyContent;\n\n const [bodyValueAttr, hasBodyValueAttr] = findAttr<ElementDataTypes>(\n bodyAttr,\n RealmAttributeNames.VALUE\n );\n const [bodyFromAttr, hasBodyFromAttr] = findAttr<ElementDataTypes>(\n bodyAttr,\n RealmAttributeNames.FROM\n );\n if (hasBodyValueAttr && hasBodyFromAttr) {\n body = getRawSourceFrom(element, bodyValueAttr, bodyFromAttr, $event);\n }\n }\n\n const doActionWrapper = (\n responseAction: FlowAction[],\n $event: Event | Record<string, unknown>\n ) =>\n doAction(element, elementName, responseAction)(\n eventName,\n eventType,\n $event\n );\n\n try {\n const response = await fetch(urlAttr, {\n body,\n method,\n headers,\n });\n if (!response.ok) throw newError(`[${response.status}] ${urlAttr}`);\n if (!hasResponseOkActions) return;\n\n const getTextResponse = () => response.text();\n const valueLookup = {\n [ResponseType.JSON]: () => response.json(),\n [ResponseType.HTML]: getTextResponse,\n [ResponseType.TEXT]: getTextResponse,\n };\n const responseValue = await valueLookup?.[asAttr]?.();\n doActionWrapper(responseOkActions, responseValue);\n } catch (err) {\n if (!hasResponseFailActions) return;\n doActionWrapper(responseFailActions, {\n message: \"[ERROR] \" + err?.message ?? `unknown error, URL: ${urlAttr}`,\n });\n }\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { EMPTY_STRING } from \"../constants/chars\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { getGlobalState } from \"../elements/global-state\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction, findAttr } from \"../utils/action\";\nimport { getDefaultAttrValues } from \"../utils/element\";\nimport { getScriptFlow } from \"../utils/flow\";\nimport { reqAnim } from \"../utils/timer\";\n\nconst getScriptArgs = (element: RealmElement, $event: Event) => {\n event = undefined;\n const attrs = {\n ...getDefaultAttrValues(element),\n ...element.$attrsKv(),\n };\n\n const getShadowArgs = (refName: string) => [\n EMPTY_STRING,\n [[RealmAttributeNames.REF, refName]],\n ];\n\n return [\n {\n $: element,\n attr: {\n get: (name: string) => element.$attr(name) ?? attrs?.[name],\n set: element._attr,\n },\n refs: (refName: string) =>\n element.$shadowEls.apply(null, getShadowArgs(refName)),\n ref: (refName: string) =>\n element.$shadowEl.apply(null, getShadowArgs(refName)),\n attrs: element.$attrsKv(),\n localState: element.states,\n globalState: getGlobalState(),\n event: $event,\n },\n ];\n};\n\n/**\n * Trigger <script type=\"module/realm\" /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const scriptAction = defineAction({\n name: FlowActionTypes.SCRIPT,\n\n requiredAttrs: [RealmAttributeNames.SCRIPT_ID],\n\n onTrigger(\n element: RealmElement,\n elementName: string,\n actionArgs: Array<string[]>,\n event: Event\n ) {\n const [scriptIdAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.SCRIPT_ID\n );\n\n const eventValue = event?.target?.[RealmAttributeNames.VALUE];\n const waitForScriptLoaded = () =>\n reqAnim(() => {\n const scriptFlow = getScriptFlow(elementName, scriptIdAttr);\n const isScriptLoaded = !!scriptFlow;\n if (!isScriptLoaded) return waitForScriptLoaded();\n if (eventValue !== undefined && !!event?.target)\n event.target[RealmAttributeNames.VALUE] = eventValue;\n scriptFlow?.apply(element, getScriptArgs(element, event));\n });\n waitForScriptLoaded();\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { COLON, EMPTY_STRING } from \"../constants/chars\";\nimport { FlowActionTypes, FlowRuntimeEventTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction, findAttr, getSourceFrom } from \"../utils/action\";\nimport { ElementDataTypes } from \"../utils/element\";\nimport { JSONSafeParse } from \"../utils/json\";\nimport { createArray, forEach } from \"../utils/object\";\n\n/**\n * Trigger <send-event /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const sendEventAction = defineAction({\n name: FlowActionTypes.SEND_EVENT,\n\n requiredAttrs: [RealmAttributeNames.NAME],\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n $event: Event\n ) {\n const [eventNameAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.NAME\n );\n const [targetAttr, hasTargetAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.TO\n );\n const [parentTargetAttr, hasParentTargetAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.TO + COLON + \"parent\"\n );\n const [typeAttr, hasTypeAttr] = findAttr<ElementDataTypes>(\n actionArgs,\n RealmAttributeNames.TYPE\n );\n const [valueAttr, hasValueAttr] = findAttr<ElementDataTypes>(\n actionArgs,\n RealmAttributeNames.VALUE\n );\n const [fromAttr, hasFromAttr] = findAttr<ElementDataTypes>(\n actionArgs,\n RealmAttributeNames.FROM\n );\n const [actionAttr] = findAttr<string>(\n actionArgs,\n RealmAttributeNames.ACTION\n );\n const hasValueFromAttr = hasValueAttr && hasFromAttr;\n\n const getValue = () =>\n getSourceFrom(element, typeAttr, valueAttr, fromAttr, $event) ||\n valueAttr;\n\n const eventDetailExtendedTypeLookup = {\n [ElementDataTypes.HTML]: () => actionAttr,\n [ElementDataTypes.JSON_STRING]: () => JSONSafeParse(actionAttr),\n };\n\n const selector = [EMPTY_STRING, RealmAttributeNames.REF, targetAttr];\n const eventName = FlowRuntimeEventTypes.ON + COLON + eventNameAttr;\n let eventDetail = $event;\n if (hasTypeAttr)\n eventDetail = !hasValueFromAttr\n ? eventDetailExtendedTypeLookup[typeAttr]?.() ?? valueAttr\n : getValue();\n\n let targetElements: RealmElement[] = [element];\n\n if (hasTargetAttr) {\n targetElements = createArray(element.$shadowEls.apply(null, selector));\n }\n\n if (hasParentTargetAttr) {\n const parentElement = element.$host<RealmElement>();\n targetElements = [parentElement];\n if (parentTargetAttr !== EMPTY_STRING) {\n targetElements = createArray(\n parentElement.$shadowEls.apply(null, selector)\n );\n }\n }\n\n forEach(targetElements, (targetElement: RealmElement) =>\n targetElement._sendEvent(eventName, eventDetail)\n );\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport {\n getGlobalStateType,\n updateGlobalState,\n} from \"../elements/global-state\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport {\n defineAction,\n findAttr,\n getAttrType,\n getMutatedValue,\n} from \"../utils/action\";\nimport { parseValue } from \"../utils/element\";\n\n/**\n * Trigger <set-state /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const setStateAction = defineAction({\n name: FlowActionTypes.SET_STATE,\n requiredAttrs: [RealmAttributeNames.NAME],\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n event\n ) {\n const updateLocalState = (name: string, value: unknown) =>\n element.states.set(name, value);\n const [nameAttr] = findAttr<string>(actionArgs, RealmAttributeNames.NAME);\n const [, hasGlobalAttr] = findAttr(actionArgs, RealmAttributeNames.GLOBAL);\n const attrType = hasGlobalAttr\n ? getGlobalStateType(nameAttr)\n : getAttrType(nameAttr, element.statesRegistry);\n const updateState = hasGlobalAttr ? updateGlobalState : updateLocalState;\n const value = getMutatedValue(element, actionArgs, attrType, event);\n updateState(nameAttr, value);\n },\n});\n\n/**\n * Trigger <set-attr /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const setAttrAction = defineAction({\n name: FlowActionTypes.SET_ATTR,\n requiredAttrs: [RealmAttributeNames.NAME],\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n event\n ) {\n const [nameAttr] = findAttr<string>(actionArgs, RealmAttributeNames.NAME);\n const attrType = getAttrType(nameAttr, element.attrsRegistry);\n const mutatedValue = getMutatedValue(element, actionArgs, attrType, event);\n const prevValue = parseValue(attrType, element.$attr(nameAttr));\n const value = mutatedValue(prevValue);\n element._attr(nameAttr, `${value}`);\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction, doAction, findAttr } from \"../utils/action\";\nimport { FlowAction } from \"../utils/flow\";\nimport { timerEvery, timerOnce } from \"../utils/timer\";\n\n/**\n * Trigger <set-timer /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const setTimerAction = defineAction({\n name: FlowActionTypes.SET_TIMER,\n\n requiredAttrs: [RealmAttributeNames.ONCE, RealmAttributeNames.EVERY],\n\n onTrigger(\n element: RealmElement,\n elementName: string,\n actionArgs: Array<string[]>,\n event: Event,\n eventType: string,\n eventName: string\n ) {\n const [actionAttr, hasActionAttr] = findAttr<FlowAction[]>(\n actionArgs,\n RealmAttributeNames.ACTION\n );\n\n if (!hasActionAttr) return;\n\n const [onceAttr, hasOnceAttr] = findAttr(\n actionArgs,\n RealmAttributeNames.ONCE\n );\n const [everyAttr, hasEveryAttr] = findAttr(\n actionArgs,\n RealmAttributeNames.EVERY\n );\n\n const doTimer = () =>\n doAction(element, elementName, actionAttr)(eventName, eventType, event);\n\n if (hasOnceAttr) {\n timerOnce(doTimer, +onceAttr);\n } else if (hasEveryAttr) {\n timerEvery(doTimer, +everyAttr);\n }\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { EMPTY_STRING } from \"../constants/chars\";\nimport { FlowActionTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineAction } from \"../utils/action\";\nimport { forEach, forEachNode } from \"../utils/object\";\n\n/**\n * Trigger <trigger-action /> action\n * @param element\n * @param actionArgs\n * @returns\n */\nexport const triggerElementAction = defineAction({\n name: FlowActionTypes.TRIGGER_ELEMENT,\n\n onTrigger(\n element: RealmElement,\n _elementName: string,\n actionArgs: Array<string[]>,\n event: Event\n ) {\n forEach(actionArgs, ([actionName, selector]) =>\n forEachNode(\n element.$shadowEls(EMPTY_STRING, [[RealmAttributeNames.REF, selector]]),\n (el) => el?.[actionName]?.(event)\n )\n );\n },\n});\n","import { COLON } from \"../constants/chars\";\nimport { FlowEventNames, FlowRuntimeEventTypes } from \"../constants/flow\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { FlowAction, FlowEvent, defineFlow } from \"../utils/flow\";\nimport { forEach } from \"../utils/object\";\nimport { reqAnim } from \"../utils/timer\";\n\ntype ApplyEventCallback = (\n dispatcherElement: RealmElement,\n eventType: string,\n eventName: string,\n actions: FlowAction[]\n) => void;\n\nconst dispatchEvent =\n (isRemoveEvent?: boolean) =>\n (\n dispatcherElement: RealmElement,\n eventType: string,\n eventName: string,\n actions: FlowAction[]\n ) => {\n const hasEventName = !!eventName;\n const eventCaller = isRemoveEvent\n ? dispatcherElement._removeEvent\n : dispatcherElement._addCustomEvent;\n const isCustomEvent = eventType === FlowRuntimeEventTypes.ON;\n const finalEventName = isCustomEvent\n ? FlowRuntimeEventTypes.ON + COLON + eventName\n : eventType;\n\n eventCaller(finalEventName, (event) => {\n if (!isCustomEvent && hasEventName && eventName !== event[0]) return;\n reqAnim(() =>\n dispatcherElement._sendEvent(FlowEventNames.LISTEN_EVENT, [\n eventType,\n eventName,\n actions,\n event,\n ])\n );\n });\n };\n\nconst applyEventListener = (\n flow: Set<FlowEvent>,\n hostElement: RealmElement,\n applyEventCallback: ApplyEventCallback\n) =>\n forEach(flow, ([attrs, actions]) =>\n forEach(attrs, ([eventType, eventName]) =>\n applyEventCallback(hostElement, eventType, eventName, actions)\n )\n );\n\nexport const listenEventFlow = defineFlow({\n name: FlowEventNames.LISTEN_EVENT,\n\n async onApply(flow, hostElement, dispatcherElement) {\n applyEventListener(flow, dispatcherElement ?? hostElement, dispatchEvent());\n },\n\n async onRemove(flow, hostElement, dispatcherElement) {\n applyEventListener(\n flow,\n dispatcherElement ?? hostElement,\n dispatchEvent(true)\n );\n },\n});\n","import { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmAttributeNames } from \"../constants/attrs\";\nimport { EMPTY_STRING } from \"../constants/chars\";\nimport { FlowEventNames } from \"../constants/flow\";\nimport { findAttrFrom } from \"../utils/element\";\nimport { FlowAction, FlowEvent, defineFlow } from \"../utils/flow\";\nimport { forEach, forEachNode } from \"../utils/object\";\nimport { TimerReturn, timerOnce } from \"../utils/timer\";\n\ntype ApplyEventCallback<T> = (\n dispatcherElement: RealmElement,\n debounceTime: number,\n eventName: string,\n actions: FlowAction[]\n) => (element: T) => void;\n\nconst sendTriggerEvent =\n (\n dispatcherElement: RealmElement,\n debounceTimer: TimerReturn,\n debounceTime: number,\n eventName: string,\n actions: FlowAction[]\n ) =>\n (event: Event) => {\n const [, clearTimeout] = debounceTimer || [];\n clearTimeout?.();\n\n if (debounceTime > 0) {\n const eventValue = event?.target?.[RealmAttributeNames.VALUE];\n debounceTimer = timerOnce(() => {\n if (eventValue !== undefined && !!event?.target)\n event.target[RealmAttributeNames.VALUE] = eventValue;\n dispatcherElement._sendEvent(FlowEventNames.TRIGGER_EVENT, [\n EMPTY_STRING,\n eventName,\n actions,\n event,\n ]);\n }, debounceTime);\n return;\n }\n\n return dispatcherElement._sendEvent(FlowEventNames.TRIGGER_EVENT, [\n EMPTY_STRING,\n eventName,\n actions,\n event,\n ]);\n };\n\nconst dispatchEvent =\n (hostElement?: RealmElement, isRemoveEvent?: boolean) =>\n (\n dispatcherElement: RealmElement,\n debounceTime: number,\n eventName: string,\n actions: FlowAction[]\n ) =>\n (listenerElement: RealmElement) => {\n let debounceTimer: TimerReturn;\n const eventCaller = isRemoveEvent\n ? dispatcherElement._removeEvent\n : dispatcherElement._addEvent;\n eventCaller(\n eventName,\n sendTriggerEvent(\n hostElement,\n debounceTimer,\n debounceTime,\n eventName,\n actions\n ),\n listenerElement\n );\n };\n\nconst applyTriggerEvent = (\n flow: Set<FlowEvent>,\n hostElement: RealmElement,\n applyEventCallback: ApplyEventCallback<RealmElement>\n) =>\n forEach(flow, ([attrs, actions]) => {\n const debounceTime = +findAttrFrom(attrs, RealmAttributeNames.DEBOUNCE);\n forEach(attrs, ([attrName, attrValue]) => {\n if (attrName === RealmAttributeNames.DEBOUNCE) return;\n forEachNode(\n hostElement.$shadowEls(\n EMPTY_STRING,\n RealmAttributeNames.REF,\n attrValue\n ),\n applyEventCallback(hostElement, debounceTime, attrName, actions)\n );\n });\n });\n\nexport const triggerEventFlow = defineFlow({\n name: FlowEventNames.TRIGGER_EVENT,\n\n async onApply(flow, hostElement, dispatcherElement) {\n applyTriggerEvent(\n flow,\n dispatcherElement ?? hostElement,\n dispatchEvent(hostElement)\n );\n },\n\n async onRemove(flow, hostElement, dispatcherElement) {\n applyTriggerEvent(\n flow,\n dispatcherElement ?? hostElement,\n dispatchEvent(hostElement, true)\n );\n },\n});\n","import { httpRequestAction } from \"../actions/http-request\";\nimport { scriptAction } from \"../actions/script-flow\";\nimport { sendEventAction } from \"../actions/send-event\";\nimport { setAttrAction, setStateAction } from \"../actions/set-action\";\nimport { setTimerAction } from \"../actions/set-timer\";\nimport { triggerElementAction } from \"../actions/trigger-element\";\nimport { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { listenEventFlow } from \"../flows/listen-event\";\nimport { triggerEventFlow } from \"../flows/trigger-event\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { defineElement } from \"../utils/element\";\n\nexport const eventFlowList = [listenEventFlow, triggerEventFlow];\nconst actionList = [\n httpRequestAction,\n scriptAction,\n sendEventAction,\n setAttrAction,\n setStateAction,\n setTimerAction,\n triggerElementAction,\n];\n\nexport const elementFlow = defineElement({\n name: RealmTagNames.ELEMENT_FLOW,\n\n async onBeforeInit(element) {\n const parentElement = element.$parent<RealmElement>();\n if (!parentElement) return;\n\n const eventFlowOwnerName = element.$attr<string>(\n RealmAttributeNames.NAME,\n parentElement\n );\n\n for (const registerAction of actionList) await registerAction();\n for (const [registerEventFlow] of eventFlowList)\n await registerEventFlow(eventFlowOwnerName, element);\n },\n\n async onMounted(element) {\n const parentNode = element.$parentNode();\n const isValidParentNode = parentNode instanceof ShadowRoot;\n if (!isValidParentNode) return;\n\n const hostElement = element.$host<RealmElement>();\n for (const [, applyEventFlow] of eventFlowList)\n await applyEventFlow(hostElement);\n element._remove();\n },\n});\n","import { RealmAttributeNames, RealmMutableAttr } from \"../constants/attrs\";\nimport { META_PREFIX } from \"../constants/chars\";\nimport { MixedDataType } from \"../constants/data\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport {\n ElementAttributeEntries,\n bindElement,\n defineElement,\n getElementAttrBindings,\n} from \"../utils/element\";\nimport { createArray, forEach, isArray, toDotNotation } from \"../utils/object\";\nimport { strSlice } from \"../utils/string\";\nimport { eventFlowList } from \"./element-flow\";\nimport { getGlobalState } from \"./global-state\";\n\nexport const repeatListElement = defineElement({\n name: RealmTagNames.REPEAT_LIST,\n\n onBeforeInit(element) {\n const fragment = element._createFragment();\n forEach(element.$nodes(), (node) => {\n element._append(element.$clone(node), fragment);\n element._remove(node);\n });\n\n element._attach();\n element._clear();\n\n const hostElement = element.$host<RealmElement>();\n if (!hostElement) return;\n\n const ofAttr = element.$attr<string>(RealmAttributeNames.OF);\n const dataSource = strSlice(ofAttr);\n if (!dataSource) return;\n\n const hostElementStates = hostElement?.states;\n const hostElementStatesRegistry = hostElement.statesRegistry;\n const hostElementAttrsRegistry = hostElement.attrsRegistry;\n\n const removeElementFlow = async () => {\n for (const [, , removeEventFlow] of eventFlowList)\n await removeEventFlow(hostElement, element);\n };\n\n const updateElementFlow = async () => {\n for (const [, applyEventFlow] of eventFlowList)\n await applyEventFlow(hostElement, element);\n };\n\n const updateIterableContent = (entries: Array<MixedDataType>) => {\n const elementShadow = element.$shadow();\n element._clear();\n element._clear(elementShadow);\n\n forEach(entries, (item, index) => {\n element._append(\n element.$clone<DocumentFragment>(fragment),\n elementShadow\n );\n\n const elementAttrBindings = getElementAttrBindings(element);\n forEach(toDotNotation(item), (name) =>\n bindElement(\n element,\n RealmMutableAttr.SRC,\n elementAttrBindings,\n name,\n item,\n false\n )\n );\n\n const meta = { index, length: entries.length };\n forEach(toDotNotation(meta, META_PREFIX), (name) =>\n bindElement(\n element,\n RealmMutableAttr.META,\n elementAttrBindings,\n name,\n meta,\n false\n )\n );\n });\n\n const elementAttrBindings = getElementAttrBindings(element);\n forEach(\n createArray<[Set<ElementAttributeEntries>, string]>([\n [hostElementStatesRegistry, RealmMutableAttr.STATE],\n [hostElementAttrsRegistry, RealmMutableAttr.ATTR],\n ]),\n ([registry, dataType]) =>\n forEach(registry, ([mutateName]) => {\n const valueLookup: Record<string, () => unknown> = {\n [RealmMutableAttr.ATTR]: () => hostElement.$attr(mutateName),\n [RealmMutableAttr.STATE]: () =>\n hostElementStates.get<MixedDataType>(mutateName),\n };\n bindElement(\n element,\n dataType,\n elementAttrBindings,\n mutateName,\n valueLookup[dataType](),\n false\n );\n })\n );\n };\n\n // Whenever attributes, local & global state changes, reupdate binding elements\n forEach(\n createArray<[RealmState, string, boolean]>([\n [hostElement, RealmMutableAttr.ATTR],\n [hostElementStates, RealmMutableAttr.STATE],\n [getGlobalState(), RealmMutableAttr.STATE, true],\n ]),\n ([mutator, mutateType, isGlobalState]) => {\n mutator.subscribe(\n async (mutatorName, value: MixedDataType | Array<MixedDataType>) => {\n const isValidIterableSource =\n isArray(value) && mutatorName === dataSource;\n\n if (!isValidIterableSource)\n return bindElement(\n element,\n mutateType,\n getElementAttrBindings(element),\n mutatorName,\n value,\n isGlobalState,\n true\n );\n\n await removeElementFlow();\n updateIterableContent(value as Array<MixedDataType>);\n await updateElementFlow();\n }\n );\n }\n );\n //#endregion\n },\n});\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { defineElement } from \"../utils/element\";\n\nexport const webAppElement = defineElement({\n name: RealmTagNames.WEB_APP,\n\n onMounted(element) {\n element._attr(RealmAttributeNames.IS_LOADED, true);\n },\n});\n","import { RealmAttributeNames, RealmMutableAttr } from \"../constants/attrs\";\nimport { MixedDataType } from \"../constants/data\";\nimport {\n FlowEventNames,\n FlowRuntimeEventTypes,\n FlowRuntimeMutableEventTypesLookup,\n} from \"../constants/flow\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { RealmElement } from \"../libs/RealmElement.class\";\nimport { RealmState } from \"../libs/RealmState.class\";\nimport {\n createActionTrigger,\n getAttrRegistry,\n getStateRegistry,\n} from \"../utils/action\";\nimport { $el, $els, doc } from \"../utils/dom\";\nimport {\n ElementAttributeEntries,\n defineElement,\n parseValue,\n getElementAttrBindings,\n bindElement,\n} from \"../utils/element\";\nimport { FlowAction } from \"../utils/flow\";\nimport {\n addSet,\n arrayPush,\n arrayReduce,\n createArray,\n createMap,\n createSet,\n entriesOf,\n forEach,\n forEachNode,\n getMap,\n getValueFrom,\n setMap,\n} from \"../utils/object\";\nimport { getGlobalStateRegistry, getGlobalState } from \"./global-state\";\n\nconst HTML_REGISTRY = createMap<string, HTMLTemplateElement>();\n\nconst STYLE_REGISTRY = createMap<string, HTMLStyleElement>();\n\nconst ELEMENT_FLOW_REGISTRY = createMap<string, Set<RealmElement>>();\n\nconst SCRIPT_REGISTRY = createMap<string, Set<RealmElement>>();\n\nconst LINK_STYLE_REGISTRY = createMap<string, Set<RealmElement>>();\n\n/**\n * Register custom element\n * @param elementName\n * @returns\n */\nexport const registerElement = (elementName: string) =>\n defineElement({\n name: elementName,\n\n onBeforeRegister() {\n const element = $el(doc)<RealmElement>(\n RealmTagNames.CUSTOM_ELEMENT,\n RealmAttributeNames.NAME,\n elementName\n );\n\n //#region register html definition\n const template = $el(element)<HTMLTemplateElement>(\n RealmTagNames.TEMPLATE\n );\n setMap(HTML_REGISTRY, elementName, template);\n //#endregion\n\n //#region register style definition\n if (template) {\n forEachNode(\n $els(template.content)<HTMLStyleElement>(RealmTagNames.STYLE),\n (style) => setMap(STYLE_REGISTRY, elementName, style)\n );\n }\n //#endregioin\n\n //#region register element to shadow\n forEach<[string, Map<string, Set<RealmElement>>]>(\n [\n [RealmTagNames.ELEMENT_FLOW, ELEMENT_FLOW_REGISTRY],\n [RealmTagNames.IMPORT_SCRIPT, SCRIPT_REGISTRY],\n [RealmTagNames.IMPORT_STYLE, LINK_STYLE_REGISTRY],\n ],\n ([tagName, registry]) => {\n setMap(\n registry,\n elementName,\n createSet(createArray($els(element)<RealmElement>(tagName)))\n );\n }\n );\n //#endregion\n },\n\n onBeforeInit(element) {\n //#region render styles and DOM to shadow DOM\n element._attach();\n element._renderStyle(getMap(STYLE_REGISTRY, elementName));\n element._renderTemplate(getMap(HTML_REGISTRY, elementName));\n forEach(\n [ELEMENT_FLOW_REGISTRY, SCRIPT_REGISTRY, LINK_STYLE_REGISTRY],\n (registry) =>\n forEach(getMap(registry, elementName), element._renderShadow)\n );\n //#endregion\n\n //#region slot element's children to shadow element\n const slotChildren = element.$shadowEl<HTMLSlotElement>(\n RealmTagNames.SLOT,\n [[RealmAttributeNames.CHILDREN]]\n );\n const slottedChildren = arrayReduce(\n element.$nodes(),\n (acc, childElement) => {\n const slotName = element.$attr<string>(\n RealmAttributeNames.SLOT,\n childElement\n );\n\n if (slotName) {\n element._slotTo(\n element.$shadowEl<HTMLSlotElement>(RealmTagNames.SLOT, [\n [RealmAttributeNames.NAME, slotName],\n ]),\n [childElement]\n );\n return acc;\n }\n return [...acc, childElement];\n },\n []\n );\n element._slotTo(slotChildren, slottedChildren);\n //#endregion\n\n //#region register and apply element that contains binding attributes\n const bindingElements = getElementAttrBindings(element);\n //#endregion\n\n //#region apply attributes, local & global states to element\n const attributesRegistry = getAttrRegistry(elementName);\n const statesRegistry = getStateRegistry(elementName);\n forEach(\n createArray<[Set<ElementAttributeEntries>, string, boolean]>([\n [createArray(attributesRegistry), RealmMutableAttr.ATTR],\n [createArray(statesRegistry), RealmMutableAttr.STATE],\n [getGlobalStateRegistry(), RealmMutableAttr.STATE, true],\n ]),\n ([registry, dataType, isGlobalState]) =>\n forEach(registry, ([mutateName, valueType, value]) => {\n const getParsedValue = () => parseValue(valueType, value);\n const getValueFromSource = () => getValueFrom(value, mutateName);\n const valueLookup: Record<string, () => MixedDataType> = {\n [RealmMutableAttr.ATTR]: () =>\n element.$attr<string>(mutateName) ?? getParsedValue(),\n [RealmMutableAttr.STATE]: getParsedValue,\n [RealmMutableAttr.SRC]: getValueFromSource,\n [RealmMutableAttr.META]: getValueFromSource,\n };\n\n if (dataType === RealmMutableAttr.ATTR)\n addSet(element.attrsRegistry, [mutateName, valueType, value]);\n\n if (!isGlobalState && dataType === RealmMutableAttr.STATE)\n addSet(element.statesRegistry, [mutateName, valueType, value]);\n\n bindElement(\n element,\n dataType,\n bindingElements,\n mutateName,\n valueLookup[dataType](),\n isGlobalState\n );\n })\n );\n\n // Update whenever element's attr, local & global state changes\n forEach(\n createArray<[RealmState, string, boolean]>([\n [element, RealmMutableAttr.ATTR],\n [element.states, RealmMutableAttr.STATE, false],\n [getGlobalState(), RealmMutableAttr.STATE, true],\n ]),\n ([mutator, mutateType, globalState]) =>\n mutator.subscribe((mutatorName, value: string, oldValue) => {\n const eventDetail = [mutatorName, value, oldValue];\n if (mutateType === RealmMutableAttr.STATE)\n arrayPush(eventDetail, globalState);\n element._sendEvent(\n FlowRuntimeMutableEventTypesLookup[mutateType],\n eventDetail\n );\n bindElement(\n element,\n mutateType,\n bindingElements,\n mutatorName,\n value,\n globalState,\n true\n );\n })\n );\n //#endregion\n\n //#region apply actions to element\n const actionTrigger = createActionTrigger(element);\n forEach(entriesOf(FlowEventNames), ([, flowName]) =>\n element._addCustomEvent<\n [\n eventType: string,\n eventName: string,\n actions: FlowAction[],\n event: Event\n ]\n >(flowName, ([eventType, eventName, actions, event]) =>\n actionTrigger(actions)(eventType, eventName, event)\n )\n );\n //#endregion\n },\n\n onMounted(element) {\n element._sendEvent(FlowRuntimeEventTypes.MOUNTED);\n },\n\n onUnmounted(element) {\n element._sendEvent(FlowRuntimeEventTypes.UNMOUNTED);\n },\n });\n","import { RealmAttributeNames } from \"../constants/attrs\";\nimport { RealmTagNames } from \"../constants/tags\";\nimport { setAttrRegistry, setStateRegistry } from \"../utils/action\";\nimport {\n getCustomElementAttrs,\n defineElement,\n removeCustomElementAttrs,\n} from \"../utils/element\";\nimport { registerElement } from \"./core-element\";\n\nexport const customElement = defineElement({\n name: RealmTagNames.CUSTOM_ELEMENT,\n\n /**\n * Preparing attributes and states for `custom-element` element\n * @param element RealmElement\n */\n onBeforeInit(element) {\n //#region register attributes and states definition\n const mutableStores: Array<\n [string, typeof setAttrRegistry | typeof setStateRegistry]\n > = [\n [RealmTagNames.ELEMENT_ATTR, setAttrRegistry],\n [RealmTagNames.ELEMENT_STATE, setStateRegistry],\n ];\n\n const customElementName = element.$attr<string>(RealmAttributeNames.NAME);\n for (const [tagName, setRegistry] of mutableStores) {\n const attrs = getCustomElementAttrs(element, tagName);\n if (attrs) setRegistry(customElementName, attrs);\n removeCustomElementAttrs(element, tagName);\n }\n //#endregion\n },\n\n /**\n * Initializing custom element\n * @param element RealmElement\n */\n onInit(element) {\n registerElement(element.$attr<string>(RealmAttributeNames.NAME)).call(this);\n },\n\n /**\n * Mounting custom element\n * @param element RealmElement\n */\n onMounted(element) {\n element._remove();\n },\n});\n","import { importElement } from \"./elements/import-element\";\nimport {\n importScriptElement,\n importStyleElement,\n} from \"./elements/import-resource\";\nimport {\n isVisibleElement,\n isHiddenElement,\n} from \"./elements/visibility-element\";\nimport { repeatListElement } from \"./elements/repeat-list\";\nimport { globalStateElement } from \"./elements/global-state\";\nimport { webAppElement } from \"./elements/web-app\";\nimport { customElement } from \"./elements/custom-element\";\nimport { elementFlow } from \"./elements/element-flow\";\n\nconst ASYNC_ELEMENT = [\n importElement,\n importScriptElement,\n importStyleElement,\n repeatListElement,\n isVisibleElement,\n isHiddenElement,\n elementFlow,\n];\n\nconst SYNC_ELEMENT = [globalStateElement, customElement, webAppElement];\n\n(async () => {\n for (const defineElement of ASYNC_ELEMENT) await defineElement();\n for (const defineElement of SYNC_ELEMENT) defineElement();\n})();\n"],"mappings":"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","names":["arrayReduce","acc","event","arrayReduce","arrayReduce","acc","ElementDataTypes","arrayReduce","acc","customElement","arrayReduce","arrayReduce","event","arrayReduce","$event","event","event","value","event","event","event","event","clearTimeout","dispatchEvent","elementAttrBindings","arrayReduce","globalState","actionTrigger","event","defineElement"]}
|
package/package.json
CHANGED