@absolutejs/absolute 0.20.0-beta.169 → 0.20.0-beta.170

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 (238) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +232 -0
  3. package/changelog.json +228 -0
  4. package/dist/angular/browser.js +7 -8
  5. package/dist/angular/browser.js.map +6 -5
  6. package/dist/angular/components/core/streamingSlotRegistrar.js +6 -2
  7. package/dist/angular/components/core/streamingSlotRegistry.js +7 -3
  8. package/dist/angular/index.js +555 -156
  9. package/dist/angular/index.js.map +29 -23
  10. package/dist/angular/server.js +555 -156
  11. package/dist/angular/server.js.map +29 -23
  12. package/dist/build/buildWorker.js +14 -8
  13. package/dist/build.js +4949 -1941
  14. package/dist/build.js.map +72 -42
  15. package/dist/cli/{add-7azr0c83.js → add-6a7pjkn9.js} +11 -7
  16. package/dist/cli/{analyze-3cyek6v3.js → analyze-606fshwa.js} +1 -1
  17. package/dist/cli/{build-25rz8v25.js → build-g81xqbb9.js} +1 -1
  18. package/dist/cli/{compile-4jnfxts9.js → compile-9y1w9zpj.js} +3 -3
  19. package/dist/cli/config/server.js +10699 -1538
  20. package/dist/cli/{dev-9tk5hn2e.js → dev-hyeb89hp.js} +5 -1
  21. package/dist/cli/{doctor-4nv2c2j3.js → doctor-h55y9hj1.js} +1 -1
  22. package/dist/cli/{generate-v75p2fct.js → generate-20x1pkf7.js} +4 -4
  23. package/dist/cli/{htmx-427swtdz.js → htmx-6mz2h7k1.js} +2 -2
  24. package/dist/cli/{index-bhbs6d5z.js → index-32ge2w1f.js} +12 -4
  25. package/dist/cli/{index-a4ws2jwd.js → index-3wz3mktm.js} +1 -1
  26. package/dist/cli/{index-b7hjgknf.js → index-9sksd8c8.js} +13 -4
  27. package/dist/cli/{index-eyzwc7gz.js → index-qbrzvmh9.js} +4 -2
  28. package/dist/cli/index-qw98g1p6.js +269 -0
  29. package/dist/cli/{index-434b7j4a.js → index-vtp20gwf.js} +69 -1
  30. package/dist/cli/{index-h7qhz02e.js → index-wk0pyxrg.js} +3 -0
  31. package/dist/cli/{index-k3y8cb6c.js → index-z6f43b20.js} +1 -1
  32. package/dist/cli/index.js +16 -16
  33. package/dist/cli/{islands-8sgky9gh.js → islands-dc54e5y1.js} +1 -1
  34. package/dist/cli/{ls-4m4yqwww.js → ls-b6zz24nt.js} +1 -1
  35. package/dist/cli/{mobile-hcxjr2gf.js → mobile-ajnnvqtv.js} +3 -3
  36. package/dist/cli/prerender-fqpp0m1j.js +10 -0
  37. package/dist/cli/{remove-1ycjx85k.js → remove-t8x1mrxg.js} +4 -4
  38. package/dist/cli/{start-mbaejxhm.js → start-d6p831ny.js} +3 -3
  39. package/dist/cli/{typecheck-dr068pmh.js → typecheck-stbt0qt5.js} +6 -1
  40. package/dist/cli/{workspace-1sycp9g1.js → workspace-61hh6jq1.js} +1 -1
  41. package/dist/client/chunks/index-6b66nzyf.js +381 -0
  42. package/dist/client/chunks/index-6b66nzyf.js.map +11 -0
  43. package/dist/client/chunks/{islands-rc28k5sx.js → islands-s2ta5ajb.js} +5 -2
  44. package/dist/client/chunks/{islands-rc28k5sx.js.map → islands-s2ta5ajb.js.map} +7 -6
  45. package/dist/client/index.js +160 -3
  46. package/dist/client/index.js.map +6 -4
  47. package/dist/client/navigation.js +764 -0
  48. package/dist/client/navigation.js.map +10 -0
  49. package/dist/client/prefetch.js +33 -375
  50. package/dist/client/prefetch.js.map +3 -4
  51. package/dist/core/streamingSlotRegistrar.js +5 -2
  52. package/dist/core/streamingSlotRegistrar.js.map +5 -4
  53. package/dist/core/streamingSlotRegistry.js +5 -2
  54. package/dist/core/streamingSlotRegistry.js.map +5 -4
  55. package/dist/dev/client/cspNonce.ts +28 -0
  56. package/dist/dev/client/handlers/html.ts +4 -3
  57. package/dist/dev/client/handlers/htmx.ts +3 -2
  58. package/dist/dev/client/handlers/svelte.ts +15 -90
  59. package/dist/dev/client/syncDevtools.ts +2 -1
  60. package/dist/dev/serverBootstrap.js +11 -4
  61. package/dist/i18n/index.js +543 -0
  62. package/dist/i18n/index.js.map +15 -0
  63. package/dist/index.js +6339 -2233
  64. package/dist/index.js.map +89 -54
  65. package/dist/islands/index.js +282 -40
  66. package/dist/islands/index.js.map +14 -10
  67. package/dist/mobile/browser.js +7 -2
  68. package/dist/mobile/browser.js.map +5 -4
  69. package/dist/mobile/index.js +7 -2
  70. package/dist/mobile/index.js.map +5 -4
  71. package/dist/mobile/remoteMacAgentEntry.js +1 -1
  72. package/dist/react/components/browser/index.js +94 -4
  73. package/dist/react/components/index.js +150 -10
  74. package/dist/react/components/index.js.map +15 -10
  75. package/dist/react/hooks/index.js +479 -13
  76. package/dist/react/hooks/index.js.map +12 -4
  77. package/dist/react/index.js +769 -166
  78. package/dist/react/index.js.map +32 -21
  79. package/dist/react/router/browser.js +21 -4
  80. package/dist/react/router/browser.js.map +5 -4
  81. package/dist/react/router/index.js +21 -4
  82. package/dist/react/router/index.js.map +5 -4
  83. package/dist/react/server.js +597 -203
  84. package/dist/react/server.js.map +25 -15
  85. package/dist/src/angular/zoneRuntime.d.ts +5 -0
  86. package/dist/src/build/buildReactServerComponents.d.ts +22 -0
  87. package/dist/src/build/downlevelAsyncForZone.d.ts +1 -0
  88. package/dist/src/build/fileRoutes.d.ts +65 -0
  89. package/dist/src/build/fonts/buildFonts.d.ts +25 -0
  90. package/dist/src/build/fonts/fallbackMetrics.d.ts +13 -0
  91. package/dist/src/build/fonts/googleFonts.d.ts +18 -0
  92. package/dist/src/build/fonts/injectFontTags.d.ts +7 -0
  93. package/dist/src/build/fonts/parseFontMetrics.d.ts +4 -0
  94. package/dist/src/build/generateReactIndexes.d.ts +7 -1
  95. package/dist/src/build/htmlIncludes.d.ts +16 -0
  96. package/dist/src/build/inlineSourceMapComment.d.ts +1 -0
  97. package/dist/src/build/scanConventions.d.ts +3 -0
  98. package/dist/src/build/vitals.d.ts +21 -0
  99. package/dist/src/client/formActions.d.ts +29 -0
  100. package/dist/src/client/index.d.ts +2 -0
  101. package/dist/src/client/navigation.d.ts +16 -0
  102. package/dist/src/client/prefetch.d.ts +2 -30
  103. package/dist/src/core/build.d.ts +2 -2
  104. package/dist/src/core/cspNonce.d.ts +12 -0
  105. package/dist/src/core/fileRouteAdapter.d.ts +15 -0
  106. package/dist/src/core/fileRoutes.d.ts +5 -0
  107. package/dist/src/core/formActionFlash.d.ts +25 -0
  108. package/dist/src/core/formActions.d.ts +249 -0
  109. package/dist/src/core/index.d.ts +5 -0
  110. package/dist/src/core/partialPrerender.d.ts +28 -0
  111. package/dist/src/core/partialPrerenderServe.d.ts +24 -0
  112. package/dist/src/core/precompressed.d.ts +11 -1
  113. package/dist/src/core/prerenderNonce.d.ts +9 -0
  114. package/dist/src/core/productionRuntime.d.ts +4 -2
  115. package/dist/src/core/serverOnlyStaticFiles.d.ts +8 -0
  116. package/dist/src/core/staticHtmlNonce.d.ts +2 -0
  117. package/dist/src/core/vitals.d.ts +108 -0
  118. package/dist/src/dev/angular/fastHmrCompiler.d.ts +1 -1
  119. package/dist/src/dev/client/cspNonce.d.ts +2 -0
  120. package/dist/src/dev/fileRouteRefresher.d.ts +5 -0
  121. package/dist/src/dev/importCost/instrument.d.ts +1 -1
  122. package/dist/src/dev/reactServerComponentsRebuild.d.ts +3 -0
  123. package/dist/src/i18n/defineMessages.d.ts +5 -0
  124. package/dist/src/i18n/formatMessage.d.ts +26 -0
  125. package/dist/src/i18n/index.d.ts +6 -0
  126. package/dist/src/i18n/intlCache.d.ts +5 -0
  127. package/dist/src/i18n/routing.d.ts +28 -0
  128. package/dist/src/i18n/translator.d.ts +11 -0
  129. package/dist/src/mobile/androidRelease.d.ts +2 -2
  130. package/dist/src/mobile/iosRelease.d.ts +4 -4
  131. package/dist/src/mobile/materializedBundle.d.ts +1 -1
  132. package/dist/src/mobile/mobileInspect.d.ts +1 -1
  133. package/dist/src/mobile/releaseArtifact.d.ts +2 -2
  134. package/dist/src/mobile/remoteMacProtocol.d.ts +2 -2
  135. package/dist/src/plugins/i18n.d.ts +30 -0
  136. package/dist/src/plugins/index.d.ts +2 -1
  137. package/dist/src/plugins/secureHeaders.d.ts +48 -0
  138. package/dist/src/react/components/Head.d.ts +1 -1
  139. package/dist/src/react/components/StreamSlot.browser.d.ts +1 -0
  140. package/dist/src/react/components/StreamSlot.d.ts +5 -1
  141. package/dist/src/react/components/SuspenseSlot.browser.d.ts +2 -0
  142. package/dist/src/react/components/SuspenseSlot.d.ts +12 -0
  143. package/dist/src/react/fileRoute.d.ts +18 -0
  144. package/dist/src/react/hooks/index.d.ts +4 -0
  145. package/dist/src/react/hooks/useFormAction.d.ts +42 -0
  146. package/dist/src/react/hooks/useI18n.d.ts +15 -0
  147. package/dist/src/react/index.d.ts +2 -0
  148. package/dist/src/react/server.d.ts +2 -0
  149. package/dist/src/react/serverComponents/constants.d.ts +11 -0
  150. package/dist/src/react/serverComponents/flightPayload.d.ts +2 -0
  151. package/dist/src/react/serverComponents/pageHandler.d.ts +14 -0
  152. package/dist/src/svelte/browser.d.ts +1 -0
  153. package/dist/src/svelte/fileRoute.d.ts +15 -0
  154. package/dist/src/svelte/i18n.d.ts +8 -0
  155. package/dist/src/svelte/index.d.ts +2 -0
  156. package/dist/src/svelte/lowerAwaitSlotSyntax.d.ts +5 -1
  157. package/dist/src/svelte/renderToReadableStream.d.ts +10 -2
  158. package/dist/src/svelte/router/browser.d.ts +3 -1
  159. package/dist/src/svelte/router/goto.d.ts +13 -10
  160. package/dist/src/svelte/router/guards.d.ts +43 -0
  161. package/dist/src/svelte/router/index.d.ts +3 -1
  162. package/dist/src/svelte/router/lazy.d.ts +17 -0
  163. package/dist/src/svelte/router/lazyModule.d.ts +29 -0
  164. package/dist/src/svelte/router/navigation.d.ts +55 -0
  165. package/dist/src/svelte/router/pushState.d.ts +4 -2
  166. package/dist/src/svelte/router/scroll.d.ts +34 -0
  167. package/dist/src/svelte/routerSsr.d.ts +9 -0
  168. package/dist/src/svelte/server.d.ts +1 -0
  169. package/dist/src/utils/cspNonceRef.d.ts +8 -0
  170. package/dist/src/utils/fontAssets.d.ts +17 -0
  171. package/dist/src/utils/formActionProtocol.d.ts +10 -0
  172. package/dist/src/utils/generateHeadElement.d.ts +1 -1
  173. package/dist/src/utils/index.d.ts +1 -0
  174. package/dist/src/utils/inlinePageCss.d.ts +18 -0
  175. package/dist/src/utils/loadConfig.d.ts +5 -0
  176. package/dist/src/utils/localeRef.d.ts +10 -0
  177. package/dist/src/utils/resolveConvention.d.ts +6 -1
  178. package/dist/src/utils/streamingSlots.d.ts +5 -0
  179. package/dist/src/vue/browser.d.ts +2 -0
  180. package/dist/src/vue/components/Image.d.ts +2 -2
  181. package/dist/src/vue/index.d.ts +2 -0
  182. package/dist/src/vue/serverDataPayload.d.ts +32 -0
  183. package/dist/src/vue/serverDataState.d.ts +9 -0
  184. package/dist/src/vue/useServerData.browser.d.ts +6 -0
  185. package/dist/src/vue/useServerData.d.ts +24 -0
  186. package/dist/svelte/browser.js +330 -3
  187. package/dist/svelte/browser.js.map +8 -4
  188. package/dist/svelte/components/AwaitSlot.svelte +5 -0
  189. package/dist/svelte/components/Head.svelte +50 -0
  190. package/dist/svelte/components/JsonLd.svelte +9 -1
  191. package/dist/svelte/components/StreamSlot.svelte +5 -0
  192. package/dist/svelte/index.js +1017 -117
  193. package/dist/svelte/index.js.map +38 -24
  194. package/dist/svelte/router/Link.svelte +40 -8
  195. package/dist/svelte/router/Route.svelte +157 -12
  196. package/dist/svelte/router/Route.svelte.d.ts +39 -5
  197. package/dist/svelte/router/Router.svelte +140 -25
  198. package/dist/svelte/router/Router.svelte.d.ts +5 -1
  199. package/dist/svelte/router/browser.ts +10 -0
  200. package/dist/svelte/router/goto.ts +15 -86
  201. package/dist/svelte/router/guards.ts +112 -0
  202. package/dist/svelte/router/index.ts +10 -0
  203. package/dist/svelte/router/lazy.ts +82 -0
  204. package/dist/svelte/router/lazyModule.ts +74 -0
  205. package/dist/svelte/router/navigation.ts +412 -0
  206. package/dist/svelte/router/pushState.ts +7 -4
  207. package/dist/svelte/router/scroll.ts +286 -0
  208. package/dist/svelte/server.js +747 -252
  209. package/dist/svelte/server.js.map +30 -20
  210. package/dist/types/angular.d.ts +2 -0
  211. package/dist/types/build.d.ts +37 -0
  212. package/dist/types/conventions.d.ts +3 -0
  213. package/dist/types/fileRoutes.d.ts +72 -0
  214. package/dist/types/fonts.d.ts +86 -0
  215. package/dist/types/formAction.d.ts +54 -0
  216. package/dist/types/globals.d.ts +10 -0
  217. package/dist/types/i18n.d.ts +185 -0
  218. package/dist/types/index.d.ts +4 -0
  219. package/dist/types/metadata.d.ts +11 -0
  220. package/dist/types/navigation.d.ts +37 -0
  221. package/dist/types/prefetch.d.ts +10 -0
  222. package/dist/types/sitemap.d.ts +4 -0
  223. package/dist/types/svelteRouter.d.ts +89 -2
  224. package/dist/types/svelteRouter.ts +112 -2
  225. package/dist/types/vue.d.ts +46 -1
  226. package/dist/utils/iconVersion.ts +34 -0
  227. package/dist/vue/browser.js +107 -11
  228. package/dist/vue/browser.js.map +7 -4
  229. package/dist/vue/components/index.js +5 -2
  230. package/dist/vue/components/index.js.map +5 -4
  231. package/dist/vue/index.js +712 -158
  232. package/dist/vue/index.js.map +32 -23
  233. package/dist/vue/server.js +310 -79
  234. package/dist/vue/server.js.map +20 -15
  235. package/package.json +9 -1
  236. package/dist/cli/prerender-mfnwsvyt.js +0 -7
  237. package/dist/src/plugins/pageRouter.d.ts +0 -1
  238. /package/dist/cli/{index-j7m8pq48.js → index-rervww4p.js} +0 -0
