@qwik.dev/core 2.0.0-beta.4 → 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 (151) hide show
  1. package/dist/backpatch/index.d.ts +2 -0
  2. package/dist/backpatch/index.mjs +5 -0
  3. package/dist/backpatch/package.json +8 -0
  4. package/dist/backpatch-executor.debug.js +59 -0
  5. package/dist/backpatch-executor.js +1 -0
  6. package/dist/build/package.json +1 -1
  7. package/dist/cli.mjs +12974 -0
  8. package/dist/core-internal.d.ts +1615 -810
  9. package/dist/core.min.mjs +9 -1
  10. package/dist/core.mjs +14792 -9192
  11. package/dist/core.mjs.map +1 -1
  12. package/dist/core.prod.mjs +10482 -5382
  13. package/dist/insights/index.qwik.mjs +82 -71
  14. package/dist/insights/vite/index.mjs +79 -81
  15. package/dist/loader/index.mjs +2 -2
  16. package/dist/loader/package.json +1 -1
  17. package/dist/optimizer.d.ts +77 -288
  18. package/dist/optimizer.mjs +2966 -4088
  19. package/dist/out-of-order-executor.debug.js +140 -0
  20. package/dist/out-of-order-executor.js +1 -0
  21. package/dist/preloader.mjs +172 -192
  22. package/dist/qwikloader.debug.js +403 -244
  23. package/dist/qwikloader.js +1 -1
  24. package/dist/server-modules.d.ts +1 -0
  25. package/dist/server.d.ts +54 -249
  26. package/dist/server.mjs +2332 -1407
  27. package/dist/server.prod.mjs +3844 -0
  28. package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/{vite.config.mts → vite.config.ts} +3 -3
  29. package/dist/starters/adapters/aws-lambda/package.json +3 -2
  30. package/dist/starters/adapters/aws-lambda/src/entry_aws-lambda.tsx +2 -6
  31. package/dist/starters/adapters/azure-swa/adapters/azure-swa/{vite.config.mts → vite.config.ts} +3 -3
  32. package/dist/starters/adapters/azure-swa/package.json +3 -2
  33. package/dist/starters/adapters/azure-swa/src/entry.azure-swa.tsx +2 -3
  34. package/dist/starters/adapters/bun/adapters/bun/{vite.config.mts → vite.config.ts} +4 -4
  35. package/dist/starters/adapters/bun/package.json +3 -2
  36. package/dist/starters/adapters/bun/src/entry.bun.ts +37 -10
  37. package/dist/starters/adapters/cloud-run/adapters/cloud-run/{vite.config.mts → vite.config.ts} +3 -3
  38. package/dist/starters/adapters/cloud-run/package.json +3 -2
  39. package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +23 -7
  40. package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/{vite.config.mts → vite.config.ts} +3 -3
  41. package/dist/starters/adapters/cloudflare-pages/package.json +3 -2
  42. package/dist/starters/adapters/cloudflare-pages/src/entry.cloudflare-pages.tsx +2 -3
  43. package/dist/starters/adapters/cloudflare-workers/README.md +52 -0
  44. package/dist/starters/adapters/cloudflare-workers/adapters/cloudflare-workers/vite.config.ts +15 -0
  45. package/dist/starters/adapters/cloudflare-workers/gitignore +3 -0
  46. package/dist/starters/adapters/cloudflare-workers/package.json +31 -0
  47. package/dist/starters/adapters/cloudflare-workers/public/.assetsignore +4 -0
  48. package/dist/starters/adapters/cloudflare-workers/public/_headers +11 -0
  49. package/dist/starters/adapters/cloudflare-workers/public/_redirects +1 -0
  50. package/dist/starters/adapters/cloudflare-workers/src/entry.cloudflare-pages.tsx +23 -0
  51. package/dist/starters/adapters/cloudflare-workers/worker-configuration.d.ts +5 -0
  52. package/dist/starters/adapters/cloudflare-workers/wrangler.jsonc +41 -0
  53. package/dist/starters/adapters/deno/adapters/deno/{vite.config.mts → vite.config.ts} +3 -3
  54. package/dist/starters/adapters/deno/package.json +3 -2
  55. package/dist/starters/adapters/deno/src/entry.deno.ts +43 -10
  56. package/dist/starters/adapters/express/adapters/express/{vite.config.mts → vite.config.ts} +3 -3
  57. package/dist/starters/adapters/express/package.json +4 -3
  58. package/dist/starters/adapters/express/src/entry.express.tsx +22 -7
  59. package/dist/starters/adapters/fastify/adapters/fastify/{vite.config.mts → vite.config.ts} +3 -3
  60. package/dist/starters/adapters/fastify/package.json +5 -4
  61. package/dist/starters/adapters/fastify/src/entry.fastify.tsx +21 -1
  62. package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +11 -4
  63. package/dist/starters/adapters/firebase/adapters/firebase/{vite.config.mts → vite.config.ts} +3 -3
  64. package/dist/starters/adapters/firebase/package.json +3 -2
  65. package/dist/starters/adapters/firebase/src/entry-firebase.tsx +2 -3
  66. package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/{vite.config.mts → vite.config.ts} +3 -3
  67. package/dist/starters/adapters/netlify-edge/package.json +5 -4
  68. package/dist/starters/adapters/netlify-edge/src/entry.netlify-edge.tsx +2 -3
  69. package/dist/starters/adapters/node-server/adapters/node-server/{vite.config.mts → vite.config.ts} +3 -3
  70. package/dist/starters/adapters/node-server/package.json +3 -2
  71. package/dist/starters/adapters/node-server/src/entry.node-server.tsx +22 -6
  72. package/dist/starters/adapters/{static/adapters/static/vite.config.mts → ssg/adapters/ssg/vite.config.ts} +4 -4
  73. package/dist/starters/adapters/ssg/package.json +20 -0
  74. package/dist/starters/adapters/vercel-edge/README.md +2 -2
  75. package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/{vite.config.mts → vite.config.ts} +3 -3
  76. package/dist/starters/adapters/vercel-edge/package.json +3 -2
  77. package/dist/starters/adapters/vercel-edge/src/entry.vercel-edge.tsx +2 -3
  78. package/dist/starters/adapters/vercel-edge/vercel.json +1 -1
  79. package/dist/starters/features/auth/package.json +1 -1
  80. package/dist/starters/features/compiled-i18n/package.json +37 -0
  81. package/dist/starters/features/compiled-i18n/src/components/locale-selector/locale-selector.tsx +30 -0
  82. package/dist/starters/features/compiled-i18n/src/entry.ssr.tsx +31 -0
  83. package/dist/starters/features/compiled-i18n/src/routes/plugin@compiled-i18n.ts +28 -0
  84. package/dist/starters/features/csr/index.html +27 -0
  85. package/dist/starters/features/csr/package.json +29 -0
  86. package/dist/starters/features/csr/src/root.tsx +15 -0
  87. package/dist/starters/features/csr/vite.config.ts +13 -0
  88. package/dist/starters/features/cypress/src/actions/example.action.ts +5 -0
  89. package/dist/starters/features/cypress/src/components/example/example.cy.tsx +50 -8
  90. package/dist/starters/features/cypress/src/components/example/example.tsx +13 -3
  91. package/dist/starters/features/cypress/src/loaders/example.loader.ts +5 -0
  92. package/dist/starters/features/drizzle/package.json +1 -1
  93. package/dist/starters/features/pandacss/package.json +1 -1
  94. package/dist/starters/features/postcss/postcss.config.js +1 -1
  95. package/dist/starters/features/storybook/.storybook/tsconfig.json +0 -1
  96. package/dist/starters/features/styled-vanilla-extract/package.json +2 -1
  97. package/dist/starters/features/tailwind/package.json +2 -2
  98. package/dist/starters/features/tailwind/prettier.config.js +10 -0
  99. package/dist/starters/features/tailwind-v3/package.json +1 -1
  100. package/dist/starters/features/tailwind-v3/prettier.config.js +10 -0
  101. package/dist/starters/features/vitest/package.json +1 -1
  102. package/dist/testing/index.d.ts +1000 -7
  103. package/dist/testing/index.mjs +16487 -11656
  104. package/dist/testing/package.json +1 -1
  105. package/dist/worker/index.d.mts +21 -0
  106. package/dist/worker/index.mjs +251 -0
  107. package/dist/worker/package.json +9 -0
  108. package/dist/worker/worker.js +13 -0
  109. package/dist/worker/worker.node.js +15 -0
  110. package/dist/worker/worker.shared.js +63 -0
  111. package/handlers.mjs +21 -1
  112. package/package.json +40 -56
  113. package/public.d.ts +14 -2
  114. package/{qwik-cli.cjs → qwik-cli.mjs} +1 -1
  115. package/server.d.ts +2 -0
  116. package/worker.d.ts +2 -0
  117. package/bindings/qwik.darwin-arm64.node +0 -0
  118. package/bindings/qwik.darwin-x64.node +0 -0
  119. package/bindings/qwik.linux-x64-gnu.node +0 -0
  120. package/bindings/qwik.wasm.cjs +0 -471
  121. package/bindings/qwik.wasm.mjs +0 -464
  122. package/bindings/qwik.win32-x64-msvc.node +0 -0
  123. package/bindings/qwik_wasm_bg.wasm +0 -0
  124. package/dist/build/index.cjs +0 -35
  125. package/dist/build/index.cjs.map +0 -7
  126. package/dist/build/index.dev.cjs +0 -37
  127. package/dist/build/index.dev.cjs.map +0 -7
  128. package/dist/build/index.prod.cjs +0 -37
  129. package/dist/build/index.prod.cjs.map +0 -7
  130. package/dist/cli.cjs +0 -5545
  131. package/dist/core.cjs +0 -11870
  132. package/dist/core.cjs.map +0 -1
  133. package/dist/core.prod.cjs +0 -5723
  134. package/dist/insights/index.qwik.cjs +0 -1
  135. package/dist/insights/vite/index.cjs +0 -1
  136. package/dist/loader/index.cjs +0 -4
  137. package/dist/optimizer.cjs +0 -4020
  138. package/dist/preloader.cjs +0 -269
  139. package/dist/server.cjs +0 -3040
  140. package/dist/starters/adapters/static/package.json +0 -19
  141. package/dist/starters/features/localize/package.json +0 -37
  142. package/dist/starters/features/localize/src/entry.ssr.tsx +0 -30
  143. package/dist/starters/features/localize/src/locales/message.en.json +0 -8
  144. package/dist/starters/features/localize/src/locales/message.it.json +0 -8
  145. package/dist/starters/features/localize/src/routes/[locale]/i18n-utils.ts +0 -94
  146. package/dist/starters/features/localize/src/routes/[locale]/index.tsx +0 -52
  147. package/dist/starters/features/localize/src/routes/[locale]/layout.tsx +0 -12
  148. package/dist/starters/features/playwright/playwright-report/index.html +0 -22026
  149. package/dist/starters/features/tailwind/.prettierrc.js +0 -3
  150. package/dist/testing/index.cjs +0 -33388
  151. /package/dist/starters/adapters/{static → ssg}/README.md +0 -0
