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

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 (139) 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 +39 -0
  5. package/dist/backpatch-executor.js +1 -0
  6. package/dist/build/package.json +1 -1
  7. package/dist/cli.mjs +12961 -0
  8. package/dist/core-internal.d.ts +1117 -707
  9. package/dist/core.min.mjs +2 -1
  10. package/dist/core.mjs +12216 -8953
  11. package/dist/core.mjs.map +1 -1
  12. package/dist/core.prod.mjs +8677 -5376
  13. package/dist/insights/index.qwik.mjs +80 -57
  14. package/dist/insights/vite/index.mjs +36 -33
  15. package/dist/loader/index.mjs +2 -2
  16. package/dist/loader/package.json +1 -1
  17. package/dist/optimizer.d.ts +47 -278
  18. package/dist/optimizer.mjs +2427 -3791
  19. package/dist/preloader.mjs +212 -117
  20. package/dist/qwikloader.debug.js +173 -135
  21. package/dist/qwikloader.js +1 -1
  22. package/dist/server.d.ts +51 -203
  23. package/dist/server.mjs +1661 -1157
  24. package/dist/server.prod.mjs +3452 -0
  25. package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/{vite.config.mts → vite.config.ts} +2 -2
  26. package/dist/starters/adapters/aws-lambda/package.json +3 -2
  27. package/dist/starters/adapters/aws-lambda/src/entry_aws-lambda.tsx +2 -6
  28. package/dist/starters/adapters/azure-swa/adapters/azure-swa/{vite.config.mts → vite.config.ts} +2 -2
  29. package/dist/starters/adapters/azure-swa/package.json +3 -2
  30. package/dist/starters/adapters/azure-swa/src/entry.azure-swa.tsx +2 -3
  31. package/dist/starters/adapters/bun/adapters/bun/{vite.config.mts → vite.config.ts} +3 -3
  32. package/dist/starters/adapters/bun/package.json +3 -2
  33. package/dist/starters/adapters/bun/src/entry.bun.ts +0 -2
  34. package/dist/starters/adapters/cloud-run/adapters/cloud-run/{vite.config.mts → vite.config.ts} +2 -2
  35. package/dist/starters/adapters/cloud-run/package.json +3 -2
  36. package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +1 -3
  37. package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/{vite.config.mts → vite.config.ts} +2 -2
  38. package/dist/starters/adapters/cloudflare-pages/package.json +3 -2
  39. package/dist/starters/adapters/cloudflare-pages/src/entry.cloudflare-pages.tsx +2 -3
  40. package/dist/starters/adapters/cloudflare-workers/README.md +52 -0
  41. package/dist/starters/adapters/cloudflare-workers/adapters/cloudflare-workers/vite.config.ts +15 -0
  42. package/dist/starters/adapters/cloudflare-workers/gitignore +3 -0
  43. package/dist/starters/adapters/cloudflare-workers/package.json +31 -0
  44. package/dist/starters/adapters/cloudflare-workers/public/.assetsignore +4 -0
  45. package/dist/starters/adapters/cloudflare-workers/public/_headers +11 -0
  46. package/dist/starters/adapters/cloudflare-workers/public/_redirects +1 -0
  47. package/dist/starters/adapters/cloudflare-workers/src/entry.cloudflare-pages.tsx +23 -0
  48. package/dist/starters/adapters/cloudflare-workers/worker-configuration.d.ts +5 -0
  49. package/dist/starters/adapters/cloudflare-workers/wrangler.jsonc +41 -0
  50. package/dist/starters/adapters/deno/adapters/deno/{vite.config.mts → vite.config.ts} +2 -2
  51. package/dist/starters/adapters/deno/package.json +3 -2
  52. package/dist/starters/adapters/deno/src/entry.deno.ts +0 -2
  53. package/dist/starters/adapters/express/adapters/express/{vite.config.mts → vite.config.ts} +2 -2
  54. package/dist/starters/adapters/express/package.json +4 -3
  55. package/dist/starters/adapters/express/src/entry.express.tsx +1 -3
  56. package/dist/starters/adapters/fastify/adapters/fastify/{vite.config.mts → vite.config.ts} +2 -2
  57. package/dist/starters/adapters/fastify/package.json +4 -3
  58. package/dist/starters/adapters/fastify/src/entry.fastify.tsx +1 -1
  59. package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +1 -2
  60. package/dist/starters/adapters/firebase/adapters/firebase/{vite.config.mts → vite.config.ts} +2 -2
  61. package/dist/starters/adapters/firebase/package.json +3 -2
  62. package/dist/starters/adapters/firebase/src/entry-firebase.tsx +2 -3
  63. package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/{vite.config.mts → vite.config.ts} +2 -2
  64. package/dist/starters/adapters/netlify-edge/package.json +5 -4
  65. package/dist/starters/adapters/netlify-edge/src/entry.netlify-edge.tsx +2 -3
  66. package/dist/starters/adapters/node-server/adapters/node-server/{vite.config.mts → vite.config.ts} +2 -2
  67. package/dist/starters/adapters/node-server/package.json +3 -2
  68. package/dist/starters/adapters/node-server/src/entry.node-server.tsx +0 -2
  69. package/dist/starters/adapters/{static/adapters/static/vite.config.mts → ssg/adapters/ssg/vite.config.ts} +3 -3
  70. package/dist/starters/adapters/ssg/package.json +20 -0
  71. package/dist/starters/adapters/vercel-edge/README.md +2 -2
  72. package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/{vite.config.mts → vite.config.ts} +2 -2
  73. package/dist/starters/adapters/vercel-edge/package.json +3 -2
  74. package/dist/starters/adapters/vercel-edge/src/entry.vercel-edge.tsx +2 -3
  75. package/dist/starters/adapters/vercel-edge/vercel.json +1 -1
  76. package/dist/starters/features/auth/package.json +1 -1
  77. package/dist/starters/features/compiled-i18n/package.json +37 -0
  78. package/dist/starters/features/compiled-i18n/src/components/locale-selector/locale-selector.tsx +30 -0
  79. package/dist/starters/features/compiled-i18n/src/entry.ssr.tsx +31 -0
  80. package/dist/starters/features/compiled-i18n/src/routes/plugin@compiled-i18n.ts +28 -0
  81. package/dist/starters/features/csr/index.html +27 -0
  82. package/dist/starters/features/csr/package.json +29 -0
  83. package/dist/starters/features/csr/src/root.tsx +15 -0
  84. package/dist/starters/features/csr/vite.config.ts +13 -0
  85. package/dist/starters/features/cypress/src/actions/example.action.ts +5 -0
  86. package/dist/starters/features/cypress/src/components/example/example.cy.tsx +50 -8
  87. package/dist/starters/features/cypress/src/components/example/example.tsx +13 -3
  88. package/dist/starters/features/cypress/src/loaders/example.loader.ts +5 -0
  89. package/dist/starters/features/pandacss/package.json +1 -1
  90. package/dist/starters/features/postcss/postcss.config.js +1 -1
  91. package/dist/starters/features/storybook/.storybook/tsconfig.json +0 -1
  92. package/dist/starters/features/styled-vanilla-extract/package.json +2 -1
  93. package/dist/starters/features/tailwind/package.json +2 -2
  94. package/dist/starters/features/tailwind/prettier.config.js +10 -0
  95. package/dist/starters/features/tailwind-v3/package.json +1 -1
  96. package/dist/starters/features/tailwind-v3/prettier.config.js +10 -0
  97. package/dist/testing/index.d.ts +928 -6
  98. package/dist/testing/index.mjs +16212 -11578
  99. package/dist/testing/package.json +1 -1
  100. package/handlers.mjs +1 -1
  101. package/package.json +34 -56
  102. package/public.d.ts +5 -1
  103. package/{qwik-cli.cjs → qwik-cli.mjs} +1 -1
  104. package/server.d.ts +2 -0
  105. package/bindings/qwik.darwin-arm64.node +0 -0
  106. package/bindings/qwik.darwin-x64.node +0 -0
  107. package/bindings/qwik.linux-x64-gnu.node +0 -0
  108. package/bindings/qwik.wasm.cjs +0 -471
  109. package/bindings/qwik.wasm.mjs +0 -464
  110. package/bindings/qwik.win32-x64-msvc.node +0 -0
  111. package/bindings/qwik_wasm_bg.wasm +0 -0
  112. package/dist/build/index.cjs +0 -35
  113. package/dist/build/index.cjs.map +0 -7
  114. package/dist/build/index.dev.cjs +0 -37
  115. package/dist/build/index.dev.cjs.map +0 -7
  116. package/dist/build/index.prod.cjs +0 -37
  117. package/dist/build/index.prod.cjs.map +0 -7
  118. package/dist/cli.cjs +0 -5545
  119. package/dist/core.cjs +0 -11800
  120. package/dist/core.cjs.map +0 -1
  121. package/dist/core.prod.cjs +0 -5661
  122. package/dist/insights/index.qwik.cjs +0 -1
  123. package/dist/insights/vite/index.cjs +0 -1
  124. package/dist/loader/index.cjs +0 -4
  125. package/dist/optimizer.cjs +0 -4020
  126. package/dist/preloader.cjs +0 -269
  127. package/dist/server.cjs +0 -3037
  128. package/dist/starters/adapters/static/package.json +0 -19
  129. package/dist/starters/features/localize/package.json +0 -37
  130. package/dist/starters/features/localize/src/entry.ssr.tsx +0 -30
  131. package/dist/starters/features/localize/src/locales/message.en.json +0 -8
  132. package/dist/starters/features/localize/src/locales/message.it.json +0 -8
  133. package/dist/starters/features/localize/src/routes/[locale]/i18n-utils.ts +0 -94
  134. package/dist/starters/features/localize/src/routes/[locale]/index.tsx +0 -52
  135. package/dist/starters/features/localize/src/routes/[locale]/layout.tsx +0 -12
  136. package/dist/starters/features/playwright/playwright-report/index.html +0 -22026
  137. package/dist/starters/features/tailwind/.prettierrc.js +0 -3
  138. package/dist/testing/index.cjs +0 -33331
  139. /package/dist/starters/adapters/{static → ssg}/README.md +0 -0
