@absolutejs/absolute 0.20.0-beta.174 → 0.20.0-beta.176

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 (84) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/changelog.json +76 -0
  3. package/dist/angular/browser.js +13 -2
  4. package/dist/angular/browser.js.map +3 -3
  5. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  6. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  7. package/dist/angular/index.js +67 -8
  8. package/dist/angular/index.js.map +10 -8
  9. package/dist/angular/server.js +67 -8
  10. package/dist/angular/server.js.map +10 -8
  11. package/dist/build.js +315 -120
  12. package/dist/build.js.map +21 -19
  13. package/dist/cli/{compile-n6fs2vmx.js → compile-w2z6c9vt.js} +1 -1
  14. package/dist/cli/{dev-6h1f0mzq.js → dev-8br5mr7t.js} +16 -2
  15. package/dist/cli/{index-mqevg32w.js → index-6522t968.js} +21 -2
  16. package/dist/cli/{index-bhyd3ejc.js → index-7z1hh3fg.js} +1 -1
  17. package/dist/cli/index.js +6 -6
  18. package/dist/cli/{islands-vk05sj6v.js → islands-bx67g15t.js} +4 -4
  19. package/dist/cli/{mobile-62b6j3j7.js → mobile-we5q51ey.js} +2 -2
  20. package/dist/cli/{start-jh6kyp92.js → start-srs11bm8.js} +2 -2
  21. package/dist/client/chunks/index-4j1snyh2.js +18 -0
  22. package/dist/client/chunks/index-4j1snyh2.js.map +10 -0
  23. package/dist/client/chunks/{index-6b66nzyf.js → index-a3rpg5kw.js} +6 -16
  24. package/dist/client/chunks/{index-6b66nzyf.js.map → index-a3rpg5kw.js.map} +3 -4
  25. package/dist/client/chunks/{islands-s2ta5ajb.js → islands-mfjmdwnb.js} +11 -4
  26. package/dist/client/chunks/{islands-s2ta5ajb.js.map → islands-mfjmdwnb.js.map} +3 -3
  27. package/dist/client/chunks/{react-dcvkaba2.js → react-sprprqzs.js} +20 -4
  28. package/dist/client/chunks/react-sprprqzs.js.map +10 -0
  29. package/dist/client/chunks/svelte-6ewphsvj.js +30 -0
  30. package/dist/client/chunks/svelte-6ewphsvj.js.map +10 -0
  31. package/dist/client/chunks/{vue-a84fzp3v.js → vue-db6ppn1f.js} +14 -4
  32. package/dist/client/chunks/vue-db6ppn1f.js.map +10 -0
  33. package/dist/client/index.js +65 -8
  34. package/dist/client/index.js.map +4 -4
  35. package/dist/client/navigation.js +5 -3
  36. package/dist/client/navigation.js.map +2 -2
  37. package/dist/client/prefetch.js +1 -1
  38. package/dist/dev/client/handlers/islands.ts +85 -0
  39. package/dist/dev/client/hmrClient.ts +6 -0
  40. package/dist/index.js +460 -244
  41. package/dist/index.js.map +23 -21
  42. package/dist/islands/index.js +57 -10
  43. package/dist/islands/index.js.map +9 -7
  44. package/dist/react/browser.js +15 -4
  45. package/dist/react/browser.js.map +5 -5
  46. package/dist/react/components/client.js +506 -0
  47. package/dist/react/components/index.js +14 -15
  48. package/dist/react/components/index.js.map +4 -4
  49. package/dist/react/components/server/index.js +728 -0
  50. package/dist/react/hooks/index.js +14 -15
  51. package/dist/react/hooks/index.js.map +4 -4
  52. package/dist/react/index.js +66 -6
  53. package/dist/react/index.js.map +11 -9
  54. package/dist/react/router/browser.js +7 -8
  55. package/dist/react/router/browser.js.map +4 -4
  56. package/dist/react/router/index.js +7 -8
  57. package/dist/react/router/index.js.map +4 -4
  58. package/dist/react/server.js +14 -1
  59. package/dist/react/server.js.map +4 -4
  60. package/dist/src/build/buildReactServerComponents.d.ts +4 -0
  61. package/dist/src/build/islandEntries.d.ts +5 -0
  62. package/dist/src/client/hydrators/react.d.ts +7 -0
  63. package/dist/src/client/hydrators/svelte.d.ts +3 -0
  64. package/dist/src/client/hydrators/vue.d.ts +3 -0
  65. package/dist/src/client/preserveIslandMarkup.d.ts +5 -0
  66. package/dist/src/core/islandServerGeneration.d.ts +3 -0
  67. package/dist/src/react/components/client.d.ts +4 -0
  68. package/dist/src/react/components/server/index.d.ts +8 -0
  69. package/dist/src/react/serverComponents/constants.d.ts +2 -1
  70. package/dist/svelte/index.js +66 -6
  71. package/dist/svelte/index.js.map +10 -8
  72. package/dist/svelte/server.js +38 -3
  73. package/dist/svelte/server.js.map +6 -5
  74. package/dist/types/build.d.ts +3 -2
  75. package/dist/types/globals.d.ts +15 -0
  76. package/dist/vue/browser.js +26 -16
  77. package/dist/vue/browser.js.map +5 -5
  78. package/dist/vue/index.js +65 -21
  79. package/dist/vue/index.js.map +10 -9
  80. package/package.json +1 -1
  81. package/dist/client/chunks/react-dcvkaba2.js.map +0 -10
  82. package/dist/client/chunks/svelte-4yfa5bxa.js +0 -17
  83. package/dist/client/chunks/svelte-4yfa5bxa.js.map +0 -10
  84. package/dist/client/chunks/vue-a84fzp3v.js.map +0 -10
