react-router 7.15.1 → 7.17.0

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 (157) hide show
  1. package/CHANGELOG.md +27 -2
  2. package/dist/development/{browser-3AnU12UI.d.mts → browser-CGcs-0pD.d.mts} +2 -2
  3. package/dist/development/{browser-BOdXz9dK.d.ts → browser-D3uq9sI1.d.ts} +2 -2
  4. package/dist/development/{chunk-4N6VE7H7.mjs → chunk-6CSD65Y2.mjs} +12 -11
  5. package/dist/development/{chunk-RJYABSBD.mjs → chunk-ASILSGTR.mjs} +6 -6
  6. package/dist/development/{chunk-D6LUOGOQ.js → chunk-KFNXW4AL.js} +10 -10
  7. package/dist/{production/chunk-Y6IFXO7V.js → development/chunk-PBLBZ3QU.js} +7 -7
  8. package/dist/development/{chunk-66UKHEGQ.js → chunk-PULC7NLK.js} +100 -99
  9. package/dist/{production/context-ByvtofY2.d.mts → development/context-CmHpk1Ws.d.mts} +3 -3
  10. package/dist/development/{data-BqZ2x964.d.ts → data-D4xhSy90.d.ts} +1 -1
  11. package/dist/{production/data-BVUf681J.d.mts → development/data-U8FS-wNn.d.mts} +1 -1
  12. package/dist/development/dom-export.d.mts +4 -4
  13. package/dist/development/dom-export.d.ts +4 -4
  14. package/dist/development/dom-export.js +30 -30
  15. package/dist/development/dom-export.mjs +5 -5
  16. package/dist/{production/index-react-server-client-BS5F89FR.d.ts → development/index-react-server-client-CwU9bE5R.d.ts} +4 -4
  17. package/dist/{production/index-react-server-client-DY04-103.d.mts → development/index-react-server-client-DPrDrCew.d.mts} +3 -3
  18. package/dist/development/index-react-server-client.d.mts +3 -3
  19. package/dist/development/index-react-server-client.d.ts +3 -3
  20. package/dist/development/index-react-server-client.js +4 -4
  21. package/dist/development/index-react-server-client.mjs +2 -2
  22. package/dist/development/index-react-server.d.mts +1 -1
  23. package/dist/development/index-react-server.d.ts +1 -1
  24. package/dist/development/index-react-server.js +1 -1
  25. package/dist/development/index-react-server.mjs +1 -1
  26. package/dist/development/index.d.mts +18 -12
  27. package/dist/development/index.d.ts +18 -12
  28. package/dist/development/index.js +89 -89
  29. package/dist/development/index.mjs +3 -3
  30. package/dist/{production/instrumentation-cRWWLfsU.d.ts → development/instrumentation-1q4YhLGP.d.ts} +2 -2
  31. package/dist/development/lib/types/internal.d.mts +2 -2
  32. package/dist/development/lib/types/internal.d.ts +2 -2
  33. package/dist/development/lib/types/internal.js +1 -1
  34. package/dist/development/lib/types/internal.mjs +1 -1
  35. package/dist/development/{register-Bsscfj79.d.ts → register-CNAx3TXj.d.ts} +1 -1
  36. package/dist/development/{register-Df8okEea.d.mts → register-CqK96Zfk.d.mts} +1 -1
  37. package/dist/production/{browser-3AnU12UI.d.mts → browser-CGcs-0pD.d.mts} +2 -2
  38. package/dist/production/{browser-BOdXz9dK.d.ts → browser-D3uq9sI1.d.ts} +2 -2
  39. package/dist/production/{chunk-6S4627ZB.mjs → chunk-5TQZEVD5.mjs} +6 -6
  40. package/dist/{development/chunk-4YRVXM2U.js → production/chunk-CTIXC7EV.js} +7 -7
  41. package/dist/production/{chunk-PNZCCTKT.js → chunk-EN242BO4.js} +100 -99
  42. package/dist/production/{chunk-JAKZPQZC.mjs → chunk-OSYEOCBT.mjs} +12 -11
  43. package/dist/production/{chunk-HUBUW7R3.js → chunk-RTRY3JFT.js} +10 -10
  44. package/dist/{development/context-ByvtofY2.d.mts → production/context-CmHpk1Ws.d.mts} +3 -3
  45. package/dist/production/{data-BqZ2x964.d.ts → data-D4xhSy90.d.ts} +1 -1
  46. package/dist/{development/data-BVUf681J.d.mts → production/data-U8FS-wNn.d.mts} +1 -1
  47. package/dist/production/dom-export.d.mts +4 -4
  48. package/dist/production/dom-export.d.ts +4 -4
  49. package/dist/production/dom-export.js +30 -30
  50. package/dist/production/dom-export.mjs +5 -5
  51. package/dist/{development/index-react-server-client-BS5F89FR.d.ts → production/index-react-server-client-CwU9bE5R.d.ts} +4 -4
  52. package/dist/{development/index-react-server-client-DY04-103.d.mts → production/index-react-server-client-DPrDrCew.d.mts} +3 -3
  53. package/dist/production/index-react-server-client.d.mts +3 -3
  54. package/dist/production/index-react-server-client.d.ts +3 -3
  55. package/dist/production/index-react-server-client.js +4 -4
  56. package/dist/production/index-react-server-client.mjs +2 -2
  57. package/dist/production/index-react-server.d.mts +1 -1
  58. package/dist/production/index-react-server.d.ts +1 -1
  59. package/dist/production/index-react-server.js +1 -1
  60. package/dist/production/index-react-server.mjs +1 -1
  61. package/dist/production/index.d.mts +18 -12
  62. package/dist/production/index.d.ts +18 -12
  63. package/dist/production/index.js +89 -89
  64. package/dist/production/index.mjs +3 -3
  65. package/dist/{development/instrumentation-cRWWLfsU.d.ts → production/instrumentation-1q4YhLGP.d.ts} +2 -2
  66. package/dist/production/lib/types/internal.d.mts +2 -2
  67. package/dist/production/lib/types/internal.d.ts +2 -2
  68. package/dist/production/lib/types/internal.js +1 -1
  69. package/dist/production/lib/types/internal.mjs +1 -1
  70. package/dist/production/{register-Bsscfj79.d.ts → register-CNAx3TXj.d.ts} +1 -1
  71. package/dist/production/{register-Df8okEea.d.mts → register-CqK96Zfk.d.mts} +1 -1
  72. package/docs/explanation/backend-for-frontend.md +50 -0
  73. package/docs/explanation/code-splitting.md +61 -0
  74. package/docs/explanation/concurrency.md +135 -0
  75. package/docs/explanation/form-vs-fetcher.md +292 -0
  76. package/docs/explanation/hot-module-replacement.md +137 -0
  77. package/docs/explanation/hydration.md +14 -0
  78. package/docs/explanation/index-query-param.md +86 -0
  79. package/docs/explanation/index.md +4 -0
  80. package/docs/explanation/lazy-route-discovery.md +78 -0
  81. package/docs/explanation/location.md +6 -0
  82. package/docs/explanation/progressive-enhancement.md +150 -0
  83. package/docs/explanation/race-conditions.md +88 -0
  84. package/docs/explanation/react-transitions.md +160 -0
  85. package/docs/explanation/route-matching.md +7 -0
  86. package/docs/explanation/server-client-execution.md +4 -0
  87. package/docs/explanation/sessions-and-cookies.md +465 -0
  88. package/docs/explanation/special-files.md +16 -0
  89. package/docs/explanation/state-management.md +524 -0
  90. package/docs/explanation/styling.md +87 -0
  91. package/docs/explanation/type-safety.md +82 -0
  92. package/docs/how-to/accessibility.md +44 -0
  93. package/docs/how-to/client-data.md +199 -0
  94. package/docs/how-to/data-strategy.md +317 -0
  95. package/docs/how-to/error-boundary.md +231 -0
  96. package/docs/how-to/error-reporting.md +142 -0
  97. package/docs/how-to/fetchers.md +307 -0
  98. package/docs/how-to/file-route-conventions.md +410 -0
  99. package/docs/how-to/file-uploads.md +217 -0
  100. package/docs/how-to/form-validation.md +120 -0
  101. package/docs/how-to/headers.md +164 -0
  102. package/docs/how-to/index.md +4 -0
  103. package/docs/how-to/instrumentation.md +556 -0
  104. package/docs/how-to/meta.md +40 -0
  105. package/docs/how-to/middleware.md +763 -0
  106. package/docs/how-to/navigation-blocking.md +233 -0
  107. package/docs/how-to/optimize-revalidation.md +12 -0
  108. package/docs/how-to/pre-rendering.md +225 -0
  109. package/docs/how-to/presets.md +103 -0
  110. package/docs/how-to/react-server-components.md +899 -0
  111. package/docs/how-to/resource-routes.md +126 -0
  112. package/docs/how-to/route-module-type-safety.md +100 -0
  113. package/docs/how-to/search-params.md +4 -0
  114. package/docs/how-to/security.md +30 -0
  115. package/docs/how-to/server-bundles.md +66 -0
  116. package/docs/how-to/spa.md +120 -0
  117. package/docs/how-to/status.md +63 -0
  118. package/docs/how-to/suspense.md +132 -0
  119. package/docs/how-to/using-handle.md +117 -0
  120. package/docs/how-to/view-transitions.md +237 -0
  121. package/docs/how-to/webhook.md +50 -0
  122. package/docs/index.md +39 -0
  123. package/docs/start/data/actions.md +138 -0
  124. package/docs/start/data/custom.md +198 -0
  125. package/docs/start/data/data-loading.md +44 -0
  126. package/docs/start/data/index.md +4 -0
  127. package/docs/start/data/installation.md +52 -0
  128. package/docs/start/data/navigating.md +12 -0
  129. package/docs/start/data/pending-ui.md +12 -0
  130. package/docs/start/data/route-object.md +268 -0
  131. package/docs/start/data/routing.md +281 -0
  132. package/docs/start/data/testing.md +8 -0
  133. package/docs/start/declarative/index.md +4 -0
  134. package/docs/start/declarative/installation.md +43 -0
  135. package/docs/start/declarative/navigating.md +133 -0
  136. package/docs/start/declarative/routing.md +237 -0
  137. package/docs/start/declarative/url-values.md +65 -0
  138. package/docs/start/framework/actions.md +174 -0
  139. package/docs/start/framework/data-loading.md +201 -0
  140. package/docs/start/framework/deploying.md +96 -0
  141. package/docs/start/framework/index.md +4 -0
  142. package/docs/start/framework/installation.md +41 -0
  143. package/docs/start/framework/navigating.md +182 -0
  144. package/docs/start/framework/pending-ui.md +142 -0
  145. package/docs/start/framework/rendering.md +59 -0
  146. package/docs/start/framework/route-module.md +527 -0
  147. package/docs/start/framework/routing.md +362 -0
  148. package/docs/start/framework/testing.md +133 -0
  149. package/docs/start/index.md +4 -0
  150. package/docs/start/modes.md +201 -0
  151. package/docs/upgrading/component-routes.md +363 -0
  152. package/docs/upgrading/future.md +280 -0
  153. package/docs/upgrading/index.md +4 -0
  154. package/docs/upgrading/remix.md +403 -0
  155. package/docs/upgrading/router-provider.md +442 -0
  156. package/docs/upgrading/v6.md +382 -0
  157. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # `react-router`
