@qwik.dev/core 2.0.0-beta.39 → 2.0.0-beta.40

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.
Files changed (43) hide show
  1. package/dist/backpatch/index.mjs +2 -2
  2. package/dist/backpatch/package.json +1 -1
  3. package/dist/backpatch-executor.debug.js +55 -42
  4. package/dist/backpatch-executor.js +1 -1
  5. package/dist/build/package.json +1 -1
  6. package/dist/cli.mjs +2 -2
  7. package/dist/core-internal.d.ts +1 -1
  8. package/dist/core.min.mjs +6 -6
  9. package/dist/core.mjs +2 -2
  10. package/dist/core.prod.mjs +152 -152
  11. package/dist/insights/index.qwik.mjs +81 -93
  12. package/dist/insights/vite/index.mjs +79 -84
  13. package/dist/loader/index.mjs +2 -2
  14. package/dist/loader/package.json +1 -1
  15. package/dist/optimizer.d.ts +19 -3
  16. package/dist/optimizer.mjs +2992 -3624
  17. package/dist/out-of-order-executor.debug.js +138 -161
  18. package/dist/out-of-order-executor.js +1 -1
  19. package/dist/preloader.mjs +178 -1
  20. package/dist/qwikloader.debug.js +384 -433
  21. package/dist/qwikloader.js +1 -1
  22. package/dist/server.mjs +10 -216
  23. package/dist/server.prod.mjs +1046 -1046
  24. package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/vite.config.ts +1 -1
  25. package/dist/starters/adapters/azure-swa/adapters/azure-swa/vite.config.ts +1 -1
  26. package/dist/starters/adapters/bun/adapters/bun/vite.config.ts +1 -1
  27. package/dist/starters/adapters/cloud-run/adapters/cloud-run/vite.config.ts +1 -1
  28. package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/vite.config.ts +1 -1
  29. package/dist/starters/adapters/cloudflare-workers/adapters/cloudflare-workers/vite.config.ts +1 -1
  30. package/dist/starters/adapters/deno/adapters/deno/vite.config.ts +1 -1
  31. package/dist/starters/adapters/express/adapters/express/vite.config.ts +1 -1
  32. package/dist/starters/adapters/fastify/adapters/fastify/vite.config.ts +1 -1
  33. package/dist/starters/adapters/firebase/adapters/firebase/vite.config.ts +1 -1
  34. package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/vite.config.ts +1 -1
  35. package/dist/starters/adapters/node-server/adapters/node-server/vite.config.ts +1 -1
  36. package/dist/starters/adapters/ssg/adapters/ssg/vite.config.ts +1 -1
  37. package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/vite.config.ts +1 -1
  38. package/dist/starters/features/csr/package.json +1 -1
  39. package/dist/testing/index.mjs +3 -2
  40. package/dist/testing/package.json +1 -1
  41. package/dist/worker/index.mjs +248 -315
  42. package/dist/worker/package.json +1 -1
  43. package/package.json +5 -5
@@ -1,454 +1,405 @@
1
- const doc = document;
2
- const win = window;
3
- const windowPrefix = "w";
4
- const passiveWindowPrefix = "wp";
5
- const documentPrefix = "d";
6
- const passiveDocumentPrefix = "dp";
7
- const elementPrefix = "e";
8
- const passiveElementPrefix = "ep";
9
- const capturePrefix = "capture:";
10
- const readyStateChange = "readystatechange";
11
- const QwikEvContainerReady = 0;
12
- const events = /* @__PURE__ */ new Set();
13
- const roots = /* @__PURE__ */ new Set([doc]);
14
- const symbols = /* @__PURE__ */ new Map();
15
- const readyContainers = {};
16
- let observer;
17
- let hasInitialized;
18
- let queuedTasks;
19
- const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
20
- const querySelectorAll = (query) => {
21
- const elements = [];
22
- roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));
23
- return elements;
1
+ //#region packages/qwik/src/qwikloader.ts
2
+ var doc = document;
3
+ var win = window;
4
+ var windowPrefix = "w";
5
+ var passiveWindowPrefix = "wp";
6
+ var documentPrefix = "d";
7
+ var passiveDocumentPrefix = "dp";
8
+ var elementPrefix = "e";
9
+ var passiveElementPrefix = "ep";
10
+ var capturePrefix = "capture:";
11
+ var readyStateChange = "readystatechange";
12
+ var QwikEvContainerReady = 0;
13
+ var events = /* @__PURE__ */ new Set();
14
+ var roots = /* @__PURE__ */ new Set([doc]);
15
+ var symbols = /* @__PURE__ */ new Map();
16
+ var readyContainers = {};
17
+ var observer;
18
+ var hasInitialized;
19
+ var queuedTasks;
20
+ var nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
21
+ var querySelectorAll = (query) => {
22
+ const elements = [];
23
+ roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));
24
+ return elements;
24
25
  };