@@ -0,0 +1,506 @@
1
+ // @bun
2
+ "use client";
3
+
4
+ // src/react/router/Link.tsx
5
+ import {
6
+ useContext
7
+ } from "react";
8
+
9
+ // src/dev/client/cspNonce.ts
10
+ var applyPageNonce = (element) => {
11
+ const nonce = readPageNonce();
12
+ if (nonce)
13
+ element.nonce = nonce;
14
+ return element;
15
+ };
16
+ var readPageNonce = () => {
17
+ if (typeof document === "undefined")
18
+ return;
19
+ const carrier = document.querySelector("script[nonce], style[nonce]");
20
+ return carrier?.nonce || undefined;
21
+ };
22
+
23
+ // src/client/prefetch.ts
24
+ var PREFETCH_CACHE_LIMIT = 16;
25
+ var HOVER_DEBOUNCE_MS = 250;
26
+ var MAX_IN_FLIGHT = 2;
27
+ var MAX_LIVE_SPECULATION_RULES = 2;
28
+ var VIEWPORT_ROOT_MARGIN = "128px";
29
+ var SLOW_EFFECTIVE_TYPES = new Set(["slow-2g", "2g"]);
30
+ var NOT_FOUND = 404;
31
+ var NOT_ACCEPTABLE = 406;
32
+ var ROUTE_DATA_MEDIA_TYPE = "application/vnd.absolute.route+json";
33
+ var cache = new Map;
34
+ var queue = [];
35
+ var inFlight = 0;
36
+ var preloadedModules = new Set;
37
+ var prefetchedStyles = new Set;
38
+ var liveSpeculationRules = new Map;
39
+ var offlineResponse = () => new Response(null, { status: 0 });
40
+ var storageKind = (kind) => kind === "route" ? "document" : kind;
41
+ var cacheKey = (kind, url) => `${storageKind(kind)}:${url}`;
42
+ var resolveHref = (url) => {
43
+ if (typeof window === "undefined")
44
+ return url;
45
+ try {
46
+ return new URL(url, window.location.href).href;
47
+ } catch {
48
+ return url;
49
+ }
50
+ };
51
+ var isGloballyDisabled = () => typeof window !== "undefined" && Reflect.get(window, "__ABSOLUTE_PREFETCH__") === false;
52
+ var isSlowConnection = () => {
53
+ if (typeof navigator === "undefined")
54
+ return false;
55
+ const connection = Reflect.get(navigator, "connection");
56
+ if (typeof connection !== "object" || connection === null)
57
+ return false;
58
+ if (Reflect.get(connection, "saveData") === true)
59
+ return true;
60
+ const effectiveType = Reflect.get(connection, "effectiveType");
61
+ return typeof effectiveType === "string" && SLOW_EFFECTIVE_TYPES.has(effectiveType);
62
+ };
63
+ var prefersReducedData = () => {
64
+ if (typeof window === "undefined" || !window.matchMedia)
65
+ return false;
66
+ return window.matchMedia("(prefers-reduced-data: reduce)").matches;
67
+ };
68
+ var canPrefetch = () => typeof window !== "undefined" && !isGloballyDisabled() && !isSlowConnection() && !prefersReducedData();
69
+ var readNodeEnv = () => {
70
+ const processLike = Reflect.get(globalThis, "process");
71
+ if (typeof processLike !== "object" || processLike === null) {
72
+ return;
73
+ }
74
+ const env = Reflect.get(processLike, "env");
75
+ if (typeof env !== "object" || env === null)
76
+ return;
77
+ const value = Reflect.get(env, "NODE_ENV");
78
+ return typeof value === "string" ? value : undefined;
79
+ };
80
+ var isDevelopmentClient = () => {
81
+ if (typeof window === "undefined")
82
+ return false;
83
+ if (Reflect.get(window, "__HMR_FRAMEWORK__") !== undefined)
84
+ return true;
85
+ if (Reflect.get(window, "__HMR_WS__") !== undefined)
86
+ return true;
87
+ if (typeof document !== "undefined" && document.querySelector("script[data-hmr-client]") !== null) {
88
+ return true;
89
+ }
90
+ return readNodeEnv() === "development";
91
+ };
92
+ var isPrefetchableHref = (href) => {
93
+ if (typeof window === "undefined")
94
+ return false;
95
+ if (href === "" || href.startsWith("#"))
96
+ return false;
97
+ try {
98
+ const url = new URL(href, window.location.href);
99
+ if (url.protocol !== "http:" && url.protocol !== "https:")
100
+ return false;
101
+ return url.origin === window.location.origin;
102
+ } catch {
103
+ return false;
104
+ }
105
+ };
106
+ var resolveDefaultPrefetchMode = () => isDevelopmentClient() ? "hover" : "viewport";
107
+ var runQueue = () => {
108
+ while (inFlight < MAX_IN_FLIGHT) {
109
+ const next = queue.shift();
110
+ if (!next)
111
+ return;
112
+ if (next.cancelled)
113
+ continue;
114
+ next.start();
115
+ }
116
+ };
117
+ var finishTask = () => {
118
+ inFlight = Math.max(0, inFlight - 1);
119
+ runQueue();
120
+ };
121
+ var runWhenReleased = async (gate, task, signal) => {
122
+ await gate;
123
+ try {
124
+ return await task(signal);
125
+ } catch {
126
+ return offlineResponse();
127
+ } finally {
128
+ finishTask();
129
+ }
130
+ };
131
+ var enqueue = (task) => {
132
+ const controller = new AbortController;
133
+ let release = () => {
134
+ return;
135
+ };
136
+ const gate = new Promise((resolve) => {
137
+ release = resolve;
138
+ });
139
+ const queued = {
140
+ cancelled: false,
141
+ start: () => {
142
+ inFlight += 1;
143
+ release();
144
+ }
145
+ };
146
+ const promise = runWhenReleased(gate, task, controller.signal);
147
+ queue.push(queued);
148
+ runQueue();
149
+ const abort = () => {
150
+ if (queued.cancelled)
151
+ return;
152
+ queued.cancelled = true;
153
+ controller.abort();
154
+ };
155
+ return { abort, promise };
156
+ };
157
+ var evictOldest = () => {
158
+ const oldest = cache.keys().next();
159
+ if (oldest.done)
160
+ return;
161
+ cache.get(oldest.value)?.abort();
162
+ cache.delete(oldest.value);
163
+ };
164
+ var touch = (key, entry) => {
165
+ cache.delete(key);
166
+ cache.set(key, entry);
167
+ };
168
+ var injectLink = (rel, href, asType) => {
169
+ if (typeof document === "undefined")
170
+ return;
171
+ const link = document.createElement("link");
172
+ link.rel = rel;
173
+ link.href = href;
174
+ if (asType)
175
+ link.setAttribute("as", asType);
176
+ document.head.append(link);
177
+ };
178
+ var injectPrefetchFallback = (kind, url) => {
179
+ if (kind !== "document" || !supportsLinkRel("prefetch"))
180
+ return;
181
+ injectLink("prefetch", url, "document");
182
+ };
183
+ var supportsLinkRel = (rel) => {
184
+ if (typeof document === "undefined")
185
+ return false;
186
+ const link = document.createElement("link");
187
+ return typeof link.relList?.supports === "function" && link.relList.supports(rel);
188
+ };
189
+ var prefetchStylesheet = (href) => {
190
+ if (typeof document === "undefined")
191
+ return false;
192
+ const resolved = resolveHref(href);
193
+ if (prefetchedStyles.has(resolved))
194
+ return false;
195
+ prefetchedStyles.add(resolved);
196
+ injectLink("prefetch", href, "style");
197
+ return true;
198
+ };
199
+ var preloadModule = (href) => {
200
+ if (typeof document === "undefined")
201
+ return false;
202
+ const resolved = resolveHref(href);
203
+ if (preloadedModules.has(resolved))
204
+ return false;
205
+ const existing = Array.from(document.querySelectorAll('link[rel="modulepreload"]'));
206
+ if (existing.some((link) => resolveHref(link.href) === resolved)) {
207
+ preloadedModules.add(resolved);
208
+ return false;
209
+ }
210
+ preloadedModules.add(resolved);
211
+ injectLink("modulepreload", href);
212
+ return true;
213
+ };
214
+ var isRecord = (value) => typeof value === "object" && value !== null;
215
+ var isHref = (value) => typeof value === "string" && value.length > 0;
216
+ var warmRouteDataAssets = (envelope) => {
217
+ if (!isRecord(envelope))
218
+ return;
219
+ const { assets } = envelope;
220
+ if (!isRecord(assets))
221
+ return;
222
+ const { client, css, index } = assets;
223
+ for (const href of [index, client].filter(isHref))
224
+ preloadModule(href);
225
+ if (!Array.isArray(css))
226
+ return;
227
+ for (const href of css.filter(isHref))
228
+ prefetchStylesheet(href);
229
+ };
230
+ var warmFromRouteData = async (response) => {
231
+ try {
232
+ warmRouteDataAssets(await response.clone().json());
233
+ } catch {}
234
+ return response;
235
+ };
236
+ var fetchDocument = (url, signal) => fetch(url, { credentials: "same-origin", signal });
237
+ var fetchRouteData = async (url, signal) => {
238
+ const response = await fetch(url, {
239
+ credentials: "same-origin",
240
+ headers: { Accept: ROUTE_DATA_MEDIA_TYPE },
241
+ signal
242
+ });
243
+ const contentType = response.headers.get("content-type") ?? "";
244
+ const isRouteData = response.ok && contentType.includes(ROUTE_DATA_MEDIA_TYPE);
245
+ if (isRouteData)
246
+ return warmFromRouteData(response);
247
+ await response.body?.cancel().catch(() => {
248
+ return;
249
+ });
250
+ const status = response.status === NOT_FOUND || response.status === NOT_ACCEPTABLE ? response.status : NOT_ACCEPTABLE;
251
+ return new Response(null, { status });
252
+ };
253
+ var prefetch = (url, options = {}) => {
254
+ const kind = options.kind ?? "document";
255
+ if (!canPrefetch())
256
+ return;
257
+ if (kind === "module") {
258
+ preloadModule(url);
259
+ return;
260
+ }
261
+ if (kind === "route") {
262
+ prefetch(url, { kind: "document" });
263
+ prefetch(url, { kind: "data" });
264
+ return;
265
+ }
266
+ const key = cacheKey(kind, url);
267
+ const existing = cache.get(key);
268
+ if (existing) {
269
+ touch(key, existing);
270
+ return;
271
+ }
272
+ if (typeof fetch === "undefined") {
273
+ injectPrefetchFallback(kind, url);
274
+ return;
275
+ }
276
+ while (cache.size >= PREFETCH_CACHE_LIMIT)
277
+ evictOldest();
278
+ const { abort, promise } = enqueue((signal) => kind === "data" ? fetchRouteData(url, signal) : fetchDocument(url, signal));
279
+ cache.set(key, { abort, kind, promise, url });
280
+ };
281
+ var supportsSpeculationRules = () => typeof HTMLScriptElement !== "undefined" && typeof HTMLScriptElement.supports === "function" && HTMLScriptElement.supports("speculationrules");
282
+ var speculate = (url) => {
283
+ if (!canPrefetch() || !supportsSpeculationRules())
284
+ return false;
285
+ if (typeof document === "undefined")
286
+ return false;
287
+ const resolved = resolveHref(url);
288
+ if (liveSpeculationRules.has(resolved))
289
+ return false;
290
+ while (liveSpeculationRules.size >= MAX_LIVE_SPECULATION_RULES) {
291
+ const oldest = liveSpeculationRules.keys().next();
292
+ if (oldest.done)
293
+ break;
294
+ liveSpeculationRules.get(oldest.value)?.remove();
295
+ liveSpeculationRules.delete(oldest.value);
296
+ }
297
+ const script = applyPageNonce(document.createElement("script"));
298
+ script.type = "speculationrules";
299
+ script.textContent = JSON.stringify({
300
+ prerender: [{ eagerness: "immediate", urls: [url] }]
301
+ });
302
+ document.head.append(script);
303
+ liveSpeculationRules.set(resolved, script);
304
+ return true;
305
+ };
306
+ var noopHandle = {
307
+ cancel: () => {}
308
+ };
309
+ var scheduleHoverPrefetch = (url, options = {}) => {
310
+ if (typeof window === "undefined")
311
+ return noopHandle;
312
+ const timer = window.setTimeout(() => {
313
+ prefetch(url, { kind: options.kind ?? "route" });
314
+ if (options.prerender)
315
+ speculate(url);
316
+ options.onPrefetch?.();
317
+ }, HOVER_DEBOUNCE_MS);
318
+ return {
319
+ cancel: () => window.clearTimeout(timer)
320
+ };
321
+ };
322
+ var viewportTargets = new WeakMap;
323
+ var viewportObserver = null;
324
+ var handleIntersections = (entries) => {
325
+ for (const entry of entries) {
326
+ if (!entry.isIntersecting)
327
+ continue;
328
+ const target = viewportTargets.get(entry.target);
329
+ viewportObserver?.unobserve(entry.target);
330
+ viewportTargets.delete(entry.target);
331
+ if (!target)
332
+ continue;
333
+ prefetch(target.url, { kind: target.options.kind });
334
+ target.options.onVisible?.();
335
+ }
336
+ };
337
+ var getViewportObserver = () => {
338
+ if (viewportObserver)
339
+ return viewportObserver;
340
+ if (typeof IntersectionObserver === "undefined")
341
+ return null;
342
+ viewportObserver = new IntersectionObserver(handleIntersections, {
343
+ rootMargin: VIEWPORT_ROOT_MARGIN
344
+ });
345
+ return viewportObserver;
346
+ };
347
+ var observeViewport = (element, url, options = {}) => {
348
+ const observer = getViewportObserver();
349
+ if (!observer || !canPrefetch())
350
+ return () => {
351
+ return;
352
+ };
353
+ viewportTargets.set(element, { options, url });
354
+ observer.observe(element);
355
+ return () => {
356
+ observer.unobserve(element);
357
+ viewportTargets.delete(element);
358
+ };
359
+ };
360
+
361
+ // src/react/hooks/usePrefetch.ts
362
+ import { useCallback, useEffect, useRef } from "react";
363
+ var usePrefetch = (href, options = {}) => {
364
+ const { kind, mode, prerender = false } = options;
365
+ const viewportKind = kind ?? "document";
366
+ const triggerKind = kind ?? "route";
367
+ const elementRef = useRef(null);
368
+ const hoverHandle = useRef(null);
369
+ const cancelHover = useCallback(() => {
370
+ hoverHandle.current?.cancel();
371
+ hoverHandle.current = null;
372
+ }, []);
373
+ const isActive = useCallback(() => {
374
+ if (href === undefined || !isPrefetchableHref(href))
375
+ return false;
376
+ const resolved = mode ?? resolveDefaultPrefetchMode();
377
+ return resolved !== "none";
378
+ }, [href, mode]);
379
+ useEffect(() => {
380
+ const element = elementRef.current;
381
+ if (!element || href === undefined || !isActive())
382
+ return;
383
+ const resolved = mode ?? resolveDefaultPrefetchMode();
384
+ if (resolved !== "viewport")
385
+ return;
386
+ return observeViewport(element, href, { kind: viewportKind });
387
+ }, [href, isActive, mode, viewportKind]);
388
+ useEffect(() => cancelHover, [cancelHover]);
389
+ const onPointerEnter = useCallback(() => {
390
+ if (href === undefined || !isActive())
391
+ return;
392
+ cancelHover();
393
+ hoverHandle.current = scheduleHoverPrefetch(href, {
394
+ kind: triggerKind,
395
+ prerender
396
+ });
397
+ }, [cancelHover, href, isActive, prerender, triggerKind]);
398
+ const onPointerDown = useCallback(() => {
399
+ if (href === undefined || !isActive())
400
+ return;
401
+ cancelHover();
402
+ prefetch(href, { kind: triggerKind });
403
+ if (prerender)
404
+ speculate(href);
405
+ }, [cancelHover, href, isActive, prerender, triggerKind]);
406
+ return {
407
+ onBlur: cancelHover,
408
+ onFocus: onPointerEnter,
409
+ onPointerDown,
410
+ onPointerEnter,
411
+ onPointerLeave: cancelHover,
412
+ ref: elementRef
413
+ };
414
+ };
415
+
416
+ // src/react/router/navigationContext.ts
417
+ import { createContext } from "react";
418
+ var RouterNavigationContext = createContext(null);
419
+
420
+ // src/react/router/Link.tsx
421
+ import { jsx } from "react/jsx-runtime";
422
+ var isModifierClick = (event) => event.metaKey || event.ctrlKey || event.shiftKey || event.altKey;
423
+ var Link = ({
424
+ href,
425
+ prefetch: prefetchMode,
426
+ prerender = false,
427
+ replace = false,
428
+ target,
429
+ download,
430
+ children,
431
+ onBlur,
432
+ onClick,
433
+ onFocus,
434
+ onPointerDown,
435
+ onPointerEnter,
436
+ onPointerLeave,
437
+ ...rest
438
+ }) => {
439
+ const navigation = useContext(RouterNavigationContext);
440
+ const {
441
+ ref,
442
+ onBlur: prefetchBlur,
443
+ onFocus: prefetchFocus,
444
+ onPointerDown: prefetchPointerDown,
445
+ onPointerEnter: prefetchPointerEnter,
446
+ onPointerLeave: prefetchPointerLeave
447
+ } = usePrefetch(href, { mode: prefetchMode, prerender });
448
+ const handleClick = (event) => {
449
+ onClick?.(event);
450
+ if (event.defaultPrevented)
451
+ return;
452
+ if (isModifierClick(event) || event.button !== 0)
453
+ return;
454
+ if (target && target !== "_self")
455
+ return;
456
+ if (download !== undefined)
457
+ return;
458
+ if (!navigation || !isPrefetchableHref(href))
459
+ return;
460
+ if (navigation.matches(href) === false)
461
+ return;
462
+ event.preventDefault();
463
+ navigation.navigate(href, { replace });
464
+ };
465
+ const handlePointerEnter = (event) => {
466
+ onPointerEnter?.(event);
467
+ prefetchPointerEnter();
468
+ };
469
+ const handlePointerLeave = (event) => {
470
+ onPointerLeave?.(event);
471
+ prefetchPointerLeave();
472
+ };
473
+ const handlePointerDown = (event) => {
474
+ onPointerDown?.(event);
475
+ prefetchPointerDown();
476
+ };
477
+ const handleFocus = (event) => {
478
+ onFocus?.(event);
479
+ prefetchFocus();
480
+ };
481
+ const handleBlur = (event) => {
482
+ onBlur?.(event);
483
+ prefetchBlur();
484
+ };
485
+ return /* @__PURE__ */ jsx("a", {
486
+ ...rest,
487
+ download,
488
+ href,
489
+ onBlur: handleBlur,
490
+ onClick: handleClick,
491
+ onFocus: handleFocus,
492
+ onPointerDown: handlePointerDown,
493
+ onPointerEnter: handlePointerEnter,
494
+ onPointerLeave: handlePointerLeave,
495
+ ref,
496
+ target,
497
+ children
498
+ });
499
+ };
500
+
501
+ // src/react/components/client.ts
502
+ "use client";
503
+ export {
504
+ Link,
505
+ usePrefetch
506
+ };
@@ -162,6 +162,19 @@ var init_constants = __esm(() => {
162
162
  TWO_THIRDS = 2 / 3;
163
163
  });