2
2
 
3
+ ## v7.17.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Ship a subset of the official documentation inside the `react-router` package ([#15121](https://github.com/remix-run/react-router/pull/15121))
8
+
9
+ - Markdown docs are now available in `node_modules/react-router/docs`, letting AI coding agents and the React Router agent skills read official docs locally
10
+ - Excludes auto-generated API docs (`api/`), `community/` content, and tutorials (`tutorials/`)
11
+
12
+ ## v7.16.0
13
+
14
+ ### Minor Changes
15
+
16
+ - Stabilize `future.unstable_trailingSlashAwareDataRequests` as `future.v8_trailingSlashAwareDataRequests` ([#15098](https://github.com/remix-run/react-router/pull/15098))
17
+
18
+ ### Patch Changes
19
+
20
+ - Disable manifest path when lazy route dicovery is disabled ([#15068](https://github.com/remix-run/react-router/pull/15068))
21
+
22
+ - Fix browser URL creation to use the configured history window instead of the global window. ([#15066](https://github.com/remix-run/react-router/pull/15066))
23
+ - Pass the history/router window through to `createBrowserURLImpl` so custom window contexts keep the correct URL origin.
24
+
25
+ - Fix `useNavigation()` return type to preserve discriminated union across navigation states ([#15095](https://github.com/remix-run/react-router/pull/15095))
26
+
27
+ - Widen `MetaDescriptor` `script:ld+json` type from `LdJsonObject` to `LdJsonObject | LdJsonObject[]` to permit multiple JSON-LD schemas in a single `<script type="application/ld+json">` tag emitted by `<Meta />` ([#15082](https://github.com/remix-run/react-router/pull/15082))
28
+
3
29
  ## v7.15.1
4
30
 
5
31
  ### Patch Changes
@@ -12,10 +38,9 @@
12
38
 
13
39
  ### Unstable Changes
14
40
 
15
- ⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_
41
+ ⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_
16
42
 
17
43
  - Add a new `unstable_useRouterState()` hook that consolidates access to active and pending router states (RFC: #12358) ([#15017](https://github.com/remix-run/react-router/pull/15017))
18
-
19
44
  - Data/Framework/RSC only — throws when used without a data router
20
45
  - This should allow you to consolidate usages of the following hooks which will likely be deprecated and removed in a future major version
21
46
  - `useLocation`
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { R as RouterInit } from './context-ByvtofY2.mjs';
3
- import { L as Location, C as ClientActionFunction, a as ClientLoaderFunction, b as LinksFunction, M as MetaFunction, S as ShouldRevalidateFunction, P as Params, c as RouterContextProvider, A as ActionFunction, H as HeadersFunction, d as LoaderFunction } from './data-BVUf681J.mjs';
2
+ import { R as RouterInit } from './context-CmHpk1Ws.mjs';
3
+ import { L as Location, C as ClientActionFunction, a as ClientLoaderFunction, b as LinksFunction, M as MetaFunction, S as ShouldRevalidateFunction, P as Params, c as RouterContextProvider, A as ActionFunction, H as HeadersFunction, d as LoaderFunction } from './data-U8FS-wNn.mjs';
4
4
 
5
5
  declare function getRequest(): Request;
6
6
  type RSCRouteConfigEntryBase = {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { R as RouterInit } from './instrumentation-cRWWLfsU.js';
3
- import { L as Location, C as ClientActionFunction, a as ClientLoaderFunction, b as LinksFunction, M as MetaFunction, S as ShouldRevalidateFunction, P as Params, c as RouterContextProvider, A as ActionFunction, H as HeadersFunction, d as LoaderFunction } from './data-BqZ2x964.js';
2
+ import { R as RouterInit } from './instrumentation-1q4YhLGP.js';
3
+ import { L as Location, C as ClientActionFunction, a as ClientLoaderFunction, b as LinksFunction, M as MetaFunction, S as ShouldRevalidateFunction, P as Params, c as RouterContextProvider, A as ActionFunction, H as HeadersFunction, d as LoaderFunction } from './data-D4xhSy90.js';
4
4
 
5
5
  declare function getRequest(): Request;
6
6
  type RSCRouteConfigEntryBase = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v7.15.1
2
+ * react-router v7.17.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -325,7 +325,7 @@ function getUrlBasedHistory(getLocation, createHref2, validateLocation, options
325
325
  }
326
326
  }
327
327
  function createURL(to) {
328
- return createBrowserURLImpl(to);
328
+ return createBrowserURLImpl(window2, to);
329
329
  }
330
330
  let history = {
331
331
  get action() {
@@ -365,10 +365,10 @@ function getUrlBasedHistory(getLocation, createHref2, validateLocation, options
365
365
  };
366
366
  return history;
367
367
  }
368
- function createBrowserURLImpl(to, isAbsolute = false) {
368
+ function createBrowserURLImpl(windowImpl, to, isAbsolute = false) {
369
369
  let base = "http://localhost";
370
- if (typeof window !== "undefined") {
371
- base = window.location.origin !== "null" ? window.location.origin : window.location.href;
370
+ if (windowImpl) {
371
+ base = windowImpl.location.origin !== "null" ? windowImpl.location.origin : windowImpl.location.href;
372
372
  }
373
373
  invariant(base, "No window.location.(origin|href) available to create URL");
374
374
  let href = typeof to === "string" ? to : createPath(to);
@@ -2856,7 +2856,7 @@ function createRouter(init) {
2856
2856
  if (redirect2.response.headers.has("X-Remix-Reload-Document")) {
2857
2857
  isDocumentReload = true;
2858
2858
  } else if (isAbsoluteUrl(location)) {
2859
- const url = createBrowserURLImpl(location, true);
2859
+ const url = createBrowserURLImpl(routerWindow, location, true);
2860
2860
  isDocumentReload = // Hard reload if it's an absolute URL to a new origin
2861
2861
  url.origin !== routerWindow.location.origin || // Hard reload if it's an absolute URL that does not match our basename
2862
2862
  stripBasename(url.pathname, basename) == null;
@@ -9727,7 +9727,7 @@ function RSCPrefetchPageLinksImpl({
9727
9727
  let url = singleFetchUrl(
9728
9728
  page,
9729
9729
  basename,
9730
- future.unstable_trailingSlashAwareDataRequests,
9730
+ future.v8_trailingSlashAwareDataRequests,
9731
9731
  "rsc"
9732
9732
  );
9733
9733
  let hasSomeRoutesWithShouldRevalidate = false;
@@ -9745,7 +9745,7 @@ function RSCPrefetchPageLinksImpl({
9745
9745
  return [url.pathname + url.search];
9746
9746
  }, [
9747
9747
  basename,
9748
- future.unstable_trailingSlashAwareDataRequests,
9748
+ future.v8_trailingSlashAwareDataRequests,
9749
9749
  page,
9750
9750
  location,
9751
9751
  nextMatches
@@ -9808,7 +9808,7 @@ function PrefetchPageLinksImpl({
9808
9808
  let url = singleFetchUrl(
9809
9809
  page,
9810
9810
  basename,
9811
- future.unstable_trailingSlashAwareDataRequests,
9811
+ future.v8_trailingSlashAwareDataRequests,
9812
9812
  "data"
9813
9813
  );
9814
9814
  if (foundOptOutRoute && routesParams.size > 0) {
@@ -9820,7 +9820,7 @@ function PrefetchPageLinksImpl({
9820
9820
  return [url.pathname + url.search];
9821
9821
  }, [
9822
9822
  basename,
9823
- future.unstable_trailingSlashAwareDataRequests,
9823
+ future.v8_trailingSlashAwareDataRequests,
9824
9824
  loaderData,
9825
9825
  location,
9826
9826
  manifest,
@@ -10233,7 +10233,7 @@ var isBrowser2 = typeof window !== "undefined" && typeof window.document !== "un
10233
10233
  try {
10234
10234
  if (isBrowser2) {
10235
10235
  window.__reactRouterVersion = // @ts-expect-error
10236
- "7.15.1";
10236
+ "7.17.0";
10237
10237
  }
10238
10238
  } catch (e) {
10239
10239
  }
@@ -11282,6 +11282,7 @@ function createStaticRouter(routes, context, opts = {}) {
11282
11282
  return {
11283
11283
  v8_middleware: false,
11284
11284
  v8_passThroughRequests: false,
11285
+ v8_trailingSlashAwareDataRequests: false,
11285
11286
  ...opts?.future
11286
11287
  };
11287
11288
  },
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v7.15.1
2
+ * react-router v7.17.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -54,7 +54,7 @@ import {
54
54
  withComponentProps,
55
55
  withErrorBoundaryProps,
56
56
  withHydrateFallbackProps
57
- } from "./chunk-4N6VE7H7.mjs";
57
+ } from "./chunk-6CSD65Y2.mjs";
58
58
 
59
59
  // lib/dom/ssr/server.tsx
60
60
  import * as React from "react";
@@ -144,7 +144,7 @@ function createRoutesStub(routes, _context) {
144
144
  future: {
145
145
  v8_passThroughRequests: future?.v8_passThroughRequests === true,
146
146
  v8_middleware: future?.v8_middleware === true,
147
- unstable_trailingSlashAwareDataRequests: future?.unstable_trailingSlashAwareDataRequests === true
147
+ v8_trailingSlashAwareDataRequests: future?.v8_trailingSlashAwareDataRequests === true
148
148
  },
149
149
  manifest: {
150
150
  routes: {},
@@ -856,7 +856,7 @@ function getNormalizedPath(request, basename, future) {
856
856
  basename = basename || "/";
857
857
  let url = new URL(request.url);
858
858
  let pathname = url.pathname;
859
- if (future?.unstable_trailingSlashAwareDataRequests) {
859
+ if (future?.v8_trailingSlashAwareDataRequests) {
860
860
  if (pathname.endsWith("/_.data")) {
861
861
  pathname = pathname.replace(/_\.data$/, "");
862
862
  } else {
@@ -1252,7 +1252,7 @@ function derive(build, mode) {
1252
1252
  build.routeDiscovery.manifestPath,
1253
1253
  build.basename
1254
1254
  );
1255
- if (requestUrl.pathname === manifestUrl) {
1255
+ if (build.routeDiscovery.mode === "lazy" && requestUrl.pathname === manifestUrl) {
1256
1256
  try {
1257
1257
  let res = await handleManifestRequest(
1258
1258
  build,
@@ -2451,7 +2451,7 @@ function RSCStaticRouter({ getPayload }) {
2451
2451
  // These flags have no runtime impact so can always be false. If we add
2452
2452
  // flags that drive runtime behavior they'll need to be proxied through.
2453
2453
  v8_middleware: false,
2454
- unstable_trailingSlashAwareDataRequests: true,
2454
+ v8_trailingSlashAwareDataRequests: true,
2455
2455
  // always on for RSC
2456
2456
  v8_passThroughRequests: true
2457
2457
  // always on for RSC
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/**
2
- * react-router v7.15.1
2
+ * react-router v7.17.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -325,7 +325,7 @@ function getUrlBasedHistory(getLocation, createHref, validateLocation, options =
325
325
  }
326
326
  }
327
327
  function createURL(to) {
328
- return createBrowserURLImpl(to);
328
+ return createBrowserURLImpl(window2, to);
329
329
  }
330
330
  let history = {
331
331
  get action() {
@@ -365,10 +365,10 @@ function getUrlBasedHistory(getLocation, createHref, validateLocation, options =
365
365
  };
366
366
  return history;
367
367
  }
368
- function createBrowserURLImpl(to, isAbsolute = false) {
368
+ function createBrowserURLImpl(windowImpl, to, isAbsolute = false) {
369
369
  let base = "http://localhost";
370
- if (typeof window !== "undefined") {
371
- base = window.location.origin !== "null" ? window.location.origin : window.location.href;
370
+ if (windowImpl) {
371
+ base = windowImpl.location.origin !== "null" ? windowImpl.location.origin : windowImpl.location.href;
372
372
  }
373
373
  invariant(base, "No window.location.(origin|href) available to create URL");
374
374
  let href = typeof to === "string" ? to : createPath(to);
@@ -2856,7 +2856,7 @@ function createRouter(init) {
2856
2856
  if (redirect2.response.headers.has("X-Remix-Reload-Document")) {
2857
2857
  isDocumentReload = true;
2858
2858
  } else if (isAbsoluteUrl(location)) {
2859
- const url = createBrowserURLImpl(location, true);
2859
+ const url = createBrowserURLImpl(routerWindow, location, true);
2860
2860
  isDocumentReload = // Hard reload if it's an absolute URL to a new origin
2861
2861
  url.origin !== routerWindow.location.origin || // Hard reload if it's an absolute URL that does not match our basename
2862
2862
  stripBasename(url.pathname, basename) == null;
@@ -8881,7 +8881,7 @@ function RSCPrefetchPageLinksImpl({
8881
8881
  let url = singleFetchUrl(
8882
8882
  page,
8883
8883
  basename,
8884
- future.unstable_trailingSlashAwareDataRequests,
8884
+ future.v8_trailingSlashAwareDataRequests,
8885
8885
  "rsc"
8886
8886
  );
8887
8887
  let hasSomeRoutesWithShouldRevalidate = false;
@@ -8899,7 +8899,7 @@ function RSCPrefetchPageLinksImpl({
8899
8899
  return [url.pathname + url.search];
8900
8900
  }, [
8901
8901
  basename,
8902
- future.unstable_trailingSlashAwareDataRequests,
8902
+ future.v8_trailingSlashAwareDataRequests,
8903
8903
  page,
8904
8904
  location,
8905
8905
  nextMatches
@@ -8962,7 +8962,7 @@ function PrefetchPageLinksImpl({
8962
8962
  let url = singleFetchUrl(
8963
8963
  page,
8964
8964
  basename,
8965
- future.unstable_trailingSlashAwareDataRequests,
8965
+ future.v8_trailingSlashAwareDataRequests,
8966
8966
  "data"
8967
8967
  );
8968
8968
  if (foundOptOutRoute && routesParams.size > 0) {
@@ -8974,7 +8974,7 @@ function PrefetchPageLinksImpl({
8974
8974
  return [url.pathname + url.search];
8975
8975
  }, [
8976
8976
  basename,
8977
- future.unstable_trailingSlashAwareDataRequests,
8977
+ future.v8_trailingSlashAwareDataRequests,
8978
8978
  loaderData,
8979
8979
  location,
8980
8980
  manifest,
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }/**
2
- * react-router v7.15.1
2
+ * react-router v7.17.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- var _chunkHUBUW7R3js = require('./chunk-HUBUW7R3.js');
17
+ var _chunkKFNXW4ALjs = require('./chunk-KFNXW4AL.js');
18
18
 
19
19
  // lib/dom/ssr/hydration.tsx
20
20
  function getHydrationData({
@@ -29,12 +29,12 @@ function getHydrationData({
29
29
  ...state,
30
30
  loaderData: { ...state.loaderData }
31
31
  };
32
- let initialMatches = _chunkHUBUW7R3js.matchRoutes.call(void 0, routes, location, basename);
32
+ let initialMatches = _chunkKFNXW4ALjs.matchRoutes.call(void 0, routes, location, basename);
33
33
  if (initialMatches) {
34
34
  for (let match of initialMatches) {
35
35
  let routeId = match.route.id;
36
36
  let routeInfo = getRouteInfo(routeId);
37
- if (_chunkHUBUW7R3js.shouldHydrateRouteLoader.call(void 0,
37
+ if (_chunkKFNXW4ALjs.shouldHydrateRouteLoader.call(void 0,
38
38
  routeId,
39
39
  routeInfo.clientLoader,
40
40
  routeInfo.hasLoader,
@@ -112,7 +112,7 @@ function RSCDefaultRootErrorBoundaryImpl({
112
112
  }
113
113
  }
114
114
  );
115
- if (_chunkHUBUW7R3js.isRouteErrorResponse.call(void 0, error)) {
115
+ if (_chunkKFNXW4ALjs.isRouteErrorResponse.call(void 0, error)) {
116
116
  return /* @__PURE__ */ _react2.default.createElement(
117
117
  ErrorWrapper,
118
118
  {
@@ -120,7 +120,7 @@ function RSCDefaultRootErrorBoundaryImpl({
120
120
  title: "Unhandled Thrown Response!"
121
121
  },
122
122
  /* @__PURE__ */ _react2.default.createElement("h1", { style: { fontSize: "24px" } }, error.status, " ", error.statusText),
123
- _chunkHUBUW7R3js.ENABLE_DEV_WARNINGS ? heyDeveloper : null
123
+ _chunkKFNXW4ALjs.ENABLE_DEV_WARNINGS ? heyDeveloper : null
124
124
  );
125
125
  }
126
126
  let errorInstance;
@@ -146,7 +146,7 @@ function RSCDefaultRootErrorBoundaryImpl({
146
146
  function RSCDefaultRootErrorBoundary({
147
147
  hasRootLayout
148
148
  }) {
149
- let error = _chunkHUBUW7R3js.useRouteError.call(void 0, );
149
+ let error = _chunkKFNXW4ALjs.useRouteError.call(void 0, );
150
150
  if (hasRootLayout === void 0) {
151
151
  throw new Error("Missing 'hasRootLayout' prop");
152
152
  }