@@ -1,246 +1,405 @@
1
- const doc = document;
2
- const win = window;
3
- const events = /* @__PURE__ */ new Set();
4
- const roots = /* @__PURE__ */ new Set([doc]);
5
- let hasInitialized;
6
- const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
7
- const querySelectorAll = (query) => {
8
- const elements = [];
9
- roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));
10
- return elements;
11
- };
12
- const findShadowRoots = (fragment) => {
13
- processEventOrNode(fragment);
14
- nativeQuerySelectorAll(fragment, "[q\\:shadowroot]").forEach((parent) => {
15
- const shadowRoot = parent.shadowRoot;
16
- shadowRoot && findShadowRoots(shadowRoot);
17
- });
18
- };
19
- const isPromise = (promise) => promise && typeof promise.then === "function";
20
- let doNotClean = true;
21
- const broadcast = (infix, ev, type = ev.type) => {
22
- let found = doNotClean;
23
- querySelectorAll("[on" + infix + "\\:" + type + "]").forEach((el) => {
24
- found = true;
25
- dispatch(el, infix, ev, type);
26
- });
27
- if (!found) {
28
- window[infix.slice(1)].removeEventListener(
29
- type,
30
- infix === "-window" ? processWindowEvent : processDocumentEvent
31
- );
32
- }
33
- };
34
- const resolveContainer = (containerEl) => {
35
- if (containerEl._qwikjson_ === void 0) {
36
- const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
37
- let script = parentJSON.lastElementChild;
38
- while (script) {
39
- if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {
40
- containerEl._qwikjson_ = JSON.parse(
41
- script.textContent.replace(/\\x3C(\/?script)/gi, "<$1")
42
- );
43
- break;
44
- }
45
- script = script.previousElementSibling;
46
- }
47
- }
48
- };
49
- const createEvent = (eventName, detail) => new CustomEvent(eventName, {
50
- detail
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;
25
+ };
26
+ var addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, {
27
+ capture,
28
+ passive
51
29
  });