25
- const addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });
26
- const findShadowRoots = (fragment) => {
27
- addEventOrRoot(fragment);
28
- const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
29
- for (let i = 0; i < shadowRoots.length; i++) {
30
- const parent = shadowRoots[i];
31
- const shadowRoot = parent.shadowRoot;
32
- shadowRoot && findShadowRoots(shadowRoot);
33
- }
26
+ var addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, {
27
+ capture,
28
+ passive
29
+ });
30
+ var findShadowRoots = (fragment) => {
31
+ addEventOrRoot(fragment);
32
+ const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
33
+ for (let i = 0; i < shadowRoots.length; i++) {
34
+ const shadowRoot = shadowRoots[i].shadowRoot;
35
+ shadowRoot && findShadowRoots(shadowRoot);
36
+ }
34
37
  };
35
- const isPromise = (promise) => promise && typeof promise.then === "function";
36
- const runTasks = async (tasks) => {
37
- for (let i = 0; i < tasks.length; i++) {
38
- await tasks[i]();
39
- }
38
+ var isPromise = (promise) => promise && typeof promise.then === "function";
39
+ var runTasks = async (tasks) => {
40
+ for (let i = 0; i < tasks.length; i++) await tasks[i]();
40
41
  };
41
- const queueTasks = (tasks) => {
42
- if (tasks.length) {
43
- const run = () => runTasks(tasks);
44
- queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();
45
- }
42
+ var queueTasks = (tasks) => {
43
+ if (tasks.length) {
44
+ const run = () => runTasks(tasks);
45
+ queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();
46
+ }
46
47
  };
47
- const resolveContainer = (containerEl) => {
48
- if (containerEl._qwikjson_ === void 0) {
49
- const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
50
- let script = parentJSON.lastElementChild;
51
- while (script) {
52
- if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {
53
- containerEl._qwikjson_ = JSON.parse(
54
- script.textContent.replace(/\\x3C(\/?script)/gi, "<$1")
55
- );
56
- break;
57
- }
58
- script = script.previousElementSibling;
59
- }
60
- }
48
+ var resolveContainer = (containerEl) => {
49
+ if (containerEl._qwikjson_ === void 0) {
50
+ let script = (containerEl === doc.documentElement ? doc.body : containerEl).lastElementChild;
51
+ while (script) {
52
+ if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {
53
+ containerEl._qwikjson_ = JSON.parse(script.textContent.replace(/\\x3C(\/?script)/gi, "<$1"));
54
+ break;
55
+ }
56
+ script = script.previousElementSibling;
57
+ }
58
+ }
61
59
  };
62
- const markContainerReady = (hash) => {
63
- readyContainers[hash] = 1;
64
- emitEvent(readyStateChange);
60
+ var markContainerReady = (hash) => {
61
+ readyContainers[hash] = 1;
62
+ emitEvent(readyStateChange);
65
63
  };
66
- const waitForContainerReady = (container) => {
67
- const hash = container.getAttribute("q:instance");
68
- return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !readyContainers[hash] && new Promise((resolve) => {
69
- const ready = () => {
70
- if (doc.readyState !== "loading" || readyContainers[hash]) {
71
- resolve();
72
- }
73
- };
74
- addEventListener(doc, readyStateChange, ready);
75
- });
64
+ var waitForContainerReady = (container) => {
65
+ const hash = container.getAttribute("q:instance");
66
+ return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !readyContainers[hash] && new Promise((resolve) => {
67
+ const ready = () => {
68
+ if (doc.readyState !== "loading" || readyContainers[hash]) resolve();
69
+ };
70
+ addEventListener(doc, readyStateChange, ready);
71
+ });
76
72
  };
77
- const createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });
78
- const emitEvent = (eventName, detail) => {
79
- doc.dispatchEvent(createEvent(eventName, detail));
73
+ var createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });
74
+ var emitEvent = (eventName, detail) => {
75
+ doc.dispatchEvent(createEvent(eventName, detail));
80
76
  };
81
- const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
82
- const kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
83
- const parseKebabEvent = (event) => {
84
- const separatorIndex = event.indexOf(":");
85
- const scope = event.slice(0, separatorIndex);
86
- return {
87
- scope,
88
- eventName: kebabToCamel(event.slice(separatorIndex + 1))
89
- };
77
+ var camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
78
+ var kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
79
+ var parseKebabEvent = (event) => {
80
+ const separatorIndex = event.indexOf(":");
81
+ return {
82
+ scope: event.slice(0, separatorIndex),
83
+ eventName: kebabToCamel(event.slice(separatorIndex + 1))
84
+ };
90
85
  };
91
- const isPassiveScope = (scope) => scope.length === 2;
92
- const getRootScope = (scope) => scope.charAt(0);
93
- const isElementNode = (node) => !!node && node.nodeType === 1;
94
- const isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));
95
- const resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {
96
- const eventData = {
97
- qBase,
98
- symbol,
99
- element,
100
- reqTime
101
- };
102
- if (!chunk) {
103
- const handler2 = (doc["qFuncs_" + container.getAttribute("q:instance")] || [])[+symbol];
104
- if (!handler2 && reportSyncError) {
105
- const error = new Error("sym:" + symbol);
106
- emitEvent("qerror", {
107
- importError: "sync",
108
- error,
109
- ...eventData
110
- });
111
- console.error(error);
112
- }
113
- return handler2;
114
- }
115
- const key = `${symbol}|${qBase}|${chunk}`;
116
- const handler = symbols.get(key);
117
- if (handler) {
118
- return handler;
119
- }
120
- const href = new URL(chunk, base).href;
121
- const module = import(
122
- /* @vite-ignore */
123
- href
124
- );
125
- resolveContainer(container);
126
- return module.then(
127
- (module2) => {
128
- const handler2 = module2[symbol];
129
- if (!handler2) {
130
- const error = new Error(`${symbol} not in ${href}`);
131
- emitEvent("qerror", {
132
- importError: "no-symbol",
133
- error,
134
- ...eventData
135
- });
136
- console.error(error);
137
- } else {
138
- symbols.set(key, handler2);
139
- emitEvent("qsymbol", eventData);
140
- }
141
- return handler2;
142
- },
143
- (error) => {
144
- emitEvent("qerror", {
145
- importError: "async",
146
- error,
147
- ...eventData
148
- });
149
- console.error(error);
150
- return void 0;
151
- }
152
- );
86
+ var isPassiveScope = (scope) => scope.length === 2;
87
+ var getRootScope = (scope) => scope.charAt(0);
88
+ var isElementNode = (node) => !!node && node.nodeType === 1;
89
+ var isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));
90
+ var resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {
91
+ const eventData = {
92
+ qBase,
93
+ symbol,
94
+ element,
95
+ reqTime
96
+ };
97
+ if (!chunk) {
98
+ const handler = (doc["qFuncs_" + container.getAttribute("q:instance")] || [])[+symbol];
99
+ if (!handler && reportSyncError) {
100
+ const error = /* @__PURE__ */ new Error("sym:" + symbol);
101
+ emitEvent("qerror", {
102
+ importError: "sync",
103
+ error,
104
+ ...eventData
105
+ });
106
+ console.error(error);
107
+ }
108
+ return handler;
109
+ }
110
+ const key = `${symbol}|${qBase}|${chunk}`;
111
+ const handler = symbols.get(key);
112
+ if (handler) return handler;
113
+ const href = new URL(chunk, base).href;
114
+ const module = import(
115
+ /* @vite-ignore */
116
+ href
117
+ );
118
+ resolveContainer(container);
119
+ return module.then((module) => {
120
+ const handler = module[symbol];
121
+ if (!handler) {
122
+ const error = /* @__PURE__ */ new Error(`${symbol} not in ${href}`);
123
+ emitEvent("qerror", {
124
+ importError: "no-symbol",
125
+ error,
126
+ ...eventData
127
+ });
128
+ console.error(error);
129
+ } else {
130
+ symbols.set(key, handler);
131
+ emitEvent("qsymbol", eventData);
132
+ }
133
+ return handler;
134
+ }, (error) => {
135
+ emitEvent("qerror", {
136
+ importError: "async",
137
+ error,
138
+ ...eventData
139
+ });
140
+ console.error(error);
141
+ });
153
142
  };