@@ -0,0 +1,764 @@
1
+ import {
2
+ readPageNonce,
3
+ consumePrefetch2
4
+ } from "./chunks/index-6b66nzyf.js";
5
+
6
+ // src/client/navigation.ts
7
+ var RUNTIME_KEY = Symbol.for("absolutejs.navigation");
8
+ var STATE_KEY = "__absoluteNavigation";
9
+ var OPT_OUT_SELECTOR = '[data-absolute-navigation="off"]';
10
+ var MODULE_RUN_PARAM = "absolute-nav";
11
+ var ANNOUNCER_ID = "absolute-navigation-announcer";
12
+ var ISLAND_STATE_GLOBAL = "__ABS_ISLAND_STATE__";
13
+ var DISPOSE_GLOBAL = "__ABSOLUTE_PAGE_DISPOSE__";
14
+ var READY_GLOBAL = "__ABSOLUTE_PAGE_READY__";
15
+ var STYLESHEET_TIMEOUT_MS = 5000;
16
+ var PAGE_READY_TIMEOUT_MS = 1e4;
17
+ var PAGE_READY_POLL_MS = 16;
18
+ var SCRIPT_PLACEHOLDER = "absolute-navigation-script";
19
+ var ID_RADIX = 36;
20
+ var PAGE_GLOBALS = [
21
+ "__INITIAL_PROPS__",
22
+ "__SSR_DIRTY__",
23
+ "__ABS_SLOT_HYDRATION_PENDING__",
24
+ "__ABS_SVELTE_LAZY_ROUTES__",
25
+ "__ABS_SVELTE_ISLAND_HTML__",
26
+ "__ABS_SERVER_ISLAND_HTML__",
27
+ "__ABSOLUTE_SERVER_DATA__",
28
+ "__ABS_ANGULAR_REQUEST_CONTEXT__",
29
+ DISPOSE_GLOBAL,
30
+ READY_GLOBAL
31
+ ];
32
+ var JAVASCRIPT_TYPES = new Set([
33
+ "",
34
+ "application/ecmascript",
35
+ "application/javascript",
36
+ "module",
37
+ "speculationrules",
38
+ "text/ecmascript",
39
+ "text/javascript"
40
+ ]);
41
+ var runtime;
42
+ var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
43
+ var createId = () => typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${Date.now().toString(ID_RADIX)}-${Math.random().toString(ID_RADIX).slice(2)}`;
44
+ var delay = (millis) => new Promise((resolve) => {
45
+ setTimeout(resolve, millis);
46
+ });
47
+ var readPublicRuntime = () => {
48
+ const value = Reflect.get(globalThis, RUNTIME_KEY);
49
+ if (!isRecord(value))
50
+ return;
51
+ const { disable, navigate } = value;
52
+ if (typeof disable !== "function" || typeof navigate !== "function") {
53
+ return;
54
+ }
55
+ return value;
56
+ };
57
+ var prefersReducedMotion = () => typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
58
+ var isNavigationLike = (value) => typeof value === "object" && value !== null && ("currentEntry" in value) && typeof Reflect.get(value, "addEventListener") === "function";
59
+ var readNavigationApi = () => {
60
+ const value = Reflect.get(window, "navigation");
61
+ return isNavigationLike(value) ? value : undefined;
62
+ };
63
+ var readEntryKey = (api) => {
64
+ const entry = api.currentEntry;
65
+ if (typeof entry !== "object" || entry === null)
66
+ return;
67
+ const key = Reflect.get(entry, "key");
68
+ return typeof key === "string" ? key : undefined;
69
+ };
70
+ var readStamp = (state) => {
71
+ if (!isRecord(state))
72
+ return;
73
+ const stamp = state[STATE_KEY];
74
+ if (!isRecord(stamp))
75
+ return;
76
+ const { doc, key } = stamp;
77
+ if (typeof doc !== "string" || typeof key !== "string")
78
+ return;
79
+ return { doc, key };
80
+ };
81
+ var isStampable = (state) => state === null || isRecord(state);
82
+ var stampState = (state, doc, key) => {
83
+ if (!isStampable(state))
84
+ return state;
85
+ return { ...isRecord(state) ? state : {}, [STATE_KEY]: { doc, key } };
86
+ };
87
+ var currentEntryKey = (nav) => nav.navigationApi ? readEntryKey(nav.navigationApi) : readStamp(window.history.state)?.key;
88
+ var currentEntryOwner = (nav) => {
89
+ if (!nav.navigationApi)
90
+ return readStamp(window.history.state)?.doc;
91
+ const key = readEntryKey(nav.navigationApi);
92
+ return key === undefined ? undefined : nav.entryOwners.get(key);
93
+ };
94
+ var isForeignEntry = (nav) => {
95
+ const owner = currentEntryOwner(nav);
96
+ if (owner === nav.documentId)
97
+ return false;
98
+ return owner !== undefined || nav.navigationApi !== undefined;
99
+ };
100
+ var recordCurrentEntry = (nav) => {
101
+ if (!nav.navigationApi)
102
+ return;
103
+ const key = readEntryKey(nav.navigationApi);
104
+ if (key !== undefined)
105
+ nav.entryOwners.set(key, nav.documentId);
106
+ };
107
+ var trackEntries = (nav, api) => {
108
+ const onEntryChange = (event) => {
109
+ if (Reflect.get(event, "navigationType") === "traverse")
110
+ return;
111
+ recordCurrentEntry(nav);
112
+ };
113
+ api.addEventListener("currententrychange", onEntryChange);
114
+ nav.teardown.push(() => api.removeEventListener("currententrychange", onEntryChange));
115
+ recordCurrentEntry(nav);
116
+ };
117
+ var patchHistory = (nav) => {
118
+ const { history } = window;
119
+ const originalPush = history.pushState;
120
+ const originalReplace = history.replaceState;
121
+ history.pushState = (state, unused, url) => Reflect.apply(originalPush, history, [
122
+ stampState(state, nav.documentId, createId()),
123
+ unused,
124
+ url
125
+ ]);
126
+ history.replaceState = (state, unused, url) => Reflect.apply(originalReplace, history, [
127
+ stampState(state, nav.documentId, readStamp(history.state)?.key ?? createId()),
128
+ unused,
129
+ url
130
+ ]);
131
+ history.replaceState(history.state, "");
132
+ nav.restoreHistory = () => {
133
+ history.pushState = originalPush;
134
+ history.replaceState = originalReplace;
135
+ };
136
+ };
137
+ var recordScroll = (nav) => {
138
+ if (nav.navigating)
139
+ return;
140
+ const key = currentEntryKey(nav);
141
+ if (key === undefined)
142
+ return;
143
+ nav.scroll.set(key, { left: window.scrollX, top: window.scrollY });
144
+ };
145
+ var trackScroll = (nav) => {
146
+ const onScroll = () => {
147
+ if (nav.scrollFrame !== 0)
148
+ return;
149
+ nav.scrollFrame = window.requestAnimationFrame(() => {
150
+ nav.scrollFrame = 0;
151
+ recordScroll(nav);
152
+ });
153
+ };
154
+ window.addEventListener("scroll", onScroll, { passive: true });
155
+ nav.teardown.push(() => {
156
+ window.removeEventListener("scroll", onScroll);
157
+ if (nav.scrollFrame !== 0)
158
+ window.cancelAnimationFrame(nav.scrollFrame);
159
+ });
160
+ };
161
+ var scrollToHash = (hash) => {
162
+ if (hash === "" || hash === "#")
163
+ return false;
164
+ const id = decodeURIComponent(hash.slice(1));
165
+ const target = document.getElementById(id) ?? document.getElementsByName(id)[0];
166
+ if (!target)
167
+ return false;
168
+ target.scrollIntoView();
169
+ return true;
170
+ };
171
+ var applyScroll = (request, url) => {
172
+ if (request.scroll) {
173
+ window.scrollTo(request.scroll.left, request.scroll.top);
174
+ return;
175
+ }
176
+ if (scrollToHash(url.hash))
177
+ return;
178
+ window.scrollTo(0, 0);
179
+ };
180
+ var reapplyScroll = (request, url) => {
181
+ if (window.scrollY !== 0 || window.scrollX !== 0)
182
+ return;
183
+ if (request.scroll && request.scroll.top + request.scroll.left > 0) {
184
+ window.scrollTo(request.scroll.left, request.scroll.top);
185
+ return;
186
+ }
187
+ if (!request.scroll)
188
+ scrollToHash(url.hash);
189
+ };
190
+ var RELATIVE_SPECIFIER = /^(?:\/|\.\.?\/|https?:)/;
191
+ var IMPORT_CALL_RE = /\bimport\(\s*(["'])([^"'\n]+)\1\s*\)/g;
192
+ var IMPORT_FROM_RE = /\b(from|import)\s*(["'])([^"'\n]+)\2/g;
193
+ var resolveSameOrigin = (specifier) => {
194
+ if (!RELATIVE_SPECIFIER.test(specifier))
195
+ return;
196
+ try {
197
+ const url = new URL(specifier, window.location.href);
198
+ return url.origin === window.location.origin ? url : undefined;
199
+ } catch {
200
+ return;
201
+ }
202
+ };
203
+ var moduleUrlFor = (nav, specifier) => {
204
+ const url = resolveSameOrigin(specifier);
205
+ if (!url)
206
+ return specifier;
207
+ if (!nav.evaluatedModules.has(url.href)) {
208
+ nav.evaluatedModules.add(url.href);
209
+ return specifier;
210
+ }
211
+ nav.moduleRun += 1;
212
+ url.searchParams.set(MODULE_RUN_PARAM, String(nav.moduleRun));
213
+ return url.href;
214
+ };
215
+ var rewriteModuleSpecifiers = (nav, source) => source.replace(IMPORT_CALL_RE, (_match, _quote, specifier) => `import(${JSON.stringify(moduleUrlFor(nav, specifier))})`).replace(IMPORT_FROM_RE, (match, keyword, _quote, specifier) => resolveSameOrigin(specifier) ? `${keyword} ${JSON.stringify(moduleUrlFor(nav, specifier))}` : match);
216
+ var rememberSpecifier = (nav, specifier) => {
217
+ const url = resolveSameOrigin(specifier);
218
+ if (url)
219
+ nav.evaluatedModules.add(url.href);
220
+ };
221
+ var rememberImportCalls = (nav, text) => {
222
+ for (const match of text.matchAll(IMPORT_CALL_RE)) {
223
+ rememberSpecifier(nav, match[2] ?? "");
224
+ }
225
+ };
226
+ var rememberDocumentModules = (nav) => {
227
+ for (const script of Array.from(document.scripts)) {
228
+ const src = script.getAttribute("src");
229
+ if (src && script.type === "module")
230
+ rememberSpecifier(nav, src);
231
+ rememberImportCalls(nav, script.textContent ?? "");
232
+ }
233
+ };
234
+ var TRUST_ALL = { kind: "all" };
235
+ var TRUST_NONE = { kind: "none" };
236
+ var readTrust = (response) => {
237
+ const policy = response.headers.get("content-security-policy");
238
+ if (!policy)
239
+ return TRUST_ALL;
240
+ const nonce = /'nonce-([^']+)'/.exec(policy)?.[1];
241
+ if (!nonce)
242
+ return TRUST_NONE;
243
+ const trust = { kind: "nonce", nonce };
244
+ return trust;
245
+ };
246
+ var isTrusted = (element, trust) => {
247
+ if (trust.kind === "all")
248
+ return true;
249
+ if (trust.kind === "none")
250
+ return false;
251
+ return element.getAttribute("nonce") === trust.nonce;
252
+ };
253
+ var takePrefetched = async (url) => {
254
+ const pending = consumePrefetch2(url.href) ?? consumePrefetch2(`${url.pathname}${url.search}`);
255
+ if (!pending)
256
+ return;
257
+ const response = await pending;
258
+ return response.ok ? response : undefined;
259
+ };
260
+ var fetchDocument = async (url, signal) => await takePrefetched(url) ?? fetch(url.href, {
261
+ credentials: "same-origin",
262
+ headers: { Accept: "text/html" },
263
+ signal
264
+ });
265
+ var escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
266
+ var adoptResponseNonce = (nav, html, trust) => {
267
+ if (trust.kind !== "nonce" || !nav.nonce)
268
+ return { html, trust };
269
+ const pattern = new RegExp(`\\bnonce=(["'])${escapeRegExp(trust.nonce)}\\1`, "g");
270
+ const adopted = { kind: "nonce", nonce: nav.nonce };
271
+ return {
272
+ html: html.replace(pattern, `nonce="${nav.nonce}"`),
273
+ trust: adopted
274
+ };
275
+ };
276
+ var loadDocument = async (nav, url, signal) => {
277
+ const response = await fetchDocument(url, signal);
278
+ const contentType = response.headers.get("content-type") ?? "";
279
+ const finalUrl = new URL(response.url || url.href);
280
+ finalUrl.hash = url.hash;
281
+ if (!response.ok || !contentType.includes("text/html") || finalUrl.origin !== window.location.origin) {
282
+ await response.body?.cancel().catch(() => {
283
+ return;
284
+ });
285
+ return;
286
+ }
287
+ const { html, trust } = adoptResponseNonce(nav, await response.text(), readTrust(response));
288
+ const parsed = new DOMParser().parseFromString(html, "text/html");
289
+ const loaded = {
290
+ document: parsed,
291
+ trust,
292
+ url: finalUrl
293
+ };
294
+ return loaded;
295
+ };
296
+ var isExecutableScript = (script) => JAVASCRIPT_TYPES.has((script.getAttribute("type") ?? "").trim().toLowerCase());
297
+ var extractScripts = (loaded) => Array.from(loaded.document.querySelectorAll("script")).filter(isExecutableScript).map((source) => {
298
+ const placeholder = loaded.document.createComment(SCRIPT_PLACEHOLDER);
299
+ const trusted = isTrusted(source, loaded.trust);
300
+ source.replaceWith(placeholder);
301
+ const pending = { placeholder, source, trusted };
302
+ return pending;
303
+ });
304
+ var applyNonce = (nav, element, trusted) => {
305
+ element.removeAttribute("nonce");
306
+ if (trusted && nav.nonce)
307
+ element.setAttribute("nonce", nav.nonce);
308
+ };
309
+ var waitForStylesheet = (link) => new Promise((resolve) => {
310
+ const timer = setTimeout(resolve, STYLESHEET_TIMEOUT_MS);
311
+ const done = () => {
312
+ clearTimeout(timer);
313
+ resolve();
314
+ };
315
+ link.addEventListener("load", done, { once: true });
316
+ link.addEventListener("error", done, { once: true });
317
+ });
318
+ var preloadStylesheets = async (loaded) => {
319
+ const links = Array.from(loaded.document.head.querySelectorAll('link[rel~="stylesheet"]'));
320
+ const media = new Map;
321
+ for (const link of links) {
322
+ media.set(link, link.getAttribute("media"));
323
+ link.setAttribute("media", "not all");
324
+ document.head.append(document.adoptNode(link));
325
+ }
326
+ await Promise.all(links.map(waitForStylesheet));
327
+ return media;
328
+ };
329
+ var restoreMedia = (media) => {
330
+ for (const [link, value] of media) {
331
+ if (value === null)
332
+ link.removeAttribute("media");
333
+ else
334
+ link.setAttribute("media", value);
335
+ }
336
+ };
337
+ var elementKey = (element) => {
338
+ const attributes = Array.from(element.attributes).filter((attribute) => attribute.name !== "nonce").map((attribute) => `${attribute.name}=${attribute.value}`).sort().join("\x00");
339
+ return `${element.tagName}\x01${attributes}\x01${element.textContent ?? ""}`;
340
+ };
341
+ var takeMatch = (available, node) => available.get(elementKey(node))?.shift();
342
+ var syncAttributes = (target, source) => {
343
+ for (const attribute of Array.from(target.attributes)) {
344
+ if (!source.hasAttribute(attribute.name))
345
+ target.removeAttribute(attribute.name);
346
+ }
347
+ for (const attribute of Array.from(source.attributes)) {
348
+ target.setAttribute(attribute.name, attribute.value);
349
+ }
350
+ };
351
+ var indexHead = (preloaded) => {
352
+ const available = new Map;
353
+ for (const child of Array.from(document.head.children)) {
354
+ if (preloaded.has(child) || child.tagName === "SCRIPT")
355
+ continue;
356
+ const key = elementKey(child);
357
+ available.set(key, [...available.get(key) ?? [], child]);
358
+ }
359
+ return available;
360
+ };
361
+ var resolveHeadNode = (nav, node, context) => {
362
+ if (!(node instanceof Element) || context.preloaded.has(node))
363
+ return node;
364
+ const existing = takeMatch(context.available, node);
365
+ if (existing)
366
+ return existing;
367
+ if (node.tagName === "STYLE") {
368
+ applyNonce(nav, node, isTrusted(node, context.trust));
369
+ }
370
+ return document.adoptNode(node);
371
+ };
372
+ var swapHead = (nav, loaded, headNodes, preloaded) => {
373
+ const context = {
374
+ available: indexHead(preloaded),
375
+ preloaded,
376
+ trust: loaded.trust
377
+ };
378
+ const nextNodes = headNodes.map((node) => resolveHeadNode(nav, node, context));
379
+ syncAttributes(document.head, loaded.document.head);
380
+ document.head.replaceChildren(...nextNodes);
381
+ };
382
+ var swapBody = (nav, loaded) => {
383
+ for (const style of Array.from(loaded.document.body.querySelectorAll("style"))) {
384
+ applyNonce(nav, style, isTrusted(style, loaded.trust));
385
+ }
386
+ const nextBody = document.adoptNode(loaded.document.body);
387
+ document.body.replaceWith(nextBody);
388
+ };
389
+ var disposeCurrentPage = async () => {
390
+ const dispose = Reflect.get(window, DISPOSE_GLOBAL);
391
+ Reflect.set(window, DISPOSE_GLOBAL, undefined);
392
+ Reflect.set(window, READY_GLOBAL, undefined);
393
+ if (typeof dispose === "function")
394
+ await Reflect.apply(dispose, window, []);
395
+ };
396
+ var canTearDown = () => typeof Reflect.get(window, DISPOSE_GLOBAL) === "function";
397
+ var islandStateOf = (value) => isRecord(value) ? value : undefined;
398
+ var keepIslandState = (live) => {
399
+ const current = islandStateOf(Reflect.get(globalThis, ISLAND_STATE_GLOBAL));
400
+ if (!live || current === live)
401
+ return live;
402
+ const merged = { ...current ?? {}, ...live };
403
+ Reflect.set(globalThis, ISLAND_STATE_GLOBAL, merged);
404
+ return merged;
405
+ };
406
+ var loadEvent = (script) => new Promise((resolve) => {
407
+ script.addEventListener("load", () => resolve(), { once: true });
408
+ script.addEventListener("error", () => resolve(), { once: true });
409
+ });
410
+ var createScript = (nav, pending) => {
411
+ const { source } = pending;
412
+ const script = document.createElement("script");
413
+ Array.from(source.attributes).filter(({ name }) => name !== "nonce" && name !== "src").forEach(({ name, value }) => script.setAttribute(name, value));
414
+ applyNonce(nav, script, pending.trusted);
415
+ const src = source.getAttribute("src");
416
+ const isModule = source.type === "module";
417
+ if (src)
418
+ script.src = isModule ? moduleUrlFor(nav, src) : src;
419
+ if (!src)
420
+ script.text = rewriteModuleSpecifiers(nav, source.text);
421
+ if (src && !source.hasAttribute("async"))
422
+ script.async = false;
423
+ return script;
424
+ };
425
+ var runScript = async (nav, pending, islandState) => {
426
+ if (!pending.placeholder.isConnected)
427
+ return;
428
+ const script = createScript(nav, pending);
429
+ const loaded = script.src ? loadEvent(script) : Promise.resolve();
430
+ pending.placeholder.replaceWith(script);
431
+ islandState.live = keepIslandState(islandState.live);
432
+ await loaded;
433
+ islandState.live = keepIslandState(islandState.live);
434
+ };
435
+ var clearPageGlobals = () => {
436
+ for (const name of PAGE_GLOBALS)
437
+ Reflect.deleteProperty(window, name);
438
+ };
439
+ var runScripts = (nav, scripts) => {
440
+ const islandState = {
441
+ live: islandStateOf(Reflect.get(globalThis, ISLAND_STATE_GLOBAL))
442
+ };
443
+ return scripts.reduce((previous, pending) => previous.then(() => runScript(nav, pending, islandState)), Promise.resolve());
444
+ };
445
+ var pollForPage = async (deadline) => {
446
+ if (canTearDown() || Date.now() >= deadline)
447
+ return;
448
+ await delay(PAGE_READY_POLL_MS);
449
+ await pollForPage(deadline);
450
+ };
451
+ var waitForPageReady = async (hasModules) => {
452
+ if (hasModules)
453
+ await pollForPage(Date.now() + PAGE_READY_TIMEOUT_MS);
454
+ const ready = Reflect.get(window, READY_GLOBAL);
455
+ if (ready instanceof Promise)
456
+ await ready.catch(() => {
457
+ return;
458
+ });
459
+ };
460
+ var loadsModules = (scripts) => scripts.some(({ source }) => source.type === "module" || /\bimport\s*\(/.test(source.text));
461
+ var ensureAnnouncer = () => {
462
+ const existing = document.getElementById(ANNOUNCER_ID);
463
+ if (existing)
464
+ return existing;
465
+ const region = document.createElement("div");
466
+ region.id = ANNOUNCER_ID;
467
+ region.setAttribute("aria-live", "assertive");
468
+ region.setAttribute("aria-atomic", "true");
469
+ region.setAttribute("role", "status");
470
+ Object.assign(region.style, {
471
+ border: "0",
472
+ clip: "rect(0 0 0 0)",
473
+ height: "1px",
474
+ margin: "-1px",
475
+ overflow: "hidden",
476
+ padding: "0",
477
+ position: "absolute",
478
+ whiteSpace: "nowrap",
479
+ width: "1px"
480
+ });
481
+ document.body.append(region);
482
+ return region;
483
+ };
484
+ var announcePage = () => {
485
+ const heading = document.querySelector("h1")?.textContent?.trim();
486
+ const text = document.title || heading || window.location.pathname;
487
+ ensureAnnouncer().textContent = text;
488
+ };
489
+ var resetFocus = () => {
490
+ const autofocus = document.querySelector("[autofocus]");
491
+ if (autofocus) {
492
+ autofocus.focus();
493
+ return;
494
+ }
495
+ if (document.activeElement instanceof HTMLElement) {
496
+ document.activeElement.blur();
497
+ }
498
+ };
499
+ var dispatch = (name, detail, cancelable) => window.dispatchEvent(new CustomEvent(name, { cancelable, detail }));
500
+ var outcome = (value) => value;
501
+ var reload = (request, committed) => {
502
+ if (committed || request.type === "traverse")
503
+ window.location.reload();
504
+ else if (request.replace)
505
+ window.location.replace(request.url.href);
506
+ else
507
+ window.location.assign(request.url.href);
508
+ return outcome("reloaded");
509
+ };
510
+ var commitHistory = (nav, request, url) => {
511
+ nav.documentId = request.documentId ?? createId();
512
+ if (request.type === "traverse") {
513
+ recordCurrentEntry(nav);
514
+ return;
515
+ }
516
+ const key = currentEntryKey(nav);
517
+ if (key !== undefined) {
518
+ nav.scroll.set(key, { left: window.scrollX, top: window.scrollY });
519
+ }
520
+ const state = stampState(null, nav.documentId, createId());
521
+ if (request.replace)
522
+ window.history.replaceState(state, "", url.href);
523
+ else
524
+ window.history.pushState(state, "", url.href);
525
+ recordCurrentEntry(nav);
526
+ };
527
+ var shouldAnimate = (nav) => nav.options.viewTransition !== false && typeof Reflect.get(document, "startViewTransition") === "function" && !prefersReducedMotion();
528
+ var readPromise = (value, name) => {
529
+ if (typeof value !== "object" || value === null)
530
+ return;
531
+ const promise = Reflect.get(value, name);
532
+ return promise instanceof Promise ? promise : undefined;
533
+ };
534
+ var runSwap = async (nav, swap) => {
535
+ const start = Reflect.get(document, "startViewTransition");
536
+ if (!shouldAnimate(nav) || typeof start !== "function") {
537
+ await swap();
538
+ return;
539
+ }
540
+ const transition = Reflect.apply(start, document, [swap]);
541
+ readPromise(transition, "ready")?.catch(() => {
542
+ return;
543
+ });
544
+ readPromise(transition, "finished")?.catch(() => {
545
+ return;
546
+ });
547
+ await readPromise(transition, "updateCallbackDone");
548
+ };
549
+ var swapDocument = async (nav, request, loaded, isStale) => {
550
+ const scripts = extractScripts(loaded);
551
+ const headNodes = Array.from(loaded.document.head.childNodes);
552
+ const media = await preloadStylesheets(loaded);
553
+ const preloaded = new Set(media.keys());
554
+ if (isStale()) {
555
+ preloaded.forEach((link) => link.remove());
556
+ return false;
557
+ }
558
+ commitHistory(nav, request, loaded.url);
559
+ const swap = async () => {
560
+ await disposeCurrentPage();
561
+ clearPageGlobals();
562
+ syncAttributes(document.documentElement, loaded.document.documentElement);
563
+ swapHead(nav, loaded, headNodes, preloaded);
564
+ swapBody(nav, loaded);
565
+ restoreMedia(media);
566
+ applyScroll(request, loaded.url);
567
+ };
568
+ await runSwap(nav, swap);
569
+ resetFocus();
570
+ await runScripts(nav, scripts);
571
+ await waitForPageReady(loadsModules(scripts));
572
+ reapplyScroll(request, loaded.url);
573
+ announcePage();
574
+ return true;
575
+ };
576
+ var isCurrent = (nav, token) => nav.token === token;
577
+ var performNavigation = async (nav, request) => {
578
+ nav.token += 1;
579
+ const { token } = nav;
580
+ nav.controller?.abort();
581
+ const controller = new AbortController;
582
+ nav.controller = controller;
583
+ const detail = {
584
+ type: request.type,
585
+ url: request.url.href
586
+ };
587
+ const proceed = dispatch("absolute:before-navigate", detail, request.type !== "traverse");
588
+ if (!proceed)
589
+ return outcome("cancelled");
590
+ if (!canTearDown())
591
+ return reload(request, false);
592
+ const committedBefore = nav.documentId;
593
+ try {
594
+ const loaded = await loadDocument(nav, request.url, controller.signal);
595
+ if (!isCurrent(nav, token))
596
+ return outcome("superseded");
597
+ if (!loaded)
598
+ return reload(request, false);
599
+ nav.navigating = true;
600
+ const swapped = await swapDocument(nav, request, loaded, () => !isCurrent(nav, token));
601
+ if (!swapped)
602
+ return outcome("superseded");
603
+ dispatch("absolute:after-navigate", detail, false);
604
+ return outcome("swapped");
605
+ } catch (error) {
606
+ if (!isCurrent(nav, token))
607
+ return outcome("superseded");
608
+ console.error("[absolute] navigation failed, loading the page:", error);
609
+ return reload(request, nav.documentId !== committedBefore);
610
+ } finally {
611
+ if (isCurrent(nav, token))
612
+ nav.navigating = false;
613
+ }
614
+ };
615
+ var isModifiedClick = (event) => event.metaKey || event.ctrlKey || event.shiftKey || event.altKey;
616
+ var isSamePageFragment = (url) => url.hash !== "" && url.pathname === window.location.pathname && url.search === window.location.search;
617
+ var findAnchor = (event) => {
618
+ const { target } = event;
619
+ if (!(target instanceof Element))
620
+ return null;
621
+ return target.closest("a[href]");
622
+ };
623
+ var isPlainClick = (event) => !event.defaultPrevented && event.button === 0 && !isModifiedClick(event);
624
+ var isOptedOut = (anchor) => anchor.target !== "" && anchor.target !== "_self" || anchor.hasAttribute("download") || anchor.relList.contains("external") || anchor.closest(OPT_OUT_SELECTOR) !== null;
625
+ var interceptableUrl = (nav, anchor) => {
626
+ if (isOptedOut(anchor))
627
+ return;
628
+ const url = new URL(anchor.href, window.location.href);
629
+ if (url.origin !== window.location.origin)
630
+ return;
631
+ if (isSamePageFragment(url))
632
+ return;
633
+ if (nav.options.shouldIntercept?.(url) === false)
634
+ return;
635
+ return url;
636
+ };
637
+ var listenForClicks = (nav) => {
638
+ const onClick = (event) => {
639
+ if (!isPlainClick(event))
640
+ return;
641
+ const anchor = findAnchor(event);
642
+ const url = anchor ? interceptableUrl(nav, anchor) : undefined;
643
+ if (!url || !canTearDown())
644
+ return;
645
+ event.preventDefault();
646
+ performNavigation(nav, { replace: false, type: "link", url });
647
+ };
648
+ window.addEventListener("click", onClick);
649
+ nav.teardown.push(() => window.removeEventListener("click", onClick));
650
+ };
651
+ var listenForTraversals = (nav) => {
652
+ const onPopState = (event) => {
653
+ if (!isForeignEntry(nav))
654
+ return;
655
+ event.stopImmediatePropagation();
656
+ const owner = currentEntryOwner(nav);
657
+ const key = currentEntryKey(nav);
658
+ performNavigation(nav, {
659
+ documentId: owner,
660
+ replace: false,
661
+ scroll: key === undefined ? undefined : nav.scroll.get(key),
662
+ type: "traverse",
663
+ url: new URL(window.location.href)
664
+ });
665
+ };
666
+ window.addEventListener("popstate", onPopState, { capture: true });
667
+ nav.teardown.push(() => window.removeEventListener("popstate", onPopState, { capture: true }));
668
+ };
669
+ var disableNavigation = () => {
670
+ const installed = readPublicRuntime();
671
+ if (installed && typeof installed.disable === "function") {
672
+ Reflect.apply(installed.disable, undefined, []);
673
+ }
674
+ };
675
+ var teardownRuntime = (nav) => {
676
+ nav.controller?.abort();
677
+ for (const cleanup of nav.teardown.splice(0))
678
+ cleanup();
679
+ nav.restoreHistory?.();
680
+ Reflect.deleteProperty(globalThis, RUNTIME_KEY);
681
+ if (runtime === nav)
682
+ runtime = undefined;
683
+ };
684
+ var navigateWith = (nav) => (href, options = {}) => {
685
+ const url = new URL(href, window.location.href);
686
+ if (url.origin !== window.location.origin) {
687
+ window.location.assign(url.href);
688
+ return Promise.resolve("reloaded");
689
+ }
690
+ return performNavigation(nav, {
691
+ replace: options.replace === true,
692
+ type: "navigate",
693
+ url
694
+ });
695
+ };
696
+ var enableNavigation = (options = {}) => {
697
+ if (typeof window === "undefined" || readPublicRuntime())
698
+ return;
699
+ const navigationApi = readNavigationApi();
700
+ const nav = {
701
+ controller: undefined,
702
+ documentId: createId(),
703
+ entryOwners: new Map,
704
+ evaluatedModules: new Set,
705
+ moduleRun: 0,
706
+ navigating: false,
707
+ navigationApi,
708
+ nonce: readPageNonce(),
709
+ options,
710
+ restoreHistory: undefined,
711
+ scroll: new Map,
712
+ scrollFrame: 0,
713
+ teardown: [],
714
+ token: 0
715
+ };
716
+ runtime = nav;
717
+ if (navigationApi)
718
+ trackEntries(nav, navigationApi);
719
+ else
720
+ patchHistory(nav);
721
+ rememberDocumentModules(nav);
722
+ trackScroll(nav);
723
+ listenForClicks(nav);
724
+ listenForTraversals(nav);
725
+ const publicRuntime = {
726
+ navigate: navigateWith(nav),
727
+ disable: () => teardownRuntime(nav)
728
+ };
729
+ Reflect.set(globalThis, RUNTIME_KEY, publicRuntime);
730
+ };
731
+ var OUTCOMES = new Set([
732
+ "cancelled",
733
+ "reloaded",
734
+ "superseded",
735
+ "swapped"
736
+ ]);
737
+ var isOutcome = (value) => OUTCOMES.has(value);
738
+ var isNavigationEnabled = () => typeof window !== "undefined" && readPublicRuntime() !== undefined;
739
+ var navigateDocument = async (href, options = {}) => {
740
+ const installed = readPublicRuntime();
741
+ const navigate = installed?.navigate;
742
+ if (typeof navigate === "function") {
743
+ const result = await Reflect.apply(navigate, undefined, [
744
+ href,
745
+ options
746
+ ]);
747
+ if (isOutcome(result))
748
+ return result;
749
+ }
750
+ if (options.replace)
751
+ window.location.replace(href);
752
+ else
753
+ window.location.assign(href);
754
+ return outcome("reloaded");
755
+ };
756
+ export {
757
+ disableNavigation,
758
+ enableNavigation,
759
+ isNavigationEnabled,
760
+ navigateDocument
761
+ };
762
+
763
+ //# debugId=4ABAC329D93956C564756E2164756E21
764
+ //# sourceMappingURL=navigation.js.map