52
- const dispatch = async (element, scope, ev, eventName = ev.type) => {
53
- const attrName = "on" + scope + ":" + eventName;
54
- if (element.hasAttribute("preventdefault:" + eventName)) {
55
- ev.preventDefault();
56
- }
57
- if (element.hasAttribute("stoppropagation:" + eventName)) {
58
- ev.stopPropagation();
59
- }
60
- const ctx = element._qc_;
61
- const relevantListeners = ctx && ctx.li.filter((li) => li[0] === attrName);
62
- if (relevantListeners && relevantListeners.length > 0) {
63
- for (const listener of relevantListeners) {
64
- const results = listener[1].getFn([element, ev], () => element.isConnected)(ev, element);
65
- const cancelBubble = ev.cancelBubble;
66
- if (isPromise(results)) {
67
- await results;
68
- }
69
- if (cancelBubble) {
70
- ev.stopPropagation();
71
- }
72
- }
73
- return;
74
- }
75
- const attrValue = element.getAttribute(attrName);
76
- const qDispatchEvent = element.qDispatchEvent;
77
- if (qDispatchEvent) {
78
- return qDispatchEvent(ev, scope);
79
- }
80
- if (attrValue) {
81
- const container = element.closest(
82
- "[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"
83
- );
84
- const qBase = container.getAttribute("q:base");
85
- const qVersion = container.getAttribute("q:version") || "unknown";
86
- const qManifest = container.getAttribute("q:manifest-hash") || "dev";
87
- const base = new URL(qBase, doc.baseURI);
88
- for (const qrl of attrValue.split("\n")) {
89
- const url = new URL(qrl, base);
90
- const href = url.href;
91
- const symbol = url.hash.replace(/^#?([^?[|]*).*$/, "$1") || "default";
92
- const reqTime = performance.now();
93
- let handler;
94
- let importError;
95
- let error;
96
- const isSync = qrl.startsWith("#");
97
- const eventData = {
98
- qBase,
99
- qManifest,
100
- qVersion,
101
- href,
102
- symbol,
103
- element,
104
- reqTime
105
- };
106
- if (isSync) {
107
- const hash = container.getAttribute("q:instance");
108
- handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
109
- if (!handler) {
110
- importError = "sync";
111
- error = new Error("sym:" + symbol);
112
- }
113
- } else {
114
- emitEvent("qsymbol", eventData);
115
- const uri = url.href.split("#")[0];
116
- try {
117
- const module = import(
118
- /* @vite-ignore */
119
- uri
120
- );
121
- resolveContainer(container);
122
- handler = (await module)[symbol];
123
- if (!handler) {
124
- importError = "no-symbol";
125
- error = new Error(`${symbol} not in ${uri}`);
126
- }
127
- } catch (err) {
128
- importError || (importError = "async");
129
- error = err;
130
- }
131
- }
132
- if (!handler) {
133
- emitEvent("qerror", {
134
- importError,
135
- error,
136
- ...eventData
137
- });
138
- console.error(error);
139
- break;
140
- }
141
- const previousCtx = doc.__q_context__;
142
- if (element.isConnected) {
143
- try {
144
- doc.__q_context__ = [element, ev, url];
145
- const results = handler(ev, element);
146
- if (isPromise(results)) {
147
- await results;
148
- }
149
- } catch (error2) {
150
- emitEvent("qerror", { error: error2, ...eventData });
151
- } finally {
152
- doc.__q_context__ = previousCtx;
153
- }
154
- }
155
- }
156
- }
157
- };
158
- const emitEvent = (eventName, detail) => {
159
- doc.dispatchEvent(createEvent(eventName, detail));
160
- };
161
- const camelToKebab = (str) => str.replace(/([A-Z])/g, (a) => "-" + a.toLowerCase());
162
- const processDocumentEvent = async (ev) => {
163
- let type = camelToKebab(ev.type);
164
- let element = ev.target;
165
- broadcast("-document", ev, type);
166
- while (element && element.getAttribute) {
167
- const results = dispatch(element, "", ev, type);
168
- let cancelBubble = ev.cancelBubble;
169
- if (isPromise(results)) {
170
- await results;
171
- }
172
- cancelBubble || (cancelBubble = cancelBubble || ev.cancelBubble || element.hasAttribute("stoppropagation:" + ev.type));
173
- element = ev.bubbles && cancelBubble !== true ? element.parentElement : null;
174
- }
175
- };
176
- const processWindowEvent = (ev) => {
177
- broadcast("-window", ev, camelToKebab(ev.type));
178
- };
179
- const processReadyStateChange = () => {
180
- var _a;
181
- const readyState = doc.readyState;
182
- if (!hasInitialized && (readyState == "interactive" || readyState == "complete")) {
183
- roots.forEach(findShadowRoots);
184
- hasInitialized = 1;
185
- emitEvent("qinit");
186
- const riC = (_a = win.requestIdleCallback) != null ? _a : win.setTimeout;
187
- riC.bind(win)(() => emitEvent("qidle"));
188
- if (events.has("qvisible")) {
189
- const results = querySelectorAll("[on\\:qvisible]");
190
- const observer = new IntersectionObserver((entries) => {
191
- for (const entry of entries) {
192
- if (entry.isIntersecting) {
193
- observer.unobserve(entry.target);
194
- dispatch(entry.target, "", createEvent("qvisible", entry));
195
- }
196
- }
197
- });
198
- results.forEach((el) => observer.observe(el));
199
- }
200
- }
201
- };
202
- const addEventListener = (el, eventName, handler, capture = false) => {
203
- el.addEventListener(eventName, handler, { capture, passive: false });
204
- };
205
- let cleanTimer;
206
- const processEventOrNode = (...eventNames) => {
207
- doNotClean = true;
208
- clearTimeout(cleanTimer);
209
- cleanTimer = setTimeout(() => doNotClean = false, 2e4);
210
- for (const eventNameOrNode of eventNames) {
211
- if (typeof eventNameOrNode === "string") {
212
- if (!events.has(eventNameOrNode)) {
213
- roots.forEach(
214
- (root) => addEventListener(root, eventNameOrNode, processDocumentEvent, true)
215
- );
216
- addEventListener(win, eventNameOrNode, processWindowEvent, true);
217
- events.add(eventNameOrNode);
218
- }
219
- } else {
220
- if (!roots.has(eventNameOrNode)) {
221
- events.forEach(
222
- (eventName) => addEventListener(eventNameOrNode, eventName, processDocumentEvent, true)
223
- );
224
- roots.add(eventNameOrNode);
225
- }
226
- }
227
- }
228
- };
229
- if (!("__q_context__" in doc)) {
230
- doc.__q_context__ = 0;
231
- const qwikevents = win.qwikevents;
232
- if (qwikevents) {
233
- if (Array.isArray(qwikevents)) {
234
- processEventOrNode(...qwikevents);
235
- } else {
236
- processEventOrNode("click", "input");
237
- }
238
- }
239
- win.qwikevents = {
240
- events,
241
- roots,
242
- push: processEventOrNode
243
- };
244
- addEventListener(doc, "readystatechange", processReadyStateChange);
245
- processReadyStateChange();
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
+ }
37
+ };
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]();
41
+ };
42
+ var queueTasks = (tasks) => {
43
+ if (tasks.length) {
44
+ const run = () => runTasks(tasks);
45
+ queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();
46
+ }
47
+ };
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
+ }
59
+ };
60
+ var markContainerReady = (hash) => {
61
+ readyContainers[hash] = 1;
62
+ emitEvent(readyStateChange);
63
+ };
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
+ });
72
+ };
73
+ var createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });
74
+ var emitEvent = (eventName, detail) => {
75
+ doc.dispatchEvent(createEvent(eventName, detail));
76
+ };
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
+ };
85
+ };
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
+ });
142
+ };
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
+ }
242
+ };
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);
279
+ };
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);
291
+ };
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);
302
+ };
303
+ var processPassiveDocumentEvent = (ev) => {
304
+ broadcast(passiveDocumentPrefix, ev, false);
305
+ };
306
+ var processWindowEvent = (ev) => {
307
+ broadcast(windowPrefix, ev);
308
+ };
309
+ var processPassiveWindowEvent = (ev) => {
310
+ broadcast(passiveWindowPrefix, ev, false);
311
+ };
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
+ }
367
+ };
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
+ }
392
+ };
393
+ var _qwikEv = win._qwikEv;
394
+ if (!_qwikEv?.roots) {
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();
246
404
  }
405
+ //#endregion