@qwik.dev/core 2.0.0-beta.30 → 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,27 +1,46 @@
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
- nativeQuerySelectorAll(fragment, "[q\\:shadowroot]").forEach((parent) => {
25
+ const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
26
+ for (let i = 0; i < shadowRoots.length; i++) {
27
+ const parent = shadowRoots[i];
20
28
  const shadowRoot = parent.shadowRoot;
21
29
  shadowRoot && findShadowRoots(shadowRoot);
22
- });
30
+ }
23
31
  };
24
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
+ };
25
44
  const resolveContainer = (containerEl) => {
26
45
  if (containerEl._qwikjson_ === void 0) {
27
46
  const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
@@ -43,13 +62,82 @@ const emitEvent = (eventName, detail) => {
43
62
  };
44
63
  const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
45
64
  const kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
46
- const parseKebabEvent = (event) => ({
47
- scope: event.charAt(0),
48
- eventName: kebabToCamel(event.slice(2))
49
- });
50
- 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;
51
139
  if (kebabName) {
52
- if (element.hasAttribute("preventdefault:" + kebabName)) {
140
+ if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {
53
141
  ev.preventDefault();
54
142
  }
55
143
  if (element.hasAttribute("stoppropagation:" + kebabName)) {
@@ -59,16 +147,40 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
59
147
  const handlers = element._qDispatch?.[scopedKebabName];
60
148
  if (handlers) {
61
149
  if (typeof handlers === "function") {
62
- const result = handlers(ev, element);
63
- if (isPromise(result)) {
64
- 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
+ }
65
164
  }
66
165
  } else if (handlers.length) {
67
166
  for (let i = 0; i < handlers.length; i++) {
68
167
  const handler = handlers[i];
69
- const result = handler?.(ev, element);
70
- if (isPromise(result)) {
71
- 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
+ }
72
184
  }
73
185
  }
74
186
  }
@@ -81,98 +193,116 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
81
193
  );
82
194
  const qBase = container.getAttribute("q:base");
83
195
  const base = new URL(qBase, doc.baseURI);
84
- for (const qrl of attrValue.split("|")) {
196
+ const qrls = attrValue.split("|");
197
+ for (let i = 0; i < qrls.length; i++) {
198
+ const qrl = qrls[i];
85
199
  const reqTime = performance.now();
86
200
  const [chunk, symbol, capturedIds] = qrl.split("#");
87
- const eventData = {
88
- qBase,
89
- symbol,
90
- element,
91
- reqTime
92
- };
93
- let handler;
94
- let importError;
95
- let error;
96
- if (chunk === "") {
97
- const hash = container.getAttribute("q:instance");
98
- handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
99
- if (!handler) {
100
- importError = "sync";
101
- error = new Error("sym:" + symbol);
102
- }
103
- } else {
104
- const key = `${symbol}|${qBase}|${chunk}`;
105
- handler = symbols.get(key);
106
- if (!handler) {
107
- const href = new URL(chunk, base).href;
201
+ const run = (handler2) => {
202
+ if (handler2 && element.isConnected) {
108
203
  try {
109
- const module = import(
110
- /* @vite-ignore */
111
- href
112
- );
113
- resolveContainer(container);
114
- handler = (await module)[symbol];
115
- if (!handler) {
116
- importError = "no-symbol";
117
- error = new Error(`${symbol} not in ${href}`);
118
- } else {
119
- symbols.set(key, handler);
120
- 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
+ });
121
215
  }
122
- } catch (err) {
123
- importError = "async";
124
- error = err;
216
+ } catch (error) {
217
+ emitEvent("qerror", {
218
+ error,
219
+ qBase,
220
+ symbol,
221
+ element,
222
+ reqTime
223
+ });
125
224
  }
126
225
  }
127
- }
128
- if (!handler) {
129
- emitEvent("qerror", {
130
- importError,
131
- error,
132
- ...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);
133
232
  });
134
- console.error(error);
135
- continue;
136
- }
137
- if (element.isConnected) {
138
- try {
139
- const result = handler.call(capturedIds, ev, element);
140
- if (isPromise(result)) {
141
- await result;
142
- }
143
- } catch (error2) {
144
- emitEvent("qerror", { error: error2, ...eventData });
233
+ } else {
234
+ const result = run(handler);
235
+ if (isPromise(result)) {
236
+ defer = true;
237
+ tasks.push(() => result);
145
238
  }
146
239
  }
147
240
  }
148
241
  }
149
242
  };
150
- const processElementEvent = async (ev) => {
243
+ const processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
151
244
  const kebabName = camelToKebab(ev.type);
152
- const scopedKebabName = "e:" + kebabName;
153
- let element = ev.target;
154
- while (element && element.getAttribute) {
155
- const results = dispatch(element, ev, scopedKebabName, kebabName);
156
- const doBubble = ev.bubbles && !ev.cancelBubble;
157
- if (isPromise(results)) {
158
- 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;
159
258
  }
160
- element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;
161
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);
162
281
  };
163
- const broadcast = (infix, ev) => {
282
+ const processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);
283
+ const broadcast = (scope, ev, allowPreventDefault = true) => {
164
284
  const kebabName = camelToKebab(ev.type);
165
- const scopedKebabName = infix + ":" + kebabName;
166
- querySelectorAll("[q-" + infix + "\\:" + kebabName + "]").forEach(
167
- (el) => dispatch(el, ev, scopedKebabName, kebabName)
168
- );
285
+ const scopedKebabName = scope + ":" + kebabName;
286
+ const elements = querySelectorAll("[q-" + scope + "\\:" + kebabName + "]");
287
+ const tasks = [];
288
+ for (let i = 0; i < elements.length; i++) {
289
+ const el = elements[i];
290
+ dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
291
+ }
292
+ queueTasks(tasks);
169
293
  };
170
- const processDocumentEvent = async (ev) => {
294
+ const processDocumentEvent = (ev) => {
171
295
  broadcast(documentPrefix, ev);
172
296
  };
297
+ const processPassiveDocumentEvent = (ev) => {
298
+ broadcast(passiveDocumentPrefix, ev, false);
299
+ };
173
300
  const processWindowEvent = (ev) => {
174
301
  broadcast(windowPrefix, ev);
175
302
  };
303
+ const processPassiveWindowEvent = (ev) => {
304
+ broadcast(passiveWindowPrefix, ev, false);
305
+ };
176
306
  const processReadyStateChange = () => {
177
307
  const readyState = doc.readyState;
178
308
  if (readyState == "interactive" || readyState == "complete") {
@@ -181,35 +311,53 @@ const processReadyStateChange = () => {
181
311
  if (events.has("d:qinit")) {
182
312
  events.delete("d:qinit");
183
313
  const ev = createEvent("qinit");
184
- querySelectorAll("[q-d\\:qinit]").forEach((el) => {
185
- dispatch(el, ev, "d:qinit");
314
+ const elements = querySelectorAll("[q-d\\:qinit]");
315
+ const tasks = [];
316
+ for (let i = 0; i < elements.length; i++) {
317
+ const el = elements[i];
318
+ dispatch(el, ev, "d:qinit", tasks);
186
319
  el.removeAttribute("q-d:qinit");
187
- });
320
+ }
321
+ queueTasks(tasks);
188
322
  }
189
323
  if (events.has("d:qidle")) {
190
324
  events.delete("d:qidle");
191
325
  const riC = win.requestIdleCallback ?? win.setTimeout;
192
326
  riC.bind(win)(() => {
193
327
  const ev = createEvent("qidle");
194
- querySelectorAll("[q-d\\:qidle]").forEach((el) => {
195
- dispatch(el, ev, "d:qidle");
328
+ const elements = querySelectorAll("[q-d\\:qidle]");
329
+ const tasks = [];
330
+ for (let i = 0; i < elements.length; i++) {
331
+ const el = elements[i];
332
+ dispatch(el, ev, "d:qidle", tasks);
196
333
  el.removeAttribute("q-d:qidle");
197
- });
334
+ }
335
+ queueTasks(tasks);
198
336
  });
199
337
  }
200
338
  if (events.has("e:qvisible")) {
201
339
  observer || (observer = new IntersectionObserver((entries) => {
202
- for (const entry of entries) {
340
+ const tasks = [];
341
+ for (let i = 0; i < entries.length; i++) {
342
+ const entry = entries[i];
203
343
  if (entry.isIntersecting) {
204
344
  observer.unobserve(entry.target);
205
- dispatch(entry.target, createEvent("qvisible", entry), "e:qvisible");
345
+ dispatch(
346
+ entry.target,
347
+ createEvent("qvisible", entry),
348
+ "e:qvisible",
349
+ tasks
350
+ );
206
351
  }
207
352
  }
353
+ queueTasks(tasks);
208
354
  }));
209
- querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])").forEach((el) => {
355
+ const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
356
+ for (let i = 0; i < elements.length; i++) {
357
+ const el = elements[i];
210
358
  observer.observe(el);
211
359
  el.setAttribute("q:observed", "true");
212
- });
360
+ }
213
361
  }
214
362
  }
215
363
  };
@@ -220,15 +368,24 @@ const addEventOrRoot = (...eventNames) => {
220
368
  if (!events.has(eventNameOrRoot)) {
221
369
  events.add(eventNameOrRoot);
222
370
  const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
223
- if (scope === windowPrefix) {
224
- 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
+ );
225
381
  } else {
226
382
  roots.forEach(
227
383
  (root) => addEventListener(
228
384
  root,
229
385
  eventName,
230
- scope === documentPrefix ? processDocumentEvent : processElementEvent,
231
- true
386
+ rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
387
+ true,
388
+ passive
232
389
  )
233
390
  );
234
391
  }
@@ -240,12 +397,15 @@ const addEventOrRoot = (...eventNames) => {
240
397
  if (!roots.has(eventNameOrRoot)) {
241
398
  events.forEach((kebabEventName) => {
242
399
  const { scope, eventName } = parseKebabEvent(kebabEventName);
243
- if (scope !== windowPrefix) {
400
+ const passive = isPassiveScope(scope);
401
+ const rootScope = getRootScope(scope);
402
+ if (rootScope !== windowPrefix) {
244
403
  addEventListener(
245
404
  eventNameOrRoot,
246
405
  eventName,
247
- scope === documentPrefix ? processDocumentEvent : processElementEvent,
248
- true
406
+ rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
407
+ true,
408
+ passive
249
409
  );
250
410
  }
251
411
  });
@@ -1 +1 @@
1
- const e=document,t=window,o="w",n="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(o=>t.push(...l(o,e))),t},d=(e,t,o,n=!1)=>e.addEventListener(t,o,{capture:n,passive:!1}),b=e=>{_(e),l(e,"[q\\:shadowroot]").forEach(e=>{const t=e.shadowRoot;t&&b(t)})},f=e=>e&&"function"==typeof e.then,p=t=>{if(void 0===t._qwikjson_){let o=(t===e.documentElement?e.body:t).lastElementChild;for(;o;){if("SCRIPT"===o.tagName&&"qwik/json"===o.getAttribute("type")){t._qwikjson_=JSON.parse(o.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}o=o.previousElementSibling}}},u=(e,t)=>new CustomEvent(e,{detail:t}),h=(t,o)=>{e.dispatchEvent(u(t,o))},m=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),v=e=>e.replace(/-./g,e=>e[1].toUpperCase()),w=e=>({scope:e.charAt(0),eventName:v(e.slice(2))}),y=async(t,o,n,r)=>{r&&(t.hasAttribute("preventdefault:"+r)&&o.preventDefault(),t.hasAttribute("stoppropagation:"+r)&&o.stopPropagation());const s=t._qDispatch?.[n];if(s){if("function"==typeof s){const e=s(o,t);f(e)&&await e}else if(s.length)for(let e=0;e<s.length;e++){const n=s[e],r=n?.(o,t);f(r)&&await r}return}const a=t.getAttribute("q-"+n);if(a){const n=t.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),r=n.getAttribute("q:base"),s=new URL(r,e.baseURI);for(const c of a.split("|")){const a=performance.now(),[l,q,d]=c.split("#"),b={qBase:r,symbol:q,element:t,reqTime:a};let u,m,v;if(""===l){const t=n.getAttribute("q:instance");u=(e["qFuncs_"+t]||[])[Number.parseInt(q)],u||(m="sync",v=Error("sym:"+q))}else{const e=`${q}|${r}|${l}`;if(u=i.get(e),!u){const t=new URL(l,s).href;try{const o=import(t);p(n),u=(await o)[q],u?(i.set(e,u),h("qsymbol",b)):(m="no-symbol",v=Error(`${q} not in ${t}`))}catch(e){m="async",v=e}}}if(u){if(t.isConnected)try{const e=u.call(d,o,t);f(e)&&await e}catch(e){h("qerror",{error:e,...b})}}else h("qerror",{importError:m,error:v,...b}),console.error(v)}}},g=async e=>{const t=m(e.type),o="e:"+t;let n=e.target;for(;n&&n.getAttribute;){const r=y(n,e,o,t),s=e.bubbles&&!e.cancelBubble;f(r)&&await r,n=s&&e.bubbles&&!e.cancelBubble?n.parentElement:null}},E=(e,t)=>{const o=m(t.type),n=e+":"+o;q("[q-"+e+"\\:"+o+"]").forEach(e=>y(e,t,n,o))},A=async e=>{E(n,e)},C=e=>{E(o,e)},k=()=>{const o=e.readyState;if("interactive"==o||"complete"==o){if(c=1,s.forEach(b),r.has("d:qinit")){r.delete("d:qinit");const e=u("qinit");q("[q-d\\:qinit]").forEach(t=>{y(t,e,"d:qinit"),t.removeAttribute("q-d:qinit")})}r.has("d:qidle")&&(r.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=u("qidle");q("[q-d\\:qidle]").forEach(t=>{y(t,e,"d:qidle"),t.removeAttribute("q-d:qidle")})})),r.has("e:qvisible")&&(a||(a=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(a.unobserve(t.target),y(t.target,u("qvisible",t),"e:qvisible"))})),q("[q-e\\:qvisible]:not([q\\:observed])").forEach(e=>{a.observe(e),e.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}=w(a);e===o?d(t,i,C,!0):s.forEach(t=>d(t,i,e===n?A:g,!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}=w(e);t!==o&&d(a,r,t===n?A:g,!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());