@@ -1,7 +1,11 @@
1
1
  const doc = document;
2
2
  const win = window;
3
+ const windowPrefix = "w";
4
+ const documentPrefix = "d";
3
5
  const events = /* @__PURE__ */ new Set();
4
6
  const roots = /* @__PURE__ */ new Set([doc]);
7
+ const symbols = /* @__PURE__ */ new Map();
8
+ let observer;
5
9
  let hasInitialized;
6
10
  const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
7
11
  const querySelectorAll = (query) => {
@@ -9,28 +13,17 @@ const querySelectorAll = (query) => {
9
13
  roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));
10
14
  return elements;
11
15
  };
16
+ const addEventListener = (el, eventName, handler, capture = false) => el.addEventListener(eventName, handler, { capture, passive: false });
12
17
  const findShadowRoots = (fragment) => {
13
- processEventOrNode(fragment);
14
- nativeQuerySelectorAll(fragment, "[q\\:shadowroot]").forEach((parent) => {
18
+ addEventOrRoot(fragment);
19
+ const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
20
+ for (let i = 0; i < shadowRoots.length; i++) {
21
+ const parent = shadowRoots[i];
15
22
  const shadowRoot = parent.shadowRoot;
16
23
  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
24
  }
33
25
  };
26
+ const isPromise = (promise) => promise && typeof promise.then === "function";
34
27
  const resolveContainer = (containerEl) => {
35
28
  if (containerEl._qwikjson_ === void 0) {
36
29
  const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
@@ -46,64 +39,65 @@ const resolveContainer = (containerEl) => {
46
39
  }
47
40
  }
48
41
  };
49
- const createEvent = (eventName, detail) => new CustomEvent(eventName, {
50
- detail
42
+ const createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });
43
+ const emitEvent = (eventName, detail) => {
44
+ doc.dispatchEvent(createEvent(eventName, detail));
45
+ };
46
+ const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
47
+ 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
51
  });
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();
52
+ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
53
+ if (kebabName) {
54
+ if (element.hasAttribute("preventdefault:" + kebabName)) {
55
+ ev.preventDefault();
56
+ }
57
+ if (element.hasAttribute("stoppropagation:" + kebabName)) {
58
+ ev.stopPropagation();
59
+ }
59
60
  }
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;
61
+ const handlers = element._qDispatch?.[scopedKebabName];
62
+ if (handlers) {
63
+ if (typeof handlers === "function") {
64
+ const result = handlers(ev, element);
65
+ if (isPromise(result)) {
66
+ await result;
68
67
  }
69
- if (cancelBubble) {
70
- ev.stopPropagation();
68
+ } else if (handlers.length) {
69
+ for (let i = 0; i < handlers.length; i++) {
70
+ const handler = handlers[i];
71
+ const result = handler?.(ev, element);
72
+ if (isPromise(result)) {
73
+ await result;
74
+ }
71
75
  }
72
76
  }
73
77
  return;
74
78
  }
75
- const attrValue = element.getAttribute(attrName);
76
- const qDispatchEvent = element.qDispatchEvent;
77
- if (qDispatchEvent) {
78
- return qDispatchEvent(ev, scope);
79
- }
79
+ const attrValue = element.getAttribute("q-" + scopedKebabName);
80
80
  if (attrValue) {
81
81
  const container = element.closest(
82
82
  "[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"
83
83
  );
84
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
85
  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";
86
+ const qrls = attrValue.split("|");
87
+ for (let i = 0; i < qrls.length; i++) {
88
+ const qrl = qrls[i];
92
89
  const reqTime = performance.now();
93
- let handler;
94
- let importError;
95
- let error;
96
- const isSync = qrl.startsWith("#");
90
+ const [chunk, symbol, capturedIds] = qrl.split("#");
97
91
  const eventData = {
98
92
  qBase,
99
- qManifest,
100
- qVersion,
101
- href,
102
93
  symbol,
103
94
  element,
104
95
  reqTime
105
96
  };
106
- if (isSync) {
97
+ let handler;
98
+ let importError;
99
+ let error;
100
+ if (chunk === "") {
107
101
  const hash = container.getAttribute("q:instance");
108
102
  handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
109
103
  if (!handler) {
@@ -111,22 +105,28 @@ const dispatch = async (element, scope, ev, eventName = ev.type) => {
111
105
  error = new Error("sym:" + symbol);
112
106
  }
113
107
  } 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}`);
108
+ const key = `${symbol}|${qBase}|${chunk}`;
109
+ handler = symbols.get(key);
110
+ if (!handler) {
111
+ const href = new URL(chunk, base).href;
112
+ 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);
125
+ }
126
+ } catch (err) {
127
+ importError = "async";
128
+ error = err;
126
129
  }
127
- } catch (err) {
128
- importError || (importError = "async");
129
- error = err;
130
130
  }
131
131
  }
132
132
  if (!handler) {
@@ -136,110 +136,148 @@ const dispatch = async (element, scope, ev, eventName = ev.type) => {
136
136
  ...eventData
137
137
  });
138
138
  console.error(error);
139
- break;
139
+ continue;
140
140
  }
141
- const previousCtx = doc.__q_context__;
142
141
  if (element.isConnected) {
143
142
  try {
144
- doc.__q_context__ = [element, ev, url];
145
- const results = handler(ev, element);
146
- if (isPromise(results)) {
147
- await results;
143
+ const result = handler.call(capturedIds, ev, element);
144
+ if (isPromise(result)) {
145
+ await result;
148
146
  }
149
147
  } catch (error2) {
150
148
  emitEvent("qerror", { error: error2, ...eventData });
151
- } finally {
152
- doc.__q_context__ = previousCtx;
153
149
  }
154
150
  }
155
151
  }
156
152
  }
157
153
  };
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);
154
+ const processElementEvent = async (ev) => {
155
+ const kebabName = camelToKebab(ev.type);
156
+ const scopedKebabName = "e:" + kebabName;
164
157
  let element = ev.target;
165
- broadcast("-document", ev, type);
166
158
  while (element && element.getAttribute) {
167
- const results = dispatch(element, "", ev, type);
168
- let cancelBubble = ev.cancelBubble;
159
+ const results = dispatch(element, ev, scopedKebabName, kebabName);
160
+ const doBubble = ev.bubbles && !ev.cancelBubble;
169
161
  if (isPromise(results)) {
170
162
  await results;
171
163
  }
172
- cancelBubble || (cancelBubble = cancelBubble || ev.cancelBubble || element.hasAttribute("stoppropagation:" + ev.type));
173
- element = ev.bubbles && cancelBubble !== true ? element.parentElement : null;
164
+ element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;
165
+ }
166
+ };
167
+ const broadcast = (infix, ev) => {
168
+ const kebabName = camelToKebab(ev.type);
169
+ const scopedKebabName = infix + ":" + kebabName;
170
+ const elements = querySelectorAll("[q-" + infix + "\\:" + kebabName + "]");
171
+ for (let i = 0; i < elements.length; i++) {
172
+ const el = elements[i];
173
+ dispatch(el, ev, scopedKebabName, kebabName);
174
174
  }
175
175
  };
176
+ const processDocumentEvent = async (ev) => {
177
+ broadcast(documentPrefix, ev);
178
+ };
176
179
  const processWindowEvent = (ev) => {
177
- broadcast("-window", ev, camelToKebab(ev.type));
180
+ broadcast(windowPrefix, ev);
178
181
  };
179
182
  const processReadyStateChange = () => {
180
- var _a;
181
183
  const readyState = doc.readyState;
182
- if (!hasInitialized && (readyState == "interactive" || readyState == "complete")) {
183
- roots.forEach(findShadowRoots);
184
+ if (readyState == "interactive" || readyState == "complete") {
184
185
  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) {
186
+ roots.forEach(findShadowRoots);
187
+ if (events.has("d:qinit")) {
188
+ events.delete("d:qinit");
189
+ const ev = createEvent("qinit");
190
+ const elements = querySelectorAll("[q-d\\:qinit]");
191
+ for (let i = 0; i < elements.length; i++) {
192
+ const el = elements[i];
193
+ dispatch(el, ev, "d:qinit");
194
+ el.removeAttribute("q-d:qinit");
195
+ }
196
+ }
197
+ if (events.has("d:qidle")) {
198
+ events.delete("d:qidle");
199
+ const riC = win.requestIdleCallback ?? win.setTimeout;
200
+ riC.bind(win)(() => {
201
+ const ev = createEvent("qidle");
202
+ const elements = querySelectorAll("[q-d\\:qidle]");
203
+ for (let i = 0; i < elements.length; i++) {
204
+ const el = elements[i];
205
+ dispatch(el, ev, "d:qidle");
206
+ el.removeAttribute("q-d:qidle");
207
+ }
208
+ });
209
+ }
210
+ if (events.has("e:qvisible")) {
211
+ observer || (observer = new IntersectionObserver((entries) => {
212
+ for (let i = 0; i < entries.length; i++) {
213
+ const entry = entries[i];
192
214
  if (entry.isIntersecting) {
193
215
  observer.unobserve(entry.target);
194
- dispatch(entry.target, "", createEvent("qvisible", entry));
216
+ dispatch(entry.target, createEvent("qvisible", entry), "e:qvisible");
195
217
  }
196
218
  }
197
- });
198
- results.forEach((el) => observer.observe(el));
219
+ }));
220
+ const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
221
+ for (let i = 0; i < elements.length; i++) {
222
+ const el = elements[i];
223
+ observer.observe(el);
224
+ el.setAttribute("q:observed", "true");
225
+ }
199
226
  }
200
227
  }
201
228
  };
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);
229
+ const addEventOrRoot = (...eventNames) => {
230
+ for (let i = 0; i < eventNames.length; i++) {
231
+ const eventNameOrRoot = eventNames[i];
232
+ if (typeof eventNameOrRoot === "string") {
233
+ if (!events.has(eventNameOrRoot)) {
234
+ events.add(eventNameOrRoot);
235
+ const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
236
+ if (scope === windowPrefix) {
237
+ addEventListener(win, eventName, processWindowEvent, true);
238
+ } else {
239
+ roots.forEach(
240
+ (root) => addEventListener(
241
+ root,
242
+ eventName,
243
+ scope === documentPrefix ? processDocumentEvent : processElementEvent,
244
+ true
245
+ )
246
+ );
247
+ }
248
+ if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) {
249
+ processReadyStateChange();
250
+ }
218
251
  }
219
252
  } else {
220
- if (!roots.has(eventNameOrNode)) {
221
- events.forEach(
222
- (eventName) => addEventListener(eventNameOrNode, eventName, processDocumentEvent, true)
223
- );
224
- roots.add(eventNameOrNode);
253
+ if (!roots.has(eventNameOrRoot)) {
254
+ events.forEach((kebabEventName) => {
255
+ const { scope, eventName } = parseKebabEvent(kebabEventName);
256
+ if (scope !== windowPrefix) {
257
+ addEventListener(
258
+ eventNameOrRoot,
259
+ eventName,
260
+ scope === documentPrefix ? processDocumentEvent : processElementEvent,
261
+ true
262
+ );
263
+ }
264
+ });
265
+ roots.add(eventNameOrRoot);
225
266
  }
226
267
  }
227
268
  }
228
269
  };
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
- }
270
+ const _qwikEv = win._qwikEv;
271
+ if (!_qwikEv?.roots) {
272
+ if (Array.isArray(_qwikEv)) {
273
+ addEventOrRoot(..._qwikEv);
274
+ } else {
275
+ addEventOrRoot("e:click", "e:input");
238
276
  }
239
- win.qwikevents = {
277
+ win._qwikEv = {
240
278
  events,
241
279
  roots,
242
- push: processEventOrNode
280
+ push: addEventOrRoot
243
281
  };
244
282
  addEventListener(doc, "readystatechange", processReadyStateChange);
245
283
  processReadyStateChange();
@@ -1 +1 @@
1
- const t=document,e=window,n=new Set,o=new Set([t]);let r;const s=(t,e)=>Array.from(t.querySelectorAll(e)),i=t=>{const e=[];return o.forEach(n=>e.push(...s(n,t))),e},a=t=>{v(t),s(t,"[q\\:shadowroot]").forEach(t=>{const e=t.shadowRoot;e&&a(e)})},c=t=>t&&"function"==typeof t.then;let l=!0;const f=(t,e,n=e.type)=>{let o=l;i("[on"+t+"\\:"+n+"]").forEach(r=>{o=!0,b(r,t,e,n)}),o||window[t.slice(1)].removeEventListener(n,"-window"===t?d:_)},p=e=>{if(void 0===e._qwikjson_){let n=(e===t.documentElement?t.body:e).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){e._qwikjson_=JSON.parse(n.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},u=(t,e)=>new CustomEvent(t,{detail:e}),b=async(e,n,o,r=o.type)=>{const s="on"+n+":"+r;e.hasAttribute("preventdefault:"+r)&&o.preventDefault(),e.hasAttribute("stoppropagation:"+r)&&o.stopPropagation();const i=e._qc_,a=i&&i.li.filter(t=>t[0]===s);if(a&&a.length>0){for(const t of a){const n=t[1].getFn([e,o],()=>e.isConnected)(o,e),r=o.cancelBubble;c(n)&&await n,r&&o.stopPropagation()}return}const l=e.getAttribute(s),f=e.qDispatchEvent;if(f)return f(o,n);if(l){const n=e.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),r=n.getAttribute("q:base"),s=n.getAttribute("q:version")||"unknown",i=n.getAttribute("q:manifest-hash")||"dev",a=new URL(r,t.baseURI);for(const f of l.split("\n")){const l=new URL(f,a),u=l.href,b=l.hash.replace(/^#?([^?[|]*).*$/,"$1")||"default",h=performance.now();let _,d,w;const m=f.startsWith("#"),y={qBase:r,qManifest:i,qVersion:s,href:u,symbol:b,element:e,reqTime:h};if(m){const e=n.getAttribute("q:instance");_=(t["qFuncs_"+e]||[])[Number.parseInt(b)],_||(d="sync",w=Error("sym:"+b))}else{q("qsymbol",y);const t=l.href.split("#")[0];try{const e=import(t);p(n),_=(await e)[b],_||(d="no-symbol",w=Error(`${b} not in ${t}`))}catch(t){d||(d="async"),w=t}}if(!_){q("qerror",{importError:d,error:w,...y}),console.error(w);break}const v=t.__q_context__;if(e.isConnected)try{t.__q_context__=[e,o,l];const n=_(o,e);c(n)&&await n}catch(t){q("qerror",{error:t,...y})}finally{t.__q_context__=v}}}},q=(e,n)=>{t.dispatchEvent(u(e,n))},h=t=>t.replace(/([A-Z])/g,t=>"-"+t.toLowerCase()),_=async t=>{let e=h(t.type),n=t.target;for(f("-document",t,e);n&&n.getAttribute;){const o=b(n,"",t,e);let r=t.cancelBubble;c(o)&&await o,r||(r=r||t.cancelBubble||n.hasAttribute("stoppropagation:"+t.type)),n=t.bubbles&&!0!==r?n.parentElement:null}},d=t=>{f("-window",t,h(t.type))},w=()=>{var s;const c=t.readyState;if(!r&&("interactive"==c||"complete"==c)&&(o.forEach(a),r=1,q("qinit"),(null!=(s=e.requestIdleCallback)?s:e.setTimeout).bind(e)(()=>q("qidle")),n.has("qvisible"))){const t=i("[on\\:qvisible]"),e=new IntersectionObserver(t=>{for(const n of t)n.isIntersecting&&(e.unobserve(n.target),b(n.target,"",u("qvisible",n)))});t.forEach(t=>e.observe(t))}},m=(t,e,n,o=!1)=>{t.addEventListener(e,n,{capture:o,passive:!1})};let y;const v=(...t)=>{l=!0,clearTimeout(y),y=setTimeout(()=>l=!1,2e4);for(const r of t)"string"==typeof r?n.has(r)||(o.forEach(t=>m(t,r,_,!0)),m(e,r,d,!0),n.add(r)):o.has(r)||(n.forEach(t=>m(r,t,_,!0)),o.add(r))};if(!("__q_context__"in t)){t.__q_context__=0;const r=e.qwikevents;r&&(Array.isArray(r)?v(...r):v("click","input")),e.qwikevents={events:n,roots:o,push:v},m(t,"readystatechange",w),w()}
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());