diff --git a/app/actions/color-scheme/components.tsx b/app/actions/color-scheme/components.tsx index 9ea085e8..ddad5402 100644 --- a/app/actions/color-scheme/components.tsx +++ b/app/actions/color-scheme/components.tsx @@ -1,6 +1,5 @@ import { useLayoutEffect, useMemo } from "react"; -import { useNavigation, useRouteLoaderData } from "react-router"; -import type { loader as rootLoader } from "../../root"; +import { useNavigation, unstable_useRoute as useRoute } from "react-router"; import type { ColorScheme } from "./server"; export function getColorScheme(formData: FormData): ColorScheme | null { @@ -18,7 +17,7 @@ export function getColorScheme(formData: FormData): ColorScheme | null { } export function useColorScheme(): ColorScheme { - let rootLoaderData = useRouteLoaderData("root"); + let { loaderData: rootLoaderData } = useRoute("root"); if (!rootLoaderData) { throw new Error("useColorScheme must be used within a root loader"); } diff --git a/app/components/docs-header/use-header-data.ts b/app/components/docs-header/use-header-data.ts index fc6444a2..26519175 100644 --- a/app/components/docs-header/use-header-data.ts +++ b/app/components/docs-header/use-header-data.ts @@ -1,9 +1,12 @@ -import { useLoaderData } from "react-router"; -import type { HeaderData } from "./data.server"; +import { unstable_useRoute as useRoute } from "react-router"; import invariant from "tiny-invariant"; export function useHeaderData() { - let data = useLoaderData() as { header: HeaderData }; - invariant(data && data.header, "Expected `header` in loader data"); - return data.header; + let docsData = useRoute("docs"); + let v6IndexLayoutData = useRoute("v6-index-layout"); + + let data = docsData || v6IndexLayoutData; + + invariant(data?.loaderData?.header, "Expected `header` in loader data"); + return data.loaderData.header; } diff --git a/app/hooks/use-docs-layout.ts b/app/hooks/use-docs-layout.ts deleted file mode 100644 index 17c96d1a..00000000 --- a/app/hooks/use-docs-layout.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useRouteLoaderData } from "react-router"; -import type { Route } from "../pages/+types/docs-layout"; - -export function useDocsLayoutRouteLoaderData() { - return useRouteLoaderData("docs"); -} diff --git a/app/modules/docsearch.tsx b/app/modules/docsearch.tsx index ba5de23b..4dddabd3 100644 --- a/app/modules/docsearch.tsx +++ b/app/modules/docsearch.tsx @@ -7,7 +7,7 @@ import { useState, } from "react"; import { createPortal } from "react-dom"; -import { useMatches } from "react-router"; +import { unstable_useRoute as useRoute } from "react-router"; import type { DocSearchProps } from "@docsearch/react"; import { DocSearchModal as OriginalDocSearchModal, @@ -110,16 +110,14 @@ export function DocSearchButton() { * Returns the version to use for the DocSearch facet */ function useDocSearchFacetVersion() { - let matches = useMatches(); + let docsData = useRoute("docs"); + let v6IndexLayoutData = useRoute("v6-index-layout"); - let headerMatch = matches.find( - ({ loaderData }) => - loaderData && typeof loaderData === "object" && "header" in loaderData, - )?.loaderData as { header: HeaderData } | undefined; + let data = docsData || v6IndexLayoutData; // Users can cmd+k on any page, so always assume v7 if there's no further context let version: HeaderData["docSearchVersion"] = "v7"; - if (headerMatch?.header && headerMatch.header.ref.startsWith("6")) { + if (data?.loaderData?.header.ref.startsWith("6")) { version = "v6"; } diff --git a/package-lock.json b/package-lock.json index ef605e8a..d64798c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,8 @@ "dependencies": { "@docsearch/css": "^3.8.3", "@docsearch/react": "^3.8.3", - "@react-router/express": "^7.9.2", - "@react-router/node": "^7.9.2", + "@react-router/express": "0.0.0-experimental-c19b79d", + "@react-router/node": "0.0.0-experimental-c19b79d", "cheerio": "^1.0.0-rc.12", "clsx": "^2.1.1", "compression": "^1.7.5", @@ -33,7 +33,7 @@ "parse-numeric-range": "^1.3.0", "react": "^19.1.1", "react-dom": "^19.1.1", - "react-router": "^7.9.2", + "react-router": "0.0.0-experimental-c19b79d", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.1", @@ -49,7 +49,7 @@ "unist-util-visit": "^5.0.0" }, "devDependencies": { - "@react-router/dev": "^7.9.2", + "@react-router/dev": "0.0.0-experimental-c19b79d", "@testing-library/jest-dom": "^6.8.0", "@types/express": "^5.0.3", "@types/follow-redirects": "^1.14.4", @@ -2030,9 +2030,9 @@ } }, "node_modules/@react-router/dev": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.9.2.tgz", - "integrity": "sha512-uGDupa6S64Yv9pAtEWchPKQTyl9Ab59ztqyPilNAFYnktMEweOHTBfN4tMUinnxAJQByB6hAoLQmHcy0u6RdTA==", + "version": "0.0.0-experimental-c19b79d", + "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-0.0.0-experimental-c19b79d.tgz", + "integrity": "sha512-uSDhC/MyGE4oR26KNK9Q9dGHMOm7yqI/hsDx/jv/Z94kimIXUkZC2uGZnpZKaPoIeDgLXXgIaFlzIpV9NL5gTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2044,7 +2044,7 @@ "@babel/traverse": "^7.27.7", "@babel/types": "^7.27.7", "@npmcli/package-json": "^4.0.1", - "@react-router/node": "7.9.2", + "@react-router/node": "0.0.0-experimental-c19b79d", "@remix-run/node-fetch-server": "^0.9.0", "arg": "^5.0.1", "babel-dead-code-elimination": "^1.0.6", @@ -2061,7 +2061,7 @@ "react-refresh": "^0.14.0", "semver": "^7.3.7", "tinyglobby": "^0.2.14", - "valibot": "^0.41.0", + "valibot": "^1.1.0", "vite-node": "^3.2.2" }, "bin": { @@ -2071,9 +2071,9 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@react-router/serve": "^7.9.2", + "@react-router/serve": "^0.0.0-experimental-c19b79d", "@vitejs/plugin-rsc": "*", - "react-router": "^7.9.2", + "react-router": "^0.0.0-experimental-c19b79d", "typescript": "^5.1.0", "vite": "^5.1.0 || ^6.0.0 || ^7.0.0", "wrangler": "^3.28.2 || ^4.0.0" @@ -2124,19 +2124,19 @@ } }, "node_modules/@react-router/express": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.9.2.tgz", - "integrity": "sha512-8mAkthF+0oNg9eK6qiWM/VGhhbDZrK6l3IEH7B1lB8yRJArHu6BJsafzFKR2jBE0NCws4bB0STP6zJZMjztfFw==", + "version": "0.0.0-experimental-c19b79d", + "resolved": "https://registry.npmjs.org/@react-router/express/-/express-0.0.0-experimental-c19b79d.tgz", + "integrity": "sha512-Mfupy1yWbdO8DE9ZBulh8uSYcmQjc0wVPwlOnil5nh0NLQRXUt+OkHrUVfiTkPiz6pHqc/K2/+55IEO/zllsoA==", "license": "MIT", "dependencies": { - "@react-router/node": "7.9.2" + "@react-router/node": "0.0.0-experimental-c19b79d" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { "express": "^4.17.1 || ^5", - "react-router": "7.9.2", + "react-router": "0.0.0-experimental-c19b79d", "typescript": "^5.1.0" }, "peerDependenciesMeta": { @@ -2146,9 +2146,9 @@ } }, "node_modules/@react-router/node": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.2.tgz", - "integrity": "sha512-mGqpEXVWs1XmwpJdbESE2fzvS3a43EdMCuiL2U3Nmm1IuGdSjc60gQK/IeKWjNGdgj1pZEyyQK17fYXPqjp5Uw==", + "version": "0.0.0-experimental-c19b79d", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-0.0.0-experimental-c19b79d.tgz", + "integrity": "sha512-rIjFLQYvBr1S68Z26QJDEezI+Z+5iWyFZStgl4VtCwRDJ/rBM1ucfEoNuyHl6Iy3ZK40I9o/whpXUpt8EcrHUw==", "license": "MIT", "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" @@ -2157,7 +2157,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "react-router": "7.9.2", + "react-router": "0.0.0-experimental-c19b79d", "typescript": "^5.1.0" }, "peerDependenciesMeta": { @@ -13576,9 +13576,9 @@ } }, "node_modules/react-router": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.2.tgz", - "integrity": "sha512-i2TPp4dgaqrOqiRGLZmqh2WXmbdFknUyiCRmSKs0hf6fWXkTKg5h56b+9F22NbGRAMxjYfqQnpi63egzD2SuZA==", + "version": "0.0.0-experimental-c19b79d", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-0.0.0-experimental-c19b79d.tgz", + "integrity": "sha512-C3Eyva2JYvZqOKYbsE4XFr+3n9b0vhnNLbwNFuve7Twt7r++0VPh9Xt04eC+Xo19V5euuklECDeOPtSflmpVLw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -16388,9 +16388,9 @@ } }, "node_modules/valibot": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.41.0.tgz", - "integrity": "sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", + "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", "dev": true, "license": "MIT", "peerDependencies": { diff --git a/package.json b/package.json index d0eb6546..2380574a 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ "dependencies": { "@docsearch/css": "^3.8.3", "@docsearch/react": "^3.8.3", - "@react-router/express": "^7.9.2", - "@react-router/node": "^7.9.2", + "@react-router/express": "0.0.0-experimental-c19b79d", + "@react-router/node": "0.0.0-experimental-c19b79d", "cheerio": "^1.0.0-rc.12", "clsx": "^2.1.1", "compression": "^1.7.5", @@ -42,7 +42,7 @@ "parse-numeric-range": "^1.3.0", "react": "^19.1.1", "react-dom": "^19.1.1", - "react-router": "^7.9.2", + "react-router": "0.0.0-experimental-c19b79d", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.1", @@ -58,7 +58,7 @@ "unist-util-visit": "^5.0.0" }, "devDependencies": { - "@react-router/dev": "^7.9.2", + "@react-router/dev": "0.0.0-experimental-c19b79d", "@testing-library/jest-dom": "^6.8.0", "@types/express": "^5.0.3", "@types/follow-redirects": "^1.14.4",