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

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