diff --git a/apps/website/next.config.ts b/apps/website/next.config.ts index c98b2d61c..a43f28363 100644 --- a/apps/website/next.config.ts +++ b/apps/website/next.config.ts @@ -22,7 +22,6 @@ export default { experimental: { ppr: true, reactCompiler: true, - useCache: true, dynamicOnHover: true, }, eslint: { diff --git a/apps/website/package.json b/apps/website/package.json index 5023a68e3..2bea28c90 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -48,6 +48,7 @@ "dependencies": { "@radix-ui/react-collapsible": "^1.1.3", "@react-icons/all-files": "^4.1.0", + "@tanstack/react-query": "^5.76.1", "@vercel/analytics": "^1.5.0", "@vercel/edge-config": "^1.4.0", "@vercel/postgres": "^0.10.0", @@ -61,7 +62,7 @@ "lucide-react": "^0.503.0", "meilisearch": "^0.49.0", "motion": "^12.9.2", - "next": "15.4.0-canary.31", + "next": "15.4.0-canary.35", "next-mdx-remote-client": "^2.1.1", "next-themes": "^0.4.6", "nuqs": "^2.4.3", diff --git a/apps/website/src/app/api/docs/entrypoints/route.ts b/apps/website/src/app/api/docs/entrypoints/route.ts new file mode 100644 index 000000000..48d712660 --- /dev/null +++ b/apps/website/src/app/api/docs/entrypoints/route.ts @@ -0,0 +1,16 @@ +import { NextResponse, type NextRequest } from 'next/server'; +import { fetchEntryPoints } from '@/util/fetchEntryPoints'; + +export async function GET(request: NextRequest) { + const { searchParams } = request.nextUrl; + const packageName = searchParams.get('packageName'); + const version = searchParams.get('version'); + + if (!packageName || !version) { + return NextResponse.json({ error: 'Missing required parameters' }, { status: 400 }); + } + + const response = await fetchEntryPoints(packageName, version); + + return NextResponse.json(response); +} diff --git a/apps/website/src/app/api/docs/sitemap/route.ts b/apps/website/src/app/api/docs/sitemap/route.ts new file mode 100644 index 000000000..de0fbd29d --- /dev/null +++ b/apps/website/src/app/api/docs/sitemap/route.ts @@ -0,0 +1,21 @@ +import { NextResponse, type NextRequest } from 'next/server'; +import { fetchSitemap } from '@/util/fetchSitemap'; + +export async function GET(request: NextRequest) { + const { searchParams } = request.nextUrl; + const packageName = searchParams.get('packageName'); + const version = searchParams.get('version'); + const entryPoint = searchParams.get('entryPoint'); + + if (!packageName || !version) { + return NextResponse.json({ error: 'Missing required parameters' }, { status: 400 }); + } + + const response = await fetchSitemap({ + entryPoint, + packageName, + version, + }); + + return NextResponse.json(response); +} diff --git a/apps/website/src/app/api/docs/versions/route.ts b/apps/website/src/app/api/docs/versions/route.ts new file mode 100644 index 000000000..02ec14a43 --- /dev/null +++ b/apps/website/src/app/api/docs/versions/route.ts @@ -0,0 +1,15 @@ +import { NextResponse, type NextRequest } from 'next/server'; +import { fetchVersions } from '@/util/fetchVersions'; + +export async function GET(request: NextRequest) { + const { searchParams } = request.nextUrl; + const packageName = searchParams.get('packageName'); + + if (!packageName) { + return NextResponse.json({ error: 'Missing required parameters' }, { status: 400 }); + } + + const response = await fetchVersions(packageName); + + return NextResponse.json(response); +} diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/layout.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/layout.tsx index b0d6e9685..db174f12f 100644 --- a/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/layout.tsx +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/layout.tsx @@ -1,24 +1,5 @@ -'use cache'; - -import { VscGithubInverted } from '@react-icons/all-files/vsc/VscGithubInverted'; import type { Metadata } from 'next'; -import Link from 'next/link'; import { Suspense, type PropsWithChildren } from 'react'; -import { EntryPointSelect } from '@/components/EntrypointSelect'; -import { Footer } from '@/components/Footer'; -import { Navigation } from '@/components/Navigation'; -import { Scrollbars } from '@/components/OverlayScrollbars'; -import { PackageSelect } from '@/components/PackageSelect'; -import { SearchButton } from '@/components/SearchButton'; -import { ThemeSwitchNoSRR } from '@/components/ThemeSwitch'; -import { VersionSelect } from '@/components/VersionSelect'; -import { Sidebar, SidebarContent, SidebarHeader, SidebarInset, SidebarTrigger } from '@/components/ui/Sidebar'; -import { buttonStyles } from '@/styles/ui/button'; -import { PACKAGES_WITH_ENTRY_POINTS } from '@/util/constants'; -import { ENV } from '@/util/env'; -import { fetchEntryPoints } from '@/util/fetchEntryPoints'; -import { fetchVersions } from '@/util/fetchVersions'; -import { parseDocsPathParams } from '@/util/parseDocsPathParams'; import { CmdK } from './CmdK'; export async function generateMetadata({ @@ -44,82 +25,11 @@ export default async function Layout({ params, children, }: PropsWithChildren<{ - readonly params: Promise<{ - readonly item?: string[] | undefined; - readonly packageName: string; - readonly version: string; - }>; + readonly params: Promise<{ readonly packageName: string; readonly version: string }>; }>) { - const { packageName, version, item } = await params; - - const versions = fetchVersions(packageName); - - const hasEntryPoints = PACKAGES_WITH_ENTRY_POINTS.includes(packageName); - - const entryPoints = hasEntryPoints ? fetchEntryPoints(packageName, version) : Promise.resolve([]); - const { entryPoints: parsedEntrypoints } = parseDocsPathParams(item); - return ( <> - - - - - - {packageName} - - - - - - - - - - {/* {version} */} - - {hasEntryPoints ? : null} - - - - - - - - - - - {ENV.IS_LOCAL_DEV ? ( - - Local test environment - - ) : null} - {ENV.IS_PREVIEW ? ( - - Preview environment - - ) : null} - - - - - - - - {packageName} - - - - {children} - - - + {children} diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/page.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/page.tsx index e17047f05..25f8af8d7 100644 --- a/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/page.tsx +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/[[...item]]/page.tsx @@ -1,5 +1,3 @@ -'use cache'; - import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import rehypeShikiFromHighlighter from '@shikijs/rehype/core'; diff --git a/apps/website/src/app/docs/packages/layout.tsx b/apps/website/src/app/docs/packages/layout.tsx new file mode 100644 index 000000000..f71e760b6 --- /dev/null +++ b/apps/website/src/app/docs/packages/layout.tsx @@ -0,0 +1,49 @@ +// import Link from 'next/link'; +import type { PropsWithChildren } from 'react'; +import { Footer } from '@/components/Footer'; +import { Navigation } from '@/components/Navigation'; +import { Scrollbars } from '@/components/OverlayScrollbars'; +import { SidebarHeader } from '@/components/Sidebar'; +import { Sidebar, SidebarContent, SidebarInset, SidebarTrigger } from '@/components/ui/Sidebar'; +import { ENV } from '@/util/env'; + +export default async function Layout({ children }: PropsWithChildren) { + return ( + <> + + + + + + + + + + {ENV.IS_LOCAL_DEV ? ( + + Local test environment + + ) : null} + {ENV.IS_PREVIEW ? ( + + Preview environment + + ) : null} + + + + + + {/* + + {packageName} + + */} + + {children} + + + + > + ); +} diff --git a/apps/website/src/app/providers.tsx b/apps/website/src/app/providers.tsx index 404ea64f3..a80ee7f3f 100644 --- a/apps/website/src/app/providers.tsx +++ b/apps/website/src/app/providers.tsx @@ -1,5 +1,6 @@ 'use client'; +import { isServer, QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Provider as JotaiProvider } from 'jotai'; import { useRouter } from 'next/navigation'; import { ThemeProvider } from 'next-themes'; @@ -10,7 +11,30 @@ import { SidebarProvider } from '@/components/ui/Sidebar'; import { useSystemThemeFallback } from '@/hooks/useSystemThemeFallback'; import { useUnregisterServiceWorker } from '@/hooks/useUnregisterServiceWorker'; +function makeQueryClient() { + return new QueryClient({ + defaultOptions: { + queries: { + staleTime: 60 * 1_000, + }, + }, + }); +} + +let browserQueryClient: QueryClient | undefined; + +function getQueryClient() { + if (isServer) { + // Server: always make a new query client + return makeQueryClient(); + } else { + browserQueryClient ??= makeQueryClient(); + return browserQueryClient; + } +} + export function Providers({ children }: PropsWithChildren) { + const queryClient = getQueryClient(); const router = useRouter(); useUnregisterServiceWorker(); useSystemThemeFallback(); @@ -20,7 +44,9 @@ export function Providers({ children }: PropsWithChildren) { - {children} + + {children} + diff --git a/apps/website/src/components/DocItem.tsx b/apps/website/src/components/DocItem.tsx index 7c029bf18..6defe885b 100644 --- a/apps/website/src/components/DocItem.tsx +++ b/apps/website/src/components/DocItem.tsx @@ -1,5 +1,3 @@ -'use cache'; - import { VscSymbolParameter } from '@react-icons/all-files/vsc/VscSymbolParameter'; import { ConstructorNode } from './ConstructorNode'; import { DeprecatedNode } from './DeprecatedNode'; diff --git a/apps/website/src/components/EntrypointSelect.tsx b/apps/website/src/components/EntrypointSelect.tsx index c2bf78c43..b99364352 100644 --- a/apps/website/src/components/EntrypointSelect.tsx +++ b/apps/website/src/components/EntrypointSelect.tsx @@ -1,23 +1,25 @@ 'use client'; import { useParams, useRouter } from 'next/navigation'; -import { use } from 'react'; import { parseDocsPathParams } from '@/util/parseDocsPathParams'; import { Select, SelectList, SelectOption, SelectTrigger } from './ui/Select'; -export function EntryPointSelect({ - entryPointsPromise, -}: { - readonly entryPointsPromise: Promise<{ readonly entryPoint: string }[]>; -}) { +export function EntryPointSelect({ entryPoints }: { readonly entryPoints: { readonly entryPoint: string }[] }) { const router = useRouter(); - const params = useParams(); - const entryPoints = use(entryPointsPromise); + const params = useParams<{ + item?: string[] | undefined; + packageName: string; + version: string; + }>(); - const { entryPoints: parsedEntrypoints } = parseDocsPathParams(params.item as string[] | undefined); + const { entryPoints: parsedEntrypoints } = parseDocsPathParams(params.item); return ( - + {(item) => ( diff --git a/apps/website/src/components/Navigation.tsx b/apps/website/src/components/Navigation.tsx index 446472daa..6b6ec4d9b 100644 --- a/apps/website/src/components/Navigation.tsx +++ b/apps/website/src/components/Navigation.tsx @@ -1,26 +1,38 @@ +'use client'; + +import { useQuery } from '@tanstack/react-query'; import { ChevronDown, ChevronUp } from 'lucide-react'; -import { notFound } from 'next/navigation'; -import { fetchSitemap } from '@/util/fetchSitemap'; +import { notFound, useParams } from 'next/navigation'; +import { parseDocsPathParams } from '@/util/parseDocsPathParams'; import { resolveNodeKind } from './DocKind'; import { NavigationItem } from './NavigationItem'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from './ui/Collapsible'; -export async function Navigation({ - entryPoint, - packageName, - version, -}: { - readonly entryPoint?: string | undefined; - readonly packageName: string; - readonly version: string; -}) { - const node = await fetchSitemap({ entryPoint, packageName, version }); +export function Navigation() { + const params = useParams<{ + item?: string[] | undefined; + packageName: string; + version: string; + }>(); - if (!node) { + const { entryPoints: parsedEntrypoints } = parseDocsPathParams(params.item); + + const { data: node, status } = useQuery({ + queryKey: ['sitemap', params.packageName, params.version, parsedEntrypoints.join('.')], + queryFn: async () => { + const response = await fetch( + `/api/docs/sitemap?packageName=${params.packageName}&version=${params.version}&entryPoint=${parsedEntrypoints.join('.')}`, + ); + + return response.json(); + }, + }); + + if ((status === 'success' && !node) || status === 'error') { notFound(); } - const groupedNodes = node.reduce((acc: any, node: any) => { + const groupedNodes = node?.reduce((acc: any, node: any) => { // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing (acc[node.kind.toLowerCase()] ||= []).push(node); return acc; @@ -28,7 +40,7 @@ export async function Navigation({ return ( - {groupedNodes.class?.length ? ( + {groupedNodes?.class?.length ? ( Classes @@ -40,7 +52,12 @@ export async function Navigation({ {groupedNodes.class.map((node: any, idx: number) => { const kind = resolveNodeKind(node.kind); return ( - + {node.kind[0]} {' '} @@ -53,7 +70,7 @@ export async function Navigation({ ) : null} - {groupedNodes.function?.length ? ( + {groupedNodes?.function?.length ? ( Functions @@ -65,7 +82,12 @@ export async function Navigation({ {groupedNodes.function.map((node: any, idx: number) => { const kind = resolveNodeKind(node.kind); return ( - + {node.kind[0]} {' '} @@ -78,7 +100,7 @@ export async function Navigation({ ) : null} - {groupedNodes.enum?.length ? ( + {groupedNodes?.enum?.length ? ( Enums @@ -90,7 +112,12 @@ export async function Navigation({ {groupedNodes.enum.map((node: any, idx: number) => { const kind = resolveNodeKind(node.kind); return ( - + {node.kind[0]} {' '} @@ -103,7 +130,7 @@ export async function Navigation({ ) : null} - {groupedNodes.interface?.length ? ( + {groupedNodes?.interface?.length ? ( Interfaces @@ -115,7 +142,12 @@ export async function Navigation({ {groupedNodes.interface.map((node: any, idx: number) => { const kind = resolveNodeKind(node.kind); return ( - + {node.kind[0]} {' '} @@ -128,7 +160,7 @@ export async function Navigation({ ) : null} - {groupedNodes.typealias?.length ? ( + {groupedNodes?.typealias?.length ? ( Types @@ -140,7 +172,12 @@ export async function Navigation({ {groupedNodes.typealias.map((node: any, idx: number) => { const kind = resolveNodeKind(node.kind); return ( - + {node.kind[0]} {' '} @@ -153,7 +190,7 @@ export async function Navigation({ ) : null} - {groupedNodes.variable?.length ? ( + {groupedNodes?.variable?.length ? ( Variables @@ -165,7 +202,12 @@ export async function Navigation({ {groupedNodes.variable.map((node: any, idx: number) => { const kind = resolveNodeKind(node.kind); return ( - + {node.kind[0]} {' '} diff --git a/apps/website/src/components/PackageSelect.tsx b/apps/website/src/components/PackageSelect.tsx index bc2cdf843..cca4ad5cc 100644 --- a/apps/website/src/components/PackageSelect.tsx +++ b/apps/website/src/components/PackageSelect.tsx @@ -6,10 +6,12 @@ import { PACKAGES } from '@/util/constants'; export function PackageSelect() { const router = useRouter(); - const params = useParams(); + const params = useParams<{ + packageName: string; + }>(); return ( - + {(item) => ( diff --git a/apps/website/src/components/Sidebar.tsx b/apps/website/src/components/Sidebar.tsx new file mode 100644 index 000000000..ee881aa67 --- /dev/null +++ b/apps/website/src/components/Sidebar.tsx @@ -0,0 +1,70 @@ +'use client'; + +import { VscGithubInverted } from '@react-icons/all-files/vsc/VscGithubInverted'; +import { useQuery } from '@tanstack/react-query'; +import Link from 'next/link'; +import { useParams } from 'next/navigation'; +import { EntryPointSelect } from '@/components/EntrypointSelect'; +import { PackageSelect } from '@/components/PackageSelect'; +import { SearchButton } from '@/components/SearchButton'; +import { ThemeSwitchNoSRR } from '@/components/ThemeSwitch'; +import { VersionSelect } from '@/components/VersionSelect'; +import { SidebarHeader as BasSidebarHeader } from '@/components/ui/Sidebar'; +import { buttonStyles } from '@/styles/ui/button'; +import { PACKAGES_WITH_ENTRY_POINTS } from '@/util/constants'; + +export function SidebarHeader() { + const params = useParams<{ + packageName: string; + version: string; + }>(); + + const hasEntryPoints = PACKAGES_WITH_ENTRY_POINTS.includes(params.packageName); + + const { data: entryPoints } = useQuery({ + queryKey: ['entryPoints', params.packageName, params.version], + queryFn: async () => { + const response = await fetch(`/api/docs/entrypoints?packageName=${params.packageName}&version=${params.version}`); + + return response.json(); + }, + }); + + const { data: versions } = useQuery({ + queryKey: ['versions', params.packageName], + queryFn: async () => { + const response = await fetch(`/api/docs/versions?packageName=${params.packageName}`); + + return response.json(); + }, + }); + + return ( + + + + + {params.packageName} + + + + + + + + + + {/* {version} */} + + {hasEntryPoints ? : null} + + + + ); +} diff --git a/apps/website/src/components/VersionSelect.tsx b/apps/website/src/components/VersionSelect.tsx index 6e3dbe86c..35fa3d38d 100644 --- a/apps/website/src/components/VersionSelect.tsx +++ b/apps/website/src/components/VersionSelect.tsx @@ -1,26 +1,27 @@ 'use client'; import { useParams, useRouter } from 'next/navigation'; -import { use } from 'react'; -import { Select, SelectList, SelectOption, SelectTrigger } from './ui/Select'; +import { Select, SelectList, SelectOption, SelectTrigger } from '@/components/ui/Select'; +import { DEFAULT_ENTRY_POINT, PACKAGES_WITH_ENTRY_POINTS } from '@/util/constants'; -export function VersionSelect({ - versionsPromise, -}: { - readonly versionsPromise: Promise<{ readonly version: string }[]>; -}) { +export function VersionSelect({ versions }: { readonly versions: { readonly version: string }[] }) { const router = useRouter(); - const params = useParams(); - const versions = use(versionsPromise); + const params = useParams<{ packageName: string; version: string }>(); + + const hasEntryPoints = PACKAGES_WITH_ENTRY_POINTS.includes(params.packageName); return ( - + {(item) => ( router.prefetch(`/docs/packages/${params.packageName}/${item.version}`)} diff --git a/apps/website/src/middleware.ts b/apps/website/src/middleware.ts index ce5a289e8..92359ea0a 100644 --- a/apps/website/src/middleware.ts +++ b/apps/website/src/middleware.ts @@ -9,6 +9,7 @@ const client = new Cloudflare({ async function fetchLatestVersion(packageName: string): Promise { const hasEntryPoints = PACKAGES_WITH_ENTRY_POINTS.includes(packageName); + if (ENV.IS_LOCAL_DEV) { if (hasEntryPoints) { return ['main', ...DEFAULT_ENTRY_POINT].join('/'); diff --git a/apps/website/src/util/fetchSitemap.ts b/apps/website/src/util/fetchSitemap.ts index d324c702f..f908ba4b3 100644 --- a/apps/website/src/util/fetchSitemap.ts +++ b/apps/website/src/util/fetchSitemap.ts @@ -8,7 +8,7 @@ export async function fetchSitemap({ packageName, version, }: { - readonly entryPoint?: string | undefined; + readonly entryPoint?: string | null | undefined; readonly packageName: string; readonly version: string; }) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b65a9c638..a7b4c36bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,7 +45,7 @@ importers: version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-typescript: specifier: ^4.3.4 - version: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) + version: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-react-compiler: specifier: 19.1.0-rc.1 version: 19.1.0-rc.1(eslint@9.25.1(jiti@2.4.2)) @@ -266,9 +266,12 @@ importers: '@react-icons/all-files': specifier: ^4.1.0 version: 4.1.0(react@19.1.0) + '@tanstack/react-query': + specifier: ^5.76.1 + version: 5.76.1(react@19.1.0) '@vercel/analytics': specifier: ^1.5.0 - version: 1.5.0(next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 1.5.0(next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) '@vercel/edge-config': specifier: ^1.4.0 version: 1.4.0 @@ -286,7 +289,7 @@ importers: version: 1.0.0-beta.3(typescript@5.8.3) geist: specifier: ^1.3.1 - version: 1.3.1(next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 1.3.1(next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) immer: specifier: ^10.1.1 version: 10.1.1 @@ -306,8 +309,8 @@ importers: specifier: ^12.9.2 version: 12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: - specifier: 15.4.0-canary.31 - version: 15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 15.4.0-canary.35 + version: 15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-mdx-remote-client: specifier: ^2.1.1 version: 2.1.1(@types/react@19.1.2)(acorn@8.14.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -316,7 +319,7 @@ importers: version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) nuqs: specifier: ^2.4.3 - version: 2.4.3(next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 2.4.3(next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) overlayscrollbars: specifier: ^2.11.1 version: 2.11.1 @@ -571,7 +574,7 @@ importers: version: 9.25.1(jiti@2.4.2) eslint-config-neon: specifier: ^0.2.7 - version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) + version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) eslint-formatter-compact: specifier: ^8.40.0 version: 8.40.0 @@ -1457,7 +1460,7 @@ importers: version: 9.25.1(jiti@2.4.2) eslint-config-neon: specifier: ^0.2.7 - version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) + version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) eslint-formatter-compact: specifier: ^8.40.0 version: 8.40.0 @@ -1760,7 +1763,7 @@ importers: version: 9.25.1(jiti@2.4.2) eslint-config-neon: specifier: ^0.2.7 - version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) + version: 0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) eslint-formatter-compact: specifier: ^8.40.0 version: 8.40.0 @@ -3543,8 +3546,8 @@ packages: '@next/env@15.4.0-canary.11': resolution: {integrity: sha512-UoGIxI4VR0QxCCkVLKw4USofRR72BdwwqbJZKKA9W812mWoO7gMDAkSQ2pARul+0/LPmzzWQGzV4MNJykPw7sg==} - '@next/env@15.4.0-canary.31': - resolution: {integrity: sha512-v9qjCjWhJOcBKVLzsx00JlraSFJPd4XwY5qaIaIfslpWS7qtWrwU01IOSLGBkM+JwAa/VWoVeT5p/dqqbuJgKw==} + '@next/env@15.4.0-canary.35': + resolution: {integrity: sha512-F8+p2C+kPBw57Z39Odm4fNdXUCFE5AiC8NSu/nqX/P8+wTt389gehTWuLW4pHvDQPXbVrimnFcEst6S4R8wvuQ==} '@next/eslint-plugin-next@15.2.4': resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} @@ -3555,8 +3558,8 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-arm64@15.4.0-canary.31': - resolution: {integrity: sha512-zBo+HeZm3IVlwHGPQpTBfdlYQrcQ4PHkuhL4/s/drVaYrFccL5bf5px2xNL3s6gje+RQm7AnJeJdWK7dXcF1LQ==} + '@next/swc-darwin-arm64@15.4.0-canary.35': + resolution: {integrity: sha512-HHJly3Vqy1OhU7wT3Esq6QNUg/zYrmtYCd8oDIY0qD8XwG7Rv1n7WhszKcVCZ9DpaVAQi2/qS+4nPssoTb75CQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3567,8 +3570,8 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-darwin-x64@15.4.0-canary.31': - resolution: {integrity: sha512-GxZK9xddHRJB4oXmxd0gY+EKpmeW2ioA8b0fmsVrFgaLD+BlKol4z+6UgjtlaVkxXGX8gqd4kvoZ6jNKkGKfNw==} + '@next/swc-darwin-x64@15.4.0-canary.35': + resolution: {integrity: sha512-X40pYFnBRW+YS4Z8sGb61tlzALhEA/drrQzYslGGyNM4OUAl4RsZCQwOm9p7MyTu9+2N7My5JYmQ5SxzjAtacA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3579,8 +3582,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-gnu@15.4.0-canary.31': - resolution: {integrity: sha512-8ZJUYhpc3uOXCm8c38qRCW5OdRgLczMxhyMITUpbQrYZ+csncvaTkeAjUEZ0OyZqrq+5LqSs3qbaZZrd8wQMYw==} + '@next/swc-linux-arm64-gnu@15.4.0-canary.35': + resolution: {integrity: sha512-f4l4KUPS3LCX+07kp719FPSBlH5V2hD94/9fUdLs7ZMTpNHwyALu8iJF2841hpeM+hT9Fo1rSOgOASqU/FGzNQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3591,8 +3594,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.4.0-canary.31': - resolution: {integrity: sha512-vylmxjjBjA+uwH4ZO1Mkv7OKH3cXAWgZp1sBRMTClBbKyMcU/WgV3DPhjP3t+gsYYqaFpTJg87JVPbha0uzlqQ==} + '@next/swc-linux-arm64-musl@15.4.0-canary.35': + resolution: {integrity: sha512-ytpHRkGDJmj4jvVl0rnuOTGNKA7mkoqH5b+UwlEWKGhThMN1pC3y47L5ikj/s75jm0UVysRoF2N4O/CvjkoD8w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3603,8 +3606,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-gnu@15.4.0-canary.31': - resolution: {integrity: sha512-Yakxjs+uzfwTy5HbSa8NPKNbw8pad+p7T86p52/+7eFZab0QoPAI1v1dkscvz2D5+luQLHRZPS9Dgxljv/cgvA==} + '@next/swc-linux-x64-gnu@15.4.0-canary.35': + resolution: {integrity: sha512-eWA8by7RzP+DPTrXluCGszBAAXdMdznliBezOZ3Z+Qv9Qdk7mMctdIANMSQIw3PyjhGGYyGCh3snD3ugExlbjw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3615,8 +3618,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.4.0-canary.31': - resolution: {integrity: sha512-spC49gdMMtMeAb9dd8sec14cqckiOWFgyi5uv5UvyvK8EQhTX0oDpPBmzODlesasIbx0rQRYYMs8KP9msFmTPA==} + '@next/swc-linux-x64-musl@15.4.0-canary.35': + resolution: {integrity: sha512-P9T/6hO9XhwP+usJrhU/Eh4Yw9ILht9cuMkw778TrgC7IVg4Nfy2SwtGEO1epfoAsuQ74SYg4s0kTVRzdjIYew==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3627,8 +3630,8 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-arm64-msvc@15.4.0-canary.31': - resolution: {integrity: sha512-Np5g/RJDHHxn15mg7mkAqhwaPG/H3uYbaO6RGxLjoKy2NJzivZ+a53r6BhhgvYywTgU18syUqgmLxxmz+hjysw==} + '@next/swc-win32-arm64-msvc@15.4.0-canary.35': + resolution: {integrity: sha512-Nqn8yaEkZy2j0ZhhTpDHIkTVNkuS5aYFLuN4yzJNMJfS1nIrooDrTiA+j8Y7Mxl+SQfWPqGqMA47OPZOh7ipFQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3639,8 +3642,8 @@ packages: cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.4.0-canary.31': - resolution: {integrity: sha512-0/4BgXFG9N/YT+pHN1XvPB5JJTyJKrTUNvZPdCN7knnonXwuhoOwqmK/xI3rGLbHHTe0UFGcsXzh1NeRjRyjUw==} + '@next/swc-win32-x64-msvc@15.4.0-canary.35': + resolution: {integrity: sha512-M8Y86fRA2hlET/3HKYi/uuLpldi168HiONkameGHoMrF2yHttlicOL7i8LVs7ulZaJps7wmodUis7TaYMahxUQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -6100,6 +6103,14 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 + '@tanstack/query-core@5.76.0': + resolution: {integrity: sha512-FN375hb8ctzfNAlex5gHI6+WDXTNpe0nbxp/d2YJtnP+IBM6OUm7zcaoCW6T63BawGOYZBbKC0iPvr41TteNVg==} + + '@tanstack/react-query@5.76.1': + resolution: {integrity: sha512-YxdLZVGN4QkT5YT1HKZQWiIlcgauIXEIsMOTSjvyD5wLYK8YVvKZUPAysMqossFJJfDpJW3pFn7WNZuPOqq+fw==} + peerDependencies: + react: ^18 || ^19 + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -11234,8 +11245,8 @@ packages: sass: optional: true - next@15.4.0-canary.31: - resolution: {integrity: sha512-w3PUyFAfICyamYgvS2ZZqK8rSSyI97FFoVH5S9E/QABs4LLF50JyhsJwVZD7cADpMsBqBKaVes6OYltBxP8eIw==} + next@15.4.0-canary.35: + resolution: {integrity: sha512-2UFgPdiUEDCKMs4oSAzpwsKPFNdhC+N5Co0YaCsDJZXShPRcw4CVV1/d1W1gbAqf+tkzRWPTEfxs6HhYnovbyQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -16204,7 +16215,7 @@ snapshots: '@next/env@15.4.0-canary.11': {} - '@next/env@15.4.0-canary.31': {} + '@next/env@15.4.0-canary.35': {} '@next/eslint-plugin-next@15.2.4': dependencies: @@ -16213,49 +16224,49 @@ snapshots: '@next/swc-darwin-arm64@15.4.0-canary.11': optional: true - '@next/swc-darwin-arm64@15.4.0-canary.31': + '@next/swc-darwin-arm64@15.4.0-canary.35': optional: true '@next/swc-darwin-x64@15.4.0-canary.11': optional: true - '@next/swc-darwin-x64@15.4.0-canary.31': + '@next/swc-darwin-x64@15.4.0-canary.35': optional: true '@next/swc-linux-arm64-gnu@15.4.0-canary.11': optional: true - '@next/swc-linux-arm64-gnu@15.4.0-canary.31': + '@next/swc-linux-arm64-gnu@15.4.0-canary.35': optional: true '@next/swc-linux-arm64-musl@15.4.0-canary.11': optional: true - '@next/swc-linux-arm64-musl@15.4.0-canary.31': + '@next/swc-linux-arm64-musl@15.4.0-canary.35': optional: true '@next/swc-linux-x64-gnu@15.4.0-canary.11': optional: true - '@next/swc-linux-x64-gnu@15.4.0-canary.31': + '@next/swc-linux-x64-gnu@15.4.0-canary.35': optional: true '@next/swc-linux-x64-musl@15.4.0-canary.11': optional: true - '@next/swc-linux-x64-musl@15.4.0-canary.31': + '@next/swc-linux-x64-musl@15.4.0-canary.35': optional: true '@next/swc-win32-arm64-msvc@15.4.0-canary.11': optional: true - '@next/swc-win32-arm64-msvc@15.4.0-canary.31': + '@next/swc-win32-arm64-msvc@15.4.0-canary.35': optional: true '@next/swc-win32-x64-msvc@15.4.0-canary.11': optional: true - '@next/swc-win32-x64-msvc@15.4.0-canary.31': + '@next/swc-win32-x64-msvc@15.4.0-canary.35': optional: true '@noble/ciphers@1.2.1': {} @@ -19505,6 +19516,13 @@ snapshots: tailwindcss: 4.1.4 vite: 6.2.5(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) + '@tanstack/query-core@5.76.0': {} + + '@tanstack/react-query@5.76.1(react@19.1.0)': + dependencies: + '@tanstack/query-core': 5.76.0 + react: 19.1.0 + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 @@ -20657,9 +20675,9 @@ snapshots: next: 15.4.0-canary.11(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 - '@vercel/analytics@1.5.0(next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@vercel/analytics@1.5.0(next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': optionalDependencies: - next: 15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 '@vercel/blob@0.27.3': @@ -22931,7 +22949,7 @@ snapshots: eslint: 9.25.1(jiti@2.4.2) semver: 7.6.3 - eslint-config-neon@0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4): + eslint-config-neon@0.2.7(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4): dependencies: '@angular-eslint/eslint-plugin': 19.3.0(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) '@angular-eslint/eslint-plugin-template': 19.3.0(@typescript-eslint/types@8.31.0)(@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4))(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) @@ -22946,7 +22964,7 @@ snapshots: '@typescript-eslint/parser': 8.29.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.5.4) astro-eslint-parser: 1.2.2 eslint-config-prettier: 10.1.1(eslint@9.25.1(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)) eslint-mdx: 3.3.2(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-astro: 1.3.1(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-cypress: 4.2.0(eslint@9.25.1(jiti@2.4.2)) @@ -22997,7 +23015,7 @@ snapshots: '@typescript-eslint/parser': 8.29.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) astro-eslint-parser: 1.2.2 eslint-config-prettier: 10.1.1(eslint@9.25.1(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)) eslint-mdx: 3.3.2(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-astro: 1.3.1(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-cypress: 4.2.0(eslint@9.25.1(jiti@2.4.2)) @@ -23100,7 +23118,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)): + eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)): dependencies: debug: 4.4.0 eslint: 9.25.1(jiti@2.4.2) @@ -23143,7 +23161,7 @@ snapshots: '@typescript-eslint/parser': 8.29.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) eslint: 9.25.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.3.4(eslint-plugin-import-x@4.10.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -24059,9 +24077,9 @@ snapshots: dependencies: next: 15.4.0-canary.11(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - geist@1.3.1(next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): + geist@1.3.1(next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): dependencies: - next: 15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) generic-pool@3.4.2: {} @@ -26444,9 +26462,9 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 15.4.0-canary.31 + '@next/env': 15.4.0-canary.35 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001711 postcss: 8.4.31 @@ -26454,14 +26472,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) styled-jsx: 5.1.6(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.4.0-canary.31 - '@next/swc-darwin-x64': 15.4.0-canary.31 - '@next/swc-linux-arm64-gnu': 15.4.0-canary.31 - '@next/swc-linux-arm64-musl': 15.4.0-canary.31 - '@next/swc-linux-x64-gnu': 15.4.0-canary.31 - '@next/swc-linux-x64-musl': 15.4.0-canary.31 - '@next/swc-win32-arm64-msvc': 15.4.0-canary.31 - '@next/swc-win32-x64-msvc': 15.4.0-canary.31 + '@next/swc-darwin-arm64': 15.4.0-canary.35 + '@next/swc-darwin-x64': 15.4.0-canary.35 + '@next/swc-linux-arm64-gnu': 15.4.0-canary.35 + '@next/swc-linux-arm64-musl': 15.4.0-canary.35 + '@next/swc-linux-x64-gnu': 15.4.0-canary.35 + '@next/swc-linux-x64-musl': 15.4.0-canary.35 + '@next/swc-win32-arm64-msvc': 15.4.0-canary.35 + '@next/swc-win32-x64-msvc': 15.4.0-canary.35 babel-plugin-react-compiler: 19.1.0-rc.1 sharp: 0.34.1 transitivePeerDependencies: @@ -26640,12 +26658,12 @@ snapshots: optionalDependencies: next: 15.4.0-canary.11(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - nuqs@2.4.3(next@15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): + nuqs@2.4.3(next@15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): dependencies: mitt: 3.0.1 react: 19.1.0 optionalDependencies: - next: 15.4.0-canary.31(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.0-canary.35(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) oauth-sign@0.9.0: {}