@webqit/oohtml 2.1.60 → 2.1.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +367 -90
- package/dist/html-imports.js +1 -1
- package/dist/html-imports.js.map +2 -2
- package/dist/main.js +1 -1
- package/dist/main.js.map +2 -2
- package/package.json +1 -1
- package/src/html-imports/index.js +4 -1
package/dist/main.js
CHANGED
|
@@ -20,7 +20,7 @@ ${m}
|
|
|
20
20
|
compiledSource: compilation + '',
|
|
21
21
|
topLevelAwait: compilation.topLevelAwait
|
|
22
22
|
} );
|
|
23
|
-
};`;globalThis.webqit.$fCompilerWorker=new Worker(`data:text/javascript;base64,${btoa(o)}`)}return new Promise(r=>{let i=new MessageChannel;webqit.$fCompilerWorker.postMessage({source:e,params:t},[i.port2]),i.port1.onmessage=o=>{let{compiledSource:s,...a}=o.data;Object.defineProperty(a,"toString",{value:()=>s}),r(a)}})}var G=class{static toHash(t){let e;return(e=this.hashTable.get(t))||(e=this.uniqId(),this.hashTable.set(t,e)),e}static fromHash(t){let e;return this.hashTable.forEach((r,i)=>{r===t&&(e=i)}),e}};C(G,"hashTable",new Map),C(G,"uniqId",()=>(0|Math.random()*9e6).toString(36));function Oe({advanced:n={},...t}){let{config:e,window:r}=N.call(this,"scoped-js",t,{script:{retention:"retain",mimeType:""},advanced:Yt(n)});e.scriptSelector=(Array.isArray(e.script.mimeType)?e.script.mimeType:[e.script.mimeType]).reduce((i,o)=>{let s=o?`[type=${r.CSS.escape(o)}]`:"";return i.concat(`script${s}[scoped],script${s}[stateful]`)},[]).join(","),Object.assign(r.webqit,{StatefulAsyncFunction:Mt,StatefulAsyncScript:ft,StatefulModule:mt,State:K,Observer:h}),r.webqit.oohtml.Script={compileCache:[new Map,new Map],execute:Gr.bind(r,e)},Ur.call(r,e)}async function Gr(n,t){let e=this,{realdom:r}=e.webqit,i=G.fromHash(t);if(!i)throw new Error("Argument must be a valid exec hash.");let{script:o,compiledScript:s,thisContext:a}=i;n.script.retention==="dispose"?o.remove():n.script.retention==="dispose"?o.textContent='"source hidden"':o.textContent=await s.toString();let c=(await s.bind(a)).execute();o.stateful&&Object.defineProperty(o,"state",{value:c}),r.realtime(e.document).observe(o,()=>{o.stateful&&c.dispose(),o.scoped&&a.scripts.splice(a.scripts.indexOf(o,1))},{subtree:!0,timing:"sync",generation:"exits"})}function Ur(n){let t=this,{oohtml:e,realdom:r}=t.webqit;t.HTMLScriptElement.supports||(t.HTMLScriptElement.supports=()=>!1);let i=["module"].concat(n.script.mimeType||[]);r.realtime(t.document).subtree(n.scriptSelector,o=>{o.entrants.forEach(s=>{if(s.cloned)return;if("stateful"in s||(Object.defineProperty(s,"stateful",{value:s.hasAttribute("stateful")}),"scoped"in s))return handled(s);Object.defineProperty(s,"scoped",{value:s.hasAttribute("scoped")});let a=(s._=s.textContent.trim())&&s._.startsWith("/*@oohtml*/if(false){")&&s._.endsWith("}/*@oohtml*/")?s._.slice(21,-12):s.textContent,c=G.toHash(a),l=e.Script.compileCache[s.stateful?0:1],u;if(!(u=l.get(c))){let{parserParams:g,compilerParams:p,runtimeParams:w}=n.advanced;u=new(s.type==="module"?mt:ft)(a,{exportNamespace:`#${s.id}`,fileName:t.document.url,parserParams:g,compilerParams:{...p,startStatic:!s.stateful},runtimeParams:w}),l.set(c,u)}let f=s.scoped?s.parentNode||o.target:s.type==="module"?void 0:t;s.scoped&&(f.scripts||Object.defineProperty(f,"scripts",{value:[]}),f.scripts.push(s));let m=G.toHash({script:s,compiledScript:u,thisContext:f});o.type==="query"||i.includes(s.type)&&!t.HTMLScriptElement.supports(s.type)?e.Script.execute(m):s.textContent=`webqit.oohtml.Script.execute( '${m}' );`})},{live:!0,timing:"intercept",generation:"entrants",eventDetails:!0})}var Rt=class{constructor(t,e){Object.defineProperty(this,"request",{value:t}),Object.defineProperty(this,"hostElement",{value:e}),t.live&&!t.signal&&(Object.defineProperty(this,"abortController",{value:new AbortController}),t.signal=this.abortController.signal)}callback(t){h.defineProperty(this,"value",{value:t,configurable:!0,enumerable:!0})}abort(){if(this.abortController)return this.abortController.abort();let t=this.hostElement.ownerDocument?.defaultView||this.hostElement.defaultView;if(this.request.signal)return this.request.signal.dispatchEvent(new t.Event("abort"))}};function or(){let n=this;return class extends n.Event{constructor(e,r,{type:i="contextrequest",...o}={}){super(i,o),Object.defineProperty(this,"request",{get:()=>e}),Object.defineProperty(this,"callback",{get:()=>r})}respondWith(e,...r){if(this.request.diff){if("prevValue"in this&&this.prevValue===e)return;Object.defineProperty(this,"prevValue",{value:e,configurable:!0})}return this.callback(e,...r)}}}var R=class{static instance(t){return x(t).get("context::instance")||new this(t)}constructor(t){x(t).get("context::instance")?.dispose(),x(t).set("context::instance",this);let e={host:t,contexts:new Set};Object.defineProperty(this,"#",{get:()=>e});let r=or.call(t.ownerDocument?.defaultView||t.defaultView);Object.defineProperty(this,"ContextRequestEvent",{get:()=>r}),this[Symbol.iterator]=function*(){yield*e.contexts}}get length(){this["#"].contexts.size}findProvider(t){return[...this["#"].contexts].find(t)}attachProvider(t){this["#"].contexts.add(t),t.initialize(this["#"].host)}detachProvider(t){t.dispose(this["#"].host),this["#"].contexts.delete(t)}request(t,e=null,r={}){typeof e=="object"&&(r=e,e=null);let i;e||(i=new Rt(t,this["#"].host),e=i.callback.bind(i));let o=this["#"].host.dispatchEvent(new this.ContextRequestEvent(t,e,{bubbles:!0,...r}));return i??o}dispose(){}};var L=class{static get config(){return{}}static attachTo(t,e,r=!1){this.providers.set(this.type,this);let i,o=R.instance(t);return!r&&(i=o.findProvider(s=>this.matchId(s.id,e)))?i:o.attachProvider(new this(e))}static detachFrom(t,e,r=!1){let i,o=R.instance(t);for(i of o["#"].contexts)if(!(!this.matchId(i.id,e)||typeof r=="function"&&!r(i))&&(o.detachProvider(i),typeof multiple!="function"&&!r))return i}static createId(t,e={}){let r={type:this.type,...e};return r.contextName||(t.getAttribute&&!(r.contextName=(t.getAttribute(this.config.context.attr.contextname)||"").trim())?delete r.contextName:t.ownerDocument||(r.contextName="root")),r}static matchId(t,e){return ye(t,e,1,!0)}static createRequest(t={}){return{type:this.type,...t}}static matchRequest(t,e){return e.type===t.type&&(!e.contextName||e.contextName===t.contextName)}constructor(t){Object.defineProperty(this,"id",{get:()=>t}),Object.defineProperty(this,"subscriptions",{value:new Set})}get length(){this.subscriptions.size}handle(t){}subscribe(t){this.subscriptions.add(t),t.request.signal&&t.request.signal.addEventListener("abort",()=>{this.unsubscribe(t)})}unsubscribe(t){this.subscriptions.delete(t),t.request.controller?.abort()}handleEvent(t){if(!(this.disposed||t.target===this.host&&t.request?.superContextOnly||!(typeof t.request=="object"&&t.request)||typeof t.respondWith!="function"||!this.constructor.matchRequest(this.id,t.request)))if(t.stopPropagation(),t.type==="contextclaim"){let e=new Set;this.subscriptions.forEach(r=>{!t.target.contains(r.request.superContextOnly?r.target.parentNode:r.target)||!this.constructor.matchRequest(t.request,r.request)||(this.subscriptions.delete(r),e.add(r))}),t.respondWith(e)}else t.type==="contextrequest"&&(t.request.live&&this.subscribe(t),this.handle(t))}initialize(t){return this.host=t,this.disposed=!1,t.addEventListener("contextrequest",this),t.addEventListener("contextclaim",this),R.instance(t).request({...this.id,superContextOnly:!0},e=>e.forEach(r=>{this.subscribe(r),this.handle(r)}),{type:"contextclaim"}),this}dispose(t){return this.disposed=!0,t.removeEventListener("contextrequest",this),t.removeEventListener("contextclaim",this),this.subscriptions.forEach(e=>{this.unsubscribe(e);let{target:r,request:i,callback:o,options:s}=e;R.instance(r).request(i,o,s)}),this}};C(L,"providers",new Map),C(L,"type");function Ee(n={}){let{config:t,window:e}=N.call(this,"context-api",n,{attr:{contextname:"contextname"},api:{context:"context"}});e.webqit.HTMLContextProvider=L,e.webqit.HTMLContext=R,Jr.call(e,t)}function Jr(n){let t=this;if(n.api.context in t.document)throw new Error(`document already has a "${n.api.context}" property!`);if(n.api.context in t.HTMLElement.prototype)throw new Error(`The "HTMLElement" class already has a "${n.api.context}" property!`);Object.defineProperty(t.document,n.api.context,{get:function(){return R.instance(t.document)}}),Object.defineProperty(t.HTMLElement.prototype,n.api.context,{get:function(){return R.instance(this)}});let e=new Set;t.addEventListener("contextrequest",r=>{!(typeof r.request=="object"&&r.request)||typeof r.respondWith!="function"||(e.add(r),r.respondWith())}),t.addEventListener("contextclaim",r=>{if(!(typeof r.request=="object"&&r.request)||typeof r.respondWith!="function")return;let i=new Set;e.forEach(o=>{!L.providers.get(r.request.type).matchRequest(r.request,o.request)||(e.delete(o),i.add(o))}),r.respondWith(i)})}var tt=class extends L{static createRequest(t={}){let e=super.createRequest(t);if(e.detail?.startsWith("@")){let[r,...i]=e.detail.slice(1).split(".").map(o=>o.trim());e.contextName=r,e.detail=i.join(".")}return e}static matchRequest(t,e){return super.matchRequest(t,e)&&(!e.detail||!t.detail||(Array.isArray(e.detail)?e.detail[0]===t.detail:e.detail===t.detail))}get bindingsObj(){return this.host[this.constructor.config.api.bindings]}handle(t){if(t.request.controller?.abort(),!(t.request.detail+"").trim())return t.respondWith(this.bindingsObj);t.request.controller=h.reduce(this.bindingsObj,Array.isArray(t.request.detail)?t.request.detail:[t.request.detail],h.get,e=>{this.disposed||t.respondWith(e.value)},{live:t.request.live,descripted:!0})}};C(tt,"type","bindings");function $e(n={}){let{config:t,window:e}=N.call(this,"bindings-api",n,{context:{attr:{bindingscontext:"bindings"}},api:{bind:"bind",bindings:"bindings"}});t.CONTEXT_API=e.webqit.oohtml.configs.CONTEXT_API,t.context.attr.contextname=t.CONTEXT_API.attr.contextname,e.webqit.HTMLBindingsProvider=class extends tt{static get config(){return t}},e.webqit.Observer=h,Zr.call(e,t)}function Ae(n,t){let e=this;if(!x(t).has("bindings")){let r=Object.create(null);x(t).set("bindings",r),h.observe(r,i=>{for(let a of i)a.type==="delete"?Qr.call(this,t,a.key):Yr.call(this,t,a.key);let o=Object.keys(r),s=t===e.document?e.document.documentElement:t;o.length?s.setAttribute(n.context.attr.bindingscontext,o.join(" ")):s.toggleAttribute(n.context.attr.bindingscontext,!1)})}return x(t).get("bindings")}function Yr(n,t){let e=this,{HTMLBindingsProvider:r}=e.webqit,i=r.createId(n,{detail:t});r.attachTo(n,i)}function Qr(n,t){let e=this,{HTMLBindingsProvider:r}=e.webqit,i=r.createId(n,{detail:t});r.detachFrom(n,i)}function sr(n,t,e,{merge:r,diff:i,namespace:o}={}){let s=Ae.call(this,n,t),a={diff:i,namespace:o},c=r?[]:h.ownKeys(s,a).filter(l=>!(l in e));return h.batch(s,()=>(c.length&&h.deleteProperties(s,c,a),h.set(s,e,a)),a)}function Zr(n){let t=this;if(n.api.bind in t.document)throw new Error(`document already has a "${n.api.bind}" property!`);if(n.api.bindings in t.document)throw new Error(`document already has a "${n.api.bindings}" property!`);if(n.api.bind in t.Element.prototype)throw new Error(`The "Element" class already has a "${n.api.bind}" property!`);if(n.api.bindings in t.Element.prototype)throw new Error(`The "Element" class already has a "${n.api.bindings}" property!`);Object.defineProperty(t.document,n.api.bind,{value:function(e,r={}){return sr.call(t,r,t.document,e)}}),Object.defineProperty(t.document,n.api.bindings,{get:function(){return h.proxy(Ae.call(t,n,t.document))}}),Object.defineProperty(t.Element.prototype,n.api.bind,{value:function(e,r={}){return sr.call(t,r,this,e)}}),Object.defineProperty(t.Element.prototype,n.api.bindings,{get:function(){return h.proxy(Ae.call(t,n,this))}})}var z=class{static instance(t,e,r){return x(e).get("exportsmanager::instance")||new this(t,e,r)}constructor(t,e,r={},i=null,o=0){x(e).get("exportsmanager::instance")?.dispose(),x(e).set("exportsmanager::instance",this),this.host=e,this.window=t,this.config=r,this.parent=i,this.level=o,this.modules=U(this.host),this.exportId=(this.host.getAttribute(this.config.template?.attr.moduledef)||"").trim(),this.validateExportId(this.exportId);let s=this.window.webqit.realdom;this.realtimeA=s.realtime(this.host.content).children(a=>{this.export(a.entrants,!0),this.export(a.exits,!1)},{live:!0,timing:"sync"}),this.realtimeB=s.realtime(this.host).attr(["src","loading"],(...a)=>this.evaluateLoading(...a),{live:!0,atomic:!0,timing:"sync",lifecycleSignals:!0}),this.realtimeC=this.evalInheritance()}validateExportId(t){if(["@","/","*","#"].some(e=>t.includes(e)))throw new Error(`The export ID "${t}" contains an invalid character.`)}export(t,e){let r,i=this.modules["#"]||[];h.batch(this.modules,()=>{t.forEach(o=>{if(o.nodeType!==1)return;let s=o.matches(this.config.templateSelector),a=(o.getAttribute(s?this.config.template.attr.moduledef:this.config.template.attr.fragmentdef)||"").trim();e?(s&&a?new z(this.window,o,this.config,this.host,this.level+1):(i.push(o),r=!0),a&&(this.validateExportId(a),h.set(this.modules,(!s&&"#"||"")+a,o))):(s&&a?z.instance(this.window,o).dispose():(i=i.filter(c=>c!==o),r=!0),a&&h.deleteProperty(this.modules,(!s&&"#"||"")+a))}),r&&h.set(this.modules,"#",i)})}evaluateLoading([t,e],{signal:r}){let i=(t.value||"").trim();if(!i)return;let o,s=l=>{if(!l)return o;o=l.then(()=>c.remove())},a=(e.value||"").trim(),c=h.intercept(this.modules,"get",async(l,u,f)=>(a==="lazy"&&s(this.load(i,!0)),await s(),f()),{signal:r});a!=="lazy"&&s(this.load(i))}load(t){if(this.host.content.children.length)return Promise.resolve();if(this.fetchInFlight?.src===t)return this.fetchInFlight.request;this.fetchInFlight?.controller.abort();let e=new AbortController,r=(o,s)=>this.host.dispatchEvent(new this.window.CustomEvent(o,{detail:s})),i=this.window.fetch(t,{signal:e.signal,element:this.host}).then(o=>o.ok?o.text():Promise.reject(o.statusText)).then(o=>(this.host.innerHTML=o.trim(),r("load"),this.host)).catch(o=>(console.error(`Error fetching the bundle at "${t}": ${o.message}`),this.fetchInFlight=null,r("loaderror"),this.host));return this.fetchInFlight={src:t,request:i,controller:e},i}evalInheritance(){if(!this.parent)return[];let t=(this.host.getAttribute(this.config.template.attr.extends)||"").trim(),e=(this.host.getAttribute(this.config.template.attr.inherits)||"").trim(),r=s=>{s.forEach(a=>{h.get(this.modules,a.key)===a.oldValue&&(["get","set","def"].includes(a.type)?h[a.type.replace("get","set")](this.modules,a.key,a.value):a.type==="delete"&&h.deleteProperty(this.modules,a.key))})},i=[],o=U(this.parent);return t&&i.push(h.reduce(o,[t,this.config.template.api.modules,1/0],h.get,r,{live:!0})),(e=e.split(" ").map(s=>s.trim()).filter(s=>s)).length&&i.push(h.get(o,e,r,{live:!0})),i}dispose(){this.realtimeA.disconnect(),this.realtimeB.disconnect(),this.realtimeC.forEach(t=>t.abort()),Object.entries(this.modules).forEach(([t,e])=>{t.startsWith("#")||z.instance(this.window,e).dispose()})}};var J=class extends L{static createRequest(t={}){let e=super.createRequest(t);if(!e.contextName&&e.detail?.startsWith("/"))e.contextName="root";else if(e.detail?.startsWith("@")){let[r,...i]=e.detail.slice(1).split(/(?<=\w)(?=\/|#)/).map(o=>o.trim());e.contextName=r,e.detail=i.join("")}return e}get localModules(){return U(this.host)}handle(t){if(t.request.controller?.abort(),(t.request.detail||"").trim()==="/")return t.respondWith(this.localModules);let e=this.constructor.config,r=(t.request.detail||"").split(/\/|(?<=\w)(?=#)/g).map(o=>o.trim()).filter(o=>o);if(r.length&&(r=r.join(`/${e.template.api.modules}/`)?.split("/")||[]),!r.length)return t.respondWith();let i={live:t.request.live,descripted:!0};t.request.controller=h.reduce(this.localModules,r,h.get,(o,{signal:s}={})=>{let a=Array.isArray(o)?o:o.value,c=Array.isArray(o)?o.length:o.value;if(!(!c&&this.host.isConnected===!1))return c||!this.contextModules?t.respondWith(a):h.reduce(this.contextModules,r,h.get,l=>t.respondWith(Array.isArray(l)?l:l.value),{signal:s,...i})},{lifecycleSignals:!0,...i})}realtimeSources(t){this.host=t;let e=()=>{for(let o of this.subscriptions)this.handle(o)},r=this.constructor.config;if(!this.host.matches||!r.context.attr.importscontext)return;this.refdSourceController?.disconnect();let i=this.host.ownerDocument.defaultView.webqit.realdom;this.refdSourceController=i.realtime(this.host).attr(r.context.attr.importscontext,(o,{signal:s})=>{if(!o.value)return this.contextModules=void 0,e();let a=this.constructor.createRequest({detail:o.value.trim(),live:!0,signal:s,superContextOnly:!0});this.host[r.CONTEXT_API.api.context].request(a,c=>{this.contextModules=c&&Object.getPrototypeOf(c)?U(c):c,e()})},{live:!0,timing:"sync",lifecycleSignals:!0})}initialize(t){return this.realtimeSources(t),super.initialize(t)}dispose(t){return this.refdSourceController?.disconnect(),super.dispose(t)}};C(J,"type","html-imports");function ar(n){let t=this,{realdom:e}=t.webqit,r=n.import.tagName.includes("-")?t.HTMLElement:class{};class i extends r{static instance(s){return n.import.tagName.includes("-")&&s instanceof this?s:x(s).get("import::instance")||new this(s)}constructor(...s){super();let a=s[0]||this;x(a).set("import::instance",this),Object.defineProperty(this,"el",{get:()=>a,configurable:!1});let c={};Object.defineProperty(this,"#",{get:()=>c,configurable:!1}),c.slottedElements=new Set,c.setAnchorNode=l=>(c.anchorNode=l,l),c.importRequest=(l,u=null)=>{let f=J.createRequest({detail:c.moduleRef&&!c.moduleRef.includes("#")?c.moduleRef+"#":c.moduleRef,live:u&&!0,signal:u});(this.el.isConnected?this.el.parentNode:c.anchorNode.parentNode)[n.CONTEXT_API.api.context].request(f,m=>{l((m instanceof t.HTMLTemplateElement?[...m.content.children]:Array.isArray(m)?m:m&&[m])||[])})},c.hydrate=(l,u)=>{c.moduleRef=(this.el.getAttribute(n.import.attr.moduleref)||"").trim(),l.replaceWith(c.setAnchorNode(this.createAnchorNode())),c.autoRestore(()=>{u.forEach(f=>{c.slottedElements.add(f),x(f).set("slot@imports",this.el)})}),c.hydrationImportRequest=new AbortController,c.importRequest(f=>{if(c.originalsRemapped)return this.fill(f);let m=f.map((g,p)=>({el:g,fragmentDef:g.getAttribute(n.template.attr.fragmentdef)||"",tagName:g.tagName,i:p})),d=-1;u.forEach(g=>{let p=g.tagName,w=g.getAttribute(n.template.attr.fragmentdef)||"",b=(d++,m.find(y=>y.tagName===p&&y.fragmentDef===w&&y.i===d));!b||x(g).set("original@imports",b.el)}),c.originalsRemapped=!0},c.hydrationImportRequest.signal)},c.autoRestore=(l=null)=>{c.autoRestoreRealtime?.disconnect(),l&&l();let u=()=>{c.anchorNode?.replaceWith(this.el),c.anchorNode=null,this.el.setAttribute("data-nodecount",0)};if(!c.slottedElements.size)return u();let f=e.realtime(t.document).observe([...c.slottedElements],m=>{if(m.exits.forEach(d=>{x(d).delete("slot@imports"),c.slottedElements.delete(d)}),!c.slottedElements.size){if(f.disconnect(),!m.target.isConnected)return;u()}},{subtree:!0,timing:"sync",generation:"exits"});c.autoRestoreRealtime=f},c.connectedCallback=()=>{if(c.slottedElements.size)throw new Error("Illegal reinsertion into the DOM; import slot is not empty!");c.moduleRefRealtime||(c.moduleRefRealtime=e.realtime(this.el).attr(n.import.attr.moduleref,(l,{signal:u})=>{c.moduleRef=l.value,c.importRequest(f=>!c.hydrationImportRequest&&this.fill(f),u)},{live:!0,timing:"sync",lifecycleSignals:!0}),c.hydrationImportRequest?.abort(),c.hydrationImportRequest=null)},c.disconnectedCallback=()=>{c.hydrationImportRequest?.abort(),c.hydrationImportRequest=null,!c.anchorNode.isConnected&&(c.moduleRefRealtime?.disconnect(),c.moduleRefRealtime=null)}}createAnchorNode(){if(t.webqit.env!=="server")return t.document.createTextNode("");let s=t.document.createElement("div");s.textContent=this.el.outerHTML;let a=t.document.createComment(s.innerHTML);return x(a).set("isAnchorNode",!0),a}fill(s){Array.isArray(s)&&(s=new Set(s)),this.el.setAttribute("data-nodecount",s.size),this["#"].autoRestore(()=>{if(this["#"].slottedElements.forEach(a=>{let c=x(a).get("original@imports");s.has(c)?s.delete(c):(this["#"].slottedElements.delete(a),a.remove())}),s.size){let a=this["#"].anchorNode,c=this["#"].setAnchorNode(this.createAnchorNode());(this.el.isConnected?this.el:a).replaceWith(c)}s.forEach(a=>{let c=a.cloneNode(!0);c.hasAttribute(n.template.attr.fragmentdef)||c.toggleAttribute(n.template.attr.fragmentdef,!0),x(c).set("original@imports",a),x(c).set("slot@imports",this.el),this["#"].slottedElements.add(c),this["#"].anchorNode.before(c)})})}empty(){this["#"].slottedElements.forEach(s=>s.remove())}get anchorNode(){return this["#"].anchorNode}get moduleRef(){return this["#"].moduleRef}get slottedElements(){return this["#"].slottedElements}}return n.import.tagName.includes("-")&&customElements.define(n.import.tagName,i),i}function Se(n={}){let{config:t,realdom:e,window:r}=N.call(this,"html-imports",n,{template:{attr:{moduledef:"def",fragmentdef:"def",extends:"extends",inherits:"inherits"},api:{modules:"modules",moduledef:"def"}},context:{attr:{importscontext:"importscontext"},api:{import:"import"}},import:{tagName:"import",attr:{moduleref:"ref"}},staticsensitivity:!0,isomorphic:!0});t.CONTEXT_API=r.webqit.oohtml.configs.CONTEXT_API,t.context.attr.contextname=t.CONTEXT_API.attr.contextname,t.templateSelector=`template[${r.CSS.escape(t.template.attr.moduledef)}]`,t.ownerContextSelector=[t.context.attr.contextname,t.context.attr.importscontext].map(o=>`[${r.CSS.escape(o)}]`).join(","),t.slottedElementsSelector=`[${r.CSS.escape(t.template.attr.fragmentdef)}]`;let i=(o,s)=>{let a=`starts-with(., "${o}")`,c=`substring(., string-length(.) - string-length("${s}") + 1) = "${s}"`;return`${a} and ${c}`};t.anchorNodeSelector=`comment()[${i(`<${t.import.tagName}`,`</${t.import.tagName}>`)}]`,r.webqit.HTMLImportElement=ar.call(r,t),r.webqit.HTMLImportsProvider=class extends J{static get config(){return t}},r.webqit.Observer=h,Kr.call(r,t),tn.call(r,t)}function U(n,t=!0){if(!x(n).has("modules")&&t){let e=Object.create(null);x(n).set("modules",e)}return x(n).get("modules")}function Kr(n){let t=this;if(n.template.api.modules in t.HTMLTemplateElement.prototype)throw new Error(`The "HTMLTemplateElement" class already has a "${n.template.api.modules}" property!`);if(n.template.api.moduledef in t.HTMLTemplateElement.prototype)throw new Error(`The "HTMLTemplateElement" class already has a "${n.template.api.moduledef}" property!`);if(n.context.api.import in t.document)throw new Error(`document already has a "${n.context.api.import}" property!`);if(n.context.api.import in t.HTMLElement.prototype)throw new Error(`The "HTMLElement" class already has a "${n.context.api.import}" property!`);Object.defineProperty(t.HTMLTemplateElement.prototype,n.template.api.modules,{get:function(){return U(this)}}),Object.defineProperty(t.HTMLTemplateElement.prototype,n.template.api.moduledef,{get:function(){return this.getAttribute(n.template.attr.moduledef)}}),Object.defineProperty(t.document,n.context.api.import,{value:function(r,i=!1,o=null){return e(t.document,...arguments)}}),Object.defineProperty(t.HTMLElement.prototype,n.context.api.import,{value:function(r,i=!1,o=null){return e(this,...arguments)}});function e(r,i,o=!1,s=null){typeof o=="function"&&(s=o,o=!1);let a=J.createRequest({detail:i,live:o});return r[n.CONTEXT_API.api.context].request(a,s)}}function tn(n){let t=this,{realdom:e,HTMLImportElement:r,HTMLImportsProvider:i}=t.webqit,o=c=>{let l=i.createId(c);i.attachTo(c,l)},s=(c,l)=>{let u=i.createId(c);i.detachFrom(c,u,f=>l||c.matches&&!c.matches(n.ownerContextSelector)&&!Object.keys(f.localModules).length)};e.realtime(t.document).subtree([n.templateSelector,n.ownerContextSelector],c=>{c.entrants.forEach(l=>{if(l.matches(n.templateSelector)){Object.defineProperty(l,"scoped",{value:l.hasAttribute("scoped")});let u=new z(t,l,n);u.ownerContext=l.scoped?c.target:t.document;let f=U(u.ownerContext);u.exportId&&h.set(f,u.exportId,l),o(u.ownerContext)}else o(l)}),c.exits.forEach(l=>{if(l.matches(n.templateSelector)){let u=z.instance(t,l,n),f=U(u.ownerContext);u.exportId&&h.deleteProperty(f,u.exportId),s(u.ownerContext)}else s(l,!0)})},{live:!0,timing:"sync",staticSensitivity:n.staticsensitivity}),e.realtime(t.document).subtree(n.import.tagName,c=>{c.entrants.forEach(l=>a(l,!0,c)),c.exits.forEach(l=>a(l,!1,c))},{live:!0,timing:"sync"});function a(c,l,u){let f=r.instance(c);l?f["#"].connectedCallback():f["#"].disconnectedCallback()}t.webqit.env!=="server"&&e.realtime(t.document).subtree(`(${n.anchorNodeSelector})`,c=>{c.entrants.forEach(l=>{if(x(l).get("isAnchorNode"))return;let u=t.document.createElement("div");u.innerHTML=l.nodeValue,u.innerHTML=u.firstChild.textContent;let f=u.firstChild,m=parseInt(f.getAttribute("data-nodecount")),d=new Set,g=l;for(;(g=g.previousElementSibling)&&g.matches(n.slottedElementsSelector)&&m--;)d.add(g);r.instance(f)["#"].hydrate(l,d)})},{live:!0})}function Ce(n={}){let{config:t,window:e}=N.call(this,"html-bindings",n,{attr:{binding:"binding",itemIndex:"data-index"},tokens:{nodeType:"processing-instruction",tagStart:"?{",tagEnd:"}?",stateStart:"; [=",stateEnd:"]"},staticsensitivity:!0,isomorphic:!0});t.CONTEXT_API=e.webqit.oohtml.configs.CONTEXT_API,t.BINDINGS_API=e.webqit.oohtml.configs.BINDINGS_API,t.HTML_IMPORTS=e.webqit.oohtml.configs.HTML_IMPORTS,t.attrSelector=`[${e.CSS.escape(t.attr.binding)}]`;let r=(i,o)=>{let s=`starts-with(., "${i}")`,a=`substring(., string-length(.) - string-length("${o}") + 1) = "${o}"`;return`${s} and ${a}`};t.discreteBindingsSelector=`comment()[${r(t.tokens.tagStart,t.tokens.tagEnd)}]`,e.webqit.Observer=h,en.call(e,t)}function en(n){let t=this,{realdom:e}=t.webqit;e.realtime(t.document).subtree(`(${n.discreteBindingsSelector})`,r=>{cr.call(this,...r.exits),rn.call(this,n,...r.entrants)},{live:!0}),e.realtime(t.document).subtree(n.attrSelector,r=>{cr.call(this,...r.exits),nn.call(this,n,...r.entrants)},{live:!0,timing:"sync",staticSensitivity:n.staticsensitivity})}function lr(n,t){if(x(t).has("data-binding"))return x(t).get("data-binding");let e={},r=new AbortController;e.$set__=function(o,s,a){o&&(o[s]=a)},h.intercept(e,{get:(o,s,a)=>{if(!(o.key in e)){let c=tt.createRequest({detail:o.key,live:!0,signal:r.signal});t[n.CONTEXT_API.api.context].request(c,l=>{h.set(e,o.key,l)})}return a(e[o.key]??(o.key in globalThis?globalThis[o.key]:void 0))},has:(o,s,a)=>a(!0)});let i={scope:e,abortController:r,bindings:new Map};return x(t).set("data-binding",i),i}function cr(...n){for(let t of n){let e=t.nodeName==="#text"?t.parentNode:t,{bindings:r,abortController:i}=x(e).get("data-binding")||{};if(!r?.has(t))return;r.get(t).state.dispose(),r.get(t).signals.forEach(o=>o.abort()),r.delete(t),r.size||(i.abort(),x(e).delete("data-binding"))}}async function rn(n,...t){let e=this,r=o=>{let s=n.tokens.tagStart.split("").map(d=>`\\${d}`).join(""),a=n.tokens.tagEnd.split("").map(d=>`\\${d}`).join(""),c=n.tokens.stateStart.split("").map(d=>d===" "?"(?:\\s+)?":`\\${d}`).join(""),l=n.tokens.stateEnd.split("").map(d=>`\\${d}`).join(""),u=`^${s}(.*?)(?:${c}(\\d+)${l}(?:\\s+)?)?${a}$`,[,f,m]=o.match(new RegExp(u));return{raw:o,expr:f,span:parseInt(m??0)}},i=t.reduce((o,s)=>{if(s.isBound)return o;let a=r(s.nodeValue),c=s;if(a.span){if(c=s.nextSibling,c?.nodeName!=="#text"||c.nodeValue.length<a.span)return o;c.nodeValue.length>a.span&&c.splitText(a.span)}else c=s.ownerDocument.createTextNode(""),s.after(c);c.isBound=!0;let l=s;return e.webqit.env!=="server"&&(l.remove(),l=null),o.concat({textNode:c,template:a,anchorNode:l})},[]);for(let{textNode:o,template:s,anchorNode:a}of i){let{scope:c,bindings:l}=lr(n,o.parentNode),u="";u+=`let content = ((${s.expr}) ?? '') + '';`,u+="$set__(this, 'nodeValue', content);",a&&(u+=`$set__($anchorNode__, 'nodeValue', \`${n.tokens.tagStart}${s.expr}${n.tokens.stateStart}\` + content.length + \`${n.tokens.stateEnd} ${n.tokens.tagEnd}\`);`);let f=new Mt("$signals__","$anchorNode__",u,{env:c}),m=[];l.set(o,{compiled:f,signals:m,state:await f.call(o,m,a)})}}async function nn(n,...t){for(let e of t){let r=on(n,e.getAttribute(n.attr.binding)),{scope:i,bindings:o}=lr(n,e),s=new Mt("$signals__",r,{env:i}),a=[];o.set(e,{compiled:s,signals:a,state:await s.call(e,a)})}}var Pe=new Map;function on(n,t){if(Pe.has(t))return Pe.get(t);let e={},r=Te(t,";").map(i=>{let[o,s]=Te(i,":").map(f=>f.trim()),a=o[0],c=o.slice(1).trim(),l=`(${s})`,u=`(${l} ?? '')`;if(a==="&")return`this.style[\`${c}\`] = ${u};`;if(a==="%")return`this.classList.toggle(\`${c}\`, !!${l});`;if(a==="~")return c.endsWith("?")?`this.toggleAttribute(\`${c.substring(0,-1).trim()}\`, !!${l});`:`this.setAttribute(\`${c}\`, ${u});`;if(a==="@"){if(e[c])throw new Error(`Duplicate binding: ${o}.`);if(e[c]=!0,c==="text")return`$set__(this, 'textContent', ${u});`;if(c==="html")return`this.setHTML(${u});`;if(c==="items"){let[f,m]=Te(s,"/");if(!m)throw new Error(`Invalid ${a}items spec: ${i}; no import specifier.`);let[d,g,p,w]=f.trim().match(/(.*?[\)\s+])(of|in)([\(\{\[\s+].*)/i)||[];if(!d)throw new Error(`Invalid ${a}items spec: ${i}.`);if(g.startsWith("(")?g=g.trim().slice(1,-1).split(",").map(y=>y.trim()):g=[g],g.length>(p==="in"?3:2))throw new Error(`Invalid ${a}items spec: ${i}.`);let b=p==="in"?g[2]:g[1]||"$index__";return`
|
|
23
|
+
};`;globalThis.webqit.$fCompilerWorker=new Worker(`data:text/javascript;base64,${btoa(o)}`)}return new Promise(r=>{let i=new MessageChannel;webqit.$fCompilerWorker.postMessage({source:e,params:t},[i.port2]),i.port1.onmessage=o=>{let{compiledSource:s,...a}=o.data;Object.defineProperty(a,"toString",{value:()=>s}),r(a)}})}var G=class{static toHash(t){let e;return(e=this.hashTable.get(t))||(e=this.uniqId(),this.hashTable.set(t,e)),e}static fromHash(t){let e;return this.hashTable.forEach((r,i)=>{r===t&&(e=i)}),e}};C(G,"hashTable",new Map),C(G,"uniqId",()=>(0|Math.random()*9e6).toString(36));function Oe({advanced:n={},...t}){let{config:e,window:r}=N.call(this,"scoped-js",t,{script:{retention:"retain",mimeType:""},advanced:Yt(n)});e.scriptSelector=(Array.isArray(e.script.mimeType)?e.script.mimeType:[e.script.mimeType]).reduce((i,o)=>{let s=o?`[type=${r.CSS.escape(o)}]`:"";return i.concat(`script${s}[scoped],script${s}[stateful]`)},[]).join(","),Object.assign(r.webqit,{StatefulAsyncFunction:Mt,StatefulAsyncScript:ft,StatefulModule:mt,State:K,Observer:h}),r.webqit.oohtml.Script={compileCache:[new Map,new Map],execute:Gr.bind(r,e)},Ur.call(r,e)}async function Gr(n,t){let e=this,{realdom:r}=e.webqit,i=G.fromHash(t);if(!i)throw new Error("Argument must be a valid exec hash.");let{script:o,compiledScript:s,thisContext:a}=i;n.script.retention==="dispose"?o.remove():n.script.retention==="dispose"?o.textContent='"source hidden"':o.textContent=await s.toString();let c=(await s.bind(a)).execute();o.stateful&&Object.defineProperty(o,"state",{value:c}),r.realtime(e.document).observe(o,()=>{o.stateful&&c.dispose(),o.scoped&&a.scripts.splice(a.scripts.indexOf(o,1))},{subtree:!0,timing:"sync",generation:"exits"})}function Ur(n){let t=this,{oohtml:e,realdom:r}=t.webqit;t.HTMLScriptElement.supports||(t.HTMLScriptElement.supports=()=>!1);let i=["module"].concat(n.script.mimeType||[]);r.realtime(t.document).subtree(n.scriptSelector,o=>{o.entrants.forEach(s=>{if(s.cloned)return;if("stateful"in s||(Object.defineProperty(s,"stateful",{value:s.hasAttribute("stateful")}),"scoped"in s))return handled(s);Object.defineProperty(s,"scoped",{value:s.hasAttribute("scoped")});let a=(s._=s.textContent.trim())&&s._.startsWith("/*@oohtml*/if(false){")&&s._.endsWith("}/*@oohtml*/")?s._.slice(21,-12):s.textContent,c=G.toHash(a),l=e.Script.compileCache[s.stateful?0:1],u;if(!(u=l.get(c))){let{parserParams:g,compilerParams:p,runtimeParams:w}=n.advanced;u=new(s.type==="module"?mt:ft)(a,{exportNamespace:`#${s.id}`,fileName:t.document.url,parserParams:g,compilerParams:{...p,startStatic:!s.stateful},runtimeParams:w}),l.set(c,u)}let f=s.scoped?s.parentNode||o.target:s.type==="module"?void 0:t;s.scoped&&(f.scripts||Object.defineProperty(f,"scripts",{value:[]}),f.scripts.push(s));let m=G.toHash({script:s,compiledScript:u,thisContext:f});o.type==="query"||i.includes(s.type)&&!t.HTMLScriptElement.supports(s.type)?e.Script.execute(m):s.textContent=`webqit.oohtml.Script.execute( '${m}' );`})},{live:!0,timing:"intercept",generation:"entrants",eventDetails:!0})}var Rt=class{constructor(t,e){Object.defineProperty(this,"request",{value:t}),Object.defineProperty(this,"hostElement",{value:e}),t.live&&!t.signal&&(Object.defineProperty(this,"abortController",{value:new AbortController}),t.signal=this.abortController.signal)}callback(t){h.defineProperty(this,"value",{value:t,configurable:!0,enumerable:!0})}abort(){if(this.abortController)return this.abortController.abort();let t=this.hostElement.ownerDocument?.defaultView||this.hostElement.defaultView;if(this.request.signal)return this.request.signal.dispatchEvent(new t.Event("abort"))}};function or(){let n=this;return class extends n.Event{constructor(e,r,{type:i="contextrequest",...o}={}){super(i,o),Object.defineProperty(this,"request",{get:()=>e}),Object.defineProperty(this,"callback",{get:()=>r})}respondWith(e,...r){if(this.request.diff){if("prevValue"in this&&this.prevValue===e)return;Object.defineProperty(this,"prevValue",{value:e,configurable:!0})}return this.callback(e,...r)}}}var R=class{static instance(t){return x(t).get("context::instance")||new this(t)}constructor(t){x(t).get("context::instance")?.dispose(),x(t).set("context::instance",this);let e={host:t,contexts:new Set};Object.defineProperty(this,"#",{get:()=>e});let r=or.call(t.ownerDocument?.defaultView||t.defaultView);Object.defineProperty(this,"ContextRequestEvent",{get:()=>r}),this[Symbol.iterator]=function*(){yield*e.contexts}}get length(){this["#"].contexts.size}findProvider(t){return[...this["#"].contexts].find(t)}attachProvider(t){this["#"].contexts.add(t),t.initialize(this["#"].host)}detachProvider(t){t.dispose(this["#"].host),this["#"].contexts.delete(t)}request(t,e=null,r={}){typeof e=="object"&&(r=e,e=null);let i;e||(i=new Rt(t,this["#"].host),e=i.callback.bind(i));let o=this["#"].host.dispatchEvent(new this.ContextRequestEvent(t,e,{bubbles:!0,...r}));return i??o}dispose(){}};var L=class{static get config(){return{}}static attachTo(t,e,r=!1){this.providers.set(this.type,this);let i,o=R.instance(t);return!r&&(i=o.findProvider(s=>this.matchId(s.id,e)))?i:o.attachProvider(new this(e))}static detachFrom(t,e,r=!1){let i,o=R.instance(t);for(i of o["#"].contexts)if(!(!this.matchId(i.id,e)||typeof r=="function"&&!r(i))&&(o.detachProvider(i),typeof multiple!="function"&&!r))return i}static createId(t,e={}){let r={type:this.type,...e};return r.contextName||(t.getAttribute&&!(r.contextName=(t.getAttribute(this.config.context.attr.contextname)||"").trim())?delete r.contextName:t.ownerDocument||(r.contextName="root")),r}static matchId(t,e){return ye(t,e,1,!0)}static createRequest(t={}){return{type:this.type,...t}}static matchRequest(t,e){return e.type===t.type&&(!e.contextName||e.contextName===t.contextName)}constructor(t){Object.defineProperty(this,"id",{get:()=>t}),Object.defineProperty(this,"subscriptions",{value:new Set})}get length(){this.subscriptions.size}handle(t){}subscribe(t){this.subscriptions.add(t),t.request.signal&&t.request.signal.addEventListener("abort",()=>{this.unsubscribe(t)})}unsubscribe(t){this.subscriptions.delete(t),t.request.controller?.abort()}handleEvent(t){if(!(this.disposed||t.target===this.host&&t.request?.superContextOnly||!(typeof t.request=="object"&&t.request)||typeof t.respondWith!="function"||!this.constructor.matchRequest(this.id,t.request)))if(t.stopPropagation(),t.type==="contextclaim"){let e=new Set;this.subscriptions.forEach(r=>{!t.target.contains(r.request.superContextOnly?r.target.parentNode:r.target)||!this.constructor.matchRequest(t.request,r.request)||(this.subscriptions.delete(r),e.add(r))}),t.respondWith(e)}else t.type==="contextrequest"&&(t.request.live&&this.subscribe(t),this.handle(t))}initialize(t){return this.host=t,this.disposed=!1,t.addEventListener("contextrequest",this),t.addEventListener("contextclaim",this),R.instance(t).request({...this.id,superContextOnly:!0},e=>e.forEach(r=>{this.subscribe(r),this.handle(r)}),{type:"contextclaim"}),this}dispose(t){return this.disposed=!0,t.removeEventListener("contextrequest",this),t.removeEventListener("contextclaim",this),this.subscriptions.forEach(e=>{this.unsubscribe(e);let{target:r,request:i,callback:o,options:s}=e;R.instance(r).request(i,o,s)}),this}};C(L,"providers",new Map),C(L,"type");function Ee(n={}){let{config:t,window:e}=N.call(this,"context-api",n,{attr:{contextname:"contextname"},api:{context:"context"}});e.webqit.HTMLContextProvider=L,e.webqit.HTMLContext=R,Jr.call(e,t)}function Jr(n){let t=this;if(n.api.context in t.document)throw new Error(`document already has a "${n.api.context}" property!`);if(n.api.context in t.HTMLElement.prototype)throw new Error(`The "HTMLElement" class already has a "${n.api.context}" property!`);Object.defineProperty(t.document,n.api.context,{get:function(){return R.instance(t.document)}}),Object.defineProperty(t.HTMLElement.prototype,n.api.context,{get:function(){return R.instance(this)}});let e=new Set;t.addEventListener("contextrequest",r=>{!(typeof r.request=="object"&&r.request)||typeof r.respondWith!="function"||(e.add(r),r.respondWith())}),t.addEventListener("contextclaim",r=>{if(!(typeof r.request=="object"&&r.request)||typeof r.respondWith!="function")return;let i=new Set;e.forEach(o=>{!L.providers.get(r.request.type).matchRequest(r.request,o.request)||(e.delete(o),i.add(o))}),r.respondWith(i)})}var tt=class extends L{static createRequest(t={}){let e=super.createRequest(t);if(e.detail?.startsWith("@")){let[r,...i]=e.detail.slice(1).split(".").map(o=>o.trim());e.contextName=r,e.detail=i.join(".")}return e}static matchRequest(t,e){return super.matchRequest(t,e)&&(!e.detail||!t.detail||(Array.isArray(e.detail)?e.detail[0]===t.detail:e.detail===t.detail))}get bindingsObj(){return this.host[this.constructor.config.api.bindings]}handle(t){if(t.request.controller?.abort(),!(t.request.detail+"").trim())return t.respondWith(this.bindingsObj);t.request.controller=h.reduce(this.bindingsObj,Array.isArray(t.request.detail)?t.request.detail:[t.request.detail],h.get,e=>{this.disposed||t.respondWith(e.value)},{live:t.request.live,descripted:!0})}};C(tt,"type","bindings");function $e(n={}){let{config:t,window:e}=N.call(this,"bindings-api",n,{context:{attr:{bindingscontext:"bindings"}},api:{bind:"bind",bindings:"bindings"}});t.CONTEXT_API=e.webqit.oohtml.configs.CONTEXT_API,t.context.attr.contextname=t.CONTEXT_API.attr.contextname,e.webqit.HTMLBindingsProvider=class extends tt{static get config(){return t}},e.webqit.Observer=h,Zr.call(e,t)}function Ae(n,t){let e=this;if(!x(t).has("bindings")){let r=Object.create(null);x(t).set("bindings",r),h.observe(r,i=>{for(let a of i)a.type==="delete"?Qr.call(this,t,a.key):Yr.call(this,t,a.key);let o=Object.keys(r),s=t===e.document?e.document.documentElement:t;o.length?s.setAttribute(n.context.attr.bindingscontext,o.join(" ")):s.toggleAttribute(n.context.attr.bindingscontext,!1)})}return x(t).get("bindings")}function Yr(n,t){let e=this,{HTMLBindingsProvider:r}=e.webqit,i=r.createId(n,{detail:t});r.attachTo(n,i)}function Qr(n,t){let e=this,{HTMLBindingsProvider:r}=e.webqit,i=r.createId(n,{detail:t});r.detachFrom(n,i)}function sr(n,t,e,{merge:r,diff:i,namespace:o}={}){let s=Ae.call(this,n,t),a={diff:i,namespace:o},c=r?[]:h.ownKeys(s,a).filter(l=>!(l in e));return h.batch(s,()=>(c.length&&h.deleteProperties(s,c,a),h.set(s,e,a)),a)}function Zr(n){let t=this;if(n.api.bind in t.document)throw new Error(`document already has a "${n.api.bind}" property!`);if(n.api.bindings in t.document)throw new Error(`document already has a "${n.api.bindings}" property!`);if(n.api.bind in t.Element.prototype)throw new Error(`The "Element" class already has a "${n.api.bind}" property!`);if(n.api.bindings in t.Element.prototype)throw new Error(`The "Element" class already has a "${n.api.bindings}" property!`);Object.defineProperty(t.document,n.api.bind,{value:function(e,r={}){return sr.call(t,r,t.document,e)}}),Object.defineProperty(t.document,n.api.bindings,{get:function(){return h.proxy(Ae.call(t,n,t.document))}}),Object.defineProperty(t.Element.prototype,n.api.bind,{value:function(e,r={}){return sr.call(t,r,this,e)}}),Object.defineProperty(t.Element.prototype,n.api.bindings,{get:function(){return h.proxy(Ae.call(t,n,this))}})}var z=class{static instance(t,e,r){return x(e).get("exportsmanager::instance")||new this(t,e,r)}constructor(t,e,r={},i=null,o=0){x(e).get("exportsmanager::instance")?.dispose(),x(e).set("exportsmanager::instance",this),this.host=e,this.window=t,this.config=r,this.parent=i,this.level=o,this.modules=U(this.host),this.exportId=(this.host.getAttribute(this.config.template?.attr.moduledef)||"").trim(),this.validateExportId(this.exportId);let s=this.window.webqit.realdom;this.realtimeA=s.realtime(this.host.content).children(a=>{this.export(a.entrants,!0),this.export(a.exits,!1)},{live:!0,timing:"sync"}),this.realtimeB=s.realtime(this.host).attr(["src","loading"],(...a)=>this.evaluateLoading(...a),{live:!0,atomic:!0,timing:"sync",lifecycleSignals:!0}),this.realtimeC=this.evalInheritance()}validateExportId(t){if(["@","/","*","#"].some(e=>t.includes(e)))throw new Error(`The export ID "${t}" contains an invalid character.`)}export(t,e){let r,i=this.modules["#"]||[];h.batch(this.modules,()=>{t.forEach(o=>{if(o.nodeType!==1)return;let s=o.matches(this.config.templateSelector),a=(o.getAttribute(s?this.config.template.attr.moduledef:this.config.template.attr.fragmentdef)||"").trim();e?(s&&a?new z(this.window,o,this.config,this.host,this.level+1):(i.push(o),r=!0),a&&(this.validateExportId(a),h.set(this.modules,(!s&&"#"||"")+a,o))):(s&&a?z.instance(this.window,o).dispose():(i=i.filter(c=>c!==o),r=!0),a&&h.deleteProperty(this.modules,(!s&&"#"||"")+a))}),r&&h.set(this.modules,"#",i)})}evaluateLoading([t,e],{signal:r}){let i=(t.value||"").trim();if(!i)return;let o,s=l=>{if(!l)return o;o=l.then(()=>c.remove())},a=(e.value||"").trim(),c=h.intercept(this.modules,"get",async(l,u,f)=>(a==="lazy"&&s(this.load(i,!0)),await s(),f()),{signal:r});a!=="lazy"&&s(this.load(i))}load(t){if(this.host.content.children.length)return Promise.resolve();if(this.fetchInFlight?.src===t)return this.fetchInFlight.request;this.fetchInFlight?.controller.abort();let e=new AbortController,r=(o,s)=>this.host.dispatchEvent(new this.window.CustomEvent(o,{detail:s})),i=this.window.fetch(t,{signal:e.signal,element:this.host}).then(o=>o.ok?o.text():Promise.reject(o.statusText)).then(o=>(this.host.innerHTML=o.trim(),r("load"),this.host)).catch(o=>(console.error(`Error fetching the bundle at "${t}": ${o.message}`),this.fetchInFlight=null,r("loaderror"),this.host));return this.fetchInFlight={src:t,request:i,controller:e},i}evalInheritance(){if(!this.parent)return[];let t=(this.host.getAttribute(this.config.template.attr.extends)||"").trim(),e=(this.host.getAttribute(this.config.template.attr.inherits)||"").trim(),r=s=>{s.forEach(a=>{h.get(this.modules,a.key)===a.oldValue&&(["get","set","def"].includes(a.type)?h[a.type.replace("get","set")](this.modules,a.key,a.value):a.type==="delete"&&h.deleteProperty(this.modules,a.key))})},i=[],o=U(this.parent);return t&&i.push(h.reduce(o,[t,this.config.template.api.modules,1/0],h.get,r,{live:!0})),(e=e.split(" ").map(s=>s.trim()).filter(s=>s)).length&&i.push(h.get(o,e,r,{live:!0})),i}dispose(){this.realtimeA.disconnect(),this.realtimeB.disconnect(),this.realtimeC.forEach(t=>t.abort()),Object.entries(this.modules).forEach(([t,e])=>{t.startsWith("#")||z.instance(this.window,e).dispose()})}};var J=class extends L{static createRequest(t={}){let e=super.createRequest(t);if(!e.contextName&&e.detail?.startsWith("/"))e.contextName="root";else if(e.detail?.startsWith("@")){let[r,...i]=e.detail.slice(1).split(/(?<=\w)(?=\/|#)/).map(o=>o.trim());e.contextName=r,e.detail=i.join("")}return e}get localModules(){return U(this.host)}handle(t){if(t.request.controller?.abort(),(t.request.detail||"").trim()==="/")return t.respondWith(this.localModules);let e=this.constructor.config,r=(t.request.detail||"").split(/\/|(?<=\w)(?=#)/g).map(o=>o.trim()).filter(o=>o);if(r.length&&(r=r.join(`/${e.template.api.modules}/`)?.split("/")||[]),!r.length)return t.respondWith();let i={live:t.request.live,descripted:!0};t.request.controller=h.reduce(this.localModules,r,h.get,(o,{signal:s}={})=>{let a=Array.isArray(o)?o:o.value,c=Array.isArray(o)?o.length:o.value;if(!(!c&&this.host.isConnected===!1))return c||!this.contextModules?t.respondWith(a):h.reduce(this.contextModules,r,h.get,l=>t.respondWith(Array.isArray(l)?l:l.value),{signal:s,...i})},{lifecycleSignals:!0,...i})}realtimeSources(t){this.host=t;let e=()=>{for(let o of this.subscriptions)this.handle(o)},r=this.constructor.config;if(!this.host.matches||!r.context.attr.importscontext)return;this.refdSourceController?.disconnect();let i=this.host.ownerDocument.defaultView.webqit.realdom;this.refdSourceController=i.realtime(this.host).attr(r.context.attr.importscontext,(o,{signal:s})=>{if(!o.value)return this.contextModules=void 0,e();let a=this.constructor.createRequest({detail:o.value.trim(),live:!0,signal:s,superContextOnly:!0});this.host[r.CONTEXT_API.api.context].request(a,c=>{this.contextModules=c&&Object.getPrototypeOf(c)?U(c):c,e()})},{live:!0,timing:"sync",lifecycleSignals:!0})}initialize(t){return this.realtimeSources(t),super.initialize(t)}dispose(t){return this.refdSourceController?.disconnect(),super.dispose(t)}};C(J,"type","html-imports");function ar(n){let t=this,{realdom:e}=t.webqit,r=n.import.tagName.includes("-")?t.HTMLElement:class{};class i extends r{static instance(s){return n.import.tagName.includes("-")&&s instanceof this?s:x(s).get("import::instance")||new this(s)}constructor(...s){super();let a=s[0]||this;x(a).set("import::instance",this),Object.defineProperty(this,"el",{get:()=>a,configurable:!1});let c={};Object.defineProperty(this,"#",{get:()=>c,configurable:!1}),c.slottedElements=new Set,c.setAnchorNode=l=>(c.anchorNode=l,l),c.importRequest=(l,u=null)=>{let f=J.createRequest({detail:c.moduleRef&&!c.moduleRef.includes("#")?c.moduleRef+"#":c.moduleRef,live:u&&!0,signal:u});(this.el.isConnected?this.el.parentNode:c.anchorNode.parentNode)[n.CONTEXT_API.api.context].request(f,m=>{l((m instanceof t.HTMLTemplateElement?[...m.content.children]:Array.isArray(m)?m:m&&[m])||[])})},c.hydrate=(l,u)=>{c.moduleRef=(this.el.getAttribute(n.import.attr.moduleref)||"").trim(),l.replaceWith(c.setAnchorNode(this.createAnchorNode())),c.autoRestore(()=>{u.forEach(f=>{c.slottedElements.add(f),x(f).set("slot@imports",this.el)})}),c.hydrationImportRequest=new AbortController,c.importRequest(f=>{if(c.originalsRemapped)return this.fill(f);let m=f.map((g,p)=>({el:g,fragmentDef:g.getAttribute(n.template.attr.fragmentdef)||"",tagName:g.tagName,i:p})),d=-1;u.forEach(g=>{let p=g.tagName,w=g.getAttribute(n.template.attr.fragmentdef)||"",b=(d++,m.find(y=>y.tagName===p&&y.fragmentDef===w&&y.i===d));!b||x(g).set("original@imports",b.el)}),c.originalsRemapped=!0},c.hydrationImportRequest.signal)},c.autoRestore=(l=null)=>{c.autoRestoreRealtime?.disconnect(),l&&l();let u=()=>{c.anchorNode?.replaceWith(this.el),c.anchorNode=null,this.el.setAttribute("data-nodecount",0)};if(!c.slottedElements.size)return u();let f=e.realtime(t.document).observe([...c.slottedElements],m=>{if(m.exits.forEach(d=>{x(d).delete("slot@imports"),c.slottedElements.delete(d)}),!c.slottedElements.size){if(f.disconnect(),!m.target.isConnected)return;u()}},{subtree:!0,timing:"sync",generation:"exits"});c.autoRestoreRealtime=f},c.connectedCallback=()=>{if(c.slottedElements.size)throw new Error("Illegal reinsertion into the DOM; import slot is not empty!");c.moduleRefRealtime||(c.moduleRefRealtime=e.realtime(this.el).attr(n.import.attr.moduleref,(l,{signal:u})=>{c.moduleRef=l.value,c.importRequest(f=>!c.hydrationImportRequest&&this.fill(f),u)},{live:!0,timing:"sync",lifecycleSignals:!0}),c.hydrationImportRequest?.abort(),c.hydrationImportRequest=null)},c.disconnectedCallback=()=>{c.hydrationImportRequest?.abort(),c.hydrationImportRequest=null,!c.anchorNode.isConnected&&(c.moduleRefRealtime?.disconnect(),c.moduleRefRealtime=null)}}createAnchorNode(){if(t.webqit.env!=="server")return t.document.createTextNode("");let s=t.document.createElement("div");s.textContent=this.el.outerHTML;let a=t.document.createComment(s.innerHTML);return x(a).set("isAnchorNode",!0),a}fill(s){Array.isArray(s)&&(s=new Set(s)),this.el.setAttribute("data-nodecount",s.size),this["#"].autoRestore(()=>{if(this["#"].slottedElements.forEach(a=>{let c=x(a).get("original@imports");s.has(c)?s.delete(c):(this["#"].slottedElements.delete(a),a.remove())}),s.size){let a=this["#"].anchorNode,c=this["#"].setAnchorNode(this.createAnchorNode());(this.el.isConnected?this.el:a).replaceWith(c)}s.forEach(a=>{let c=a.cloneNode(!0);c.hasAttribute(n.template.attr.fragmentdef)||c.toggleAttribute(n.template.attr.fragmentdef,!0),x(c).set("original@imports",a),x(c).set("slot@imports",this.el),this["#"].slottedElements.add(c),this["#"].anchorNode.before(c)})})}empty(){this["#"].slottedElements.forEach(s=>s.remove())}get anchorNode(){return this["#"].anchorNode}get moduleRef(){return this["#"].moduleRef}get slottedElements(){return this["#"].slottedElements}}return n.import.tagName.includes("-")&&customElements.define(n.import.tagName,i),i}function Se(n={}){let{config:t,realdom:e,window:r}=N.call(this,"html-imports",n,{template:{attr:{moduledef:"def",fragmentdef:"def",extends:"extends",inherits:"inherits"},api:{modules:"modules",moduledef:"def"}},context:{attr:{importscontext:"importscontext"},api:{import:"import"}},import:{tagName:"import",attr:{moduleref:"ref"}},staticsensitivity:!0,isomorphic:!0});t.CONTEXT_API=r.webqit.oohtml.configs.CONTEXT_API,t.context.attr.contextname=t.CONTEXT_API.attr.contextname,t.templateSelector=`template[${r.CSS.escape(t.template.attr.moduledef)}]`,t.ownerContextSelector=[t.context.attr.contextname,t.context.attr.importscontext].map(o=>`[${r.CSS.escape(o)}]`).join(","),t.slottedElementsSelector=`[${r.CSS.escape(t.template.attr.fragmentdef)}]`;let i=(o,s)=>{let a=`starts-with(., "${o}")`,c=`substring(., string-length(.) - string-length("${s}") + 1) = "${s}"`;return`${a} and ${c}`};t.anchorNodeSelector=`comment()[${i(`<${t.import.tagName}`,`</${t.import.tagName}>`)}]`,r.webqit.HTMLImportElement=ar.call(r,t),r.webqit.HTMLImportsProvider=class extends J{static get config(){return t}},r.webqit.Observer=h,Kr.call(r,t),tn.call(r,t)}function U(n,t=!0){if(!x(n).has("modules")&&t){let e=Object.create(null);x(n).set("modules",e)}return x(n).get("modules")}function Kr(n){let t=this;if(n.template.api.modules in t.HTMLTemplateElement.prototype)throw new Error(`The "HTMLTemplateElement" class already has a "${n.template.api.modules}" property!`);if(n.template.api.moduledef in t.HTMLTemplateElement.prototype)throw new Error(`The "HTMLTemplateElement" class already has a "${n.template.api.moduledef}" property!`);if(n.context.api.import in t.document)throw new Error(`document already has a "${n.context.api.import}" property!`);if(n.context.api.import in t.HTMLElement.prototype)throw new Error(`The "HTMLElement" class already has a "${n.context.api.import}" property!`);Object.defineProperty(t.HTMLTemplateElement.prototype,n.template.api.modules,{get:function(){return U(this)}}),Object.defineProperty(t.HTMLTemplateElement.prototype,n.template.api.moduledef,{get:function(){return this.getAttribute(n.template.attr.moduledef)}}),Object.defineProperty(t.document,n.context.api.import,{value:function(r,i=!1,o=null){return e(t.document,...arguments)}}),Object.defineProperty(t.HTMLElement.prototype,n.context.api.import,{value:function(r,i=!1,o=null){return e(this,...arguments)}});function e(r,i,o=!1,s=null){let a={detail:i};typeof o=="function"?(s=o,o=!1):typeof o=="object"&&o&&(a={...o,...a});let c=J.createRequest(a);return r[n.CONTEXT_API.api.context].request(c,s)}}function tn(n){let t=this,{realdom:e,HTMLImportElement:r,HTMLImportsProvider:i}=t.webqit,o=c=>{let l=i.createId(c);i.attachTo(c,l)},s=(c,l)=>{let u=i.createId(c);i.detachFrom(c,u,f=>l||c.matches&&!c.matches(n.ownerContextSelector)&&!Object.keys(f.localModules).length)};e.realtime(t.document).subtree([n.templateSelector,n.ownerContextSelector],c=>{c.entrants.forEach(l=>{if(l.matches(n.templateSelector)){Object.defineProperty(l,"scoped",{value:l.hasAttribute("scoped")});let u=new z(t,l,n);u.ownerContext=l.scoped?c.target:t.document;let f=U(u.ownerContext);u.exportId&&h.set(f,u.exportId,l),o(u.ownerContext)}else o(l)}),c.exits.forEach(l=>{if(l.matches(n.templateSelector)){let u=z.instance(t,l,n),f=U(u.ownerContext);u.exportId&&h.deleteProperty(f,u.exportId),s(u.ownerContext)}else s(l,!0)})},{live:!0,timing:"sync",staticSensitivity:n.staticsensitivity}),e.realtime(t.document).subtree(n.import.tagName,c=>{c.entrants.forEach(l=>a(l,!0,c)),c.exits.forEach(l=>a(l,!1,c))},{live:!0,timing:"sync"});function a(c,l,u){let f=r.instance(c);l?f["#"].connectedCallback():f["#"].disconnectedCallback()}t.webqit.env!=="server"&&e.realtime(t.document).subtree(`(${n.anchorNodeSelector})`,c=>{c.entrants.forEach(l=>{if(x(l).get("isAnchorNode"))return;let u=t.document.createElement("div");u.innerHTML=l.nodeValue,u.innerHTML=u.firstChild.textContent;let f=u.firstChild,m=parseInt(f.getAttribute("data-nodecount")),d=new Set,g=l;for(;(g=g.previousElementSibling)&&g.matches(n.slottedElementsSelector)&&m--;)d.add(g);r.instance(f)["#"].hydrate(l,d)})},{live:!0})}function Ce(n={}){let{config:t,window:e}=N.call(this,"html-bindings",n,{attr:{binding:"binding",itemIndex:"data-index"},tokens:{nodeType:"processing-instruction",tagStart:"?{",tagEnd:"}?",stateStart:"; [=",stateEnd:"]"},staticsensitivity:!0,isomorphic:!0});t.CONTEXT_API=e.webqit.oohtml.configs.CONTEXT_API,t.BINDINGS_API=e.webqit.oohtml.configs.BINDINGS_API,t.HTML_IMPORTS=e.webqit.oohtml.configs.HTML_IMPORTS,t.attrSelector=`[${e.CSS.escape(t.attr.binding)}]`;let r=(i,o)=>{let s=`starts-with(., "${i}")`,a=`substring(., string-length(.) - string-length("${o}") + 1) = "${o}"`;return`${s} and ${a}`};t.discreteBindingsSelector=`comment()[${r(t.tokens.tagStart,t.tokens.tagEnd)}]`,e.webqit.Observer=h,en.call(e,t)}function en(n){let t=this,{realdom:e}=t.webqit;e.realtime(t.document).subtree(`(${n.discreteBindingsSelector})`,r=>{cr.call(this,...r.exits),rn.call(this,n,...r.entrants)},{live:!0}),e.realtime(t.document).subtree(n.attrSelector,r=>{cr.call(this,...r.exits),nn.call(this,n,...r.entrants)},{live:!0,timing:"sync",staticSensitivity:n.staticsensitivity})}function lr(n,t){if(x(t).has("data-binding"))return x(t).get("data-binding");let e={},r=new AbortController;e.$set__=function(o,s,a){o&&(o[s]=a)},h.intercept(e,{get:(o,s,a)=>{if(!(o.key in e)){let c=tt.createRequest({detail:o.key,live:!0,signal:r.signal});t[n.CONTEXT_API.api.context].request(c,l=>{h.set(e,o.key,l)})}return a(e[o.key]??(o.key in globalThis?globalThis[o.key]:void 0))},has:(o,s,a)=>a(!0)});let i={scope:e,abortController:r,bindings:new Map};return x(t).set("data-binding",i),i}function cr(...n){for(let t of n){let e=t.nodeName==="#text"?t.parentNode:t,{bindings:r,abortController:i}=x(e).get("data-binding")||{};if(!r?.has(t))return;r.get(t).state.dispose(),r.get(t).signals.forEach(o=>o.abort()),r.delete(t),r.size||(i.abort(),x(e).delete("data-binding"))}}async function rn(n,...t){let e=this,r=o=>{let s=n.tokens.tagStart.split("").map(d=>`\\${d}`).join(""),a=n.tokens.tagEnd.split("").map(d=>`\\${d}`).join(""),c=n.tokens.stateStart.split("").map(d=>d===" "?"(?:\\s+)?":`\\${d}`).join(""),l=n.tokens.stateEnd.split("").map(d=>`\\${d}`).join(""),u=`^${s}(.*?)(?:${c}(\\d+)${l}(?:\\s+)?)?${a}$`,[,f,m]=o.match(new RegExp(u));return{raw:o,expr:f,span:parseInt(m??0)}},i=t.reduce((o,s)=>{if(s.isBound)return o;let a=r(s.nodeValue),c=s;if(a.span){if(c=s.nextSibling,c?.nodeName!=="#text"||c.nodeValue.length<a.span)return o;c.nodeValue.length>a.span&&c.splitText(a.span)}else c=s.ownerDocument.createTextNode(""),s.after(c);c.isBound=!0;let l=s;return e.webqit.env!=="server"&&(l.remove(),l=null),o.concat({textNode:c,template:a,anchorNode:l})},[]);for(let{textNode:o,template:s,anchorNode:a}of i){let{scope:c,bindings:l}=lr(n,o.parentNode),u="";u+=`let content = ((${s.expr}) ?? '') + '';`,u+="$set__(this, 'nodeValue', content);",a&&(u+=`$set__($anchorNode__, 'nodeValue', \`${n.tokens.tagStart}${s.expr}${n.tokens.stateStart}\` + content.length + \`${n.tokens.stateEnd} ${n.tokens.tagEnd}\`);`);let f=new Mt("$signals__","$anchorNode__",u,{env:c}),m=[];l.set(o,{compiled:f,signals:m,state:await f.call(o,m,a)})}}async function nn(n,...t){for(let e of t){let r=on(n,e.getAttribute(n.attr.binding)),{scope:i,bindings:o}=lr(n,e),s=new Mt("$signals__",r,{env:i}),a=[];o.set(e,{compiled:s,signals:a,state:await s.call(e,a)})}}var Pe=new Map;function on(n,t){if(Pe.has(t))return Pe.get(t);let e={},r=Te(t,";").map(i=>{let[o,s]=Te(i,":").map(f=>f.trim()),a=o[0],c=o.slice(1).trim(),l=`(${s})`,u=`(${l} ?? '')`;if(a==="&")return`this.style[\`${c}\`] = ${u};`;if(a==="%")return`this.classList.toggle(\`${c}\`, !!${l});`;if(a==="~")return c.endsWith("?")?`this.toggleAttribute(\`${c.substring(0,-1).trim()}\`, !!${l});`:`this.setAttribute(\`${c}\`, ${u});`;if(a==="@"){if(e[c])throw new Error(`Duplicate binding: ${o}.`);if(e[c]=!0,c==="text")return`$set__(this, 'textContent', ${u});`;if(c==="html")return`this.setHTML(${u});`;if(c==="items"){let[f,m]=Te(s,"/");if(!m)throw new Error(`Invalid ${a}items spec: ${i}; no import specifier.`);let[d,g,p,w]=f.trim().match(/(.*?[\)\s+])(of|in)([\(\{\[\s+].*)/i)||[];if(!d)throw new Error(`Invalid ${a}items spec: ${i}.`);if(g.startsWith("(")?g=g.trim().slice(1,-1).split(",").map(y=>y.trim()):g=[g],g.length>(p==="in"?3:2))throw new Error(`Invalid ${a}items spec: ${i}.`);let b=p==="in"?g[2]:g[1]||"$index__";return`
|
|
24
24
|
let $iteratee__ = ${w};
|
|
25
25
|
let $import__ = this.${n.HTML_IMPORTS.context.api.import}( ${m.trim()}, true );
|
|
26
26
|
$signals__.push( $import__ );
|