164
164
 
165
+ // src/dev/client/cspNonce.ts
166
+ var applyPageNonce = (element) => {
167
+ const nonce = readPageNonce();
168
+ if (nonce)
169
+ element.nonce = nonce;
170
+ return element;
171
+ }, readPageNonce = () => {
172
+ if (typeof document === "undefined")
173
+ return;
174
+ const carrier = document.querySelector("script[nonce], style[nonce]");
175
+ return carrier?.nonce || undefined;
176
+ };
177
+
165
178
  // src/react/components/Head.tsx
166
179
  init_cspNonceRef();
167
180
  init_fontAssets();
@@ -987,20 +1000,6 @@ import {
987
1000
  useContext
988
1001
  } from "react";
989
1002
 
990
- // src/dev/client/cspNonce.ts
991
- var applyPageNonce = (element) => {
992
- const nonce = readPageNonce();
993
- if (nonce)
994
- element.nonce = nonce;
995
- return element;
996
- };
997
- var readPageNonce = () => {
998
- if (typeof document === "undefined")
999
- return;
1000
- const carrier = document.querySelector("script[nonce], style[nonce]");
1001
- return carrier?.nonce || undefined;
1002
- };
1003
-
1004
1003
  // src/client/prefetch.ts
1005
1004
  var PREFETCH_CACHE_LIMIT = 16;
1006
1005
  var HOVER_DEBOUNCE_MS = 250;
@@ -1488,5 +1487,5 @@ export {
1488
1487
  usePrefetch
1489
1488
  };
1490
1489
 
1491
- //# debugId=44BDD08A7AD6CC8F64756E2164756E21
1490
+ //# debugId=A6EB3EF7F464277264756E2164756E21
1492
1491
  //# sourceMappingURL=index.js.map