154
- const dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {
155
- let defer = false;
156
- if (kebabName) {
157
- if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {
158
- ev.preventDefault();
159
- }
160
- if (element.hasAttribute("stoppropagation:" + kebabName)) {
161
- ev.stopPropagation();
162
- }
163
- }
164
- const handlers = element._qDispatch?.[scopedKebabName];
165
- if (handlers) {
166
- if (typeof handlers === "function") {
167
- const run = () => handlers(ev, element);
168
- if (defer) {
169
- tasks.push(async () => {
170
- const result = run();
171
- if (isPromise(result)) {
172
- await result;
173
- }
174
- });
175
- } else {
176
- const result = run();
177
- if (isPromise(result)) {
178
- defer = true;
179
- tasks.push(() => result);
180
- }
181
- }
182
- } else if (handlers.length) {
183
- for (let i = 0; i < handlers.length; i++) {
184
- const handler = handlers[i];
185
- if (handler) {
186
- const run = () => handler(ev, element);
187
- if (defer) {
188
- tasks.push(async () => {
189
- const result = run();
190
- if (isPromise(result)) {
191
- await result;
192
- }
193
- });
194
- } else {
195
- const result = run();
196
- if (isPromise(result)) {
197
- defer = true;
198
- tasks.push(() => result);
199
- }
200
- }
201
- }
202
- }
203
- }
204
- return;
205
- }
206
- const attrValue = element.getAttribute("q-" + scopedKebabName);
207
- if (attrValue) {
208
- const container = element.closest(
209
- "[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"
210
- );
211
- const qBase = container.getAttribute("q:base");
212
- const base = new URL(qBase, doc.baseURI);
213
- const qrls = attrValue.split("|");
214
- const waitForReady = waitForContainerReady(container);
215
- for (let i = 0; i < qrls.length; i++) {
216
- const qrl = qrls[i];
217
- const reqTime = performance.now();
218
- const [chunk, symbol, capturedIds] = qrl.split("#");
219
- const run = (handler2) => {
220
- if (handler2 && element.isConnected) {
221
- const onError = (error) => {
222
- emitEvent("qerror", {
223
- error,
224
- qBase,
225
- symbol,
226
- element,
227
- reqTime
228
- });
229
- };
230
- try {
231
- const result = handler2.call(capturedIds, ev, element);
232
- if (isPromise(result)) {
233
- return result.catch(onError);
234
- }
235
- } catch (error) {
236
- return onError(error);
237
- }
238
- }
239
- };
240
- const resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);
241
- const handler = waitForReady ? void 0 : resolve();
242
- if (waitForReady) {
243
- defer = true;
244
- tasks.push(async () => {
245
- await waitForReady;
246
- await run(await resolve(false) || await resolve());
247
- });
248
- } else if (isPromise(handler)) {
249
- defer = true;
250
- tasks.push(() => handler.then(run));
251
- } else if (defer) {
252
- defer = true;
253
- tasks.push(async () => {
254
- await run(handler || await resolve());
255
- });
256
- } else {
257
- const result = run(handler);
258
- if (isPromise(result)) {
259
- defer = true;
260
- tasks.push(() => result);
261
- }
262
- }
263
- }
264
- }
143
+ /**
144
+ * Dispatch an event by invoking QRL handlers. If there are multiple handlers, they are awaited in
145
+ * order.
146
+ */
147
+ var dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {
148
+ let defer = false;
149
+ if (kebabName) {
150
+ if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) ev.preventDefault();
151
+ if (element.hasAttribute("stoppropagation:" + kebabName)) ev.stopPropagation();
152
+ }
153
+ const handlers = element._qDispatch?.[scopedKebabName];
154
+ if (handlers) {
155
+ if (typeof handlers === "function") {
156
+ const run = () => handlers(ev, element);
157
+ if (defer) tasks.push(async () => {
158
+ const result = run();
159
+ if (isPromise(result)) await result;
160
+ });
161
+ else {
162
+ const result = run();
163
+ if (isPromise(result)) {
164
+ defer = true;
165
+ tasks.push(() => result);
166
+ }
167
+ }
168
+ } else if (handlers.length) for (let i = 0; i < handlers.length; i++) {
169
+ const handler = handlers[i];
170
+ if (handler) {
171
+ const run = () => handler(ev, element);
172
+ if (defer) tasks.push(async () => {
173
+ const result = run();
174
+ if (isPromise(result)) await result;
175
+ });
176
+ else {
177
+ const result = run();
178
+ if (isPromise(result)) {
179
+ defer = true;
180
+ tasks.push(() => result);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return;
186
+ }
187
+ const attrValue = element.getAttribute("q-" + scopedKebabName);
188
+ if (attrValue) {
189
+ const container = element.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])");
190
+ const qBase = container.getAttribute("q:base");
191
+ const base = new URL(qBase, doc.baseURI);
192
+ const qrls = attrValue.split("|");
193
+ const waitForReady = waitForContainerReady(container);
194
+ for (let i = 0; i < qrls.length; i++) {
195
+ const qrl = qrls[i];
196
+ const reqTime = performance.now();
197
+ const [chunk, symbol, capturedIds] = qrl.split("#");
198
+ const run = (handler) => {
199
+ if (handler && element.isConnected) {
200
+ const onError = (error) => {
201
+ emitEvent("qerror", {
202
+ error,
203
+ qBase,
204
+ symbol,
205
+ element,
206
+ reqTime
207
+ });
208
+ };
209
+ try {
210
+ const result = handler.call(capturedIds, ev, element);
211
+ if (isPromise(result)) return result.catch(onError);
212
+ } catch (error) {
213
+ return onError(error);
214
+ }
215
+ }
216
+ };
217
+ const resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);
218
+ const handler = waitForReady ? void 0 : resolve();
219
+ if (waitForReady) {
220
+ defer = true;
221
+ tasks.push(async () => {
222
+ await waitForReady;
223
+ await run(await resolve(false) || await resolve());
224
+ });
225
+ } else if (isPromise(handler)) {
226
+ defer = true;
227
+ tasks.push(() => handler.then(run));
228
+ } else if (defer) {
229
+ defer = true;
230
+ tasks.push(async () => {
231
+ await run(handler || await resolve());
232
+ });
233
+ } else {
234
+ const result = run(handler);
235
+ if (isPromise(result)) {
236
+ defer = true;
237
+ tasks.push(() => result);
238
+ }
239
+ }
240
+ }
241
+ }
265
242
  };
