@qwik.dev/core 2.0.0-beta.31 → 2.0.0-beta.32

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.
@@ -1,3 +1,3 @@
1
- const QWIK_LOADER = "const e=document,t=window,n=\"w\",o=\"d\",r=new Set,s=new Set([e]),i=new Map;let a,c;const l=(e,t)=>Array.from(e.querySelectorAll(t)),q=e=>{const t=[];return s.forEach(n=>t.push(...l(n,e))),t},d=(e,t,n,o=!1)=>e.addEventListener(t,n,{capture:o,passive:!1}),b=e=>{_(e);const t=l(e,\"[q\\\\:shadowroot]\");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&b(n)}},f=e=>e&&\"function\"==typeof e.then,p=t=>{if(void 0===t._qwikjson_){let n=(t===e.documentElement?e.body:t).lastElementChild;for(;n;){if(\"SCRIPT\"===n.tagName&&\"qwik/json\"===n.getAttribute(\"type\")){t._qwikjson_=JSON.parse(n.textContent.replace(/\\\\x3C(\\/?script)/gi,\"<$1\"));break}n=n.previousElementSibling}}},u=(e,t)=>new CustomEvent(e,{detail:t}),h=(t,n)=>{e.dispatchEvent(u(t,n))},g=e=>e.replace(/([A-Z-])/g,e=>\"-\"+e.toLowerCase()),m=e=>e.replace(/-./g,e=>e[1].toUpperCase()),v=e=>({scope:e.charAt(0),eventName:m(e.slice(2))}),w=async(t,n,o,r)=>{r&&(t.hasAttribute(\"preventdefault:\"+r)&&n.preventDefault(),t.hasAttribute(\"stoppropagation:\"+r)&&n.stopPropagation());const s=t._qDispatch?.[o];if(s){if(\"function\"==typeof s){const e=s(n,t);f(e)&&await e}else if(s.length)for(let e=0;e<s.length;e++){const o=s[e],r=o?.(n,t);f(r)&&await r}return}const a=t.getAttribute(\"q-\"+o);if(a){const o=t.closest(\"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\"),r=o.getAttribute(\"q:base\"),s=new URL(r,e.baseURI),c=a.split(\"|\");for(let a=0;a<c.length;a++){const l=c[a],q=performance.now(),[d,b,u]=l.split(\"#\"),g={qBase:r,symbol:b,element:t,reqTime:q};let m,v,w;if(\"\"===d){const t=o.getAttribute(\"q:instance\");m=(e[\"qFuncs_\"+t]||[])[Number.parseInt(b)],m||(v=\"sync\",w=Error(\"sym:\"+b))}else{const e=`${b}|${r}|${d}`;if(m=i.get(e),!m){const t=new URL(d,s).href;try{const n=import(t);p(o),m=(await n)[b],m?(i.set(e,m),h(\"qsymbol\",g)):(v=\"no-symbol\",w=Error(`${b} not in ${t}`))}catch(e){v=\"async\",w=e}}}if(m){if(t.isConnected)try{const e=m.call(u,n,t);f(e)&&await e}catch(e){h(\"qerror\",{error:e,...g})}}else h(\"qerror\",{importError:v,error:w,...g}),console.error(w)}}},y=async e=>{const t=g(e.type),n=\"e:\"+t;let o=e.target;for(;o&&o.getAttribute;){const r=w(o,e,n,t),s=e.bubbles&&!e.cancelBubble;f(r)&&await r,o=s&&e.bubbles&&!e.cancelBubble?o.parentElement:null}},A=(e,t)=>{const n=g(t.type),o=e+\":\"+n,r=q(\"[q-\"+e+\"\\\\:\"+n+\"]\");for(let e=0;e<r.length;e++){const s=r[e];w(s,t,o,n)}},E=async e=>{A(o,e)},C=e=>{A(n,e)},k=()=>{const n=e.readyState;if(\"interactive\"==n||\"complete\"==n){if(c=1,s.forEach(b),r.has(\"d:qinit\")){r.delete(\"d:qinit\");const e=u(\"qinit\"),t=q(\"[q-d\\\\:qinit]\");for(let n=0;n<t.length;n++){const o=t[n];w(o,e,\"d:qinit\"),o.removeAttribute(\"q-d:qinit\")}}if(r.has(\"d:qidle\")&&(r.delete(\"d:qidle\"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=u(\"qidle\"),t=q(\"[q-d\\\\:qidle]\");for(let n=0;n<t.length;n++){const o=t[n];w(o,e,\"d:qidle\"),o.removeAttribute(\"q-d:qidle\")}})),r.has(\"e:qvisible\")){a||(a=new IntersectionObserver(e=>{for(let t=0;t<e.length;t++){const n=e[t];n.isIntersecting&&(a.unobserve(n.target),w(n.target,u(\"qvisible\",n),\"e:qvisible\"))}}));const e=q(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");for(let t=0;t<e.length;t++){const n=e[t];a.observe(n),n.setAttribute(\"q:observed\",\"true\")}}}},_=(...e)=>{for(let i=0;i<e.length;i++){const a=e[i];if(\"string\"==typeof a){if(!r.has(a)){r.add(a);const{scope:e,eventName:i}=v(a);e===n?d(t,i,C,!0):s.forEach(t=>d(t,i,e===o?E:y,!0)),1!==c||\"e:qvisible\"!==a&&\"d:qinit\"!==a&&\"d:qidle\"!==a||k()}}else s.has(a)||(r.forEach(e=>{const{scope:t,eventName:r}=v(e);t!==n&&d(a,r,t===o?E:y,!0)}),s.add(a))}},S=t._qwikEv;S?.roots||(Array.isArray(S)?_(...S):_(\"e:click\",\"e:input\"),t._qwikEv={events:r,roots:s,push:_},d(e,\"readystatechange\",k),k())";
2
- const QWIK_LOADER_DEBUG = "const doc = document;\nconst win = window;\nconst windowPrefix = \"w\";\nconst documentPrefix = \"d\";\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nlet observer;\nlet hasInitialized;\nconst nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nconst querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nconst addEventListener = (el, eventName, handler, capture = false) => el.addEventListener(eventName, handler, { capture, passive: false });\nconst findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, \"[q\\\\:shadowroot]\");\n for (let i = 0; i < shadowRoots.length; i++) {\n const parent = shadowRoots[i];\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nconst isPromise = (promise) => promise && typeof promise.then === \"function\";\nconst resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;\n let script = parentJSON.lastElementChild;\n while (script) {\n if (script.tagName === \"SCRIPT\" && script.getAttribute(\"type\") === \"qwik/json\") {\n containerEl._qwikjson_ = JSON.parse(\n script.textContent.replace(/\\\\x3C(\\/?script)/gi, \"<$1\")\n );\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nconst createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nconst emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nconst camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => \"-\" + a.toLowerCase());\nconst kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nconst parseKebabEvent = (event) => ({\n scope: event.charAt(0),\n eventName: kebabToCamel(event.slice(2))\n});\nconst dispatch = async (element, ev, scopedKebabName, kebabName) => {\n if (kebabName) {\n if (element.hasAttribute(\"preventdefault:\" + kebabName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute(\"stoppropagation:\" + kebabName)) {\n ev.stopPropagation();\n }\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === \"function\") {\n const result = handlers(ev, element);\n if (isPromise(result)) {\n await result;\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n const result = handler?.(ev, element);\n if (isPromise(result)) {\n await result;\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute(\"q-\" + scopedKebabName);\n if (attrValue) {\n const container = element.closest(\n \"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\"\n );\n const qBase = container.getAttribute(\"q:base\");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split(\"|\");\n for (let i = 0; i < qrls.length; i++) {\n const qrl = qrls[i];\n const reqTime = performance.now();\n const [chunk, symbol, capturedIds] = qrl.split(\"#\");\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n let handler;\n let importError;\n let error;\n if (chunk === \"\") {\n const hash = container.getAttribute(\"q:instance\");\n handler = (doc[\"qFuncs_\" + hash] || [])[Number.parseInt(symbol)];\n if (!handler) {\n importError = \"sync\";\n error = new Error(\"sym:\" + symbol);\n }\n } else {\n const key = `${symbol}|${qBase}|${chunk}`;\n handler = symbols.get(key);\n if (!handler) {\n const href = new URL(chunk, base).href;\n try {\n const module = import(\n href\n );\n resolveContainer(container);\n handler = (await module)[symbol];\n if (!handler) {\n importError = \"no-symbol\";\n error = new Error(`${symbol} not in ${href}`);\n } else {\n symbols.set(key, handler);\n emitEvent(\"qsymbol\", eventData);\n }\n } catch (err) {\n importError = \"async\";\n error = err;\n }\n }\n }\n if (!handler) {\n emitEvent(\"qerror\", {\n importError,\n error,\n ...eventData\n });\n console.error(error);\n continue;\n }\n if (element.isConnected) {\n try {\n const result = handler.call(capturedIds, ev, element);\n if (isPromise(result)) {\n await result;\n }\n } catch (error2) {\n emitEvent(\"qerror\", { error: error2, ...eventData });\n }\n }\n }\n }\n};\nconst processElementEvent = async (ev) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = \"e:\" + kebabName;\n let element = ev.target;\n while (element && element.getAttribute) {\n const results = dispatch(element, ev, scopedKebabName, kebabName);\n const doBubble = ev.bubbles && !ev.cancelBubble;\n if (isPromise(results)) {\n await results;\n }\n element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;\n }\n};\nconst broadcast = (infix, ev) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = infix + \":\" + kebabName;\n const elements = querySelectorAll(\"[q-\" + infix + \"\\\\:\" + kebabName + \"]\");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, scopedKebabName, kebabName);\n }\n};\nconst processDocumentEvent = async (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nconst processReadyStateChange = () => {\n const readyState = doc.readyState;\n if (readyState == \"interactive\" || readyState == \"complete\") {\n hasInitialized = 1;\n roots.forEach(findShadowRoots);\n if (events.has(\"d:qinit\")) {\n events.delete(\"d:qinit\");\n const ev = createEvent(\"qinit\");\n const elements = querySelectorAll(\"[q-d\\\\:qinit]\");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, \"d:qinit\");\n el.removeAttribute(\"q-d:qinit\");\n }\n }\n if (events.has(\"d:qidle\")) {\n events.delete(\"d:qidle\");\n const riC = win.requestIdleCallback ?? win.setTimeout;\n riC.bind(win)(() => {\n const ev = createEvent(\"qidle\");\n const elements = querySelectorAll(\"[q-d\\\\:qidle]\");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, \"d:qidle\");\n el.removeAttribute(\"q-d:qidle\");\n }\n });\n }\n if (events.has(\"e:qvisible\")) {\n observer || (observer = new IntersectionObserver((entries) => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(entry.target, createEvent(\"qvisible\", entry), \"e:qvisible\");\n }\n }\n }));\n const elements = querySelectorAll(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n observer.observe(el);\n el.setAttribute(\"q:observed\", \"true\");\n }\n }\n }\n};\nconst addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (typeof eventNameOrRoot === \"string\") {\n if (!events.has(eventNameOrRoot)) {\n events.add(eventNameOrRoot);\n const { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n if (scope === windowPrefix) {\n addEventListener(win, eventName, processWindowEvent, true);\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n scope === documentPrefix ? processDocumentEvent : processElementEvent,\n true\n )\n );\n }\n if (hasInitialized === 1 && (eventNameOrRoot === \"e:qvisible\" || eventNameOrRoot === \"d:qinit\" || eventNameOrRoot === \"d:qidle\")) {\n processReadyStateChange();\n }\n }\n } else {\n if (!roots.has(eventNameOrRoot)) {\n events.forEach((kebabEventName) => {\n const { scope, eventName } = parseKebabEvent(kebabEventName);\n if (scope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n scope === documentPrefix ? processDocumentEvent : processElementEvent,\n true\n );\n }\n });\n roots.add(eventNameOrRoot);\n }\n }\n }\n};\nconst _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) {\n addEventOrRoot(..._qwikEv);\n } else {\n addEventOrRoot(\"e:click\", \"e:input\");\n }\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, \"readystatechange\", processReadyStateChange);\n processReadyStateChange();\n}";
1
+ const QWIK_LOADER = "const e=document,t=window,r=\"w\",n=\"wp\",o=\"d\",s=\"dp\",i=\"e\",c=\"ep\",l=\"capture:\",a=new Set,p=new Set([e]),q=new Map;let u,f,h;const d=(e,t)=>Array.from(e.querySelectorAll(t)),b=e=>{const t=[];return p.forEach(r=>t.push(...d(r,e))),t},m=(e,t,r,n=!1,o=!1)=>e.addEventListener(t,r,{capture:n,passive:o}),g=e=>{J(e);const t=d(e,\"[q\\\\:shadowroot]\");for(let e=0;e<t.length;e++){const r=t[e].shadowRoot;r&&g(r)}},v=e=>e&&\"function\"==typeof e.then,y=async e=>{for(let t=0;t<e.length;t++)await e[t]()},w=e=>{if(e.length){const t=()=>y(e);h=h?h.then(t,t):t()}},E=t=>{if(void 0===t._qwikjson_){let r=(t===e.documentElement?e.body:t).lastElementChild;for(;r;){if(\"SCRIPT\"===r.tagName&&\"qwik/json\"===r.getAttribute(\"type\")){t._qwikjson_=JSON.parse(r.textContent.replace(/\\\\x3C(\\/?script)/gi,\"<$1\"));break}r=r.previousElementSibling}}},A=(e,t)=>new CustomEvent(e,{detail:t}),C=(t,r)=>{e.dispatchEvent(A(t,r))},_=e=>e.replace(/([A-Z-])/g,e=>\"-\"+e.toLowerCase()),k=e=>e.replace(/-./g,e=>e[1].toUpperCase()),B=e=>{const t=e.indexOf(\":\");return{scope:e.slice(0,t),eventName:k(e.slice(t+1))}},S=e=>2===e.length,I=e=>e.charAt(0),N=e=>!!e&&1===e.nodeType,T=(e,t,r)=>e.hasAttribute(r)&&(!!e._qDispatch?.[t]||e.hasAttribute(\"q-\"+t)),$=(t,r,n,o,s,i,c)=>{const l={qBase:n,symbol:i,element:r,reqTime:c};if(\"\"===s){const r=t.getAttribute(\"q:instance\"),n=(e[\"qFuncs_\"+r]||[])[Number.parseInt(i)];if(!n){const e=Error(\"sym:\"+i);C(\"qerror\",{importError:\"sync\",error:e,...l}),console.error(e)}return n}const a=`${i}|${n}|${s}`,p=q.get(a);if(p)return p;const u=new URL(s,o).href,f=import(u);return E(t),f.then(e=>{const t=e[i];if(t)q.set(a,t),C(\"qsymbol\",l);else{const e=Error(`${i} not in ${u}`);C(\"qerror\",{importError:\"no-symbol\",error:e,...l}),console.error(e)}return t},e=>{C(\"qerror\",{importError:\"async\",error:e,...l}),console.error(e)})},R=(t,r,n,o,s,i=!0)=>{let c=!1;s&&(i&&t.hasAttribute(\"preventdefault:\"+s)&&r.preventDefault(),t.hasAttribute(\"stoppropagation:\"+s)&&r.stopPropagation());const l=t._qDispatch?.[n];if(l){if(\"function\"==typeof l){const e=()=>l(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}else if(l.length)for(let e=0;e<l.length;e++){const n=l[e];if(n){const e=()=>n(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}}return}const a=t.getAttribute(\"q-\"+n);if(a){const n=t.closest(\"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\"),s=n.getAttribute(\"q:base\"),i=new URL(s,e.baseURI),l=a.split(\"|\");for(let e=0;e<l.length;e++){const a=l[e],p=performance.now(),[q,u,f]=a.split(\"#\"),h=e=>{if(e&&t.isConnected)try{const n=e.call(f,r,t);if(v(n))return n.catch(e=>{C(\"qerror\",{error:e,qBase:s,symbol:u,element:t,reqTime:p})})}catch(e){C(\"qerror\",{error:e,qBase:s,symbol:u,element:t,reqTime:p})}},d=$(n,t,s,i,q,u,p);if(c||v(d))c=!0,o.push(async()=>{await h(v(d)?await d:d)});else{const e=h(d);v(e)&&(c=!0,o.push(()=>e))}}}},x=(e,t=i,r=!0)=>{const n=_(e.type),o=t+\":\"+n,s=l+n,c=[],a=[],p=[];let q=e.target;for(;q;)N(q)?(c.push(q),a.push(T(q,o,s)),q=q.parentElement):q=q.parentElement;for(let t=c.length-1;t>=0;t--)if(a[t]&&(R(c[t],e,o,p,n,r),e.cancelBubble||e.cancelBubble))return void w(p);for(let t=0;t<c.length;t++)if(!a[t]&&(R(c[t],e,o,p,n,r),!e.bubbles||e.cancelBubble||e.cancelBubble))return void w(p);w(p)},L=e=>x(e,c,!1),U=(e,t,r=!0)=>{const n=_(t.type),o=e+\":\"+n,s=b(\"[q-\"+e+\"\\\\:\"+n+\"]\"),i=[];for(let e=0;e<s.length;e++){const c=s[e];R(c,t,o,i,n,r)}w(i)},j=e=>{U(o,e)},D=e=>{U(s,e,!1)},O=e=>{U(r,e)},P=e=>{U(n,e,!1)},F=()=>{const r=e.readyState;if(\"interactive\"==r||\"complete\"==r){if(f=1,p.forEach(g),a.has(\"d:qinit\")){a.delete(\"d:qinit\");const e=A(\"qinit\"),t=b(\"[q-d\\\\:qinit]\"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,\"d:qinit\",r),o.removeAttribute(\"q-d:qinit\")}w(r)}if(a.has(\"d:qidle\")&&(a.delete(\"d:qidle\"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=A(\"qidle\"),t=b(\"[q-d\\\\:qidle]\"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,\"d:qidle\",r),o.removeAttribute(\"q-d:qidle\")}w(r)})),a.has(\"e:qvisible\")){u||(u=new IntersectionObserver(e=>{const t=[];for(let r=0;r<e.length;r++){const n=e[r];n.isIntersecting&&(u.unobserve(n.target),R(n.target,A(\"qvisible\",n),\"e:qvisible\",t))}w(t)}));const e=b(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");for(let t=0;t<e.length;t++){const r=e[t];u.observe(r),r.setAttribute(\"q:observed\",\"true\")}}}},J=(...e)=>{for(let n=0;n<e.length;n++){const s=e[n];if(\"string\"==typeof s){if(!a.has(s)){a.add(s);const{scope:e,eventName:n}=B(s),i=S(e),c=I(e);c===r?m(t,n,i?P:O,!0,i):p.forEach(e=>m(e,n,c===o?i?D:j:i?L:x,!0,i)),1!==f||\"e:qvisible\"!==s&&\"d:qinit\"!==s&&\"d:qidle\"!==s||F()}}else p.has(s)||(a.forEach(e=>{const{scope:t,eventName:n}=B(e),i=S(t),c=I(t);c!==r&&m(s,n,c===o?i?D:j:i?L:x,!0,i)}),p.add(s))}},M=t._qwikEv;M?.roots||(Array.isArray(M)?J(...M):J(\"e:click\",\"e:input\"),t._qwikEv={events:a,roots:p,push:J},m(e,\"readystatechange\",F),F())";
2
+ const QWIK_LOADER_DEBUG = "const doc = document;\nconst win = window;\nconst windowPrefix = \"w\";\nconst passiveWindowPrefix = \"wp\";\nconst documentPrefix = \"d\";\nconst passiveDocumentPrefix = \"dp\";\nconst elementPrefix = \"e\";\nconst passiveElementPrefix = \"ep\";\nconst capturePrefix = \"capture:\";\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nlet observer;\nlet hasInitialized;\nlet queuedTasks;\nconst nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nconst querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nconst addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });\nconst findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, \"[q\\\\:shadowroot]\");\n for (let i = 0; i < shadowRoots.length; i++) {\n const parent = shadowRoots[i];\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nconst isPromise = (promise) => promise && typeof promise.then === \"function\";\nconst runTasks = async (tasks) => {\n for (let i = 0; i < tasks.length; i++) {\n await tasks[i]();\n }\n};\nconst queueTasks = (tasks) => {\n if (tasks.length) {\n const run = () => runTasks(tasks);\n queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n }\n};\nconst resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;\n let script = parentJSON.lastElementChild;\n while (script) {\n if (script.tagName === \"SCRIPT\" && script.getAttribute(\"type\") === \"qwik/json\") {\n containerEl._qwikjson_ = JSON.parse(\n script.textContent.replace(/\\\\x3C(\\/?script)/gi, \"<$1\")\n );\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nconst createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nconst emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nconst camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => \"-\" + a.toLowerCase());\nconst kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nconst parseKebabEvent = (event) => {\n const separatorIndex = event.indexOf(\":\");\n const scope = event.slice(0, separatorIndex);\n return {\n scope,\n eventName: kebabToCamel(event.slice(separatorIndex + 1))\n };\n};\nconst isPassiveScope = (scope) => scope.length === 2;\nconst getRootScope = (scope) => scope.charAt(0);\nconst isElementNode = (node) => !!node && node.nodeType === 1;\nconst isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute(\"q-\" + scopedKebabName));\nconst resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (chunk === \"\") {\n const hash = container.getAttribute(\"q:instance\");\n const handler2 = (doc[\"qFuncs_\" + hash] || [])[Number.parseInt(symbol)];\n if (!handler2) {\n const error = new Error(\"sym:\" + symbol);\n emitEvent(\"qerror\", {\n importError: \"sync\",\n error,\n ...eventData\n });\n console.error(error);\n }\n return handler2;\n }\n const key = `${symbol}|${qBase}|${chunk}`;\n const handler = symbols.get(key);\n if (handler) {\n return handler;\n }\n const href = new URL(chunk, base).href;\n const module = import(\n href\n );\n resolveContainer(container);\n return module.then(\n (module2) => {\n const handler2 = module2[symbol];\n if (!handler2) {\n const error = new Error(`${symbol} not in ${href}`);\n emitEvent(\"qerror\", {\n importError: \"no-symbol\",\n error,\n ...eventData\n });\n console.error(error);\n } else {\n symbols.set(key, handler2);\n emitEvent(\"qsymbol\", eventData);\n }\n return handler2;\n },\n (error) => {\n emitEvent(\"qerror\", {\n importError: \"async\",\n error,\n ...eventData\n });\n console.error(error);\n return void 0;\n }\n );\n};\nconst dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n let defer = false;\n if (kebabName) {\n if (allowPreventDefault && element.hasAttribute(\"preventdefault:\" + kebabName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute(\"stoppropagation:\" + kebabName)) {\n ev.stopPropagation();\n }\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === \"function\") {\n const run = () => handlers(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n if (handler) {\n const run = () => handler(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute(\"q-\" + scopedKebabName);\n if (attrValue) {\n const container = element.closest(\n \"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\"\n );\n const qBase = container.getAttribute(\"q:base\");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split(\"|\");\n for (let i = 0; i < qrls.length; i++) {\n const qrl = qrls[i];\n const reqTime = performance.now();\n const [chunk, symbol, capturedIds] = qrl.split(\"#\");\n const run = (handler2) => {\n if (handler2 && element.isConnected) {\n try {\n const result = handler2.call(capturedIds, ev, element);\n if (isPromise(result)) {\n return result.catch((error) => {\n emitEvent(\"qerror\", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n });\n }\n } catch (error) {\n emitEvent(\"qerror\", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n }\n }\n };\n const handler = resolveHandler(container, element, qBase, base, chunk, symbol, reqTime);\n if (defer || isPromise(handler)) {\n defer = true;\n tasks.push(async () => {\n await run(isPromise(handler) ? await handler : handler);\n });\n } else {\n const result = run(handler);\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n};\nconst processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + \":\" + kebabName;\n const captureAttribute = capturePrefix + kebabName;\n const elements = [];\n const captureHandlers = [];\n const tasks = [];\n let current = ev.target;\n while (current) {\n if (isElementNode(current)) {\n elements.push(current);\n captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n current = current.parentElement;\n } else {\n current = current.parentElement;\n }\n }\n for (let i = elements.length - 1; i >= 0; i--) {\n if (captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n const continuePropagation = !ev.cancelBubble;\n if (!continuePropagation || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n for (let i = 0; i < elements.length; i++) {\n if (!captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n const doBubble = ev.bubbles && !ev.cancelBubble;\n if (!doBubble || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n queueTasks(tasks);\n};\nconst processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nconst broadcast = (scope, ev, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + \":\" + kebabName;\n const elements = querySelectorAll(\"[q-\" + scope + \"\\\\:\" + kebabName + \"]\");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n }\n queueTasks(tasks);\n};\nconst processDocumentEvent = (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processPassiveDocumentEvent = (ev) => {\n broadcast(passiveDocumentPrefix, ev, false);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nconst processPassiveWindowEvent = (ev) => {\n broadcast(passiveWindowPrefix, ev, false);\n};\nconst processReadyStateChange = () => {\n const readyState = doc.readyState;\n if (readyState == \"interactive\" || readyState == \"complete\") {\n hasInitialized = 1;\n roots.forEach(findShadowRoots);\n if (events.has(\"d:qinit\")) {\n events.delete(\"d:qinit\");\n const ev = createEvent(\"qinit\");\n const elements = querySelectorAll(\"[q-d\\\\:qinit]\");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, \"d:qinit\", tasks);\n el.removeAttribute(\"q-d:qinit\");\n }\n queueTasks(tasks);\n }\n if (events.has(\"d:qidle\")) {\n events.delete(\"d:qidle\");\n const riC = win.requestIdleCallback ?? win.setTimeout;\n riC.bind(win)(() => {\n const ev = createEvent(\"qidle\");\n const elements = querySelectorAll(\"[q-d\\\\:qidle]\");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, \"d:qidle\", tasks);\n el.removeAttribute(\"q-d:qidle\");\n }\n queueTasks(tasks);\n });\n }\n if (events.has(\"e:qvisible\")) {\n observer || (observer = new IntersectionObserver((entries) => {\n const tasks = [];\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(\n entry.target,\n createEvent(\"qvisible\", entry),\n \"e:qvisible\",\n tasks\n );\n }\n }\n queueTasks(tasks);\n }));\n const elements = querySelectorAll(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n observer.observe(el);\n el.setAttribute(\"q:observed\", \"true\");\n }\n }\n }\n};\nconst addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (typeof eventNameOrRoot === \"string\") {\n if (!events.has(eventNameOrRoot)) {\n events.add(eventNameOrRoot);\n const { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope === windowPrefix) {\n addEventListener(\n win,\n eventName,\n passive ? processPassiveWindowEvent : processWindowEvent,\n true,\n passive\n );\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n )\n );\n }\n if (hasInitialized === 1 && (eventNameOrRoot === \"e:qvisible\" || eventNameOrRoot === \"d:qinit\" || eventNameOrRoot === \"d:qidle\")) {\n processReadyStateChange();\n }\n }\n } else {\n if (!roots.has(eventNameOrRoot)) {\n events.forEach((kebabEventName) => {\n const { scope, eventName } = parseKebabEvent(kebabEventName);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n );\n }\n });\n roots.add(eventNameOrRoot);\n }\n }\n }\n};\nconst _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) {\n addEventOrRoot(..._qwikEv);\n } else {\n addEventOrRoot(\"e:click\", \"e:input\");\n }\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, \"readystatechange\", processReadyStateChange);\n processReadyStateChange();\n}";
3
3
  export { QWIK_LOADER, QWIK_LOADER_DEBUG };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwik.dev/core/loader",
3
- "version": "2.0.0-beta.31-dev+906321a",
3
+ "version": "2.0.0-beta.32-dev+0e29f8a",
4
4
  "main": "index.mjs",
5
5
  "types": "index.d.ts",
6
6
  "private": true,
@@ -1432,13 +1432,13 @@ Please ensure "src/entry.preview.tsx" has been built before the "preview" comman
1432
1432
  );
1433
1433
  try {
1434
1434
  const f = u.pathToFileURL(c).href, t = await i.strictDynamicImport(f);
1435
- let g = null, m = null;
1436
- if (t.default && (typeof t.default == "function" ? g = t.default : typeof t.default == "object" && (g = t.default.router, m = t.default.notFound)), typeof g != "function")
1435
+ let g = null;
1436
+ if (t.default && (typeof t.default == "function" ? g = t.default : typeof t.default == "object" && (g = t.default.router)), typeof g != "function")
1437
1437
  return We(
1438
1438
  e,
1439
1439
  `Entry preview module "${c}" does not export a default middleware function`
1440
1440
  );
1441
- e.use(g), typeof m == "function" && e.use(m);
1441
+ e.use(g);
1442
1442
  } catch (f) {
1443
1443
  return We(e, String(f));
1444
1444
  }
@@ -2614,7 +2614,7 @@ function Rr(e = {}) {
2614
2614
  const S = e?.devTools?.hmr ?? !0;
2615
2615
  if (this.environment.name === "ssr" && b.modules.length)
2616
2616
  if (S) {
2617
- const x = /* @__PURE__ */ new Set(), U = (_) => /\.[mc]?[jt]sx?$/.test(_.split("?")[0]);
2617
+ const x = /* @__PURE__ */ new Set(), U = (_) => /\.([mc]?[jt]sx?|mdx?)$/.test(_.split("?")[0]);
2618
2618
  for (const _ of b.modules) {
2619
2619
  const P = _.url.split("?")[0];
2620
2620
  if (_.type === "js" && U(_.url))
@@ -1,19 +1,25 @@
1
1
  const doc = document;
2
2
  const win = window;
3
3
  const windowPrefix = "w";
4
+ const passiveWindowPrefix = "wp";
4
5
  const documentPrefix = "d";
6
+ const passiveDocumentPrefix = "dp";
7
+ const elementPrefix = "e";
8
+ const passiveElementPrefix = "ep";
9
+ const capturePrefix = "capture:";
5
10
  const events = /* @__PURE__ */ new Set();
6
11
  const roots = /* @__PURE__ */ new Set([doc]);
7
12
  const symbols = /* @__PURE__ */ new Map();
8
13
  let observer;
9
14
  let hasInitialized;
15
+ let queuedTasks;
10
16
  const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
11
17
  const querySelectorAll = (query) => {
12
18
  const elements = [];
13
19
  roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));
14
20
  return elements;
15
21
  };
16
- const addEventListener = (el, eventName, handler, capture = false) => el.addEventListener(eventName, handler, { capture, passive: false });
22
+ const addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });
17
23
  const findShadowRoots = (fragment) => {
18
24
  addEventOrRoot(fragment);
19
25
  const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
@@ -24,6 +30,17 @@ const findShadowRoots = (fragment) => {
24
30
  }
25
31
  };
26
32
  const isPromise = (promise) => promise && typeof promise.then === "function";
33
+ const runTasks = async (tasks) => {
34
+ for (let i = 0; i < tasks.length; i++) {
35
+ await tasks[i]();
36
+ }
37
+ };
38
+ const queueTasks = (tasks) => {
39
+ if (tasks.length) {
40
+ const run = () => runTasks(tasks);
41
+ queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();
42
+ }
43
+ };
27
44
  const resolveContainer = (containerEl) => {
28
45
  if (containerEl._qwikjson_ === void 0) {
29
46
  const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
@@ -45,13 +62,82 @@ const emitEvent = (eventName, detail) => {
45
62
  };
46
63
  const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
47
64
  const kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
48
- const parseKebabEvent = (event) => ({
49
- scope: event.charAt(0),
50
- eventName: kebabToCamel(event.slice(2))
51
- });
52
- const dispatch = async (element, ev, scopedKebabName, kebabName) => {
65
+ const parseKebabEvent = (event) => {
66
+ const separatorIndex = event.indexOf(":");
67
+ const scope = event.slice(0, separatorIndex);
68
+ return {
69
+ scope,
70
+ eventName: kebabToCamel(event.slice(separatorIndex + 1))
71
+ };
72
+ };
73
+ const isPassiveScope = (scope) => scope.length === 2;
74
+ const getRootScope = (scope) => scope.charAt(0);
75
+ const isElementNode = (node) => !!node && node.nodeType === 1;
76
+ const isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));
77
+ const resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime) => {
78
+ const eventData = {
79
+ qBase,
80
+ symbol,
81
+ element,
82
+ reqTime
83
+ };
84
+ if (chunk === "") {
85
+ const hash = container.getAttribute("q:instance");
86
+ const handler2 = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
87
+ if (!handler2) {
88
+ const error = new Error("sym:" + symbol);
89
+ emitEvent("qerror", {
90
+ importError: "sync",
91
+ error,
92
+ ...eventData
93
+ });
94
+ console.error(error);
95
+ }
96
+ return handler2;
97
+ }
98
+ const key = `${symbol}|${qBase}|${chunk}`;
99
+ const handler = symbols.get(key);
100
+ if (handler) {
101
+ return handler;
102
+ }
103
+ const href = new URL(chunk, base).href;
104
+ const module = import(
105
+ /* @vite-ignore */
106
+ href
107
+ );
108
+ resolveContainer(container);
109
+ return module.then(
110
+ (module2) => {
111
+ const handler2 = module2[symbol];
112
+ if (!handler2) {
113
+ const error = new Error(`${symbol} not in ${href}`);
114
+ emitEvent("qerror", {
115
+ importError: "no-symbol",
116
+ error,
117
+ ...eventData
118
+ });
119
+ console.error(error);
120
+ } else {
121
+ symbols.set(key, handler2);
122
+ emitEvent("qsymbol", eventData);
123
+ }
124
+ return handler2;
125
+ },
126
+ (error) => {
127
+ emitEvent("qerror", {
128
+ importError: "async",
129
+ error,
130
+ ...eventData
131
+ });
132
+ console.error(error);
133
+ return void 0;
134
+ }
135
+ );
136
+ };
137
+ const dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {
138
+ let defer = false;
53
139
  if (kebabName) {
54
- if (element.hasAttribute("preventdefault:" + kebabName)) {
140
+ if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {
55
141
  ev.preventDefault();
56
142
  }
57
143
  if (element.hasAttribute("stoppropagation:" + kebabName)) {
@@ -61,16 +147,40 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
61
147
  const handlers = element._qDispatch?.[scopedKebabName];
62
148
  if (handlers) {
63
149
  if (typeof handlers === "function") {
64
- const result = handlers(ev, element);
65
- if (isPromise(result)) {
66
- await result;
150
+ const run = () => handlers(ev, element);
151
+ if (defer) {
152
+ tasks.push(async () => {
153
+ const result = run();
154
+ if (isPromise(result)) {
155
+ await result;
156
+ }
157
+ });
158
+ } else {
159
+ const result = run();
160
+ if (isPromise(result)) {
161
+ defer = true;
162
+ tasks.push(() => result);
163
+ }
67
164
  }
68
165
  } else if (handlers.length) {
69
166
  for (let i = 0; i < handlers.length; i++) {
70
167
  const handler = handlers[i];
71
- const result = handler?.(ev, element);
72
- if (isPromise(result)) {
73
- await result;
168
+ if (handler) {
169
+ const run = () => handler(ev, element);
170
+ if (defer) {
171
+ tasks.push(async () => {
172
+ const result = run();
173
+ if (isPromise(result)) {
174
+ await result;
175
+ }
176
+ });
177
+ } else {
178
+ const result = run();
179
+ if (isPromise(result)) {
180
+ defer = true;
181
+ tasks.push(() => result);
182
+ }
183
+ }
74
184
  }
75
185
  }
76
186
  }
@@ -88,97 +198,111 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
88
198
  const qrl = qrls[i];
89
199
  const reqTime = performance.now();
90
200
  const [chunk, symbol, capturedIds] = qrl.split("#");
91
- const eventData = {
92
- qBase,
93
- symbol,
94
- element,
95
- reqTime
96
- };
97
- let handler;
98
- let importError;
99
- let error;
100
- if (chunk === "") {
101
- const hash = container.getAttribute("q:instance");
102
- handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
103
- if (!handler) {
104
- importError = "sync";
105
- error = new Error("sym:" + symbol);
106
- }
107
- } else {
108
- const key = `${symbol}|${qBase}|${chunk}`;
109
- handler = symbols.get(key);
110
- if (!handler) {
111
- const href = new URL(chunk, base).href;
201
+ const run = (handler2) => {
202
+ if (handler2 && element.isConnected) {
112
203
  try {
113
- const module = import(
114
- /* @vite-ignore */
115
- href
116
- );
117
- resolveContainer(container);
118
- handler = (await module)[symbol];
119
- if (!handler) {
120
- importError = "no-symbol";
121
- error = new Error(`${symbol} not in ${href}`);
122
- } else {
123
- symbols.set(key, handler);
124
- emitEvent("qsymbol", eventData);
204
+ const result = handler2.call(capturedIds, ev, element);
205
+ if (isPromise(result)) {
206
+ return result.catch((error) => {
207
+ emitEvent("qerror", {
208
+ error,
209
+ qBase,
210
+ symbol,
211
+ element,
212
+ reqTime
213
+ });
214
+ });
125
215
  }
126
- } catch (err) {
127
- importError = "async";
128
- error = err;
216
+ } catch (error) {
217
+ emitEvent("qerror", {
218
+ error,
219
+ qBase,
220
+ symbol,
221
+ element,
222
+ reqTime
223
+ });
129
224
  }
130
225
  }
131
- }
132
- if (!handler) {
133
- emitEvent("qerror", {
134
- importError,
135
- error,
136
- ...eventData
226
+ };
227
+ const handler = resolveHandler(container, element, qBase, base, chunk, symbol, reqTime);
228
+ if (defer || isPromise(handler)) {
229
+ defer = true;
230
+ tasks.push(async () => {
231
+ await run(isPromise(handler) ? await handler : handler);
137
232
  });
138
- console.error(error);
139
- continue;
140
- }
141
- if (element.isConnected) {
142
- try {
143
- const result = handler.call(capturedIds, ev, element);
144
- if (isPromise(result)) {
145
- await result;
146
- }
147
- } catch (error2) {
148
- emitEvent("qerror", { error: error2, ...eventData });
233
+ } else {
234
+ const result = run(handler);
235
+ if (isPromise(result)) {
236
+ defer = true;
237
+ tasks.push(() => result);
149
238
  }
150
239
  }
151
240
  }
152
241
  }
153
242
  };
154
- const processElementEvent = async (ev) => {
243
+ const processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
155
244
  const kebabName = camelToKebab(ev.type);
156
- const scopedKebabName = "e:" + kebabName;
157
- let element = ev.target;
158
- while (element && element.getAttribute) {
159
- const results = dispatch(element, ev, scopedKebabName, kebabName);
160
- const doBubble = ev.bubbles && !ev.cancelBubble;
161
- if (isPromise(results)) {
162
- await results;
245
+ const scopedKebabName = scope + ":" + kebabName;
246
+ const captureAttribute = capturePrefix + kebabName;
247
+ const elements = [];
248
+ const captureHandlers = [];
249
+ const tasks = [];
250
+ let current = ev.target;
251
+ while (current) {
252
+ if (isElementNode(current)) {
253
+ elements.push(current);
254
+ captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));
255
+ current = current.parentElement;
256
+ } else {
257
+ current = current.parentElement;
163
258
  }
164
- element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;
165
259
  }
260
+ for (let i = elements.length - 1; i >= 0; i--) {
261
+ if (captureHandlers[i]) {
262
+ dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
263
+ const continuePropagation = !ev.cancelBubble;
264
+ if (!continuePropagation || ev.cancelBubble) {
265
+ queueTasks(tasks);
266
+ return;
267
+ }
268
+ }
269
+ }
270
+ for (let i = 0; i < elements.length; i++) {
271
+ if (!captureHandlers[i]) {
272
+ dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
273
+ const doBubble = ev.bubbles && !ev.cancelBubble;
274
+ if (!doBubble || ev.cancelBubble) {
275
+ queueTasks(tasks);
276
+ return;
277
+ }
278
+ }
279
+ }
280
+ queueTasks(tasks);
166
281
  };
167
- const broadcast = (infix, ev) => {
282
+ const processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);
283
+ const broadcast = (scope, ev, allowPreventDefault = true) => {
168
284
  const kebabName = camelToKebab(ev.type);
169
- const scopedKebabName = infix + ":" + kebabName;
170
- const elements = querySelectorAll("[q-" + infix + "\\:" + kebabName + "]");
285
+ const scopedKebabName = scope + ":" + kebabName;
286
+ const elements = querySelectorAll("[q-" + scope + "\\:" + kebabName + "]");
287
+ const tasks = [];
171
288
  for (let i = 0; i < elements.length; i++) {
172
289
  const el = elements[i];
173
- dispatch(el, ev, scopedKebabName, kebabName);
290
+ dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
174
291
  }
292
+ queueTasks(tasks);
175
293
  };
176
- const processDocumentEvent = async (ev) => {
294
+ const processDocumentEvent = (ev) => {
177
295
  broadcast(documentPrefix, ev);
178
296
  };
297
+ const processPassiveDocumentEvent = (ev) => {
298
+ broadcast(passiveDocumentPrefix, ev, false);
299
+ };
179
300
  const processWindowEvent = (ev) => {
180
301
  broadcast(windowPrefix, ev);
181
302
  };
303
+ const processPassiveWindowEvent = (ev) => {
304
+ broadcast(passiveWindowPrefix, ev, false);
305
+ };
182
306
  const processReadyStateChange = () => {
183
307
  const readyState = doc.readyState;
184
308
  if (readyState == "interactive" || readyState == "complete") {
@@ -188,11 +312,13 @@ const processReadyStateChange = () => {
188
312
  events.delete("d:qinit");
189
313
  const ev = createEvent("qinit");
190
314
  const elements = querySelectorAll("[q-d\\:qinit]");
315
+ const tasks = [];
191
316
  for (let i = 0; i < elements.length; i++) {
192
317
  const el = elements[i];
193
- dispatch(el, ev, "d:qinit");
318
+ dispatch(el, ev, "d:qinit", tasks);
194
319
  el.removeAttribute("q-d:qinit");
195
320
  }
321
+ queueTasks(tasks);
196
322
  }
197
323
  if (events.has("d:qidle")) {
198
324
  events.delete("d:qidle");
@@ -200,22 +326,31 @@ const processReadyStateChange = () => {
200
326
  riC.bind(win)(() => {
201
327
  const ev = createEvent("qidle");
202
328
  const elements = querySelectorAll("[q-d\\:qidle]");
329
+ const tasks = [];
203
330
  for (let i = 0; i < elements.length; i++) {
204
331
  const el = elements[i];
205
- dispatch(el, ev, "d:qidle");
332
+ dispatch(el, ev, "d:qidle", tasks);
206
333
  el.removeAttribute("q-d:qidle");
207
334
  }
335
+ queueTasks(tasks);
208
336
  });
209
337
  }
210
338
  if (events.has("e:qvisible")) {
211
339
  observer || (observer = new IntersectionObserver((entries) => {
340
+ const tasks = [];
212
341
  for (let i = 0; i < entries.length; i++) {
213
342
  const entry = entries[i];
214
343
  if (entry.isIntersecting) {
215
344
  observer.unobserve(entry.target);
216
- dispatch(entry.target, createEvent("qvisible", entry), "e:qvisible");
345
+ dispatch(
346
+ entry.target,
347
+ createEvent("qvisible", entry),
348
+ "e:qvisible",
349
+ tasks
350
+ );
217
351
  }
218
352
  }
353
+ queueTasks(tasks);
219
354
  }));
220
355
  const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
221
356
  for (let i = 0; i < elements.length; i++) {
@@ -233,15 +368,24 @@ const addEventOrRoot = (...eventNames) => {
233
368
  if (!events.has(eventNameOrRoot)) {
234
369
  events.add(eventNameOrRoot);
235
370
  const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
236
- if (scope === windowPrefix) {
237
- addEventListener(win, eventName, processWindowEvent, true);
371
+ const passive = isPassiveScope(scope);
372
+ const rootScope = getRootScope(scope);
373
+ if (rootScope === windowPrefix) {
374
+ addEventListener(
375
+ win,
376
+ eventName,
377
+ passive ? processPassiveWindowEvent : processWindowEvent,
378
+ true,
379
+ passive
380
+ );
238
381
  } else {
239
382
  roots.forEach(
240
383
  (root) => addEventListener(
241
384
  root,
242
385
  eventName,
243
- scope === documentPrefix ? processDocumentEvent : processElementEvent,
244
- true
386
+ rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
387
+ true,
388
+ passive
245
389
  )
246
390
  );
247
391
  }
@@ -253,12 +397,15 @@ const addEventOrRoot = (...eventNames) => {
253
397
  if (!roots.has(eventNameOrRoot)) {
254
398
  events.forEach((kebabEventName) => {
255
399
  const { scope, eventName } = parseKebabEvent(kebabEventName);
256
- if (scope !== windowPrefix) {
400
+ const passive = isPassiveScope(scope);
401
+ const rootScope = getRootScope(scope);
402
+ if (rootScope !== windowPrefix) {
257
403
  addEventListener(
258
404
  eventNameOrRoot,
259
405
  eventName,
260
- scope === documentPrefix ? processDocumentEvent : processElementEvent,
261
- true
406
+ rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
407
+ true,
408
+ passive
262
409
  );
263
410
  }
264
411
  });
@@ -1 +1 @@
1
- const e=document,t=window,n="w",o="d",r=new Set,s=new Set([e]),i=new Map;let a,c;const l=(e,t)=>Array.from(e.querySelectorAll(t)),q=e=>{const t=[];return s.forEach(n=>t.push(...l(n,e))),t},d=(e,t,n,o=!1)=>e.addEventListener(t,n,{capture:o,passive:!1}),b=e=>{_(e);const t=l(e,"[q\\:shadowroot]");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&b(n)}},f=e=>e&&"function"==typeof e.then,p=t=>{if(void 0===t._qwikjson_){let n=(t===e.documentElement?e.body:t).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){t._qwikjson_=JSON.parse(n.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},u=(e,t)=>new CustomEvent(e,{detail:t}),h=(t,n)=>{e.dispatchEvent(u(t,n))},g=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),m=e=>e.replace(/-./g,e=>e[1].toUpperCase()),v=e=>({scope:e.charAt(0),eventName:m(e.slice(2))}),w=async(t,n,o,r)=>{r&&(t.hasAttribute("preventdefault:"+r)&&n.preventDefault(),t.hasAttribute("stoppropagation:"+r)&&n.stopPropagation());const s=t._qDispatch?.[o];if(s){if("function"==typeof s){const e=s(n,t);f(e)&&await e}else if(s.length)for(let e=0;e<s.length;e++){const o=s[e],r=o?.(n,t);f(r)&&await r}return}const a=t.getAttribute("q-"+o);if(a){const o=t.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),r=o.getAttribute("q:base"),s=new URL(r,e.baseURI),c=a.split("|");for(let a=0;a<c.length;a++){const l=c[a],q=performance.now(),[d,b,u]=l.split("#"),g={qBase:r,symbol:b,element:t,reqTime:q};let m,v,w;if(""===d){const t=o.getAttribute("q:instance");m=(e["qFuncs_"+t]||[])[Number.parseInt(b)],m||(v="sync",w=Error("sym:"+b))}else{const e=`${b}|${r}|${d}`;if(m=i.get(e),!m){const t=new URL(d,s).href;try{const n=import(t);p(o),m=(await n)[b],m?(i.set(e,m),h("qsymbol",g)):(v="no-symbol",w=Error(`${b} not in ${t}`))}catch(e){v="async",w=e}}}if(m){if(t.isConnected)try{const e=m.call(u,n,t);f(e)&&await e}catch(e){h("qerror",{error:e,...g})}}else h("qerror",{importError:v,error:w,...g}),console.error(w)}}},y=async e=>{const t=g(e.type),n="e:"+t;let o=e.target;for(;o&&o.getAttribute;){const r=w(o,e,n,t),s=e.bubbles&&!e.cancelBubble;f(r)&&await r,o=s&&e.bubbles&&!e.cancelBubble?o.parentElement:null}},A=(e,t)=>{const n=g(t.type),o=e+":"+n,r=q("[q-"+e+"\\:"+n+"]");for(let e=0;e<r.length;e++){const s=r[e];w(s,t,o,n)}},E=async e=>{A(o,e)},C=e=>{A(n,e)},k=()=>{const n=e.readyState;if("interactive"==n||"complete"==n){if(c=1,s.forEach(b),r.has("d:qinit")){r.delete("d:qinit");const e=u("qinit"),t=q("[q-d\\:qinit]");for(let n=0;n<t.length;n++){const o=t[n];w(o,e,"d:qinit"),o.removeAttribute("q-d:qinit")}}if(r.has("d:qidle")&&(r.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=u("qidle"),t=q("[q-d\\:qidle]");for(let n=0;n<t.length;n++){const o=t[n];w(o,e,"d:qidle"),o.removeAttribute("q-d:qidle")}})),r.has("e:qvisible")){a||(a=new IntersectionObserver(e=>{for(let t=0;t<e.length;t++){const n=e[t];n.isIntersecting&&(a.unobserve(n.target),w(n.target,u("qvisible",n),"e:qvisible"))}}));const e=q("[q-e\\:qvisible]:not([q\\:observed])");for(let t=0;t<e.length;t++){const n=e[t];a.observe(n),n.setAttribute("q:observed","true")}}}},_=(...e)=>{for(let i=0;i<e.length;i++){const a=e[i];if("string"==typeof a){if(!r.has(a)){r.add(a);const{scope:e,eventName:i}=v(a);e===n?d(t,i,C,!0):s.forEach(t=>d(t,i,e===o?E:y,!0)),1!==c||"e:qvisible"!==a&&"d:qinit"!==a&&"d:qidle"!==a||k()}}else s.has(a)||(r.forEach(e=>{const{scope:t,eventName:r}=v(e);t!==n&&d(a,r,t===o?E:y,!0)}),s.add(a))}},S=t._qwikEv;S?.roots||(Array.isArray(S)?_(...S):_("e:click","e:input"),t._qwikEv={events:r,roots:s,push:_},d(e,"readystatechange",k),k());
1
+ const e=document,t=window,r="w",n="wp",o="d",s="dp",i="e",c="ep",l="capture:",a=new Set,p=new Set([e]),q=new Map;let u,f,h;const d=(e,t)=>Array.from(e.querySelectorAll(t)),b=e=>{const t=[];return p.forEach(r=>t.push(...d(r,e))),t},m=(e,t,r,n=!1,o=!1)=>e.addEventListener(t,r,{capture:n,passive:o}),g=e=>{J(e);const t=d(e,"[q\\:shadowroot]");for(let e=0;e<t.length;e++){const r=t[e].shadowRoot;r&&g(r)}},v=e=>e&&"function"==typeof e.then,y=async e=>{for(let t=0;t<e.length;t++)await e[t]()},w=e=>{if(e.length){const t=()=>y(e);h=h?h.then(t,t):t()}},E=t=>{if(void 0===t._qwikjson_){let r=(t===e.documentElement?e.body:t).lastElementChild;for(;r;){if("SCRIPT"===r.tagName&&"qwik/json"===r.getAttribute("type")){t._qwikjson_=JSON.parse(r.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}r=r.previousElementSibling}}},A=(e,t)=>new CustomEvent(e,{detail:t}),C=(t,r)=>{e.dispatchEvent(A(t,r))},_=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),k=e=>e.replace(/-./g,e=>e[1].toUpperCase()),B=e=>{const t=e.indexOf(":");return{scope:e.slice(0,t),eventName:k(e.slice(t+1))}},S=e=>2===e.length,I=e=>e.charAt(0),N=e=>!!e&&1===e.nodeType,T=(e,t,r)=>e.hasAttribute(r)&&(!!e._qDispatch?.[t]||e.hasAttribute("q-"+t)),$=(t,r,n,o,s,i,c)=>{const l={qBase:n,symbol:i,element:r,reqTime:c};if(""===s){const r=t.getAttribute("q:instance"),n=(e["qFuncs_"+r]||[])[Number.parseInt(i)];if(!n){const e=Error("sym:"+i);C("qerror",{importError:"sync",error:e,...l}),console.error(e)}return n}const a=`${i}|${n}|${s}`,p=q.get(a);if(p)return p;const u=new URL(s,o).href,f=import(u);return E(t),f.then(e=>{const t=e[i];if(t)q.set(a,t),C("qsymbol",l);else{const e=Error(`${i} not in ${u}`);C("qerror",{importError:"no-symbol",error:e,...l}),console.error(e)}return t},e=>{C("qerror",{importError:"async",error:e,...l}),console.error(e)})},R=(t,r,n,o,s,i=!0)=>{let c=!1;s&&(i&&t.hasAttribute("preventdefault:"+s)&&r.preventDefault(),t.hasAttribute("stoppropagation:"+s)&&r.stopPropagation());const l=t._qDispatch?.[n];if(l){if("function"==typeof l){const e=()=>l(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}else if(l.length)for(let e=0;e<l.length;e++){const n=l[e];if(n){const e=()=>n(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}}return}const a=t.getAttribute("q-"+n);if(a){const n=t.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),s=n.getAttribute("q:base"),i=new URL(s,e.baseURI),l=a.split("|");for(let e=0;e<l.length;e++){const a=l[e],p=performance.now(),[q,u,f]=a.split("#"),h=e=>{if(e&&t.isConnected)try{const n=e.call(f,r,t);if(v(n))return n.catch(e=>{C("qerror",{error:e,qBase:s,symbol:u,element:t,reqTime:p})})}catch(e){C("qerror",{error:e,qBase:s,symbol:u,element:t,reqTime:p})}},d=$(n,t,s,i,q,u,p);if(c||v(d))c=!0,o.push(async()=>{await h(v(d)?await d:d)});else{const e=h(d);v(e)&&(c=!0,o.push(()=>e))}}}},x=(e,t=i,r=!0)=>{const n=_(e.type),o=t+":"+n,s=l+n,c=[],a=[],p=[];let q=e.target;for(;q;)N(q)?(c.push(q),a.push(T(q,o,s)),q=q.parentElement):q=q.parentElement;for(let t=c.length-1;t>=0;t--)if(a[t]&&(R(c[t],e,o,p,n,r),e.cancelBubble||e.cancelBubble))return void w(p);for(let t=0;t<c.length;t++)if(!a[t]&&(R(c[t],e,o,p,n,r),!e.bubbles||e.cancelBubble||e.cancelBubble))return void w(p);w(p)},L=e=>x(e,c,!1),U=(e,t,r=!0)=>{const n=_(t.type),o=e+":"+n,s=b("[q-"+e+"\\:"+n+"]"),i=[];for(let e=0;e<s.length;e++){const c=s[e];R(c,t,o,i,n,r)}w(i)},j=e=>{U(o,e)},D=e=>{U(s,e,!1)},O=e=>{U(r,e)},P=e=>{U(n,e,!1)},F=()=>{const r=e.readyState;if("interactive"==r||"complete"==r){if(f=1,p.forEach(g),a.has("d:qinit")){a.delete("d:qinit");const e=A("qinit"),t=b("[q-d\\:qinit]"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,"d:qinit",r),o.removeAttribute("q-d:qinit")}w(r)}if(a.has("d:qidle")&&(a.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=A("qidle"),t=b("[q-d\\:qidle]"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,"d:qidle",r),o.removeAttribute("q-d:qidle")}w(r)})),a.has("e:qvisible")){u||(u=new IntersectionObserver(e=>{const t=[];for(let r=0;r<e.length;r++){const n=e[r];n.isIntersecting&&(u.unobserve(n.target),R(n.target,A("qvisible",n),"e:qvisible",t))}w(t)}));const e=b("[q-e\\:qvisible]:not([q\\:observed])");for(let t=0;t<e.length;t++){const r=e[t];u.observe(r),r.setAttribute("q:observed","true")}}}},J=(...e)=>{for(let n=0;n<e.length;n++){const s=e[n];if("string"==typeof s){if(!a.has(s)){a.add(s);const{scope:e,eventName:n}=B(s),i=S(e),c=I(e);c===r?m(t,n,i?P:O,!0,i):p.forEach(e=>m(e,n,c===o?i?D:j:i?L:x,!0,i)),1!==f||"e:qvisible"!==s&&"d:qinit"!==s&&"d:qidle"!==s||F()}}else p.has(s)||(a.forEach(e=>{const{scope:t,eventName:n}=B(e),i=S(t),c=I(t);c!==r&&m(s,n,c===o?i?D:j:i?L:x,!0,i)}),p.add(s))}},M=t._qwikEv;M?.roots||(Array.isArray(M)?J(...M):J("e:click","e:input"),t._qwikEv={events:a,roots:p,push:J},m(e,"readystatechange",F),F());