diff --git a/docker/template/package.json b/docker/template/package.json index 0756bffdc7..7885c61653 100644 --- a/docker/template/package.json +++ b/docker/template/package.json @@ -11,11 +11,11 @@ "dependencies": { "@types/js-yaml": "^4.0.9", "js-yaml": "^4.1.0", - "tsx": "^4.0.0" + "tsx": "^4.20.5" }, "devDependencies": { - "@types/node": "^20.19.9", - "typescript": "^5.0.0" + "@types/node": "^20.19.13", + "typescript": "^5.9.2" }, "engines": { "node": ">=18.0.0" diff --git a/frontend/package.json b/frontend/package.json index 06adbec282..975d81d0b7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,111 +18,116 @@ "preview:cloud": "vite preview --config vite.cloud.config.ts" }, "dependencies": { - "@clerk/clerk-js": "^5.91.2", - "@clerk/clerk-react": "^5.46.1", - "@clerk/themes": "^2.4.17", + "@clerk/clerk-js": "^5.92.1", + "@clerk/clerk-react": "^5.46.2", + "@clerk/themes": "^2.4.18", + "@codemirror/autocomplete": "^6.18.7", "@codemirror/commands": "^6.8.1", - "@codemirror/lang-javascript": "^6.2.2", - "@codemirror/lang-json": "^6.0.1", + "@codemirror/lang-javascript": "^6.2.4", + "@codemirror/lang-json": "^6.0.2", "@codemirror/lint": "^6.8.5", "@codemirror/merge": "^6.10.2", "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.28.4", + "@codemirror/view": "^6.38.2", "@date-fns/utc": "^1.2.0", - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", - "@fortawesome/react-fontawesome": "^0.2.2", - "@hookform/resolvers": "^3.3.4", + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/react-fontawesome": "^0.2.6", + "@hookform/resolvers": "^3.10.0", "@microsoft/fetch-event-source": "^2.0.1", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-avatar": "^1.0.4", - "@radix-ui/react-checkbox": "^1.1.5", - "@radix-ui/react-dialog": "^1.1.7", - "@radix-ui/react-dropdown-menu": "^2.1.7", - "@radix-ui/react-label": "^2.1.3", - "@radix-ui/react-popover": "^1.1.7", - "@radix-ui/react-progress": "^1.0.3", - "@radix-ui/react-radio-group": "^1.0.3", - "@radix-ui/react-scroll-area": "^1.0.5", - "@radix-ui/react-select": "^2.0.0", - "@radix-ui/react-separator": "^1.1.3", - "@radix-ui/react-slider": "^1.2.4", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.3", - "@radix-ui/react-switch": "^1.0.3", - "@radix-ui/react-tabs": "^1.1.4", - "@radix-ui/react-toggle": "^1.0.3", - "@radix-ui/react-toggle-group": "^1.1.1", - "@radix-ui/react-tooltip": "^1.1.1", - "@radix-ui/react-visually-hidden": "^1.0.3", - "@rivet-gg/cloud": "file:./vendor/rivet-cloud.tgz", - "@rivet-gg/icons": "file:./vendor/rivet-icons.tgz", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "@radix-ui/react-visually-hidden": "^1.2.3", + "@rivet-gg/cloud": "file:vendor/rivet-cloud.tgz", + "@rivet-gg/icons": "workspace:*", "rivetkit": "*", "@rivetkit/engine-api-full": "workspace:*", - "@sentry/react": "^8.26.0", - "@sentry/vite-plugin": "^2.22.2", - "@shikijs/langs": "^3.2.1", - "@shikijs/transformers": "^3.8.1", + "@sentry/react": "^8.55.0", + "@sentry/vite-plugin": "^2.23.1", + "@shikijs/langs": "^3.12.2", + "@shikijs/transformers": "^3.12.2", "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/typography": "^0.5.16", - "@tanstack/query-core": "^5.81.5", - "@tanstack/react-query": "^5.81.5", - "@tanstack/react-query-devtools": "^5.81.5", - "@tanstack/react-router": "^1.114.25", - "@tanstack/react-router-devtools": "^1.131.7", - "@tanstack/react-store": "^0.7.3", - "@tanstack/react-table": "^8.20.6", - "@tanstack/react-virtual": "^3.10.8", - "@tanstack/router-devtools": "^1.114.25", - "@tanstack/router-plugin": "^1.114.25", - "@tanstack/store": "^0.7.2", - "@tanstack/zod-adapter": "^1.114.25", + "@tanstack/query-core": "^5.87.1", + "@tanstack/react-query": "^5.87.1", + "@tanstack/react-query-devtools": "^5.87.3", + "@tanstack/react-router": "^1.131.36", + "@tanstack/react-router-devtools": "^1.131.36", + "@tanstack/react-store": "^0.7.5", + "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.12", + "@tanstack/router-devtools": "^1.131.36", + "@tanstack/router-plugin": "^1.131.36", + "@tanstack/store": "^0.7.5", + "@tanstack/zod-adapter": "^1.131.36", "@types/bcryptjs": "^2.4.6", - "@types/file-saver": "^2", + "@types/escape-html": "^1.0.4", + "@types/file-saver": "^2.0.7", + "@types/lodash": "^4.17.20", "@types/mdx": "^2.0.13", - "@types/node": "^20.11.30", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "@uiw/codemirror-extensions-basic-setup": "^4.23.0", - "@uiw/codemirror-theme-github": "^4.23.0", - "@uiw/react-codemirror": "^4.23.0", - "@vitejs/plugin-react": "^4.2.1", - "actor-core": "^0.6.2", - "autoprefixer": "^10.4.19", + "@types/node": "^20.19.13", + "@types/react": "^18.3.24", + "@types/react-dom": "^18.3.7", + "@uiw/codemirror-extensions-basic-setup": "^4.25.1", + "@uiw/codemirror-theme-github": "^4.25.1", + "@uiw/react-codemirror": "^4.25.1", + "@vitejs/plugin-react": "^4.7.0", + "actor-core": "^0.6.3", + "autoprefixer": "^10.4.21", "bcryptjs": "^2.4.3", "class-variance-authority": "^0.7.1", - "clsx": "^2.1.0", + "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "esast-util-from-js": "^2.0.1", + "escape-html": "^1.0.3", "estree-util-to-js": "^2.0.0", "fast-deep-equal": "^3.1.3", "fast-json-patch": "^3.1.1", "file-saver": "^2.0.5", - "framer-motion": "^11.2.11", - "input-otp": "^1.2.3", + "filesize": "^11.0.2", + "framer-motion": "^11.18.2", + "input-otp": "^1.4.2", "lodash": "^4.17.21", - "postcss": "^8.4.38", - "posthog-js": "^1.144.2", - "react": "^19.0.0", + "postcss": "^8.5.6", + "posthog-js": "^1.262.0", + "react": "^19.1.1", "react-day-picker": "8.10.1", - "react-dom": "^19.0.0", - "react-hook-form": "^7.51.1", + "react-dom": "^19.1.1", + "react-hook-form": "^7.62.0", "react-inspector": "^6.0.2", - "react-resizable-panels": "^2.0.19", - "recharts": "^2.12.7", - "shiki": "^3.8.1", - "sonner": "^1.4.41", - "tailwind-merge": "^2.2.2", - "tailwindcss": "^3.4.1", + "react-resizable-panels": "^2.1.9", + "recharts": "^2.15.4", + "shiki": "^3.12.2", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "ts-pattern": "^5.8.0", - "typescript": "^5.5.4", + "typescript": "^5.9.2", "typescript-plugin-css-modules": "^5.2.0", - "usehooks-ts": "^3.1.0", - "vite": "^5.2.0", + "usehooks-ts": "^3.1.1", + "vite": "^5.4.20", "vite-plugin-favicons-inject": "^2.2.0", "vite-tsconfig-paths": "^5.1.4", - "zod": "^3.24" + "zod": "^3.25.76" } } diff --git a/frontend/packages/components/package.json b/frontend/packages/components/package.json index 50f0aa906d..7f49cd6c93 100644 --- a/frontend/packages/components/package.json +++ b/frontend/packages/components/package.json @@ -30,78 +30,78 @@ }, "types": "./dist/index.d.ts", "dependencies": { - "@codemirror/lang-javascript": "^6.2.2", - "@codemirror/lang-json": "^6.0.1", - "@codemirror/view": "^6.28.4", - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", - "@fortawesome/react-fontawesome": "^0.2.2", - "@hookform/resolvers": "^3.9.0", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-avatar": "^1.0.4", - "@radix-ui/react-checkbox": "^1.1.5", - "@radix-ui/react-context-menu": "^2.2.15", - "@radix-ui/react-dialog": "^1.1.7", - "@radix-ui/react-dropdown-menu": "^2.1.7", - "@radix-ui/react-label": "^2.1.3", - "@radix-ui/react-popover": "^1.1.7", - "@radix-ui/react-progress": "^1.0.3", - "@radix-ui/react-radio-group": "^1.0.3", - "@radix-ui/react-scroll-area": "^1.0.5", - "@radix-ui/react-select": "^2.0.0", - "@radix-ui/react-separator": "^1.1.3", - "@radix-ui/react-slider": "^1.2.4", - "@radix-ui/react-slot": "^1.2.0", - "@radix-ui/react-switch": "^1.0.3", - "@radix-ui/react-tabs": "^1.1.4", - "@radix-ui/react-toggle": "^1.0.3", - "@radix-ui/react-toggle-group": "^1.1.1", - "@radix-ui/react-tooltip": "^1.1.1", - "@radix-ui/react-visually-hidden": "^1.0.3", + "@codemirror/lang-javascript": "^6.2.4", + "@codemirror/lang-json": "^6.0.2", + "@codemirror/view": "^6.38.2", + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/react-fontawesome": "^0.2.6", + "@hookform/resolvers": "^3.10.0", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.7", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "@radix-ui/react-visually-hidden": "^1.2.3", "@rivet-gg/icons": "workspace:^", - "@sentry/react": "^8.26.0", - "@shikijs/langs": "^3.2.1", + "@sentry/react": "^8.55.0", + "@shikijs/langs": "^3.12.2", "@tailwindcss/container-queries": "^0.1.1", - "@tanstack/react-table": "^8.21.2", - "@tanstack/react-virtual": "^3.10.8", - "@uiw/codemirror-extensions-basic-setup": "^4.23.0", - "@uiw/codemirror-theme-github": "^4.23.0", - "@uiw/react-codemirror": "^4.23.0", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", + "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.12", + "@uiw/codemirror-extensions-basic-setup": "^4.25.1", + "@uiw/codemirror-theme-github": "^4.25.1", + "@uiw/react-codemirror": "^4.25.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "esast-util-from-js": "^2.0.1", "estree-util-to-js": "^2.0.0", "fast-deep-equal": "^3.1.3", - "framer-motion": "^11.2.11", - "input-otp": "^1.2.3", - "jotai": "^2.12.2", - "jotai-effect": "^2.0.2", + "framer-motion": "^11.18.2", + "input-otp": "^1.4.2", + "jotai": "^2.14.0", + "jotai-effect": "^2.1.0", "lucide-react": "^0.439.0", - "react": "^19", + "react": "^19.1.1", "react-day-picker": "8.10.1", - "react-dom": "^19", - "react-hook-form": "^7.51.1", - "react-resizable-panels": "^2.0.19", - "recharts": "^2.12.7", - "sonner": "^1.4.41", - "tailwind-merge": "^2.2.2", + "react-dom": "^19.1.1", + "react-hook-form": "^7.62.0", + "react-resizable-panels": "^2.1.9", + "recharts": "^2.15.4", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7", - "usehooks-ts": "^3.1.0", - "zod": "^3.24" + "usehooks-ts": "^3.1.1", + "zod": "^3.25.76" }, "devDependencies": { "@types/mime": "^4.0.0", - "@types/node": "^20.11.30", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.19", - "postcss": "^8.4.38", - "tailwindcss": "^3.4.1", - "vite": "^5.2.0", - "vite-plugin-dts": "^3.8.1" + "@types/node": "^20.19.13", + "@types/react": "^18.3.24", + "@types/react-dom": "^18.3.7", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "^10.4.21", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.17", + "vite": "^5.4.20", + "vite-plugin-dts": "^3.9.1" } } diff --git a/frontend/packages/icons/package.json b/frontend/packages/icons/package.json index 6d40033693..58217c952c 100644 --- a/frontend/packages/icons/package.json +++ b/frontend/packages/icons/package.json @@ -15,9 +15,9 @@ "node": ">=18" }, "dependencies": { - "dedent": "^1.5.3", - "local-pkg": "^0.5.0", - "vite": "^5.2.0" + "dedent": "^1.7.0", + "local-pkg": "^0.5.1", + "vite": "^5.4.20" }, "peerDependencies": { "@fortawesome/fontawesome-svg-core": "^6.5.2", @@ -46,6 +46,6 @@ } }, "devDependencies": { - "esbuild": "^0.25.0" + "esbuild": "^0.25.9" } } diff --git a/frontend/packages/icons/scripts/postinstall.js b/frontend/packages/icons/scripts/postinstall.js index 5eb31dddfe..fec0480a9a 100644 --- a/frontend/packages/icons/scripts/postinstall.js +++ b/frontend/packages/icons/scripts/postinstall.js @@ -5,13 +5,13 @@ const { join, resolve } = require("node:path"); const manifest = require("./../manifest.json"); const esbuild = require("esbuild"); -let hasFaToken = !!process.env.FONTAWESOME_PACKAGE_TOKEN; +const hasFaToken = !!process.env.FONTAWESOME_PACKAGE_TOKEN; const sourceDir = join(__dirname, "..", "src"); const sourceNodeModules = join(sourceDir, "node_modules"); -if (!fs.existsSync(sourceDir)){ - fs.mkdirSync(sourceDir, { recursive: true }); +if (!fs.existsSync(sourceDir)) { + fs.mkdirSync(sourceDir, { recursive: true }); } if (process.env.FONTAWESOME_PACKAGE_TOKEN) { @@ -45,15 +45,11 @@ if (process.env.FONTAWESOME_PACKAGE_TOKEN) { ); // Install dependencies locally without engaging the workspace to avoid recursion - spawnSync( - "npm", - ["install", "--no-package-lock", "--silent"], - { - stdio: "inherit", - cwd: sourceDir, - env: { ...process.env, CI: 0 }, - }, - ); + spawnSync("npm", ["install", "--no-package-lock", "--silent"], { + stdio: "inherit", + cwd: sourceDir, + env: { ...process.env, CI: 0 }, + }); } const banner = dedent` @@ -71,8 +67,6 @@ let indexJsSource = dedent` export function Icon(props) { return createElement(FontAwesomeIcon, props)} `; - - for (const [pkg, { icons }] of Object.entries(manifest)) { const isCustom = pkg.startsWith("@awesome.me/kit-"); const isPro = pkg.startsWith("@fortawesome/pro-"); @@ -92,7 +86,11 @@ for (const [pkg, { icons }] of Object.entries(manifest)) { if (!indexJsSource.includes(`export { definition as ${icon} }`)) { if (hasFaToken || !isPro) { if (hasFaToken && isPro) { - const candidate = join(sourceNodeModules, pkg, `${icon}.js`); + const candidate = join( + sourceNodeModules, + pkg, + `${icon}.js`, + ); if (fs.existsSync(candidate)) { indexJsSource += `export { definition as ${icon} } from "${pkg}/${icon}";\n`; } else { @@ -113,7 +111,11 @@ for (const [pkg, { icons }] of Object.entries(manifest)) { continue; } if (hasFaToken && isPro) { - const candidate = join(sourceNodeModules, pkg, `${icon}.js`); + const candidate = join( + sourceNodeModules, + pkg, + `${icon}.js`, + ); if (fs.existsSync(candidate)) { indexJsSource += `export { definition as ${alias} } from "${pkg}/${icon}";\n`; } else { @@ -128,7 +130,7 @@ for (const [pkg, { icons }] of Object.entries(manifest)) { } fs.writeFileSync(join(sourceDir, "index.gen.js"), `${indexJsSource}`); -let indexTsSource = dedent` +const indexTsSource = dedent` ${banner} import { FontAwesomeIcon, FontAwesomeIconProps } from "@fortawesome/react-fontawesome"; import { ComponentProps, createElement } from "react"; @@ -139,6 +141,9 @@ let indexTsSource = dedent` fs.writeFileSync(join(sourceDir, "index.gen.ts"), `${indexTsSource}`); async function build() { + console.log( + `Generating icon exports. Pro icons will ${hasFaToken ? "" : "not "}be included.`, + ); const externals = [ "react", "react-dom", @@ -150,10 +155,12 @@ async function build() { // When token is present, we bundle Pro icons into dist so consumers // don't need to resolve these at runtime from their node_modules. // This avoids Module Not Found errors during Next.js builds. - ...(hasFaToken ? [] : [ - "@fortawesome/pro-solid-svg-icons", - "@fortawesome/pro-regular-svg-icons", - ]), + ...(hasFaToken + ? [] + : [ + "@fortawesome/pro-solid-svg-icons", + "@fortawesome/pro-regular-svg-icons", + ]), ]; await esbuild.build({ diff --git a/frontend/src/app.tsx b/frontend/src/app.tsx index b8fa63e2e1..31de0bcf9b 100644 --- a/frontend/src/app.tsx +++ b/frontend/src/app.tsx @@ -1,8 +1,12 @@ +import type { Clerk } from "@clerk/clerk-js"; +import { ClerkProvider } from "@clerk/clerk-react"; +import { dark } from "@clerk/themes"; import * as Sentry from "@sentry/react"; import { QueryClientProvider } from "@tanstack/react-query"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { createRouter, RouterProvider } from "@tanstack/react-router"; -import { Suspense, useEffect } from "react"; +import { Suspense } from "react"; +import { match } from "ts-pattern"; import { ConfigProvider, FullscreenLoading, @@ -12,9 +16,10 @@ import { TooltipProvider, } from "@/components"; import { PageLayout } from "@/components/layout"; +import { clerk } from "./lib/auth"; +import { cloudEnv } from "./lib/env"; import { queryClient } from "./queries/global"; import { routeTree } from "./routeTree.gen"; -import { initializeShiftKeyTracking } from "./stores/shift-key-store"; declare module "@tanstack/react-router" { interface Register { @@ -33,9 +38,16 @@ declare module "@tanstack/react-query" { export const router = createRouter({ basepath: import.meta.env.BASE_URL, routeTree, - defaultStaleTime: Number.POSITIVE_INFINITY, + context: { + clerk: + __APP_TYPE__ === "cloud" ? clerk : (undefined as unknown as Clerk), + queryClient: queryClient, + }, + defaultStaleTime: Infinity, defaultPendingComponent: PageLayout.Root.Skeleton, defaultPreloadStaleTime: 0, + defaultGcTime: 0, + defaultPreloadGcTime: 0, defaultOnCatch: (error) => { Sentry.captureException(error); }, @@ -45,17 +57,30 @@ function InnerApp() { return ; } +function CloudApp() { + return ( + + + + ); +} + export function App() { - useEffect(() => { - return initializeShiftKeyTracking(); - }, []); return ( }> - + {match(__APP_TYPE__) + .with("cloud", () => ) + .otherwise(() => ( + + ))} diff --git a/frontend/src/app/actor-builds-list.tsx b/frontend/src/app/actor-builds-list.tsx index 9044c9b8d9..16ac2d800d 100644 --- a/frontend/src/app/actor-builds-list.tsx +++ b/frontend/src/app/actor-builds-list.tsx @@ -4,20 +4,17 @@ import { Icon, } from "@rivet-gg/icons"; import { useInfiniteQuery } from "@tanstack/react-query"; -import { - Link, - type LinkComponentProps, - useNavigate, -} from "@tanstack/react-router"; +import { Link, useNavigate } from "@tanstack/react-router"; import { Fragment } from "react"; import { match } from "ts-pattern"; import { Button, cn, Skeleton } from "@/components"; -import { ACTORS_PER_PAGE, useManager } from "@/components/actors"; +import { useDataProvider } from "@/components/actors"; import { VisibilitySensor } from "@/components/visibility-sensor"; +import { RECORDS_PER_PAGE } from "./data-providers/default-data-provider"; export function ActorBuildsList() { const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } = - useInfiniteQuery(useManager().buildsQueryOptions()); + useInfiniteQuery(useDataProvider().buildsQueryOptions()); const navigate = useNavigate(); @@ -33,13 +30,13 @@ export function ActorBuildsList() { ))} {isFetchingNextPage || isLoading - ? Array(ACTORS_PER_PAGE) + ? Array(RECORDS_PER_PAGE) .fill(null) .map((_, i) => ( diff --git a/frontend/src/app/actors.tsx b/frontend/src/app/actors.tsx index 101b974cf0..aae11f8c78 100644 --- a/frontend/src/app/actors.tsx +++ b/frontend/src/app/actors.tsx @@ -7,7 +7,7 @@ import { ActorsActorDetails, ActorsActorEmptyDetails, ActorsListPreview, - useManager, + useDataProvider, } from "@/components/actors"; export function Actors({ actorId }: { actorId: string | undefined }) { @@ -30,10 +30,10 @@ export function Actors({ actorId }: { actorId: string | undefined }) { function Actor() { const navigate = useNavigate(); - const { tab, actorId } = useSearch({ from: "/_layout" }); + const { tab, actorId } = useSearch({ from: "/_context" }); const { data, isError } = useQuery( - useManager().actorQueryOptions(actorId as ActorId), + useDataProvider().actorQueryOptions(actorId as ActorId), ); if (!data || isError) { diff --git a/frontend/src/app/context-switcher.tsx b/frontend/src/app/context-switcher.tsx index b37cc0c12a..799202a3d0 100644 --- a/frontend/src/app/context-switcher.tsx +++ b/frontend/src/app/context-switcher.tsx @@ -1,11 +1,9 @@ -import { useClerk, useOrganizationList } from "@clerk/clerk-react"; -import { AvatarImage } from "@radix-ui/react-avatar"; -import { faPlusCircle, Icon } from "@rivet-gg/icons"; +import { useClerk } from "@clerk/clerk-react"; +import { faChevronDown, faPlusCircle, Icon } from "@rivet-gg/icons"; import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; import { useMatchRoute, useNavigate, useParams } from "@tanstack/react-router"; import { useState } from "react"; import { - Avatar, Button, Command, CommandEmpty, @@ -13,42 +11,38 @@ import { CommandInput, CommandItem, CommandList, - cn, Popover, PopoverContent, PopoverTrigger, Skeleton, } from "@/components"; -import { useManager } from "@/components/actors"; +import { useCloudDataProvider } from "@/components/actors"; import { SafeHover } from "@/components/safe-hover"; import { VisibilitySensor } from "@/components/visibility-sensor"; -import { - namespaceQueryOptions, - organizationQueryOptions, - projectQueryOptions, - projectsQueryOptions, -} from "@/queries/manager-cloud"; export function ContextSwitcher() { const [isOpen, setIsOpen] = useState(false); return ( - - - + + - - - - - setIsOpen(false)} /> - - + setIsOpen(false)} /> + + + ); } @@ -61,20 +55,21 @@ function Breadcrumbs() { }); if (matchNamespace) { return ( - <> - - - - +
+
+ +
+
+ +
+
); } @@ -85,47 +80,10 @@ function Breadcrumbs() { if (matchProject) { return ( <> - ); } - - const matchOrg = match({ - to: "/orgs/$organization", - }); - - if (matchOrg) { - return ; - } -} - -function OrganizationBreadcrumb({ - org, - className, -}: { - org: string; - className?: string; -}) { - const { isLoading, data } = useQuery(organizationQueryOptions({ org })); - if (isLoading) { - return ; - } - - return ( -
- - - - {data?.name} -
- ); } function ProjectBreadcrumb({ @@ -135,7 +93,9 @@ function ProjectBreadcrumb({ project: string; className?: string; }) { - const { isLoading, data } = useQuery(projectQueryOptions({ project })); + const { isLoading, data } = useQuery( + useCloudDataProvider().currentOrgProjectQueryOptions({ project }), + ); if (isLoading) { return ; } @@ -153,7 +113,10 @@ function NamespaceBreadcrumb({ className?: string; }) { const { isLoading, data } = useQuery( - namespaceQueryOptions({ project, namespace }), + useCloudDataProvider().currentOrgProjectNamespaceQueryOptions({ + project, + namespace, + }), ); if (isLoading) { return ; @@ -163,141 +126,30 @@ function NamespaceBreadcrumb({ } function Content({ onClose }: { onClose?: () => void }) { - const params = useParams({ strict: false }); - const { - userMemberships: { - data: userMemberships = [], - isLoading, - hasNextPage, - fetchNext, - }, - } = useOrganizationList({ - userMemberships: { - infinite: true, - }, + const params = useParams({ + strict: false, + select: (p) => ({ organization: p.organization, project: p.project }), }); - const clerk = useClerk(); - - const [currentOrgHover, setCurrentOrgHover] = useState( - params.organization || null, - ); const [currentProjectHover, setCurrentProjectHover] = useState< string | null >(params.project || null); - const navigate = useNavigate(); + if (!params.organization) { + return; + } return (
-
- - - - - {!isLoading ? ( - - No organizations found. - - - ) : null} - {userMemberships.map((membership) => ( - - { - clerk.setActive({ - organization: - membership.organization.id, - }); - navigate({ - to: "/orgs/$organization", - params: { - organization: - membership.organization - .id, - }, - }); - onClose?.(); - }} - value={membership.organization.id} - onMouseEnter={() => { - setCurrentOrgHover( - membership.organization.id, - ); - setCurrentProjectHover(null); - }} - keywords={[ - membership.organization.name, - ]} - className="static cursor-pointer" - > - {membership.organization.name} - - - ))} - {isLoading ? ( - <> - - - - - - - ) : null} - { - setCurrentOrgHover(null); - setCurrentProjectHover(null); - }} - onFocus={() => { - setCurrentOrgHover(null); - setCurrentProjectHover(null); - }} - onSelect={() => { - clerk.openCreateOrganization(); - }} - > - - Create Organization - + - {hasNextPage ? ( - - ) : null} - - - -
- {currentOrgHover ? ( - - ) : null} - {currentProjectHover && currentOrgHover ? ( + {currentProjectHover ? ( @@ -316,7 +168,11 @@ function ProjectList({ onHover?: (project: string | null) => void; }) { const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery(projectsQueryOptions({ organization: organization })); + useInfiniteQuery( + useCloudDataProvider().projectsQueryOptions({ + organization: organization, + }), + ); const navigate = useNavigate(); const clerk = useClerk(); const project = useParams({ @@ -449,7 +305,11 @@ function NamespaceList({ onClose?: () => void; }) { const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery(useManager().projectNamespacesQueryOptions(project)); + useInfiniteQuery( + useCloudDataProvider().currentOrgProjectNamespacesQueryOptions({ + project, + }), + ); const navigate = useNavigate(); const clerk = useClerk(); const namespace = useParams({ diff --git a/frontend/src/app/data-providers/cloud-data-provider.tsx b/frontend/src/app/data-providers/cloud-data-provider.tsx new file mode 100644 index 0000000000..acf7bf05d6 --- /dev/null +++ b/frontend/src/app/data-providers/cloud-data-provider.tsx @@ -0,0 +1,242 @@ +import type { Clerk } from "@clerk/clerk-js"; +import { type Rivet, RivetClient } from "@rivet-gg/cloud"; +import { infiniteQueryOptions, queryOptions } from "@tanstack/react-query"; +import { cloudEnv } from "@/lib/env"; +import { RECORDS_PER_PAGE } from "./default-data-provider"; +import { + type CreateNamespace, + createClient as createEngineClient, + createNamespaceContext as createEngineNamespaceContext, + type Namespace, +} from "./engine-data-provider"; + +function createClient({ clerk }: { clerk: Clerk }) { + return new RivetClient({ + baseUrl: () => cloudEnv().VITE_APP_CLOUD_API_URL, + environment: "", + token: async () => { + return (await clerk.session?.getToken()) || ""; + }, + }); +} + +export const createGlobalContext = ({ clerk }: { clerk: Clerk }) => { + return { + client: createClient({ clerk }), + organizationQueryOptions(opts: { org: string }) { + return queryOptions({ + queryKey: ["organization", opts.org], + queryFn: async () => { + return clerk.getOrganization(opts.org); + }, + }); + }, + }; +}; + +export const createOrganizationContext = ({ + client, + organization, +}: { + organization: string; +} & ReturnType) => { + const orgProjectNamespacesQueryOptions = (opts: { + organization: string; + project: string; + }) => + infiniteQueryOptions({ + queryKey: [opts, "namespaces"], + initialPageParam: undefined as string | undefined, + queryFn: async ({ pageParam, signal: abortSignal }) => { + const data = await client.namespaces.list( + opts.project, + { + org: opts.organization, + limit: RECORDS_PER_PAGE, + cursor: pageParam ?? undefined, + }, + { abortSignal }, + ); + return { + pagination: data.pagination, + namespaces: data.namespaces.map((ns) => ({ + id: ns.id, + name: ns.name, + displayName: ns.displayName, + createdAt: ns.createdAt, + })), + }; + }, + getNextPageParam: (lastPage) => { + if (lastPage.namespaces.length < RECORDS_PER_PAGE) { + return undefined; + } + return lastPage.pagination.cursor; + }, + select: (data) => data.pages.flatMap((page) => page.namespaces), + }); + + const projectsQueryOptions = (opts: { organization: string }) => + infiniteQueryOptions({ + queryKey: [opts, "projects"], + initialPageParam: undefined as string | undefined, + queryFn: async ({ signal: abortSignal, pageParam }) => { + const data = await client.projects.list( + { + org: opts.organization, + cursor: pageParam ?? undefined, + limit: RECORDS_PER_PAGE, + }, + { + abortSignal, + }, + ); + return data; + }, + getNextPageParam: (lastPage) => { + if (lastPage.projects.length < RECORDS_PER_PAGE) { + return undefined; + } + return lastPage.pagination.cursor; + }, + select: (data) => data.pages.flatMap((page) => page.projects), + }); + + const projectQueryOptions = (opts: { + project: string; + organization: string; + }) => + queryOptions({ + queryKey: [opts, "project"], + queryFn: async ({ signal: abortSignal }) => { + const data = await client.projects.get( + opts.project, + { + org: opts.organization, + }, + { abortSignal }, + ); + return data; + }, + enabled: !!opts.project, + }); + + return { + orgProjectNamespacesQueryOptions, + currentOrgProjectNamespacesQueryOptions: (opts: { + project: string; + }) => { + return orgProjectNamespacesQueryOptions({ + organization, + project: opts.project, + }); + }, + projectsQueryOptions, + currentOrgProjectsQueryOptions: () => { + return projectsQueryOptions({ organization }); + }, + currentOrgProjectQueryOptions: (opts: { project: string }) => { + return projectQueryOptions({ organization, project: opts.project }); + }, + currentOrgProjectNamespaceQueryOptions(opts: { + project: string; + namespace: string; + }) { + return queryOptions({ + queryKey: [opts, "namespace"], + queryFn: async ({ signal: abortSignal }) => { + const data = await client.namespaces.get( + opts.project, + opts.namespace, + { + org: organization, + }, + { abortSignal }, + ); + return data; + }, + enabled: !!opts.namespace, + }); + }, + currentOrgCreateProjectMutationOptions({ + onSuccess, + }: { + onSuccess?: (data: Rivet.Project) => void; + } = {}) { + return { + mutationKey: ["projects"], + mutationFn: async (data: { + displayName: string; + nameId: string; + }) => { + const response = await client.projects.create({ + displayName: data.displayName, + name: data.nameId, + organizationId: organization, + }); + + return response; + }, + onSuccess, + }; + }, + }; +}; + +export const createProjectContext = ({ + client, + organization, + project, + ...parent +}: { + client: RivetClient; + organization: string; + project: string; +} & ReturnType & + ReturnType) => { + return { + createNamespaceMutationOptions(opts: { + onSuccess?: (data: Namespace) => void; + }) { + return { + ...opts, + mutationKey: ["namespaces"], + mutationFn: async (data: CreateNamespace) => { + const response = await client.namespaces.create(project, { + name: data.name, + displayName: data.displayName, + org: organization, + }); + return response; + }, + }; + }, + currentProjectNamespacesQueryOptions: () => { + return parent.orgProjectNamespacesQueryOptions({ + organization, + project, + }); + }, + namespacesQueryOptions() { + return parent.orgProjectNamespacesQueryOptions({ + organization, + project, + }); + }, + }; +}; + +export const createNamespaceContext = ({ + namespace, + ...parent +}: { namespace: string } & ReturnType & + ReturnType & + ReturnType) => { + return { + ...createEngineNamespaceContext({ + namespace, + ...parent, + client: createEngineClient(), + }), + }; +}; diff --git a/frontend/src/components/actors/manager-context.tsx b/frontend/src/app/data-providers/default-data-provider.tsx similarity index 81% rename from frontend/src/components/actors/manager-context.tsx rename to frontend/src/app/data-providers/default-data-provider.tsx index 6ee5e10fd3..c5b632781f 100644 --- a/frontend/src/components/actors/manager-context.tsx +++ b/frontend/src/app/data-providers/default-data-provider.tsx @@ -1,24 +1,23 @@ import { infiniteQueryOptions, type MutationOptions, - type QueryClient, queryOptions, } from "@tanstack/react-query"; -import { createContext, useContext } from "react"; -import type { CreateActor as InspectorCreateActor } from "rivetkit/inspector"; +import type { + ActorId, + ActorLogEntry, + CreateActor as InspectorCreateActor, +} from "rivetkit/inspector"; import { z } from "zod"; -import { queryClient } from "@/queries/global"; import { type Actor, - type ActorId, - type ActorLogEntry, type ActorMetrics, type Build, type CrashPolicy, getActorStatus, - type Namespace, type Region, -} from "./queries"; +} from "@/components/actors"; +import { queryClient } from "@/queries/global"; export const ActorQueryOptionsSchema = z .object({ @@ -49,7 +48,7 @@ export const ActorQueryOptionsSchema = z .optional(); export type ActorQueryOptions = z.infer; -export const ACTORS_PER_PAGE = 10; +export const RECORDS_PER_PAGE = 10; type PaginatedResponse = { pagination: { cursor?: string }; @@ -58,7 +57,6 @@ type PaginatedResponse = { type PaginatedActorResponse = PaginatedResponse; type PaginatedBuildsResponse = PaginatedResponse; type PaginatedRegionsResponse = PaginatedResponse; -type PaginatedNamespacesResponse = PaginatedResponse; type CreateActor = Omit & { runnerNameSelector: string; @@ -89,7 +87,7 @@ const defaultContext = { if ( !lastPage || lastPage.actors.length === 0 || - lastPage.actors.length < ACTORS_PER_PAGE + lastPage.actors.length < RECORDS_PER_PAGE ) { return undefined; } @@ -117,30 +115,6 @@ const defaultContext = { }); }, - namespacesQueryOptions() { - return infiniteQueryOptions({ - queryKey: ["namespaces"], - initialPageParam: undefined as string | undefined, - queryFn: async () => { - return {} as PaginatedNamespacesResponse; - }, - getNextPageParam: () => undefined, - select: (data) => data.pages.flatMap((page) => page.namespaces), - }); - }, - - projectNamespacesQueryOptions(projectId: string) { - return infiniteQueryOptions({ - queryKey: ["namespaces", projectId], - initialPageParam: undefined as string | undefined, - queryFn: async () => { - return {} as PaginatedNamespacesResponse; - }, - getNextPageParam: () => undefined, - select: (data) => data.pages.flatMap((page) => page.namespaces), - }); - }, - buildsCountQueryOptions() { return infiniteQueryOptions({ ...this.buildsQueryOptions(), @@ -338,7 +312,7 @@ const defaultContext = { select: (data) => data.pages.flatMap((page) => page.regions), }); }, - regionQueryOptions(regionId: string) { + regionQueryOptions(regionId: string | undefined) { return queryOptions({ queryKey: ["actor", "region", regionId], enabled: !!regionId, @@ -347,9 +321,9 @@ const defaultContext = { }, }); }, - managerStatusQueryOptions() { + statusQueryOptions() { return queryOptions({ - queryKey: ["managerStatus"], + queryKey: ["status"], refetchInterval: 1000, enabled: false, retry: 0, @@ -376,38 +350,10 @@ const defaultContext = { }, }; }, - createNamespaceMutationOptions( - opts: Pick< - MutationOptions< - Namespace, - Error, - { name: string; displayName: string } - >, - "onSuccess" - >, - ) { - return { - ...opts, - mutationKey: ["createNamespace"], - mutationFn: async (_) => { - return {} as Namespace; - }, - } satisfies MutationOptions< - Namespace, - Error, - { name: string; displayName: string } - >; - }, }; -export type ManagerContext = typeof defaultContext; +export type DefaultDataProvider = typeof defaultContext; -export function createDefaultManagerContext(): ManagerContext { +export function createDefaultGlobalContext(): DefaultDataProvider { return defaultContext; } - -const ManagerContext = createContext({} as ManagerContext); - -export const useManager = () => useContext(ManagerContext); - -export const ManagerProvider = ManagerContext.Provider; diff --git a/frontend/src/queries/manager-engine.ts b/frontend/src/app/data-providers/engine-data-provider.tsx similarity index 62% rename from frontend/src/queries/manager-engine.ts rename to frontend/src/app/data-providers/engine-data-provider.tsx index 925309d3f3..b36b6da629 100644 --- a/frontend/src/queries/manager-engine.ts +++ b/frontend/src/app/data-providers/engine-data-provider.tsx @@ -1,53 +1,118 @@ import { type Rivet, RivetClient } from "@rivetkit/engine-api-full"; +import { infiniteQueryOptions, queryOptions } from "@tanstack/react-query"; import { - infiniteQueryOptions, - queryOptions, - skipToken, -} from "@tanstack/react-query"; -import { ActorFeature } from "rivetkit/inspector"; -import z from "zod"; -import { getConfig, ls } from "@/components"; -import type { - Actor, - ActorId, - CrashPolicy, - ManagerContext, + type Actor, + ActorFeature, + type ActorId, + type CrashPolicy, } from "@/components/actors"; +import { engineEnv } from "@/lib/env"; +import { convertStringToId } from "@/lib/utils"; import { - ACTORS_PER_PAGE, ActorQueryOptionsSchema, - createDefaultManagerContext, -} from "@/components/actors/manager-context"; + createDefaultGlobalContext, + type DefaultDataProvider, + RECORDS_PER_PAGE, +} from "./default-data-provider"; import { noThrow, shouldRetryAllExpect403 } from "./utils"; -export const createClient = (opts: { token: (() => string) | string }) => - new RivetClient({ - baseUrl: () => getConfig().apiUrl, +export type CreateNamespace = { + displayName: string; + name?: string; +}; + +export type Namespace = { + id: string; + name: string; + displayName: string; + createdAt: string; +}; + +export function createClient(opts: { token: (() => string) | string }) { + return new RivetClient({ + baseUrl: () => engineEnv().VITE_APP_API_URL, environment: "", ...opts, }); +} -const client = createClient({ - token: () => ls.engineCredentials.get(getConfig().apiUrl) || "", -}); +export const createGlobalContext = (opts: { + engineToken: (() => string) | string; +}) => { + const client = createClient({ token: opts.engineToken }); + return { + client, + namespacesQueryOptions() { + return infiniteQueryOptions({ + queryKey: ["namespaces"] as any, + initialPageParam: undefined as string | undefined, + queryFn: async ({ pageParam, signal: abortSignal }) => { + const data = await client.namespaces.list( + { + limit: RECORDS_PER_PAGE, + cursor: pageParam ?? undefined, + }, + { abortSignal }, + ); + return { + ...data, + namespaces: data.namespaces.map((ns) => ({ + id: ns.namespaceId, + displayName: ns.displayName, + name: ns.name, + createdAt: new Date(ns.createTs).toISOString(), + })), + }; + }, + getNextPageParam: (lastPage) => { + if (lastPage.namespaces.length < RECORDS_PER_PAGE) { + return undefined; + } + return lastPage.pagination.cursor; + }, + select: (data) => data.pages.flatMap((page) => page.namespaces), + }); + }, + createNamespaceMutationOptions(opts: { + onSuccess?: (data: Namespace) => void; + }) { + return { + ...opts, + mutationKey: ["namespaces"], + mutationFn: async (data: CreateNamespace) => { + const response = await client.namespaces.create({ + displayName: data.displayName, + name: data.name || convertStringToId(data.displayName), + }); -export { client as managerClient }; + return { + id: response.namespace.namespaceId, + name: response.namespace.name, + displayName: response.namespace.displayName, + createdAt: new Date( + response.namespace.createTs, + ).toISOString(), + }; + }, + }; + }, + }; +}; -export const createEngineManagerContext = ({ +export const createNamespaceContext = ({ namespace, -}: { - namespace: string; -}) => { - const def = createDefaultManagerContext(); - return { + client, +}: { namespace: string } & ReturnType) => { + const def = createDefaultGlobalContext(); + const dataProvider = { ...def, features: { canCreateActors: true, canDeleteActors: true, }, - managerStatusQueryOptions() { + statusQueryOptions() { return queryOptions({ - ...def.managerStatusQueryOptions(), + ...def.statusQueryOptions(), enabled: true, queryFn: async () => { return true; @@ -80,7 +145,7 @@ export const createEngineManagerContext = ({ }, }); }, - regionQueryOptions(regionId: string) { + regionQueryOptions(regionId: string | undefined) { return queryOptions({ ...def.regionQueryOptions(regionId), queryKey: ["region", regionId], @@ -174,7 +239,7 @@ export const createEngineManagerContext = ({ opts?.filters?.showDestroyed?.value.includes( "1", )), - limit: ACTORS_PER_PAGE, + limit: RECORDS_PER_PAGE, name: opts?.filters?.id?.value ? undefined : opts?.n?.join(","), @@ -190,7 +255,7 @@ export const createEngineManagerContext = ({ }; }, getNextPageParam: (lastPage) => { - if (lastPage.actors.length < ACTORS_PER_PAGE) { + if (lastPage.actors.length < RECORDS_PER_PAGE) { return undefined; } return lastPage.pagination.cursor; @@ -212,7 +277,7 @@ export const createEngineManagerContext = ({ { namespace, cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, + limit: RECORDS_PER_PAGE, }, { abortSignal }, ); @@ -228,7 +293,7 @@ export const createEngineManagerContext = ({ }; }, getNextPageParam: (lastPage) => { - if (lastPage.builds.length < ACTORS_PER_PAGE) { + if (lastPage.builds.length < RECORDS_PER_PAGE) { return undefined; } return lastPage.pagination.cursor; @@ -277,202 +342,122 @@ export const createEngineManagerContext = ({ }, }; }, - namespacesQueryOptions() { + } satisfies DefaultDataProvider; + + return { + ...dataProvider, + runnersQueryOptions(opts: { namespace: string }) { return infiniteQueryOptions({ - queryKey: ["namespaces"], + queryKey: [opts.namespace, "runners"], initialPageParam: undefined as string | undefined, queryFn: async ({ pageParam, signal: abortSignal }) => { - const data = await client.namespaces.list( + const data = await client.runners.list( { - limit: ACTORS_PER_PAGE, + namespace: opts.namespace, cursor: pageParam ?? undefined, + limit: RECORDS_PER_PAGE, }, { abortSignal }, ); - return { - ...data, - namespaces: data.namespaces.map((ns) => ({ - id: ns.namespaceId, - displayName: ns.displayName, - name: ns.name, - createdAt: new Date(ns.createTs).toISOString(), - })), - }; + return data; }, getNextPageParam: (lastPage) => { - if (lastPage.namespaces.length < ACTORS_PER_PAGE) { + if (lastPage.runners.length < RECORDS_PER_PAGE) { return undefined; } return lastPage.pagination.cursor; }, - select: (data) => data.pages.flatMap((page) => page.namespaces), + select: (data) => data.pages.flatMap((page) => page.runners), retry: shouldRetryAllExpect403, meta: { mightRequireAuth: true, }, }); }, - createNamespaceMutationOptions(opts) { - return { - ...opts, - mutationKey: ["namespaces"], - mutationFn: async (data) => { - const response = await client.namespaces.create(data); - - return { - id: response.namespace.namespaceId, - name: response.namespace.name, - displayName: response.namespace.displayName, - createdAt: new Date( - response.namespace.createTs, - ).toISOString(), - }; + runnerNamesQueryOptions(opts: { namespace: string }) { + return infiniteQueryOptions({ + queryKey: [opts.namespace, "runner", "names"], + initialPageParam: undefined as string | undefined, + queryFn: async ({ signal: abortSignal, pageParam }) => { + const data = await client.runners.listNames( + { + namespace: opts.namespace, + cursor: pageParam ?? undefined, + limit: RECORDS_PER_PAGE, + }, + { + abortSignal, + }, + ); + return data; }, - }; - }, - } satisfies ManagerContext; -}; - -export const NamespaceNameId = z.string().brand(); -export type NamespaceNameId = z.infer; - -export const runnersQueryOptions = (opts: { namespace: NamespaceNameId }) => { - return infiniteQueryOptions({ - queryKey: [opts.namespace, "runners"], - initialPageParam: undefined as string | undefined, - queryFn: async ({ pageParam, signal: abortSignal }) => { - const data = await client.runners.list( - { - namespace: opts.namespace, - cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, + getNextPageParam: (lastPage) => { + if (lastPage.names.length < RECORDS_PER_PAGE) { + return undefined; + } + return lastPage.pagination.cursor; }, - { abortSignal }, - ); - return data; - }, - getNextPageParam: (lastPage) => { - if (lastPage.runners.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - select: (data) => data.pages.flatMap((page) => page.runners), - retry: shouldRetryAllExpect403, - throwOnError: noThrow, - meta: { - mightRequireAuth: true, - }, - }); -}; - -export const runnerQueryOptions = (opts: { - namespace: NamespaceNameId; - runnerId: string; -}) => { - return queryOptions({ - queryKey: [opts.namespace, "runner", opts.runnerId], - enabled: !!opts.runnerId, - queryFn: async ({ signal: abortSignal }) => { - const data = await client.runners.get( - opts.runnerId, - { namespace: opts.namespace }, - { - abortSignal, + select: (data) => data.pages.flatMap((page) => page.names), + retry: shouldRetryAllExpect403, + throwOnError: noThrow, + meta: { + mightRequireAuth: true, }, - ); - return data.runner; - }, - throwOnError: noThrow, - retry: shouldRetryAllExpect403, - meta: { - mightRequireAuth: true, + }); }, - }); -}; + runnerQueryOptions(opts: { namespace: string; runnerId: string }) { + return queryOptions({ + queryKey: [opts.namespace, "runner", opts.runnerId], + enabled: !!opts.runnerId, + queryFn: async ({ signal: abortSignal }) => { + const data = await client.runners.list( + { + namespace: opts.namespace, + runnerIds: opts.runnerId, + }, + { + abortSignal, + }, + ); -export const runnerByNameQueryOptions = (opts: { - namespace: NamespaceNameId; - runnerName: string; -}) => { - return queryOptions({ - queryKey: [opts.namespace, "runner", opts.runnerName], - enabled: !!opts.runnerName, - queryFn: async ({ signal: abortSignal }) => { - const data = await client.runners.list( - { namespace: opts.namespace, name: opts.runnerName }, - { - abortSignal, + if (!data.runners[0]) { + throw new Error("Runner not found"); + } + return data.runners[0]; }, - ); - if (!data.runners[0]) { - throw new Error("Runner not found"); - } - return data.runners[0]; - }, - throwOnError: noThrow, - retry: shouldRetryAllExpect403, - meta: { - mightRequireAuth: true, + throwOnError: noThrow, + retry: shouldRetryAllExpect403, + meta: { + mightRequireAuth: true, + }, + }); }, - }); -}; - -export const runnerNamesQueryOptions = (opts: { - namespace: NamespaceNameId; -}) => { - return infiniteQueryOptions({ - queryKey: [opts.namespace, "runner", "names"], - initialPageParam: undefined as string | undefined, - queryFn: async ({ signal: abortSignal, pageParam }) => { - const data = await client.runners.listNames( - { - namespace: opts.namespace, - cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, + runnerByNameQueryOptions(opts: { + namespace: string; + runnerName: string; + }) { + return queryOptions({ + queryKey: [opts.namespace, "runner", opts.runnerName], + enabled: !!opts.runnerName, + queryFn: async ({ signal: abortSignal }) => { + const data = await client.runners.list( + { namespace: opts.namespace, name: opts.runnerName }, + { + abortSignal, + }, + ); + if (!data.runners[0]) { + throw new Error("Runner not found"); + } + return data.runners[0]; }, - { - abortSignal, + retry: shouldRetryAllExpect403, + meta: { + mightRequireAuth: true, }, - ); - return data; - }, - getNextPageParam: (lastPage) => { - if (lastPage.names.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - select: (data) => data.pages.flatMap((page) => page.names), - throwOnError: noThrow, - retry: shouldRetryAllExpect403, - meta: { - mightRequireAuth: true, - }, - }); -}; - -export const namespaceQueryOptions = ( - namespace: NamespaceNameId | undefined, -) => { - return queryOptions({ - queryKey: ["namespace", namespace], - enabled: !!namespace, - queryFn: namespace - ? async ({ signal: abortSignal }) => { - const data = await client.namespaces.get(namespace, { - abortSignal, - }); - return data.namespace; - } - : skipToken, - - retry: shouldRetryAllExpect403, - throwOnError: noThrow, - meta: { - mightRequireAuth: true, + }); }, - }); + }; }; function transformActor(a: Rivet.Actor): Actor { diff --git a/frontend/src/queries/manager-inspector.ts b/frontend/src/app/data-providers/inspector-data-provider.tsx similarity index 89% rename from frontend/src/queries/manager-inspector.ts rename to frontend/src/app/data-providers/inspector-data-provider.tsx index 9bfef45a06..e556ac1abf 100644 --- a/frontend/src/queries/manager-inspector.ts +++ b/frontend/src/app/data-providers/inspector-data-provider.tsx @@ -3,31 +3,27 @@ import { createManagerInspectorClient, type Actor as InspectorActor, } from "rivetkit/inspector"; -import type { Actor, ActorId, ManagerContext } from "@/components/actors"; -import { createDefaultManagerContext } from "@/components/actors/manager-context"; +import type { Actor, ActorId } from "@/components/actors"; import { ensureTrailingSlash } from "@/lib/utils"; -export const createInspectorManagerContext = ({ - url, - token, -}: { - url: string; - token: string; -}) => { - const client = createClient({ url, token }); - - const def = createDefaultManagerContext(); +import { + createDefaultGlobalContext, + type DefaultDataProvider, +} from "./default-data-provider"; +export const createGlobalContext = (opts: { url: string; token: string }) => { + const def = createDefaultGlobalContext(); + const client = createClient(opts); return { ...def, - endpoint: url, + endpoint: opts.url, features: { canCreateActors: true, canDeleteActors: false, }, - managerStatusQueryOptions() { + statusQueryOptions() { return { - ...def.managerStatusQueryOptions(), + ...def.statusQueryOptions(), enabled: true, queryFn: async ({ signal }) => { const status = await client.ping.$get({ signal }); @@ -146,7 +142,7 @@ export const createInspectorManagerContext = ({ }, }; }, - } satisfies ManagerContext; + } satisfies DefaultDataProvider; }; function transformActor(a: InspectorActor): Actor { diff --git a/frontend/src/app/dialogs/create-namespace-dialog.tsx b/frontend/src/app/dialogs/create-namespace-frame.tsx similarity index 76% rename from frontend/src/app/dialogs/create-namespace-dialog.tsx rename to frontend/src/app/dialogs/create-namespace-frame.tsx index d5b17f46f2..16fe307755 100644 --- a/frontend/src/app/dialogs/create-namespace-dialog.tsx +++ b/frontend/src/app/dialogs/create-namespace-frame.tsx @@ -1,8 +1,8 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useNavigate, useParams } from "@tanstack/react-router"; import * as CreateNamespaceForm from "@/app/forms/create-namespace-form"; -import { DialogFooter, DialogHeader, DialogTitle, Flex } from "@/components"; -import { useManager } from "@/components/actors"; +import { Flex, Frame } from "@/components"; +import { useEngineCompatDataProvider } from "@/components/actors"; import { convertStringToId } from "@/lib/utils"; const useCreateNamespace = () => { @@ -11,7 +11,7 @@ const useCreateNamespace = () => { const params = useParams({ strict: false }); - const manager = useManager(); + const manager = useEngineCompatDataProvider(); return useMutation( manager.createNamespaceMutationOptions({ @@ -46,7 +46,7 @@ const useCreateNamespace = () => { ); }; -export default function CreateNamespacesDialogContent() { +export default function CreateNamespacesFrameContent() { const { mutateAsync } = useCreateNamespace(); return ( @@ -59,18 +59,20 @@ export default function CreateNamespacesDialogContent() { }} defaultValues={{ name: "", slug: "" }} > - - Create New Namespace - - - - - - + + Create New Namespace + + + + + + + + Create - + ); } diff --git a/frontend/src/app/dialogs/create-project-dialog.tsx b/frontend/src/app/dialogs/create-project-frame.tsx similarity index 62% rename from frontend/src/app/dialogs/create-project-dialog.tsx rename to frontend/src/app/dialogs/create-project-frame.tsx index 213a4901f5..29957c939e 100644 --- a/frontend/src/app/dialogs/create-project-dialog.tsx +++ b/frontend/src/app/dialogs/create-project-frame.tsx @@ -1,27 +1,24 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useNavigate, useParams } from "@tanstack/react-router"; import * as CreateProjectForm from "@/app/forms/create-project-form"; -import { DialogFooter, DialogHeader, DialogTitle, Flex } from "@/components"; +import { Flex, Frame } from "@/components"; +import { useCloudDataProvider } from "@/components/actors"; import { convertStringToId } from "@/lib/utils"; -import { - createProjectMutationOptions, - projectsQueryOptions, -} from "@/queries/manager-cloud"; -export default function CreateProjectDialogContent() { +export default function CreateProjectFrameContent() { const queryClient = useQueryClient(); const navigate = useNavigate(); const params = useParams({ strict: false }); + const provider = useCloudDataProvider(); + const { mutateAsync } = useMutation( - createProjectMutationOptions({ + provider.currentOrgCreateProjectMutationOptions({ onSuccess: async (values) => { if (params.organization) { - await queryClient.invalidateQueries({ - ...projectsQueryOptions({ - organization: params.organization, - }), - }); + await queryClient.invalidateQueries( + provider.currentOrgProjectsQueryOptions(), + ); } navigate({ to: "/orgs/$organization/projects/$project", @@ -44,18 +41,20 @@ export default function CreateProjectDialogContent() { }} defaultValues={{ name: "", slug: "" }} > - - Create New Project - - - - - - + + Create New Project + + + + + + + + Create - + ); } diff --git a/frontend/src/app/forms/create-project-form.tsx b/frontend/src/app/forms/create-project-form.tsx index 29c968d342..671319ffc4 100644 --- a/frontend/src/app/forms/create-project-form.tsx +++ b/frontend/src/app/forms/create-project-form.tsx @@ -43,6 +43,7 @@ export const Name = ({ className }: { className?: string }) => { diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 61d8da5dbc..7b5b634647 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,13 +1,19 @@ import { useClerk } from "@clerk/clerk-react"; import { faArrowUpRight, + faBolt, faLink, faServer, faSpinnerThird, Icon, } from "@rivet-gg/icons"; import { useQuery } from "@tanstack/react-query"; -import { Link, useMatchRoute, useNavigate } from "@tanstack/react-router"; +import { + Link, + useMatchRoute, + useNavigate, + useSearch, +} from "@tanstack/react-router"; import { type ComponentProps, createContext, @@ -23,8 +29,6 @@ import { import type { ImperativePanelGroupHandle } from "react-resizable-panels"; import { match } from "ts-pattern"; import { - Avatar, - AvatarImage, Button, type ButtonProps, cn, @@ -36,14 +40,14 @@ import { ScrollArea, Skeleton, } from "@/components"; -import { useManager } from "@/components/actors"; +import { useInspectorDataProvider } from "@/components/actors"; import type { HeaderLinkProps } from "@/components/header/header-link"; import { ensureTrailingSlash } from "@/lib/utils"; -import type { NamespaceNameId } from "@/queries/manager-engine"; import { ActorBuildsList } from "./actor-builds-list"; import { ContextSwitcher } from "./context-switcher"; import { useInspectorCredentials } from "./credentials-context"; import { NamespaceSelect } from "./namespace-select"; +import { UserDropdown } from "./user-dropdown"; interface RootProps { children: ReactNode; @@ -110,6 +114,7 @@ const VisibleInFull = ({ children }: PropsWithChildren) => { }, []); return ( + // biome-ignore lint/correctness/useUniqueElementIds: id its not html element id
{match(__APP_TYPE__) - .with("engine", () => ( + .with("inspector", () => ( <> @@ -161,7 +166,7 @@ const Sidebar = ({ )) - .with("inspector", () => ( + .with("engine", () => ( <> @@ -173,10 +178,8 @@ const Sidebar = ({ .exhaustive()}
-
- {match(__APP_TYPE__) - .with("cloud", () => ) - .otherwise(() => null)} +
+
+ {match(__APP_TYPE__) + .with("cloud", () => ( + <> +
+ +
+ +
+ + )) + .otherwise(() => null)}
@@ -281,9 +295,7 @@ const Breadcrumbs = (): ReactNode => {
} > - + ); }; @@ -291,7 +303,7 @@ const Breadcrumbs = (): ReactNode => { const NamespaceBreadcrumbs = ({ namespaceNameId, }: { - namespaceNameId: NamespaceNameId; + namespaceNameId: string; }) => { const navigate = useNavigate(); @@ -351,7 +363,7 @@ const Subnav = () => { ) : null}
- + Instances @@ -365,10 +377,16 @@ function HeaderLink({ icon, children, className, ...props }: HeaderLinkProps) { + ) : undefined } > @@ -393,10 +411,14 @@ function HeaderButton({ children, className, ...props }: ButtonProps) { } function ConnectionStatus(): ReactNode { - const { endpoint, ...queries } = useManager(); + const endpoint = useSearch({ + from: "/_context/_inspector", + select: (s) => s.u, + }); + const data = useInspectorDataProvider(); const { setCredentials } = useInspectorCredentials(); const { isLoading, isError, isSuccess } = useQuery( - queries.managerStatusQueryOptions(), + data.statusQueryOptions(), ); if (isLoading) { @@ -478,11 +500,12 @@ function CloudSidebarContent() { to="/orgs/$organization/projects/$project/ns/$namespace/connect" className="font-normal" params={matchNamespace} + icon={faBolt} > Connect -
- +
+ Instances @@ -498,11 +521,7 @@ function CloudSidebarContent() { if (matchOrganization) { return (
- + Projects { - clerk.openUserProfile(); - }} - > - - - - {clerk.user?.fullName} - - ); + return ; } diff --git a/frontend/src/app/namespace-select.tsx b/frontend/src/app/namespace-select.tsx index 91ac6b70b6..b0b165ac31 100644 --- a/frontend/src/app/namespace-select.tsx +++ b/frontend/src/app/namespace-select.tsx @@ -12,7 +12,7 @@ import { SelectTrigger, SelectValue, } from "@/components"; -import { useManager } from "@/components/actors"; +import { useEngineCompatDataProvider } from "@/components/actors"; import { VisibilitySensor } from "@/components/visibility-sensor"; interface NamespaceSelectProps extends ComponentProps { @@ -31,7 +31,9 @@ export function NamespaceSelect({ ...props }: NamespaceSelectProps) { const { data, hasNextPage, fetchNextPage, isFetchingNextPage } = - useInfiniteQuery(useManager().namespacesQueryOptions()); + useInfiniteQuery( + useEngineCompatDataProvider().namespacesQueryOptions(), + ); const handleValueChange = useCallback( (value: string) => { diff --git a/frontend/src/app/namespaces-page.tsx b/frontend/src/app/namespaces-page.tsx index 0f46779066..8246429d7e 100644 --- a/frontend/src/app/namespaces-page.tsx +++ b/frontend/src/app/namespaces-page.tsx @@ -16,7 +16,7 @@ import { Text, WithTooltip, } from "@/components"; -import { useManager } from "@/components/actors"; +import { useEngineCompatDataProvider } from "@/components/actors"; export function NamespacesPage({ from }: { from: LinkComponentProps["from"] }) { const { @@ -26,7 +26,9 @@ export function NamespacesPage({ from }: { from: LinkComponentProps["from"] }) { fetchNextPage, isLoading, refetch, - } = useInfiniteQuery(useManager().namespacesQueryOptions()); + } = useInfiniteQuery( + useEngineCompatDataProvider().namespacesQueryOptions(), + ); return (
diff --git a/frontend/src/app/route-layout.tsx b/frontend/src/app/route-layout.tsx new file mode 100644 index 0000000000..8508543391 --- /dev/null +++ b/frontend/src/app/route-layout.tsx @@ -0,0 +1,33 @@ +import { Outlet } from "@tanstack/react-router"; +import { useRef, useState } from "react"; +import type { ImperativePanelHandle } from "react-resizable-panels"; +import { RootLayoutContextProvider } from "@/components/actors/root-layout-context"; +import * as Layout from "./layout"; + +export function RouteLayout() { + const sidebarRef = useRef(null); + const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); + + return ( + + + { + setIsSidebarCollapsed(true); + }} + onExpand={() => setIsSidebarCollapsed(false)} + /> + + + + + + + + + ); +} diff --git a/frontend/src/app/use-dialog.tsx b/frontend/src/app/use-dialog.tsx index ecb0e9643d..e553ba6ee4 100644 --- a/frontend/src/app/use-dialog.tsx +++ b/frontend/src/app/use-dialog.tsx @@ -6,12 +6,12 @@ import { export const useDialog = { ...baseUseDialog, CreateNamespace: createDialogHook( - import("@/app/dialogs/create-namespace-dialog"), + () => import("@/app/dialogs/create-namespace-dialog"), ), CreateProject: createDialogHook( - import("@/app/dialogs/create-project-dialog"), + () => import("@/app/dialogs/create-project-dialog"), ), ProvideEngineCredentials: createDialogHook( - import("@/app/dialogs/provide-engine-credentials-dialog"), + () => import("@/app/dialogs/provide-engine-credentials-dialog"), ), }; diff --git a/frontend/src/app/user-dropdown.tsx b/frontend/src/app/user-dropdown.tsx new file mode 100644 index 0000000000..99f0da5007 --- /dev/null +++ b/frontend/src/app/user-dropdown.tsx @@ -0,0 +1,180 @@ +import { useClerk, useOrganizationList } from "@clerk/clerk-react"; +import { faChevronDown, faPlus, Icon } from "@rivet-gg/icons"; +import { useQuery } from "@tanstack/react-query"; +import { useNavigate, useParams } from "@tanstack/react-router"; +import { + Avatar, + AvatarFallback, + AvatarImage, + Button, + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuPortal, + DropdownMenuSeparator, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, + Skeleton, +} from "@/components"; +import { useCloudDataProvider } from "@/components/actors"; +import { VisibilitySensor } from "@/components/visibility-sensor"; + +export function UserDropdown() { + const org = useParams({ + strict: false, + select: (p) => p.organization, + }); + + const clerk = useClerk(); + + return ( + + + {org ? : null} + + + { + clerk.openOrganizationProfile(); + }} + > + Settings + + { + clerk.openOrganizationProfile({ + __experimental_startPath: "/organization-members", + }); + }} + > + Members + + + + + Switch Organization + + + + + + + + { + clerk.signOut(); + }} + > + Logout + + + + ); +} + +function Preview({ org }: { org: string }) { + const { isLoading, data } = useQuery( + useCloudDataProvider().organizationQueryOptions({ org }), + ); + if (isLoading) { + return ; + } + + return ( + + ); +} + +function OrganizationSwitcher({ value }: { value: string | undefined }) { + const { + userMemberships: { + data: userMemberships = [], + isLoading, + hasNextPage, + fetchNext, + }, + } = useOrganizationList({ + userMemberships: { + infinite: true, + }, + }); + + const clerk = useClerk(); + const navigate = useNavigate(); + + return ( + <> + {isLoading ? ( + <> + + + + + + + + + + + + + + + + + ) : null} + {userMemberships.map((membership) => ( + { + clerk.setActive({ + organization: membership.organization.id, + navigate: () => { + navigate({ + to: `/orgs/$organization`, + params: { + organization: + membership.organization.id, + }, + }); + }, + }); + }} + > + + + + {membership.organization.name[0].toUpperCase()} + + + {membership.organization.name} + + ))} + { + clerk.openCreateOrganization(); + }} + indicator={} + > + Create a new organization + + {hasNextPage ? : null} + + ); +} diff --git a/frontend/src/components/actors/actor-build.tsx b/frontend/src/components/actors/actor-build.tsx index 8aec80481b..c19adb9ae1 100644 --- a/frontend/src/components/actors/actor-build.tsx +++ b/frontend/src/components/actors/actor-build.tsx @@ -1,7 +1,6 @@ import { useQuery } from "@tanstack/react-query"; -import { formatISO } from "date-fns"; import { Dd, DiscreteCopyButton, Dl, Dt, Flex } from "@/components"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; interface ActorBuildProps { @@ -9,7 +8,9 @@ interface ActorBuildProps { } export function ActorBuild({ actorId }: ActorBuildProps) { - const { data } = useQuery(useManager().actorBuildQueryOptions(actorId)); + const { data } = useQuery( + useDataProvider().actorBuildQueryOptions(actorId), + ); if (!data) { return null; @@ -32,31 +33,6 @@ export function ActorBuild({ actorId }: ActorBuildProps) { {data.id} -
Created
-
- - {formatISO(data.createdAt)} - -
-
Tags
-
- - - -
diff --git a/frontend/src/components/actors/actor-connections-tab.tsx b/frontend/src/components/actors/actor-connections-tab.tsx index 3f3ea5ee5b..36b04f402d 100644 --- a/frontend/src/components/actors/actor-connections-tab.tsx +++ b/frontend/src/components/actors/actor-connections-tab.tsx @@ -2,7 +2,7 @@ import { useQuery } from "@tanstack/react-query"; import { LiveBadge, ScrollArea } from "@/components"; import { useActor } from "./actor-queries-context"; import { ActorObjectInspector } from "./console/actor-inspector"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import { type ActorId, useActorConnectionsStream } from "./queries"; interface ActorConnectionsTabProps { @@ -11,7 +11,7 @@ interface ActorConnectionsTabProps { export function ActorConnectionsTab({ actorId }: ActorConnectionsTabProps) { const { data: destroyedAt } = useQuery( - useManager().actorDestroyedAtQueryOptions(actorId), + useDataProvider().actorDestroyedAtQueryOptions(actorId), ); const actorQueries = useActor(); diff --git a/frontend/src/components/actors/actor-database.tsx b/frontend/src/components/actors/actor-database.tsx index 8fbe6079a8..fa65ed4f9a 100644 --- a/frontend/src/components/actors/actor-database.tsx +++ b/frontend/src/components/actors/actor-database.tsx @@ -27,10 +27,10 @@ export function ActorDatabase({ actorId }: ActorDatabaseProps) { actorQueries.actorDatabaseQueryOptions(actorId), ); const [table, setTable] = useState( - () => data?.db[0]?.table.name, + () => data?.db?.[0]?.table.name, ); - const selectedTable = table || data?.db[0]?.table.name; + const selectedTable = table || data?.db?.[0]?.table.name; const { data: rows, @@ -42,7 +42,9 @@ export function ActorDatabase({ actorId }: ActorDatabaseProps) { }), ); - const currentTable = data?.db.find((db) => db.table.name === selectedTable); + const currentTable = data?.db?.find( + (db) => db.table.name === selectedTable, + ); return ( <> diff --git a/frontend/src/components/actors/actor-db-tab.tsx b/frontend/src/components/actors/actor-db-tab.tsx index 746473145d..f3fcc1097c 100644 --- a/frontend/src/components/actors/actor-db-tab.tsx +++ b/frontend/src/components/actors/actor-db-tab.tsx @@ -2,7 +2,7 @@ import { useQuery } from "@tanstack/react-query"; import { ActorDatabase } from "./actor-database"; import { useActor } from "./actor-queries-context"; import { Info } from "./actor-state-tab"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; interface ActorDatabaseTabProps { @@ -11,7 +11,7 @@ interface ActorDatabaseTabProps { export function ActorDatabaseTab({ actorId }: ActorDatabaseTabProps) { const { data: destroyedAt } = useQuery( - useManager().actorDestroyedAtQueryOptions(actorId), + useDataProvider().actorDestroyedAtQueryOptions(actorId), ); const actorQueries = useActor(); diff --git a/frontend/src/components/actors/actor-download-logs-button.tsx b/frontend/src/components/actors/actor-download-logs-button.tsx index ffebcd83d8..bfd3a635d2 100644 --- a/frontend/src/components/actors/actor-download-logs-button.tsx +++ b/frontend/src/components/actors/actor-download-logs-button.tsx @@ -1,67 +1,8 @@ import { faSave, Icon } from "@rivet-gg/icons"; -import saveAs from "file-saver"; -import { type Atom, atom, useAtom } from "jotai"; -import { selectAtom } from "jotai/utils"; import { Button, WithTooltip } from "@/components"; -import type { ActorAtom, LogsAtom } from "./actor-context"; -import { - type Settings, - useActorDetailsSettings, -} from "./actor-details-settings"; -import { filterLogs, type LogsTypeFilter } from "./actor-logs"; +import type { LogsTypeFilter } from "./actor-logs"; import type { ActorId } from "./queries"; -// const downloadLogsAtom = atom( -// null, -// async ( -// get, -// _set, -// { -// actorId, -// typeFilter, -// filter, -// }: { -// actorId: string; -// typeFilter?: LogsTypeFilter; -// filter?: string; -// }, -// ) => { -// const environment = get(actorEnvironmentAtom); -// const exportHandler = get(exportLogsHandlerAtom); - -// if (!environment || !exportHandler) { -// throw new Error("Environment or export handler not available"); -// } - -// // Build query JSON for the API -// // Based on the GET logs endpoint usage, we need to build a query -// const query: any = { -// actorIds: [actorId], -// }; - -// // Add stream filter based on typeFilter -// if (typeFilter === "output") { -// query.stream = 0; // stdout -// } else if (typeFilter === "errors") { -// query.stream = 1; // stderr -// } - -// // Add text search if filter is provided -// if (filter) { -// query.searchText = filter; -// } - -// const result = await exportHandler({ -// projectNameId: environment.projectNameId, -// environmentNameId: environment.environmentNameId, -// queryJson: JSON.stringify(query), -// }); - -// // Open the presigned URL in a new tab to download -// window.open(result.url, "_blank"); -// }, -// ); - interface ActorDownloadLogsButtonProps { actorId: ActorId; typeFilter?: LogsTypeFilter; @@ -74,35 +15,7 @@ interface ActorDownloadLogsButtonProps { isExporting?: boolean; } -export function ActorDownloadLogsButton({ - actorId, - typeFilter, - filter, - onExportLogs, - isExporting = false, -}: ActorDownloadLogsButtonProps) { - // const [isDownloading, setIsDownloading] = useState(false); - // const [, downloadLogs] = useAtom(downloadLogsAtom); - // const actorData = useAtomValue(actor); - - // const handleDownload = async () => { - // try { - // setIsDownloading(true); - // await downloadLogs({ - // actorId: actorData.id, - // typeFilter, - // filter, - // }); - // } catch (error) { - // console.error("Failed to download logs:", error); - // } finally { - // setIsDownloading(false); - // } - // }; - // const [settings] = useActorDetailsSettings(); - - // const [, downloadLogs] = useAtom(downloadLogsAtom); - +export function ActorDownloadLogsButton(_props: ActorDownloadLogsButtonProps) { return ( - + } /> diff --git a/frontend/src/components/actors/actor-events-tab.tsx b/frontend/src/components/actors/actor-events-tab.tsx index f42d08c979..6deb04786f 100644 --- a/frontend/src/components/actors/actor-events-tab.tsx +++ b/frontend/src/components/actors/actor-events-tab.tsx @@ -2,7 +2,7 @@ import { useQuery } from "@tanstack/react-query"; import { ActorEvents } from "./actor-events"; import { useActor } from "./actor-queries-context"; import { Info } from "./actor-state-tab"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; export type EventsTypeFilter = "action" | "subscription" | "broadcast" | "send"; @@ -13,7 +13,7 @@ interface ActorEventsTabProps { export function ActorEventsTab({ actorId }: ActorEventsTabProps) { const { data: destroyedAt } = useQuery( - useManager().actorDestroyedAtQueryOptions(actorId), + useDataProvider().actorDestroyedAtQueryOptions(actorId), ); const { isError, isLoading } = useQuery( diff --git a/frontend/src/components/actors/actor-filters-context.tsx b/frontend/src/components/actors/actor-filters-context.tsx index c6a67b77a7..c5b89deffd 100644 --- a/frontend/src/components/actors/actor-filters-context.tsx +++ b/frontend/src/components/actors/actor-filters-context.tsx @@ -7,6 +7,7 @@ import { createFiltersSchema, type FilterDefinitions, FilterOp, + type FilterValue, type PickFiltersOptions, } from "../ui/filters"; @@ -47,65 +48,6 @@ export const ACTORS_FILTERS_DEFINITIONS = { ephemeral: true, defaultValue: ["1"], }, - // tags: { - // type: "select", - // label: "Tags", - // icon: faTag, - // options: TagsOptions, - // operators: { - // [FilterOp.EQUAL]: "is one of", - // [FilterOp.NOT_EQUAL]: "is not one of", - // }, - // }, - // createdAt: { - // type: "date", - // label: "Created", - // icon: faCalendarCirclePlus, - // }, - // destroyedAt: { - // type: "date", - // label: "Destroyed", - // icon: faCalendarCircleMinus, - // }, - // status: { - // type: "select", - // label: "Status", - // icon: faSignalBars, - // options: StatusOptions, - // display: ({ value }) => { - // if (value.length > 1) { - // return {value.length} statuses; - // } - // return ( - // - // ); - // }, - // }, - // region: { - // type: "select", - // label: "Region", - // icon: faGlobe, - // options: RegionOptions, - // display: ({ value }) => { - // if (value.length > 1) { - // return {value.length} regions; - // } - - // return ; - // }, - // operators: { - // [FilterOp.EQUAL]: "is one of", - // [FilterOp.NOT_EQUAL]: "is not one of", - // }, - // }, - // destroyed: { - // type: "boolean", - // label: "Show destroyed actors", - // icon: faEye, - // }, } satisfies FilterDefinitions; const defaultActorFiltersContextValue = { @@ -140,13 +82,13 @@ export const useFilters = ( return useSearch({ strict: false, select: (state) => fn(pick(state)), - }); + }) as Record; }; export function useFiltersValue(opts: PickFiltersOptions = {}) { const { pick } = useActorsFilters(); return useSearch({ - from: "/_layout", + from: "/_context", select: (state) => pick(state, opts), - }); + }) as Record; } diff --git a/frontend/src/components/actors/actor-general.tsx b/frontend/src/components/actors/actor-general.tsx index 9b11bee23e..1779c623b7 100644 --- a/frontend/src/components/actors/actor-general.tsx +++ b/frontend/src/components/actors/actor-general.tsx @@ -3,7 +3,7 @@ import { formatISO } from "date-fns"; import { cn, Dd, DiscreteCopyButton, Dl, Dt, Flex } from "@/components"; import { ActorRegion } from "./actor-region"; import { ActorObjectInspector } from "./console/actor-inspector"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; export interface ActorGeneralProps { @@ -22,7 +22,7 @@ export function ActorGeneral({ actorId }: ActorGeneralProps) { sleepingAt, crashPolicy, } = {}, - } = useQuery(useManager().actorGeneralQueryOptions(actorId)); + } = useQuery(useDataProvider().actorGeneralQueryOptions(actorId)); return (
diff --git a/frontend/src/components/actors/actor-logs-tab.tsx b/frontend/src/components/actors/actor-logs-tab.tsx index 40f1fb8a3f..b20c3b2bc6 100644 --- a/frontend/src/components/actors/actor-logs-tab.tsx +++ b/frontend/src/components/actors/actor-logs-tab.tsx @@ -1,6 +1,5 @@ import { startTransition, useState } from "react"; import { LogsView, ToggleGroup, ToggleGroupItem } from "@/components"; -import type { ActorAtom } from "./actor-context"; import { ActorDetailsSettingsButton } from "./actor-details-settings-button"; import { ActorDownloadLogsButton } from "./actor-download-logs-button"; import { ActorLogs, type LogsTypeFilter } from "./actor-logs"; diff --git a/frontend/src/components/actors/actor-logs.tsx b/frontend/src/components/actors/actor-logs.tsx index d677406242..14051d47e2 100644 --- a/frontend/src/components/actors/actor-logs.tsx +++ b/frontend/src/components/actors/actor-logs.tsx @@ -1,12 +1,5 @@ -import { useQuery } from "@tanstack/react-query"; -import type { Virtualizer } from "@tanstack/react-virtual"; -import { memo, useCallback, useEffect, useRef } from "react"; -import { useResizeObserver } from "usehooks-ts"; -import { ShimmerLine, VirtualScrollArea } from "@/components"; -import { useActorDetailsSettings } from "./actor-details-settings"; -import { ActorConsoleMessage } from "./console/actor-console-message"; -import { useManager } from "./manager-context"; -import type { ActorId, ActorLogEntry } from "./queries"; +import { memo } from "react"; +import type { ActorId } from "./queries"; export type LogsTypeFilter = "all" | "output" | "errors"; @@ -16,203 +9,6 @@ interface ActorLogsProps { filter?: string; } -export const ActorLogs = memo( - ({ typeFilter, actorId, filter }: ActorLogsProps) => { - const [settings] = useActorDetailsSettings(); - const follow = useRef(true); - const shouldFollow = () => settings.autoFollowLogs && follow.current; - - const viewport = useRef(null); - const virtualizer = useRef>(null); - // Detect if the container has resized (i.e, console was opened) - useResizeObserver({ - ref: viewport, - onResize: () => { - if (shouldFollow()) { - // https://github.com/TanStack/virtual/issues/537 - requestAnimationFrame(() => { - virtualizer.current?.scrollToIndex(combined.length, { - align: "end", - }); - }); - } - }, - }); - - const { data: status } = useQuery( - useManager().actorStatusQueryOptions(actorId), - ); - const { - data: logs = [], - isFetching, - isError, - } = useQuery(useManager().actorLogsQueryOptions(actorId)); - - const combined = filterLogs({ - typeFilter: typeFilter ?? "all", - filter: filter ?? "", - logs: logs ?? [], - }); - - // Scroll to the bottom when new logs are added - // biome-ignore lint/correctness/useExhaustiveDependencies: run this effect only when the length of the logs changes - useEffect(() => { - if (!shouldFollow()) { - return () => {}; - } - // https://github.com/TanStack/virtual/issues/537 - const rafId = requestAnimationFrame(() => { - virtualizer.current?.scrollToIndex( - virtualizer.current.options.count - 1, - { - align: "end", - }, - ); - }); - - return () => { - cancelAnimationFrame(rafId); - }; - }, [combined.length]); - - // Detect if the user has scrolled all the way to the bottom - const handleChange = useCallback( - (instance: Virtualizer, sync: boolean) => { - if (sync) { - return; - } - - follow.current = - !instance.isScrolling && - instance.range?.endIndex === instance.options.count - 1; - }, - [], - ); - - if (status === "starting" && combined.length === 0) { - return ( -
- - [SYSTEM]: Actor is starting... - -
- ); - } - - if (isFetching) { - return ( - <> - -
- - Loading logs... - -
- - ); - } - - if (combined.length === 0) { - if (isError) { - return ( -
- - [SYSTEM]: Couldn't find the logs. Please try again - later. - -
- ); - } - return ( -
- - [SYSTEM]: No logs found. Logs are retained for 3 days. - -
- ); - } - - return ( - <> - - ({ - ...combined[index], - children: combined[index].message, - variant: combined[index].level as - | "debug" - | "error" - | "info", - timestamp: settings.showTimestamps - ? combined[index].timestamp - ? new Date(combined[index].timestamp) - : undefined - : undefined, - })} - onChange={handleChange} - count={combined.length} - estimateSize={() => 26} - row={ActorConsoleMessage} - /> - - ); - }, -); - -interface ScrollerProps { - virtualizer: React.MutableRefObject | null>; -} - -function Scroller({ virtualizer }: ScrollerProps) { - // biome-ignore lint/correctness/useExhaustiveDependencies: scroll on mount, no need to run this effect again - useEffect(() => { - // https://github.com/TanStack/virtual/issues/537 - virtualizer.current?.scrollToIndex( - virtualizer.current.options.count - 1, - { - align: "end", - }, - ); - }, []); - +export const ActorLogs = memo((_props: ActorLogsProps) => { return null; -} - -export function filterLogs({ - typeFilter, - filter, - logs, -}: { - typeFilter: LogsTypeFilter; - filter: string; - logs: ActorLogEntry[]; -}) { - const output = logs?.filter((log) => { - if (typeFilter === "errors") { - return log.level === "error"; - } - if (typeFilter === "output") { - return log.level !== "error"; - } - return true; - }); - - // Search - const filtered = - filter && filter.trim() !== "" - ? output.filter((log) => log.message.includes(filter)) - : output; - - const sorted = filtered.toSorted( - (a, b) => - new Date(a.timestamp).valueOf() - new Date(b.timestamp).valueOf(), - ); - - return sorted; -} +}); diff --git a/frontend/src/components/actors/actor-network.tsx b/frontend/src/components/actors/actor-network.tsx index ae96fc1e14..3e6fb60c79 100644 --- a/frontend/src/components/actors/actor-network.tsx +++ b/frontend/src/components/actors/actor-network.tsx @@ -12,7 +12,7 @@ import { Flex, } from "@/components"; import { ActorObjectInspector } from "./console/actor-inspector"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; export interface ActorNetworkProps { @@ -21,7 +21,7 @@ export interface ActorNetworkProps { export function ActorNetwork({ actorId }: ActorNetworkProps) { const { data: ports } = useQuery( - useManager().actorNetworkPortsQueryOptions(actorId), + useDataProvider().actorNetworkPortsQueryOptions(actorId), ); if (!ports) { return null; diff --git a/frontend/src/components/actors/actor-not-found.tsx b/frontend/src/components/actors/actor-not-found.tsx index 87cda8ab3d..c5a28f1370 100644 --- a/frontend/src/components/actors/actor-not-found.tsx +++ b/frontend/src/components/actors/actor-not-found.tsx @@ -6,7 +6,7 @@ import { Button } from "../ui/button"; import { FilterOp } from "../ui/filters"; import { ActorTabs } from "./actors-actor-details"; import { useActorsView } from "./actors-view-context-provider"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorFeature, ActorId } from "./queries"; export function ActorNotFound({ @@ -24,7 +24,7 @@ export function ActorNotFound({ const { isLoading } = useQuery({ // biome-ignore lint/style/noNonNullAssertion: enabled guarantees actorId is defined - ...useManager().actorQueryOptions(actorId!), + ...useDataProvider().actorQueryOptions(actorId!), enabled: !!actorId, }); diff --git a/frontend/src/components/actors/actor-region.tsx b/frontend/src/components/actors/actor-region.tsx index 9b07fd534f..e4a4efe334 100644 --- a/frontend/src/components/actors/actor-region.tsx +++ b/frontend/src/components/actors/actor-region.tsx @@ -5,7 +5,7 @@ import { REGION_LABEL, RegionIcon, } from "../matchmaker/lobby-region"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; interface ActorRegionProps { regionId?: string; @@ -19,7 +19,7 @@ export function ActorRegion({ className, }: ActorRegionProps) { const { data: region } = useQuery( - useManager().regionQueryOptions(regionId), + useDataProvider().regionQueryOptions(regionId), ); if (!regionId || !region) { diff --git a/frontend/src/components/actors/actor-runtime.tsx b/frontend/src/components/actors/actor-runtime.tsx index a895671630..c3803df811 100644 --- a/frontend/src/components/actors/actor-runtime.tsx +++ b/frontend/src/components/actors/actor-runtime.tsx @@ -1,79 +1,16 @@ -import { useQuery } from "@tanstack/react-query"; import { Suspense } from "react"; -import { formatDuration } from "../lib/formatter"; -import { toRecord } from "../lib/utils"; -import { Flex } from "../ui/flex"; import { Skeleton } from "../ui/skeleton"; -import { Dd, Dl, Dt } from "../ui/typography"; import { ActorBuild } from "./actor-build"; -import { ACTOR_FRAMEWORK_TAG_VALUE } from "./actor-tags"; -import { ActorObjectInspector } from "./console/actor-inspector"; -import { useManager } from "./manager-context"; -import { ActorFeature, type ActorId } from "./queries"; +import type { ActorId } from "./queries"; export interface ActorRuntimeProps { actorId: ActorId; } export function ActorRuntime({ actorId }: ActorRuntimeProps) { - const { data: { lifecycle, resources, runtime, tags } = {} } = useQuery( - useManager().actorRuntimeQueryOptions(actorId), - ); - - const { data: features = [] } = useQuery( - useManager().actorFeaturesQueryOptions(actorId), - ); - return ( - <> - {features.includes(ActorFeature.Runtime) && lifecycle && runtime ? ( -
-
-

Runtime

-
- -
-
Kill timeout
-
- {formatDuration(lifecycle.killTimeout || 0, { - show0Min: true, - })} -
- {toRecord(tags).framework !== - ACTOR_FRAMEWORK_TAG_VALUE && resources ? ( - <> -
Resources
-
- {resources.cpu / 1000} CPU cores,{" "} - {resources.memory} MB RAM -
- - ) : null} -
Arguments
-
- -
-
Environment
-
- -
- -
Durable
-
{lifecycle.durable ? "Yes" : "No"}
-
-
-
- ) : null} - - } - > - - - + }> + + ); } diff --git a/frontend/src/components/actors/actor-status-indicator.tsx b/frontend/src/components/actors/actor-status-indicator.tsx index a2b1d26683..76d5dcad7c 100644 --- a/frontend/src/components/actors/actor-status-indicator.tsx +++ b/frontend/src/components/actors/actor-status-indicator.tsx @@ -2,7 +2,7 @@ import { faMoon, Icon } from "@rivet-gg/icons"; import { useQuery } from "@tanstack/react-query"; import type { ComponentPropsWithRef } from "react"; import { cn, Ping } from "@/components"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId, ActorStatus } from "./queries"; export const QueriedActorStatusIndicator = ({ @@ -12,7 +12,7 @@ export const QueriedActorStatusIndicator = ({ actorId: ActorId; } & ComponentPropsWithRef<"span">) => { const { data: status, isError } = useQuery( - useManager().actorStatusQueryOptions(actorId), + useDataProvider().actorStatusQueryOptions(actorId), ); return ( diff --git a/frontend/src/components/actors/actor-status-label.tsx b/frontend/src/components/actors/actor-status-label.tsx index ff11c3fbe7..cd45604e87 100644 --- a/frontend/src/components/actors/actor-status-label.tsx +++ b/frontend/src/components/actors/actor-status-label.tsx @@ -1,5 +1,5 @@ import { useQuery } from "@tanstack/react-query"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId, ActorStatus } from "./queries"; export const ACTOR_STATUS_LABEL_MAP = { @@ -17,7 +17,7 @@ export const ActorStatusLabel = ({ status }: { status?: ActorStatus }) => { export const QueriedActorStatusLabel = ({ actorId }: { actorId: ActorId }) => { const { data: status, isError } = useQuery( - useManager().actorStatusQueryOptions(actorId), + useDataProvider().actorStatusQueryOptions(actorId), ); return ; }; diff --git a/frontend/src/components/actors/actor-stop-button.tsx b/frontend/src/components/actors/actor-stop-button.tsx index 42cf628658..978f906aec 100644 --- a/frontend/src/components/actors/actor-stop-button.tsx +++ b/frontend/src/components/actors/actor-stop-button.tsx @@ -2,7 +2,7 @@ import { faXmark, Icon } from "@rivet-gg/icons"; import { useMutation, useQuery } from "@tanstack/react-query"; import { useEffect, useState } from "react"; import { Button, WithTooltip } from "@/components"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; interface ActorStopButtonProps { @@ -11,14 +11,14 @@ interface ActorStopButtonProps { export function ActorStopButton({ actorId }: ActorStopButtonProps) { const { data: destroyedAt } = useQuery( - useManager().actorDestroyedAtQueryOptions(actorId), + useDataProvider().actorDestroyedAtQueryOptions(actorId), ); const { mutate, isPending } = useMutation( - useManager().actorDestroyMutationOptions(actorId), + useDataProvider().actorDestroyMutationOptions(actorId), ); - const { canDeleteActors } = useManager().features; + const { canDeleteActors } = useDataProvider().features; const [isConfirming, setIsConfirming] = useState(false); useEffect(() => { diff --git a/frontend/src/components/actors/actor-tags-select.tsx b/frontend/src/components/actors/actor-tags-select.tsx deleted file mode 100644 index b54c3cca0c..0000000000 --- a/frontend/src/components/actors/actor-tags-select.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { useAtomValue } from "jotai"; -import { useMemo } from "react"; -import { Combobox } from "@/components"; -import { actorTagsAtom } from "./actor-context"; -import { ActorTag } from "./actor-tags"; - -interface ActorTagsSelectProps { - value: Record; - onValueChange: (value: Record) => void; - showSelectedOptions?: number; -} - -export function ActorTagsSelect({ - value, - onValueChange, - showSelectedOptions, -}: ActorTagsSelectProps) { - const data = useAtomValue(actorTagsAtom); - - const valArray = useMemo(() => Object.entries(value), [value]); - const tags = useMemo(() => { - // upsert custom tags to the list of tags - const tags = [...data]; - for (const [key, value] of valArray) { - const found = data.find( - (tag) => tag.key === key && tag.value === value, - ); - - if (!found) { - tags.push({ key, value }); - } - } - return tags; - }, [valArray, data]); - - const val = useMemo( - () => - valArray.map(([key, value]) => { - return [key, value].join("="); - }), - [valArray], - ); - - const options = useMemo( - () => - tags.map((tag) => { - return { - label: ( - - - {tag.key}={tag.value} - - - ), - value: [tag.key, tag.value].join("="), - tag, - }; - }), - [tags], - ); - - const handleValueChange = (value: string[]) => { - onValueChange( - Object.fromEntries( - value.map((v) => { - // its safe to split by "=" because the value is a tag - const [key, value] = v.split("="); - return [key.trim(), value.trim()]; - }), - ), - ); - }; - - const handleCreateOption = (option: string) => { - const parts = option.split("="); - if (parts.length !== 2) return; - - const [key, value] = parts.map((part) => part.trim()); - if (!key || !value) return; - - onValueChange(Object.fromEntries([...valArray, [key, value]])); - }; - - return ( - { - const tagKey = option.tag.key.toLowerCase(); - const tagValue = option.tag.value.toLowerCase(); - - if (search.includes("=")) { - const [key, value] = search.split("="); - return tagKey.includes(key) && tagValue.includes(value); - } - return tagKey.includes(search) || tagValue.includes(search); - }} - className="w-full min-w-[20rem]" - /> - ); -} diff --git a/frontend/src/components/actors/actors-actor-details.tsx b/frontend/src/components/actors/actors-actor-details.tsx index 82ee9fe753..4b782e3dd5 100644 --- a/frontend/src/components/actors/actors-actor-details.tsx +++ b/frontend/src/components/actors/actors-actor-details.tsx @@ -19,14 +19,13 @@ import { ActorMetricsTab } from "./actor-metrics-tab"; import { ActorStateTab } from "./actor-state-tab"; import { QueriedActorStatus } from "./actor-status"; import { ActorStopButton } from "./actor-stop-button"; -import { ActorsSidebarToggleButton } from "./actors-sidebar-toggle-button"; import { useActorsView } from "./actors-view-context-provider"; import { ActorConsole } from "./console/actor-console"; +import { useDataProvider } from "./data-provider"; import { GuardConnectableInspector, useInspectorGuard, } from "./guard-connectable-inspector"; -import { useManager } from "./manager-context"; import { ActorFeature, type ActorId } from "./queries"; import { ActorWorkerContextProvider } from "./worker/actor-worker-context"; @@ -45,7 +44,7 @@ interface ActorsActorDetailsProps { export const ActorsActorDetails = memo( ({ tab, onTabChange, actorId }: ActorsActorDetailsProps) => { const { data: features = [] } = useQuery( - useManager().actorFeaturesQueryOptions(actorId), + useDataProvider().actorFeaturesQueryOptions(actorId), ); const supportsConsole = features.includes(ActorFeature.Console); @@ -137,7 +136,6 @@ export function ActorTabs({ className={cn(className, "flex-1 min-h-0 min-w-0 flex flex-col ")} >
-
{supportsState ? ( diff --git a/frontend/src/components/actors/actors-actor-not-found.tsx b/frontend/src/components/actors/actors-actor-not-found.tsx index 9cf7d8f7c1..fa9c92bdf5 100644 --- a/frontend/src/components/actors/actors-actor-not-found.tsx +++ b/frontend/src/components/actors/actors-actor-not-found.tsx @@ -2,7 +2,6 @@ // import { RivetError } from "@rivet-gg/api"; import { faCircleExclamation, Icon } from "@rivet-gg/icons"; import type { ErrorComponentProps } from "@tanstack/react-router"; -import { ActorsSidebarToggleButton } from "./actors-sidebar-toggle-button"; export function ActorsActorError({ error }: ErrorComponentProps) { // if (isRivetError(error) || error instanceof RivetError) { @@ -21,9 +20,6 @@ export function ActorsActorError({ error }: ErrorComponentProps) { return (
-
- -
Error occurred while fetching Actor. diff --git a/frontend/src/components/actors/actors-builds-panel.tsx b/frontend/src/components/actors/actors-builds-panel.tsx deleted file mode 100644 index 0053f05a0f..0000000000 --- a/frontend/src/components/actors/actors-builds-panel.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { - // @ts-expect-error - faActorsBorderless, - Icon, -} from "@rivet-gg/icons"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useNavigate, useSearch } from "@tanstack/react-router"; -import { Fragment } from "react/jsx-runtime"; -import { Button } from "../ui/button"; -import { ScrollArea } from "../ui/scroll-area"; -import { Skeleton } from "../ui/skeleton"; -import { VisibilitySensor } from "../visibility-sensor"; -import { useFilters } from "./actor-filters-context"; -import { ACTORS_PER_PAGE, useManager } from "./manager-context"; - -export function ActorsBuildsPanel() { - const { - data, - isSuccess, - isLoading, - hasNextPage, - fetchNextPage, - isFetchingNextPage, - } = useInfiniteQuery(useManager().buildsQueryOptions()); - - const navigate = useNavigate({ from: "/ns/$namespace" }); - const search = useSearch({ from: "/_layout/ns/$namespace" }); - - const isSearchingById = useFilters( - (filters) => filters.id?.value?.length > 0, - ); - - return ( - -
- {isSearchingById ? ( -

- When searching by ID, the list of names is not - available. -

- ) : null} - {data?.map((build) => ( - - ))} - {isSuccess && data.length === 0 && ( -
- No Actor Names found. -
- )} - {isFetchingNextPage || isLoading - ? Array(ACTORS_PER_PAGE) - .fill(null) - .map((_, i) => ( - - - - )) - : null} -
- {hasNextPage ? : null} -
- ); -} diff --git a/frontend/src/components/actors/actors-layout.tsx b/frontend/src/components/actors/actors-layout.tsx deleted file mode 100644 index 9800e2c233..0000000000 --- a/frontend/src/components/actors/actors-layout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { memo, type ReactNode, useState } from "react"; -import { cn, ls } from "../lib/utils"; -import { ActorsLayoutContextProvider } from "./actors-layout-context"; - -interface ActorsListPreviewProps { - left: ReactNode; - right: ReactNode; - className?: string; -} - -export const ActorsLayout = memo( - ({ left, right, className }: ActorsListPreviewProps) => { - const [folded, setFolded] = useState(() => ls.actorsList.getFolded()); - - return ( - -
- {left} -
- {right} -
-
-
- ); - }, -); diff --git a/frontend/src/components/actors/actors-list-row.tsx b/frontend/src/components/actors/actors-list-row.tsx index 910dd06b3e..e04f68939a 100644 --- a/frontend/src/components/actors/actors-list-row.tsx +++ b/frontend/src/components/actors/actors-list-row.tsx @@ -1,11 +1,11 @@ import { useQuery } from "@tanstack/react-query"; import { Link, useSearch } from "@tanstack/react-router"; -import { motion } from "framer-motion"; import { memo, useState } from "react"; import { Button, cn, DiscreteCopyButton, + type FilterValue, RelativeTime, Skeleton, SmallText, @@ -18,7 +18,7 @@ import { QueriedActorStatusIndicator, } from "./actor-status-indicator"; import { QueriedActorStatusLabel } from "./actor-status-label"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; interface ActorsListRowProps { @@ -88,7 +88,8 @@ function Id({ actorId }: { actorId: ActorId }) { const { pick } = useActorsFilters(); const showIds = useSearch({ strict: false, - select: (search) => pick(search).showIds?.value?.includes("1"), + select: (search) => + (pick(search).showIds as FilterValue)?.value?.includes("1"), }); if (!showIds) { @@ -110,14 +111,14 @@ function Id({ actorId }: { actorId: ActorId }) { } function Tags({ actorId }: { actorId: ActorId }) { - const { data } = useQuery(useManager().actorKeysQueryOptions(actorId)); + const { data } = useQuery(useDataProvider().actorKeysQueryOptions(actorId)); return {data || "-"}; } function Timestamp({ actorId }: { actorId: ActorId }) { const { data: { createdAt, destroyedAt } = {} } = useQuery( - useManager().actorQueryOptions(actorId), + useDataProvider().actorQueryOptions(actorId), ); const ts = destroyedAt || createdAt; diff --git a/frontend/src/components/actors/actors-list.tsx b/frontend/src/components/actors/actors-list.tsx index d1f62251e3..ea6d61554a 100644 --- a/frontend/src/components/actors/actors-list.tsx +++ b/frontend/src/components/actors/actors-list.tsx @@ -15,6 +15,7 @@ import { } from "@tanstack/react-query"; import { Navigate, useNavigate, useSearch } from "@tanstack/react-router"; import { Suspense, useCallback } from "react"; +import { RECORDS_PER_PAGE } from "@/app/data-providers/default-data-provider"; import { Button, DocsSheet, @@ -32,7 +33,7 @@ import { useActorsLayout } from "./actors-layout-context"; import { ActorsListRow, ActorsListRowSkeleton } from "./actors-list-row"; import { useActorsView } from "./actors-view-context-provider"; import { CreateActorButton } from "./create-actor-button"; -import { ACTORS_PER_PAGE, useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; import { useRootLayout } from "./root-layout-context"; export function ActorsList() { @@ -71,7 +72,11 @@ function TopBar() { /> ) : null}
- {__APP_TYPE__ === "hub" ? :
} + {["engine", "cloud"].includes(__APP_TYPE__) ? ( + + ) : ( +
+ )}
@@ -98,12 +103,12 @@ function TopBar() { function LoadingIndicator() { const n = useSearch({ - from: "/_layout", + from: "/_context", select: (state) => state.n, }); const filters = useFiltersValue({ includeEphemeral: false }); const { isLoading } = useInfiniteQuery( - useManager().actorsListQueryOptions({ n, filters }), + useDataProvider().actorsListQueryOptions({ n, filters }), ); if (isLoading) { return ; @@ -114,10 +119,10 @@ function LoadingIndicator() { function List() { const filters = useFiltersValue({ includeEphemeral: false }); const { actorId, n } = useSearch({ - from: "/_layout", + from: "/_context", }); const { data: actorIds = [] } = useInfiniteQuery( - useManager().actorsListQueryOptions({ n, filters }), + useDataProvider().actorsListQueryOptions({ n, filters }), ); return ( @@ -135,7 +140,7 @@ function List() { function ActorIdPrefiller() { const { n, actorId } = useSearch({ - from: "/_layout", + from: "/_context", select: (state) => ({ n: state.n, actorId: state.actorId, @@ -143,7 +148,7 @@ function ActorIdPrefiller() { }); const filters = useFiltersValue({ includeEphemeral: false }); const { data } = useSuspenseInfiniteQuery( - useManager().actorsListQueryOptions({ + useDataProvider().actorsListQueryOptions({ n, filters, }), @@ -164,13 +169,13 @@ function ActorIdPrefiller() { function Pagination() { const n = useSearch({ - from: "/_layout", + from: "/_context", select: (state) => state.n, }); const filters = useFiltersValue({ includeEphemeral: false }); const { hasNextPage, isFetchingNextPage, fetchNextPage, data } = useSuspenseInfiniteQuery( - useManager().actorsListPaginationQueryOptions({ + useDataProvider().actorsListPaginationQueryOptions({ n, filters, }), @@ -190,7 +195,7 @@ function Pagination() { export function ListSkeleton() { return (
- {Array(ACTORS_PER_PAGE) + {Array(RECORDS_PER_PAGE) .fill(null) .map((_, i) => ( @@ -202,18 +207,18 @@ export function ListSkeleton() { function EmptyState({ count }: { count: number }) { const navigate = useNavigate(); const names = useSearch({ - from: "/_layout", + from: "/_context", select: (state) => state.n, }); const { copy, links } = useActorsView(); const { remove, pick } = useActorsFilters(); const { data: availableNamesCount = 0 } = useInfiniteQuery( - useManager().buildsCountQueryOptions(), + useDataProvider().buildsCountQueryOptions(), ); const filtersCount = useSearch({ - from: "/_layout", + from: "/_context", select: (state) => Object.values(pick(state, { includeEphemeral: false })).length, }); diff --git a/frontend/src/components/actors/actors-sidebar-toggle-button.tsx b/frontend/src/components/actors/actors-sidebar-toggle-button.tsx deleted file mode 100644 index 24a6a75e2e..0000000000 --- a/frontend/src/components/actors/actors-sidebar-toggle-button.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { faSidebar, Icon } from "@rivet-gg/icons"; -import { Button } from "@/components"; -import { useActorsLayout } from "./actors-layout-context"; - -export function ActorsSidebarToggleButton() { - const { setFolded, isFolded } = useActorsLayout(); - - if (!isFolded) { - return null; - } - return ( -
- -
- ); -} diff --git a/frontend/src/components/actors/build-select.tsx b/frontend/src/components/actors/build-select.tsx index ab53bd2140..c25361e242 100644 --- a/frontend/src/components/actors/build-select.tsx +++ b/frontend/src/components/actors/build-select.tsx @@ -1,7 +1,7 @@ import { useInfiniteQuery } from "@tanstack/react-query"; import { useMemo } from "react"; import { Combobox } from "@/components"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; interface BuildSelectProps { onValueChange: (value: string) => void; @@ -9,25 +9,14 @@ interface BuildSelectProps { } export function BuildSelect({ onValueChange, value }: BuildSelectProps) { - const { data = [] } = useInfiniteQuery(useManager().buildsQueryOptions()); + const { data = [] } = useInfiniteQuery( + useDataProvider().buildsQueryOptions(), + ); const builds = useMemo(() => { return data.map((build) => { return { - label: ( -
-
-
- {build.tags?.name || build.name} -
- {build.createdAt ? ( -
- Created: {build.createdAt.toLocaleString()} -
- ) : null} -
-
- ), + label: build.name, value: build.name, build, }; diff --git a/frontend/src/components/actors/console/actor-console-message.tsx b/frontend/src/components/actors/console/actor-console-message.tsx index 71acc39cb0..3f875ab3dc 100644 --- a/frontend/src/components/actors/console/actor-console-message.tsx +++ b/frontend/src/components/actors/console/actor-console-message.tsx @@ -20,7 +20,7 @@ interface ActorConsoleMessageProps { | "warn" | "info" | "debug"; - timestamp?: Date; + timestamp?: string | Date; className?: string; children: ReactNode; } diff --git a/frontend/src/components/actors/console/actor-console.tsx b/frontend/src/components/actors/console/actor-console.tsx index 6bdb5bd6a8..02e0c328e2 100644 --- a/frontend/src/components/actors/console/actor-console.tsx +++ b/frontend/src/components/actors/console/actor-console.tsx @@ -4,7 +4,7 @@ import { AnimatePresence, motion } from "framer-motion"; import { useState } from "react"; import { Button, cn } from "@/components"; import { useActor } from "../actor-queries-context"; -import { useManager } from "../manager-context"; +import { useDataProvider } from "../data-provider"; import type { ActorId } from "../queries"; import { useActorWorkerStatus } from "../worker/actor-worker-context"; import { ActorWorkerStatus } from "../worker/actor-worker-status"; @@ -19,7 +19,7 @@ export function ActorConsole({ actorId }: ActorConsoleProps) { const [isOpen, setOpen] = useState(false); const status = useActorWorkerStatus(); - const managerQueries = useManager(); + const managerQueries = useDataProvider(); const actorQueries = useActor(); const { data: { destroyedAt, sleepingAt } = {} } = useQuery( managerQueries.actorWorkerQueryOptions(actorId), diff --git a/frontend/src/components/actors/create-actor-button.tsx b/frontend/src/components/actors/create-actor-button.tsx index 253e445483..15c344aaff 100644 --- a/frontend/src/components/actors/create-actor-button.tsx +++ b/frontend/src/components/actors/create-actor-button.tsx @@ -3,19 +3,19 @@ import { useInfiniteQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; import { Button, type ButtonProps, WithTooltip } from "@/components"; import { useActorsView } from "./actors-view-context-provider"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; export function CreateActorButton(props: ButtonProps) { const navigate = useNavigate(); - const manager = useManager(); - const { data } = useInfiniteQuery(useManager().buildsQueryOptions()); + const provider = useDataProvider(); + const { data } = useInfiniteQuery(useDataProvider().buildsQueryOptions()); const { copy } = useActorsView(); const canCreate = data && data.length > 0; - if (!manager.features.canCreateActors) { + if (!provider.features.canCreateActors) { return null; } diff --git a/frontend/src/components/actors/current-environment-version-title.tsx b/frontend/src/components/actors/current-environment-version-title.tsx deleted file mode 100644 index e38d15afec..0000000000 --- a/frontend/src/components/actors/current-environment-version-title.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useSuspenseQuery } from "@tanstack/react-query"; -import { - projectEnvironmentQueryOptions, - projectVersionQueryOptions, -} from "../queries"; -import { EnvironmentVersionTitle } from "./environment-version-title"; - -interface CurrentEnvironmentVersionTitleProps { - environmentId: string; - projectId: string; -} - -export function CurrentEnvironmentVersionTitle({ - environmentId, - projectId, -}: CurrentEnvironmentVersionTitleProps) { - const { - data: { namespace: environment }, - } = useSuspenseQuery( - projectEnvironmentQueryOptions({ projectId, environmentId }), - ); - - const { data: version } = useSuspenseQuery( - projectVersionQueryOptions({ - projectId, - versionId: environment.versionId, - }), - ); - - return ( - - ); -} diff --git a/frontend/src/components/actors/data-provider.tsx b/frontend/src/components/actors/data-provider.tsx new file mode 100644 index 0000000000..2d35fdf8b0 --- /dev/null +++ b/frontend/src/components/actors/data-provider.tsx @@ -0,0 +1,63 @@ +import { + type RegisteredRouter, + type RouteIds, + useRouteContext, +} from "@tanstack/react-router"; +import { match } from "ts-pattern"; + +export const useDataProvider = () => + useRouteContext({ + from: match(__APP_TYPE__) + .with("cloud", () => { + return "/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace" as const; + }) + .with("engine", () => { + return "/_context/_engine/ns/$namespace" as const; + }) + .with("inspector", () => { + return "/_context/_inspector" as const; + }) + .exhaustive(), + }).dataProvider; + +export const useEngineDataProvider = () => { + return useRouteContext({ + from: "/_context/_engine", + }).dataProvider; +}; + +export const useInspectorDataProvider = () => { + return useRouteContext({ + from: "/_context/_inspector", + }).dataProvider; +}; + +type OnlyCloudRouteIds = Extract< + RouteIds, + `/_context/_cloud/${string}` +>; + +export const useCloudDataProvider = ({ + from = "/_context/_cloud/orgs/$organization", +}: { + from?: OnlyCloudRouteIds; +} = {}) => { + return useRouteContext({ + from, + }).dataProvider; +}; + +export const useEngineCompatDataProvider = () => { + return useRouteContext({ + from: match(__APP_TYPE__) + .with("cloud", () => { + return "/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace" as const; + }) + .with("engine", () => { + return "/_context/_engine/ns/$namespace" as const; + }) + .otherwise(() => { + throw new Error("Not in an engine-like context"); + }), + }).dataProvider; +}; diff --git a/frontend/src/components/actors/database/database-table.tsx b/frontend/src/components/actors/database/database-table.tsx index bbf4a39efc..5c34cab452 100644 --- a/frontend/src/components/actors/database/database-table.tsx +++ b/frontend/src/components/actors/database/database-table.tsx @@ -32,6 +32,14 @@ import { TableRow, } from "@/components"; +declare module "@tanstack/react-table" { + interface ColumnMeta { + type: string; + notNull: boolean; + default: any; + } +} + interface DatabaseTableProps { columns: any[]; data: any[]; @@ -52,7 +60,6 @@ export function DatabaseTable({ enableRowSelection = true, enableSorting = true, - enableCellExpanding = true, enableColumnResizing = true, }: DatabaseTableProps) { const columns = useMemo(() => { @@ -61,14 +68,12 @@ export function DatabaseTable({ const [rowSelection, setRowSelection] = useState({}); const [sorting, setSorting] = useState([]); - const [expanded, setExpanded] = useState({}); const table = useTable({ columns, data, enableRowSelection, enableSorting, - enableCellExpanding, enableColumnResizing, getCoreRowModel: getCoreRowModel(), getExpandedRowModel: getExpandedRowModel(), @@ -81,7 +86,6 @@ export function DatabaseTable({ state: { sorting, rowSelection, - expanded, }, }); @@ -220,7 +224,7 @@ export function DatabaseTable({ ); } -const ch = createColumnHelper(); +const ch = createColumnHelper>(); function createColumns( columns: Columns, @@ -269,7 +273,7 @@ function createColumns( ), }) : null, - ].filter(Boolean), + ].filter((v): v is NonNullable => v !== null), ...columns.map((col) => ch.accessor(col.name, { header: (info) => ( diff --git a/frontend/src/components/actors/dialogs/create-actor-dialog.tsx b/frontend/src/components/actors/dialogs/create-actor-dialog.tsx index 535b2f97a1..d51af9d41b 100644 --- a/frontend/src/components/actors/dialogs/create-actor-dialog.tsx +++ b/frontend/src/components/actors/dialogs/create-actor-dialog.tsx @@ -1,12 +1,12 @@ import { useMutation } from "@tanstack/react-query"; import { useSearch } from "@tanstack/react-router"; +import type { DialogContentProps } from "@/components/hooks"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; -import type { NamespaceNameId } from "@/queries/manager-engine"; import { DialogDescription, DialogFooter, @@ -15,13 +15,12 @@ import { } from "../../ui/dialog"; import { Flex } from "../../ui/flex"; import { useActorsView } from "../actors-view-context-provider"; +import { useDataProvider } from "../data-provider"; import * as ActorCreateForm from "../form/actor-create-form"; -import type { DialogContentProps } from "../hooks"; -import { useManager } from "../manager-context"; import { CrashPolicy } from "../queries"; interface ContentProps extends DialogContentProps { - namespace: NamespaceNameId; + namespace: string; } export default function CreateActorDialog({ @@ -29,10 +28,10 @@ export default function CreateActorDialog({ namespace, }: ContentProps) { const { mutateAsync } = useMutation( - useManager().createActorMutationOptions(), + useDataProvider().createActorMutationOptions(), ); const name = useSearch({ - from: "/_layout", + from: "/_context", select: (state) => state.n?.[0], }); @@ -45,8 +44,8 @@ export default function CreateActorDialog({ name: values.name, input: values.input ? JSON.parse(values.input) : undefined, key: values.key, - crashPolicy: values.crashPolicy, - runnerNameSelector: values.runnerNameSelector, + crashPolicy: values.crashPolicy || CrashPolicy.Destroy, + runnerNameSelector: values.runnerNameSelector || "default", }); onClose?.(); }} diff --git a/frontend/src/components/actors/dialogs/go-to-actor-dialog.tsx b/frontend/src/components/actors/dialogs/go-to-actor-dialog.tsx index 3baf32d185..941aeffb87 100644 --- a/frontend/src/components/actors/dialogs/go-to-actor-dialog.tsx +++ b/frontend/src/components/actors/dialogs/go-to-actor-dialog.tsx @@ -1,8 +1,8 @@ +import { DialogContentProps } from "@/components/hooks"; import { Button } from "../../ui/button"; import { DialogFooter, DialogHeader, DialogTitle } from "../../ui/dialog"; import { useActorsView } from "../actors-view-context-provider"; import * as GoToActorForm from "../form/go-to-actor-form"; -import type { DialogContentProps } from "../hooks"; interface ContentProps extends DialogContentProps { onSubmit?: (actorId: string) => void; diff --git a/frontend/src/components/actors/dynamic-servers-feature-card.tsx b/frontend/src/components/actors/dynamic-servers-feature-card.tsx deleted file mode 100644 index a021d59242..0000000000 --- a/frontend/src/components/actors/dynamic-servers-feature-card.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Link as RouterLink } from "@tanstack/react-router"; -import { - Card, - CardContent, - CardHeader, - CardTitle, - Link, - Text, -} from "@/components"; - -export function DynamicServersFeatureCard() { - return ( - - - Legacy Lobbies and Environments - - - - Dynamic servers and builds are the new way to manage your - project servers. However, if you're looking for lobbies and - namespaces, you can switch back to the old interface in the{" "} - - - User Settings - - - . - - - - ); -} diff --git a/frontend/src/components/actors/environment-select.tsx b/frontend/src/components/actors/environment-select.tsx deleted file mode 100644 index 46d5a1d141..0000000000 --- a/frontend/src/components/actors/environment-select.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { faCirclePlus, Icon } from "@rivet-gg/icons"; -import { useSuspenseQuery } from "@tanstack/react-query"; -import { type ComponentProps, useCallback } from "react"; -import { - Flex, - Select, - SelectContent, - SelectItem, - SelectSeparator, - SelectTrigger, - SelectValue, -} from "@/components"; -import { projectEnvironmentsQueryOptions } from "@/domains/project/queries"; - -interface EnvironmentSelectProps extends ComponentProps { - projectId: string; - showCreateEnvironment?: boolean; - onCreateClick?: () => void; - variant?: ComponentProps["variant"]; -} - -export function EnvironmentSelect({ - showCreateEnvironment, - onCreateClick, - onValueChange, - projectId, - variant, - ...props -}: EnvironmentSelectProps) { - const { data } = useSuspenseQuery( - projectEnvironmentsQueryOptions(projectId), - ); - - const handleValueChange = useCallback( - (value: string) => { - if (value === "create") { - onCreateClick?.(); - return; - } - onValueChange?.(value); - }, - [onCreateClick, onValueChange], - ); - - return ( - - ); -} diff --git a/frontend/src/components/actors/environment-version-title.tsx b/frontend/src/components/actors/environment-version-title.tsx deleted file mode 100644 index 81aec17a58..0000000000 --- a/frontend/src/components/actors/environment-version-title.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Badge, Flex } from "@/components"; - -interface EnvironmentVersionTitleProps { - environment: string; - version: string; -} - -export function EnvironmentVersionTitle({ - environment, - version, -}: EnvironmentVersionTitleProps) { - return ( - - {environment} - {version} - - ); -} diff --git a/frontend/src/components/actors/form/actor-create-form.tsx b/frontend/src/components/actors/form/actor-create-form.tsx index 5bc179362a..813de8b46c 100644 --- a/frontend/src/components/actors/form/actor-create-form.tsx +++ b/frontend/src/components/actors/form/actor-create-form.tsx @@ -3,10 +3,6 @@ import { useEffect, useRef } from "react"; import { type UseFormReturn, useFormContext } from "react-hook-form"; import z from "zod"; import { CodePreview, Input, Label } from "@/components"; -import { - type NamespaceNameId, - runnerNamesQueryOptions, -} from "@/queries/manager-engine"; import { JsonCode } from "../../code-mirror"; import { createSchemaForm } from "../../lib/create-schema-form"; import { @@ -43,16 +39,12 @@ export const formSchema = z key: z.string(), input: jsonValid.optional(), // tags: tagsFormSchema.shape.tags, + + region: z.string(), + runnerNameSelector: z.string(), + crashPolicy: z.nativeEnum(CrashPolicyEnum), }) - .and( - __APP_TYPE__ === "engine" - ? z.object({ - region: z.string(), - runnerNameSelector: z.string(), - crashPolicy: z.nativeEnum(CrashPolicyEnum), - }) - : z.object({}), - ); + .partial({ region: true, runnerNameSelector: true, crashPolicy: true }); export type FormValues = z.infer; export type SubmitHandler = ( @@ -101,7 +93,7 @@ export const CrashPolicy = () => { @@ -161,11 +153,7 @@ export const JsonInput = () => { ); }; -export const RunnerNameSelector = ({ - namespace, -}: { - namespace: NamespaceNameId; -}) => { +export const RunnerNameSelector = ({ namespace }: { namespace: string }) => { const { control } = useFormContext(); return ( @@ -179,7 +167,7 @@ export const RunnerNameSelector = ({ @@ -224,11 +212,7 @@ export const ActorPreview = () => { ); }; -export const PrefillRunnerName = ({ - namespace, -}: { - namespace: NamespaceNameId; -}) => { +export const PrefillRunnerName = ({ namespace }: { namespace: string }) => { const prefilled = useRef(false); const { watch } = useFormContext(); diff --git a/frontend/src/components/actors/get-started.tsx b/frontend/src/components/actors/get-started.tsx deleted file mode 100644 index 9471f354cb..0000000000 --- a/frontend/src/components/actors/get-started.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { faActors, faFunction, faServer, Icon } from "@rivet-gg/icons"; -import { motion } from "framer-motion"; -import type { ComponentProps } from "react"; -import { DocsSheet } from "../docs-sheet"; -import { cn } from "../lib/utils"; -import { Button } from "../ui/button"; - -export function ActorsResources() { - return ( - <> -
- - - -
- - ); -} - -const linkVariants = { - hidden: { - opacity: 0, - }, - show: { - opacity: 1, - }, -}; - -interface ExampleLinkProps { - title: string; - description?: string; - icon: ComponentProps["icon"]; - href: string; - size?: "sm" | "md" | "lg"; -} - -function ExampleLink({ - title, - description, - icon, - href, - size = "lg", -}: ExampleLinkProps) { - return ( - - - - ); -} diff --git a/frontend/src/components/actors/getting-started.tsx b/frontend/src/components/actors/getting-started.tsx deleted file mode 100644 index 63f60d6afa..0000000000 --- a/frontend/src/components/actors/getting-started.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { faActors, Icon } from "@rivet-gg/icons"; -import { useActorsView } from "./actors-view-context-provider"; -import { ActorsResources } from "./get-started"; - -export function GettingStarted() { - const { copy } = useActorsView(); - return ( -
-
- -

- {copy.gettingStarted.title} -

-

- {copy.gettingStarted.description} -

-
- -
- ); -} diff --git a/frontend/src/components/actors/go-to-actor-button.tsx b/frontend/src/components/actors/go-to-actor-button.tsx index 34e7769988..2480455750 100644 --- a/frontend/src/components/actors/go-to-actor-button.tsx +++ b/frontend/src/components/actors/go-to-actor-button.tsx @@ -12,6 +12,7 @@ export function GoToActorButton(props: ButtonProps) { variant="ghost" onClick={() => { navigate({ + to: ".", search: (prev) => ({ ...prev, modal: "go-to-actor" }), }); }} diff --git a/frontend/src/components/actors/group-project-select.tsx b/frontend/src/components/actors/group-project-select.tsx deleted file mode 100644 index e71869a577..0000000000 --- a/frontend/src/components/actors/group-project-select.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { faCirclePlus, Icon } from "@rivet-gg/icons"; -import { useSuspenseQuery } from "@tanstack/react-query"; -import { type ComponentProps, useCallback } from "react"; -import { - Flex, - Select, - SelectContent, - SelectItem, - SelectSeparator, - SelectTrigger, - SelectValue, -} from "@/components"; -import { groupProjectsQueryOptions } from "@/domains/project/queries"; - -interface GroupProjectSelectProps extends ComponentProps { - groupId: string; - showCreateProject?: boolean; - onCreateClick?: () => void; - variant?: ComponentProps["variant"]; -} - -export function GroupProjectSelect({ - groupId, - showCreateProject, - onCreateClick, - onValueChange, - variant, - ...props -}: GroupProjectSelectProps) { - const { data } = useSuspenseQuery(groupProjectsQueryOptions(groupId)); - - const handleValueChange = useCallback( - (value: string) => { - if (value === "create") { - onCreateClick?.(); - return; - } - onValueChange?.(value); - }, - [onCreateClick, onValueChange], - ); - - return ( - - ); -} diff --git a/frontend/src/components/actors/guard-connectable-inspector.tsx b/frontend/src/components/actors/guard-connectable-inspector.tsx index 52226eb5a4..4f1100da5a 100644 --- a/frontend/src/components/actors/guard-connectable-inspector.tsx +++ b/frontend/src/components/actors/guard-connectable-inspector.tsx @@ -4,10 +4,6 @@ import { useMatch } from "@tanstack/react-router"; import { createContext, type ReactNode, useContext, useMemo } from "react"; import { useInspectorCredentials } from "@/app/credentials-context"; import { createInspectorActorContext } from "@/queries/actor-inspector"; -import { - type NamespaceNameId, - runnerByNameQueryOptions, -} from "@/queries/manager-engine"; import { DiscreteCopyButton } from "../copy-area"; import { getConfig } from "../lib/config"; import { ls } from "../lib/utils"; @@ -15,7 +11,7 @@ import { Button } from "../ui/button"; import { useFiltersValue } from "./actor-filters-context"; import { ActorProvider } from "./actor-queries-context"; import { Info } from "./actor-state-tab"; -import { useManager } from "./manager-context"; +import { useDataProvider, useEngineCompatDataProvider } from "./data-provider"; import type { ActorId } from "./queries"; const InspectorGuardContext = createContext(null); @@ -35,7 +31,7 @@ export function GuardConnectableInspector({ const { data: { destroyedAt, sleepingAt, pendingAllocationAt, startedAt } = {}, } = useQuery({ - ...useManager().actorQueryOptions(actorId), + ...useDataProvider().actorQueryOptions(actorId), refetchInterval: 1000, }); @@ -131,14 +127,14 @@ function ActorInspectorProvider({ children }: { children: ReactNode }) { function useActorRunner({ actorId }: { actorId: ActorId }) { const { data: actor } = useSuspenseQuery( - useManager().actorQueryOptions(actorId), + useDataProvider().actorQueryOptions(actorId), ); const match = useMatch({ from: __APP_TYPE__ === "engine" - ? "/_layout/ns/$namespace" - : "/_layout/orgs/$organization/projects/$project/ns/$namespace/", + ? "/_context/_engine/ns/$namespace" + : "/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/", shouldThrow: false, }); @@ -147,9 +143,9 @@ function useActorRunner({ actorId }: { actorId: ActorId }) { } const { data: runner } = useQuery({ - ...runnerByNameQueryOptions({ + ...useEngineCompatDataProvider().runnerByNameQueryOptions({ runnerName: actor.runner, - namespace: match.params.namespace as NamespaceNameId, + namespace: match.params.namespace, }), refetchInterval: 1000, }); diff --git a/frontend/src/components/actors/hooks/index.ts b/frontend/src/components/actors/hooks/index.ts deleted file mode 100644 index 14c4d0400f..0000000000 --- a/frontend/src/components/actors/hooks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./use-dialog"; diff --git a/frontend/src/components/actors/hooks/use-websocket.ts b/frontend/src/components/actors/hooks/use-websocket.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frontend/src/components/actors/index.ts b/frontend/src/components/actors/index.ts index f690e14fc4..bdf87a9973 100644 --- a/frontend/src/components/actors/index.ts +++ b/frontend/src/components/actors/index.ts @@ -6,13 +6,10 @@ export * from "./actor-status-indicator"; export * from "./actor-status-label"; export * from "./actor-tags"; export * from "./actors-actor-details"; -export * from "./actors-layout"; export * from "./actors-layout-context"; export * from "./actors-list-preview"; export * from "./actors-view-context-provider"; export * from "./console/actor-console-message"; export * from "./console/actor-inspector"; -export * from "./getting-started"; -export * from "./hooks/index"; -export * from "./manager-context"; +export * from "./data-provider"; export * from "./queries"; diff --git a/frontend/src/components/actors/matchmaker-lobby-config-settings-card.tsx b/frontend/src/components/actors/matchmaker-lobby-config-settings-card.tsx deleted file mode 100644 index 52e564ad1e..0000000000 --- a/frontend/src/components/actors/matchmaker-lobby-config-settings-card.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { useSuspenseQuery } from "@tanstack/react-query"; -import { - Card, - CardContent, - CardFooter, - CardHeader, - CardTitle, - Flex, -} from "@/components"; -import * as MatchmakerLobbyConfigForm from "@/domains/project/forms/matchmaker-lobby-config-form"; -import { useMatchmakerLobbyConfigFormHandler } from "../hooks/use-matchmaker-lobby-config-form-handler"; -import { projectEnvironmentQueryOptions } from "../queries"; - -interface MatchMakerLobbyConfigSettingsCardProps { - projectId: string; - environmentId: string; -} - -export function MatchMakerLobbyConfigSettingsCard({ - environmentId, - projectId, -}: MatchMakerLobbyConfigSettingsCardProps) { - const { data } = useSuspenseQuery( - projectEnvironmentQueryOptions({ projectId, environmentId }), - ); - - const handleSubmit = useMatchmakerLobbyConfigFormHandler({ - environmentId, - projectId, - }); - - return ( - - - - Config - - - - - - - - - - Save - - - - - ); -} diff --git a/frontend/src/components/actors/project-logo-settings-card.tsx b/frontend/src/components/actors/project-logo-settings-card.tsx deleted file mode 100644 index a2a6185e39..0000000000 --- a/frontend/src/components/actors/project-logo-settings-card.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { - Card, - CardContent, - CardFooter, - CardHeader, - CardTitle, -} from "@/components"; -import * as GroupImageForm from "@/domains/project/forms/project-logo-form"; -import { useProjectLogoUploadMutation } from "../queries"; - -interface ProjectLogoSettingsCardProps { - projectId: string; -} - -export function ProjectLogoSettingsCard({ - projectId, -}: ProjectLogoSettingsCardProps) { - const { mutateAsync } = useProjectLogoUploadMutation(projectId); - return ( - { - try { - await mutateAsync({ file: values.logo }); - } catch { - form.setError("logo", { - type: "manual", - message: "An error occurred while uploading the image", - }); - } - }} - defaultValues={{ logo: undefined }} - > - - - Project Logo - - - - - - Save - - - - ); -} diff --git a/frontend/src/components/actors/project-select.tsx b/frontend/src/components/actors/project-select.tsx deleted file mode 100644 index 0560643252..0000000000 --- a/frontend/src/components/actors/project-select.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { faCirclePlus, Icon } from "@rivet-gg/icons"; -import { useSuspenseQuery } from "@tanstack/react-query"; -import { type ComponentProps, Fragment, useCallback } from "react"; -import { - Flex, - Select, - SelectContent, - SelectGroup, - SelectItem, - SelectLabel, - SelectSeparator, - SelectTrigger, - SelectValue, -} from "@/components"; -import { GroupAvatar } from "@/domains/group/components/group-avatar"; -import { projectsByGroupQueryOptions } from "@/domains/project/queries"; - -interface ProjectSelectProps extends ComponentProps { - showCreateProject?: boolean; - onCreateClick?: () => void; -} - -export function ProjectSelect({ - showCreateProject, - onCreateClick, - onValueChange, - ...props -}: ProjectSelectProps) { - const { data } = useSuspenseQuery(projectsByGroupQueryOptions()); - - const handleValueChange = useCallback( - (value: string) => { - if (value === "create") { - onCreateClick?.(); - return; - } - onValueChange?.(value); - }, - [onCreateClick, onValueChange], - ); - - return ( - - ); -} diff --git a/frontend/src/components/actors/project-table-actions.tsx b/frontend/src/components/actors/project-table-actions.tsx deleted file mode 100644 index 064f2f5e0d..0000000000 --- a/frontend/src/components/actors/project-table-actions.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { faEllipsisH, Icon } from "@rivet-gg/icons"; -import { - Button, - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@/components"; - -export function ProjectTableActions() { - return ( - - - - - - Manage - - - ); -} diff --git a/frontend/src/components/actors/project-tile.tsx b/frontend/src/components/actors/project-tile.tsx deleted file mode 100644 index 835d613b2b..0000000000 --- a/frontend/src/components/actors/project-tile.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import type { Rivet } from "@rivet-gg/api"; -import { AssetImage, Flex, Text } from "@/components"; -import { BillingPlanBadge } from "./billing/billing-plan-badge"; - -interface ProjectTileProps - extends Pick< - Rivet.game.GameSummary, - "gameId" | "displayName" | "logoUrl" - > {} - -export function ProjectTile({ - gameId: projectId, - displayName, - logoUrl, -}: ProjectTileProps) { - return ( - -
- -
- {displayName} - -
- ); -} diff --git a/frontend/src/components/actors/queries/actor.ts b/frontend/src/components/actors/queries/actor.ts index ae76eb0340..cc5c759a6a 100644 --- a/frontend/src/components/actors/queries/actor.ts +++ b/frontend/src/components/actors/queries/actor.ts @@ -30,7 +30,6 @@ export const useActorStatePatchMutation = ( const queryClient = useQueryClient(); const queries = useActor(); return useMutation({ - // biome-ignore lint/suspicious/noExplicitAny: its really any mutationFn: async (data: any) => { const client = queries.createActorInspector(actorId); @@ -45,7 +44,6 @@ export const useActorStatePatchMutation = ( if (!oldState || !isPatchable(data)) { response = await client.state.$patch({ // its okay, we know the type - // @ts-expect-error json: { replace: data }, }); } else { @@ -65,7 +63,7 @@ export const useActorStatePatchMutation = ( onSuccess: (data) => { queryClient.setQueryData( queries.actorStateQueryOptions(actorId).queryKey, - data, + () => ({ enabled: true, state: data }), ); }, ...options, diff --git a/frontend/src/components/actors/queries/index.ts b/frontend/src/components/actors/queries/index.ts index ca557fc41e..693c8993a0 100644 --- a/frontend/src/components/actors/queries/index.ts +++ b/frontend/src/components/actors/queries/index.ts @@ -86,13 +86,6 @@ export type Region = { name: string; }; -export type Namespace = { - id: string; - name: string; - displayName: string; - createdAt: string; -}; - export * from "./actor"; export type ActorStatus = diff --git a/frontend/src/components/actors/region-select.tsx b/frontend/src/components/actors/region-select.tsx index cfc4ade905..4431e260ca 100644 --- a/frontend/src/components/actors/region-select.tsx +++ b/frontend/src/components/actors/region-select.tsx @@ -1,7 +1,7 @@ import { useInfiniteQuery } from "@tanstack/react-query"; import { Combobox } from "@/components"; import { ActorRegion } from "./actor-region"; -import { useManager } from "./manager-context"; +import { useDataProvider } from "./data-provider"; interface RegionSelectProps { onValueChange: (value: string) => void; @@ -14,7 +14,7 @@ export function RegionSelect({ onValueChange, value }: RegionSelectProps) { fetchNextPage, isLoading, isFetchingNextPage, - } = useInfiniteQuery(useManager().regionsQueryOptions()); + } = useInfiniteQuery(useDataProvider().regionsQueryOptions()); const regions = [ { diff --git a/frontend/src/components/actors/runner-select.tsx b/frontend/src/components/actors/runner-select.tsx index c8f8d0908d..d06fda989a 100644 --- a/frontend/src/components/actors/runner-select.tsx +++ b/frontend/src/components/actors/runner-select.tsx @@ -1,15 +1,12 @@ import { useInfiniteQuery } from "@tanstack/react-query"; import { useMemo, useState } from "react"; import { Combobox } from "@/components"; -import { - type NamespaceNameId, - runnerNamesQueryOptions, -} from "@/queries/manager-engine"; +import { useEngineCompatDataProvider } from "./data-provider"; interface RunnerSelectProps { onValueChange: (value: string) => void; value: string; - namespace: NamespaceNameId; + namespace: string; } export function RunnerSelect({ @@ -23,7 +20,9 @@ export function RunnerSelect({ fetchNextPage, isLoading, isFetchingNextPage, - } = useInfiniteQuery(runnerNamesQueryOptions({ namespace })); + } = useInfiniteQuery( + useEngineCompatDataProvider().runnerNamesQueryOptions({ namespace }), + ); const [newRunner, setNewRunner] = useState(null); diff --git a/frontend/src/components/actors/worker/actor-worker-context.tsx b/frontend/src/components/actors/worker/actor-worker-context.tsx index 6a3038e940..a5a589f4da 100644 --- a/frontend/src/components/actors/worker/actor-worker-context.tsx +++ b/frontend/src/components/actors/worker/actor-worker-context.tsx @@ -11,7 +11,7 @@ import { import { getConfig } from "@/components/lib/config"; import { assertNonNullable, ls } from "../../lib/utils"; import { useActor } from "../actor-queries-context"; -import { useManager } from "../manager-context"; +import { useDataProvider } from "../data-provider"; import { ActorFeature, type ActorId } from "../queries"; import { ActorWorkerContainer } from "./actor-worker-container"; @@ -42,7 +42,7 @@ export const ActorWorkerContextProvider = ({ startedAt, sleepingAt, } = {}, - } = useQuery(useManager().actorWorkerQueryOptions(actorId)); + } = useQuery(useDataProvider().actorWorkerQueryOptions(actorId)); const enabled = (features?.includes(ActorFeature.Console) && !destroyedAt && diff --git a/frontend/src/components/code-mirror/index.tsx b/frontend/src/components/code-mirror/index.tsx index bdadd2bf68..a995fd6330 100644 --- a/frontend/src/components/code-mirror/index.tsx +++ b/frontend/src/components/code-mirror/index.tsx @@ -37,7 +37,7 @@ export const JsonCode = forwardRef( const value = state.doc.toString(); if (value.trim() === "") return []; - return diagnostics; + return [...diagnostics]; }, }), ...extensions, diff --git a/frontend/src/components/code-preview/code-preview.tsx b/frontend/src/components/code-preview/code-preview.tsx index 5cb00c2f29..bba87a961b 100644 --- a/frontend/src/components/code-preview/code-preview.tsx +++ b/frontend/src/components/code-preview/code-preview.tsx @@ -3,6 +3,7 @@ import { createHighlighterCore, createOnigurumaEngine, type HighlighterCore, + type ThemeInput, } from "shiki"; import { Skeleton } from "../ui/skeleton"; import theme from "./theme.json"; @@ -21,7 +22,7 @@ export function CodePreview({ code, language }: CodePreviewProps) { async function createHighlighter() { highlighter.current ??= await createHighlighterCore({ - themes: [theme], + themes: [theme as ThemeInput], langs: [import("@shikijs/langs/typescript")], engine: createOnigurumaEngine(import("shiki/wasm")), }); diff --git a/frontend/src/components/dialogs/feedback-dialog.tsx b/frontend/src/components/dialogs/feedback-dialog.tsx index 20197b36d0..a9946ffccf 100644 --- a/frontend/src/components/dialogs/feedback-dialog.tsx +++ b/frontend/src/components/dialogs/feedback-dialog.tsx @@ -3,7 +3,7 @@ import { faDiscord, Icon } from "@rivet-gg/icons"; import { usePostHog } from "posthog-js/react"; import { useState } from "react"; import * as FeedbackForm from "../forms/feedback-form"; -import type { DialogContentProps } from "../hooks/use-dialog"; +import type { DialogContentProps } from "../hooks"; import { FEEDBACK_FORM_ID } from "../lib/constants"; import { Button } from "../ui/button"; import { DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; diff --git a/frontend/src/components/hooks/index.ts b/frontend/src/components/hooks/index.ts index b4641096d6..56c9ff0c31 100644 --- a/frontend/src/components/hooks/index.ts +++ b/frontend/src/components/hooks/index.ts @@ -1 +1,3 @@ +export * as Frame from "./isomorphic-frame"; export * from "./use-breakpoint"; +export * from "./use-dialog"; diff --git a/frontend/src/components/hooks/isomorphic-frame.tsx b/frontend/src/components/hooks/isomorphic-frame.tsx new file mode 100644 index 0000000000..890fb71e98 --- /dev/null +++ b/frontend/src/components/hooks/isomorphic-frame.tsx @@ -0,0 +1,37 @@ +import { createContext, useContext } from "react"; +import { + CardContent, + CardFooter, + CardHeader, + CardTitle, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components"; + +export const IsInModalContext = createContext(false); + +export const Header = (props: React.ComponentProps) => { + const isInModal = useContext(IsInModalContext); + return isInModal ? : ; +}; + +export const Title = (props: React.ComponentProps) => { + const isInModal = useContext(IsInModalContext); + return isInModal ? : ; +}; + +export const Content = (props: React.HTMLAttributes) => { + const isInModal = useContext(IsInModalContext); + return isInModal ? ( + + ) : ( + + ); +}; + +export const Footer = (props: React.ComponentProps) => { + const isInModal = useContext(IsInModalContext); + return isInModal ? : ; +}; diff --git a/frontend/src/components/actors/hooks/use-dialog.tsx b/frontend/src/components/hooks/use-dialog.tsx similarity index 85% rename from frontend/src/components/actors/hooks/use-dialog.tsx rename to frontend/src/components/hooks/use-dialog.tsx index 7c6cd19a0a..e2d5267d58 100644 --- a/frontend/src/components/actors/hooks/use-dialog.tsx +++ b/frontend/src/components/hooks/use-dialog.tsx @@ -15,7 +15,8 @@ import { DialogContent, type DialogProps, DialogTitle, -} from "../../ui/dialog"; +} from "../ui/dialog"; +import { IsInModalContext } from "./isomorphic-frame"; export interface DialogContentProps { onClose?: () => void; @@ -27,7 +28,7 @@ interface DialogConfig { export const createDialogHook = < // biome-ignore lint/suspicious/noExplicitAny: we don't know the type of the component, so we use any - Component extends Promise<{ default: ComponentType }>, + Component extends () => Promise<{ default: ComponentType }>, >( component: Component, opts: DialogConfig = {}, @@ -35,11 +36,11 @@ export const createDialogHook = < const DialogImpl = ({ dialogProps, ...props - }: ComponentProps["default"]> & { + }: ComponentProps>["default"]> & { dialogProps?: DialogProps; }) => { // biome-ignore lint/correctness/useExhaustiveDependencies: component here is a static value, won't change over time - const Content = useMemo(() => lazy(() => component), []); + const Content = useMemo(() => lazy(component), []); return ( @@ -94,7 +95,9 @@ export const createDialogHook = < ); }; - const useHook = (props: ComponentProps["default"]>) => { + const useHook = ( + props: ComponentProps>["default"]>, + ) => { const [isOpen, setIsOpen] = useState(() => false); const close = useCallback(() => { @@ -184,7 +187,9 @@ export const createDataDialogHook = < } }} > - + + + ), @@ -194,9 +199,13 @@ export const createDataDialogHook = < export function useDialog() {} -useDialog.GoToActor = createDialogHook(import("../dialogs/go-to-actor-dialog")); +useDialog.GoToActor = createDialogHook( + () => import("../actors/dialogs/go-to-actor-dialog"), +); -useDialog.Feedback = createDialogHook(import("../../dialogs/feedback-dialog")); +useDialog.Feedback = createDialogHook( + () => import("../dialogs/feedback-dialog"), +); useDialog.CreateActor = createDialogHook( - import("../dialogs/create-actor-dialog"), + () => import("../actors/dialogs/create-actor-dialog"), ); diff --git a/frontend/src/components/json/index.tsx b/frontend/src/components/json/index.tsx index 8e2f4491d4..0599f7a2ef 100644 --- a/frontend/src/components/json/index.tsx +++ b/frontend/src/components/json/index.tsx @@ -434,7 +434,7 @@ function ObjectValue({ {key}: {" "} ( diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx index fe8fd4b677..17736a8daa 100644 --- a/frontend/src/components/ui/button.tsx +++ b/frontend/src/components/ui/button.tsx @@ -30,7 +30,7 @@ const buttonVariants = cva( size: { default: "h-10 px-4 py-2 gap-1.5 [&_svg]:size-[1em]", xs: "h-5 rounded-md px-2 text-xs gap-0.5 [&_svg]:size-2", - sm: "h-7 rounded-md px-2 text-xs [&_svg]:size-3 gap-1.5", + sm: "h-7 rounded-md px-2 text-sm [&_svg]:size-3.5 gap-1.5", lg: "h-11 rounded-md px-8 gap-2 [&_svg]:size-[1em]", icon: "h-10 w-10 gap-1.5 [&_svg]:size-[1em]", "icon-sm": "h-7 w-7 text-xs [&_svg]:size-3 gap-1.5", diff --git a/frontend/src/components/ui/combobox.tsx b/frontend/src/components/ui/combobox.tsx index 345d0a759c..f6ca7e3c56 100644 --- a/frontend/src/components/ui/combobox.tsx +++ b/frontend/src/components/ui/combobox.tsx @@ -64,7 +64,6 @@ export const Combobox =
diff --git a/frontend/src/components/ui/select.tsx b/frontend/src/components/ui/select.tsx index c6e28ef74a..6606bac576 100644 --- a/frontend/src/components/ui/select.tsx +++ b/frontend/src/components/ui/select.tsx @@ -5,6 +5,7 @@ import { faCheck, faChevronDown, faChevronUp, + // @ts-expect-error faSelect, Icon, } from "@rivet-gg/icons"; diff --git a/frontend/src/lib/env.ts b/frontend/src/lib/env.ts index 89dc93e950..1fc0c61630 100644 --- a/frontend/src/lib/env.ts +++ b/frontend/src/lib/env.ts @@ -7,3 +7,9 @@ export const cloudEnvSchema = z.object({ }); export const cloudEnv = () => cloudEnvSchema.parse(import.meta.env); + +export const engineEnvSchema = z.object({ + VITE_APP_API_URL: z.string().url(), +}); + +export const engineEnv = () => engineEnvSchema.parse(import.meta.env); diff --git a/frontend/src/queries/manager-cloud.ts b/frontend/src/queries/manager-cloud.ts deleted file mode 100644 index 047da7fb03..0000000000 --- a/frontend/src/queries/manager-cloud.ts +++ /dev/null @@ -1,498 +0,0 @@ -import { - type Rivet as CloudRivet, - RivetClient as CloudRivetClient, -} from "@rivet-gg/cloud"; -import { ActorFeature } from "@rivetkit/core/inspector"; -import { type Rivet, RivetClient } from "@rivetkit/engine-api-full"; -import { - infiniteQueryOptions, - queryOptions, - skipToken, -} from "@tanstack/react-query"; -import z from "zod"; -import { getConfig } from "@/components"; -import type { - Actor, - ActorId, - CrashPolicy, - ManagerContext, -} from "@/components/actors"; -import { - ACTORS_PER_PAGE, - ActorQueryOptionsSchema, - createDefaultManagerContext, -} from "@/components/actors/manager-context"; -import { clerk } from "@/lib/auth"; -import { cloudEnv } from "@/lib/env"; -import { queryClient } from "./global"; - -const client = new RivetClient({ - baseUrl: () => getConfig().apiUrl, - environment: "", -}); - -const cloudClient = new CloudRivetClient({ - baseUrl: () => cloudEnv().VITE_APP_CLOUD_API_URL, - environment: "", - token: async () => { - return (await clerk.session?.getToken()) || ""; - }, -}); - -export { cloudClient as managerCloudClient }; - -export const createCloudManagerContext = ({ - namespace, - project, -}: { - namespace: string; - project: string; -}) => { - const def = createDefaultManagerContext(); - - const namespacesQueryOptions = (project: string) => { - return infiniteQueryOptions({ - queryKey: [project, "namespaces"], - initialPageParam: undefined as string | undefined, - queryFn: async ({ pageParam, signal: abortSignal }) => { - const data = await cloudClient.namespaces.list( - project, - { - limit: ACTORS_PER_PAGE, - cursor: pageParam ?? undefined, - }, - { abortSignal }, - ); - return { - pagination: data.pagination, - namespaces: data.namespaces.map((ns) => ({ - id: ns.id, - name: ns.name, - displayName: ns.displayName, - createdAt: ns.createdAt, - })), - }; - }, - getNextPageParam: (lastPage) => { - if (lastPage.namespaces.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - select: (data) => data.pages.flatMap((page) => page.namespaces), - }); - }; - - return { - ...def, - features: { - canCreateActors: true, - canDeleteActors: true, - }, - managerStatusQueryOptions() { - return queryOptions({ - ...def.managerStatusQueryOptions(), - enabled: true, - queryFn: async () => { - return true; - }, - }); - }, - regionsQueryOptions() { - return infiniteQueryOptions({ - ...def.regionsQueryOptions(), - enabled: true, - queryFn: async () => { - const data = await client.datacenters.list(); - return { - regions: data.datacenters.map((dc) => ({ - id: dc.name, - name: dc.name, - })), - pagination: data.pagination, - }; - }, - }); - }, - regionQueryOptions(regionId: string) { - return queryOptions({ - ...def.regionQueryOptions(regionId), - queryKey: ["region", regionId], - queryFn: async ({ client }) => { - const regions = await client.ensureInfiniteQueryData( - this.regionsQueryOptions(), - ); - - for (const page of regions.pages) { - for (const region of page.regions) { - if (region.id === regionId) { - return region; - } - } - } - - throw new Error(`Region not found: ${regionId}`); - }, - }); - }, - actorQueryOptions(actorId) { - return queryOptions({ - ...def.actorQueryOptions(actorId), - queryKey: [namespace, "actor", actorId], - enabled: true, - queryFn: async ({ signal: abortSignal }) => { - const data = await client.actorsGet( - actorId, - { namespace }, - { abortSignal }, - ); - - return transformActor(data.actor); - }, - }); - }, - actorsQueryOptions(opts) { - return infiniteQueryOptions({ - ...def.actorsQueryOptions(opts), - queryKey: [namespace, "actors", opts], - enabled: true, - initialPageParam: undefined, - queryFn: async ({ - signal: abortSignal, - pageParam, - queryKey: [, , _opts], - }) => { - const { success, data: opts } = - ActorQueryOptionsSchema.safeParse(_opts || {}); - - if ( - (opts?.n?.length === 0 || !opts?.n) && - (opts?.filters?.id?.value?.length === 0 || - !opts?.filters?.id?.value || - opts?.filters.key?.value?.length === 0 || - !opts?.filters.key?.value) - ) { - // If there are no names specified, we can return an empty result - return { - actors: [], - pagination: { - cursor: undefined, - }, - }; - } - - const data = await client.actorsList( - { - namespace, - cursor: pageParam ?? undefined, - actorIds: opts?.filters?.id?.value?.join(","), - key: opts?.filters?.key?.value?.join(","), - includeDestroyed: - success && - (opts?.filters?.showDestroyed?.value.includes( - "true", - ) || - opts?.filters?.showDestroyed?.value.includes( - "1", - )), - limit: ACTORS_PER_PAGE, - name: opts?.filters?.id?.value - ? undefined - : opts?.n?.join(","), - }, - { abortSignal }, - ); - - return { - ...data, - actors: data.actors.map((actor) => - transformActor(actor), - ), - }; - }, - getNextPageParam: (lastPage) => { - if (lastPage.actors.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - }); - }, - buildsQueryOptions() { - return infiniteQueryOptions({ - ...def.buildsQueryOptions(), - queryKey: [namespace, "builds"], - enabled: true, - queryFn: async ({ signal: abortSignal, pageParam }) => { - const data = await client.actorsListNames( - { - namespace, - cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, - }, - { abortSignal }, - ); - - return { - pagination: data.pagination, - builds: Object.keys(data.names) - .sort() - .map((build) => ({ - id: build, - name: build, - })), - }; - }, - getNextPageParam: (lastPage) => { - if (lastPage.builds.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - }); - }, - createActorMutationOptions() { - return { - ...def.createActorMutationOptions(), - mutationKey: [namespace, "actors"], - mutationFn: async (data) => { - const response = await client.actorsCreate({ - namespace, - name: data.name, - key: data.key, - crashPolicy: data.crashPolicy, - runnerNameSelector: data.runnerNameSelector, - input: JSON.stringify(data.input), - }); - - return response.actor.actorId; - }, - onSuccess: () => {}, - }; - }, - actorDestroyMutationOptions(actorId) { - return { - ...def.actorDestroyMutationOptions(actorId), - mutationFn: async () => { - await client.actorsDelete(actorId); - }, - }; - }, - namespacesQueryOptions() { - return namespacesQueryOptions(project); - }, - projectNamespacesQueryOptions(projectId) { - return namespacesQueryOptions(projectId); - }, - createNamespaceMutationOptions(opts) { - return { - ...opts, - mutationKey: [project, "namespaces"], - mutationFn: async (data) => { - return await cloudClient.namespaces.create(project, data); - }, - }; - }, - } satisfies ManagerContext; -}; - -export const NamespaceNameId = z.string().brand(); -export type NamespaceNameId = z.infer; - -export const projectsQueryOptions = (opts: { organization: string }) => { - return infiniteQueryOptions({ - queryKey: [opts, "projects"], - initialPageParam: undefined as string | undefined, - queryFn: async ({ signal: abortSignal, pageParam }) => { - const data = await cloudClient.projects.list( - { - org: opts.organization, - cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, - }, - { - abortSignal, - }, - ); - return data; - }, - getNextPageParam: (lastPage) => { - if (lastPage.projects.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - select: (data) => data.pages.flatMap((page) => page.projects), - }); -}; - -export const projectQueryOptions = (opts: { project: string }) => { - return queryOptions({ - queryKey: ["project", opts.project], - enabled: !!opts.project, - queryFn: async ({ signal: abortSignal }) => { - const data = await cloudClient.projects.get(opts.project, { - abortSignal, - }); - return data; - }, - }); -}; - -export const organizationQueryOptions = (opts: { org: string }) => { - return queryOptions({ - queryKey: ["organization", opts.org], - queryFn: async () => { - return clerk.getOrganization(opts.org); - }, - }); -}; - -export const runnersQueryOptions = (opts: { namespace: NamespaceNameId }) => { - return infiniteQueryOptions({ - queryKey: [opts.namespace, "runners"], - initialPageParam: undefined as string | undefined, - queryFn: async ({ pageParam, signal: abortSignal }) => { - const data = await client.runners.list( - { - namespace: opts.namespace, - cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, - }, - { abortSignal }, - ); - return data; - }, - getNextPageParam: (lastPage) => { - if (lastPage.runners.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - select: (data) => data.pages.flatMap((page) => page.runners), - }); -}; - -export const runnerQueryOptions = (opts: { - namespace: NamespaceNameId; - runnerId: string; -}) => { - return queryOptions({ - queryKey: [opts.namespace, "runner", opts.runnerId], - enabled: !!opts.runnerId, - queryFn: async ({ signal: abortSignal }) => { - const data = await client.runners.get( - opts.runnerId, - { namespace: opts.namespace }, - { - abortSignal, - }, - ); - return data.runner; - }, - }); -}; - -export const runnerNamesQueryOptions = (opts: { - namespace: NamespaceNameId; -}) => { - return infiniteQueryOptions({ - queryKey: [opts.namespace, "runner", "names"], - initialPageParam: undefined as string | undefined, - queryFn: async ({ signal: abortSignal, pageParam }) => { - const data = await client.runners.listNames( - { - namespace: opts.namespace, - cursor: pageParam ?? undefined, - limit: ACTORS_PER_PAGE, - }, - { - abortSignal, - }, - ); - return data; - }, - getNextPageParam: (lastPage) => { - if (lastPage.names.length < ACTORS_PER_PAGE) { - return undefined; - } - return lastPage.pagination.cursor; - }, - select: (data) => data.pages.flatMap((page) => page.names), - }); -}; - -export const namespaceQueryOptions = ({ - project, - namespace, -}: { - project: string; - namespace: string; -}) => { - return queryOptions({ - queryKey: [project, "namespace", namespace], - enabled: !!namespace, - queryFn: namespace - ? async ({ signal: abortSignal }) => { - const data = await cloudClient.namespaces.get( - project, - namespace, - { - abortSignal, - }, - ); - return data; - } - : skipToken, - }); -}; - -function transformActor(a: Rivet.Actor): Actor { - return { - id: a.actorId as ActorId, - name: a.name, - key: a.key ? a.key : undefined, - connectableAt: a.connectableTs - ? new Date(a.connectableTs).toISOString() - : undefined, - region: a.datacenter, - createdAt: new Date(a.createTs).toISOString(), - startedAt: a.startTs ? new Date(a.startTs).toISOString() : undefined, - destroyedAt: a.destroyTs - ? new Date(a.destroyTs).toISOString() - : undefined, - sleepingAt: a.sleepTs ? new Date(a.sleepTs).toISOString() : undefined, - pendingAllocationAt: a.pendingAllocationTs - ? new Date(a.pendingAllocationTs).toISOString() - : undefined, - crashPolicy: a.crashPolicy as CrashPolicy, - runner: a.runnerNameSelector, - features: [ - ActorFeature.Config, - ActorFeature.Connections, - ActorFeature.State, - ActorFeature.Console, - ActorFeature.Database, - ActorFeature.EventsMonitoring, - ], - }; -} - -export function createProjectMutationOptions({ - onSuccess, -}: { - onSuccess?: (data: CloudRivet.Project) => void; -} = {}) { - return { - mutationKey: ["projects"], - mutationFn: async (data: { displayName: string; nameId: string }) => { - const response = await cloudClient.projects.create({ - displayName: data.displayName, - name: data.nameId, - }); - - return response; - }, - onSuccess, - }; -} diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 00a2f83986..e870324744 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -9,262 +9,450 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' -import { Route as LayoutRouteImport } from './routes/_layout' -import { Route as LayoutIndexRouteImport } from './routes/_layout/index' -import { Route as LayoutNamespacesRouteImport } from './routes/_layout/namespaces' -import { Route as LayoutNsNamespaceRouteImport } from './routes/_layout/ns.$namespace' -import { Route as LayoutOrgsOrganizationIndexRouteImport } from './routes/_layout/orgs.$organization/index' -import { Route as LayoutNsNamespaceIndexRouteImport } from './routes/_layout/ns.$namespace/index' -import { Route as LayoutNsNamespaceRunnersRouteImport } from './routes/_layout/ns.$namespace/runners' -import { Route as LayoutOrgsOrganizationProjectsProjectIndexRouteImport } from './routes/_layout/orgs.$organization/projects.$project/index' -import { Route as LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRouteImport } from './routes/_layout/orgs.$organization/projects.$project/ns.$namespace/index' -import { Route as LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRouteImport } from './routes/_layout/orgs.$organization/projects.$project/ns.$namespace/connect' - -const LayoutRoute = LayoutRouteImport.update({ - id: '/_layout', +import { Route as ContextRouteImport } from './routes/_context' +import { Route as ContextIndexRouteImport } from './routes/_context/index' +import { Route as ContextInspectorRouteImport } from './routes/_context/_inspector' +import { Route as ContextEngineRouteImport } from './routes/_context/_engine' +import { Route as ContextCloudRouteImport } from './routes/_context/_cloud' +import { Route as ContextInspectorInspectRouteImport } from './routes/_context/_inspector/inspect' +import { Route as ContextEngineNsNamespaceRouteImport } from './routes/_context/_engine/ns.$namespace' +import { Route as ContextCloudOrgsOrganizationRouteImport } from './routes/_context/_cloud/orgs.$organization' +import { Route as ContextEngineNsNamespaceIndexRouteImport } from './routes/_context/_engine/ns.$namespace/index' +import { Route as ContextCloudOrgsOrganizationIndexRouteImport } from './routes/_context/_cloud/orgs.$organization/index' +import { Route as ContextEngineNsNamespaceRunnersRouteImport } from './routes/_context/_engine/ns.$namespace/runners' +import { Route as ContextCloudOrgsOrganizationProjectsProjectRouteImport } from './routes/_context/_cloud/orgs.$organization/projects.$project' +import { Route as ContextCloudOrgsOrganizationProjectsProjectIndexRouteImport } from './routes/_context/_cloud/orgs.$organization/projects.$project/index' +import { Route as ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteImport } from './routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace' +import { Route as ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRouteImport } from './routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/index' +import { Route as ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRouteImport } from './routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/connect' + +const ContextRoute = ContextRouteImport.update({ + id: '/_context', getParentRoute: () => rootRouteImport, } as any) -const LayoutIndexRoute = LayoutIndexRouteImport.update({ +const ContextIndexRoute = ContextIndexRouteImport.update({ id: '/', path: '/', - getParentRoute: () => LayoutRoute, + getParentRoute: () => ContextRoute, } as any) -const LayoutNamespacesRoute = LayoutNamespacesRouteImport.update({ - id: '/namespaces', - path: '/namespaces', - getParentRoute: () => LayoutRoute, +const ContextInspectorRoute = ContextInspectorRouteImport.update({ + id: '/_inspector', + getParentRoute: () => ContextRoute, } as any) -const LayoutNsNamespaceRoute = LayoutNsNamespaceRouteImport.update({ - id: '/ns/$namespace', - path: '/ns/$namespace', - getParentRoute: () => LayoutRoute, +const ContextEngineRoute = ContextEngineRouteImport.update({ + id: '/_engine', + getParentRoute: () => ContextRoute, } as any) -const LayoutOrgsOrganizationIndexRoute = - LayoutOrgsOrganizationIndexRouteImport.update({ - id: '/orgs/$organization/', - path: '/orgs/$organization/', - getParentRoute: () => LayoutRoute, - } as any) -const LayoutNsNamespaceIndexRoute = LayoutNsNamespaceIndexRouteImport.update({ - id: '/', - path: '/', - getParentRoute: () => LayoutNsNamespaceRoute, +const ContextCloudRoute = ContextCloudRouteImport.update({ + id: '/_cloud', + getParentRoute: () => ContextRoute, } as any) -const LayoutNsNamespaceRunnersRoute = - LayoutNsNamespaceRunnersRouteImport.update({ +const ContextInspectorInspectRoute = ContextInspectorInspectRouteImport.update({ + id: '/inspect', + path: '/inspect', + getParentRoute: () => ContextInspectorRoute, +} as any) +const ContextEngineNsNamespaceRoute = + ContextEngineNsNamespaceRouteImport.update({ + id: '/ns/$namespace', + path: '/ns/$namespace', + getParentRoute: () => ContextEngineRoute, + } as any) +const ContextCloudOrgsOrganizationRoute = + ContextCloudOrgsOrganizationRouteImport.update({ + id: '/orgs/$organization', + path: '/orgs/$organization', + getParentRoute: () => ContextCloudRoute, + } as any) +const ContextEngineNsNamespaceIndexRoute = + ContextEngineNsNamespaceIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => ContextEngineNsNamespaceRoute, + } as any) +const ContextCloudOrgsOrganizationIndexRoute = + ContextCloudOrgsOrganizationIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => ContextCloudOrgsOrganizationRoute, + } as any) +const ContextEngineNsNamespaceRunnersRoute = + ContextEngineNsNamespaceRunnersRouteImport.update({ id: '/runners', path: '/runners', - getParentRoute: () => LayoutNsNamespaceRoute, + getParentRoute: () => ContextEngineNsNamespaceRoute, } as any) -const LayoutOrgsOrganizationProjectsProjectIndexRoute = - LayoutOrgsOrganizationProjectsProjectIndexRouteImport.update({ - id: '/orgs/$organization/projects/$project/', - path: '/orgs/$organization/projects/$project/', - getParentRoute: () => LayoutRoute, +const ContextCloudOrgsOrganizationProjectsProjectRoute = + ContextCloudOrgsOrganizationProjectsProjectRouteImport.update({ + id: '/projects/$project', + path: '/projects/$project', + getParentRoute: () => ContextCloudOrgsOrganizationRoute, } as any) -const LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute = - LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRouteImport.update({ - id: '/orgs/$organization/projects/$project/ns/$namespace/', - path: '/orgs/$organization/projects/$project/ns/$namespace/', - getParentRoute: () => LayoutRoute, +const ContextCloudOrgsOrganizationProjectsProjectIndexRoute = + ContextCloudOrgsOrganizationProjectsProjectIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => ContextCloudOrgsOrganizationProjectsProjectRoute, } as any) -const LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute = - LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRouteImport.update({ - id: '/orgs/$organization/projects/$project/ns/$namespace/connect', - path: '/orgs/$organization/projects/$project/ns/$namespace/connect', - getParentRoute: () => LayoutRoute, +const ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute = + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteImport.update({ + id: '/ns/$namespace', + path: '/ns/$namespace', + getParentRoute: () => ContextCloudOrgsOrganizationProjectsProjectRoute, } as any) +const ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute = + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRouteImport.update( + { + id: '/', + path: '/', + getParentRoute: () => + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute, + } as any, + ) +const ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute = + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRouteImport.update( + { + id: '/connect', + path: '/connect', + getParentRoute: () => + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute, + } as any, + ) export interface FileRoutesByFullPath { - '/namespaces': typeof LayoutNamespacesRoute - '/': typeof LayoutIndexRoute - '/ns/$namespace': typeof LayoutNsNamespaceRouteWithChildren - '/ns/$namespace/runners': typeof LayoutNsNamespaceRunnersRoute - '/ns/$namespace/': typeof LayoutNsNamespaceIndexRoute - '/orgs/$organization': typeof LayoutOrgsOrganizationIndexRoute - '/orgs/$organization/projects/$project': typeof LayoutOrgsOrganizationProjectsProjectIndexRoute - '/orgs/$organization/projects/$project/ns/$namespace/connect': typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute - '/orgs/$organization/projects/$project/ns/$namespace': typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute + '/': typeof ContextIndexRoute + '/inspect': typeof ContextInspectorInspectRoute + '/orgs/$organization': typeof ContextCloudOrgsOrganizationRouteWithChildren + '/ns/$namespace': typeof ContextEngineNsNamespaceRouteWithChildren + '/ns/$namespace/runners': typeof ContextEngineNsNamespaceRunnersRoute + '/orgs/$organization/': typeof ContextCloudOrgsOrganizationIndexRoute + '/ns/$namespace/': typeof ContextEngineNsNamespaceIndexRoute + '/orgs/$organization/projects/$project': typeof ContextCloudOrgsOrganizationProjectsProjectRouteWithChildren + '/orgs/$organization/projects/$project/': typeof ContextCloudOrgsOrganizationProjectsProjectIndexRoute + '/orgs/$organization/projects/$project/ns/$namespace': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteWithChildren + '/orgs/$organization/projects/$project/ns/$namespace/connect': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute + '/orgs/$organization/projects/$project/ns/$namespace/': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute } export interface FileRoutesByTo { - '/namespaces': typeof LayoutNamespacesRoute - '/': typeof LayoutIndexRoute - '/ns/$namespace/runners': typeof LayoutNsNamespaceRunnersRoute - '/ns/$namespace': typeof LayoutNsNamespaceIndexRoute - '/orgs/$organization': typeof LayoutOrgsOrganizationIndexRoute - '/orgs/$organization/projects/$project': typeof LayoutOrgsOrganizationProjectsProjectIndexRoute - '/orgs/$organization/projects/$project/ns/$namespace/connect': typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute - '/orgs/$organization/projects/$project/ns/$namespace': typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute + '/': typeof ContextIndexRoute + '/inspect': typeof ContextInspectorInspectRoute + '/ns/$namespace/runners': typeof ContextEngineNsNamespaceRunnersRoute + '/orgs/$organization': typeof ContextCloudOrgsOrganizationIndexRoute + '/ns/$namespace': typeof ContextEngineNsNamespaceIndexRoute + '/orgs/$organization/projects/$project': typeof ContextCloudOrgsOrganizationProjectsProjectIndexRoute + '/orgs/$organization/projects/$project/ns/$namespace/connect': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute + '/orgs/$organization/projects/$project/ns/$namespace': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport - '/_layout': typeof LayoutRouteWithChildren - '/_layout/namespaces': typeof LayoutNamespacesRoute - '/_layout/': typeof LayoutIndexRoute - '/_layout/ns/$namespace': typeof LayoutNsNamespaceRouteWithChildren - '/_layout/ns/$namespace/runners': typeof LayoutNsNamespaceRunnersRoute - '/_layout/ns/$namespace/': typeof LayoutNsNamespaceIndexRoute - '/_layout/orgs/$organization/': typeof LayoutOrgsOrganizationIndexRoute - '/_layout/orgs/$organization/projects/$project/': typeof LayoutOrgsOrganizationProjectsProjectIndexRoute - '/_layout/orgs/$organization/projects/$project/ns/$namespace/connect': typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute - '/_layout/orgs/$organization/projects/$project/ns/$namespace/': typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute + '/_context': typeof ContextRouteWithChildren + '/_context/_cloud': typeof ContextCloudRouteWithChildren + '/_context/_engine': typeof ContextEngineRouteWithChildren + '/_context/_inspector': typeof ContextInspectorRouteWithChildren + '/_context/': typeof ContextIndexRoute + '/_context/_inspector/inspect': typeof ContextInspectorInspectRoute + '/_context/_cloud/orgs/$organization': typeof ContextCloudOrgsOrganizationRouteWithChildren + '/_context/_engine/ns/$namespace': typeof ContextEngineNsNamespaceRouteWithChildren + '/_context/_engine/ns/$namespace/runners': typeof ContextEngineNsNamespaceRunnersRoute + '/_context/_cloud/orgs/$organization/': typeof ContextCloudOrgsOrganizationIndexRoute + '/_context/_engine/ns/$namespace/': typeof ContextEngineNsNamespaceIndexRoute + '/_context/_cloud/orgs/$organization/projects/$project': typeof ContextCloudOrgsOrganizationProjectsProjectRouteWithChildren + '/_context/_cloud/orgs/$organization/projects/$project/': typeof ContextCloudOrgsOrganizationProjectsProjectIndexRoute + '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteWithChildren + '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/connect': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute + '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/': typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath fullPaths: - | '/namespaces' | '/' + | '/inspect' + | '/orgs/$organization' | '/ns/$namespace' | '/ns/$namespace/runners' + | '/orgs/$organization/' | '/ns/$namespace/' - | '/orgs/$organization' | '/orgs/$organization/projects/$project' - | '/orgs/$organization/projects/$project/ns/$namespace/connect' + | '/orgs/$organization/projects/$project/' | '/orgs/$organization/projects/$project/ns/$namespace' + | '/orgs/$organization/projects/$project/ns/$namespace/connect' + | '/orgs/$organization/projects/$project/ns/$namespace/' fileRoutesByTo: FileRoutesByTo to: - | '/namespaces' | '/' + | '/inspect' | '/ns/$namespace/runners' - | '/ns/$namespace' | '/orgs/$organization' + | '/ns/$namespace' | '/orgs/$organization/projects/$project' | '/orgs/$organization/projects/$project/ns/$namespace/connect' | '/orgs/$organization/projects/$project/ns/$namespace' id: | '__root__' - | '/_layout' - | '/_layout/namespaces' - | '/_layout/' - | '/_layout/ns/$namespace' - | '/_layout/ns/$namespace/runners' - | '/_layout/ns/$namespace/' - | '/_layout/orgs/$organization/' - | '/_layout/orgs/$organization/projects/$project/' - | '/_layout/orgs/$organization/projects/$project/ns/$namespace/connect' - | '/_layout/orgs/$organization/projects/$project/ns/$namespace/' + | '/_context' + | '/_context/_cloud' + | '/_context/_engine' + | '/_context/_inspector' + | '/_context/' + | '/_context/_inspector/inspect' + | '/_context/_cloud/orgs/$organization' + | '/_context/_engine/ns/$namespace' + | '/_context/_engine/ns/$namespace/runners' + | '/_context/_cloud/orgs/$organization/' + | '/_context/_engine/ns/$namespace/' + | '/_context/_cloud/orgs/$organization/projects/$project' + | '/_context/_cloud/orgs/$organization/projects/$project/' + | '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace' + | '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/connect' + | '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { - LayoutRoute: typeof LayoutRouteWithChildren + ContextRoute: typeof ContextRouteWithChildren } declare module '@tanstack/react-router' { interface FileRoutesByPath { - '/_layout': { - id: '/_layout' + '/_context': { + id: '/_context' path: '' fullPath: '' - preLoaderRoute: typeof LayoutRouteImport + preLoaderRoute: typeof ContextRouteImport parentRoute: typeof rootRouteImport } - '/_layout/': { - id: '/_layout/' + '/_context/': { + id: '/_context/' path: '/' fullPath: '/' - preLoaderRoute: typeof LayoutIndexRouteImport - parentRoute: typeof LayoutRoute + preLoaderRoute: typeof ContextIndexRouteImport + parentRoute: typeof ContextRoute } - '/_layout/namespaces': { - id: '/_layout/namespaces' - path: '/namespaces' - fullPath: '/namespaces' - preLoaderRoute: typeof LayoutNamespacesRouteImport - parentRoute: typeof LayoutRoute + '/_context/_inspector': { + id: '/_context/_inspector' + path: '' + fullPath: '' + preLoaderRoute: typeof ContextInspectorRouteImport + parentRoute: typeof ContextRoute + } + '/_context/_engine': { + id: '/_context/_engine' + path: '' + fullPath: '' + preLoaderRoute: typeof ContextEngineRouteImport + parentRoute: typeof ContextRoute + } + '/_context/_cloud': { + id: '/_context/_cloud' + path: '' + fullPath: '' + preLoaderRoute: typeof ContextCloudRouteImport + parentRoute: typeof ContextRoute + } + '/_context/_inspector/inspect': { + id: '/_context/_inspector/inspect' + path: '/inspect' + fullPath: '/inspect' + preLoaderRoute: typeof ContextInspectorInspectRouteImport + parentRoute: typeof ContextInspectorRoute } - '/_layout/ns/$namespace': { - id: '/_layout/ns/$namespace' + '/_context/_engine/ns/$namespace': { + id: '/_context/_engine/ns/$namespace' path: '/ns/$namespace' fullPath: '/ns/$namespace' - preLoaderRoute: typeof LayoutNsNamespaceRouteImport - parentRoute: typeof LayoutRoute + preLoaderRoute: typeof ContextEngineNsNamespaceRouteImport + parentRoute: typeof ContextEngineRoute } - '/_layout/orgs/$organization/': { - id: '/_layout/orgs/$organization/' + '/_context/_cloud/orgs/$organization': { + id: '/_context/_cloud/orgs/$organization' path: '/orgs/$organization' fullPath: '/orgs/$organization' - preLoaderRoute: typeof LayoutOrgsOrganizationIndexRouteImport - parentRoute: typeof LayoutRoute + preLoaderRoute: typeof ContextCloudOrgsOrganizationRouteImport + parentRoute: typeof ContextCloudRoute } - '/_layout/ns/$namespace/': { - id: '/_layout/ns/$namespace/' + '/_context/_engine/ns/$namespace/': { + id: '/_context/_engine/ns/$namespace/' path: '/' fullPath: '/ns/$namespace/' - preLoaderRoute: typeof LayoutNsNamespaceIndexRouteImport - parentRoute: typeof LayoutNsNamespaceRoute + preLoaderRoute: typeof ContextEngineNsNamespaceIndexRouteImport + parentRoute: typeof ContextEngineNsNamespaceRoute } - '/_layout/ns/$namespace/runners': { - id: '/_layout/ns/$namespace/runners' + '/_context/_cloud/orgs/$organization/': { + id: '/_context/_cloud/orgs/$organization/' + path: '/' + fullPath: '/orgs/$organization/' + preLoaderRoute: typeof ContextCloudOrgsOrganizationIndexRouteImport + parentRoute: typeof ContextCloudOrgsOrganizationRoute + } + '/_context/_engine/ns/$namespace/runners': { + id: '/_context/_engine/ns/$namespace/runners' path: '/runners' fullPath: '/ns/$namespace/runners' - preLoaderRoute: typeof LayoutNsNamespaceRunnersRouteImport - parentRoute: typeof LayoutNsNamespaceRoute + preLoaderRoute: typeof ContextEngineNsNamespaceRunnersRouteImport + parentRoute: typeof ContextEngineNsNamespaceRoute } - '/_layout/orgs/$organization/projects/$project/': { - id: '/_layout/orgs/$organization/projects/$project/' - path: '/orgs/$organization/projects/$project' + '/_context/_cloud/orgs/$organization/projects/$project': { + id: '/_context/_cloud/orgs/$organization/projects/$project' + path: '/projects/$project' fullPath: '/orgs/$organization/projects/$project' - preLoaderRoute: typeof LayoutOrgsOrganizationProjectsProjectIndexRouteImport - parentRoute: typeof LayoutRoute + preLoaderRoute: typeof ContextCloudOrgsOrganizationProjectsProjectRouteImport + parentRoute: typeof ContextCloudOrgsOrganizationRoute + } + '/_context/_cloud/orgs/$organization/projects/$project/': { + id: '/_context/_cloud/orgs/$organization/projects/$project/' + path: '/' + fullPath: '/orgs/$organization/projects/$project/' + preLoaderRoute: typeof ContextCloudOrgsOrganizationProjectsProjectIndexRouteImport + parentRoute: typeof ContextCloudOrgsOrganizationProjectsProjectRoute } - '/_layout/orgs/$organization/projects/$project/ns/$namespace/': { - id: '/_layout/orgs/$organization/projects/$project/ns/$namespace/' - path: '/orgs/$organization/projects/$project/ns/$namespace' + '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace': { + id: '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace' + path: '/ns/$namespace' fullPath: '/orgs/$organization/projects/$project/ns/$namespace' - preLoaderRoute: typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRouteImport - parentRoute: typeof LayoutRoute + preLoaderRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteImport + parentRoute: typeof ContextCloudOrgsOrganizationProjectsProjectRoute + } + '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/': { + id: '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/' + path: '/' + fullPath: '/orgs/$organization/projects/$project/ns/$namespace/' + preLoaderRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRouteImport + parentRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute } - '/_layout/orgs/$organization/projects/$project/ns/$namespace/connect': { - id: '/_layout/orgs/$organization/projects/$project/ns/$namespace/connect' - path: '/orgs/$organization/projects/$project/ns/$namespace/connect' + '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/connect': { + id: '/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/connect' + path: '/connect' fullPath: '/orgs/$organization/projects/$project/ns/$namespace/connect' - preLoaderRoute: typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRouteImport - parentRoute: typeof LayoutRoute + preLoaderRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRouteImport + parentRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute } } } -interface LayoutNsNamespaceRouteChildren { - LayoutNsNamespaceRunnersRoute: typeof LayoutNsNamespaceRunnersRoute - LayoutNsNamespaceIndexRoute: typeof LayoutNsNamespaceIndexRoute +interface ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteChildren { + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute } -const LayoutNsNamespaceRouteChildren: LayoutNsNamespaceRouteChildren = { - LayoutNsNamespaceRunnersRoute: LayoutNsNamespaceRunnersRoute, - LayoutNsNamespaceIndexRoute: LayoutNsNamespaceIndexRoute, +const ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteChildren: ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteChildren = + { + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute: + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceConnectRoute, + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute: + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceIndexRoute, + } + +const ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteWithChildren = + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute._addFileChildren( + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteChildren, + ) + +interface ContextCloudOrgsOrganizationProjectsProjectRouteChildren { + ContextCloudOrgsOrganizationProjectsProjectIndexRoute: typeof ContextCloudOrgsOrganizationProjectsProjectIndexRoute + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute: typeof ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteWithChildren +} + +const ContextCloudOrgsOrganizationProjectsProjectRouteChildren: ContextCloudOrgsOrganizationProjectsProjectRouteChildren = + { + ContextCloudOrgsOrganizationProjectsProjectIndexRoute: + ContextCloudOrgsOrganizationProjectsProjectIndexRoute, + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRoute: + ContextCloudOrgsOrganizationProjectsProjectNsNamespaceRouteWithChildren, + } + +const ContextCloudOrgsOrganizationProjectsProjectRouteWithChildren = + ContextCloudOrgsOrganizationProjectsProjectRoute._addFileChildren( + ContextCloudOrgsOrganizationProjectsProjectRouteChildren, + ) + +interface ContextCloudOrgsOrganizationRouteChildren { + ContextCloudOrgsOrganizationIndexRoute: typeof ContextCloudOrgsOrganizationIndexRoute + ContextCloudOrgsOrganizationProjectsProjectRoute: typeof ContextCloudOrgsOrganizationProjectsProjectRouteWithChildren } -const LayoutNsNamespaceRouteWithChildren = - LayoutNsNamespaceRoute._addFileChildren(LayoutNsNamespaceRouteChildren) - -interface LayoutRouteChildren { - LayoutNamespacesRoute: typeof LayoutNamespacesRoute - LayoutIndexRoute: typeof LayoutIndexRoute - LayoutNsNamespaceRoute: typeof LayoutNsNamespaceRouteWithChildren - LayoutOrgsOrganizationIndexRoute: typeof LayoutOrgsOrganizationIndexRoute - LayoutOrgsOrganizationProjectsProjectIndexRoute: typeof LayoutOrgsOrganizationProjectsProjectIndexRoute - LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute: typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute - LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute: typeof LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute +const ContextCloudOrgsOrganizationRouteChildren: ContextCloudOrgsOrganizationRouteChildren = + { + ContextCloudOrgsOrganizationIndexRoute: + ContextCloudOrgsOrganizationIndexRoute, + ContextCloudOrgsOrganizationProjectsProjectRoute: + ContextCloudOrgsOrganizationProjectsProjectRouteWithChildren, + } + +const ContextCloudOrgsOrganizationRouteWithChildren = + ContextCloudOrgsOrganizationRoute._addFileChildren( + ContextCloudOrgsOrganizationRouteChildren, + ) + +interface ContextCloudRouteChildren { + ContextCloudOrgsOrganizationRoute: typeof ContextCloudOrgsOrganizationRouteWithChildren +} + +const ContextCloudRouteChildren: ContextCloudRouteChildren = { + ContextCloudOrgsOrganizationRoute: + ContextCloudOrgsOrganizationRouteWithChildren, +} + +const ContextCloudRouteWithChildren = ContextCloudRoute._addFileChildren( + ContextCloudRouteChildren, +) + +interface ContextEngineNsNamespaceRouteChildren { + ContextEngineNsNamespaceRunnersRoute: typeof ContextEngineNsNamespaceRunnersRoute + ContextEngineNsNamespaceIndexRoute: typeof ContextEngineNsNamespaceIndexRoute +} + +const ContextEngineNsNamespaceRouteChildren: ContextEngineNsNamespaceRouteChildren = + { + ContextEngineNsNamespaceRunnersRoute: ContextEngineNsNamespaceRunnersRoute, + ContextEngineNsNamespaceIndexRoute: ContextEngineNsNamespaceIndexRoute, + } + +const ContextEngineNsNamespaceRouteWithChildren = + ContextEngineNsNamespaceRoute._addFileChildren( + ContextEngineNsNamespaceRouteChildren, + ) + +interface ContextEngineRouteChildren { + ContextEngineNsNamespaceRoute: typeof ContextEngineNsNamespaceRouteWithChildren +} + +const ContextEngineRouteChildren: ContextEngineRouteChildren = { + ContextEngineNsNamespaceRoute: ContextEngineNsNamespaceRouteWithChildren, +} + +const ContextEngineRouteWithChildren = ContextEngineRoute._addFileChildren( + ContextEngineRouteChildren, +) + +interface ContextInspectorRouteChildren { + ContextInspectorInspectRoute: typeof ContextInspectorInspectRoute +} + +const ContextInspectorRouteChildren: ContextInspectorRouteChildren = { + ContextInspectorInspectRoute: ContextInspectorInspectRoute, +} + +const ContextInspectorRouteWithChildren = + ContextInspectorRoute._addFileChildren(ContextInspectorRouteChildren) + +interface ContextRouteChildren { + ContextCloudRoute: typeof ContextCloudRouteWithChildren + ContextEngineRoute: typeof ContextEngineRouteWithChildren + ContextInspectorRoute: typeof ContextInspectorRouteWithChildren + ContextIndexRoute: typeof ContextIndexRoute } -const LayoutRouteChildren: LayoutRouteChildren = { - LayoutNamespacesRoute: LayoutNamespacesRoute, - LayoutIndexRoute: LayoutIndexRoute, - LayoutNsNamespaceRoute: LayoutNsNamespaceRouteWithChildren, - LayoutOrgsOrganizationIndexRoute: LayoutOrgsOrganizationIndexRoute, - LayoutOrgsOrganizationProjectsProjectIndexRoute: - LayoutOrgsOrganizationProjectsProjectIndexRoute, - LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute: - LayoutOrgsOrganizationProjectsProjectNsNamespaceConnectRoute, - LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute: - LayoutOrgsOrganizationProjectsProjectNsNamespaceIndexRoute, +const ContextRouteChildren: ContextRouteChildren = { + ContextCloudRoute: ContextCloudRouteWithChildren, + ContextEngineRoute: ContextEngineRouteWithChildren, + ContextInspectorRoute: ContextInspectorRouteWithChildren, + ContextIndexRoute: ContextIndexRoute, } -const LayoutRouteWithChildren = - LayoutRoute._addFileChildren(LayoutRouteChildren) +const ContextRouteWithChildren = + ContextRoute._addFileChildren(ContextRouteChildren) const rootRouteChildren: RootRouteChildren = { - LayoutRoute: LayoutRouteWithChildren, + ContextRoute: ContextRouteWithChildren, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index 5f05b309cb..7625e808c6 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -1,10 +1,9 @@ -import { ClerkProvider } from "@clerk/clerk-react"; -import { dark } from "@clerk/themes"; +import type { Clerk } from "@clerk/clerk-js"; +import type { QueryClient } from "@tanstack/react-query"; import { createRootRouteWithContext, Outlet } from "@tanstack/react-router"; import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"; -import { match } from "ts-pattern"; +import posthog from "posthog-js"; import { FullscreenLoading } from "@/components"; -import { clerk } from "@/lib/auth"; function RootRoute() { return ( @@ -17,28 +16,37 @@ function RootRoute() { ); } -function CloudRootRoute() { - const PUBLISHABLE_KEY = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY; - - if (!PUBLISHABLE_KEY) { - throw new Error("Add your Clerk Publishable Key to the .env file"); - } - - return ( - - - - ); +interface RootRouteContext { + /** + * Only available in cloud mode + */ + clerk: Clerk; + queryClient: QueryClient; } -export const Route = createRootRouteWithContext()({ - component: match(__APP_TYPE__) - .with("cloud", () => CloudRootRoute) - .otherwise(() => RootRoute), +export const Route = createRootRouteWithContext()({ + component: RootRoute, pendingComponent: FullscreenLoading, - wrapInSuspense: true, + beforeLoad: async ({ context }) => { + if (!context.clerk) return; + + // wait for Clerk + await new Promise((resolve, reject) => { + context.clerk.on("status", (payload) => { + if (payload === "ready") { + posthog.setPersonProperties({ + id: context.clerk.user?.id, + email: context.clerk.user?.primaryEmailAddress + ?.emailAddress, + }); + return resolve(true); + } + // If the status is not "ready", we don't resolve the promise + // We can also add a timeout to avoid waiting indefinitely + setTimeout(() => { + reject(new Error("Can't confirm identity")); + }, 10000); + }); + }); + }, }); diff --git a/frontend/src/routes/_context.tsx b/frontend/src/routes/_context.tsx new file mode 100644 index 0000000000..e121d3a2a8 --- /dev/null +++ b/frontend/src/routes/_context.tsx @@ -0,0 +1,53 @@ +import { createFileRoute, Outlet } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { match } from "ts-pattern"; +import z from "zod"; +import { createGlobalContext as createGlobalCloudContext } from "@/app/data-providers/cloud-data-provider"; +import { createGlobalContext as createGlobalEngineContext } from "@/app/data-providers/engine-data-provider"; +import { createGlobalContext as createGlobalInspectorContext } from "@/app/data-providers/inspector-data-provider"; + +const searchSchema = z + .object({ + modal: z + .enum(["go-to-actor", "feedback", "create-ns", "create-project"]) + .or(z.string()) + .optional(), + utm_source: z.string().optional(), + actorId: z.string().optional(), + tab: z.string().optional(), + n: z.array(z.string()).optional(), + u: z.string().optional(), + t: z.string().optional(), + }) + .and(z.record(z.string(), z.any())); + +export const Route = createFileRoute("/_context")({ + component: RouteComponent, + validateSearch: zodValidator(searchSchema), + context: ({ location: { search }, context }) => { + return match(__APP_TYPE__) + .with("engine", () => ({ + dataProvider: createGlobalEngineContext(), + __type: "engine" as const, + })) + .with("cloud", () => ({ + dataProvider: createGlobalCloudContext({ + clerk: context.clerk, + }), + __type: "cloud" as const, + })) + .with("inspector", () => ({ + dataProvider: createGlobalInspectorContext({ + url: (search as z.infer).u || "", + token: (search as z.infer).t || "", + }), + __type: "inspector" as const, + })) + .exhaustive(); + }, + loaderDeps: (route) => ({ token: route.search.t, url: route.search.u }), +}); + +function RouteComponent() { + return ; +} diff --git a/frontend/src/routes/_context/_cloud.tsx b/frontend/src/routes/_context/_cloud.tsx new file mode 100644 index 0000000000..c3622ad7fb --- /dev/null +++ b/frontend/src/routes/_context/_cloud.tsx @@ -0,0 +1,78 @@ +import { + createFileRoute, + notFound, + Outlet, + useNavigate, + useSearch, +} from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import { useDialog } from "@/app/use-dialog"; +import { ModalRenderer } from "@/components/modal-renderer"; + +export const Route = createFileRoute("/_context/_cloud")({ + component: RouteComponent, + beforeLoad: () => { + return match(__APP_TYPE__) + .with("cloud", async () => {}) + .otherwise(() => { + throw notFound(); + }); + }, +}); + +function RouteComponent() { + return ( + <> + + + + + ); +} + +function CloudModals() { + const navigate = useNavigate(); + const search = useSearch({ from: "/_context" }); + + const CreateProjectDialog = useDialog.CreateProject.Dialog; + const CreateNamespaceDialog = useDialog.CreateNamespace.Dialog; + + return ( + <> + { + if (!value) { + navigate({ + to: ".", + search: (old) => ({ + ...old, + modal: undefined, + }), + }); + } + }, + }} + /> + { + if (!value) { + navigate({ + to: ".", + search: (old) => ({ + ...old, + modal: undefined, + }), + }); + } + }, + }} + /> + + ); +} diff --git a/frontend/src/routes/_context/_cloud/orgs.$organization.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization.tsx new file mode 100644 index 0000000000..9a96652ae5 --- /dev/null +++ b/frontend/src/routes/_context/_cloud/orgs.$organization.tsx @@ -0,0 +1,26 @@ +import { createFileRoute, Outlet } from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import { createOrganizationContext } from "@/app/data-providers/cloud-data-provider"; + +export const Route = createFileRoute("/_context/_cloud/orgs/$organization")({ + component: RouteComponent, + context: ({ context, params }) => { + return match(context) + .with({ __type: "cloud" }, (context) => ({ + dataProvider: { + ...context.dataProvider, + ...createOrganizationContext({ + ...context.dataProvider, + organization: params.organization, + }), + }, + })) + .otherwise(() => { + throw new Error("Invalid context type for this route"); + }); + }, +}); + +function RouteComponent() { + return ; +} diff --git a/frontend/src/routes/_context/_cloud/orgs.$organization/index.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization/index.tsx new file mode 100644 index 0000000000..a54e109ae8 --- /dev/null +++ b/frontend/src/routes/_context/_cloud/orgs.$organization/index.tsx @@ -0,0 +1,47 @@ +import { createFileRoute, notFound, redirect } from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import CreateProjectFrameContent from "@/app/dialogs/create-project-frame"; +import { Card } from "@/components"; + +export const Route = createFileRoute("/_context/_cloud/orgs/$organization/")({ + beforeLoad: ({ context, params }) => { + return match(__APP_TYPE__) + .with("cloud", async () => { + if (!context.clerk?.organization) { + throw notFound(); + } + const result = await context.queryClient.fetchInfiniteQuery( + context.dataProvider.currentOrgProjectsQueryOptions(), + ); + + const firstProject = result.pages[0].projects[0]; + + if (firstProject) { + throw redirect({ + to: "/orgs/$organization/projects/$project", + replace: true, + reloadDocument: true, + params: { + organization: params.organization, + project: firstProject.name, + }, + }); + } + }) + .otherwise(() => { + throw notFound(); + }); + }, + + component: RouteComponent, +}); + +function RouteComponent() { + return ( +
+ + + +
+ ); +} diff --git a/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project.tsx new file mode 100644 index 0000000000..6f6d1bd694 --- /dev/null +++ b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project.tsx @@ -0,0 +1,29 @@ +import { createFileRoute, Outlet } from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import { createProjectContext } from "@/app/data-providers/cloud-data-provider"; + +export const Route = createFileRoute( + "/_context/_cloud/orgs/$organization/projects/$project", +)({ + component: RouteComponent, + context: ({ context, params }) => { + return match(context) + .with({ __type: "cloud" }, (context) => ({ + dataProvider: { + ...context.dataProvider, + ...createProjectContext({ + ...context.dataProvider, + organization: params.organization, + project: params.project, + }), + }, + })) + .otherwise(() => { + throw new Error("Invalid context type for this route"); + }); + }, +}); + +function RouteComponent() { + return ; +} diff --git a/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/index.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/index.tsx new file mode 100644 index 0000000000..9c285297b2 --- /dev/null +++ b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/index.tsx @@ -0,0 +1,49 @@ +import { createFileRoute, notFound, redirect } from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import CreateNamespacesFrameContent from "@/app/dialogs/create-namespace-frame"; +import { Card } from "@/components"; + +export const Route = createFileRoute( + "/_context/_cloud/orgs/$organization/projects/$project/", +)({ + beforeLoad: ({ context, params }) => { + return match(__APP_TYPE__) + .with("cloud", async () => { + if (!context.clerk?.organization) { + throw notFound(); + } + const result = await context.queryClient.fetchInfiniteQuery( + context.dataProvider.currentProjectNamespacesQueryOptions(), + ); + + const firstNamespace = result.pages[0].namespaces[0]; + + if (firstNamespace) { + throw redirect({ + to: "/orgs/$organization/projects/$project/ns/$namespace", + replace: true, + reloadDocument: true, + params: { + organization: params.organization, + project: params.project, + namespace: firstNamespace.name, + }, + }); + } + }) + .otherwise(() => { + throw notFound(); + }); + }, + component: RouteComponent, +}); + +function RouteComponent() { + return ( +
+ + + +
+ ); +} diff --git a/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace.tsx new file mode 100644 index 0000000000..64b1a28a07 --- /dev/null +++ b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace.tsx @@ -0,0 +1,29 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import { createNamespaceContext } from "@/app/data-providers/cloud-data-provider"; +import { RouteLayout } from "@/app/route-layout"; + +export const Route = createFileRoute( + "/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace", +)({ + component: RouteComponent, + context: ({ context, params }) => { + return match(context) + .with({ __type: "cloud" }, (ctx) => ({ + dataProvider: { + ...ctx.dataProvider, + ...createNamespaceContext({ + ...ctx.dataProvider, + namespace: params.namespace, + }), + }, + })) + .otherwise(() => { + throw new Error("Invalid context type for this route"); + }); + }, +}); + +function RouteComponent() { + return ; +} diff --git a/frontend/src/routes/_layout/orgs.$organization/projects.$project/ns.$namespace/connect.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/connect.tsx similarity index 83% rename from frontend/src/routes/_layout/orgs.$organization/projects.$project/ns.$namespace/connect.tsx rename to frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/connect.tsx index 8db37544dd..c871124127 100644 --- a/frontend/src/routes/_layout/orgs.$organization/projects.$project/ns.$namespace/connect.tsx +++ b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/connect.tsx @@ -2,7 +2,7 @@ import { createFileRoute, notFound } from "@tanstack/react-router"; import { match } from "ts-pattern"; export const Route = createFileRoute( - "/_layout/orgs/$organization/projects/$project/ns/$namespace/connect", + "/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/connect", )({ component: match(__APP_TYPE__) .with("cloud", () => RouteComponent) @@ -17,5 +17,5 @@ function RouteComponent() { Hello "/_layout/orgs/$organization/projects/$project/ns/$namespace/connect"!
- ); + ) } diff --git a/frontend/src/routes/_layout/orgs.$organization/projects.$project/ns.$namespace/index.tsx b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/index.tsx similarity index 52% rename from frontend/src/routes/_layout/orgs.$organization/projects.$project/ns.$namespace/index.tsx rename to frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/index.tsx index d6c631ddc4..095828eb19 100644 --- a/frontend/src/routes/_layout/orgs.$organization/projects.$project/ns.$namespace/index.tsx +++ b/frontend/src/routes/_context/_cloud/orgs.$organization/projects.$project/ns.$namespace/index.tsx @@ -1,26 +1,16 @@ import { useSuspenseInfiniteQuery } from "@tanstack/react-query"; -import { - createFileRoute, - Navigate, - notFound, - useSearch, -} from "@tanstack/react-router"; -import { match } from "ts-pattern"; +import { createFileRoute, Navigate, useSearch } from "@tanstack/react-router"; import { Actors } from "@/app/actors"; -import { useManager } from "@/components/actors"; +import { useDataProvider } from "@/components/actors"; export const Route = createFileRoute( - "/_layout/orgs/$organization/projects/$project/ns/$namespace/", + "/_context/_cloud/orgs/$organization/projects/$project/ns/$namespace/", )({ - component: match(__APP_TYPE__) - .with("cloud", () => RouteComponent) - .otherwise(() => () => { - throw notFound(); - }), + component: RouteComponent, }); export function RouteComponent() { - const { actorId, n } = useSearch({ from: "/_layout" }); + const { actorId, n } = Route.useSearch(); return ( <> @@ -32,7 +22,7 @@ export function RouteComponent() { function BuildPrefiller() { const { data } = useSuspenseInfiniteQuery( - useManager().buildsQueryOptions(), + useDataProvider().buildsQueryOptions(), ); if (data[0]) { diff --git a/frontend/src/routes/_context/_engine.tsx b/frontend/src/routes/_context/_engine.tsx new file mode 100644 index 0000000000..3a14bc98c8 --- /dev/null +++ b/frontend/src/routes/_context/_engine.tsx @@ -0,0 +1,58 @@ +import { + createFileRoute, + notFound, + Outlet, + useNavigate, + useSearch, +} from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import { useDialog } from "@/app/use-dialog"; +import { ModalRenderer } from "@/components/modal-renderer"; + +export const Route = createFileRoute("/_context/_engine")({ + component: RouteComponent, + beforeLoad: () => { + return match(__APP_TYPE__) + .with("engine", () => {}) + .otherwise(() => { + throw notFound(); + }); + }, +}); + +function RouteComponent() { + return ( + <> + + + + + ); +} + +function EngineModals() { + const navigate = useNavigate(); + const search = useSearch({ from: "/_context" }); + + const CreateNamespaceDialog = useDialog.CreateNamespace.Dialog; + + return ( + { + if (!value) { + navigate({ + to: ".", + search: (old) => ({ + ...old, + modal: undefined, + }), + }); + } + }, + }} + /> + ); +} diff --git a/frontend/src/routes/_context/_engine/ns.$namespace.tsx b/frontend/src/routes/_context/_engine/ns.$namespace.tsx new file mode 100644 index 0000000000..c272104963 --- /dev/null +++ b/frontend/src/routes/_context/_engine/ns.$namespace.tsx @@ -0,0 +1,27 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { match } from "ts-pattern"; +import { createNamespaceContext } from "@/app/data-providers/engine-data-provider"; +import { RouteLayout } from "@/app/route-layout"; + +export const Route = createFileRoute("/_context/_engine/ns/$namespace")({ + context: ({ context, params }) => { + return match(context) + .with({ __type: "engine" }, (ctx) => ({ + dataProvider: { + ...ctx.dataProvider, + ...createNamespaceContext({ + ...ctx.dataProvider, + namespace: params.namespace, + }), + }, + })) + .otherwise(() => { + throw new Error("Invalid context type for this route"); + }); + }, + component: RouteComponent, +}); + +function RouteComponent() { + return ; +} diff --git a/frontend/src/routes/_layout/ns.$namespace/index.tsx b/frontend/src/routes/_context/_engine/ns.$namespace/index.tsx similarity index 71% rename from frontend/src/routes/_layout/ns.$namespace/index.tsx rename to frontend/src/routes/_context/_engine/ns.$namespace/index.tsx index a148a1ebaa..495a790b3d 100644 --- a/frontend/src/routes/_layout/ns.$namespace/index.tsx +++ b/frontend/src/routes/_context/_engine/ns.$namespace/index.tsx @@ -1,14 +1,14 @@ import { useSuspenseInfiniteQuery } from "@tanstack/react-query"; import { createFileRoute, Navigate, useSearch } from "@tanstack/react-router"; import { Actors } from "@/app/actors"; -import { useManager } from "@/components/actors"; +import { useDataProvider } from "@/components/actors"; -export const Route = createFileRoute("/_layout/ns/$namespace/")({ +export const Route = createFileRoute("/_context/_engine/ns/$namespace/")({ component: RouteComponent, }); export function RouteComponent() { - const { actorId, n } = useSearch({ from: "/_layout" }); + const { actorId, n } = useSearch({ from: "/_context" }); return ( <> @@ -20,7 +20,7 @@ export function RouteComponent() { function BuildPrefiller() { const { data } = useSuspenseInfiniteQuery( - useManager().buildsQueryOptions(), + useDataProvider().buildsQueryOptions(), ); if (data[0]) { diff --git a/frontend/src/routes/_layout/ns.$namespace/runners.tsx b/frontend/src/routes/_context/_engine/ns.$namespace/runners.tsx similarity index 92% rename from frontend/src/routes/_layout/ns.$namespace/runners.tsx rename to frontend/src/routes/_context/_engine/ns.$namespace/runners.tsx index 9969231100..00cf792a0c 100644 --- a/frontend/src/routes/_layout/ns.$namespace/runners.tsx +++ b/frontend/src/routes/_context/_engine/ns.$namespace/runners.tsx @@ -17,14 +17,13 @@ import { Text, WithTooltip, } from "@/components"; -import { - type NamespaceNameId, - runnersQueryOptions, -} from "@/queries/manager-engine"; +import { useEngineCompatDataProvider } from "@/components/actors"; -export const Route = createFileRoute("/_layout/ns/$namespace/runners")({ - component: RouteComponent, -}); +export const Route = createFileRoute("/_context/_engine/ns/$namespace/runners")( + { + component: RouteComponent, + }, +); function RouteComponent() { const { namespace } = Route.useParams(); @@ -37,7 +36,9 @@ function RouteComponent() { isError, refetch, } = useInfiniteQuery( - runnersQueryOptions({ namespace: namespace as NamespaceNameId }), + useEngineCompatDataProvider().runnersQueryOptions({ + namespace: namespace, + }), ); return ( @@ -110,7 +111,7 @@ function RouteComponent() { ) : null} {runners?.map((runner) => ( - + ))} {!isLoading && hasNextPage ? ( diff --git a/frontend/src/routes/_context/_inspector.tsx b/frontend/src/routes/_context/_inspector.tsx new file mode 100644 index 0000000000..0d686f928d --- /dev/null +++ b/frontend/src/routes/_context/_inspector.tsx @@ -0,0 +1,176 @@ +import { faNodeJs, faReact, Icon } from "@rivet-gg/icons"; +import { createFileRoute, notFound, Outlet } from "@tanstack/react-router"; +import { + type ComponentProps, + type Ref, + useEffect, + useMemo, + useRef, + useState, +} from "react"; +import { match } from "ts-pattern"; +import { InspectorCredentialsProvider } from "@/app/credentials-context"; +import { createClient } from "@/app/data-providers/inspector-data-provider"; +import { + Button, + Card, + CardContent, + CardHeader, + CardTitle, + DocsSheet, + H1, +} from "@/components"; +import { ConnectionForm } from "@/components/connection-form"; +import { ModalRenderer } from "@/components/modal-renderer"; +import { docsLinks } from "@/content/data"; + +export const Route = createFileRoute("/_context/_inspector")({ + component: RouteComponent, + context: ({ context, params }) => { + return match(context) + .with({ __type: "inspector" }, (ctx) => ({ + dataProvider: { + ...ctx.dataProvider, + }, + })) + .otherwise(() => { + throw new Error("Invalid context type for this route"); + }); + }, + beforeLoad: () => { + return match(__APP_TYPE__) + .with("inspector", async () => {}) + .otherwise(() => { + throw notFound(); + }); + }, +}); + +function RouteComponent() { + const search = Route.useSearch(); + const [credentials, setCredentials] = useState(null); + + const formRef = useRef(null); + + // biome-ignore lint/correctness/useExhaustiveDependencies: we want to run this only once on mount + useEffect(() => { + if (search.t) { + formRef.current?.requestSubmit(); + } + }, []); + + const ctxValue = useMemo(() => { + return { credentials, setCredentials }; + }, [credentials]); + + if (credentials) { + return ( + + + + + ); + } + + return ( + { + try { + const client = createClient({ + url: values.username, + token: values.token, + }); + const resp = await client.ping.$get(); + if (!resp.ok) { + throw resp; + } + setCredentials({ + url: values.username, + token: values.token, + }); + } catch { + form.setError("token", { + message: + "Failed to connect. Please check your URL and token.", + }); + } + }} + /> + ); +} + +function Connect({ + onSubmit, + formRef, +}: { + formRef?: Ref; + onSubmit: ComponentProps["onSubmit"]; +}) { + const search = Route.useSearch(); + return ( +
+

Rivet Inspector

+ + + Getting Started + + +

Get started with one of our quick start guides:

+
+
+ + + + + + +
+
+
+
+ + + + Connect to Project + + +

+ Connect to your RivetKit project by entering the URL and + access token. +

+ + +
+
+
+ ); +} diff --git a/frontend/src/routes/_context/_inspector/inspect.tsx b/frontend/src/routes/_context/_inspector/inspect.tsx new file mode 100644 index 0000000000..95878b8770 --- /dev/null +++ b/frontend/src/routes/_context/_inspector/inspect.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from "@tanstack/react-router"; + +export const Route = createFileRoute("/_context/_inspector/inspect")({ + component: RouteComponent, +}); + +function RouteComponent() { + return
Hello "/_context/_inspector/inspect"!
; +} diff --git a/frontend/src/routes/_context/index.tsx b/frontend/src/routes/_context/index.tsx new file mode 100644 index 0000000000..0e351008f9 --- /dev/null +++ b/frontend/src/routes/_context/index.tsx @@ -0,0 +1,43 @@ +import { + createFileRoute, + notFound, + Outlet, + redirect, +} from "@tanstack/react-router"; +import { match } from "ts-pattern"; + +export const Route = createFileRoute("/_context/")({ + component: () => , + beforeLoad: (ctx) => { + return match(ctx.context) + .with({ __type: "cloud" }, () => { + const { organization } = ctx.context.clerk ?? {}; + if (!organization) { + throw notFound(); + } + throw redirect({ + to: "/orgs/$organization", + params: { organization: organization?.id }, + reloadDocument: true, + }); + }) + .with({ __type: "engine" }, async (ctx) => { + const result = await ctx.queryClient.fetchInfiniteQuery( + ctx.dataProvider.namespacesQueryOptions(), + ); + + const firstNamespace = result.pages[0]?.namespaces[0]; + if (!firstNamespace) { + throw notFound(); + } + + throw redirect({ + to: "/ns/$namespace", + params: { namespace: firstNamespace.name }, + reloadDocument: true, + }); + }) + .with({ __type: "inspector" }, async () => {}) + .exhaustive(); + }, +}); diff --git a/frontend/src/routes/_layout.tsx b/frontend/src/routes/_layout.tsx deleted file mode 100644 index e90613b4f0..0000000000 --- a/frontend/src/routes/_layout.tsx +++ /dev/null @@ -1,481 +0,0 @@ -import { - SignedIn, - SignedOut, - SignInButton, - useOrganization, -} from "@clerk/clerk-react"; -import { faNodeJs, faReact, Icon } from "@rivet-gg/icons"; -import { - createFileRoute, - Navigate, - Outlet, - useMatch, - useNavigate, - useParams, -} from "@tanstack/react-router"; -import { zodValidator } from "@tanstack/zod-adapter"; -import { C } from "node_modules/@clerk/clerk-react/dist/useAuth-BVxIa9U7.mjs"; -import { usePostHog } from "posthog-js/react"; -import { - type ComponentProps, - type ReactNode, - type Ref, - Suspense, - useEffect, - useMemo, - useRef, - useState, -} from "react"; -import { match } from "ts-pattern"; -import z from "zod"; -import { - type InspectorCredentials, - InspectorCredentialsProvider, -} from "@/app/credentials-context"; -import * as Layout from "@/app/layout"; -import { useDialog } from "@/app/use-dialog"; -import { - Button, - Card, - CardContent, - CardHeader, - CardTitle, - DocsSheet, - FEEDBACK_FORM_ID, - H1, - type ImperativePanelHandle, -} from "@/components"; -import { ManagerProvider } from "@/components/actors"; -import { RootLayoutContextProvider } from "@/components/actors/root-layout-context"; -import { ConnectionForm } from "@/components/connection-form"; -import { ModalRenderer } from "@/components/modal-renderer"; -import { docsLinks } from "@/content/data"; -import { createCloudManagerContext } from "@/queries/manager-cloud"; -import { - createEngineManagerContext, - type NamespaceNameId, -} from "@/queries/manager-engine"; -import { - createClient, - createInspectorManagerContext, -} from "@/queries/manager-inspector"; - -const searchSchema = z - .object({ - modal: z - .enum(["go-to-actor", "feedback", "create-ns"]) - .or(z.string()) - .optional(), - utm_source: z.string().optional(), - actorId: z.string().optional(), - tab: z.string().optional(), - n: z.array(z.string()).optional(), - u: z.string().optional(), - t: z.string().optional(), - }) - .and(z.record(z.string(), z.any())); - -export const Route = createFileRoute("/_layout")({ - validateSearch: zodValidator(searchSchema), - component: match(__APP_TYPE__) - .with("cloud", () => CloudRouteComponent) - .otherwise(() => RouteComponent), -}); - -function RouteComponent() { - const match = useMatch({ - from: "/_layout/ns/$namespace", - shouldThrow: false, - }); - - const sidebarRef = useRef(null); - const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); - - const content = ( - <> - - - - - - - { - setIsSidebarCollapsed(true); - }} - onExpand={() => setIsSidebarCollapsed(false)} - /> - - - - - - - - - - ); - - if (match?.params.namespace) { - return ( - - ); - } - - if (__APP_TYPE__ === "inspector") { - return ; - } - - return content; -} - -function ContextContent({ - namespace, - content, -}: { - namespace: string; - content: React.ReactNode; -}) { - const managerContext = useMemo(() => { - return createEngineManagerContext({ namespace }); - }, [namespace]); - - return {content}; -} - -function Modals() { - const search = Route.useSearch(); - const navigate = Route.useNavigate(); - - const posthog = usePostHog(); - - const FeedbackDialog = useDialog.Feedback.Dialog; - const CreateNamespaceDialog = useDialog.CreateNamespace.Dialog; - - const GoToActorDialog = useDialog.GoToActor.Dialog; - const CreateActorDialog = useDialog.CreateActor.Dialog; - - const match = useMatch({ - from: "/_layout/ns/$namespace", - shouldThrow: false, - }); - - const { modal, utm_source } = search; - - const handleOnOpenChange = (value: boolean) => { - if (!value) { - navigate({ - to: ".", - search: (old) => ({ ...old, modal: undefined }), - }); - } else { - posthog.capture("survey shown", { $survey_id: FEEDBACK_FORM_ID }); - } - }; - - return ( - <> - - {__APP_TYPE__ === "engine" ? ( - { - if (!value) { - navigate({ - to: ".", - search: (old) => ({ - ...old, - modal: undefined, - }), - }); - } - }, - }} - /> - ) : null} - { - navigate({ - to: ".", - search: (old) => ({ - ...old, - actorId, - modal: undefined, - }), - }); - }} - dialogProps={{ - open: modal === "go-to-actor", - onOpenChange: (value) => { - if (!value) { - navigate({ - search: (old) => ({ - ...old, - modal: undefined, - }), - }); - } - }, - }} - /> - { - if (!value) { - navigate({ - search: (old) => ({ - ...old, - modal: undefined, - }), - }); - } - }, - }} - /> - - ); -} - -function InspectorContent({ content }: { content: ReactNode }) { - const search = Route.useSearch(); - const navigate = Route.useNavigate(); - const [credentials, setCredentials] = useState(null); - - const formRef = useRef(null); - - useEffect(() => { - if (search.t) { - formRef.current?.requestSubmit(); - } - }, []); - - const ctxValue = useMemo(() => { - return { credentials, setCredentials }; - }, [credentials]); - - if (credentials) { - return ( - - - - ); - } - - return ( - { - try { - const client = createClient({ - url: values.username, - token: values.token, - }); - const resp = await client.ping.$get(); - if (!resp.ok) { - throw resp; - } - navigate({ - to: ".", - search: (old) => ({ - ...old, - u: values.username, - t: values.token, - }), - }); - setCredentials({ - url: values.username, - token: values.token, - }); - } catch { - form.setError("token", { - message: - "Failed to connect. Please check your URL and token.", - }); - } - }} - /> - ); -} - -function InspectorContextContent({ - content, - credentials, -}: { - credentials: InspectorCredentials; - content: ReactNode; -}) { - const managerContext = useMemo(() => { - return createInspectorManagerContext(credentials); - }, [credentials]); - - return {content}; -} - -function Connect({ - onSubmit, - formRef, -}: { - formRef?: Ref; - onSubmit: ComponentProps["onSubmit"]; -}) { - const search = Route.useSearch(); - return ( -
-

Rivet Inspector

- - - Getting Started - - -

Get started with one of our quick start guides:

-
-
- - - - - - -
-
-
-
- - - - Connect to Project - - -

- Connect to your RivetKit project by entering the URL and - access token. -

- - -
-
-
- ); -} - -function CloudRouteComponent() { - return ( - <> - - - - - - - - ); -} - -function CloudContextContent() { - const { namespace, project } = useParams({ strict: false }); - const managerContext = useMemo(() => { - return createCloudManagerContext({ - project: project || "", - namespace: namespace || "", - }); - }, [namespace, project]); - - return ( - - - - - ); -} - -function CloudModals() { - const navigate = useNavigate(); - const search = Route.useSearch(); - - const CreateProjectDialog = useDialog.CreateProject.Dialog; - const CreateNamespaceDialog = useDialog.CreateNamespace.Dialog; - - return ( - <> - { - if (!value) { - navigate({ - to: ".", - search: (old) => ({ - ...old, - modal: undefined, - }), - }); - } - }, - }} - /> - { - if (!value) { - navigate({ - to: ".", - search: (old) => ({ - ...old, - modal: undefined, - }), - }); - } - }, - }} - /> - - ); -} diff --git a/frontend/src/routes/_layout/index.tsx b/frontend/src/routes/_layout/index.tsx deleted file mode 100644 index 0447611c1c..0000000000 --- a/frontend/src/routes/_layout/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { useOrganization } from "@clerk/clerk-react"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { createFileRoute, Navigate } from "@tanstack/react-router"; -import { match } from "ts-pattern"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components"; -import { useManager } from "@/components/actors"; -import { RouteComponent as NamespaceRouteComponent } from "./ns.$namespace/index"; - -export const Route = createFileRoute("/_layout/")({ - component: match(__APP_TYPE__) - .with("engine", () => RouteComponent) - .with("inspector", () => NamespaceRouteComponent) - .with("cloud", () => CloudRouteComponent) - .exhaustive(), -}); - -function RouteComponent() { - const { data: namespaces } = useInfiniteQuery( - useManager().namespacesQueryOptions(), - ); - - if (namespaces && namespaces?.length > 0) { - return ( - - ); - } - - return ( -
- - - No namespaces found - - -

- Please consult the documentation for more information. -

-
-
-
- ); -} - -function CloudRouteComponent() { - const { isLoaded, organization } = useOrganization(); - - if (!isLoaded || !organization) { - return null; - } - - return ( - - ); -} diff --git a/frontend/src/routes/_layout/namespaces.tsx b/frontend/src/routes/_layout/namespaces.tsx deleted file mode 100644 index e7c47109ea..0000000000 --- a/frontend/src/routes/_layout/namespaces.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { createFileRoute, notFound } from "@tanstack/react-router"; -import { match } from "ts-pattern"; -import { NamespacesPage } from "@/app/namespaces-page"; - -export const Route = createFileRoute("/_layout/namespaces")({ - component: match(__APP_TYPE__) - .with("engine", () => RouteComponent) - .otherwise(() => () => { - throw notFound(); - }), -}); - -function RouteComponent() { - return ; -} diff --git a/frontend/src/routes/_layout/ns.$namespace.tsx b/frontend/src/routes/_layout/ns.$namespace.tsx deleted file mode 100644 index 75bc49cefa..0000000000 --- a/frontend/src/routes/_layout/ns.$namespace.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { createFileRoute, notFound, Outlet } from "@tanstack/react-router"; -import { zodValidator } from "@tanstack/zod-adapter"; -import { match } from "ts-pattern"; -import z from "zod"; - -export const Route = createFileRoute("/_layout/ns/$namespace")({ - component: match(__APP_TYPE__) - .with("engine", () => RouteComponent) - .otherwise(() => () => { - throw notFound(); - }), - validateSearch: zodValidator( - z.object({ - n: z.array(z.string()).optional(), - }), - ), -}); - -function RouteComponent() { - return ; -} diff --git a/frontend/src/routes/_layout/orgs.$organization/index.tsx b/frontend/src/routes/_layout/orgs.$organization/index.tsx deleted file mode 100644 index 2a1f6889ed..0000000000 --- a/frontend/src/routes/_layout/orgs.$organization/index.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import type { Rivet } from "@rivet-gg/cloud"; -import { faChevronRight, faRefresh, Icon } from "@rivet-gg/icons"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { createFileRoute, Link, notFound } from "@tanstack/react-router"; -import { match } from "ts-pattern"; -import { Button, H1, Skeleton, Text, WithTooltip } from "@/components"; -import { VisibilitySensor } from "@/components/visibility-sensor"; -import { projectsQueryOptions } from "@/queries/manager-cloud"; - -export const Route = createFileRoute("/_layout/orgs/$organization/")({ - component: match(__APP_TYPE__) - .with("cloud", () => RouteComponent) - .otherwise(() => () => { - throw notFound(); - }), -}); - -function RouteComponent() { - const { organization } = Route.useParams(); - const { - data: projects, - isRefetching, - isSuccess, - hasNextPage, - fetchNextPage, - isFetchingNextPage, - isLoading, - refetch, - } = useInfiniteQuery(projectsQueryOptions({ organization })); - - return ( -
-
-

Projects

-
- refetch()} - > - - - } - /> -
-
- -
- -
-
-
- {isSuccess - ? projects.map((project) => ( - - )) - : null} - - ({ - ...old, - modal: "create-project", - })} - > -
- - - Create New - - - -
- - - {hasNextPage ? ( - - ) : null} - - {isLoading || isFetchingNextPage ? ( - <> - - - - - - - - ) : null} -
-
-
-
- ); -} - -function TileSkeleton() { - return ( -
- - - -
- ); -} - -function Row(project: Rivet.Project) { - const { organization } = Route.useParams(); - return ( - - - {project.name} - - - View - - - - ); -} diff --git a/frontend/src/routes/_layout/orgs.$organization/projects.$project/index.tsx b/frontend/src/routes/_layout/orgs.$organization/projects.$project/index.tsx deleted file mode 100644 index 243d59e4f2..0000000000 --- a/frontend/src/routes/_layout/orgs.$organization/projects.$project/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { createFileRoute, notFound } from "@tanstack/react-router"; -import { match } from "ts-pattern"; -import { NamespacesPage } from "@/app/namespaces-page"; - -export const Route = createFileRoute( - "/_layout/orgs/$organization/projects/$project/", -)({ - component: match(__APP_TYPE__) - .with("cloud", () => RouteComponent) - .otherwise(() => () => { - throw notFound(); - }), -}); - -function RouteComponent() { - return ; -} diff --git a/frontend/vendor/rivet-cloud.tgz b/frontend/vendor/rivet-cloud.tgz index 5047f93a47..d5e0c4d341 100644 --- a/frontend/vendor/rivet-cloud.tgz +++ b/frontend/vendor/rivet-cloud.tgz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb1fcfffe70989a9fe9a23bd4cf60eb75eca951f468e0830bf2b5b6cdfc80ed6 -size 184211 +oid sha256:3dd531bb44e5b3708ee27cdbe4584e8d754d035ca65003d171edddbf1bd75711 +size 188664 diff --git a/frontend/vite.cloud.config.ts b/frontend/vite.cloud.config.ts index 6def6f2ef7..f8c939d497 100644 --- a/frontend/vite.cloud.config.ts +++ b/frontend/vite.cloud.config.ts @@ -15,7 +15,6 @@ export default defineConfig((config) => { }, server: { port: 43710, - proxy: {}, }, preview: { port: 43710, diff --git a/frontend/vite.engine.config.ts b/frontend/vite.engine.config.ts index 39a62e400f..9e9b7f7c5e 100644 --- a/frontend/vite.engine.config.ts +++ b/frontend/vite.engine.config.ts @@ -64,7 +64,7 @@ export default defineConfig(({ mode }) => { }, }, optimizeDeps: { - include: ["@fortawesome/*", "@rivet-gg/icons"], + include: ["@fortawesome/*", "@rivet-gg/icons", "@rivet-gg/cloud"], }, worker: { format: "es", diff --git a/package.json b/package.json index 25bdb0d145..7994a97a65 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,11 @@ }, "devDependencies": { "@bare-ts/tools": "0.15.0", - "@biomejs/biome": "^2.1.1", - "lefthook": "^1.6.12", + "@biomejs/biome": "^2.2.3", + "lefthook": "^1.12.4", "tsup": "^8.5.0", - "turbo": "^2.0.1", - "typescript": "^5.0.0" + "turbo": "^2.5.6", + "typescript": "^5.9.2" }, "resolutions": { "rivetkit": "https://pkg.pr.new/rivet-dev/rivetkit@1296" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df72b918f0..56f31e537c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,20 +15,20 @@ importers: specifier: 0.15.0 version: 0.15.0(@bare-ts/lib@0.4.0) '@biomejs/biome': - specifier: ^2.1.1 - version: 2.1.4 + specifier: ^2.2.3 + version: 2.2.3 lefthook: - specifier: ^1.6.12 - version: 1.12.3 + specifier: ^1.12.4 + version: 1.12.4 tsup: specifier: ^8.5.0 - version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@24.3.0))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1) + version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@24.3.1))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) turbo: - specifier: ^2.0.1 - version: 2.5.5 + specifier: ^2.5.6 + version: 2.5.6 typescript: - specifier: ^5.0.0 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 docker/template: dependencies: @@ -39,35 +39,38 @@ importers: specifier: ^4.1.0 version: 4.1.0 tsx: - specifier: ^4.0.0 - version: 4.20.3 + specifier: ^4.20.5 + version: 4.20.5 devDependencies: '@types/node': - specifier: ^20.19.9 - version: 20.19.9 + specifier: ^20.19.13 + version: 20.19.13 typescript: - specifier: ^5.0.0 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 frontend: dependencies: '@clerk/clerk-js': - specifier: ^5.91.2 - version: 5.95.0(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.8.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76) + specifier: ^5.92.1 + version: 5.95.0(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76) '@clerk/clerk-react': - specifier: ^5.46.1 + specifier: ^5.46.2 version: 5.48.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@clerk/themes': - specifier: ^2.4.17 + specifier: ^2.4.18 version: 2.4.21 + '@codemirror/autocomplete': + specifier: ^6.18.7 + version: 6.18.7 '@codemirror/commands': specifier: ^6.8.1 version: 6.8.1 '@codemirror/lang-javascript': - specifier: ^6.2.2 + specifier: ^6.2.4 version: 6.2.4 '@codemirror/lang-json': - specifier: ^6.0.1 + specifier: ^6.0.2 version: 6.0.2 '@codemirror/lint': specifier: ^6.8.5 @@ -79,110 +82,110 @@ importers: specifier: ^6.5.2 version: 6.5.2 '@codemirror/view': - specifier: ^6.28.4 - version: 6.38.1 + specifier: ^6.38.2 + version: 6.38.2 '@date-fns/utc': specifier: ^1.2.0 version: 1.2.0 '@fortawesome/fontawesome-svg-core': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/free-brands-svg-icons': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/free-solid-svg-icons': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/react-fontawesome': - specifier: ^0.2.2 - version: 0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) + specifier: ^0.2.6 + version: 0.2.6(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) '@hookform/resolvers': - specifier: ^3.3.4 + specifier: ^3.10.0 version: 3.10.0(react-hook-form@7.62.0(react@19.1.1)) '@microsoft/fetch-event-source': specifier: ^2.0.1 version: 2.0.1 '@radix-ui/react-accordion': - specifier: ^1.1.2 - version: 1.2.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.12 + version: 1.2.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-avatar': - specifier: ^1.0.4 - version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.10 + version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-checkbox': - specifier: ^1.1.5 - version: 1.3.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.3.3 + version: 1.3.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-dialog': - specifier: ^1.1.7 - version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-dropdown-menu': - specifier: ^2.1.7 - version: 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.1.16 + version: 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-label': - specifier: ^2.1.3 - version: 2.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.1.7 + version: 2.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-popover': - specifier: ^1.1.7 - version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-progress': - specifier: ^1.0.3 - version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.7 + version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-radio-group': - specifier: ^1.0.3 - version: 1.3.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.3.8 + version: 1.3.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-scroll-area': - specifier: ^1.0.5 - version: 1.2.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.10 + version: 1.2.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-select': - specifier: ^2.0.0 - version: 2.2.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.2.6 + version: 2.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-separator': - specifier: ^1.1.3 - version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.7 + version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slider': - specifier: ^1.2.4 - version: 1.3.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.3.6 + version: 1.3.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slot': specifier: ^1.2.3 - version: 1.2.3(@types/react@18.3.23)(react@19.1.1) + version: 1.2.3(@types/react@18.3.24)(react@19.1.1) '@radix-ui/react-switch': - specifier: ^1.0.3 - version: 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.6 + version: 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-tabs': - specifier: ^1.1.4 - version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.13 + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-toggle': - specifier: ^1.0.3 - version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.10 + version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-toggle-group': - specifier: ^1.1.1 - version: 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.11 + version: 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-tooltip': - specifier: ^1.1.1 - version: 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.8 + version: 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-visually-hidden': - specifier: ^1.0.3 - version: 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.3 + version: 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@rivet-gg/cloud': - specifier: file:./vendor/rivet-cloud.tgz + specifier: file:vendor/rivet-cloud.tgz version: file:frontend/vendor/rivet-cloud.tgz '@rivet-gg/icons': - specifier: file:./vendor/rivet-icons.tgz - version: file:frontend/vendor/rivet-icons.tgz(@fortawesome/fontawesome-svg-core@6.7.2)(@fortawesome/free-brands-svg-icons@6.7.2)(@fortawesome/free-solid-svg-icons@6.7.2)(@fortawesome/react-fontawesome@0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1))(@types/node@20.19.9)(babel-plugin-macros@3.1.0)(less@4.4.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: workspace:* + version: link:packages/icons '@rivetkit/engine-api-full': specifier: workspace:* version: link:../sdks/typescript/api-full '@sentry/react': - specifier: ^8.26.0 + specifier: ^8.55.0 version: 8.55.0(react@19.1.1) '@sentry/vite-plugin': - specifier: ^2.22.2 + specifier: ^2.23.1 version: 2.23.1 '@shikijs/langs': - specifier: ^3.2.1 - version: 3.9.2 + specifier: ^3.12.2 + version: 3.12.2 '@shikijs/transformers': - specifier: ^3.8.1 - version: 3.9.2 + specifier: ^3.12.2 + version: 3.12.2 '@tailwindcss/container-queries': specifier: ^0.1.1 version: 0.1.1(tailwindcss@3.4.17) @@ -190,76 +193,82 @@ importers: specifier: ^0.5.16 version: 0.5.16(tailwindcss@3.4.17) '@tanstack/query-core': - specifier: ^5.81.5 - version: 5.85.3 + specifier: ^5.87.1 + version: 5.87.1 '@tanstack/react-query': - specifier: ^5.81.5 - version: 5.85.3(react@19.1.1) + specifier: ^5.87.1 + version: 5.87.1(react@19.1.1) '@tanstack/react-query-devtools': - specifier: ^5.81.5 - version: 5.85.3(@tanstack/react-query@5.85.3(react@19.1.1))(react@19.1.1) + specifier: ^5.87.3 + version: 5.87.3(@tanstack/react-query@5.87.1(react@19.1.1))(react@19.1.1) '@tanstack/react-router': - specifier: ^1.114.25 - version: 1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.131.36 + version: 1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/react-router-devtools': - specifier: ^1.131.7 - version: 1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.14)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) + specifier: ^1.131.36 + version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) '@tanstack/react-store': - specifier: ^0.7.3 - version: 0.7.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^0.7.5 + version: 0.7.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/react-table': - specifier: ^8.20.6 + specifier: ^8.21.3 version: 8.21.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/react-virtual': - specifier: ^3.10.8 + specifier: ^3.13.12 version: 3.13.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/router-devtools': - specifier: ^1.114.25 - version: 1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.14)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) + specifier: ^1.131.36 + version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) '@tanstack/router-plugin': - specifier: ^1.114.25 - version: 1.131.15(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1))(webpack@5.101.3(esbuild@0.25.8)) + specifier: ^1.131.36 + version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0))(webpack@5.101.3(esbuild@0.25.9)) '@tanstack/store': - specifier: ^0.7.2 - version: 0.7.2 + specifier: ^0.7.5 + version: 0.7.5 '@tanstack/zod-adapter': - specifier: ^1.114.25 - version: 1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@3.25.76) + specifier: ^1.131.36 + version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@3.25.76) '@types/bcryptjs': specifier: ^2.4.6 version: 2.4.6 + '@types/escape-html': + specifier: ^1.0.4 + version: 1.0.4 '@types/file-saver': - specifier: ^2 + specifier: ^2.0.7 version: 2.0.7 + '@types/lodash': + specifier: ^4.17.20 + version: 4.17.20 '@types/mdx': specifier: ^2.0.13 version: 2.0.13 '@types/node': - specifier: ^20.11.30 - version: 20.19.9 + specifier: ^20.19.13 + version: 20.19.13 '@types/react': - specifier: ^18.2.66 - version: 18.3.23 + specifier: ^18.3.24 + version: 18.3.24 '@types/react-dom': - specifier: ^18.2.22 - version: 18.3.7(@types/react@18.3.23) + specifier: ^18.3.7 + version: 18.3.7(@types/react@18.3.24) '@uiw/codemirror-extensions-basic-setup': - specifier: ^4.23.0 - version: 4.25.1(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1) + specifier: ^4.25.1 + version: 4.25.1(@codemirror/autocomplete@6.18.7)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2) '@uiw/codemirror-theme-github': - specifier: ^4.23.0 - version: 4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1) + specifier: ^4.25.1 + version: 4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2) '@uiw/react-codemirror': - specifier: ^4.23.0 - version: 4.25.1(@babel/runtime@7.28.3)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.1)(codemirror@6.0.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^4.25.1 + version: 4.25.1(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.18.7)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.2)(codemirror@6.0.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@vitejs/plugin-react': - specifier: ^4.2.1 - version: 4.7.0(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)) + specifier: ^4.7.0 + version: 4.7.0(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0)) actor-core: - specifier: ^0.6.2 + specifier: ^0.6.3 version: 0.6.3(ws@8.18.3) autoprefixer: - specifier: ^10.4.19 + specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) bcryptjs: specifier: ^2.4.3 @@ -268,17 +277,20 @@ importers: specifier: ^0.7.1 version: 0.7.1 clsx: - specifier: ^2.1.0 + specifier: ^2.1.1 version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) date-fns: specifier: ^4.1.0 version: 4.1.0 esast-util-from-js: specifier: ^2.0.1 version: 2.0.1 + escape-html: + specifier: ^1.0.3 + version: 1.0.3 estree-util-to-js: specifier: ^2.0.0 version: 2.0.0 @@ -291,56 +303,59 @@ importers: file-saver: specifier: ^2.0.5 version: 2.0.5 + filesize: + specifier: ^11.0.2 + version: 11.0.2 framer-motion: - specifier: ^11.2.11 + specifier: ^11.18.2 version: 11.18.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) input-otp: - specifier: ^1.2.3 + specifier: ^1.4.2 version: 1.4.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) lodash: specifier: ^4.17.21 version: 4.17.21 postcss: - specifier: ^8.4.38 + specifier: ^8.5.6 version: 8.5.6 posthog-js: - specifier: ^1.144.2 - version: 1.260.1 + specifier: ^1.262.0 + version: 1.262.0 react: - specifier: ^19.0.0 + specifier: ^19.1.1 version: 19.1.1 react-day-picker: specifier: 8.10.1 version: 8.10.1(date-fns@4.1.0)(react@19.1.1) react-dom: - specifier: ^19.0.0 + specifier: ^19.1.1 version: 19.1.1(react@19.1.1) react-hook-form: - specifier: ^7.51.1 + specifier: ^7.62.0 version: 7.62.0(react@19.1.1) react-inspector: specifier: ^6.0.2 version: 6.0.2(react@19.1.1) react-resizable-panels: - specifier: ^2.0.19 + specifier: ^2.1.9 version: 2.1.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1) recharts: - specifier: ^2.12.7 + specifier: ^2.15.4 version: 2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) rivetkit: specifier: https://pkg.pr.new/rivet-dev/rivetkit@1296 - version: https://pkg.pr.new/rivet-dev/rivetkit@1296(@hono/node-server@1.18.2(hono@4.8.12))(@standard-schema/spec@1.0.0)(ws@8.18.3) + version: https://pkg.pr.new/rivet-dev/rivetkit@1296(@hono/node-server@1.19.1(hono@4.9.6))(@standard-schema/spec@1.0.0)(ws@8.18.3) shiki: - specifier: ^3.8.1 - version: 3.9.2 + specifier: ^3.12.2 + version: 3.12.2 sonner: - specifier: ^1.4.41 + specifier: ^1.7.4 version: 1.7.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwind-merge: - specifier: ^2.2.2 + specifier: ^2.6.0 version: 2.6.0 tailwindcss: - specifier: ^3.4.1 + specifier: ^3.4.17 version: 3.4.17 tailwindcss-animate: specifier: ^1.0.7 @@ -349,152 +364,152 @@ importers: specifier: ^5.8.0 version: 5.8.0 typescript: - specifier: ^5.5.4 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 typescript-plugin-css-modules: specifier: ^5.2.0 - version: 5.2.0(typescript@5.8.2) + version: 5.2.0(typescript@5.9.2) usehooks-ts: - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1(react@19.1.1) vite: - specifier: ^5.2.0 - version: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: ^5.4.20 + version: 5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) vite-plugin-favicons-inject: specifier: ^2.2.0 version: 2.2.0 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.2)(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)) + version: 5.1.4(typescript@5.9.2)(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0)) zod: - specifier: ^3.24 + specifier: ^3.25.76 version: 3.25.76 frontend/packages/components: dependencies: '@codemirror/lang-javascript': - specifier: ^6.2.2 + specifier: ^6.2.4 version: 6.2.4 '@codemirror/lang-json': - specifier: ^6.0.1 + specifier: ^6.0.2 version: 6.0.2 '@codemirror/view': - specifier: ^6.28.4 - version: 6.38.1 + specifier: ^6.38.2 + version: 6.38.2 '@fortawesome/fontawesome-svg-core': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/free-brands-svg-icons': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/free-solid-svg-icons': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/react-fontawesome': - specifier: ^0.2.2 - version: 0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) + specifier: ^0.2.6 + version: 0.2.6(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) '@hookform/resolvers': - specifier: ^3.9.0 + specifier: ^3.10.0 version: 3.10.0(react-hook-form@7.62.0(react@19.1.1)) '@radix-ui/react-accordion': - specifier: ^1.1.2 - version: 1.2.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.12 + version: 1.2.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-avatar': - specifier: ^1.0.4 - version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.10 + version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-checkbox': - specifier: ^1.1.5 - version: 1.3.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.3.3 + version: 1.3.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-context-menu': - specifier: ^2.2.15 - version: 2.2.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.2.16 + version: 2.2.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-dialog': - specifier: ^1.1.7 - version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-dropdown-menu': - specifier: ^2.1.7 - version: 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.1.16 + version: 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-label': - specifier: ^2.1.3 - version: 2.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.1.7 + version: 2.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-popover': - specifier: ^1.1.7 - version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-progress': - specifier: ^1.0.3 - version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.7 + version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-radio-group': - specifier: ^1.0.3 - version: 1.3.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.3.8 + version: 1.3.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-scroll-area': - specifier: ^1.0.5 - version: 1.2.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.10 + version: 1.2.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-select': - specifier: ^2.0.0 - version: 2.2.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.2.6 + version: 2.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-separator': - specifier: ^1.1.3 - version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.7 + version: 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slider': - specifier: ^1.2.4 - version: 1.3.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.3.6 + version: 1.3.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slot': - specifier: ^1.2.0 - version: 1.2.3(@types/react@18.3.23)(react@19.1.1) + specifier: ^1.2.3 + version: 1.2.3(@types/react@18.3.24)(react@19.1.1) '@radix-ui/react-switch': - specifier: ^1.0.3 - version: 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.6 + version: 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-tabs': - specifier: ^1.1.4 - version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.13 + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-toggle': - specifier: ^1.0.3 - version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.10 + version: 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-toggle-group': - specifier: ^1.1.1 - version: 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.1.11 + version: 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-tooltip': - specifier: ^1.1.1 - version: 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.8 + version: 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-visually-hidden': - specifier: ^1.0.3 - version: 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.3 + version: 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@rivet-gg/icons': specifier: workspace:^ version: link:../icons '@sentry/react': - specifier: ^8.26.0 + specifier: ^8.55.0 version: 8.55.0(react@19.1.1) '@shikijs/langs': - specifier: ^3.2.1 - version: 3.9.2 + specifier: ^3.12.2 + version: 3.12.2 '@tailwindcss/container-queries': specifier: ^0.1.1 version: 0.1.1(tailwindcss@3.4.17) '@tanstack/react-table': - specifier: ^8.21.2 + specifier: ^8.21.3 version: 8.21.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/react-virtual': - specifier: ^3.10.8 + specifier: ^3.13.12 version: 3.13.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@uiw/codemirror-extensions-basic-setup': - specifier: ^4.23.0 - version: 4.25.1(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1) + specifier: ^4.25.1 + version: 4.25.1(@codemirror/autocomplete@6.18.7)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2) '@uiw/codemirror-theme-github': - specifier: ^4.23.0 - version: 4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1) + specifier: ^4.25.1 + version: 4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2) '@uiw/react-codemirror': - specifier: ^4.23.0 - version: 4.25.1(@babel/runtime@7.28.3)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.1)(codemirror@6.0.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^4.25.1 + version: 4.25.1(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.18.7)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.2)(codemirror@6.0.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) class-variance-authority: - specifier: ^0.7.0 + specifier: ^0.7.1 version: 0.7.1 clsx: - specifier: ^2.1.0 + specifier: ^2.1.1 version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -508,84 +523,84 @@ importers: specifier: ^3.1.3 version: 3.1.3 framer-motion: - specifier: ^11.2.11 + specifier: ^11.18.2 version: 11.18.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) input-otp: - specifier: ^1.2.3 + specifier: ^1.4.2 version: 1.4.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) jotai: - specifier: ^2.12.2 - version: 2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@18.3.23)(react@19.1.1) + specifier: ^2.14.0 + version: 2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@18.3.24)(react@19.1.1) jotai-effect: - specifier: ^2.0.2 - version: 2.0.5(jotai@2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@18.3.23)(react@19.1.1)) + specifier: ^2.1.0 + version: 2.1.0(jotai@2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@18.3.24)(react@19.1.1)) lucide-react: specifier: ^0.439.0 version: 0.439.0(react@19.1.1) react: - specifier: ^19 + specifier: ^19.1.1 version: 19.1.1 react-day-picker: specifier: 8.10.1 version: 8.10.1(date-fns@4.1.0)(react@19.1.1) react-dom: - specifier: ^19 + specifier: ^19.1.1 version: 19.1.1(react@19.1.1) react-hook-form: - specifier: ^7.51.1 + specifier: ^7.62.0 version: 7.62.0(react@19.1.1) react-resizable-panels: - specifier: ^2.0.19 + specifier: ^2.1.9 version: 2.1.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1) recharts: - specifier: ^2.12.7 + specifier: ^2.15.4 version: 2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) sonner: - specifier: ^1.4.41 + specifier: ^1.7.4 version: 1.7.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwind-merge: - specifier: ^2.2.2 + specifier: ^2.6.0 version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.17) usehooks-ts: - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1(react@19.1.1) zod: - specifier: ^3.24 + specifier: ^3.25.76 version: 3.25.76 devDependencies: '@types/mime': specifier: ^4.0.0 version: 4.0.0 '@types/node': - specifier: ^20.11.30 - version: 20.19.9 + specifier: ^20.19.13 + version: 20.19.13 '@types/react': - specifier: ^18.2.66 - version: 18.3.23 + specifier: ^18.3.24 + version: 18.3.24 '@types/react-dom': - specifier: ^18.2.22 - version: 18.3.7(@types/react@18.3.23) + specifier: ^18.3.7 + version: 18.3.7(@types/react@18.3.24) '@vitejs/plugin-react': - specifier: ^4.2.1 - version: 4.7.0(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)) + specifier: ^4.7.0 + version: 4.7.0(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0)) autoprefixer: - specifier: ^10.4.19 + specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) postcss: - specifier: ^8.4.38 + specifier: ^8.5.6 version: 8.5.6 tailwindcss: - specifier: ^3.4.1 + specifier: ^3.4.17 version: 3.4.17 vite: - specifier: ^5.2.0 - version: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: ^5.4.20 + version: 5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) vite-plugin-dts: - specifier: ^3.8.1 - version: 3.9.1(@types/node@20.19.9)(rollup@4.46.2)(typescript@5.8.2)(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)) + specifier: ^3.9.1 + version: 3.9.1(@types/node@20.19.13)(rollup@4.50.1)(typescript@5.9.2)(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0)) frontend/packages/icons: dependencies: @@ -600,12 +615,12 @@ importers: version: 6.7.2 '@fortawesome/react-fontawesome': specifier: ^0.2.2 - version: 0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) + version: 0.2.6(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) dedent: - specifier: ^1.5.3 - version: 1.6.0(babel-plugin-macros@3.1.0) + specifier: ^1.7.0 + version: 1.7.0(babel-plugin-macros@3.1.0) local-pkg: - specifier: ^0.5.0 + specifier: ^0.5.1 version: 0.5.1 react: specifier: ^19 @@ -614,12 +629,12 @@ importers: specifier: ^19 version: 19.1.1(react@19.1.1) vite: - specifier: ^5.2.0 - version: 5.4.19(@types/node@24.3.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: ^5.4.20 + version: 5.4.20(@types/node@24.3.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) devDependencies: esbuild: - specifier: ^0.25.0 - version: 0.25.8 + specifier: ^0.25.9 + version: 0.25.9 scripts/release: dependencies: @@ -635,7 +650,7 @@ importers: version: 1.2.5 '@types/node': specifier: ^24.3.0 - version: 24.3.0 + version: 24.3.1 minimist: specifier: ^1.2.8 version: 1.2.8 @@ -643,28 +658,25 @@ importers: scripts/tests: devDependencies: '@types/node': - specifier: ^24.3.0 - version: 24.3.0 - ws: - specifier: 8.18.3 - version: 8.18.3 + specifier: ^24.3.1 + version: 24.3.1 sdks/typescript/api-full: dependencies: form-data: - specifier: ^4.0.0 + specifier: ^4.0.4 version: 4.0.4 js-base64: - specifier: ^3.7.5 - version: 3.7.7 + specifier: ^3.7.8 + version: 3.7.8 node-fetch: - specifier: '2' + specifier: ^2.7.0 version: 2.7.0 qs: - specifier: ^6.11.2 + specifier: ^6.14.0 version: 6.14.0 readable-stream: - specifier: ^4.5.2 + specifier: ^4.7.0 version: 4.7.0 url-join: specifier: ^5.0.0 @@ -680,13 +692,13 @@ importers: specifier: 6.9.8 version: 6.9.8 '@types/readable-stream': - specifier: ^4.0.18 + specifier: ^4.0.21 version: 4.0.21 '@types/url-join': specifier: 4.0.1 version: 4.0.1 esbuild: - specifier: ^0.19.11 + specifier: ^0.19.12 version: 0.19.12 prettier: specifier: 2.7.1 @@ -711,26 +723,26 @@ importers: version: 8.18.3 devDependencies: '@types/node': - specifier: ^22.13.9 - version: 22.17.0 + specifier: ^22.18.1 + version: 22.18.1 '@types/ws': specifier: ^8.18.1 version: 8.18.1 tinybench: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^5.0.1 + version: 5.0.1 tsup: specifier: ^8.5.0 - version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@22.17.0))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1) + version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@22.18.1))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) tsx: - specifier: ^4.19.3 - version: 4.20.3 + specifier: ^4.20.5 + version: 4.20.5 typescript: - specifier: ^5.3.3 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 vitest: - specifier: ^1.6.0 - version: 1.6.1(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: ^1.6.1 + version: 1.6.1(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) sdks/typescript/runner-protocol: dependencies: @@ -739,20 +751,20 @@ importers: version: 0.4.0 devDependencies: '@types/node': - specifier: ^20.0.0 - version: 20.19.9 + specifier: ^20.19.13 + version: 20.19.13 tsup: - specifier: ^8.4.0 - version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@20.19.9))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1) + specifier: ^8.5.0 + version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@20.19.13))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) typescript: - specifier: ^5.0.0 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 sdks/typescript/test-runner: dependencies: '@hono/node-server': - specifier: ^1.18.2 - version: 1.18.2(hono@4.8.12) + specifier: ^1.19.1 + version: 1.19.1(hono@4.9.6) '@rivetkit/engine-runner': specifier: workspace:* version: link:../runner @@ -761,7 +773,7 @@ importers: version: link:../runner-protocol hono: specifier: ^4.0.0 - version: 4.8.12 + version: 4.9.6 pino: specifier: ^9.9.5 version: 9.9.5 @@ -770,67 +782,67 @@ importers: version: 8.18.3 devDependencies: '@types/node': - specifier: ^22.13.9 - version: 22.17.0 + specifier: ^22.18.1 + version: 22.18.1 '@types/ws': specifier: ^8.18.1 version: 8.18.1 tinybench: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^5.0.1 + version: 5.0.1 tsup: specifier: ^8.5.0 - version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@22.17.0))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1) + version: 8.5.0(@microsoft/api-extractor@7.43.0(@types/node@22.18.1))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) tsx: - specifier: ^4.19.3 - version: 4.20.3 + specifier: ^4.20.5 + version: 4.20.5 typescript: - specifier: ^5.3.3 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 vitest: - specifier: ^1.6.0 - version: 1.6.1(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: ^1.6.1 + version: 1.6.1(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) site: dependencies: '@fortawesome/fontawesome-svg-core': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/free-brands-svg-icons': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/free-solid-svg-icons': - specifier: ^6.5.2 + specifier: ^6.7.2 version: 6.7.2 '@fortawesome/react-fontawesome': - specifier: ^0.2.2 - version: 0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) + specifier: ^0.2.6 + version: 0.2.6(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) '@giscus/react': specifier: ^3.1.0 version: 3.1.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@headlessui/react': - specifier: ^2.2.3 + specifier: ^2.2.7 version: 2.2.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@heroicons/react': - specifier: ^2.0.18 + specifier: ^2.2.0 version: 2.2.0(react@19.1.1) '@inquirer/prompts': specifier: ^6.0.1 version: 6.0.1 '@mdx-js/loader': - specifier: ^3.1.0 - version: 3.1.1(webpack@5.101.3(esbuild@0.25.8)) + specifier: ^3.1.1 + version: 3.1.1(webpack@5.101.3(esbuild@0.25.9)) '@mdx-js/react': - specifier: ^3.1.0 - version: 3.1.1(@types/react@18.3.23)(react@19.1.1) + specifier: ^3.1.1 + version: 3.1.1(@types/react@18.3.24)(react@19.1.1) '@next/mdx': - specifier: ^15.1.7 - version: 15.5.2(@mdx-js/loader@3.1.1(webpack@5.101.3(esbuild@0.25.8)))(@mdx-js/react@3.1.1(@types/react@18.3.23)(react@19.1.1)) + specifier: ^15.5.2 + version: 15.5.2(@mdx-js/loader@3.1.1(webpack@5.101.3(esbuild@0.25.9)))(@mdx-js/react@3.1.1(@types/react@18.3.24)(react@19.1.1)) '@next/third-parties': specifier: latest version: 15.5.2(next@15.5.2(babel-plugin-macros@3.1.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2))(react@19.1.1) '@rivet-gg/api': - specifier: ^0.0.1-rc19 + specifier: 0.0.1-rc8 version: 0.0.1-rc8 '@rivet-gg/components': specifier: workspace:* @@ -839,44 +851,44 @@ importers: specifier: workspace:^ version: link:../frontend/packages/icons '@shikijs/transformers': - specifier: ^1.17.6 + specifier: ^1.29.2 version: 1.29.2 '@sindresorhus/slugify': - specifier: ^2.1.1 + specifier: ^2.2.1 version: 2.2.1 '@tailwindcss/forms': - specifier: ^0.5.3 + specifier: ^0.5.10 version: 0.5.10(tailwindcss@3.4.17) '@tailwindcss/typography': - specifier: ^0.5.8 + specifier: ^0.5.16 version: 0.5.16(tailwindcss@3.4.17) '@types/json-schema': specifier: ^7.0.15 version: 7.0.15 acorn: - specifier: ^8.8.1 + specifier: ^8.15.0 version: 8.15.0 autoprefixer: - specifier: ^10.4.7 + specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) chart.js: - specifier: ^4.4.2 + specifier: ^4.5.0 version: 4.5.0 chartjs-adapter-date-fns: specifier: ^3.0.0 version: 3.0.0(chart.js@4.5.0)(date-fns@3.6.0) clsx: - specifier: ^2.1.0 + specifier: ^2.1.1 version: 2.1.1 csv-parser: - specifier: ^3.0.0 + specifier: ^3.2.0 version: 3.2.0 date-fns: specifier: ^3.6.0 version: 3.6.0 dedent: - specifier: ^1.5.3 - version: 1.6.0(babel-plugin-macros@3.1.0) + specifier: ^1.7.0 + version: 1.7.0(babel-plugin-macros@3.1.0) esast-util-from-js: specifier: ^2.0.1 version: 2.0.1 @@ -887,17 +899,17 @@ importers: specifier: ^2.0.0 version: 2.0.0 fast-glob: - specifier: ^3.2.12 + specifier: ^3.3.3 version: 3.3.3 feed: specifier: ^4.2.2 version: 4.2.2 focus-visible: - specifier: ^5.2.0 + specifier: ^5.2.1 version: 5.2.1 framer-motion: - specifier: '*' - version: 11.18.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^12.23.12 + version: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) jszip: specifier: ^3.10.1 version: 3.10.1 @@ -905,31 +917,31 @@ importers: specifier: ^3.2.0 version: 3.2.0 mdx-annotations: - specifier: ^0.1.1 + specifier: ^0.1.4 version: 0.1.4 next: - specifier: ^15.2.4 + specifier: ^15.5.2 version: 15.5.2(babel-plugin-macros@3.1.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2) next-router-mock: - specifier: ^0.9.7 + specifier: ^0.9.13 version: 0.9.13(next@15.5.2(babel-plugin-macros@3.1.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2))(react@19.1.1) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@15.5.2(babel-plugin-macros@3.1.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2)) postcss: - specifier: ^8.4.24 + specifier: ^8.5.6 version: 8.5.6 postcss-focus-visible: specifier: ^6.0.4 version: 6.0.4(postcss@8.5.6) posthog-js: - specifier: ^1.257.0 - version: 1.260.1 + specifier: ^1.262.0 + version: 1.262.0 react: - specifier: '*' + specifier: ^19.1.1 version: 19.1.1 react-chartjs-2: - specifier: ^5.2.0 + specifier: ^5.3.0 version: 5.3.0(chart.js@4.5.0)(react@19.1.1) react-github-btn: specifier: ^1.4.0 @@ -938,8 +950,8 @@ importers: specifier: ^0.20.0 version: 0.20.0(react@19.1.1) react-markdown: - specifier: ^9.0.1 - version: 9.1.0(@types/react@18.3.23)(react@19.1.1) + specifier: ^9.1.0 + version: 9.1.0(@types/react@18.3.24)(react@19.1.1) recma-nextjs-static-props: specifier: ^1.0.0 version: 1.0.0 @@ -947,7 +959,7 @@ importers: specifier: ^2.0.0 version: 2.0.0 rehype-parse: - specifier: ^8.0.4 + specifier: ^8.0.5 version: 8.0.5 rehype-remark: specifier: ^9.1.2 @@ -959,32 +971,32 @@ importers: specifier: ^4.0.1 version: 4.0.1 remark-mdx: - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 remark-stringify: specifier: ^10.0.3 version: 10.0.3 sharp: - specifier: ^0.32.1 + specifier: ^0.32.6 version: 0.32.6 shiki: - specifier: ^1.0.0 + specifier: ^1.29.2 version: 1.29.2 socket.io: - specifier: ^4.7.1 + specifier: ^4.8.1 version: 4.8.1 socket.io-client: - specifier: ^4.7.1 + specifier: ^4.8.1 version: 4.8.1 tailwindcss: - specifier: ^3.3.0 + specifier: ^3.4.17 version: 3.4.17 tm-themes: - specifier: ^1.10.7 + specifier: ^1.10.9 version: 1.10.9 typesense: specifier: ^1.8.2 - version: 1.8.2(@babel/runtime@7.28.3) + version: 1.8.2(@babel/runtime@7.28.4) unified: specifier: ^10.1.2 version: 10.1.2 @@ -992,27 +1004,27 @@ importers: specifier: ^4.0.1 version: 4.0.1 unist-util-visit: - specifier: ^4.1.1 + specifier: ^4.1.2 version: 4.1.2 zustand: - specifier: ^4.3.2 - version: 4.5.7(@types/react@18.3.23)(react@19.1.1) + specifier: ^4.5.7 + version: 4.5.7(@types/react@18.3.24)(react@19.1.1) devDependencies: '@types/escape-html': - specifier: ^1 + specifier: ^1.0.4 version: 1.0.4 axios: - specifier: ^1.5.0 + specifier: ^1.11.0 version: 1.11.0 eslint: specifier: 8.26.0 version: 8.26.0 eslint-config-next: specifier: 13.0.2 - version: 13.0.2(eslint@8.26.0)(typescript@5.8.2) + version: 13.0.2(eslint@8.26.0)(typescript@5.9.2) file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.3(esbuild@0.25.8)) + version: 6.2.0(webpack@5.101.3(esbuild@0.25.9)) prettier: specifier: ^2.8.8 version: 2.8.8 @@ -1020,16 +1032,16 @@ importers: specifier: ^0.3.0 version: 0.3.0(prettier@2.8.8) tsx: - specifier: ^4.20.3 - version: 4.20.3 + specifier: ^4.20.5 + version: 4.20.5 typescript: - specifier: ^5.1.6 - version: 5.8.2 + specifier: ^5.9.2 + version: 5.9.2 vite-node: - specifier: ^2.1.1 - version: 2.1.9(@types/node@24.3.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + specifier: ^2.1.9 + version: 2.1.9(@types/node@24.3.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) yaml: - specifier: ^2.3.1 + specifier: ^2.8.1 version: 2.8.1 packages: @@ -1044,10 +1056,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@asteasolutions/zod-to-openapi@7.3.4': resolution: {integrity: sha512-/2rThQ5zPi9OzVwes6U7lK1+Yvug0iXu25olp7S0XsYmOqnyMfxH7gdSQjn/+DSOHRg7wnotwGJSyL+fBKdnEA==} peerDependencies: @@ -1057,12 +1065,12 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.3': - resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} '@babel/generator@7.28.3': @@ -1131,12 +1139,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.3': - resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -1182,20 +1190,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.3': - resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.3': - resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} '@bare-ts/lib@0.3.0': @@ -1216,55 +1224,55 @@ packages: '@base-org/account@2.0.1': resolution: {integrity: sha512-tySVNx+vd6XEynZL0uvB10uKiwnAfThr8AbKTwILVG86mPbLAhEOInQIk+uDnvpTvfdUhC1Bi5T/46JvFoLZQQ==} - '@biomejs/biome@2.1.4': - resolution: {integrity: sha512-QWlrqyxsU0FCebuMnkvBIkxvPqH89afiJzjMl+z67ybutse590jgeaFdDurE9XYtzpjRGTI1tlUZPGWmbKsElA==} + '@biomejs/biome@2.2.3': + resolution: {integrity: sha512-9w0uMTvPrIdvUrxazZ42Ib7t8Y2yoGLKLdNne93RLICmaHw7mcLv4PPb5LvZLJF3141gQHiCColOh/v6VWlWmg==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.1.4': - resolution: {integrity: sha512-sCrNENE74I9MV090Wq/9Dg7EhPudx3+5OiSoQOkIe3DLPzFARuL1dOwCWhKCpA3I5RHmbrsbNSRfZwCabwd8Qg==} + '@biomejs/cli-darwin-arm64@2.2.3': + resolution: {integrity: sha512-OrqQVBpadB5eqzinXN4+Q6honBz+tTlKVCsbEuEpljK8ASSItzIRZUA02mTikl3H/1nO2BMPFiJ0nkEZNy3B1w==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.1.4': - resolution: {integrity: sha512-gOEICJbTCy6iruBywBDcG4X5rHMbqCPs3clh3UQ+hRKlgvJTk4NHWQAyHOXvaLe+AxD1/TNX1jbZeffBJzcrOw==} + '@biomejs/cli-darwin-x64@2.2.3': + resolution: {integrity: sha512-OCdBpb1TmyfsTgBAM1kPMXyYKTohQ48WpiN9tkt9xvU6gKVKHY4oVwteBebiOqyfyzCNaSiuKIPjmHjUZ2ZNMg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.1.4': - resolution: {integrity: sha512-nYr7H0CyAJPaLupFE2cH16KZmRC5Z9PEftiA2vWxk+CsFkPZQ6dBRdcC6RuS+zJlPc/JOd8xw3uCCt9Pv41WvQ==} + '@biomejs/cli-linux-arm64-musl@2.2.3': + resolution: {integrity: sha512-q3w9jJ6JFPZPeqyvwwPeaiS/6NEszZ+pXKF+IczNo8Xj6fsii45a4gEEicKyKIytalV+s829ACZujQlXAiVLBQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.1.4': - resolution: {integrity: sha512-juhEkdkKR4nbUi5k/KRp1ocGPNWLgFRD4NrHZSveYrD6i98pyvuzmS9yFYgOZa5JhaVqo0HPnci0+YuzSwT2fw==} + '@biomejs/cli-linux-arm64@2.2.3': + resolution: {integrity: sha512-g/Uta2DqYpECxG+vUmTAmUKlVhnGEcY7DXWgKP8ruLRa8Si1QHsWknPY3B/wCo0KgYiFIOAZ9hjsHfNb9L85+g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.1.4': - resolution: {integrity: sha512-lvwvb2SQQHctHUKvBKptR6PLFCM7JfRjpCCrDaTmvB7EeZ5/dQJPhTYBf36BE/B4CRWR2ZiBLRYhK7hhXBCZAg==} + '@biomejs/cli-linux-x64-musl@2.2.3': + resolution: {integrity: sha512-y76Dn4vkP1sMRGPFlNc+OTETBhGPJ90jY3il6jAfur8XWrYBQV3swZ1Jo0R2g+JpOeeoA0cOwM7mJG6svDz79w==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.1.4': - resolution: {integrity: sha512-Eoy9ycbhpJVYuR+LskV9s3uyaIkp89+qqgqhGQsWnp/I02Uqg2fXFblHJOpGZR8AxdB9ADy87oFVxn9MpFKUrw==} + '@biomejs/cli-linux-x64@2.2.3': + resolution: {integrity: sha512-LEtyYL1fJsvw35CxrbQ0gZoxOG3oZsAjzfRdvRBRHxOpQ91Q5doRVjvWW/wepgSdgk5hlaNzfeqpyGmfSD0Eyw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.1.4': - resolution: {integrity: sha512-3WRYte7orvyi6TRfIZkDN9Jzoogbv+gSvR+b9VOXUg1We1XrjBg6WljADeVEaKTvOcpVdH0a90TwyOQ6ue4fGw==} + '@biomejs/cli-win32-arm64@2.2.3': + resolution: {integrity: sha512-Ms9zFYzjcJK7LV+AOMYnjN3pV3xL8Prxf9aWdDVL74onLn5kcvZ1ZMQswE5XHtnd/r/0bnUd928Rpbs14BzVmA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.1.4': - resolution: {integrity: sha512-tBc+W7anBPSFXGAoQW+f/+svkpt8/uXfRwDzN1DvnatkRMt16KIYpEi/iw8u9GahJlFv98kgHcIrSsZHZTR0sw==} + '@biomejs/cli-win32-x64@2.2.3': + resolution: {integrity: sha512-gvCpewE7mBwBIpqk1YrUqNR4mCiyJm6UI3YWQQXkedSSEwzRdodRpaKhbdbHw1/hmTWOVXQ+Eih5Qctf4TCVOQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1337,8 +1345,8 @@ packages: resolution: {integrity: sha512-OAepuiszOrheIThdCtBRiRSq0A3grlD2yhUUO8kvMFv4Uys95gSzkzuvQjUWXZZ23yOdTl6eRUXjtjCGto116w==} engines: {node: '>=18.17.0'} - '@codemirror/autocomplete@6.18.6': - resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} + '@codemirror/autocomplete@6.18.7': + resolution: {integrity: sha512-8EzdeIoWPJDsMBwz3zdzwXnUpCzMiCyz5/A3FIPpriaclFCGDkAzK13sMcnsu5rowqiyeQN2Vs2TsOcoDPZirQ==} '@codemirror/commands@6.8.1': resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==} @@ -1367,8 +1375,8 @@ packages: '@codemirror/theme-one-dark@6.1.3': resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==} - '@codemirror/view@6.38.1': - resolution: {integrity: sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==} + '@codemirror/view@6.38.2': + resolution: {integrity: sha512-bTWAJxL6EOFLPzTx+O5P5xAO3gTqpatQ2b/ARQ8itfU/v2LlpS3pH2fkL0A3E/Fx8Y2St2KES7ZEV0sHTsSW/A==} '@coinbase/wallet-sdk@4.3.0': resolution: {integrity: sha512-T3+SNmiCw4HzDm4we9wCHCxlP0pqCiwKe4sOwPH3YAK2KSKjxPRydKu6UQJrdONFVLG7ujXvbd/6ZqmvJb8rkw==} @@ -1379,8 +1387,8 @@ packages: '@date-fns/utc@1.2.0': resolution: {integrity: sha512-YLq+crMPJiBmIdkRmv9nZuZy1mVtMlDcUKlg4mvI0UsC/dZeIaGoGB5p/C4FrpeOhZ7zBTK03T58S0DFkRNMnw==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -1438,8 +1446,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1456,8 +1464,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1474,8 +1482,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1492,8 +1500,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1510,8 +1518,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1528,8 +1536,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1546,8 +1554,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1564,8 +1572,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1582,8 +1590,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1600,8 +1608,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1618,8 +1626,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1636,8 +1644,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1654,8 +1662,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1672,8 +1680,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1690,8 +1698,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1708,8 +1716,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1726,14 +1734,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1750,14 +1758,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1774,14 +1782,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -1798,8 +1806,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1816,8 +1824,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1834,8 +1842,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1852,8 +1860,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1865,11 +1873,11 @@ packages: '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@floating-ui/dom@1.7.3': - resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - '@floating-ui/react-dom@2.1.5': - resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==} + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -1908,8 +1916,8 @@ packages: resolution: {integrity: sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==} engines: {node: '>=6'} - '@fortawesome/react-fontawesome@0.2.3': - resolution: {integrity: sha512-HlJco8RDY8NrzFVjy23b/7mNS4g9NegcrBG3n7jinwpc2x/AmSVk53IhWniLYM4szYLxRAFTAGwGn0EIlclDeQ==} + '@fortawesome/react-fontawesome@0.2.6': + resolution: {integrity: sha512-mtBFIi1UsYQo7rYonYFkjgYKGoL8T+fEH6NGUpvuqtY3ytMsAoDaPo5rk25KuMtKDipY4bGYM/CkmCHA1N3FUg==} peerDependencies: '@fortawesome/fontawesome-svg-core': ~1 || ~6 || ~7 react: ^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1932,8 +1940,8 @@ packages: peerDependencies: react: '>= 16 || ^19.0.0-rc' - '@hono/node-server@1.18.2': - resolution: {integrity: sha512-icgNvC0vRYivzyuSSaUv9ttcwtN8fDyd1k3AOIBDJgYd84tXRZSS6na8X54CY/oYoFTNhEmZraW/Rb9XYwX4KA==} + '@hono/node-server@1.19.1': + resolution: {integrity: sha512-h44e5s+ByUriaRIbeS/C74O8v90m0A95luyYQGMF7KEn96KkYMXO7bZAwombzTpjQTU4e0TkU8U1WBIXlwuwtA==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -2269,6 +2277,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2291,8 +2302,8 @@ packages: '@lezer/highlight@1.2.1': resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} - '@lezer/javascript@1.5.1': - resolution: {integrity: sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==} + '@lezer/javascript@1.5.3': + resolution: {integrity: sha512-jexmlKq5NpGiB7t+0QkyhSXRgaiab5YisHIQW9C7EcU19KSUsDguZe9WY+rmRDg34nXoNH2LQ4SxpC+aJUchSQ==} '@lezer/json@1.0.3': resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} @@ -2534,6 +2545,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@posthog/core@1.0.2': + resolution: {integrity: sha512-hWk3rUtJl2crQK0WNmwg13n82hnTwB99BT99/XI5gZSvIlYZ1TPmMZE8H2dhJJ98J/rm9vYJ/UXNzw3RV5HTpQ==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -3122,21 +3136,9 @@ packages: resolution: {integrity: sha512-aGJVImxsmz8fLLzeZHUlFRJ/7Y/xBrke9bOvMpooVaJpHor/XmiP19QeEtB2hmQUOPlgS3dz5o8UtCZ5+LcQGg==} '@rivet-gg/cloud@file:frontend/vendor/rivet-cloud.tgz': - resolution: {integrity: sha512-zh9YFz5/NaJKSGR/FB8g5vaSBs2YZbsUbiB2rY1cQQw56StMefBrBMYwrrVtef3KDhr7DyZJ17O4b8ok54i3Yw==, tarball: file:frontend/vendor/rivet-cloud.tgz} + resolution: {integrity: sha512-vtNVoG4dnpWWRj501dE7pa8q4yl8hXUjfG+55DS/Rgoc92H3qke4U09NuoU++fuw04LxbgoZ6v4XDPDRXjy7Iw==, tarball: file:frontend/vendor/rivet-cloud.tgz} version: 0.0.0 - '@rivet-gg/icons@file:frontend/vendor/rivet-icons.tgz': - resolution: {integrity: sha512-bA9qDpD/bhE9jycLN+PovCCfweFpSq+AIOl8W0/o5sZ8l8kF732DvXgvsAOLLzTUEpjsmU4U/RNGtRv/h5K17A==, tarball: file:frontend/vendor/rivet-icons.tgz} - version: 25.5.3 - engines: {node: '>=18'} - peerDependencies: - '@fortawesome/fontawesome-svg-core': ^6.5.2 - '@fortawesome/free-brands-svg-icons': ^6.5.2 - '@fortawesome/free-solid-svg-icons': ^6.5.2 - '@fortawesome/react-fontawesome': ^0.2.2 - react: ^19 - react-dom: ^19 - '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-dev/engine/@rivetkit/engine-runner-protocol@b72b2324c50c5449ed1844a060928d80d1151839': resolution: {tarball: https://pkg.pr.new/rivet-dev/engine/@rivetkit/engine-runner-protocol@b72b2324c50c5449ed1844a060928d80d1151839} version: 25.6.1 @@ -3155,8 +3157,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -3164,103 +3166,108 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + '@rollup/rollup-android-arm-eabi@4.50.1': + resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.2': - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + '@rollup/rollup-android-arm64@4.50.1': + resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.2': - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + '@rollup/rollup-darwin-arm64@4.50.1': + resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.2': - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + '@rollup/rollup-darwin-x64@4.50.1': + resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.2': - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + '@rollup/rollup-freebsd-arm64@4.50.1': + resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.2': - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + '@rollup/rollup-freebsd-x64@4.50.1': + resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + '@rollup/rollup-linux-arm-musleabihf@4.50.1': + resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.2': - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + '@rollup/rollup-linux-arm64-gnu@4.50.1': + resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.2': - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + '@rollup/rollup-linux-arm64-musl@4.50.1': + resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + '@rollup/rollup-linux-ppc64-gnu@4.50.1': + resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + '@rollup/rollup-linux-riscv64-gnu@4.50.1': + resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.2': - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + '@rollup/rollup-linux-riscv64-musl@4.50.1': + resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.2': - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + '@rollup/rollup-linux-s390x-gnu@4.50.1': + resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.2': - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + '@rollup/rollup-linux-x64-gnu@4.50.1': + resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.2': - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + '@rollup/rollup-linux-x64-musl@4.50.1': + resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.2': - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + '@rollup/rollup-openharmony-arm64@4.50.1': + resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.50.1': + resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.2': - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + '@rollup/rollup-win32-ia32-msvc@4.50.1': + resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.2': - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + '@rollup/rollup-win32-x64-msvc@4.50.1': + resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} cpu: [x64] os: [win32] @@ -3392,44 +3399,44 @@ packages: '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/core@3.9.2': - resolution: {integrity: sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==} + '@shikijs/core@3.12.2': + resolution: {integrity: sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==} '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - '@shikijs/engine-javascript@3.9.2': - resolution: {integrity: sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==} + '@shikijs/engine-javascript@3.12.2': + resolution: {integrity: sha512-Nm3/azSsaVS7hk6EwtHEnTythjQfwvrO5tKqMlaH9TwG1P+PNaR8M0EAKZ+GaH2DFwvcr4iSfTveyxMIvXEHMw==} '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/engine-oniguruma@3.9.2': - resolution: {integrity: sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==} + '@shikijs/engine-oniguruma@3.12.2': + resolution: {integrity: sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==} '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/langs@3.9.2': - resolution: {integrity: sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==} + '@shikijs/langs@3.12.2': + resolution: {integrity: sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==} '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - '@shikijs/themes@3.9.2': - resolution: {integrity: sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==} + '@shikijs/themes@3.12.2': + resolution: {integrity: sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==} '@shikijs/transformers@1.29.2': resolution: {integrity: sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA==} - '@shikijs/transformers@3.9.2': - resolution: {integrity: sha512-MW5hT4TyUp6bNAgTExRYLk1NNasVQMTCw1kgbxHcEC0O5cbepPWaB+1k+JzW9r3SP2/R8kiens8/3E6hGKfgsA==} + '@shikijs/transformers@3.12.2': + resolution: {integrity: sha512-+z1aMq4N5RoNGY8i7qnTYmG2MBYzFmwkm/yOd6cjEI7OVzcldVvzQCfxU1YbIVgsyB0xHVc2jFe1JhgoXyUoSQ==} '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} - '@shikijs/types@3.9.2': - resolution: {integrity: sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==} + '@shikijs/types@3.12.2': + resolution: {integrity: sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3480,40 +3487,40 @@ packages: resolution: {integrity: sha512-cs1WKawpXIe+vSTeiZUuSBy8JFjEuDgdMKZFRLKwQysKo8y2q6Q1HvS74Yw+m5IhOW1nTZooa6rlgdfXcgFAaw==} engines: {node: '>=12'} - '@tanstack/query-core@5.85.3': - resolution: {integrity: sha512-9Ne4USX83nHmRuEYs78LW+3lFEEO2hBDHu7mrdIgAFx5Zcrs7ker3n/i8p4kf6OgKExmaDN5oR0efRD7i2J0DQ==} + '@tanstack/query-core@5.87.1': + resolution: {integrity: sha512-HOFHVvhOCprrWvtccSzc7+RNqpnLlZ5R6lTmngb8aq7b4rc2/jDT0w+vLdQ4lD9bNtQ+/A4GsFXy030Gk4ollA==} - '@tanstack/query-devtools@5.84.0': - resolution: {integrity: sha512-fbF3n+z1rqhvd9EoGp5knHkv3p5B2Zml1yNRjh7sNXklngYI5RVIWUrUjZ1RIcEoscarUb0+bOvIs5x9dwzOXQ==} + '@tanstack/query-devtools@5.87.3': + resolution: {integrity: sha512-LkzxzSr2HS1ALHTgDmJH5eGAVsSQiuwz//VhFW5OqNk0OQ+Fsqba0Tsf+NzWRtXYvpgUqwQr4b2zdFZwxHcGvg==} - '@tanstack/react-query-devtools@5.85.3': - resolution: {integrity: sha512-WSVweCE1Kh1BVvPDHAmLgGT+GGTJQ9+a7bVqzD+zUiUTht+salJjYm5nikpMNaHFPJV102TCYdvgHgBXtURRNg==} + '@tanstack/react-query-devtools@5.87.3': + resolution: {integrity: sha512-uV7m4/m58jU4OaLEyiPLRoXnL5H5E598lhFLSXIcK83on+ZXW7aIfiu5kwRwe1qFa4X4thH8wKaxz1lt6jNmAA==} peerDependencies: - '@tanstack/react-query': ^5.85.3 + '@tanstack/react-query': ^5.87.1 react: ^18 || ^19 - '@tanstack/react-query@5.85.3': - resolution: {integrity: sha512-AqU8TvNh5GVIE8I+TUU0noryBRy7gOY0XhSayVXmOPll4UkZeLWKDwi0rtWOZbwLRCbyxorfJ5DIjDqE7GXpcQ==} + '@tanstack/react-query@5.87.1': + resolution: {integrity: sha512-YKauf8jfMowgAqcxj96AHs+Ux3m3bWT1oSVKamaRPXSnW2HqSznnTCEkAVqctF1e/W9R/mPcyzzINIgpOH94qg==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.131.14': - resolution: {integrity: sha512-V3C7spd6SG+cShttwFxTXCg0EHyemVeGEgAXPr9AQLKehkCIa6R5WgpUCLxirhkfPBHrwA638q6um0eIODUNqA==} + '@tanstack/react-router-devtools@1.131.36': + resolution: {integrity: sha512-2huBmW+mqPoJs6ZHfjuunEkVRfgWZh67IUjgdSyqdaYGLa3qsG3zcG4bpTIq6HwJuzcK00JRM3AQ4NLPdttaJQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.131.14 + '@tanstack/react-router': ^1.131.36 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.131.14': - resolution: {integrity: sha512-AA/BKIW6m3ivOrGnCGQKucNuxdPApTgkbVUSMIBx5sLBn/bA5f9JIBgEuJQBkeHYx2JZi/PVq4N6E7USWYC2Ag==} + '@tanstack/react-router@1.131.36': + resolution: {integrity: sha512-9tglm3Rf9qkANBIyYLbGlOjNj7GDBr0jOEOaADfwiGV3Ua3P562MGn7nHUOrfRfA6u2MCg0EKJ+LH7AeWxAqkg==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-store@0.7.3': - resolution: {integrity: sha512-3Dnqtbw9P2P0gw8uUM8WP2fFfg8XMDSZCTsywRPZe/XqqYW8PGkXKZTvP0AHkE4mpqP9Y43GpOg9vwO44azu6Q==} + '@tanstack/react-store@0.7.5': + resolution: {integrity: sha512-A+WZtEnHZpvbKXm8qR+xndNKywBLez2KKKKEQc7w0Qs45GvY1LpRI3BTZNmELwEVim8+Apf99iEDH2J+MUIzlQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3531,15 +3538,15 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.131.14': - resolution: {integrity: sha512-07kOQsaEFs1wVNaz854cWpxwc8EMRsl5jNy8RJwDUckHGxgeDK67J6CAhoKMiR8cXCTQ4OqZKE8W7W+iFg8B5A==} + '@tanstack/router-core@1.131.36': + resolution: {integrity: sha512-faGrKwrJBjJDxbcyeaOXgQcyccmzIGkwk+tnFeJuMTnH5OMfArykYnTZ9BxIrlOY2Mori9DXmYKMlig6mVqmGA==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.131.14': - resolution: {integrity: sha512-MV4PNtGUkcgr/qRBm+6LtHu1rf1+CieTZpEuXNxm3A7zNbDLeIk3aCmjHrsmCgKDE3aj0/q3CWB9LoJZ9lMysw==} + '@tanstack/router-devtools-core@1.131.36': + resolution: {integrity: sha512-ToZVh1kBAcOt4lp7p/v9g4cjbSBlodxngIFx+lvmhCZ7Y+SG7Y6uP7ivw8WsUAdXAWLzIhIW6Jg57TT7sz8tkg==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.131.14 + '@tanstack/router-core': ^1.131.36 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -3547,11 +3554,11 @@ packages: csstype: optional: true - '@tanstack/router-devtools@1.131.14': - resolution: {integrity: sha512-HD0/KNO+YJsIWDLdhNnLCu1pUkjPM8hNisjYdYiRQXqkqeeA+27n4/bkVXM+jDmunWccut7FiJ42vXrERzKcRg==} + '@tanstack/router-devtools@1.131.36': + resolution: {integrity: sha512-Xc3BlSdZnoyp50ZEUVqd+wNpf+wuHUG+78ZMhsN6A37E7zl30fUzxHIkDGVYOPuZa5rZco6yjAY6UqoI0wyvHw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.131.14 + '@tanstack/react-router': ^1.131.36 csstype: ^3.0.10 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -3559,16 +3566,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.131.14': - resolution: {integrity: sha512-KyNpWD+6Wtbk7Vm16S9LrGfrEJQihjU8WkK7UnkSFyXnfDti1Rbxv9ftIKj4DZqFKKaw3QCFXwTj2fd0DEsvcA==} + '@tanstack/router-generator@1.131.36': + resolution: {integrity: sha512-Rl1Q2DFcAFXaYSvHQwO+HKmp5zSBz8D3qZl+fJ0a0w4/2I+Km1xwjzDwBUkFVNJtTUor40uU76SYJzV0/9s1tw==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.131.15': - resolution: {integrity: sha512-acjC9qxsGir6f/autNSXIiJXvtBB+RLseG0u3PeI54EpnqvKT7uTxaQijANyn6Pqi7chc0VzF+OqXI8DBjo/sg==} + '@tanstack/router-plugin@1.131.36': + resolution: {integrity: sha512-EU/NopEkQw3AyjZvB33r4uIfUtbU64rbdJDCgGfumv1wpi/B4lJTO9W6iiUsoIsi1mtlNQKbFKNIbx+VyGh19Q==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.131.14 + '@tanstack/react-router': ^1.131.36 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -3588,8 +3595,8 @@ packages: resolution: {integrity: sha512-sr3x0d2sx9YIJoVth0QnfEcAcl+39sQYaNQxThtHmRpyeFYNyM2TTH+Ud3TNEnI3bbzmLYEUD+7YqB987GzhDA==} engines: {node: '>=12'} - '@tanstack/store@0.7.2': - resolution: {integrity: sha512-RP80Z30BYiPX2Pyo0Nyw4s1SJFH2jyM6f9i3HfX4pA+gm5jsnYryscdq2aIQLnL4TaGuQMO+zXmN9nh1Qck+Pg==} + '@tanstack/store@0.7.5': + resolution: {integrity: sha512-qd/OjkjaFRKqKU4Yjipaen/EOB9MyEg6Wr9fW103RBPACf1ZcKhbhcu2S5mj5IgdPib6xFIgCUti/mKVkl+fRw==} '@tanstack/table-core@8.21.3': resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} @@ -3602,8 +3609,8 @@ packages: resolution: {integrity: sha512-VEEOxc4mvyu67O+Bl0APtYjwcNRcL9it9B4HKbNgcBTIOEalhk+ufBl4kiqc8WP1sx1+NAaiS+3CcJBhrqaSRg==} engines: {node: '>=12'} - '@tanstack/zod-adapter@1.131.14': - resolution: {integrity: sha512-gU5aOfWLvMgKD93XnYhK/hYR/CBRB0E54Q+BOrprDFeypPVjfw6aOIuUveFV0g2UCITnReEnnFgAwOyFHk4+wQ==} + '@tanstack/zod-adapter@1.131.36': + resolution: {integrity: sha512-2AwzoQOsNET1QePMmObelh46nKTzsBcrhh92VY0Fr2HP+x06lkWOFPScqOWHzOsvMJEC4/WfwZK5Hnc/FvpSUA==} engines: {node: '>=12'} peerDependencies: '@tanstack/react-router': '>=1.43.2' @@ -3699,6 +3706,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -3727,14 +3737,14 @@ packages: '@types/node@17.0.33': resolution: {integrity: sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==} - '@types/node@20.19.9': - resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} + '@types/node@20.19.13': + resolution: {integrity: sha512-yCAeZl7a0DxgNVteXFHt9+uyFbqXGy/ShC4BlcHkoE0AfGXYv/BUiplV72DjMYXHDBXFjhvr6DD1NiRVfB4j8g==} - '@types/node@22.17.0': - resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} + '@types/node@22.18.1': + resolution: {integrity: sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==} - '@types/node@24.3.0': - resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} + '@types/node@24.3.1': + resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3756,8 +3766,8 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react@18.3.23': - resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} + '@types/react@18.3.24': + resolution: {integrity: sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==} '@types/readable-stream@4.0.21': resolution: {integrity: sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==} @@ -3879,11 +3889,11 @@ packages: '@volar/typescript@1.11.1': resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} - '@vue/compiler-core@3.5.20': - resolution: {integrity: sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==} + '@vue/compiler-core@3.5.21': + resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} - '@vue/compiler-dom@3.5.20': - resolution: {integrity: sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==} + '@vue/compiler-dom@3.5.21': + resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} '@vue/language-core@1.8.27': resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} @@ -3893,8 +3903,8 @@ packages: typescript: optional: true - '@vue/shared@3.5.20': - resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} + '@vue/shared@3.5.21': + resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -4054,8 +4064,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -4066,8 +4076,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansis@4.1.0: @@ -4203,14 +4213,17 @@ packages: bare-events@2.6.1: resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} - bare-fs@4.2.2: - resolution: {integrity: sha512-5vn+bdnlCYMwETIm1FqQXDP6TYPbxr2uJd88ve40kr4oPbiTZJVrTNzqA3/4sfWZeWKuQR/RkboBt7qEEDtfMA==} + bare-fs@4.3.2: + resolution: {integrity: sha512-FAJ00JF69O6/oKAP+oiJYgdem1biZoGAR0NbRkBRQZ26shA87DmdHWbpeY3EVKPrAzHByLoLo+hAzTT6NTJWCg==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' + bare-url: '*' peerDependenciesMeta: bare-buffer: optional: true + bare-url: + optional: true bare-os@3.6.2: resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} @@ -4267,8 +4280,8 @@ packages: browser-tabs-lock@1.3.0: resolution: {integrity: sha512-g6nHaobTiT0eMZ7jh16YpD2kcjAp+PInbiVq3M1x6KKaEIVhT4v9oURNIpZLOZ3LQbQ3XYfNhMAb/9hzNLIWrw==} - browserslist@4.25.2: - resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} + browserslist@4.25.4: + resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4311,8 +4324,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001735: - resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} + caniuse-lite@1.0.30001741: + resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} cbor-extract@2.2.0: resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} @@ -4476,8 +4489,8 @@ packages: core-js@3.41.0: resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} - core-js@3.45.0: - resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} + core-js@3.45.1: + resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4620,8 +4633,8 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dedent@1.6.0: - resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -4710,8 +4723,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.202: - resolution: {integrity: sha512-NxbYjRmiHcHXV1Ws3fWUW+SLb62isauajk45LUJ/HgIOkUA7jLZu/X2Iif+X9FBNK8QkF9Zb4Q2mcwXCcY30mg==} + electron-to-chromium@1.5.215: + resolution: {integrity: sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -4806,8 +4819,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} hasBin: true @@ -5051,8 +5064,9 @@ packages: resolution: {integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==} engines: {node: '>=14.0.0'} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -5079,6 +5093,10 @@ packages: file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + filesize@11.0.2: + resolution: {integrity: sha512-s/iAeeWLk5BschUIpmdrF8RA8lhFZ/xDZgKw1Tan72oGws1/dFGB06nYEiyyssWUfjKNQTNRlrwMVjO9/hvXDw==} + engines: {node: '>= 10.4.0'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -5141,6 +5159,20 @@ packages: react-dom: optional: true + framer-motion@12.23.12: + resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -5347,8 +5379,8 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.8.12: - resolution: {integrity: sha512-MQSKk1Mg7b74k8l+A025LfysnLtXDKkE4pLaSsYRQC5iy85lgZnuyeQ1Wynair9mmECzoLu+FtJtqNZSoogBDQ==} + hono@4.9.6: + resolution: {integrity: sha512-doVjXhSFvYZ7y0dNokjwwSahcrAfdz+/BCLvAMa/vHLzjj8+CFyV5xteThGUsKdkaasgN+gF2mUxao+SGLpUeA==} engines: {node: '>=16.9.0'} html-url-attributes@3.0.1: @@ -5600,8 +5632,8 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbot@5.1.29: - resolution: {integrity: sha512-DelDWWoa3mBoyWTq3wjp+GIWx/yZdN7zLUE7NFhKjAiJ+uJVRkbLlwykdduCE4sPUUy8mlTYTmdhBUYu91F+sw==} + isbot@5.1.30: + resolution: {integrity: sha512-3wVJEonAns1OETX83uWsk5IAne2S5zfDcntD2hbtU23LelSqNXzXs9zKjMPOLMzroCgIjCfjYAEHrd2D6FOkiA==} engines: {node: '>=18'} isexe@2.0.0: @@ -5630,14 +5662,14 @@ packages: jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - jotai-effect@2.0.5: - resolution: {integrity: sha512-SUCStiMDWMQIV5Wh95Dq0qvl3tsI1vKDSRHFBQg2bHS5BCIyDB6ykFpIFYhX+d2yYk3dJjOgNKZaTJEUmFFcdA==} + jotai-effect@2.1.0: + resolution: {integrity: sha512-1nD6D4JizwCH3z2kun71ZUkxeeE5PknUkuP98NqQdCanidct2BHIhSwRxnfA0C2CPAn9H+5NF0EHU6gPkdhh7Q==} engines: {node: '>=12.20.0'} peerDependencies: jotai: '>=2.12.1' - jotai@2.13.1: - resolution: {integrity: sha512-cRsw6kFeGC9Z/D3egVKrTXRweycZ4z/k7i2MrfCzPYsL9SIWcPXTyqv258/+Ay8VUEcihNiE/coBLE6Kic6b8A==} + jotai@2.14.0: + resolution: {integrity: sha512-JQkNkTnqjk1BlSUjHfXi+pGG/573bVN104gp6CymhrWDseZGDReTNniWrLhJ+zXbM6pH+82+UNJ2vwYQUkQMWQ==} engines: {node: '>=12.20.0'} peerDependencies: '@babel/core': '>=7.0.0' @@ -5658,8 +5690,8 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -5730,58 +5762,58 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} - lefthook-darwin-arm64@1.12.3: - resolution: {integrity: sha512-j1lwaosWRy3vhz8oQgCS1M6EUFN95aIYeNuqkczsBoAA6BDNAmVP1ctYEIYUK4bYaIgENbqbA9prYMAhyzh6Og==} + lefthook-darwin-arm64@1.12.4: + resolution: {integrity: sha512-/eBd9GnBS9Js2ZsHzipj2cV8siFex/g6MgBSeIxsHBJNkQFq4O42ItWxUir5Q43zFvZCjGizBlhklbmubGOZfg==} cpu: [arm64] os: [darwin] - lefthook-darwin-x64@1.12.3: - resolution: {integrity: sha512-x6aWFfLQX4m5zQ4X9zh5+hHOE5XTvNjz2zB9DI+xbIBLs2RRg0xJNT3OfgSrBU1QtEBneJ5dRQP5nl47td9GDQ==} + lefthook-darwin-x64@1.12.4: + resolution: {integrity: sha512-WDO0oR3pIAIBTZtn4/4dC0GRyrfJtPGckYbqshpH4Fkuxyy7nRGy3su+uY8kiiVYLy/nvELY2eoqnT1Rp4njFQ==} cpu: [x64] os: [darwin] - lefthook-freebsd-arm64@1.12.3: - resolution: {integrity: sha512-41OmulLqVZ0EOHmmHouJrpL59SwDD7FLoso4RsQVIBPaf8fHacdLo07Ye28VWQ5XolZQvnWcr1YXKo4JhqQMyw==} + lefthook-freebsd-arm64@1.12.4: + resolution: {integrity: sha512-/VNBWQvAsLuVilS7JB+pufTjuoj06Oz5YdGWUCo6u2XCKZ6UHzwDtGDJ0+3JQMSg8613gHmAdkGoByKjxqZSkQ==} cpu: [arm64] os: [freebsd] - lefthook-freebsd-x64@1.12.3: - resolution: {integrity: sha512-741/JRCJIS++hgYEH2uefN4FsH872V7gy2zDhcfQofiZnWP7+qhl4Wmwi8IpjIu4X7hLOC4cT18LOVU5L8KV9Q==} + lefthook-freebsd-x64@1.12.4: + resolution: {integrity: sha512-bY6klVVeBoiQEimb/z5TC5IFyczak9VOVQ8b+S/QAy+tvKo9TY6FdGwy7yxgoqTzfEkirDQxVOkalQsM/11xsg==} cpu: [x64] os: [freebsd] - lefthook-linux-arm64@1.12.3: - resolution: {integrity: sha512-BXIy1aDFZmFgmebJliNrEqZfX1lSOD4b/USvANv1UirFrNgTq5SRssd1CKfflT2PwKX6LsJTD4WabLLWZOxp9A==} + lefthook-linux-arm64@1.12.4: + resolution: {integrity: sha512-iU+tPCNcX1pztk5Zjs02+sOnjZj9kCrLn6pg954WMr9dZTIaEBljRV+ybBP/5zLlv2wfv5HFBDKDKNRYjOVF+A==} cpu: [arm64] os: [linux] - lefthook-linux-x64@1.12.3: - resolution: {integrity: sha512-FRdwdj5jsQAP2eVrtkVUqMqYNCbQ2Ix84izy29/BvLlu/hVypAGbDfUkgFnsmAd6ZsCBeYCEtPuqyg3E3SO0Rg==} + lefthook-linux-x64@1.12.4: + resolution: {integrity: sha512-IXYUSBYetftYmdii2aGIjv7kxO2m+jTYjaEoldtCDcXAPz/yV78Xx2WzY/LYNJsJ1vzbUhBqVOeRCHCwLXusTQ==} cpu: [x64] os: [linux] - lefthook-openbsd-arm64@1.12.3: - resolution: {integrity: sha512-tch5wXY4GOjKAYohH7OFoxNdVHuUSYt2Pulo2VTkMYEG8IrvJnRO5MkvgHtKDHzU5mfABQYv5+ccJykDx5hQWA==} + lefthook-openbsd-arm64@1.12.4: + resolution: {integrity: sha512-3DFLbqAlAeoqo//PE20NcGKJzBqAMbS/roPvaJ9DYA95MSywMig2jxyDoZbBhyP/J/iuFO3op7emtwgwousckA==} cpu: [arm64] os: [openbsd] - lefthook-openbsd-x64@1.12.3: - resolution: {integrity: sha512-IHbHg/rUFXrAN7LnjcQEtutCHBaD49CZge96Hpk0GZ2eEG5GTCNRnUyEf+Kf3+RTqHFgwtADdpeDa/ZaGZTM4g==} + lefthook-openbsd-x64@1.12.4: + resolution: {integrity: sha512-Nlxn3lXHK3hRDL5bP5W6+LleE9CRIc6GJ84xTo9EPwI40utsM8olAm+pFFRnE9szkHvQTkXwoBhqi2C5laxoGQ==} cpu: [x64] os: [openbsd] - lefthook-windows-arm64@1.12.3: - resolution: {integrity: sha512-wghcE5TSpb+mbtemUV6uAo9hEK09kxRzhf2nPdeDX+fw42cL2TGZsbaCnDyzaY144C+L2/wEWrLIHJMnZYkuqA==} + lefthook-windows-arm64@1.12.4: + resolution: {integrity: sha512-tWOfrTC9GNheaFXFt49G5nbBUYLqd2NBb5XW97dSLO/lU81cvuvRsMKZFBrq48LvByT7PLwEuibMuO1TminhHA==} cpu: [arm64] os: [win32] - lefthook-windows-x64@1.12.3: - resolution: {integrity: sha512-7Co/L8e2x2hGC1L33jDJ4ZlTkO3PJm25GOGpLfN1kqwhGB/uzMLeTI/PBczjlIN8isUv26ouNd9rVR7Bibrwyg==} + lefthook-windows-x64@1.12.4: + resolution: {integrity: sha512-3B295z3tdcdDrKrY98b/cSm4Elb/TXWMVQuH2xW15CJp9QY6jsgRpFJyBdyz4ggrPFhNUVnLKCpm6/saqeZWHA==} cpu: [x64] os: [win32] - lefthook@1.12.3: - resolution: {integrity: sha512-huMg+mGp6wHPjkaLdchuOvxVRMzvz6OVdhivatiH2Qn47O5Zm46jwzbVPYIanX6N/8ZTjGLBxv8tZ0KYmKt/Jg==} + lefthook@1.12.4: + resolution: {integrity: sha512-VhTFYGT55pD2hytjcn6Lckb0tCbG1Cke6rszTWVQVJpnJZ0EqQW+Pl+JYQLlruR8MO4RGFVU0UBUw17/g9TYxA==} hasBin: true less@4.4.1: @@ -5894,8 +5926,8 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} @@ -6168,15 +6200,21 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} motion-dom@11.18.1: resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + motion-dom@12.23.12: + resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} + motion-utils@11.18.1: resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + motion-utils@12.23.6: + resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -6251,8 +6289,8 @@ packages: sass: optional: true - node-abi@3.75.0: - resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + node-abi@3.77.0: + resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==} engines: {node: '>=10'} node-addon-api@6.1.0: @@ -6274,8 +6312,8 @@ packages: resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} hasBin: true - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.20: + resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -6609,8 +6647,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - posthog-js@1.260.1: - resolution: {integrity: sha512-DD8ZSRpdScacMqtqUIvMFme8lmOWkOvExG8VvjONE7Cm3xpRH5xXpfrwMJE4bayTGWKMx4ij6SfphK6dm/o2ug==} + posthog-js@1.262.0: + resolution: {integrity: sha512-RPbm+0qLVsgKQEN3KjfYAK+0qOwBPT28RHDg4WIstN8/z2m6PczMqSirOIXSqbvDwSCQQQRPTKS6fSurevqJMA==} peerDependencies: '@rrweb/types': 2.0.0-alpha.17 rrweb-snapshot: 2.0.0-alpha.17 @@ -6623,8 +6661,8 @@ packages: preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - preact@10.27.0: - resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} + preact@10.27.1: + resolution: {integrity: sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ==} prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} @@ -7057,8 +7095,8 @@ packages: ws: optional: true - rollup@4.46.2: - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + rollup@4.50.1: + resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7133,8 +7171,8 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - seroval-plugins@1.3.2: - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} + seroval-plugins@1.3.3: + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 @@ -7181,8 +7219,8 @@ packages: shiki@1.29.2: resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} - shiki@3.9.2: - resolution: {integrity: sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==} + shiki@3.12.2: + resolution: {integrity: sha512-uIrKI+f9IPz1zDT+GMz+0RjzKJiijVr6WDWm9Pe3NNY6QigKCfifCEv9v9R2mDASKKjzjQ2QpFLcxaR3iHSnMA==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -7342,8 +7380,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -7465,8 +7503,8 @@ packages: uglify-js: optional: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true @@ -7498,15 +7536,15 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinybench@5.0.0: - resolution: {integrity: sha512-iqp7HhNk6IQXuE5fyJsX4ENpnWcw9k+QS5hsLXZq47J8hH/cL/WjNr6Fr9kXMqCGYMhFSLX8xwoJl6rgB0Pz/A==} + tinybench@5.0.1: + resolution: {integrity: sha512-aNVgWQZY4veCZLQJRftDA1X9OoLUIjDWNfC90nledkX7Lx205IpSEFYnsu4slyofoPGpJ+NIQj+BNSt4U5edMg==} engines: {node: '>=20.0.0'} tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinypool@0.8.4: @@ -7604,46 +7642,46 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tsx@4.20.3: - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + tsx@4.20.5: + resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} engines: {node: '>=18.0.0'} hasBin: true tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.5.5: - resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==} + turbo-darwin-64@2.5.6: + resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.5: - resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==} + turbo-darwin-arm64@2.5.6: + resolution: {integrity: sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.5: - resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==} + turbo-linux-64@2.5.6: + resolution: {integrity: sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.5: - resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==} + turbo-linux-arm64@2.5.6: + resolution: {integrity: sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.5: - resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==} + turbo-windows-64@2.5.6: + resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.5: - resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==} + turbo-windows-arm64@2.5.6: + resolution: {integrity: sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==} cpu: [arm64] os: [win32] - turbo@2.5.5: - resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==} + turbo@2.5.6: + resolution: {integrity: sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==} hasBin: true type-check@0.4.0: @@ -7693,6 +7731,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + typesense@1.8.2: resolution: {integrity: sha512-aBpePjA99Qvo+OP2pJwMpvga4Jrm1Y2oV5NsrWXBxlqUDNEUCPZBIksPv2Hq0jxQxHhLLyJVbjXjByXsvpCDVA==} engines: {node: '>=18'} @@ -7761,8 +7804,8 @@ packages: unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - unplugin@2.3.5: - resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} + unplugin@2.3.10: + resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} engines: {node: '>=18.12.0'} update-browserslist-db@1.1.3: @@ -7884,8 +7927,8 @@ packages: vite: optional: true - vite@5.4.19: - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + vite@5.4.20: + resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8159,11 +8202,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 - '@asteasolutions/zod-to-openapi@7.3.4(zod@3.25.76)': dependencies: openapi3-ts: 4.5.0 @@ -8175,20 +8213,20 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.3': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -8199,33 +8237,33 @@ snapshots: '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.2 + browserslist: 4.25.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -8234,46 +8272,46 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -8283,86 +8321,86 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.3': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 - '@babel/parser@7.28.3': + '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.28.3)': + '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.3': {} + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@babel/traverse@7.28.3': + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -8376,16 +8414,16 @@ snapshots: '@bare-ts/lib': 0.4.0 commander: 11.1.0 - '@base-org/account@2.0.1(@types/react@18.3.23)(react@19.1.1)(typescript@5.8.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)': + '@base-org/account@2.0.1(@types/react@18.3.24)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.8.2)(zod@3.25.76) + ox: 0.6.9(typescript@5.9.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.37.8(typescript@5.8.2)(zod@3.25.76) - zustand: 5.0.3(@types/react@18.3.23)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) + viem: 2.37.8(typescript@5.9.2)(zod@3.25.76) + zustand: 5.0.3(@types/react@18.3.24)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -8396,39 +8434,39 @@ snapshots: - utf-8-validate - zod - '@biomejs/biome@2.1.4': + '@biomejs/biome@2.2.3': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.1.4 - '@biomejs/cli-darwin-x64': 2.1.4 - '@biomejs/cli-linux-arm64': 2.1.4 - '@biomejs/cli-linux-arm64-musl': 2.1.4 - '@biomejs/cli-linux-x64': 2.1.4 - '@biomejs/cli-linux-x64-musl': 2.1.4 - '@biomejs/cli-win32-arm64': 2.1.4 - '@biomejs/cli-win32-x64': 2.1.4 - - '@biomejs/cli-darwin-arm64@2.1.4': + '@biomejs/cli-darwin-arm64': 2.2.3 + '@biomejs/cli-darwin-x64': 2.2.3 + '@biomejs/cli-linux-arm64': 2.2.3 + '@biomejs/cli-linux-arm64-musl': 2.2.3 + '@biomejs/cli-linux-x64': 2.2.3 + '@biomejs/cli-linux-x64-musl': 2.2.3 + '@biomejs/cli-win32-arm64': 2.2.3 + '@biomejs/cli-win32-x64': 2.2.3 + + '@biomejs/cli-darwin-arm64@2.2.3': optional: true - '@biomejs/cli-darwin-x64@2.1.4': + '@biomejs/cli-darwin-x64@2.2.3': optional: true - '@biomejs/cli-linux-arm64-musl@2.1.4': + '@biomejs/cli-linux-arm64-musl@2.2.3': optional: true - '@biomejs/cli-linux-arm64@2.1.4': + '@biomejs/cli-linux-arm64@2.2.3': optional: true - '@biomejs/cli-linux-x64-musl@2.1.4': + '@biomejs/cli-linux-x64-musl@2.2.3': optional: true - '@biomejs/cli-linux-x64@2.1.4': + '@biomejs/cli-linux-x64@2.2.3': optional: true - '@biomejs/cli-win32-arm64@2.1.4': + '@biomejs/cli-win32-arm64@2.2.3': optional: true - '@biomejs/cli-win32-x64@2.1.4': + '@biomejs/cli-win32-x64@2.2.3': optional: true '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': @@ -8449,17 +8487,17 @@ snapshots: '@cbor-extract/cbor-extract-win32-x64@2.2.0': optional: true - '@clerk/clerk-js@5.95.0(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.8.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)': + '@clerk/clerk-js@5.95.0(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)': dependencies: - '@base-org/account': 2.0.1(@types/react@18.3.23)(react@19.1.1)(typescript@5.8.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76) + '@base-org/account': 2.0.1(@types/react@18.3.24)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76) '@clerk/localizations': 3.25.3 '@clerk/shared': 3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@clerk/types': 4.88.0 '@coinbase/wallet-sdk': 4.3.0 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.1(@types/react@18.3.23)(react@19.1.1) + '@emotion/react': 11.11.1(@types/react@18.3.24)(react@19.1.1) '@floating-ui/react': 0.27.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@floating-ui/react-dom': 2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@formkit/auto-animate': 0.8.4 '@stripe/stripe-js': 5.6.0 '@swc/helpers': 0.5.17 @@ -8520,29 +8558,29 @@ snapshots: dependencies: csstype: 3.1.3 - '@codemirror/autocomplete@6.18.6': + '@codemirror/autocomplete@6.18.7': dependencies: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 '@lezer/common': 1.2.3 '@codemirror/commands@6.8.1': dependencies: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 '@lezer/common': 1.2.3 '@codemirror/lang-javascript@6.2.4': dependencies: - '@codemirror/autocomplete': 6.18.6 + '@codemirror/autocomplete': 6.18.7 '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 '@lezer/common': 1.2.3 - '@lezer/javascript': 1.5.1 + '@lezer/javascript': 1.5.3 '@codemirror/lang-json@6.0.2': dependencies: @@ -8552,7 +8590,7 @@ snapshots: '@codemirror/language@6.11.3': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 @@ -8561,21 +8599,21 @@ snapshots: '@codemirror/lint@6.8.5': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 crelt: 1.0.6 '@codemirror/merge@6.10.2': dependencies: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 '@lezer/highlight': 1.2.1 style-mod: 4.1.2 '@codemirror/search@6.5.11': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 crelt: 1.0.6 '@codemirror/state@6.5.2': @@ -8586,10 +8624,10 @@ snapshots: dependencies: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 '@lezer/highlight': 1.2.1 - '@codemirror/view@6.38.1': + '@codemirror/view@6.38.2': dependencies: '@codemirror/state': 6.5.2 crelt: 1.0.6 @@ -8601,13 +8639,13 @@ snapshots: '@noble/hashes': 1.8.0 clsx: 1.2.1 eventemitter3: 5.0.1 - preact: 10.27.0 + preact: 10.27.1 '@corex/deepmerge@4.0.43': {} '@date-fns/utc@1.2.0': {} - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true @@ -8615,7 +8653,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -8642,9 +8680,9 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.11.1(@types/react@18.3.23)(react@19.1.1)': + '@emotion/react@11.11.1(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.3.3 @@ -8654,7 +8692,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 transitivePeerDependencies: - supports-color @@ -8684,7 +8722,7 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.25.8': + '@esbuild/aix-ppc64@0.25.9': optional: true '@esbuild/android-arm64@0.19.12': @@ -8693,7 +8731,7 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.25.8': + '@esbuild/android-arm64@0.25.9': optional: true '@esbuild/android-arm@0.19.12': @@ -8702,7 +8740,7 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.25.8': + '@esbuild/android-arm@0.25.9': optional: true '@esbuild/android-x64@0.19.12': @@ -8711,7 +8749,7 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.25.8': + '@esbuild/android-x64@0.25.9': optional: true '@esbuild/darwin-arm64@0.19.12': @@ -8720,7 +8758,7 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.25.8': + '@esbuild/darwin-arm64@0.25.9': optional: true '@esbuild/darwin-x64@0.19.12': @@ -8729,7 +8767,7 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.25.8': + '@esbuild/darwin-x64@0.25.9': optional: true '@esbuild/freebsd-arm64@0.19.12': @@ -8738,7 +8776,7 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.25.8': + '@esbuild/freebsd-arm64@0.25.9': optional: true '@esbuild/freebsd-x64@0.19.12': @@ -8747,7 +8785,7 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.25.8': + '@esbuild/freebsd-x64@0.25.9': optional: true '@esbuild/linux-arm64@0.19.12': @@ -8756,7 +8794,7 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.25.8': + '@esbuild/linux-arm64@0.25.9': optional: true '@esbuild/linux-arm@0.19.12': @@ -8765,7 +8803,7 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.25.8': + '@esbuild/linux-arm@0.25.9': optional: true '@esbuild/linux-ia32@0.19.12': @@ -8774,7 +8812,7 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.25.8': + '@esbuild/linux-ia32@0.25.9': optional: true '@esbuild/linux-loong64@0.19.12': @@ -8783,7 +8821,7 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.25.8': + '@esbuild/linux-loong64@0.25.9': optional: true '@esbuild/linux-mips64el@0.19.12': @@ -8792,7 +8830,7 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.25.8': + '@esbuild/linux-mips64el@0.25.9': optional: true '@esbuild/linux-ppc64@0.19.12': @@ -8801,7 +8839,7 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.25.8': + '@esbuild/linux-ppc64@0.25.9': optional: true '@esbuild/linux-riscv64@0.19.12': @@ -8810,7 +8848,7 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.25.8': + '@esbuild/linux-riscv64@0.25.9': optional: true '@esbuild/linux-s390x@0.19.12': @@ -8819,7 +8857,7 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.25.8': + '@esbuild/linux-s390x@0.25.9': optional: true '@esbuild/linux-x64@0.19.12': @@ -8828,10 +8866,10 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.25.8': + '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': + '@esbuild/netbsd-arm64@0.25.9': optional: true '@esbuild/netbsd-x64@0.19.12': @@ -8840,10 +8878,10 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.25.8': + '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': + '@esbuild/openbsd-arm64@0.25.9': optional: true '@esbuild/openbsd-x64@0.19.12': @@ -8852,10 +8890,10 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.25.8': + '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': + '@esbuild/openharmony-arm64@0.25.9': optional: true '@esbuild/sunos-x64@0.19.12': @@ -8864,7 +8902,7 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.25.8': + '@esbuild/sunos-x64@0.25.9': optional: true '@esbuild/win32-arm64@0.19.12': @@ -8873,7 +8911,7 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.25.9': optional: true '@esbuild/win32-ia32@0.19.12': @@ -8882,7 +8920,7 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.25.8': + '@esbuild/win32-ia32@0.25.9': optional: true '@esbuild/win32-x64@0.19.12': @@ -8891,7 +8929,7 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.25.8': + '@esbuild/win32-x64@0.25.9': optional: true '@eslint/eslintrc@1.4.1': @@ -8912,20 +8950,20 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.3': + '@floating-ui/dom@1.7.4': dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@floating-ui/react-dom@2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@floating-ui/dom': 1.7.3 + '@floating-ui/dom': 1.7.4 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) '@floating-ui/react@0.26.28(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@floating-ui/utils': 0.2.10 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -8933,7 +8971,7 @@ snapshots: '@floating-ui/react@0.27.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@floating-ui/utils': 0.2.10 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -8957,7 +8995,7 @@ snapshots: dependencies: '@fortawesome/fontawesome-common-types': 6.7.2 - '@fortawesome/react-fontawesome@0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1)': + '@fortawesome/react-fontawesome@0.2.6(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1)': dependencies: '@fortawesome/fontawesome-svg-core': 6.7.2 prop-types: 15.8.1 @@ -8983,26 +9021,26 @@ snapshots: dependencies: react: 19.1.1 - '@hono/node-server@1.18.2(hono@4.8.12)': + '@hono/node-server@1.19.1(hono@4.9.6)': dependencies: - hono: 4.8.12 + hono: 4.9.6 - '@hono/standard-validator@0.1.5(@standard-schema/spec@1.0.0)(hono@4.8.12)': + '@hono/standard-validator@0.1.5(@standard-schema/spec@1.0.0)(hono@4.9.6)': dependencies: '@standard-schema/spec': 1.0.0 - hono: 4.8.12 + hono: 4.9.6 - '@hono/zod-openapi@0.19.10(hono@4.8.12)(zod@3.25.76)': + '@hono/zod-openapi@0.19.10(hono@4.9.6)(zod@3.25.76)': dependencies: '@asteasolutions/zod-to-openapi': 7.3.4(zod@3.25.76) - '@hono/zod-validator': 0.7.3(hono@4.8.12)(zod@3.25.76) - hono: 4.8.12 + '@hono/zod-validator': 0.7.3(hono@4.9.6)(zod@3.25.76) + hono: 4.9.6 openapi3-ts: 4.5.0 zod: 3.25.76 - '@hono/zod-validator@0.7.3(hono@4.8.12)(zod@3.25.76)': + '@hono/zod-validator@0.7.3(hono@4.9.6)(zod@3.25.76)': dependencies: - hono: 4.8.12 + hono: 4.9.6 zod: 3.25.76 '@hookform/resolvers@3.10.0(react-hook-form@7.62.0(react@19.1.1))': @@ -9159,12 +9197,12 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.4.5 + '@emnapi/runtime': 1.5.0 optional: true '@img/sharp-wasm32@0.34.3': dependencies: - '@emnapi/runtime': 1.4.5 + '@emnapi/runtime': 1.5.0 optional: true '@img/sharp-win32-arm64@0.34.3': @@ -9200,7 +9238,7 @@ snapshots: '@inquirer/figures': 1.0.13 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.17.0 + '@types/node': 22.18.1 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -9282,7 +9320,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -9296,6 +9334,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': @@ -9318,7 +9361,7 @@ snapshots: dependencies: '@lezer/common': 1.2.3 - '@lezer/javascript@1.5.1': + '@lezer/javascript@1.5.3': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -9342,12 +9385,12 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} - '@mdx-js/loader@3.1.1(webpack@5.101.3(esbuild@0.25.8))': + '@mdx-js/loader@3.1.1(webpack@5.101.3(esbuild@0.25.9))': dependencies: '@mdx-js/mdx': 3.1.1 source-map: 0.7.6 optionalDependencies: - webpack: 5.101.3(esbuild@0.25.8) + webpack: 5.101.3(esbuild@0.25.9) transitivePeerDependencies: - supports-color @@ -9381,47 +9424,47 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@18.3.23)(react@19.1.1)': + '@mdx-js/react@3.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.23 + '@types/react': 18.3.24 react: 19.1.1 - '@microsoft/api-extractor-model@7.28.13(@types/node@20.19.9)': + '@microsoft/api-extractor-model@7.28.13(@types/node@20.19.13)': dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@20.19.9) + '@rushstack/node-core-library': 4.0.2(@types/node@20.19.13) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.28.13(@types/node@22.17.0)': + '@microsoft/api-extractor-model@7.28.13(@types/node@22.18.1)': dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@22.17.0) + '@rushstack/node-core-library': 4.0.2(@types/node@22.18.1) transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/api-extractor-model@7.28.13(@types/node@24.3.0)': + '@microsoft/api-extractor-model@7.28.13(@types/node@24.3.1)': dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@24.3.0) + '@rushstack/node-core-library': 4.0.2(@types/node@24.3.1) transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/api-extractor@7.43.0(@types/node@20.19.9)': + '@microsoft/api-extractor@7.43.0(@types/node@20.19.13)': dependencies: - '@microsoft/api-extractor-model': 7.28.13(@types/node@20.19.9) + '@microsoft/api-extractor-model': 7.28.13(@types/node@20.19.13) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@20.19.9) + '@rushstack/node-core-library': 4.0.2(@types/node@20.19.13) '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.10.0(@types/node@20.19.9) - '@rushstack/ts-command-line': 4.19.1(@types/node@20.19.9) + '@rushstack/terminal': 0.10.0(@types/node@20.19.13) + '@rushstack/ts-command-line': 4.19.1(@types/node@20.19.13) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -9431,15 +9474,15 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.43.0(@types/node@22.17.0)': + '@microsoft/api-extractor@7.43.0(@types/node@22.18.1)': dependencies: - '@microsoft/api-extractor-model': 7.28.13(@types/node@22.17.0) + '@microsoft/api-extractor-model': 7.28.13(@types/node@22.18.1) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@22.17.0) + '@rushstack/node-core-library': 4.0.2(@types/node@22.18.1) '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.10.0(@types/node@22.17.0) - '@rushstack/ts-command-line': 4.19.1(@types/node@22.17.0) + '@rushstack/terminal': 0.10.0(@types/node@22.18.1) + '@rushstack/ts-command-line': 4.19.1(@types/node@22.18.1) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -9450,15 +9493,15 @@ snapshots: - '@types/node' optional: true - '@microsoft/api-extractor@7.43.0(@types/node@24.3.0)': + '@microsoft/api-extractor@7.43.0(@types/node@24.3.1)': dependencies: - '@microsoft/api-extractor-model': 7.28.13(@types/node@24.3.0) + '@microsoft/api-extractor-model': 7.28.13(@types/node@24.3.1) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@24.3.0) + '@rushstack/node-core-library': 4.0.2(@types/node@24.3.1) '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.10.0(@types/node@24.3.0) - '@rushstack/ts-command-line': 4.19.1(@types/node@24.3.0) + '@rushstack/terminal': 0.10.0(@types/node@24.3.1) + '@rushstack/ts-command-line': 4.19.1(@types/node@24.3.1) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -9488,12 +9531,12 @@ snapshots: dependencies: glob: 7.1.7 - '@next/mdx@15.5.2(@mdx-js/loader@3.1.1(webpack@5.101.3(esbuild@0.25.8)))(@mdx-js/react@3.1.1(@types/react@18.3.23)(react@19.1.1))': + '@next/mdx@15.5.2(@mdx-js/loader@3.1.1(webpack@5.101.3(esbuild@0.25.9)))(@mdx-js/react@3.1.1(@types/react@18.3.24)(react@19.1.1))': dependencies: source-map: 0.7.6 optionalDependencies: - '@mdx-js/loader': 3.1.1(webpack@5.101.3(esbuild@0.25.8)) - '@mdx-js/react': 3.1.1(@types/react@18.3.23)(react@19.1.1) + '@mdx-js/loader': 3.1.1(webpack@5.101.3(esbuild@0.25.9)) + '@mdx-js/react': 3.1.1(@types/react@18.3.24)(react@19.1.1) '@next/swc-darwin-arm64@15.5.2': optional: true @@ -9615,576 +9658,578 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@posthog/core@1.0.2': {} + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-context@1.1.2(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-context@1.1.2(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@18.3.23)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-direction@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-direction@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-id@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-id@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-label@2.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-label@2.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@18.3.23)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-popover@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@18.3.23)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@19.1.1) '@radix-ui/rect': 1.1.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-progress@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-select@2.2.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-select@2.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@18.3.23)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-separator@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-slider@1.3.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-slot@1.2.3(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-slot@1.2.3(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-switch@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-use-size@1.1.1(@types/react@18.3.23)(react@19.1.1)': + '@radix-ui/react-use-size@1.1.1(@types/react@18.3.24)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 - '@types/react-dom': 18.3.7(@types/react@18.3.23) + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) '@radix-ui/rect@1.1.1': {} @@ -10244,7 +10289,7 @@ snapshots: axios: 0.27.2 basic-auth: 2.0.1 buffer: 6.0.3 - js-base64: 3.7.7 + js-base64: 3.7.8 url-join: 4.0.1 transitivePeerDependencies: - debug @@ -10253,7 +10298,7 @@ snapshots: dependencies: cross-fetch: 4.1.0 form-data: 4.0.4 - js-base64: 3.7.7 + js-base64: 3.7.8 node-fetch: 2.7.0 qs: 6.14.0 readable-stream: 4.7.0 @@ -10261,28 +10306,6 @@ snapshots: transitivePeerDependencies: - encoding - '@rivet-gg/icons@file:frontend/vendor/rivet-icons.tgz(@fortawesome/fontawesome-svg-core@6.7.2)(@fortawesome/free-brands-svg-icons@6.7.2)(@fortawesome/free-solid-svg-icons@6.7.2)(@fortawesome/react-fontawesome@0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1))(@types/node@20.19.9)(babel-plugin-macros@3.1.0)(less@4.4.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)': - dependencies: - '@fortawesome/fontawesome-svg-core': 6.7.2 - '@fortawesome/free-brands-svg-icons': 6.7.2 - '@fortawesome/free-solid-svg-icons': 6.7.2 - '@fortawesome/react-fontawesome': 0.2.3(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1) - dedent: 1.6.0(babel-plugin-macros@3.1.0) - local-pkg: 0.5.1 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - vite: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - terser - '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-dev/engine/@rivetkit/engine-runner-protocol@b72b2324c50c5449ed1844a060928d80d1151839': dependencies: '@bare-ts/lib': 0.4.0 @@ -10306,79 +10329,82 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/pluginutils@5.2.0(rollup@4.46.2)': + '@rollup/pluginutils@5.3.0(rollup@4.50.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.46.2 + rollup: 4.50.1 + + '@rollup/rollup-android-arm-eabi@4.50.1': + optional: true - '@rollup/rollup-android-arm-eabi@4.46.2': + '@rollup/rollup-android-arm64@4.50.1': optional: true - '@rollup/rollup-android-arm64@4.46.2': + '@rollup/rollup-darwin-arm64@4.50.1': optional: true - '@rollup/rollup-darwin-arm64@4.46.2': + '@rollup/rollup-darwin-x64@4.50.1': optional: true - '@rollup/rollup-darwin-x64@4.46.2': + '@rollup/rollup-freebsd-arm64@4.50.1': optional: true - '@rollup/rollup-freebsd-arm64@4.46.2': + '@rollup/rollup-freebsd-x64@4.50.1': optional: true - '@rollup/rollup-freebsd-x64@4.46.2': + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + '@rollup/rollup-linux-arm-musleabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.2': + '@rollup/rollup-linux-arm64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.2': + '@rollup/rollup-linux-arm64-musl@4.50.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.2': + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + '@rollup/rollup-linux-ppc64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-musl@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.2': + '@rollup/rollup-linux-s390x-gnu@4.50.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.2': + '@rollup/rollup-linux-x64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.2': + '@rollup/rollup-linux-x64-musl@4.50.1': optional: true - '@rollup/rollup-linux-x64-musl@4.46.2': + '@rollup/rollup-openharmony-arm64@4.50.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.2': + '@rollup/rollup-win32-arm64-msvc@4.50.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.2': + '@rollup/rollup-win32-ia32-msvc@4.50.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.2': + '@rollup/rollup-win32-x64-msvc@4.50.1': optional: true '@rtsao/scc@1.1.0': {} '@rushstack/eslint-patch@1.12.0': {} - '@rushstack/node-core-library@4.0.2(@types/node@20.19.9)': + '@rushstack/node-core-library@4.0.2(@types/node@20.19.13)': dependencies: fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -10387,9 +10413,9 @@ snapshots: semver: 7.5.4 z-schema: 5.0.5 optionalDependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.13 - '@rushstack/node-core-library@4.0.2(@types/node@22.17.0)': + '@rushstack/node-core-library@4.0.2(@types/node@22.18.1)': dependencies: fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -10398,10 +10424,10 @@ snapshots: semver: 7.5.4 z-schema: 5.0.5 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.1 optional: true - '@rushstack/node-core-library@4.0.2(@types/node@24.3.0)': + '@rushstack/node-core-library@4.0.2(@types/node@24.3.1)': dependencies: fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -10410,7 +10436,7 @@ snapshots: semver: 7.5.4 z-schema: 5.0.5 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 24.3.1 optional: true '@rushstack/rig-package@0.5.2': @@ -10418,41 +10444,41 @@ snapshots: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.10.0(@types/node@20.19.9)': + '@rushstack/terminal@0.10.0(@types/node@20.19.13)': dependencies: - '@rushstack/node-core-library': 4.0.2(@types/node@20.19.9) + '@rushstack/node-core-library': 4.0.2(@types/node@20.19.13) supports-color: 8.1.1 optionalDependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.13 - '@rushstack/terminal@0.10.0(@types/node@22.17.0)': + '@rushstack/terminal@0.10.0(@types/node@22.18.1)': dependencies: - '@rushstack/node-core-library': 4.0.2(@types/node@22.17.0) + '@rushstack/node-core-library': 4.0.2(@types/node@22.18.1) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.1 optional: true - '@rushstack/terminal@0.10.0(@types/node@24.3.0)': + '@rushstack/terminal@0.10.0(@types/node@24.3.1)': dependencies: - '@rushstack/node-core-library': 4.0.2(@types/node@24.3.0) + '@rushstack/node-core-library': 4.0.2(@types/node@24.3.1) supports-color: 8.1.1 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 24.3.1 optional: true - '@rushstack/ts-command-line@4.19.1(@types/node@20.19.9)': + '@rushstack/ts-command-line@4.19.1(@types/node@20.19.13)': dependencies: - '@rushstack/terminal': 0.10.0(@types/node@20.19.9) + '@rushstack/terminal': 0.10.0(@types/node@20.19.13) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@4.19.1(@types/node@22.17.0)': + '@rushstack/ts-command-line@4.19.1(@types/node@22.18.1)': dependencies: - '@rushstack/terminal': 0.10.0(@types/node@22.17.0) + '@rushstack/terminal': 0.10.0(@types/node@22.18.1) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -10460,9 +10486,9 @@ snapshots: - '@types/node' optional: true - '@rushstack/ts-command-line@4.19.1(@types/node@24.3.0)': + '@rushstack/ts-command-line@4.19.1(@types/node@24.3.1)': dependencies: - '@rushstack/terminal': 0.10.0(@types/node@24.3.0) + '@rushstack/terminal': 0.10.0(@types/node@24.3.1) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -10474,7 +10500,7 @@ snapshots: '@scure/bip32@1.7.0': dependencies: - '@noble/curves': 1.9.1 + '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 @@ -10513,7 +10539,7 @@ snapshots: '@sentry/bundler-plugin-core@2.23.1': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@sentry/babel-plugin-component-annotate': 2.23.1 '@sentry/cli': 2.39.1 dotenv: 16.6.1 @@ -10591,9 +10617,9 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.9.2': + '@shikijs/core@3.12.2': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 @@ -10604,9 +10630,9 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 2.3.0 - '@shikijs/engine-javascript@3.9.2': + '@shikijs/engine-javascript@3.12.2': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 @@ -10615,43 +10641,43 @@ snapshots: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.9.2': + '@shikijs/engine-oniguruma@3.12.2': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/langs@3.9.2': + '@shikijs/langs@3.12.2': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.12.2 '@shikijs/themes@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/themes@3.9.2': + '@shikijs/themes@3.12.2': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.12.2 '@shikijs/transformers@1.29.2': dependencies: '@shikijs/core': 1.29.2 '@shikijs/types': 1.29.2 - '@shikijs/transformers@3.9.2': + '@shikijs/transformers@3.12.2': dependencies: - '@shikijs/core': 3.9.2 - '@shikijs/types': 3.9.2 + '@shikijs/core': 3.12.2 + '@shikijs/types': 3.12.2 '@shikijs/types@1.29.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.9.2': + '@shikijs/types@3.12.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -10702,25 +10728,25 @@ snapshots: '@tanstack/history@1.131.2': {} - '@tanstack/query-core@5.85.3': {} + '@tanstack/query-core@5.87.1': {} - '@tanstack/query-devtools@5.84.0': {} + '@tanstack/query-devtools@5.87.3': {} - '@tanstack/react-query-devtools@5.85.3(@tanstack/react-query@5.85.3(react@19.1.1))(react@19.1.1)': + '@tanstack/react-query-devtools@5.87.3(@tanstack/react-query@5.87.1(react@19.1.1))(react@19.1.1)': dependencies: - '@tanstack/query-devtools': 5.84.0 - '@tanstack/react-query': 5.85.3(react@19.1.1) + '@tanstack/query-devtools': 5.87.3 + '@tanstack/react-query': 5.87.1(react@19.1.1) react: 19.1.1 - '@tanstack/react-query@5.85.3(react@19.1.1)': + '@tanstack/react-query@5.87.1(react@19.1.1)': dependencies: - '@tanstack/query-core': 5.85.3 + '@tanstack/query-core': 5.87.1 react: 19.1.1 - '@tanstack/react-router-devtools@1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.14)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)': + '@tanstack/react-router-devtools@1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/react-router': 1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tanstack/router-devtools-core': 1.131.14(@tanstack/router-core@1.131.14)(csstype@3.1.3)(solid-js@1.9.9)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/router-devtools-core': 1.131.36(@tanstack/router-core@1.131.36)(csstype@3.1.3)(solid-js@1.9.9)(tiny-invariant@1.3.3) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: @@ -10729,20 +10755,20 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/react-store': 0.7.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tanstack/router-core': 1.131.14 - isbot: 5.1.29 + '@tanstack/react-store': 0.7.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/router-core': 1.131.36 + isbot: 5.1.30 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-store@0.7.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@tanstack/react-store@0.7.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@tanstack/store': 0.7.2 + '@tanstack/store': 0.7.5 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) use-sync-external-store: 1.5.0(react@19.1.1) @@ -10759,19 +10785,19 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@tanstack/router-core@1.131.14': + '@tanstack/router-core@1.131.36': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/store': 0.7.2 + '@tanstack/store': 0.7.5 cookie-es: 1.2.2 seroval: 1.3.2 - seroval-plugins: 1.3.2(seroval@1.3.2) + seroval-plugins: 1.3.3(seroval@1.3.2) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.131.14(@tanstack/router-core@1.131.14)(csstype@3.1.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.131.36(@tanstack/router-core@1.131.36)(csstype@3.1.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.131.14 + '@tanstack/router-core': 1.131.36 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.9 @@ -10779,10 +10805,10 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools@1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.14)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools@1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/react-router': 1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tanstack/react-router-devtools': 1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.14)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/react-router-devtools': 1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) react: 19.1.1 @@ -10794,54 +10820,54 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/router-generator@1.131.14': + '@tanstack/router-generator@1.131.36': dependencies: - '@tanstack/router-core': 1.131.14 + '@tanstack/router-core': 1.131.36 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 prettier: 3.6.2 recast: 0.23.11 source-map: 0.7.6 - tsx: 4.20.3 + tsx: 4.20.5 zod: 3.25.76 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.131.15(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1))(webpack@5.101.3(esbuild@0.25.8))': + '@tanstack/router-plugin@1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0))(webpack@5.101.3(esbuild@0.25.9))': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 - '@tanstack/router-core': 1.131.14 - '@tanstack/router-generator': 1.131.14 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@tanstack/router-core': 1.131.36 + '@tanstack/router-generator': 1.131.36 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 babel-dead-code-elimination: 1.0.10 chokidar: 3.6.0 - unplugin: 2.3.5 + unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - vite: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) - webpack: 5.101.3(esbuild@0.25.8) + '@tanstack/react-router': 1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + vite: 5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) + webpack: 5.101.3(esbuild@0.25.9) transitivePeerDependencies: - supports-color '@tanstack/router-utils@1.131.2': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) + '@babel/parser': 7.28.4 + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) ansis: 4.1.0 diff: 8.0.2 transitivePeerDependencies: - supports-color - '@tanstack/store@0.7.2': {} + '@tanstack/store@0.7.5': {} '@tanstack/table-core@8.21.3': {} @@ -10849,43 +10875,43 @@ snapshots: '@tanstack/virtual-file-routes@1.131.2': {} - '@tanstack/zod-adapter@1.131.14(@tanstack/react-router@1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@3.25.76)': + '@tanstack/zod-adapter@1.131.36(@tanstack/react-router@1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@3.25.76)': dependencies: - '@tanstack/react-router': 1.131.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/react-router': 1.131.36(react-dom@19.1.1(react@19.1.1))(react@19.1.1) zod: 3.25.76 '@types/argparse@1.0.38': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@types/basic-auth@1.1.8': dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 '@types/bcryptjs@2.4.6': {} '@types/cors@2.8.19': dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 '@types/d3-array@3.2.1': {} @@ -10951,6 +10977,8 @@ snapshots: '@types/json5@0.0.29': {} + '@types/lodash@4.17.20': {} + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 @@ -10971,24 +10999,24 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 '@types/node-fetch@2.6.11': dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 form-data: 4.0.4 '@types/node@17.0.33': {} - '@types/node@20.19.9': + '@types/node@20.19.13': dependencies: undici-types: 6.21.0 - '@types/node@22.17.0': + '@types/node@22.18.1': dependencies: undici-types: 6.21.0 - '@types/node@24.3.0': + '@types/node@24.3.1': dependencies: undici-types: 7.10.0 @@ -11006,18 +11034,18 @@ snapshots: '@types/qs@6.9.8': {} - '@types/react-dom@18.3.7(@types/react@18.3.23)': + '@types/react-dom@18.3.7(@types/react@18.3.24)': dependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - '@types/react@18.3.23': + '@types/react@18.3.24': dependencies: '@types/prop-types': 15.7.15 csstype: 3.1.3 '@types/readable-stream@4.0.21': dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 '@types/retry@0.12.2': {} @@ -11033,17 +11061,17 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 - '@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.8.2)': + '@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) debug: 4.4.1 eslint: 8.26.0 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -11054,7 +11082,7 @@ snapshots: '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.2)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -11062,9 +11090,9 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.2 - tsutils: 3.21.0(typescript@5.8.2) + tsutils: 3.21.0(typescript@5.9.2) optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -11073,38 +11101,38 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@uiw/codemirror-extensions-basic-setup@4.25.1(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1)': + '@uiw/codemirror-extensions-basic-setup@4.25.1(@codemirror/autocomplete@6.18.7)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2)': dependencies: - '@codemirror/autocomplete': 6.18.6 + '@codemirror/autocomplete': 6.18.7 '@codemirror/commands': 6.8.1 '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/search': 6.5.11 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 - '@uiw/codemirror-theme-github@4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1)': + '@uiw/codemirror-theme-github@4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2)': dependencies: - '@uiw/codemirror-themes': 4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1) + '@uiw/codemirror-themes': 4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2) transitivePeerDependencies: - '@codemirror/language' - '@codemirror/state' - '@codemirror/view' - '@uiw/codemirror-themes@4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1)': + '@uiw/codemirror-themes@4.25.1(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2)': dependencies: '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 - '@uiw/react-codemirror@4.25.1(@babel/runtime@7.28.3)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.1)(codemirror@6.0.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@uiw/react-codemirror@4.25.1(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.18.7)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.2)(codemirror@6.0.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@codemirror/commands': 6.8.1 '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.3 - '@codemirror/view': 6.38.1 - '@uiw/codemirror-extensions-basic-setup': 4.25.1(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.1) + '@codemirror/view': 6.38.2 + '@uiw/codemirror-extensions-basic-setup': 4.25.1(@codemirror/autocomplete@6.18.7)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.2) codemirror: 6.0.2 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -11116,15 +11144,15 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1))': + '@vitejs/plugin-react@4.7.0(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0))': dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + vite: 5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - supports-color @@ -11142,7 +11170,7 @@ snapshots: '@vitest/snapshot@1.6.1': dependencies: - magic-string: 0.30.17 + magic-string: 0.30.19 pathe: 1.1.2 pretty-format: 29.7.0 @@ -11170,34 +11198,34 @@ snapshots: '@volar/language-core': 1.11.1 path-browserify: 1.0.1 - '@vue/compiler-core@3.5.20': + '@vue/compiler-core@3.5.21': dependencies: - '@babel/parser': 7.28.3 - '@vue/shared': 3.5.20 + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.21 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.20': + '@vue/compiler-dom@3.5.21': dependencies: - '@vue/compiler-core': 3.5.20 - '@vue/shared': 3.5.20 + '@vue/compiler-core': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/language-core@1.8.27(typescript@5.8.2)': + '@vue/language-core@1.8.27(typescript@5.9.2)': dependencies: '@volar/language-core': 1.11.1 '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.5.20 - '@vue/shared': 3.5.20 + '@vue/compiler-dom': 3.5.21 + '@vue/shared': 3.5.21 computeds: 0.0.1 minimatch: 9.0.5 muggle-string: 0.3.1 path-browserify: 1.0.1 vue-template-compiler: 2.7.16 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 - '@vue/shared@3.5.20': {} + '@vue/shared@3.5.21': {} '@webassemblyjs/ast@1.14.1': dependencies: @@ -11285,14 +11313,14 @@ snapshots: '@zxcvbn-ts/language-common@3.0.4': {} - abitype@1.1.0(typescript@5.8.2)(zod@3.25.76): + abitype@1.1.0(typescript@5.9.2)(zod@3.25.76): optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 zod: 3.25.76 - abitype@1.1.1(typescript@5.8.2)(zod@3.25.76): + abitype@1.1.1(typescript@5.9.2)(zod@3.25.76): optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 zod: 3.25.76 abort-controller@3.0.0: @@ -11321,7 +11349,7 @@ snapshots: actor-core@0.6.3(ws@8.18.3): dependencies: cbor-x: 1.6.0 - hono: 4.8.12 + hono: 4.9.6 on-change: 5.0.1 p-retry: 6.2.1 zod: 3.25.76 @@ -11369,7 +11397,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: @@ -11377,7 +11405,7 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} ansis@4.1.0: {} @@ -11489,8 +11517,8 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.25.2 - caniuse-lite: 1.0.30001735 + browserslist: 4.25.4 + caniuse-lite: 1.0.30001741 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -11524,16 +11552,16 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 cosmiconfig: 7.1.0 resolve: 1.22.10 @@ -11544,7 +11572,7 @@ snapshots: bare-events@2.6.1: optional: true - bare-fs@4.2.2: + bare-fs@4.3.2: dependencies: bare-events: 2.6.1 bare-path: 3.0.0 @@ -11603,12 +11631,12 @@ snapshots: dependencies: lodash: 4.17.21 - browserslist@4.25.2: + browserslist@4.25.4: dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.202 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.2) + caniuse-lite: 1.0.30001741 + electron-to-chromium: 1.5.215 + node-releases: 2.0.20 + update-browserslist-db: 1.1.3(browserslist@4.25.4) buffer-from@1.1.2: {} @@ -11622,9 +11650,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.25.8): + bundle-require@5.1.0(esbuild@0.25.9): dependencies: - esbuild: 0.25.8 + esbuild: 0.25.9 load-tsconfig: 0.2.5 cac@6.7.14: {} @@ -11650,7 +11678,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001735: {} + caniuse-lite@1.0.30001741: {} cbor-extract@2.2.0: dependencies: @@ -11740,12 +11768,12 @@ snapshots: clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + cmdk@1.1.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: @@ -11754,13 +11782,13 @@ snapshots: codemirror@6.0.2: dependencies: - '@codemirror/autocomplete': 6.18.6 + '@codemirror/autocomplete': 6.18.7 '@codemirror/commands': 6.8.1 '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/search': 6.5.11 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.2 collapse-white-space@2.1.0: {} @@ -11821,7 +11849,7 @@ snapshots: core-js@3.41.0: {} - core-js@3.45.0: {} + core-js@3.45.1: {} core-util-is@1.0.3: {} @@ -11946,7 +11974,7 @@ snapshots: dependencies: mimic-response: 3.1.0 - dedent@1.6.0(babel-plugin-macros@3.1.0): + dedent@1.7.0(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 @@ -12007,7 +12035,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 csstype: 3.1.3 dotenv@16.6.1: {} @@ -12020,7 +12048,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.202: {} + electron-to-chromium@1.5.215: {} emoji-regex-xs@1.0.0: {} @@ -12051,7 +12079,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 20.19.9 + '@types/node': 24.3.1 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -12249,34 +12277,34 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.8: + esbuild@0.25.9: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 escalade@3.2.0: {} @@ -12286,20 +12314,20 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@13.0.2(eslint@8.26.0)(typescript@5.8.2): + eslint-config-next@13.0.2(eslint@8.26.0)(typescript@5.9.2): dependencies: '@next/eslint-plugin-next': 13.0.2 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.26.0)(typescript@5.8.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.26.0)(typescript@5.9.2) eslint: 8.26.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.8.2))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.9.2))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.26.0) eslint-plugin-react: 7.37.5(eslint@8.26.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.26.0) optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -12316,7 +12344,7 @@ snapshots: dependencies: debug: 4.4.1 eslint: 8.26.0 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.8.2))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.9.2))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0) glob: 7.2.3 is-glob: 4.0.3 resolve: 1.22.10 @@ -12324,18 +12352,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.26.0)(typescript@5.8.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.26.0)(typescript@5.9.2) eslint: 8.26.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.8.2))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.9.2))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -12346,7 +12374,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.26.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.26.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.32.0(eslint@8.26.0))(eslint@8.26.0))(eslint@8.26.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -12358,7 +12386,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.26.0)(typescript@5.8.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.26.0)(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -12602,7 +12630,7 @@ snapshots: sharp: 0.33.5 xml2js: 0.6.2 - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -12616,14 +12644,16 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.101.3(esbuild@0.25.8)): + file-loader@6.2.0(webpack@5.101.3(esbuild@0.25.9)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.3(esbuild@0.25.8) + webpack: 5.101.3(esbuild@0.25.9) file-saver@2.0.5: {} + filesize@11.0.2: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -12637,9 +12667,9 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: - magic-string: 0.30.17 - mlly: 1.7.4 - rollup: 4.46.2 + magic-string: 0.30.19 + mlly: 1.8.0 + rollup: 4.50.1 flat-cache@3.2.0: dependencies: @@ -12681,6 +12711,15 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) + framer-motion@12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + motion-dom: 12.23.12 + motion-utils: 12.23.6 + tslib: 2.8.1 + optionalDependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + fs-constants@1.0.0: {} fs-extra@7.0.1: @@ -12992,7 +13031,7 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.8.12: {} + hono@4.9.6: {} html-url-attributes@3.0.1: {} @@ -13218,7 +13257,7 @@ snapshots: isarray@2.0.5: {} - isbot@5.1.29: {} + isbot@5.1.30: {} isexe@2.0.0: {} @@ -13243,7 +13282,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.19.9 + '@types/node': 24.3.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -13251,20 +13290,20 @@ snapshots: jju@1.4.0: {} - jotai-effect@2.0.5(jotai@2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@18.3.23)(react@19.1.1)): + jotai-effect@2.1.0(jotai@2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@18.3.24)(react@19.1.1)): dependencies: - jotai: 2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@18.3.23)(react@19.1.1) + jotai: 2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@18.3.24)(react@19.1.1) - jotai@2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@18.3.23)(react@19.1.1): + jotai@2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@18.3.24)(react@19.1.1): optionalDependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/template': 7.27.2 - '@types/react': 18.3.23 + '@types/react': 18.3.24 react: 19.1.1 joycon@3.1.1: {} - js-base64@3.7.7: {} + js-base64@3.7.8: {} js-cookie@3.0.5: {} @@ -13326,48 +13365,48 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 - lefthook-darwin-arm64@1.12.3: + lefthook-darwin-arm64@1.12.4: optional: true - lefthook-darwin-x64@1.12.3: + lefthook-darwin-x64@1.12.4: optional: true - lefthook-freebsd-arm64@1.12.3: + lefthook-freebsd-arm64@1.12.4: optional: true - lefthook-freebsd-x64@1.12.3: + lefthook-freebsd-x64@1.12.4: optional: true - lefthook-linux-arm64@1.12.3: + lefthook-linux-arm64@1.12.4: optional: true - lefthook-linux-x64@1.12.3: + lefthook-linux-x64@1.12.4: optional: true - lefthook-openbsd-arm64@1.12.3: + lefthook-openbsd-arm64@1.12.4: optional: true - lefthook-openbsd-x64@1.12.3: + lefthook-openbsd-x64@1.12.4: optional: true - lefthook-windows-arm64@1.12.3: + lefthook-windows-arm64@1.12.4: optional: true - lefthook-windows-x64@1.12.3: + lefthook-windows-x64@1.12.4: optional: true - lefthook@1.12.3: + lefthook@1.12.4: optionalDependencies: - lefthook-darwin-arm64: 1.12.3 - lefthook-darwin-x64: 1.12.3 - lefthook-freebsd-arm64: 1.12.3 - lefthook-freebsd-x64: 1.12.3 - lefthook-linux-arm64: 1.12.3 - lefthook-linux-x64: 1.12.3 - lefthook-openbsd-arm64: 1.12.3 - lefthook-openbsd-x64: 1.12.3 - lefthook-windows-arm64: 1.12.3 - lefthook-windows-x64: 1.12.3 + lefthook-darwin-arm64: 1.12.4 + lefthook-darwin-x64: 1.12.4 + lefthook-freebsd-arm64: 1.12.4 + lefthook-freebsd-x64: 1.12.4 + lefthook-linux-arm64: 1.12.4 + lefthook-linux-x64: 1.12.4 + lefthook-openbsd-arm64: 1.12.4 + lefthook-openbsd-x64: 1.12.4 + lefthook-windows-arm64: 1.12.4 + lefthook-windows-x64: 1.12.4 less@4.4.1: dependencies: @@ -13426,7 +13465,7 @@ snapshots: local-pkg@0.5.1: dependencies: - mlly: 1.7.4 + mlly: 1.8.0 pkg-types: 1.3.1 locate-path@6.0.0: @@ -13477,7 +13516,7 @@ snapshots: dependencies: react: 19.1.1 - magic-string@0.30.17: + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -14022,7 +14061,7 @@ snapshots: mkdirp-classic@0.5.3: {} - mlly@1.7.4: + mlly@1.8.0: dependencies: acorn: 8.15.0 pathe: 2.0.3 @@ -14033,8 +14072,14 @@ snapshots: dependencies: motion-utils: 11.18.1 + motion-dom@12.23.12: + dependencies: + motion-utils: 12.23.6 + motion-utils@11.18.1: {} + motion-utils@12.23.6: {} + ms@2.1.3: {} muggle-string@0.3.1: {} @@ -14082,7 +14127,7 @@ snapshots: dependencies: '@next/env': 15.5.2 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001735 + caniuse-lite: 1.0.30001741 postcss: 8.4.31 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -14102,7 +14147,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - node-abi@3.75.0: + node-abi@3.77.0: dependencies: semver: 7.7.2 @@ -14120,7 +14165,7 @@ snapshots: detect-libc: 2.0.4 optional: true - node-releases@2.0.19: {} + node-releases@2.0.20: {} normalize-path@3.0.0: {} @@ -14221,21 +14266,21 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.9(typescript@5.8.2)(zod@3.25.76): + ox@0.6.9(typescript@5.9.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.1(typescript@5.8.2)(zod@3.25.76) + abitype: 1.1.1(typescript@5.9.2)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - zod - ox@0.9.6(typescript@5.8.2)(zod@3.25.76): + ox@0.9.6(typescript@5.9.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -14243,10 +14288,10 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.8.2)(zod@3.25.76) + abitype: 1.1.1(typescript@5.9.2)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - zod @@ -14364,7 +14409,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 + mlly: 1.8.0 pathe: 2.0.3 possible-typed-array-names@1.1.0: {} @@ -14400,13 +14445,13 @@ snapshots: optionalDependencies: postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.1): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(yaml@2.8.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.6 - tsx: 4.20.3 + tsx: 4.20.5 yaml: 2.8.1 postcss-modules-extract-imports@3.1.0(postcss@8.5.6): @@ -14459,16 +14504,17 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-js@1.260.1: + posthog-js@1.262.0: dependencies: - core-js: 3.45.0 + '@posthog/core': 1.0.2 + core-js: 3.45.1 fflate: 0.4.8 - preact: 10.27.0 + preact: 10.27.1 web-vitals: 4.2.4 preact@10.24.2: {} - preact@10.27.0: {} + preact@10.27.1: {} prebuild-install@7.1.3: dependencies: @@ -14478,7 +14524,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.75.0 + node-abi: 3.77.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 @@ -14595,11 +14641,11 @@ snapshots: react-is@18.3.1: {} - react-markdown@9.1.0(@types/react@18.3.23)(react@19.1.1): + react-markdown@9.1.0(@types/react@18.3.24)(react@19.1.1): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 18.3.23 + '@types/react': 18.3.24 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 @@ -14615,24 +14661,24 @@ snapshots: react-refresh@0.17.0: {} - react-remove-scroll-bar@2.3.8(@types/react@18.3.23)(react@19.1.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.24)(react@19.1.1): dependencies: react: 19.1.1 - react-style-singleton: 2.2.3(@types/react@18.3.23)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@18.3.24)(react@19.1.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - react-remove-scroll@2.7.1(@types/react@18.3.23)(react@19.1.1): + react-remove-scroll@2.7.1(@types/react@18.3.24)(react@19.1.1): dependencies: react: 19.1.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.23)(react@19.1.1) - react-style-singleton: 2.2.3(@types/react@18.3.23)(react@19.1.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.3.24)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@18.3.24)(react@19.1.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.23)(react@19.1.1) - use-sidecar: 1.1.3(@types/react@18.3.23)(react@19.1.1) + use-callback-ref: 1.3.3(@types/react@18.3.24)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@18.3.24)(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 react-resizable-panels@2.1.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: @@ -14647,17 +14693,17 @@ snapshots: react-dom: 19.1.1(react@19.1.1) react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-style-singleton@2.2.3(@types/react@18.3.23)(react@19.1.1): + react-style-singleton@2.2.3(@types/react@18.3.24)(react@19.1.1): dependencies: get-nonce: 1.0.1 react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 react-transition-group@4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -14935,15 +14981,15 @@ snapshots: dependencies: glob: 7.2.3 - rivetkit@https://pkg.pr.new/rivet-dev/rivetkit@1296(@hono/node-server@1.18.2(hono@4.8.12))(@standard-schema/spec@1.0.0)(ws@8.18.3): + rivetkit@https://pkg.pr.new/rivet-dev/rivetkit@1296(@hono/node-server@1.19.1(hono@4.9.6))(@standard-schema/spec@1.0.0)(ws@8.18.3): dependencies: '@bare-ts/lib': 0.3.0 - '@hono/standard-validator': 0.1.5(@standard-schema/spec@1.0.0)(hono@4.8.12) - '@hono/zod-openapi': 0.19.10(hono@4.8.12)(zod@3.25.76) + '@hono/standard-validator': 0.1.5(@standard-schema/spec@1.0.0)(hono@4.9.6) + '@hono/zod-openapi': 0.19.10(hono@4.9.6)(zod@3.25.76) '@rivetkit/engine-runner': https://pkg.pr.new/rivet-dev/engine/@rivetkit/engine-runner@b72b232 '@rivetkit/fast-json-patch': 3.1.2 cbor-x: 1.6.0 - hono: 4.8.12 + hono: 4.9.6 invariant: 2.2.4 nanoevents: 9.1.0 on-change: 5.0.1 @@ -14951,37 +14997,38 @@ snapshots: pino: 9.9.5 zod: 3.25.76 optionalDependencies: - '@hono/node-server': 1.18.2(hono@4.8.12) + '@hono/node-server': 1.19.1(hono@4.9.6) ws: 8.18.3 transitivePeerDependencies: - '@standard-schema/spec' - bufferutil - utf-8-validate - rollup@4.46.2: + rollup@4.50.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.2 - '@rollup/rollup-android-arm64': 4.46.2 - '@rollup/rollup-darwin-arm64': 4.46.2 - '@rollup/rollup-darwin-x64': 4.46.2 - '@rollup/rollup-freebsd-arm64': 4.46.2 - '@rollup/rollup-freebsd-x64': 4.46.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 - '@rollup/rollup-linux-arm64-musl': 4.46.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 - '@rollup/rollup-linux-x64-gnu': 4.46.2 - '@rollup/rollup-linux-x64-musl': 4.46.2 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 - '@rollup/rollup-win32-x64-msvc': 4.46.2 + '@rollup/rollup-android-arm-eabi': 4.50.1 + '@rollup/rollup-android-arm64': 4.50.1 + '@rollup/rollup-darwin-arm64': 4.50.1 + '@rollup/rollup-darwin-x64': 4.50.1 + '@rollup/rollup-freebsd-arm64': 4.50.1 + '@rollup/rollup-freebsd-x64': 4.50.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 + '@rollup/rollup-linux-arm-musleabihf': 4.50.1 + '@rollup/rollup-linux-arm64-gnu': 4.50.1 + '@rollup/rollup-linux-arm64-musl': 4.50.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 + '@rollup/rollup-linux-ppc64-gnu': 4.50.1 + '@rollup/rollup-linux-riscv64-gnu': 4.50.1 + '@rollup/rollup-linux-riscv64-musl': 4.50.1 + '@rollup/rollup-linux-s390x-gnu': 4.50.1 + '@rollup/rollup-linux-x64-gnu': 4.50.1 + '@rollup/rollup-linux-x64-musl': 4.50.1 + '@rollup/rollup-openharmony-arm64': 4.50.1 + '@rollup/rollup-win32-arm64-msvc': 4.50.1 + '@rollup/rollup-win32-ia32-msvc': 4.50.1 + '@rollup/rollup-win32-x64-msvc': 4.50.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -15058,7 +15105,7 @@ snapshots: dependencies: randombytes: 2.1.0 - seroval-plugins@1.3.2(seroval@1.3.2): + seroval-plugins@1.3.3(seroval@1.3.2): dependencies: seroval: 1.3.2 @@ -15100,6 +15147,7 @@ snapshots: tunnel-agent: 0.6.0 transitivePeerDependencies: - bare-buffer + - bare-url sharp@0.33.5: dependencies: @@ -15174,14 +15222,14 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@3.9.2: + shiki@3.12.2: dependencies: - '@shikijs/core': 3.9.2 - '@shikijs/engine-javascript': 3.9.2 - '@shikijs/engine-oniguruma': 3.9.2 - '@shikijs/langs': 3.9.2 - '@shikijs/themes': 3.9.2 - '@shikijs/types': 3.9.2 + '@shikijs/core': 3.12.2 + '@shikijs/engine-javascript': 3.12.2 + '@shikijs/engine-oniguruma': 3.12.2 + '@shikijs/langs': 3.12.2 + '@shikijs/themes': 3.12.2 + '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -15276,7 +15324,7 @@ snapshots: dependencies: csstype: 3.1.3 seroval: 1.3.2 - seroval-plugins: 1.3.2(seroval@1.3.2) + seroval-plugins: 1.3.3(seroval@1.3.2) sonic-boom@4.2.0: dependencies: @@ -15338,7 +15386,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string.prototype.includes@2.0.1: dependencies: @@ -15407,9 +15455,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} @@ -15528,10 +15576,11 @@ snapshots: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.2.2 + bare-fs: 4.3.2 bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer + - bare-url tar-stream@2.2.0: dependencies: @@ -15547,18 +15596,18 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.22.1 - terser-webpack-plugin@5.3.14(esbuild@0.25.8)(webpack@5.101.3(esbuild@0.25.8)): + terser-webpack-plugin@5.3.14(esbuild@0.25.9)(webpack@5.101.3(esbuild@0.25.9)): dependencies: '@jridgewell/trace-mapping': 0.3.30 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.3(esbuild@0.25.8) + terser: 5.44.0 + webpack: 5.101.3(esbuild@0.25.9) optionalDependencies: - esbuild: 0.25.8 + esbuild: 0.25.9 - terser@5.43.1: + terser@5.44.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -15591,13 +15640,13 @@ snapshots: tinybench@2.9.0: {} - tinybench@5.0.0: {} + tinybench@5.0.1: {} tinyexec@0.3.2: {} - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinypool@0.8.4: {} @@ -15634,9 +15683,9 @@ snapshots: ts-pattern@5.8.0: {} - tsconfck@3.1.6(typescript@5.8.2): + tsconfck@3.1.6(typescript@5.9.2): optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 tsconfig-paths@3.15.0: dependencies: @@ -15655,101 +15704,101 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(@microsoft/api-extractor@7.43.0(@types/node@20.19.9))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1): + tsup@8.5.0(@microsoft/api-extractor@7.43.0(@types/node@20.19.13))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.8) + bundle-require: 5.1.0(esbuild@0.25.9) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1 - esbuild: 0.25.8 + esbuild: 0.25.9 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.46.2 + rollup: 4.50.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.19.9) + '@microsoft/api-extractor': 7.43.0(@types/node@20.19.13) postcss: 8.5.6 - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - tsup@8.5.0(@microsoft/api-extractor@7.43.0(@types/node@22.17.0))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1): + tsup@8.5.0(@microsoft/api-extractor@7.43.0(@types/node@22.18.1))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.8) + bundle-require: 5.1.0(esbuild@0.25.9) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1 - esbuild: 0.25.8 + esbuild: 0.25.9 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.46.2 + rollup: 4.50.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@22.17.0) + '@microsoft/api-extractor': 7.43.0(@types/node@22.18.1) postcss: 8.5.6 - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - tsup@8.5.0(@microsoft/api-extractor@7.43.0(@types/node@24.3.0))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.1): + tsup@8.5.0(@microsoft/api-extractor@7.43.0(@types/node@24.3.1))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.8) + bundle-require: 5.1.0(esbuild@0.25.9) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1 - esbuild: 0.25.8 + esbuild: 0.25.9 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.46.2 + rollup: 4.50.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@24.3.0) + '@microsoft/api-extractor': 7.43.0(@types/node@24.3.1) postcss: 8.5.6 - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - tsutils@3.21.0(typescript@5.8.2): + tsutils@3.21.0(typescript@5.9.2): dependencies: tslib: 1.14.1 - typescript: 5.8.2 + typescript: 5.9.2 - tsx@4.20.3: + tsx@4.20.5: dependencies: - esbuild: 0.25.8 + esbuild: 0.25.9 get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 @@ -15758,32 +15807,32 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.5.5: + turbo-darwin-64@2.5.6: optional: true - turbo-darwin-arm64@2.5.5: + turbo-darwin-arm64@2.5.6: optional: true - turbo-linux-64@2.5.5: + turbo-linux-64@2.5.6: optional: true - turbo-linux-arm64@2.5.5: + turbo-linux-arm64@2.5.6: optional: true - turbo-windows-64@2.5.5: + turbo-windows-64@2.5.6: optional: true - turbo-windows-arm64@2.5.5: + turbo-windows-arm64@2.5.6: optional: true - turbo@2.5.5: + turbo@2.5.6: optionalDependencies: - turbo-darwin-64: 2.5.5 - turbo-darwin-arm64: 2.5.5 - turbo-linux-64: 2.5.5 - turbo-linux-arm64: 2.5.5 - turbo-windows-64: 2.5.5 - turbo-windows-arm64: 2.5.5 + turbo-darwin-64: 2.5.6 + turbo-darwin-arm64: 2.5.6 + turbo-linux-64: 2.5.6 + turbo-linux-arm64: 2.5.6 + turbo-windows-64: 2.5.6 + turbo-windows-arm64: 2.5.6 type-check@0.4.0: dependencies: @@ -15828,7 +15877,7 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-plugin-css-modules@5.2.0(typescript@5.8.2): + typescript-plugin-css-modules@5.2.0(typescript@5.9.2): dependencies: '@types/postcss-modules-local-by-default': 4.0.2 '@types/postcss-modules-scope': 3.0.4 @@ -15845,7 +15894,7 @@ snapshots: sass: 1.93.2 source-map-js: 1.2.1 tsconfig-paths: 4.2.0 - typescript: 5.8.2 + typescript: 5.9.2 optionalDependencies: stylus: 0.62.0 transitivePeerDependencies: @@ -15856,9 +15905,11 @@ snapshots: typescript@5.8.2: {} - typesense@1.8.2(@babel/runtime@7.28.3): + typescript@5.9.2: {} + + typesense@1.8.2(@babel/runtime@7.28.4): dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 axios: 1.11.0 loglevel: 1.9.2 transitivePeerDependencies: @@ -15963,15 +16014,16 @@ snapshots: webpack-sources: 3.3.3 webpack-virtual-modules: 0.5.0 - unplugin@2.3.5: + unplugin@2.3.10: dependencies: + '@jridgewell/remapping': 2.3.5 acorn: 8.15.0 picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.3(browserslist@4.25.2): + update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: - browserslist: 4.25.2 + browserslist: 4.25.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -15983,20 +16035,20 @@ snapshots: url-join@5.0.0: {} - use-callback-ref@1.3.3(@types/react@18.3.23)(react@19.1.1): + use-callback-ref@1.3.3(@types/react@18.3.24)(react@19.1.1): dependencies: react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 - use-sidecar@1.1.3(@types/react@18.3.23)(react@19.1.1): + use-sidecar@1.1.3(@types/react@18.3.24)(react@19.1.1): dependencies: detect-node-es: 1.1.0 react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 use-sync-external-store@1.5.0(react@19.1.1): dependencies: @@ -16059,30 +16111,30 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - viem@2.37.8(typescript@5.8.2)(zod@3.25.76): + viem@2.37.8(typescript@5.9.2)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.8.2)(zod@3.25.76) + abitype: 1.1.0(typescript@5.9.2)(zod@3.25.76) isows: 1.0.7(ws@8.18.3) - ox: 0.9.6(typescript@5.8.2)(zod@3.25.76) + ox: 0.9.6(typescript@5.9.2)(zod@3.25.76) ws: 8.18.3 optionalDependencies: - typescript: 5.8.2 + typescript: 5.9.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-node@1.6.1(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1): + vite-node@1.6.1(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0): dependencies: cac: 6.7.14 debug: 4.4.1 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.19(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + vite: 5.4.20(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - less @@ -16094,13 +16146,13 @@ snapshots: - supports-color - terser - vite-node@2.1.9(@types/node@24.3.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1): + vite-node@2.1.9(@types/node@24.3.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.19(@types/node@24.3.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + vite: 5.4.20(@types/node@24.3.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - less @@ -16112,18 +16164,18 @@ snapshots: - supports-color - terser - vite-plugin-dts@3.9.1(@types/node@20.19.9)(rollup@4.46.2)(typescript@5.8.2)(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)): + vite-plugin-dts@3.9.1(@types/node@20.19.13)(rollup@4.50.1)(typescript@5.9.2)(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0)): dependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.19.9) - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) - '@vue/language-core': 1.8.27(typescript@5.8.2) + '@microsoft/api-extractor': 7.43.0(@types/node@20.19.13) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@vue/language-core': 1.8.27(typescript@5.9.2) debug: 4.4.1 kolorist: 1.8.0 - magic-string: 0.30.17 - typescript: 5.8.2 - vue-tsc: 1.8.27(typescript@5.8.2) + magic-string: 0.30.19 + typescript: 5.9.2 + vue-tsc: 1.8.27(typescript@5.9.2) optionalDependencies: - vite: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + vite: 5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - rollup @@ -16133,57 +16185,57 @@ snapshots: dependencies: favicons: 7.2.0 - vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0)): dependencies: debug: 4.4.1 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.8.2) + tsconfck: 3.1.6(typescript@5.9.2) optionalDependencies: - vite: 5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + vite: 5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.19(@types/node@20.19.9)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1): + vite@5.4.20(@types/node@20.19.13)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.46.2 + rollup: 4.50.1 optionalDependencies: - '@types/node': 20.19.9 + '@types/node': 20.19.13 fsevents: 2.3.3 less: 4.4.1 sass: 1.93.2 stylus: 0.62.0 - terser: 5.43.1 + terser: 5.44.0 - vite@5.4.19(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1): + vite@5.4.20(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.46.2 + rollup: 4.50.1 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.1 fsevents: 2.3.3 less: 4.4.1 sass: 1.93.2 stylus: 0.62.0 - terser: 5.43.1 + terser: 5.44.0 - vite@5.4.19(@types/node@24.3.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1): + vite@5.4.20(@types/node@24.3.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.46.2 + rollup: 4.50.1 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 24.3.1 fsevents: 2.3.3 less: 4.4.1 sass: 1.93.2 stylus: 0.62.0 - terser: 5.43.1 + terser: 5.44.0 - vitest@1.6.1(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1): + vitest@1.6.1(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0): dependencies: '@vitest/expect': 1.6.1 '@vitest/runner': 1.6.1 @@ -16195,18 +16247,18 @@ snapshots: debug: 4.4.1 execa: 8.0.1 local-pkg: 0.5.1 - magic-string: 0.30.17 + magic-string: 0.30.19 pathe: 1.1.2 picocolors: 1.1.1 std-env: 3.9.0 strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.19(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) - vite-node: 1.6.1(@types/node@22.17.0)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.43.1) + vite: 5.4.20(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) + vite-node: 1.6.1(@types/node@22.18.1)(less@4.4.1)(sass@1.93.2)(stylus@0.62.0)(terser@5.44.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.1 transitivePeerDependencies: - less - lightningcss @@ -16222,12 +16274,12 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - vue-tsc@1.8.27(typescript@5.8.2): + vue-tsc@1.8.27(typescript@5.9.2): dependencies: '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.8.2) + '@vue/language-core': 1.8.27(typescript@5.9.2) semver: 7.7.2 - typescript: 5.8.2 + typescript: 5.9.2 w3c-keyname@2.2.8: {} @@ -16250,7 +16302,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.101.3(esbuild@0.25.8): + webpack@5.101.3(esbuild@0.25.9): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -16260,7 +16312,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.2 + browserslist: 4.25.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -16274,7 +16326,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.3 - terser-webpack-plugin: 5.3.14(esbuild@0.25.8)(webpack@5.101.3(esbuild@0.25.8)) + terser-webpack-plugin: 5.3.14(esbuild@0.25.9)(webpack@5.101.3(esbuild@0.25.9)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -16359,9 +16411,9 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -16406,16 +16458,16 @@ snapshots: zod@3.25.76: {} - zustand@4.5.7(@types/react@18.3.23)(react@19.1.1): + zustand@4.5.7(@types/react@18.3.24)(react@19.1.1): dependencies: use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 react: 19.1.1 - zustand@5.0.3(@types/react@18.3.23)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): + zustand@5.0.3(@types/react@18.3.24)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): optionalDependencies: - '@types/react': 18.3.23 + '@types/react': 18.3.24 react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4a563ce2d4..a348372554 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,5 +11,16 @@ packages: - frontend/packages/components/ - frontend/packages/icons/ +ignoredBuiltDependencies: + - '@clerk/shared' + - '@parcel/watcher' + - '@sentry/cli' + - browser-tabs-lock + - cbor-extract + - core-js + - lefthook + - sharp + onlyBuiltDependencies: + - '@rivet-gg/icons' - esbuild diff --git a/scripts/tests/package.json b/scripts/tests/package.json index 6bf031bd33..e25da0aec0 100644 --- a/scripts/tests/package.json +++ b/scripts/tests/package.json @@ -11,7 +11,6 @@ "license": "ISC", "packageManager": "pnpm@10.13.1", "devDependencies": { - "@types/node": "^24.3.0", - "ws": "8.18.3" + "@types/node": "^24.3.1" } } \ No newline at end of file diff --git a/sdks/typescript/api-full/package.json b/sdks/typescript/api-full/package.json index 584e8a00cc..96db77b394 100644 --- a/sdks/typescript/api-full/package.json +++ b/sdks/typescript/api-full/package.json @@ -39,20 +39,20 @@ "prepack": "pnpm run build" }, "dependencies": { - "form-data": "^4.0.0", - "js-base64": "^3.7.5", - "node-fetch": "2", - "qs": "^6.11.2", - "readable-stream": "^4.5.2", + "form-data": "^4.0.4", + "js-base64": "^3.7.8", + "node-fetch": "^2.7.0", + "qs": "^6.14.0", + "readable-stream": "^4.7.0", "url-join": "^5.0.0" }, "devDependencies": { "@types/node": "17.0.33", "@types/node-fetch": "2.6.11", "@types/qs": "6.9.8", - "@types/readable-stream": "^4.0.18", + "@types/readable-stream": "^4.0.21", "@types/url-join": "4.0.1", - "esbuild": "^0.19.11", + "esbuild": "^0.19.12", "prettier": "2.7.1", "typescript": "5.8.2" } diff --git a/sdks/typescript/runner-protocol/package.json b/sdks/typescript/runner-protocol/package.json index d51360664e..ad3f3684cf 100644 --- a/sdks/typescript/runner-protocol/package.json +++ b/sdks/typescript/runner-protocol/package.json @@ -27,8 +27,8 @@ "@bare-ts/lib": "^0.4.0" }, "devDependencies": { - "@types/node": "^20.0.0", - "typescript": "^5.0.0", - "tsup": "^8.4.0" + "@types/node": "^20.19.13", + "tsup": "^8.5.0", + "typescript": "^5.9.2" } } \ No newline at end of file diff --git a/sdks/typescript/runner/package.json b/sdks/typescript/runner/package.json index ef2c3142ff..80b9b92568 100644 --- a/sdks/typescript/runner/package.json +++ b/sdks/typescript/runner/package.json @@ -26,12 +26,12 @@ "ws": "^8.18.3" }, "devDependencies": { - "@types/node": "^22.13.9", + "@types/node": "^22.18.1", "@types/ws": "^8.18.1", - "tinybench": "^5.0.0", + "tinybench": "^5.0.1", "tsup": "^8.5.0", - "tsx": "^4.19.3", - "typescript": "^5.3.3", - "vitest": "^1.6.0" + "tsx": "^4.20.5", + "typescript": "^5.9.2", + "vitest": "^1.6.1" } } diff --git a/sdks/typescript/test-runner/package.json b/sdks/typescript/test-runner/package.json index 7082d25355..dba3b057ca 100644 --- a/sdks/typescript/test-runner/package.json +++ b/sdks/typescript/test-runner/package.json @@ -8,7 +8,7 @@ "check-types": "tsc --noEmit" }, "dependencies": { - "@hono/node-server": "^1.18.2", + "@hono/node-server": "^1.19.1", "@rivetkit/engine-runner": "workspace:*", "@rivetkit/engine-runner-protocol": "workspace:*", "hono": "^4.0.0", @@ -16,12 +16,12 @@ "ws": "^8.18.3" }, "devDependencies": { - "@types/node": "^22.13.9", + "@types/node": "^22.18.1", "@types/ws": "^8.18.1", - "tinybench": "^5.0.0", + "tinybench": "^5.0.1", "tsup": "^8.5.0", - "tsx": "^4.19.3", - "typescript": "^5.3.3", - "vitest": "^1.6.0" + "tsx": "^4.20.5", + "typescript": "^5.9.2", + "vitest": "^1.6.1" } } \ No newline at end of file diff --git a/site/package.json b/site/package.json index aba25f4389..a427734cb8 100644 --- a/site/package.json +++ b/site/package.json @@ -18,86 +18,86 @@ }, "browserslist": "defaults, not ie <= 11", "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", - "@fortawesome/react-fontawesome": "^0.2.2", + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/react-fontawesome": "^0.2.6", "@giscus/react": "^3.1.0", - "@headlessui/react": "^2.2.3", - "@heroicons/react": "^2.0.18", + "@headlessui/react": "^2.2.7", + "@heroicons/react": "^2.2.0", "@inquirer/prompts": "^6.0.1", - "@mdx-js/loader": "^3.1.0", - "@mdx-js/react": "^3.1.0", - "@next/mdx": "^15.1.7", + "@mdx-js/loader": "^3.1.1", + "@mdx-js/react": "^3.1.1", + "@next/mdx": "^15.5.2", "@next/third-parties": "latest", - "@rivet-gg/api": "^0.0.1-rc19", + "@rivet-gg/api": "0.0.1-rc8", "@rivet-gg/components": "workspace:*", "@rivet-gg/icons": "workspace:^", - "@shikijs/transformers": "^1.17.6", - "@sindresorhus/slugify": "^2.1.1", - "@tailwindcss/forms": "^0.5.3", - "@tailwindcss/typography": "^0.5.8", + "@shikijs/transformers": "^1.29.2", + "@sindresorhus/slugify": "^2.2.1", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/typography": "^0.5.16", "@types/json-schema": "^7.0.15", - "acorn": "^8.8.1", - "autoprefixer": "^10.4.7", - "chart.js": "^4.4.2", + "acorn": "^8.15.0", + "autoprefixer": "^10.4.21", + "chart.js": "^4.5.0", "chartjs-adapter-date-fns": "^3.0.0", - "clsx": "^2.1.0", - "csv-parser": "^3.0.0", + "clsx": "^2.1.1", + "csv-parser": "^3.2.0", "date-fns": "^3.6.0", - "dedent": "^1.5.3", + "dedent": "^1.7.0", "esast-util-from-js": "^2.0.1", "escape-html": "^1.0.3", "estree-util-to-js": "^2.0.0", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.3", "feed": "^4.2.2", - "focus-visible": "^5.2.0", - "framer-motion": "*", + "focus-visible": "^5.2.1", + "framer-motion": "^12.23.12", "jszip": "^3.10.1", "mdast-util-to-string": "^3.2.0", - "mdx-annotations": "^0.1.1", - "next": "^15.2.4", - "next-router-mock": "^0.9.7", + "mdx-annotations": "^0.1.4", + "next": "^15.5.2", + "next-router-mock": "^0.9.13", "next-sitemap": "^4.2.3", - "postcss": "^8.4.24", + "postcss": "^8.5.6", "postcss-focus-visible": "^6.0.4", - "posthog-js": "^1.257.0", - "react": "*", - "react-chartjs-2": "^5.2.0", + "posthog-js": "^1.262.0", + "react": "^19.1.1", + "react-chartjs-2": "^5.3.0", "react-github-btn": "^1.4.0", "react-highlight-words": "^0.20.0", - "react-markdown": "^9.0.1", + "react-markdown": "^9.1.0", "recma-nextjs-static-props": "^1.0.0", "rehype-mdx-title": "^2.0.0", - "rehype-parse": "^8.0.4", + "rehype-parse": "^8.0.5", "rehype-remark": "^9.1.2", "remark": "^15.0.1", "remark-gfm": "^4.0.1", - "remark-mdx": "^3.1.0", + "remark-mdx": "^3.1.1", "remark-stringify": "^10.0.3", - "sharp": "^0.32.1", - "shiki": "^1.0.0", - "socket.io": "^4.7.1", - "socket.io-client": "^4.7.1", - "tailwindcss": "^3.3.0", - "tm-themes": "^1.10.7", + "sharp": "^0.32.6", + "shiki": "^1.29.2", + "socket.io": "^4.8.1", + "socket.io-client": "^4.8.1", + "tailwindcss": "^3.4.17", + "tm-themes": "^1.10.9", "typesense": "^1.8.2", "unified": "^10.1.2", "unist-util-filter": "^4.0.1", - "unist-util-visit": "^4.1.1", - "zustand": "^4.3.2" + "unist-util-visit": "^4.1.2", + "zustand": "^4.5.7" }, "devDependencies": { - "@types/escape-html": "^1", - "axios": "^1.5.0", + "@types/escape-html": "^1.0.4", + "axios": "^1.11.0", "eslint": "8.26.0", "eslint-config-next": "13.0.2", "file-loader": "^6.2.0", "prettier": "^2.8.8", "prettier-plugin-tailwindcss": "^0.3.0", - "tsx": "^4.20.3", - "typescript": "^5.1.6", - "vite-node": "^2.1.1", - "yaml": "^2.3.1" + "tsx": "^4.20.5", + "typescript": "^5.9.2", + "vite-node": "^2.1.9", + "yaml": "^2.8.1" } }