266
- const processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
267
- const kebabName = camelToKebab(ev.type);
268
- const scopedKebabName = scope + ":" + kebabName;
269
- const captureAttribute = capturePrefix + kebabName;
270
- const elements = [];
271
- const captureHandlers = [];
272
- const tasks = [];
273
- let current = ev.target;
274
- while (current) {
275
- if (isElementNode(current)) {
276
- elements.push(current);
277
- captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));
278
- current = current.parentElement;
279
- } else {
280
- current = current.parentElement;
281
- }
282
- }
283
- for (let i = elements.length - 1; i >= 0; i--) {
284
- if (captureHandlers[i]) {
285
- dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
286
- if (ev.cancelBubble) {
287
- queueTasks(tasks);
288
- return;
289
- }
290
- }
291
- }
292
- for (let i = 0; i < elements.length; i++) {
293
- if (!captureHandlers[i]) {
294
- dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
295
- if (!ev.bubbles || ev.cancelBubble) {
296
- queueTasks(tasks);
297
- return;
298
- }
299
- }
300
- }
301
- queueTasks(tasks);
243
+ /**
244
+ * Event handler responsible for processing element events.
245
+ *
246
+ * If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding
247
+ * `(${event.type})`. If found the event's URL is parsed and `import()`ed.
248
+ *
249
+ * @param ev - Browser event.
250
+ */
251
+ var processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
252
+ const kebabName = camelToKebab(ev.type);
253
+ const scopedKebabName = scope + ":" + kebabName;
254
+ const captureAttribute = capturePrefix + kebabName;
255
+ const elements = [];
256
+ const captureHandlers = [];
257
+ const tasks = [];
258
+ let current = ev.target;
259
+ while (current) if (isElementNode(current)) {
260
+ elements.push(current);
261
+ captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));
262
+ current = current.parentElement;
263
+ } else current = current.parentElement;
264
+ for (let i = elements.length - 1; i >= 0; i--) if (captureHandlers[i]) {
265
+ dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
266
+ if (ev.cancelBubble) {
267
+ queueTasks(tasks);
268
+ return;
269
+ }
270
+ }
271
+ for (let i = 0; i < elements.length; i++) if (!captureHandlers[i]) {
272
+ dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
273
+ if (!ev.bubbles || ev.cancelBubble) {
274
+ queueTasks(tasks);
275
+ return;
276
+ }
277
+ }
278
+ queueTasks(tasks);
302
279
  };
303
- const processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);
304
- const broadcast = (scope, ev, allowPreventDefault = true) => {
305
- const kebabName = camelToKebab(ev.type);
306
- const scopedKebabName = scope + ":" + kebabName;
307
- const elements = querySelectorAll("[q-" + CSS.escape(scopedKebabName) + "]");
308
- const tasks = [];
309
- for (let i = 0; i < elements.length; i++) {
310
- const el = elements[i];
311
- dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
312
- }
313
- queueTasks(tasks);
280
+ var processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);
281
+ var broadcast = (scope, ev, allowPreventDefault = true) => {
282
+ const kebabName = camelToKebab(ev.type);
283
+ const scopedKebabName = scope + ":" + kebabName;
284
+ const elements = querySelectorAll("[q-" + CSS.escape(scopedKebabName) + "]");
285
+ const tasks = [];
286
+ for (let i = 0; i < elements.length; i++) {
287
+ const el = elements[i];
288
+ dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
289
+ }
290
+ queueTasks(tasks);
314
291
  };
315
- const processDocumentEvent = (ev) => {
316
- broadcast(documentPrefix, ev);
292
+ /**
293
+ * Event handler responsible for processing browser events.
294
+ *
295
+ * If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding
296
+ * `(${event.type})`. If found the event's URL is parsed and `import()`ed.
297
+ *
298
+ * @param ev - Browser event.
299
+ */
300
+ var processDocumentEvent = (ev) => {
301
+ broadcast(documentPrefix, ev);
317
302
  };
318
- const processPassiveDocumentEvent = (ev) => {
319
- broadcast(passiveDocumentPrefix, ev, false);
303
+ var processPassiveDocumentEvent = (ev) => {
304
+ broadcast(passiveDocumentPrefix, ev, false);
320
305
  };
321
- const processWindowEvent = (ev) => {
322
- broadcast(windowPrefix, ev);
306
+ var processWindowEvent = (ev) => {
307
+ broadcast(windowPrefix, ev);
323
308
  };
324
- const processPassiveWindowEvent = (ev) => {
325
- broadcast(passiveWindowPrefix, ev, false);
309
+ var processPassiveWindowEvent = (ev) => {
310
+ broadcast(passiveWindowPrefix, ev, false);
326
311
  };
327
- const processReadyStateChange = () => {
328
- const readyState = doc.readyState;
329
- if (readyState == "interactive" || readyState == "complete") {
330
- hasInitialized = 1;
331
- roots.forEach(findShadowRoots);
332
- if (events.has("d:qinit")) {
333
- events.delete("d:qinit");
334
- const ev = createEvent("qinit");
335
- const elements = querySelectorAll("[q-d\\:qinit]");
336
- const tasks = [];
337
- for (let i = 0; i < elements.length; i++) {
338
- const el = elements[i];
339
- dispatch(el, ev, "d:qinit", tasks);
340
- el.removeAttribute("q-d:qinit");
341
- }
342
- queueTasks(tasks);
343
- }
344
- if (events.has("d:qidle")) {
345
- events.delete("d:qidle");
346
- const riC = win.requestIdleCallback ?? win.setTimeout;
347
- riC.bind(win)(() => {
348
- const ev = createEvent("qidle");
349
- const elements = querySelectorAll("[q-d\\:qidle]");
350
- const tasks = [];
351
- for (let i = 0; i < elements.length; i++) {
352
- const el = elements[i];
353
- dispatch(el, ev, "d:qidle", tasks);
354
- el.removeAttribute("q-d:qidle");
355
- }
356
- queueTasks(tasks);
357
- });
358
- }
359
- if (events.has("e:qvisible")) {
360
- observer || (observer = new IntersectionObserver((entries) => {
361
- const tasks = [];
362
- for (let i = 0; i < entries.length; i++) {
363
- const entry = entries[i];
364
- if (entry.isIntersecting) {
365
- observer.unobserve(entry.target);
366
- dispatch(
367
- entry.target,
368
- createEvent("qvisible", entry),
369
- "e:qvisible",
370
- tasks
371
- );
372
- }
373
- }
374
- queueTasks(tasks);
375
- }));
376
- const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
377
- for (let i = 0; i < elements.length; i++) {
378
- const el = elements[i];
379
- observer.observe(el);
380
- el.setAttribute("q:observed", "true");
381
- }
382
- }
383
- }
312
+ /**
313
+ * Called when the document is ready and whenever a container is added, so make this idempotent. For
314
+ * qidle and qinit we remove the attributes immediately, and for qvisible we add an attribute
315
+ */
316
+ var processReadyStateChange = () => {
317
+ const readyState = doc.readyState;
318
+ if (readyState == "interactive" || readyState == "complete") {
319
+ hasInitialized = 1;
320
+ roots.forEach(findShadowRoots);
321
+ if (events.has("d:qinit")) {
322
+ events.delete("d:qinit");
323
+ const ev = createEvent("qinit");
324
+ const elements = querySelectorAll("[q-d\\:qinit]");
325
+ const tasks = [];
326
+ for (let i = 0; i < elements.length; i++) {
327
+ const el = elements[i];
328
+ dispatch(el, ev, "d:qinit", tasks);
329
+ el.removeAttribute("q-d:qinit");
330
+ }
331
+ queueTasks(tasks);
332
+ }
333
+ if (events.has("d:qidle")) {
334
+ events.delete("d:qidle");
335
+ (win.requestIdleCallback ?? win.setTimeout).bind(win)(() => {
336
+ const ev = createEvent("qidle");
337
+ const elements = querySelectorAll("[q-d\\:qidle]");
338
+ const tasks = [];
339
+ for (let i = 0; i < elements.length; i++) {
340
+ const el = elements[i];
341
+ dispatch(el, ev, "d:qidle", tasks);
342
+ el.removeAttribute("q-d:qidle");
343
+ }
344
+ queueTasks(tasks);
345
+ });
346
+ }
347
+ if (events.has("e:qvisible")) {
348
+ observer || (observer = new IntersectionObserver((entries) => {
349
+ const tasks = [];
350
+ for (let i = 0; i < entries.length; i++) {
351
+ const entry = entries[i];
352
+ if (entry.isIntersecting) {
353
+ observer.unobserve(entry.target);
354
+ dispatch(entry.target, createEvent("qvisible", entry), "e:qvisible", tasks);
355
+ }
356
+ }
357
+ queueTasks(tasks);
358
+ }));
359
+ const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
360
+ for (let i = 0; i < elements.length; i++) {
361
+ const el = elements[i];
362
+ observer.observe(el);
363
+ el.setAttribute("q:observed", "true");
364
+ }
365
+ }
366
+ }
384
367
  };
385
- const addEventOrRoot = (...eventNames) => {
386
- for (let i = 0; i < eventNames.length; i++) {
387
- const eventNameOrRoot = eventNames[i];
388
- if (eventNameOrRoot === QwikEvContainerReady) {
389
- markContainerReady(eventNames[++i]);
390
- } else if (typeof eventNameOrRoot === "string") {
391
- if (!events.has(eventNameOrRoot)) {
392
- events.add(eventNameOrRoot);
393
- const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
394
- const passive = isPassiveScope(scope);
395
- const rootScope = getRootScope(scope);
396
- if (rootScope === windowPrefix) {
397
- addEventListener(
398
- win,
399
- eventName,
400
- passive ? processPassiveWindowEvent : processWindowEvent,
401
- true,
402
- passive
403
- );
404
- } else {
405
- roots.forEach(
406
- (root) => addEventListener(
407
- root,
408
- eventName,
409
- rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
410
- true,
411
- passive
412
- )
413
- );
414
- }
415
- if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) {
416
- processReadyStateChange();
417
- }
418
- }
419
- } else {
420
- if (!roots.has(eventNameOrRoot)) {
421
- events.forEach((kebabEventName) => {
422
- const { scope, eventName } = parseKebabEvent(kebabEventName);
423
- const passive = isPassiveScope(scope);
424
- const rootScope = getRootScope(scope);
425
- if (rootScope !== windowPrefix) {
426
- addEventListener(
427
- eventNameOrRoot,
428
- eventName,
429
- rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
430
- true,
431
- passive
432
- );
433
- }
434
- });
435
- roots.add(eventNameOrRoot);
436
- }
437
- }
438
- }
368
+ var addEventOrRoot = (...eventNames) => {
369
+ for (let i = 0; i < eventNames.length; i++) {
370
+ const eventNameOrRoot = eventNames[i];
371
+ if (eventNameOrRoot === QwikEvContainerReady) markContainerReady(eventNames[++i]);
372
+ else if (typeof eventNameOrRoot === "string") {
373
+ if (!events.has(eventNameOrRoot)) {
374
+ events.add(eventNameOrRoot);
375
+ const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
376
+ const passive = isPassiveScope(scope);
377
+ const rootScope = getRootScope(scope);
378
+ if (rootScope === windowPrefix) addEventListener(win, eventName, passive ? processPassiveWindowEvent : processWindowEvent, true, passive);
379
+ else roots.forEach((root) => addEventListener(root, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive));
380
+ if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) processReadyStateChange();
381
+ }
382
+ } else if (!roots.has(eventNameOrRoot)) {
383
+ events.forEach((kebabEventName) => {
384
+ const { scope, eventName } = parseKebabEvent(kebabEventName);
385
+ const passive = isPassiveScope(scope);
386
+ const rootScope = getRootScope(scope);
387
+ if (rootScope !== windowPrefix) addEventListener(eventNameOrRoot, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive);
388
+ });
389
+ roots.add(eventNameOrRoot);
390
+ }
391
+ }
439
392
  };
440
- const _qwikEv = win._qwikEv;
393
+ var _qwikEv = win._qwikEv;
441
394
  if (!_qwikEv?.roots) {
442
- if (Array.isArray(_qwikEv)) {
443
- addEventOrRoot(..._qwikEv);
444
- } else {
445
- addEventOrRoot("e:click", "e:input");
446
- }
447
- win._qwikEv = {
448
- events,
449
- roots,
450
- push: addEventOrRoot
451
- };
452
- addEventListener(doc, readyStateChange, processReadyStateChange);
453
- processReadyStateChange();
395
+ if (Array.isArray(_qwikEv)) addEventOrRoot(..._qwikEv);
396
+ else addEventOrRoot("e:click", "e:input");
397
+ win._qwikEv = {
398
+ events,
399
+ roots,
400
+ push: addEventOrRoot
401
+ };
402
+ addEventListener(doc, readyStateChange, processReadyStateChange);
403
+ processReadyStateChange();
454
404
  }
405
+ //#endregion