diff --git a/.changeset/modern-publishing-workflow.md b/.changeset/modern-publishing-workflow.md deleted file mode 100644 index 59d340dd9416a..0000000000000 --- a/.changeset/modern-publishing-workflow.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@node-core/website-i18n': patch -'@node-core/rehype-shiki': patch -'@node-core/remark-lint': patch -'@node-core/ui-components': patch ---- - -Migrate package versioning and publishing to Changesets. diff --git a/.changeset/remark-lint-validate-links.md b/.changeset/remark-lint-validate-links.md deleted file mode 100644 index 84a63999f0def..0000000000000 --- a/.changeset/remark-lint-validate-links.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@node-core/remark-lint': patch ---- - -Add link validation and fix issues in type validation diff --git a/.changeset/theme-toggle-aria.md b/.changeset/theme-toggle-aria.md deleted file mode 100644 index c2394381f5aca..0000000000000 --- a/.changeset/theme-toggle-aria.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@node-core/ui-components': patch ---- - -Add a default `aria-label` to `ThemeToggle`. diff --git a/.changeset/ui-hydration-fix.md b/.changeset/ui-hydration-fix.md deleted file mode 100644 index 6d9e08a4f5a58..0000000000000 --- a/.changeset/ui-hydration-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@node-core/ui-components': patch ---- - -Account for a possible wrapper between a code boxes `pre` and `code`. diff --git a/.changeset/young-breads-fall.md b/.changeset/young-breads-fall.md deleted file mode 100644 index de376107555d4..0000000000000 --- a/.changeset/young-breads-fall.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@node-core/ui-components': patch -'@node-core/rehype-shiki': patch ---- - -Add light mode theming to code elements diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 57165054469f8..158da6920f6c7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -17,7 +17,7 @@ apps/site/next.config.mjs @nodejs/web-infra apps/site/next.dynamic.mjs @nodejs/web-infra apps/site/middleware.ts @nodejs/web-infra apps/site/navigation.mjs @nodejs/web-infra -apps/site/playwright.config.ts @nodejs/web-infra +apps/site/playwright.config.mjs @nodejs/web-infra # Package Ecosystem package.json @nodejs/nodejs-website @@ -27,9 +27,7 @@ turbo.json @nodejs/nodejs-website @nodejs/web-infra crowdin.yml @nodejs/web-infra apps/site/redirects.json @nodejs/web-infra apps/site/site.json @nodejs/web-infra -apps/site/wrangler.jsonc @nodejs/web-infra -apps/site/open-next.config.ts @nodejs/web-infra -apps/site/redirects.json @nodejs/web-infra +platforms @nodejs/web-infra # Critical Documents LICENSE @nodejs/tsc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bc7ed61eb9258..dc843b604f629 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,7 +59,7 @@ jobs: - name: Build Next.js # We want a ISR build on CI to ensure that regular Next.js builds work as expected. - run: node_modules/.bin/turbo build --cache-dir=.turbo/cache + run: node_modules/.bin/turbo build --filter=@node-core/website --cache-dir=.turbo/cache env: # We want to ensure we have enough RAM allocated to the Node.js process # this should be a last resort in case by any chances the build memory gets too high @@ -76,7 +76,7 @@ jobs: - name: Build Next.js (Static Export) # We want to generate a static build, as it is a requirement of our website. - run: node_modules/.bin/turbo deploy --cache-dir=.turbo/cache + run: node_modules/.bin/turbo deploy --filter=@node-core/website --cache-dir=.turbo/cache env: # We want to ensure we have enough RAM allocated to the Node.js process # this should be a last resort in case by any chances the build memory gets too high diff --git a/.github/workflows/playwright-cloudflare-open-next.yml b/.github/workflows/playwright-cloudflare-open-next.yml index 2af8c17e340b4..b049a3d08ddde 100644 --- a/.github/workflows/playwright-cloudflare-open-next.yml +++ b/.github/workflows/playwright-cloudflare-open-next.yml @@ -50,12 +50,11 @@ jobs: working-directory: apps/site run: node_modules/.bin/playwright install --with-deps + - name: Build open-next site + run: node_modules/.bin/turbo build --filter=@node-core/platform-cloudflare --cache-dir=.turbo/cache + - name: Run Playwright tests - working-directory: apps/site - run: node --run playwright - env: - PLAYWRIGHT_RUN_CLOUDFLARE_PREVIEW: true - PLAYWRIGHT_BASE_URL: http://127.0.0.1:8787 + run: pnpm --filter=@node-core/platform-cloudflare test:e2e - name: Upload Playwright test results if: always() diff --git a/.github/workflows/tmp-cloudflare-open-next-deploy.yml b/.github/workflows/tmp-cloudflare-open-next-deploy.yml index 758595e6f836a..c3e01ed698168 100644 --- a/.github/workflows/tmp-cloudflare-open-next-deploy.yml +++ b/.github/workflows/tmp-cloudflare-open-next-deploy.yml @@ -52,17 +52,11 @@ jobs: - name: Install packages run: pnpm install --frozen-lockfile - - name: Build blog data - working-directory: apps/site - run: node --run build:blog-data - - name: Build open-next site - working-directory: apps/site - run: node --run cloudflare:build:worker + run: node_modules/.bin/turbo build --filter=@node-core/platform-cloudflare --cache-dir=.turbo/cache - name: Deploy open-next site - working-directory: apps/site - run: node --run cloudflare:deploy + run: pnpm --filter=@node-core/platform-cloudflare run deploy env: CF_WORKERS_SCRIPTS_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/.gitignore b/.gitignore index d5f3106348e6b..a756afeb5c8ef 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ apps/site/public/blog-data.json apps/site/next-env.d.ts # Generated Build Artifacts -apps/site/generated +platforms/cloudflare/generated # Test Runner junit.xml diff --git a/apps/site/app/[locale]/layout.tsx b/apps/site/app/[locale]/layout.tsx index 5e1e440c5b974..7b905a0fd03a3 100644 --- a/apps/site/app/[locale]/layout.tsx +++ b/apps/site/app/[locale]/layout.tsx @@ -1,11 +1,9 @@ +import PlatformAnalytics from '#platform/analytics'; import { availableLocales, defaultLocale } from '@node-core/website-i18n'; -import { Analytics } from '@vercel/analytics/react'; -import { SpeedInsights } from '@vercel/speed-insights/next'; import classNames from 'classnames'; import { NextIntlClientProvider } from 'next-intl'; import BaseLayout from '#site/layouts/Base'; -import { VERCEL_ENV } from '#site/next.constants.mjs'; import { IBM_PLEX_MONO, OPEN_SANS } from '#site/next.fonts'; import { ThemeProvider } from '#site/providers/themeProvider'; @@ -46,12 +44,7 @@ const RootLayout: FC = async ({ children, params }) => { href="https://social.lfx.dev/@nodejs" /> - {VERCEL_ENV && ( - <> - - - - )} + ); diff --git a/apps/site/eslint.config.js b/apps/site/eslint.config.js index 7971c2c082de1..2d4ee148ad97a 100644 --- a/apps/site/eslint.config.js +++ b/apps/site/eslint.config.js @@ -6,15 +6,7 @@ import baseConfig from '../../eslint.config.js'; export default baseConfig.concat([ { - ignores: [ - 'pages/en/blog/**/*.{md,mdx}/**', - 'public', - 'next-env.d.ts', - // The worker entrypoint is bundled by wrangler, not tsc. Its imports - // trigger a tsc crash (see tsconfig.json), so it is excluded from both - // type checking and ESLint's type-aware linting. - 'cloudflare/worker-entrypoint.ts', - ], + ignores: ['pages/en/blog/**/*.{md,mdx}/**', 'public', 'next-env.d.ts'], }, eslintReact.configs['recommended-typescript'], diff --git a/apps/site/instrumentation.ts b/apps/site/instrumentation.ts index 86097a48800b1..cb1ffbbeb0be6 100644 --- a/apps/site/instrumentation.ts +++ b/apps/site/instrumentation.ts @@ -1,7 +1 @@ -export async function register() { - if (!('Cloudflare' in globalThis)) { - // Note: we don't need to set up the Vercel OTEL if the application is running on Cloudflare - const { registerOTel } = await import('@vercel/otel'); - registerOTel({ serviceName: 'nodejs-org' }); - } -} +export { register } from '#platform/instrumentation'; diff --git a/apps/site/mdx/plugins.mjs b/apps/site/mdx/plugins.mjs index 15efe01c45c4a..a220d13ec19ce 100644 --- a/apps/site/mdx/plugins.mjs +++ b/apps/site/mdx/plugins.mjs @@ -1,5 +1,6 @@ 'use strict'; +import { shikiOptions } from '#platform/shiki.mjs'; import rehypeShikiji from '@node-core/rehype-shiki/plugin'; import remarkHeadings from '@vcarl/remark-headings'; import rehypeAutolinkHeadings from 'rehype-autolink-headings'; @@ -7,35 +8,10 @@ import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; import readingTime from 'remark-reading-time'; -import { createVfsTwoslasher } from './create-vfs-twoslasher.mjs'; import remarkTableTitles from '../util/table'; -// TODO(@avivkeller): When available, use `OPEN_NEXT_CLOUDFLARE` environment -// variable for detection instead of current method, which will enable better -// tree-shaking. -// Reference: https://github.com/nodejs/nodejs.org/pull/7896#issuecomment-3009480615 -const OPEN_NEXT_CLOUDFLARE = 'Cloudflare' in global; - -// Shiki is created out here to avoid an async rehype plugin -const singletonShiki = await rehypeShikiji({ - // We use the faster WASM engine on the server instead of the web-optimized version. - // - // Currently we fall back to the JavaScript RegEx engine - // on Cloudflare workers because `shiki/wasm` requires loading via - // `WebAssembly.instantiate` with custom imports, which Cloudflare doesn't support - // for security reasons. - wasm: !OPEN_NEXT_CLOUDFLARE, - - twoslash: true, - - // On Cloudflare Workers, the default filesystem-backed Twoslash cannot work - // because there is no real filesystem. Instead, we provide a custom twoslasher - // backed by an in-memory VFS pre-populated at build time with TypeScript - // lib declarations and @types/node. - twoslashOptions: OPEN_NEXT_CLOUDFLARE - ? { twoslasher: await createVfsTwoslasher() } - : undefined, -}); +// Shiki is created out here to avoid an async rehype plugin. +const singletonShiki = await rehypeShikiji(shikiOptions); /** * Provides all our Rehype Plugins that are used within MDX diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index 40d1f89e87cd3..6f392d51b492d 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -1,23 +1,10 @@ 'use strict'; +import platformConfig from '#platform/next.config.mjs'; import createNextIntlPlugin from 'next-intl/plugin'; -import { OPEN_NEXT_CLOUDFLARE } from './next.constants.cloudflare.mjs'; import { BASE_PATH, ENABLE_STATIC_EXPORT } from './next.constants.mjs'; -import { getImagesConfig } from './next.image.config.mjs'; import { redirects, rewrites } from './next.rewrites.mjs'; -const getDeploymentId = async () => { - if (OPEN_NEXT_CLOUDFLARE) { - // If we're building for the Cloudflare deployment we want to set - // an appropriate deploymentId (needed for skew protection) - const openNextAdapter = await import('@opennextjs/cloudflare'); - - return openNextAdapter.getDeploymentId(); - } - - return undefined; -}; - /** @type {import('next').NextConfig} */ const nextConfig = { // Full Support of React 18 SSR and Streaming @@ -27,8 +14,19 @@ const nextConfig = { // We allow the BASE_PATH to be overridden in case that the Website // is being built on a subdirectory (e.g. /nodejs-website) basePath: BASE_PATH, - // Vercel/Next.js Image Optimization Settings - images: getImagesConfig(), + images: { + // We disable image optimisation during static export builds + unoptimized: ENABLE_STATIC_EXPORT, + // We add it to the remote pattern for the static images we use from multiple sources + // to be marked as safe sources (these come from Markdown files) + remotePatterns: [ + 'https://avatars.githubusercontent.com/**', + 'https://bestpractices.coreinfrastructure.org/**', + 'https://raw.githubusercontent.com/nodejs/**', + 'https://user-images.githubusercontent.com/**', + 'https://website-assets.oramasearch.com/**', + ].map(url => new URL(url)), + }, serverExternalPackages: ['twoslash'], outputFileTracingIncludes: { // Twoslash needs TypeScript declarations to function, and, by default, Next.js @@ -81,8 +79,8 @@ const nextConfig = { // Faster Development Servers with Turbopack turbopackFileSystemCacheForDev: true, }, - deploymentId: await getDeploymentId(), }; const withNextIntl = createNextIntlPlugin('./i18n.tsx'); -export default withNextIntl(nextConfig); + +export default withNextIntl({ ...nextConfig, ...platformConfig }); diff --git a/apps/site/next.constants.cloudflare.mjs b/apps/site/next.constants.cloudflare.mjs deleted file mode 100644 index a87b3ed2a5214..0000000000000 --- a/apps/site/next.constants.cloudflare.mjs +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/** - * Whether the build process is targeting the Cloudflare open-next build or not. - * - * TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being - * defined in the worker building script, ideally the open-next - * adapter should set it itself when it invokes the Next.js build - * process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` - * definition in the package.json script. - */ -export const OPEN_NEXT_CLOUDFLARE = process.env.OPEN_NEXT_CLOUDFLARE; diff --git a/apps/site/next.constants.mjs b/apps/site/next.constants.mjs index 1be9ba0ced14c..abc3e4da2a87d 100644 --- a/apps/site/next.constants.mjs +++ b/apps/site/next.constants.mjs @@ -5,15 +5,6 @@ */ export const IS_DEV_ENV = process.env.NODE_ENV === 'development'; -/** - * This is used for telling Next.js if the Website is deployed on Vercel - * - * Can be used for conditionally enabling features that we know are Vercel only - * - * @see https://vercel.com/docs/projects/environment-variables/system-environment-variables#VERCEL_ENV - */ -export const VERCEL_ENV = process.env.VERCEL_ENV || undefined; - /** * This is used for telling Next.js to do a Static Export Build of the Website * @@ -39,19 +30,9 @@ export const ENABLE_STATIC_EXPORT_LOCALE = /** * This is used for any place that requires the full canonical URL path for the Node.js Website (and its deployment), such as for example, the Node.js RSS Feed. - * - * This variable can either come from the Vercel Deployment as `NEXT_PUBLIC_VERCEL_URL` or from the `NEXT_PUBLIC_BASE_URL` Environment Variable that is manually defined - * by us if necessary. Otherwise it will fallback to the default Node.js Website URL. - * - * @TODO: We should get rid of needing to rely on `VERCEL_URL` for deployment URL. - * - * @see https://vercel.com/docs/concepts/projects/environment-variables/system-environment-variables#framework-environment-variables */ -export const BASE_URL = process.env.NEXT_PUBLIC_BASE_URL - ? process.env.NEXT_PUBLIC_BASE_URL - : process.env.VERCEL_URL - ? `https://${process.env.VERCEL_URL}` - : 'https://nodejs.org'; +export const BASE_URL = + process.env.NEXT_PUBLIC_BASE_URL || 'https://nodejs.org'; /** * This is used for any place that requires the Node.js distribution URL (which by default is nodejs.org/dist) diff --git a/apps/site/next.image.config.mjs b/apps/site/next.image.config.mjs deleted file mode 100644 index 519523ca2aafe..0000000000000 --- a/apps/site/next.image.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -import { OPEN_NEXT_CLOUDFLARE } from './next.constants.cloudflare.mjs'; -import { ENABLE_STATIC_EXPORT } from './next.constants.mjs'; - -const remotePatterns = [ - 'https://avatars.githubusercontent.com/**', - 'https://bestpractices.coreinfrastructure.org/**', - 'https://raw.githubusercontent.com/nodejs/**', - 'https://user-images.githubusercontent.com/**', - 'https://website-assets.oramasearch.com/**', -]; - -export const getImagesConfig = () => { - if (OPEN_NEXT_CLOUDFLARE) { - // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader - // - // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins - // (https://developers.cloudflare.com/images/transform-images/sources/) - // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` above). - // - return { - loader: 'custom', - loaderFile: './cloudflare/image-loader.ts', - }; - } - - return { - // We disable image optimisation during static export builds - unoptimized: ENABLE_STATIC_EXPORT, - // We add it to the remote pattern for the static images we use from multiple sources - // to be marked as safe sources (these come from Markdown files) - remotePatterns: remotePatterns.map(url => new URL(url)), - }; -}; diff --git a/apps/site/package.json b/apps/site/package.json index 35b1ab64fafaf..2f80f49c999cf 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -2,14 +2,9 @@ "name": "@node-core/website", "type": "module", "scripts": { - "prebuild": "node --run build:blog-data && node --run build:twoslash-fsmap", "build": "cross-env NODE_NO_WARNINGS=1 next build", "build:blog-data": "cross-env NODE_NO_WARNINGS=1 node ./scripts/blog-data/index.mjs", "build:blog-data:watch": "node --watch --watch-path=pages/en/blog ./scripts/blog-data/index.mjs", - "build:twoslash-fsmap": "node ./scripts/twoslash-fsmap/index.mjs", - "cloudflare:build:worker": "OPEN_NEXT_CLOUDFLARE=true opennextjs-cloudflare build", - "cloudflare:deploy": "opennextjs-cloudflare deploy", - "cloudflare:preview": "wrangler dev", "predeploy": "node --run build:blog-data", "deploy": "cross-env NEXT_PUBLIC_STATIC_EXPORT=true node --run build", "predev": "node --run build:blog-data", @@ -38,28 +33,20 @@ "@node-core/ui-components": "workspace:*", "@node-core/website-i18n": "workspace:*", "@nodevu/core": "0.3.0", - "@opentelemetry/api-logs": "~0.218.0", - "@opentelemetry/instrumentation": "~0.218.0", - "@opentelemetry/resources": "~1.30.1", - "@opentelemetry/sdk-logs": "~0.218.0", "@orama/orama": "^3.1.18", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-tooltip": "^1.2.8", + "@radix-ui/react-tabs": "^1.1.18", + "@radix-ui/react-tooltip": "^1.2.13", "@tailwindcss/postcss": "~4.3.0", "@types/node": "catalog:", "@types/react": "catalog:", - "@typescript/vfs": "^1.6.4", "@vcarl/remark-headings": "~0.1.0", - "@vercel/analytics": "~2.0.1", - "@vercel/otel": "~2.1.2", - "@vercel/speed-insights": "~2.0.0", "classnames": "catalog:", "cross-env": "catalog:", "feed": "~5.2.0", "github-slugger": "~2.0.0", "gray-matter": "~4.0.3", "mdast-util-to-string": "^4.0.0", - "next": "16.2.6", + "next": "catalog:", "next-intl": "~4.13.0", "next-themes": "~0.4.6", "postcss-calc": "~10.1.1", @@ -73,25 +60,20 @@ "semver": "~7.8.1", "sval": "^0.6.12", "tailwindcss": "catalog:", - "twoslash": "^0.3.8", "typescript": "catalog:", "unist-util-visit": "^5.1.0", "vfile": "~6.0.3", "vfile-matter": "~5.0.1" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20260418.1", "@eslint-react/eslint-plugin": "~5.8.6", - "@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1", "@next/eslint-plugin-next": "16.2.6", "@node-core/remark-lint": "workspace:*", - "@opennextjs/cloudflare": "^1.19.3", "@orama/core": "^1.2.19", - "@playwright/test": "^1.59.1", - "@sentry/cloudflare": "^10.49.0", + "@playwright/test": "^1.61.1", "@testing-library/user-event": "~14.6.1", "@types/mdast": "^4.0.4", - "@types/mdx": "^2.0.13", + "@types/mdx": "^2.0.14", "@types/semver": "~7.7.1", "babel-plugin-react-compiler": "^1.0.0", "dedent": "^1.7.2", @@ -109,10 +91,40 @@ "tsx": "^4.22.3", "typescript": "catalog:", "typescript-eslint": "~8.59.1", - "user-agent-data-types": "0.4.2", - "wrangler": "^4.77.0" + "user-agent-data-types": "0.4.2" + }, + "peerDependencies": { + "@node-core/platform-cloudflare": "workspace:*", + "@node-core/platform-default": "workspace:*", + "@node-core/platform-vercel": "workspace:*" + }, + "peerDependenciesMeta": { + "@node-core/platform-cloudflare": { + "optional": true + }, + "@node-core/platform-default": { + "optional": true + }, + "@node-core/platform-vercel": { + "optional": true + } }, "imports": { + "#platform/analytics": { + "cloudflare": "@node-core/platform-cloudflare/analytics.mjs", + "vercel": "@node-core/platform-vercel/analytics.tsx", + "default": "@node-core/platform-default/analytics.mjs" + }, + "#platform/instrumentation": { + "cloudflare": "@node-core/platform-cloudflare/instrumentation.mjs", + "vercel": "@node-core/platform-vercel/instrumentation.ts", + "default": "@node-core/platform-default/instrumentation.mjs" + }, + "#platform/*": { + "cloudflare": "@node-core/platform-cloudflare/*", + "vercel": "@node-core/platform-vercel/*", + "default": "@node-core/platform-default/*" + }, "#site/*": [ "./*", "./*.tsx", diff --git a/apps/site/playwright.config.ts b/apps/site/playwright.config.mjs similarity index 51% rename from apps/site/playwright.config.ts rename to apps/site/playwright.config.mjs index 523f40f644582..b4f4f29ce1b1c 100644 --- a/apps/site/playwright.config.ts +++ b/apps/site/playwright.config.mjs @@ -1,6 +1,5 @@ -import { defineConfig, devices, type Config } from '@playwright/test'; - -import json from './package.json' with { type: 'json' }; +import platformConfig from '#platform/playwright.config.mjs'; +import { defineConfig, devices } from '@playwright/test'; const isCI = !!process.env.CI; @@ -12,10 +11,11 @@ export default defineConfig({ retries: isCI ? 2 : 0, workers: isCI ? 1 : undefined, reporter: isCI ? [['html'], ['github']] : [['html']], - ...getWebServerConfig(), + ...platformConfig, use: { baseURL: process.env.PLAYWRIGHT_BASE_URL || 'http://127.0.0.1:3000', trace: 'on-first-retry', + ...platformConfig.use, }, projects: [ { @@ -32,22 +32,3 @@ export default defineConfig({ }, ], }); - -function getWebServerConfig(): Pick { - if (!json.scripts['cloudflare:preview']) { - throw new Error('cloudflare:preview script not defined'); - } - - if (process.env.PLAYWRIGHT_RUN_CLOUDFLARE_PREVIEW) { - return { - webServer: { - stdout: 'pipe', - command: '../../node_modules/.bin/turbo cloudflare:preview', - url: process.env.PLAYWRIGHT_BASE_URL || 'http://127.0.0.1:3000', - timeout: 60_000 * 3, - }, - }; - } - - return {}; -} diff --git a/apps/site/tsconfig.json b/apps/site/tsconfig.json index 02158236da303..334433e743485 100644 --- a/apps/site/tsconfig.json +++ b/apps/site/tsconfig.json @@ -37,14 +37,5 @@ ".next/types/**/*.ts", ".next/dev/types/**/*.ts" ], - "exclude": [ - "node_modules", - ".next", - ".open-next", - // The worker entrypoint is bundled by wrangler (not tsc). Its imports of - // @sentry/cloudflare and .open-next/worker.js trigger an infinite-recursion - // crash in the TypeScript compiler (v5.9) during type resolution of - // @cloudflare/workers-types, so we exclude it from type checking. - "cloudflare/worker-entrypoint.ts" - ] + "exclude": ["node_modules", ".next", ".open-next"] } diff --git a/apps/site/turbo.json b/apps/site/turbo.json index a4977e9cb8273..bcb3469ba50dc 100644 --- a/apps/site/turbo.json +++ b/apps/site/turbo.json @@ -3,11 +3,17 @@ "extends": ["//"], "tasks": { "dev": { - "dependsOn": ["build:blog-data", "build:twoslash-fsmap", "^build"], + "dependsOn": [ + "build:blog-data", + "@node-core/rehype-shiki#build", + "@node-core/remark-lint#build", + "@node-core/ui-components#build", + "@node-core/website-i18n#build" + ], "cache": false, "persistent": true, "env": [ - "VERCEL_ENV", + "VERCEL", "VERCEL_URL", "NEXT_PUBLIC_STATIC_EXPORT", "NEXT_PUBLIC_STATIC_EXPORT_LOCALE", @@ -22,7 +28,13 @@ ] }, "build": { - "dependsOn": ["build:blog-data", "build:twoslash-fsmap", "^build"], + "dependsOn": [ + "build:blog-data", + "@node-core/rehype-shiki#build", + "@node-core/remark-lint#build", + "@node-core/ui-components#build", + "@node-core/website-i18n#build" + ], "inputs": [ "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", "{app,components,layouts,pages,styles}/**/*.css", @@ -32,7 +44,7 @@ ], "outputs": [".next/**", "!.next/cache/**"], "env": [ - "VERCEL_ENV", + "VERCEL", "VERCEL_URL", "NEXT_PUBLIC_STATIC_EXPORT", "NEXT_PUBLIC_STATIC_EXPORT_LOCALE", @@ -51,7 +63,7 @@ "cache": false, "persistent": true, "env": [ - "VERCEL_ENV", + "VERCEL", "VERCEL_URL", "NEXT_PUBLIC_STATIC_EXPORT", "NEXT_PUBLIC_STATIC_EXPORT_LOCALE", @@ -75,7 +87,7 @@ ], "outputs": [".next/**", "!.next/cache/**"], "env": [ - "VERCEL_ENV", + "VERCEL", "VERCEL_URL", "NEXT_PUBLIC_STATIC_EXPORT", "NEXT_PUBLIC_STATIC_EXPORT_LOCALE", @@ -109,13 +121,20 @@ "cache": false }, "lint:types": { + "dependsOn": ["build:blog-data"], "cache": false }, "format": { "cache": false }, "test:unit": { - "dependsOn": ["build:blog-data", "build:twoslash-fsmap", "^build"], + "dependsOn": [ + "build:blog-data", + "@node-core/rehype-shiki#build", + "@node-core/remark-lint#build", + "@node-core/ui-components#build", + "@node-core/website-i18n#build" + ], "inputs": [ "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx,mjs}", "{app,components,layouts,pages,styles}/**/*.css", @@ -129,7 +148,6 @@ "inputs": ["{pages}/**/*.{mdx,md}"], "outputs": ["public/blog-data.json"], "env": [ - "VERCEL_ENV", "VERCEL_URL", "TURBO_CACHE", "TURBO_TELEMETRY_DISABLED", @@ -137,43 +155,6 @@ "ENABLE_EXPERIMENTAL_COREPACK" ] }, - "build:twoslash-fsmap": { - "inputs": ["scripts/twoslash-fsmap/**", "../../pnpm-lock.yaml"], - "outputs": ["generated/twoslash-fsmap.json"] - }, - "cloudflare:build:worker": { - "dependsOn": ["build:blog-data", "build:twoslash-fsmap", "^build"], - "inputs": [ - "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", - "{app,components,layouts,pages,styles}/**/*.css", - "{next-data,scripts,i18n}/**/*.{mjs,json}", - "{app,pages}/**/*.{mdx,md}", - "*.{md,mdx,json,ts,tsx,mjs,yml}" - ], - "outputs": [".open-next/**"] - }, - "cloudflare:preview": { - "dependsOn": ["cloudflare:build:worker"], - "inputs": [ - "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", - "{app,components,layouts,pages,styles}/**/*.css", - "{next-data,scripts,i18n}/**/*.{mjs,json}", - "{app,pages}/**/*.{mdx,md}", - "*.{md,mdx,json,ts,tsx,mjs,yml}" - ], - "outputs": [".open-next/**"] - }, - "cloudflare:deploy": { - "dependsOn": ["cloudflare:build:worker"], - "inputs": [ - "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", - "{app,components,layouts,pages,styles}/**/*.css", - "{next-data,scripts,i18n}/**/*.{mjs,json}", - "{app,pages}/**/*.{mdx,md}", - "*.{md,mdx,json,ts,tsx,mjs,yml}" - ], - "outputs": [".open-next/**"] - }, "scripts:release-post": { "cache": false } diff --git a/apps/site/vercel.json b/apps/site/vercel.json deleted file mode 100644 index b767ff0b425cd..0000000000000 --- a/apps/site/vercel.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "https://openapi.vercel.sh/vercel.json", - "installCommand": "pnpm install --frozen-lockfile", - "ignoreCommand": "[[ \"$VERCEL_GIT_COMMIT_REF\" =~ \"^dependabot/.*\" || \"$VERCEL_GIT_COMMIT_REF\" =~ \"^gh-readonly-queue/.*\" ]]" -} diff --git a/docs/cloudflare-build-and-deployment.md b/docs/cloudflare-build-and-deployment.md index 4ef60cac192a7..ccacddc3ffa0d 100644 --- a/docs/cloudflare-build-and-deployment.md +++ b/docs/cloudflare-build-and-deployment.md @@ -14,7 +14,7 @@ For more details, refer to the [Wrangler documentation](https://developers.cloud Key configurations include: -- `main`: Points to a custom worker entry point ([`site/cloudflare/worker-entrypoint.ts`](../apps/site/cloudflare/worker-entrypoint.ts)) that wraps the OpenNext-generated worker (see [Custom Worker Entry Point](#custom-worker-entry-point) and [Sentry](#sentry) below). +- `main`: Points to a custom worker entry point ([`platforms/cloudflare/worker-entrypoint.ts`](../platforms/cloudflare/worker-entrypoint.ts)) that wraps the OpenNext-generated worker (see [Custom Worker Entry Point](#custom-worker-entry-point) and [Sentry](#sentry) below). - `account_id`: Specifies the Cloudflare account ID. This is not required for local previews but is necessary for deployments. You can obtain an account ID for free by signing up at [dash.cloudflare.com](https://dash.cloudflare.com/login). - This is set to `07be8d2fbc940503ca1be344714cb0d1`, which is the ID of a Cloudflare account controlled by Node.js. - `build`: Defines the build command to generate the Node.js filesystem polyfills required for the application to run on Cloudflare Workers. This uses the [`@flarelabs/wrangler-build-time-fs-assets-polyfilling`](https://github.com/flarelabs-net/wrangler-build-time-fs-assets-polyfilling) package. @@ -49,15 +49,15 @@ Additionally, when deploying, an extra `CF_WORKERS_SCRIPTS_API_TOKEN` environmen ### Image loader -When deployed on the Cloudflare network a custom image loader is required. We set such loader in the Next.js config file when the `OPEN_NEXT_CLOUDFLARE` environment variable is set (which indicates that we're building the application for the Cloudflare deployment). +When deployed on the Cloudflare network a custom image loader is required. The Cloudflare platform's Next.js configuration fragment ([`platforms/cloudflare/next.config.mjs`](../platforms/cloudflare/next.config.mjs)) sets such loader when building for the Cloudflare deployment. -The custom loader can be found at [`site/cloudflare/image-loader.ts`](../apps/site/cloudflare/image-loader.ts). +The custom loader can be found at [`platforms/cloudflare/image-loader.ts`](../platforms/cloudflare/image-loader.ts). For more details on this see: https://developers.cloudflare.com/images/transform-images/integrate-with-frameworks/#global-loader ### Custom Worker Entry Point -Instead of directly using the OpenNext-generated worker (`.open-next/worker.js`), the application uses a custom worker entry point at [`site/cloudflare/worker-entrypoint.ts`](../apps/site/cloudflare/worker-entrypoint.ts). This allows customizing the worker's behavior before requests are handled (currently used to integrate [Sentry](#sentry) error monitoring). +Instead of directly using the OpenNext-generated worker (`.open-next/worker.js`), the application uses a custom worker entry point at [`platforms/cloudflare/worker-entrypoint.ts`](../platforms/cloudflare/worker-entrypoint.ts). This allows customizing the worker's behavior before requests are handled (currently used to integrate [Sentry](#sentry) error monitoring). The custom entry point imports the OpenNext-generated handler from `.open-next/worker.js` and re-exports the `DOQueueHandler` Durable Object needed by the application. @@ -75,7 +75,8 @@ For more details, refer to the [Sentry Cloudflare guide](https://docs.sentry.io/ ## Scripts -Preview and deployment of the website targeting the Cloudflare network is implemented via the following two commands: +Building, previewing, and deploying the website targeting the Cloudflare network is implemented via the following commands (all part of the [`@node-core/platform-cloudflare`](../platforms/cloudflare/package.json) package): -- `pnpm cloudflare:preview` builds the website using the OpenNext Cloudflare adapter and runs the website locally in a server simulating the Cloudflare hosting (using the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)) -- `pnpm cloudflare:deploy` builds the website using the OpenNext Cloudflare adapter and deploys the website to the Cloudflare network (using the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)) +- `pnpm --filter=@node-core/platform-cloudflare build` builds the website using the OpenNext Cloudflare adapter +- `pnpm --filter=@node-core/platform-cloudflare preview` runs a previously built worker locally in a server simulating the Cloudflare hosting (using the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)) +- `pnpm --filter=@node-core/platform-cloudflare run deploy` builds the website using the OpenNext Cloudflare adapter and deploys it to the Cloudflare network (using the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)) diff --git a/docs/getting-started.md b/docs/getting-started.md index 731ff649b5b1d..7a6aef3fb9a6d 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -108,7 +108,7 @@ This guide will help you set up your development environment and make your first ### Development Commands - `pnpm dev` - Start local development server -- `pnpm build` - Build for production (Vercel deployments) +- `pnpm build` - Build for production - `pnpm deploy` - Build for export (Legacy server) - `pnpm start` - Start server with built content diff --git a/docs/technologies.md b/docs/technologies.md index e54940426bc72..c2070160578f2 100644 --- a/docs/technologies.md +++ b/docs/technologies.md @@ -293,14 +293,14 @@ Benefits: #### Multiple Build Targets -- **`pnpm build`**: Production build for Vercel +- **`pnpm build`**: Production build for the default platform - **`pnpm deploy`**: Export build for legacy servers - **`pnpm dev`**: Development server #### Vercel Integration - Automatic deployments for branches (ignoring automated branches) -- Custom install + ignore scripts ([see `vercel.json`](../apps/site/vercel.json)) +- Custom install + ignore scripts ([see `vercel.json`](../platforms/vercel/vercel.json)) - Build-time dependencies must be in `dependencies`, not `devDependencies` - Sponsorship maintained by OpenJS Foundation diff --git a/package.json b/package.json index 245c26d4e752e..d7d7eabe85d2f 100644 --- a/package.json +++ b/package.json @@ -13,12 +13,10 @@ "name": "Node.js Website Team and Contributors" }, "scripts": { - "build": "turbo build", + "build": "turbo build --filter=@node-core/website", "changeset": "changeset", "changeset:version": "changeset version", - "cloudflare:deploy": "turbo cloudflare:deploy", - "cloudflare:preview": "turbo cloudflare:preview", - "deploy": "turbo deploy", + "deploy": "turbo deploy --filter=@node-core/website", "dev": "turbo dev", "format": "turbo //#prettier:fix prettier:fix lint:fix", "lint": "turbo lint", @@ -28,7 +26,7 @@ "prepare": "husky", "prettier": "prettier \"**/*.{js,mjs,ts,tsx,md,mdx,json,yml,css}\" --check --cache --cache-strategy=content --cache-location=.prettiercache", "prettier:fix": "node --run prettier -- --write", - "release": "pnpm --filter './packages/*' --if-present run build && changeset publish", + "release": "pnpm --filter './packages/*' --if-present run build && pnpm publish -r --access=public", "scripts:release-post": "turbo scripts:release-post", "start": "turbo start", "storybook": "turbo storybook", diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md new file mode 100644 index 0000000000000..fd7976cc69f42 --- /dev/null +++ b/packages/i18n/CHANGELOG.md @@ -0,0 +1,7 @@ +# @node-core/website-i18n + +## 1.1.33 + +### Patch Changes + +- [#9020](https://github.com/nodejs/nodejs.org/pull/9020) [`0492dea`](https://github.com/nodejs/nodejs.org/commit/0492dea85e2a7096cf89e26c1e24d1c41b7d595f) Thanks [@avivkeller](https://github.com/avivkeller)! - Migrate package versioning and publishing to Changesets. diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 26a9d734bef5a..bff521dc7d110 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@node-core/website-i18n", - "version": "1.1.32", + "version": "1.1.33", "type": "module", "exports": { "./*": [ diff --git a/packages/rehype-shiki/CHANGELOG.md b/packages/rehype-shiki/CHANGELOG.md new file mode 100644 index 0000000000000..b7ed9d91622ee --- /dev/null +++ b/packages/rehype-shiki/CHANGELOG.md @@ -0,0 +1,9 @@ +# @node-core/rehype-shiki + +## 1.4.3 + +### Patch Changes + +- [#9020](https://github.com/nodejs/nodejs.org/pull/9020) [`0492dea`](https://github.com/nodejs/nodejs.org/commit/0492dea85e2a7096cf89e26c1e24d1c41b7d595f) Thanks [@avivkeller](https://github.com/avivkeller)! - Migrate package versioning and publishing to Changesets. + +- [#9031](https://github.com/nodejs/nodejs.org/pull/9031) [`07a6844`](https://github.com/nodejs/nodejs.org/commit/07a684424a5895793899c20366bd9b4a0426be6b) Thanks [@avivkeller](https://github.com/avivkeller)! - Add light mode theming to code elements diff --git a/packages/rehype-shiki/package.json b/packages/rehype-shiki/package.json index bac62181ee654..eff1ae6e5abf6 100644 --- a/packages/rehype-shiki/package.json +++ b/packages/rehype-shiki/package.json @@ -1,6 +1,6 @@ { "name": "@node-core/rehype-shiki", - "version": "1.4.2", + "version": "1.4.3", "type": "module", "types": "./dist/index.d.mts", "exports": { @@ -31,13 +31,13 @@ "test:unit": "cross-env NODE_NO_WARNINGS=1 node --experimental-test-coverage --experimental-test-module-mocks --test \"**/*.test.mjs\"" }, "dependencies": { - "@shikijs/core": "^4.0.2", - "@shikijs/engine-javascript": "^4.0.2", - "@shikijs/engine-oniguruma": "^4.0.2", - "@shikijs/twoslash": "^4.0.2", + "@shikijs/core": "^4.3.1", + "@shikijs/engine-javascript": "^4.3.1", + "@shikijs/engine-oniguruma": "^4.3.1", + "@shikijs/twoslash": "^4.3.1", "classnames": "catalog:", "hast-util-to-string": "^3.0.1", - "shiki": "~4.0.2", + "shiki": "~4.3.1", "typescript": "catalog:", "unist-util-visit": "^5.1.0" }, diff --git a/packages/remark-lint/CHANGELOG.md b/packages/remark-lint/CHANGELOG.md new file mode 100644 index 0000000000000..5a4a9b87160c7 --- /dev/null +++ b/packages/remark-lint/CHANGELOG.md @@ -0,0 +1,9 @@ +# @node-core/remark-lint + +## 1.4.1 + +### Patch Changes + +- [#9020](https://github.com/nodejs/nodejs.org/pull/9020) [`0492dea`](https://github.com/nodejs/nodejs.org/commit/0492dea85e2a7096cf89e26c1e24d1c41b7d595f) Thanks [@avivkeller](https://github.com/avivkeller)! - Migrate package versioning and publishing to Changesets. + +- [#9016](https://github.com/nodejs/nodejs.org/pull/9016) [`b42f4e0`](https://github.com/nodejs/nodejs.org/commit/b42f4e07fa7488599dba3d33a0183216b6354dcb) Thanks [@avivkeller](https://github.com/avivkeller)! - Add link validation and fix issues in type validation diff --git a/packages/remark-lint/package.json b/packages/remark-lint/package.json index df2049a563b1a..348fed45129aa 100644 --- a/packages/remark-lint/package.json +++ b/packages/remark-lint/package.json @@ -1,7 +1,7 @@ { "name": "@node-core/remark-lint", "type": "module", - "version": "1.4.0", + "version": "1.4.1", "exports": { ".": "./src/index.mjs", "./api": "./src/api.mjs", @@ -43,9 +43,9 @@ "remark-lint-no-shell-dollars": "^4.0.1", "remark-lint-no-table-indentation": "^5.0.1", "remark-lint-no-tabs": "^4.0.1", - "remark-lint-no-trailing-spaces": "^4.0.3", + "remark-lint-no-trailing-spaces": "^5.0.0", "remark-lint-no-unused-definitions": "^4.0.2", - "remark-lint-prohibited-strings": "^4.0.0", + "remark-lint-prohibited-strings": "^5.0.0", "remark-lint-rule-style": "^4.0.1", "remark-lint-strong-marker": "^4.0.1", "remark-lint-table-cell-padding": "^5.1.1", diff --git a/packages/ui-components/CHANGELOG.md b/packages/ui-components/CHANGELOG.md new file mode 100644 index 0000000000000..44f2e6a4c766d --- /dev/null +++ b/packages/ui-components/CHANGELOG.md @@ -0,0 +1,15 @@ +# @node-core/ui-components + +## 1.7.4 + +### Patch Changes + +- [#9047](https://github.com/nodejs/nodejs.org/pull/9047) [`94e27d2`](https://github.com/nodejs/nodejs.org/commit/94e27d221d09665d7464498e3e9de37ac45168a1) Thanks [@avivkeller](https://github.com/avivkeller)! - Always mount CodeTabs, even when inactive + +- [#9020](https://github.com/nodejs/nodejs.org/pull/9020) [`0492dea`](https://github.com/nodejs/nodejs.org/commit/0492dea85e2a7096cf89e26c1e24d1c41b7d595f) Thanks [@avivkeller](https://github.com/avivkeller)! - Migrate package versioning and publishing to Changesets. + +- [#9024](https://github.com/nodejs/nodejs.org/pull/9024) [`ec199d0`](https://github.com/nodejs/nodejs.org/commit/ec199d069317b296cf88ef8c6cba0226a64ef9fd) Thanks [@avivkeller](https://github.com/avivkeller)! - Add a default `aria-label` to `ThemeToggle`. + +- [#9028](https://github.com/nodejs/nodejs.org/pull/9028) [`ca47d6f`](https://github.com/nodejs/nodejs.org/commit/ca47d6fa908901335705782ee71216f711fa87c8) Thanks [@avivkeller](https://github.com/avivkeller)! - Account for a possible wrapper between a code boxes `pre` and `code`. + +- [#9031](https://github.com/nodejs/nodejs.org/pull/9031) [`07a6844`](https://github.com/nodejs/nodejs.org/commit/07a684424a5895793899c20366bd9b4a0426be6b) Thanks [@avivkeller](https://github.com/avivkeller)! - Add light mode theming to code elements diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index 4cda6c706c749..21748cbc98a28 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -1,6 +1,6 @@ { "name": "@node-core/ui-components", - "version": "1.7.3", + "version": "1.7.4", "type": "module", "exports": { "./*": { @@ -52,14 +52,14 @@ "@heroicons/react": "^2.2.0", "@orama/orama": "^3.1.18", "@orama/ui": "^1.5.4", - "@radix-ui/react-avatar": "^1.1.11", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-label": "^2.1.8", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-separator": "^1.1.8", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-tooltip": "^1.2.8", + "@radix-ui/react-avatar": "^1.2.3", + "@radix-ui/react-dialog": "^1.1.20", + "@radix-ui/react-dropdown-menu": "^2.1.21", + "@radix-ui/react-label": "^2.1.12", + "@radix-ui/react-select": "^2.3.4", + "@radix-ui/react-separator": "^1.1.12", + "@radix-ui/react-tabs": "^1.1.18", + "@radix-ui/react-tooltip": "^1.2.13", "@vcarl/remark-headings": "~0.1.0", "classnames": "catalog:", "react": "catalog:" diff --git a/packages/ui-components/src/Common/CodeTabs/index.module.css b/packages/ui-components/src/Common/CodeTabs/index.module.css index 30a5f0dd155dd..0c15b4775d1f0 100644 --- a/packages/ui-components/src/Common/CodeTabs/index.module.css +++ b/packages/ui-components/src/Common/CodeTabs/index.module.css @@ -1,6 +1,11 @@ @reference "../../styles/index.css"; .root { + /* `forceMount` keeps every panel in the DOM, so hide the inactive ones here */ + > [role='tabpanel'][data-state='inactive'] { + @apply hidden; + } + > [role='tabpanel'] > :first-child { @apply rounded-t-none; } diff --git a/packages/ui-components/src/MDX/CodeTabs.tsx b/packages/ui-components/src/MDX/CodeTabs.tsx index 1861f7e7d5736..a4092ae6ece73 100644 --- a/packages/ui-components/src/MDX/CodeTabs.tsx +++ b/packages/ui-components/src/MDX/CodeTabs.tsx @@ -57,7 +57,11 @@ const MDXCodeTabs: FC = ({ {...props} > {languages.map((_, index) => ( - + {codes[index]} ))} diff --git a/platforms/cloudflare/analytics.mjs b/platforms/cloudflare/analytics.mjs new file mode 100644 index 0000000000000..a9df8597f4ccd --- /dev/null +++ b/platforms/cloudflare/analytics.mjs @@ -0,0 +1,12 @@ +/** + * Analytics for the Cloudflare deployment: there are none, so this renders + * nothing. Only Vercel currently provides analytics. + * + * Deliberately not a `.tsx` file — keeping it JSX-free means this package + * needs no React dependency to satisfy the `#platform/*` interface. + * + * @type {() => null} + */ +const PlatformAnalytics = () => null; + +export default PlatformAnalytics; diff --git a/apps/site/mdx/create-vfs-twoslasher.mjs b/platforms/cloudflare/create-vfs-twoslasher.mjs similarity index 91% rename from apps/site/mdx/create-vfs-twoslasher.mjs rename to platforms/cloudflare/create-vfs-twoslasher.mjs index d4c34d1655a0c..264b18696ae86 100644 --- a/apps/site/mdx/create-vfs-twoslasher.mjs +++ b/platforms/cloudflare/create-vfs-twoslasher.mjs @@ -11,7 +11,7 @@ export async function createVfsTwoslasher() { const { createTwoslasher } = await import('twoslash/core'); const ts = (await import('typescript')).default; const fsMapJson = ( - await import('../generated/twoslash-fsmap.json', { with: { type: 'json' } }) + await import('./generated/twoslash-fsmap.json', { with: { type: 'json' } }) ).default; const fsMap = new Map(Object.entries(fsMapJson)); diff --git a/apps/site/cloudflare/image-loader.ts b/platforms/cloudflare/image-loader.ts similarity index 100% rename from apps/site/cloudflare/image-loader.ts rename to platforms/cloudflare/image-loader.ts diff --git a/platforms/cloudflare/instrumentation.mjs b/platforms/cloudflare/instrumentation.mjs new file mode 100644 index 0000000000000..b5b9d7a41904d --- /dev/null +++ b/platforms/cloudflare/instrumentation.mjs @@ -0,0 +1,6 @@ +/** + * Instrumentation for the Cloudflare deployment: the Worker is instrumented + * through the Sentry integration in `worker-entrypoint.ts` instead, so the + * Next.js hook is a no-op here. + */ +export const register = () => {}; diff --git a/platforms/cloudflare/next.config.mjs b/platforms/cloudflare/next.config.mjs new file mode 100644 index 0000000000000..ebf5c26eb4013 --- /dev/null +++ b/platforms/cloudflare/next.config.mjs @@ -0,0 +1,35 @@ +import { getDeploymentId } from '@opennextjs/cloudflare'; + +/** + * @type {import('next').NextConfig} + */ +export default { + // Skew protection: Cloudflare routes requests by deploymentId so a client + // and the worker stay in sync across rolling deploys. + deploymentId: await getDeploymentId(), + images: { + // Cloudflare image optimization requires a custom loader. Note that this + // replaces the shared `images` configuration: `remotePatterns` do not + // apply, as allowed source origins are enforced at the edge instead + // (configured in the Cloudflare dashboard to the same values). + // https://developers.cloudflare.com/images/transform-images/sources/ + loader: 'custom', + // Relative to the Next.js app directory (`apps/site`), where the build + // runs. + loaderFile: '../../platforms/cloudflare/image-loader.ts', + }, + // `NODE_OPTIONS=--conditions=cloudflare` only applies to Node's own resolver, + // which is what loads this file. The bundler resolves `#platform/*` with its + // own set of conditions, so it must be told about `cloudflare` separately — + // without this, the bundled code falls back to `platforms/default`. + webpack: config => { + config.resolve.conditionNames = [ + 'cloudflare', + // Anything already configured by Next.js, which in turn inherits + // webpack's defaults through the `'...'` entry. + ...config.resolve.conditionNames, + ]; + + return config; + }, +}; diff --git a/apps/site/open-next.config.ts b/platforms/cloudflare/open-next.config.ts similarity index 100% rename from apps/site/open-next.config.ts rename to platforms/cloudflare/open-next.config.ts diff --git a/platforms/cloudflare/package.json b/platforms/cloudflare/package.json new file mode 100644 index 0000000000000..e87af2327934c --- /dev/null +++ b/platforms/cloudflare/package.json @@ -0,0 +1,41 @@ +{ + "name": "@node-core/platform-cloudflare", + "private": true, + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/nodejs/nodejs.org", + "directory": "platforms/cloudflare" + }, + "scripts": { + "prebuild": "node ./scripts/twoslash-fsmap/index.mjs", + "build": "cross-env NODE_OPTIONS=--conditions=cloudflare pnpm --filter=@node-core/website exec opennextjs-cloudflare build --openNextConfigPath ../../platforms/cloudflare/open-next.config.ts --config ../../platforms/cloudflare/wrangler.jsonc", + "predeploy": "node ./scripts/twoslash-fsmap/index.mjs", + "deploy": "cross-env NODE_OPTIONS=--conditions=cloudflare pnpm --filter=@node-core/website exec opennextjs-cloudflare deploy --openNextConfigPath ../../platforms/cloudflare/open-next.config.ts --config ../../platforms/cloudflare/wrangler.jsonc", + "preview": "pnpm --filter=@node-core/website exec wrangler dev --config ../../platforms/cloudflare/wrangler.jsonc", + "test:e2e": "cross-env NODE_OPTIONS=--conditions=cloudflare pnpm --filter=@node-core/website playwright", + "lint:types": "tsc --noEmit" + }, + "dependencies": { + "@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1", + "@opennextjs/cloudflare": "^1.19.3", + "@sentry/cloudflare": "^10.49.0", + "@typescript/vfs": "^1.6.4", + "twoslash": "^0.3.9", + "typescript": "catalog:", + "wrangler": "^4.77.0" + }, + "peerDependencies": { + "next": "catalog:" + }, + "devDependencies": { + "@cloudflare/workers-types": "^4.20260418.1", + "@playwright/test": "^1.61.1", + "@types/node": "catalog:", + "cross-env": "catalog:", + "next": "catalog:" + }, + "engines": { + "node": "24.x" + } +} diff --git a/platforms/cloudflare/playwright.config.mjs b/platforms/cloudflare/playwright.config.mjs new file mode 100644 index 0000000000000..ad608083814e6 --- /dev/null +++ b/platforms/cloudflare/playwright.config.mjs @@ -0,0 +1,16 @@ +/** + * Playwright configuration for the Cloudflare platform: tests run against a + * local `wrangler dev` server simulating the Cloudflare hosting. The worker + * must be built first (`pnpm --filter=@node-core/platform-cloudflare build:worker`). + * + * @type {import('@playwright/test').PlaywrightTestConfig} + */ +export default { + use: { baseURL: 'http://127.0.0.1:8787' }, + webServer: { + stdout: 'pipe', + command: 'pnpm --filter=@node-core/platform-cloudflare preview', + url: 'http://127.0.0.1:8787', + timeout: 60_000 * 3, + }, +}; diff --git a/apps/site/scripts/twoslash-fsmap/generate.mjs b/platforms/cloudflare/scripts/twoslash-fsmap/generate.mjs similarity index 100% rename from apps/site/scripts/twoslash-fsmap/generate.mjs rename to platforms/cloudflare/scripts/twoslash-fsmap/generate.mjs diff --git a/apps/site/scripts/twoslash-fsmap/index.mjs b/platforms/cloudflare/scripts/twoslash-fsmap/index.mjs similarity index 100% rename from apps/site/scripts/twoslash-fsmap/index.mjs rename to platforms/cloudflare/scripts/twoslash-fsmap/index.mjs diff --git a/platforms/cloudflare/shiki.mjs b/platforms/cloudflare/shiki.mjs new file mode 100644 index 0000000000000..edacb64ae66d8 --- /dev/null +++ b/platforms/cloudflare/shiki.mjs @@ -0,0 +1,19 @@ +import { createVfsTwoslasher } from './create-vfs-twoslasher.mjs'; + +/** + * `@node-core/rehype-shiki` options for Cloudflare Workers, where two of the + * defaults cannot work: + * + * - `shiki/wasm` requires loading via `WebAssembly.instantiate` with custom + * imports, which Cloudflare doesn't support for security reasons, so we + * fall back to the JavaScript RegExp engine. + * - The default filesystem-backed Twoslash cannot work because there is no + * real filesystem. Instead, we provide a custom twoslasher backed by an + * in-memory VFS pre-populated at build time with TypeScript lib + * declarations and `@types/node` (see `scripts/twoslash-fsmap`). + */ +export const shikiOptions = { + wasm: false, + twoslash: true, + twoslashOptions: { twoslasher: await createVfsTwoslasher() }, +}; diff --git a/platforms/cloudflare/tsconfig.json b/platforms/cloudflare/tsconfig.json new file mode 100644 index 0000000000000..d26187e207e1a --- /dev/null +++ b/platforms/cloudflare/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": ["esnext"], + "module": "esnext", + "moduleResolution": "Bundler", + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "isolatedModules": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": [ + "node_modules", + // The worker entrypoint is bundled by wrangler, not tsc. It imports + // apps/site/.open-next/worker.js, a build artifact that does not exist when + // `lint:types` runs, and type resolution of @cloudflare/workers-types has + // also been observed to crash the compiler here, so we skip type checking it. + "worker-entrypoint.ts" + ] +} diff --git a/platforms/cloudflare/turbo.json b/platforms/cloudflare/turbo.json new file mode 100644 index 0000000000000..462764e8d817c --- /dev/null +++ b/platforms/cloudflare/turbo.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "build": { + "dependsOn": [ + "@node-core/website#build:blog-data", + "@node-core/rehype-shiki#build", + "@node-core/remark-lint#build", + "@node-core/ui-components#build", + "@node-core/website-i18n#build" + ] + }, + "lint:types": { + "cache": false + } + } +} diff --git a/apps/site/cloudflare/worker-entrypoint.ts b/platforms/cloudflare/worker-entrypoint.ts similarity index 91% rename from apps/site/cloudflare/worker-entrypoint.ts rename to platforms/cloudflare/worker-entrypoint.ts index bd40543b4b9dd..9ce832bf58f15 100644 --- a/apps/site/cloudflare/worker-entrypoint.ts +++ b/platforms/cloudflare/worker-entrypoint.ts @@ -11,7 +11,7 @@ import type { Request, } from '@cloudflare/workers-types'; -import { default as handler } from '../.open-next/worker.js'; +import { default as handler } from '../../apps/site/.open-next/worker.js'; export default withSentry( (env: { @@ -50,4 +50,4 @@ export default withSentry( } ); -export { DOQueueHandler } from '../.open-next/worker.js'; +export { DOQueueHandler } from '../../apps/site/.open-next/worker.js'; diff --git a/apps/site/wrangler.jsonc b/platforms/cloudflare/wrangler.jsonc similarity index 69% rename from apps/site/wrangler.jsonc rename to platforms/cloudflare/wrangler.jsonc index 4cb72688a59af..a989bf26667bc 100644 --- a/apps/site/wrangler.jsonc +++ b/platforms/cloudflare/wrangler.jsonc @@ -1,6 +1,6 @@ { "$schema": "./node_modules/wrangler/config-schema.json", - "main": "./cloudflare/worker-entrypoint.ts", + "main": "./worker-entrypoint.ts", "name": "nodejs-website", "compatibility_date": "2024-11-07", "compatibility_flags": ["nodejs_compat", "global_fetch_strictly_public"], @@ -8,7 +8,7 @@ "minify": true, "keep_names": false, "assets": { - "directory": ".open-next/assets", + "directory": "../../apps/site/.open-next/assets", "binding": "ASSETS", "run_worker_first": true, }, @@ -31,13 +31,16 @@ "head_sampling_rate": 1, }, "build": { + // The polyfilled filesystem assets are read from (and written next to) + // the Next.js app, not this package. + "cwd": "../../apps/site", "command": "wrangler-build-time-fs-assets-polyfilling --assets pages --assets snippets --assets-output-dir .open-next/assets", }, "alias": { - "node:fs": "./.wrangler/fs-assets-polyfilling/polyfills/node/fs.ts", - "node:fs/promises": "./.wrangler/fs-assets-polyfilling/polyfills/node/fs/promises.ts", - "fs": "./.wrangler/fs-assets-polyfilling/polyfills/node/fs.ts", - "fs/promises": "./.wrangler/fs-assets-polyfilling/polyfills/node/fs/promises.ts", + "node:fs": "../../apps/site/.wrangler/fs-assets-polyfilling/polyfills/node/fs.ts", + "node:fs/promises": "../../apps/site/.wrangler/fs-assets-polyfilling/polyfills/node/fs/promises.ts", + "fs": "../../apps/site/.wrangler/fs-assets-polyfilling/polyfills/node/fs.ts", + "fs/promises": "../../apps/site/.wrangler/fs-assets-polyfilling/polyfills/node/fs/promises.ts", }, "r2_buckets": [ { diff --git a/platforms/default/analytics.mjs b/platforms/default/analytics.mjs new file mode 100644 index 0000000000000..4ac017b5ca5e3 --- /dev/null +++ b/platforms/default/analytics.mjs @@ -0,0 +1,12 @@ +/** + * Analytics for self-hosted deployments: there are none, so this renders + * nothing. Only Vercel currently provides analytics. + * + * Deliberately not a `.tsx` file — keeping it JSX-free means this package + * needs no React dependency to satisfy the `#platform/*` interface. + * + * @type {() => null} + */ +const PlatformAnalytics = () => null; + +export default PlatformAnalytics; diff --git a/platforms/default/instrumentation.mjs b/platforms/default/instrumentation.mjs new file mode 100644 index 0000000000000..144369cf75f83 --- /dev/null +++ b/platforms/default/instrumentation.mjs @@ -0,0 +1,5 @@ +/** + * Instrumentation for self-hosted deployments: there is none, so registering + * is a no-op. Only Vercel currently provides instrumentation. + */ +export const register = () => {}; diff --git a/platforms/default/next.config.mjs b/platforms/default/next.config.mjs new file mode 100644 index 0000000000000..33503298867e2 --- /dev/null +++ b/platforms/default/next.config.mjs @@ -0,0 +1,4 @@ +/** + * @type {import('next').NextConfig} + */ +export default {}; diff --git a/platforms/default/package.json b/platforms/default/package.json new file mode 100644 index 0000000000000..1aa91c7d16c45 --- /dev/null +++ b/platforms/default/package.json @@ -0,0 +1,17 @@ +{ + "name": "@node-core/platform-default", + "private": true, + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/nodejs/nodejs.org", + "directory": "platforms/default" + }, + "devDependencies": { + "@playwright/test": "^1.61.1", + "next": "catalog:" + }, + "engines": { + "node": "24.x" + } +} diff --git a/platforms/default/playwright.config.mjs b/platforms/default/playwright.config.mjs new file mode 100644 index 0000000000000..759afb9011516 --- /dev/null +++ b/platforms/default/playwright.config.mjs @@ -0,0 +1,8 @@ +/** + * Playwright configuration for the default platform: tests run against an + * externally started server (see `PLAYWRIGHT_BASE_URL`), so there is nothing + * to add to the shared configuration in `apps/site/playwright.config.mjs`. + * + * @type {import('@playwright/test').PlaywrightTestConfig} + */ +export default {}; diff --git a/platforms/default/shiki.mjs b/platforms/default/shiki.mjs new file mode 100644 index 0000000000000..cf054fcc5ba0b --- /dev/null +++ b/platforms/default/shiki.mjs @@ -0,0 +1,7 @@ +/** + * `@node-core/rehype-shiki` options for self-hosted deployments, where both + * defaults work: the WASM engine is the faster of the two, and Twoslash can + * use the real filesystem. Cloudflare overrides both (see + * `platforms/cloudflare/shiki.mjs`). + */ +export const shikiOptions = { wasm: true, twoslash: true }; diff --git a/platforms/vercel/analytics.tsx b/platforms/vercel/analytics.tsx new file mode 100644 index 0000000000000..682e13a5ed9f1 --- /dev/null +++ b/platforms/vercel/analytics.tsx @@ -0,0 +1,13 @@ +import { Analytics } from '@vercel/analytics/react'; +import { SpeedInsights } from '@vercel/speed-insights/next'; + +import type { FC } from 'react'; + +const VercelAnalytics: FC = () => ( + <> + + + +); + +export default VercelAnalytics; diff --git a/platforms/vercel/instrumentation.ts b/platforms/vercel/instrumentation.ts new file mode 100644 index 0000000000000..3e7a06a7d37d2 --- /dev/null +++ b/platforms/vercel/instrumentation.ts @@ -0,0 +1,3 @@ +import { registerOTel } from '@vercel/otel'; + +export const register = () => registerOTel({ serviceName: 'nodejs-org' }); diff --git a/platforms/vercel/next.config.mjs b/platforms/vercel/next.config.mjs new file mode 100644 index 0000000000000..f759ff64b58bd --- /dev/null +++ b/platforms/vercel/next.config.mjs @@ -0,0 +1,27 @@ +/** + * @type {import('next').NextConfig} + */ +export default { + // `BASE_URL` (see `apps/site/next.constants.mjs`) reads + // `NEXT_PUBLIC_BASE_URL` and falls back to the canonical + // `https://nodejs.org`. On Vercel deployments where it isn't set explicitly + // (e.g. previews) we point it at the URL Vercel generated instead. + env: + !process.env.NEXT_PUBLIC_BASE_URL && process.env.VERCEL_URL + ? { NEXT_PUBLIC_BASE_URL: `https://${process.env.VERCEL_URL}` } + : {}, + // `NODE_OPTIONS=--conditions=vercel` (see `vercel.json`) only applies to + // Node's own resolver, which is what loads this file. Turbopack resolves + // `#platform/*` with its own set of conditions and, unlike webpack, exposes + // no way to extend them (i think). + // + // TODO(@avivkeller): File a bug with turbopack + turbopack: { + resolveAlias: { + '#platform/analytics': '@node-core/platform-vercel/analytics.tsx', + '#platform/instrumentation': + '@node-core/platform-vercel/instrumentation.ts', + '#platform/shiki.mjs': '@node-core/platform-vercel/shiki.mjs', + }, + }, +}; diff --git a/platforms/vercel/package.json b/platforms/vercel/package.json new file mode 100644 index 0000000000000..388d7372c052d --- /dev/null +++ b/platforms/vercel/package.json @@ -0,0 +1,33 @@ +{ + "name": "@node-core/platform-vercel", + "private": true, + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/nodejs/nodejs.org", + "directory": "platforms/vercel" + }, + "dependencies": { + "@opentelemetry/api-logs": "~0.218.0", + "@opentelemetry/instrumentation": "~0.218.0", + "@opentelemetry/resources": "~1.30.1", + "@opentelemetry/sdk-logs": "~0.218.0", + "@vercel/analytics": "~2.0.1", + "@vercel/otel": "~2.1.2", + "@vercel/speed-insights": "~2.0.0" + }, + "peerDependencies": { + "next": "catalog:", + "react": "catalog:" + }, + "devDependencies": { + "@playwright/test": "^1.61.1", + "@types/react": "catalog:", + "next": "catalog:", + "react": "catalog:", + "typescript": "catalog:" + }, + "engines": { + "node": "24.x" + } +} diff --git a/platforms/vercel/playwright.config.mjs b/platforms/vercel/playwright.config.mjs new file mode 100644 index 0000000000000..7689383051bba --- /dev/null +++ b/platforms/vercel/playwright.config.mjs @@ -0,0 +1,8 @@ +/** + * Playwright configuration for the Vercel platform: tests run against a + * deployed preview (see `.github/workflows/playwright.yml`), so there is + * nothing to add to the shared configuration. + * + * @type {import('@playwright/test').PlaywrightTestConfig} + */ +export default {}; diff --git a/platforms/vercel/shiki.mjs b/platforms/vercel/shiki.mjs new file mode 100644 index 0000000000000..710b7b129c600 --- /dev/null +++ b/platforms/vercel/shiki.mjs @@ -0,0 +1,9 @@ +/** + * `@node-core/rehype-shiki` options for the Vercel deployment. Vercel runs a + * regular Node.js server, so both defaults work and these match the + * self-hosted options (see `platforms/default/shiki.mjs`). They are repeated + * rather than re-exported so the platform packages stay independent of one + * another — a deployment installs only its own (see the `installCommand` in + * `vercel.json`). + */ +export const shikiOptions = { wasm: true, twoslash: true }; diff --git a/platforms/vercel/tsconfig.json b/platforms/vercel/tsconfig.json new file mode 100644 index 0000000000000..eab8850d156de --- /dev/null +++ b/platforms/vercel/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": ["dom", "dom.iterable", "esnext"], + "module": "esnext", + "moduleResolution": "Bundler", + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "isolatedModules": true, + "jsx": "react-jsx" + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/platforms/vercel/vercel.json b/platforms/vercel/vercel.json new file mode 100644 index 0000000000000..23b679d2b2673 --- /dev/null +++ b/platforms/vercel/vercel.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://openapi.vercel.sh/vercel.json", + "installCommand": "pnpm install --frozen-lockfile --filter=@node-core/website... --filter=@node-core/platform-vercel...", + "buildCommand": "turbo --filter=@node-core/website build", + "build": { + "env": { + "NODE_OPTIONS": "--conditions=vercel" + } + }, + "outputDirectory": "../../apps/site/.next", + "ignoreCommand": "[[ \"$VERCEL_GIT_COMMIT_REF\" =~ \"^dependabot/.*\" || \"$VERCEL_GIT_COMMIT_REF\" =~ \"^gh-readonly-queue/.*\" ]]" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16c8a44666061..fbfbf55589c26 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -217,6 +217,9 @@ catalogs: cross-env: specifier: ^10.0.0 version: 10.1.0 + next: + specifier: 16.3.0-preview.9 + version: 16.3.0-preview.9 react: specifier: ^19.2.6 version: 19.2.6 @@ -292,6 +295,15 @@ importers: '@mdx-js/mdx': specifier: ^3.1.1 version: 3.1.1 + '@node-core/platform-cloudflare': + specifier: workspace:* + version: link:../../platforms/cloudflare + '@node-core/platform-default': + specifier: workspace:* + version: link:../../platforms/default + '@node-core/platform-vercel': + specifier: workspace:* + version: link:../../platforms/vercel '@node-core/rehype-shiki': specifier: workspace:* version: link:../../packages/rehype-shiki @@ -304,27 +316,15 @@ importers: '@nodevu/core': specifier: 0.3.0 version: 0.3.0 - '@opentelemetry/api-logs': - specifier: ~0.218.0 - version: 0.218.0 - '@opentelemetry/instrumentation': - specifier: ~0.218.0 - version: 0.218.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': - specifier: ~1.30.1 - version: 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-logs': - specifier: ~0.218.0 - version: 0.218.0(@opentelemetry/api@1.9.1) '@orama/orama': specifier: ^3.1.18 version: 3.1.18 '@radix-ui/react-tabs': - specifier: ^1.1.13 - version: 1.1.13(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.1.18 + version: 1.1.21(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-tooltip': - specifier: ^1.2.8 - version: 1.2.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.2.13 + version: 1.2.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tailwindcss/postcss': specifier: ~4.3.0 version: 4.3.0 @@ -334,21 +334,9 @@ importers: '@types/react': specifier: 'catalog:' version: 19.2.16 - '@typescript/vfs': - specifier: ^1.6.4 - version: 1.6.4(typescript@5.9.3) '@vcarl/remark-headings': specifier: ~0.1.0 version: 0.1.0 - '@vercel/analytics': - specifier: ~2.0.1 - version: 2.0.1(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) - '@vercel/otel': - specifier: ~2.1.2 - version: 2.1.2(@opentelemetry/api-logs@0.218.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1)) - '@vercel/speed-insights': - specifier: ~2.0.0 - version: 2.0.0(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) classnames: specifier: 'catalog:' version: 2.5.1 @@ -368,11 +356,11 @@ importers: specifier: ^4.0.0 version: 4.0.0 next: - specifier: 16.2.6 - version: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: 'catalog:' + version: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) next-intl: specifier: ~4.13.0 - version: 4.13.0(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(typescript@5.9.3) + version: 4.13.0(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(typescript@5.9.3) next-themes: specifier: ~0.4.6 version: 0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -402,16 +390,13 @@ importers: version: 2.1.0 semver: specifier: ~7.8.1 - version: 7.8.2 + version: 7.8.5 sval: specifier: ^0.6.12 version: 0.6.12 tailwindcss: specifier: 'catalog:' version: 4.1.18 - twoslash: - specifier: ^0.3.8 - version: 0.3.8(typescript@5.9.3) typescript: specifier: 'catalog:' version: 5.9.3 @@ -425,33 +410,21 @@ importers: specifier: ~5.0.1 version: 5.0.1 devDependencies: - '@cloudflare/workers-types': - specifier: ^4.20260418.1 - version: 4.20260422.1 '@eslint-react/eslint-plugin': specifier: ~5.8.6 version: 5.8.6(eslint@10.2.1(jiti@2.7.0))(typescript@5.9.3) - '@flarelabs-net/wrangler-build-time-fs-assets-polyfilling': - specifier: ^0.0.1 - version: 0.0.1 '@next/eslint-plugin-next': specifier: 16.2.6 version: 16.2.6 '@node-core/remark-lint': specifier: workspace:* version: link:../../packages/remark-lint - '@opennextjs/cloudflare': - specifier: ^1.19.3 - version: 1.19.3(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(wrangler@4.77.0(@cloudflare/workers-types@4.20260422.1)) '@orama/core': specifier: ^1.2.19 version: 1.2.19 '@playwright/test': - specifier: ^1.59.1 - version: 1.59.1 - '@sentry/cloudflare': - specifier: ^10.49.0 - version: 10.49.0(@cloudflare/workers-types@4.20260422.1) + specifier: ^1.61.1 + version: 1.62.0 '@testing-library/user-event': specifier: ~14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -459,8 +432,8 @@ importers: specifier: ^4.0.4 version: 4.0.4 '@types/mdx': - specifier: ^2.0.13 - version: 2.0.13 + specifier: ^2.0.14 + version: 2.0.14 '@types/semver': specifier: ~7.7.1 version: 7.7.1 @@ -512,9 +485,6 @@ importers: user-agent-data-types: specifier: 0.4.2 version: 0.4.2 - wrangler: - specifier: ^4.77.0 - version: 4.77.0(@cloudflare/workers-types@4.20260422.1) packages/i18n: devDependencies: @@ -525,17 +495,17 @@ importers: packages/rehype-shiki: dependencies: '@shikijs/core': - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.3.1 + version: 4.3.1 '@shikijs/engine-javascript': - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.3.1 + version: 4.3.1 '@shikijs/engine-oniguruma': - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.3.1 + version: 4.3.1 '@shikijs/twoslash': - specifier: ^4.0.2 - version: 4.0.2(typescript@5.9.3) + specifier: ^4.3.1 + version: 4.3.1(typescript@5.9.3) classnames: specifier: 'catalog:' version: 2.5.1 @@ -543,8 +513,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 shiki: - specifier: ~4.0.2 - version: 4.0.2 + specifier: ~4.3.1 + version: 4.3.1 typescript: specifier: 'catalog:' version: 5.9.3 @@ -625,14 +595,14 @@ importers: specifier: ^4.0.1 version: 4.0.1 remark-lint-no-trailing-spaces: - specifier: ^4.0.3 - version: 4.0.3 + specifier: ^5.0.0 + version: 5.0.0 remark-lint-no-unused-definitions: specifier: ^4.0.2 version: 4.0.2 remark-lint-prohibited-strings: - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^5.0.0 + version: 5.0.0 remark-lint-rule-style: specifier: ^4.0.1 version: 4.0.1 @@ -653,7 +623,7 @@ importers: version: 7.0.1 semver: specifier: ^7.8.1 - version: 7.8.2 + version: 7.8.5 unified-lint-rule: specifier: ^3.0.1 version: 3.0.1 @@ -689,29 +659,29 @@ importers: specifier: ^1.5.4 version: 1.5.4(@orama/core@1.2.19)(@types/react@19.2.16)(react@19.2.6) '@radix-ui/react-avatar': - specifier: ^1.1.11 - version: 1.1.11(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.2.3 + version: 1.2.6(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-dialog': - specifier: ^1.1.15 - version: 1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.1.20 + version: 1.1.23(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-dropdown-menu': - specifier: ^2.1.16 - version: 2.1.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^2.1.21 + version: 2.1.24(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-label': - specifier: ^2.1.8 - version: 2.1.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^2.1.12 + version: 2.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-select': - specifier: ^2.2.6 - version: 2.2.6(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^2.3.4 + version: 2.3.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-separator': - specifier: ^1.1.8 - version: 1.1.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.1.12 + version: 1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-tabs': - specifier: ^1.1.13 - version: 1.1.13(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.1.18 + version: 1.1.21(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-tooltip': - specifier: ^1.2.8 - version: 1.2.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.2.13 + version: 1.2.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@vcarl/remark-headings': specifier: ~0.1.0 version: 0.1.0 @@ -810,6 +780,95 @@ importers: specifier: 'catalog:' version: 5.9.3 + platforms/cloudflare: + dependencies: + '@flarelabs-net/wrangler-build-time-fs-assets-polyfilling': + specifier: ^0.0.1 + version: 0.0.1 + '@opennextjs/cloudflare': + specifier: ^1.19.3 + version: 1.19.3(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(wrangler@4.77.0(@cloudflare/workers-types@4.20260422.1)) + '@sentry/cloudflare': + specifier: ^10.49.0 + version: 10.49.0(@cloudflare/workers-types@4.20260422.1) + '@typescript/vfs': + specifier: ^1.6.4 + version: 1.6.4(typescript@5.9.3) + twoslash: + specifier: ^0.3.9 + version: 0.3.9(typescript@5.9.3) + typescript: + specifier: 'catalog:' + version: 5.9.3 + wrangler: + specifier: ^4.77.0 + version: 4.77.0(@cloudflare/workers-types@4.20260422.1) + devDependencies: + '@cloudflare/workers-types': + specifier: ^4.20260418.1 + version: 4.20260422.1 + '@playwright/test': + specifier: ^1.61.1 + version: 1.62.0 + '@types/node': + specifier: 'catalog:' + version: 24.10.1 + cross-env: + specifier: 'catalog:' + version: 10.1.0 + next: + specifier: 'catalog:' + version: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + + platforms/default: + devDependencies: + '@playwright/test': + specifier: ^1.61.1 + version: 1.62.0 + next: + specifier: 'catalog:' + version: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + + platforms/vercel: + dependencies: + '@opentelemetry/api-logs': + specifier: ~0.218.0 + version: 0.218.0 + '@opentelemetry/instrumentation': + specifier: ~0.218.0 + version: 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': + specifier: ~1.30.1 + version: 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': + specifier: ~0.218.0 + version: 0.218.0(@opentelemetry/api@1.9.1) + '@vercel/analytics': + specifier: ~2.0.1 + version: 2.0.1(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) + '@vercel/otel': + specifier: ~2.1.2 + version: 2.1.2(@opentelemetry/api-logs@0.218.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1)) + '@vercel/speed-insights': + specifier: ~2.0.0 + version: 2.0.0(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) + devDependencies: + '@playwright/test': + specifier: ^1.61.1 + version: 1.62.0 + '@types/react': + specifier: 'catalog:' + version: 19.2.16 + next: + specifier: 'catalog:' + version: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: + specifier: 'catalog:' + version: 19.2.6 + typescript: + specifier: 'catalog:' + version: 5.9.3 + packages: '@actions/core@3.0.1': @@ -1372,6 +1431,9 @@ packages: '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/runtime@1.9.1': resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} @@ -2168,70 +2230,145 @@ packages: cpu: [arm64] os: [darwin] + '@img/sharp-darwin-arm64@0.35.3': + resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + '@img/sharp-darwin-x64@0.34.5': resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] + '@img/sharp-darwin-x64@0.35.3': + resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.3': + resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==} + engines: {node: '>=20.9.0'} + os: [freebsd] + '@img/sharp-libvips-darwin-arm64@1.2.4': resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.3.2': + resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==} + cpu: [arm64] + os: [darwin] + '@img/sharp-libvips-darwin-x64@1.2.4': resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] + '@img/sharp-libvips-darwin-x64@1.3.2': + resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-linux-arm64@1.2.4': resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-arm64@1.3.2': + resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-arm@1.3.2': + resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-ppc64@1.3.2': + resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-riscv64@1.3.2': + resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-s390x@1.3.2': + resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-x64@1.3.2': + resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': + resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] + '@img/sharp-libvips-linuxmusl-x64@1.3.2': + resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==} + cpu: [x64] + os: [linux] + libc: [musl] + '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2239,6 +2376,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-arm64@0.35.3': + resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2246,6 +2390,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-arm@0.35.3': + resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2253,6 +2404,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-ppc64@0.35.3': + resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2260,6 +2418,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-riscv64@0.35.3': + resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2267,6 +2432,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-s390x@0.35.3': + resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2274,6 +2446,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-x64@0.35.3': + resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2281,6 +2460,13 @@ packages: os: [linux] libc: [musl] + '@img/sharp-linuxmusl-arm64@0.35.3': + resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2288,29 +2474,63 @@ packages: os: [linux] libc: [musl] + '@img/sharp-linuxmusl-x64@0.35.3': + resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.35.3': + resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.3': + resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + '@img/sharp-win32-arm64@0.34.5': resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] + '@img/sharp-win32-arm64@0.35.3': + resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + '@img/sharp-win32-ia32@0.34.5': resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] + '@img/sharp-win32-ia32@0.35.3': + resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + '@img/sharp-win32-x64@0.34.5': resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.35.3': + resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -2497,60 +2717,60 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@next/env@16.2.6': - resolution: {integrity: sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw==} + '@next/env@16.3.0-preview.9': + resolution: {integrity: sha512-BcD+/sVDfoHckHcEx6e4RaLfWrUb+DpXgL9jOc6f29RTyvNwVVtnAaPljp3ok4zFQan6RhFE7q32lSXAFjjV9A==} '@next/eslint-plugin-next@16.2.6': resolution: {integrity: sha512-Z8l6o4JWKUl755x4R+wogD86KPeU+Ckw4K+SYG4kHeOJtRenDeK+OSbGcqZpDtbwn9DsJVdir2UxmwXuinUbUw==} - '@next/swc-darwin-arm64@16.2.6': - resolution: {integrity: sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg==} + '@next/swc-darwin-arm64@16.3.0-preview.9': + resolution: {integrity: sha512-42OV/jDhHoKuqq+kp0RYrW1uksykLhXQeX+zx4SYFEG45ec9HnLHnsGgG1vy5W+LaSDvj3BPMBPTKMCh1vl1Ew==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.6': - resolution: {integrity: sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ==} + '@next/swc-darwin-x64@16.3.0-preview.9': + resolution: {integrity: sha512-j6dvZHjhjB3l+uDQiBmuajzzCyCetWdQw+eouwR0mE455b+OvPY32dUNIY+D33oTOe3f0My9wSw4Um5hxywUlA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.6': - resolution: {integrity: sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w==} + '@next/swc-linux-arm64-gnu@16.3.0-preview.9': + resolution: {integrity: sha512-2+1WzP2+ngzCkXiyzBwowgBiYaUycjAB/9b5ah5TjP0icBHOHf7oaPnjSZlZ8iq6x2G6QuR9S840jkOKNInUCw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.6': - resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==} + '@next/swc-linux-arm64-musl@16.3.0-preview.9': + resolution: {integrity: sha512-2Tq6H0LtObGQj2s7u56TYakTJ3NmDOWnNRaT2TI17oQEUfPv3O4a22jt4xIDVkxvaYfB2L4y2hl8DGAEw1WV6g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.6': - resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==} + '@next/swc-linux-x64-gnu@16.3.0-preview.9': + resolution: {integrity: sha512-H2bCT2w2H/W6xRLRw4oWgOEMIyWc1tn65c46u0zC60omKig9hPWj7vrhMBqwOMTmZcFZwNqBTpJTF0LuopEfHA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.6': - resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==} + '@next/swc-linux-x64-musl@16.3.0-preview.9': + resolution: {integrity: sha512-WK0CI8ky1oDGwqzi8oJjtC5rfMNOUx4DMBiVr1o9mvsMwkCUkVh7n6+AAx2Qxk8llRJxpaGlBZv1fhHytsENVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.6': - resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==} + '@next/swc-win32-arm64-msvc@16.3.0-preview.9': + resolution: {integrity: sha512-COFwXsMQsStyBv4qBn6E3tKHuPVifMkpVvF2k2/I0HsLAwuelgj+5uO8jS4e+sfTcdvczdvuiG8BjJz3aAa0IQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.6': - resolution: {integrity: sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA==} + '@next/swc-win32-x64-msvc@16.3.0-preview.9': + resolution: {integrity: sha512-RG4rEpg3ynGwTP6mnsDZHLuFbKksXkQCd9A5MDkgPY9+wYawIrc23pJYHZxyBxisuV/t+dwCgbpZoclW8icE7A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3076,9 +3296,9 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.59.1': - resolution: {integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==} - engines: {node: '>=18'} + '@playwright/test@1.62.0': + resolution: {integrity: sha512-9zOJ6ZQRAena31MpOH9VSzIz8Ou3YJ/wtY/eQm5T2uhfhG7/U3COrMS8xOtUrZrp9OgdmzEnIYODye3nY1VqzA==} + engines: {node: '>=20'} hasBin: true '@poppinss/colors@4.1.6': @@ -3093,9 +3313,28 @@ packages: '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/number@1.1.3': + resolution: {integrity: sha512-Road2bidD0uu/1BGDOWNdPI06g0lIRy6IF9GZcIrDK2KGItfor8IQwQa+yM2ERgHM1MmHxaxpTzk0/Jp42lNfA==} + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/primitive@1.1.7': + resolution: {integrity: sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==} + + '@radix-ui/react-arrow@1.1.15': + resolution: {integrity: sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: @@ -3122,6 +3361,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-avatar@1.2.6': + resolution: {integrity: sha512-4ULOTJ/mqy2hT9GlWa/MFHxHSvH3nJzHnZM1waNsc5Bonv7i70aNenghXmD97S6OJ81ekXONGGt4nT1r0PfEdA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.15': + resolution: {integrity: sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: @@ -3144,6 +3409,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-compose-refs@1.1.5': + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: @@ -3162,6 +3436,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.2.2': + resolution: {integrity: sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: @@ -3175,6 +3458,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dialog@1.1.23': + resolution: {integrity: sha512-Ksw4WeROkO4rC9k/onilX/Ao2Cr1ku1unMNH+XSCcP4jSXYu7HDsg9n4ojMjVb22XpYjAQ9qfrFlVbru1vXDUA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: @@ -3184,6 +3480,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-direction@1.1.4': + resolution: {integrity: sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: @@ -3197,6 +3502,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.19': + resolution: {integrity: sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dropdown-menu@2.1.16': resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: @@ -3210,6 +3528,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dropdown-menu@2.1.24': + resolution: {integrity: sha512-geq8l2rJkxvkXsT9RMgtUE3P8pITFpTsvYpbySi1IH4fZEABD/Gp85myayFgxk0ktljGMJnCbeFkyTusvSvv7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: @@ -3219,8 +3550,152 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + '@radix-ui/react-focus-guards@1.1.6': + resolution: {integrity: sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.16': + resolution: {integrity: sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-id@1.1.4': + resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.15': + resolution: {integrity: sha512-o/rdYEwZTTo5tjknnPeyQFU45kUC4i/XyeDPP+HGyi6XqpOP6Zf5Ya5vh/Yfe9Id5JiuWnnAx2XqIeD3UYZt0g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.24': + resolution: {integrity: sha512-uW7RVuU6Lp/ZtfeY4b3kL32zccgEWvPv1+cf17ubYzHa9cL8AHokmk36cG/XEiH/smbQvumnieXX9j/e9RqJWA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.3.7': + resolution: {integrity: sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.17': + resolution: {integrity: sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3232,17 +3707,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + '@radix-ui/react-presence@1.1.10': + resolution: {integrity: sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-label@2.1.8': - resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3254,8 +3733,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menu@2.1.16': - resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + '@radix-ui/react-primitive@2.1.10': + resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3267,8 +3746,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3280,8 +3759,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3293,8 +3772,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3306,8 +3785,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + '@radix-ui/react-roving-focus@1.1.19': + resolution: {integrity: sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3319,8 +3798,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.1.4': - resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3332,8 +3811,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + '@radix-ui/react-select@2.3.7': + resolution: {integrity: sha512-WFGImkmbzcfxeIwq/+4HvRN0pizBwbwQUED4I13ezQsDdfl38ZntN6TmR8XaSzPBqoCToe8rF75j6NPNDSzhbg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3345,8 +3824,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@2.2.6': - resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + '@radix-ui/react-separator@1.1.15': + resolution: {integrity: sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3389,6 +3868,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.3.3': + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-tabs@1.1.13': resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: @@ -3402,6 +3890,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tabs@1.1.21': + resolution: {integrity: sha512-UKxJlZid7FVtsk/WTxj4i4uSEgj2Au+KBbS7SQyTlzMhhn+86Cz3tISZdTa87bfEfcuvZezf2ZsxD4xuEKtkog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.2.16': + resolution: {integrity: sha512-6EamKFRRnlpdadndbZ6LMwycfwkwPte1B42hs6QA0gYhjaOKqW4PZ4pjaW9UrlDX5eVt/OjncE7BFTPL5nmZhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-tooltip@1.2.8': resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: @@ -3424,6 +3938,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-callback-ref@1.1.4': + resolution: {integrity: sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: @@ -3433,6 +3956,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.2.6': + resolution: {integrity: sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: @@ -3442,6 +3974,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-effect-event@0.0.5': + resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: @@ -3460,6 +4001,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-is-hydrated@0.1.3': + resolution: {integrity: sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: @@ -3469,6 +4019,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.1.4': + resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: @@ -3478,6 +4037,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.4': + resolution: {integrity: sha512-XoSLhbRbqxFtgJoi2fNHA3C6pDlY34x508vUpUGoFZfvePfHXHbE1lC4FYFMnJWgiCRroSTw6fOsXQoVS9RwZg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: @@ -3487,6 +4055,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.4': + resolution: {integrity: sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: @@ -3496,6 +4073,28 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.4': + resolution: {integrity: sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.11': + resolution: {integrity: sha512-NFS86RYYZb4/exihaESBGOpMJFz8MGLAfu3mOBSGByVnVPC9JPASfYubxd/8KbkQK0sYAv8lVQDEQukDX/qXvQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: @@ -3512,6 +4111,9 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@radix-ui/rect@1.1.3': + resolution: {integrity: sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==} + '@reporters/github@2.0.0': resolution: {integrity: sha512-HVWK3D6fuML2Ki1+a4HEFIR29XtUd6CdqbNuPNWAQU51gDtTEZd8cpBJbPBsW5Zsts9Hgfe5oOsErv/kuP6Kzw==} @@ -3651,6 +4253,10 @@ packages: resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} engines: {node: '>=20'} + '@shikijs/core@4.3.1': + resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==} + engines: {node: '>=20'} + '@shikijs/engine-javascript@3.22.0': resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==} @@ -3661,6 +4267,10 @@ packages: resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==} engines: {node: '>=20'} + '@shikijs/engine-javascript@4.3.1': + resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==} + engines: {node: '>=20'} + '@shikijs/engine-oniguruma@3.22.0': resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==} @@ -3671,6 +4281,10 @@ packages: resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==} engines: {node: '>=20'} + '@shikijs/engine-oniguruma@4.3.1': + resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==} + engines: {node: '>=20'} + '@shikijs/langs@3.22.0': resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==} @@ -3678,10 +4292,18 @@ packages: resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==} engines: {node: '>=20'} + '@shikijs/langs@4.3.1': + resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==} + engines: {node: '>=20'} + '@shikijs/primitive@4.0.2': resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==} engines: {node: '>=20'} + '@shikijs/primitive@4.3.1': + resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==} + engines: {node: '>=20'} + '@shikijs/themes@3.22.0': resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==} @@ -3689,13 +4311,17 @@ packages: resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} engines: {node: '>=20'} + '@shikijs/themes@4.3.1': + resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==} + engines: {node: '>=20'} + '@shikijs/twoslash@3.23.0': resolution: {integrity: sha512-pNaLJWMA3LU7PhT8tm9OQBZ1epy0jmdgeJzntBtr1EVXLbHxGzTj3mnf9vOdcl84l96qnlJXkJ/NGXZYBpXl5g==} peerDependencies: typescript: '>=5.5.0' - '@shikijs/twoslash@4.0.2': - resolution: {integrity: sha512-yHRudhirlMxOwDO6Q4OFU9hJMvUqNkY8hwtUfbaSEoG7A2cYicdO4c8fdDaDtyJ50HK7I8vTokrkIHTK3DCkLQ==} + '@shikijs/twoslash@4.3.1': + resolution: {integrity: sha512-xK8inH/gK++1V4rTxrwCwjvaNwkkJ7oDjOIpdqONVxIpAFnVC3gzqjH5KiXGTelUcxpUJ3PtOKWct1YQ0kAloA==} engines: {node: '>=20'} peerDependencies: typescript: '>=5.5.0' @@ -3710,6 +4336,10 @@ packages: resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} engines: {node: '>=20'} + '@shikijs/types@4.3.1': + resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==} + engines: {node: '>=20'} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -4443,8 +5073,8 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -6484,10 +7114,6 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - is-bun-module@2.0.0: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} @@ -7256,8 +7882,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@16.2.6: - resolution: {integrity: sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==} + next@16.3.0-preview.9: + resolution: {integrity: sha512-ruev+K1No0Cm/05hSrgKLtzaBdUIT+2I/Bj8x+K8/vk3j/dW+9YJOqGdDEkqNBOXtQlLxuEgeTH71jgsKTfWiQ==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -7404,9 +8030,15 @@ packages: oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + oniguruma-to-es@4.3.5: resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==} + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -7568,14 +8200,14 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.59.1: - resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} - engines: {node: '>=18'} + playwright-core@1.62.0: + resolution: {integrity: sha512-nsNRyq0r2zsG8AcRHWknc9QRA5XCueC7gWMrs+Gx2tlZn9hcl8zudfh00lhJPY1DE7NmZ6bDsT9g2yey8mXljA==} + engines: {node: '>=20'} hasBin: true - playwright@1.59.1: - resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} - engines: {node: '>=18'} + playwright@1.62.0: + resolution: {integrity: sha512-Z14dG305dgaLu6foB1TXQagFiW8JfSUIUaUuPaKQ6NtBPKF1P/qXcqfh6c6K/icPqdy37JmjbiBXf6JNg6Sylw==} + engines: {node: '>=20'} hasBin: true pluralize@8.0.0: @@ -7686,8 +8318,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} postcss@8.5.15: @@ -7896,6 +8528,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -8087,8 +8729,8 @@ packages: remark-lint-no-tabs@4.0.1: resolution: {integrity: sha512-+lhGUgY3jhTwWn1x+tTIJNy5Fbs2NcYXCobRY7xeszY0VKPCBF2GyELafOVnr+iTmosXLuhZPp5YwNezQKH9IQ==} - remark-lint-no-trailing-spaces@4.0.3: - resolution: {integrity: sha512-BZ/qOc5Sgprt8LfF8zRwhvaH0reY1rKyBysIfu7qvwV6gjVhdRLIjCqL/AYZae59Egd3fw1NlQmQkgfxwY1uLA==} + remark-lint-no-trailing-spaces@5.0.0: + resolution: {integrity: sha512-O9nk0/PwZaHMeabfGuPDfmWRzwloZW6hL4j1nA2flF27EWXbOWSFkihRPyUAgVSm2wRs2lPjDV97Ey+liHeLGw==} remark-lint-no-undefined-references@5.0.2: resolution: {integrity: sha512-5prkVb1tKwJwr5+kct/UjsLjvMdEDO7uClPeGfrxfAcN59+pWU8OUSYiqYmpSKWJPIdyxPRS8Oyf1HtaYvg8VQ==} @@ -8099,8 +8741,8 @@ packages: remark-lint-ordered-list-marker-style@4.0.1: resolution: {integrity: sha512-vZTAbstcBPbGwJacwldGzdGmKwy5/4r29SZ9nQkME4alEl5B1ReSBlYa8t7QnTSW7+tqvA9Sg71RPadgAKWa4w==} - remark-lint-prohibited-strings@4.0.0: - resolution: {integrity: sha512-dfLF4da5v3klRAdkHBLpNIC7WpvNdN7Eylgf+p19HPJn53CaxqlGjFvAQDAJU83xXEPWAmdonlx04GIS5ryLow==} + remark-lint-prohibited-strings@5.0.0: + resolution: {integrity: sha512-t2U6nB+UnDMkOQQZ0oTaT8kzjDD1+fYRyLpqSrY9O5shy9sGkx/9f8mEJ4uuCuJO5pjtI0bJmucbieEfoFTztA==} remark-lint-rule-style@4.0.1: resolution: {integrity: sha512-gl1Ft13oTS3dJUCsWZzxD/5dAwI1HON67KU7uNfODD5gXJ8Y11deOWbun190ma7XbYdD7P0l8VT2HeRtEQzrWg==} @@ -8260,8 +8902,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.8.2: - resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -8292,6 +8934,15 @@ packages: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.3: + resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -8311,6 +8962,10 @@ packages: resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} engines: {node: '>=20'} + shiki@4.3.1: + resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==} + engines: {node: '>=20'} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -8775,11 +9430,11 @@ packages: resolution: {integrity: sha512-NqgRQy6j6dPYcdSdv0q1g9QsZg7SWg87RERM8otw/1AtKU2yTFVClOM7cbwKzOonZr/Ek1blTBucw64L9H0Bwg==} hasBin: true - twoslash-protocol@0.3.8: - resolution: {integrity: sha512-HmvAHoiEviK8LqvAQyc9/irkdvwTUiR1fHmNwH/0gq8EHxyBt4PWVPixjEXg6wJu1u6yBrILEWXGK9Kw58/8yQ==} + twoslash-protocol@0.3.9: + resolution: {integrity: sha512-9/iwp+CXOnjFMPQuPL5PkuRbZnDoNpBvtJCLs9t8kDYkL3YHujbvnHfZA1i5fApDftVEdBw+T/4F+dH5kIzpYQ==} - twoslash@0.3.8: - resolution: {integrity: sha512-OeDz0kDl8sqPUN3nr7gqcvOs70f5lZsdhKYTX3/SgB9OvdadzzoYJI/4SBXhXV1HG8E9fLc+e17itoRYTxmoig==} + twoslash@0.3.9: + resolution: {integrity: sha512-rDclk+OtzuTX+tnea7DYLCkqGQ3eP0IyfD+kzUJ7t46X/NzlaxwrhecmEBNuSCuEn3V+n1PhcjUUQQ7gUJzX5Q==} peerDependencies: typescript: ^5.5.0 || ^6.0.0 @@ -8866,18 +9521,12 @@ packages: unified-engine@11.2.2: resolution: {integrity: sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg==} - unified-lint-rule@2.1.2: - resolution: {integrity: sha512-JWudPtRN7TLFHVLEVZ+Rm8FUb6kCAtHxEXFgBGDxRSdNMnGyTU5zyYvduHSF/liExlFB3vdFvsAHnNVE/UjAwA==} - unified-lint-rule@3.0.1: resolution: {integrity: sha512-HxIeQOmwL19DGsxHXbeyzKHBsoSCFO7UtRVUvT2v61ptw/G+GbysWcrpHdfs5jqbIFDA11MoKngIhQK0BeTVjA==} unified-message-control@5.0.0: resolution: {integrity: sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw==} - unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -8908,9 +9557,6 @@ packages: unist-util-select@5.1.0: resolution: {integrity: sha512-4A5mfokSHG/rNQ4g7gSbdEs+H586xyd24sdJqF1IWamqrLHvYb+DH48fzxowyOhOfK7YSqX+XlCojAyuuyyT2A==} - unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} - unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -9009,9 +9655,6 @@ packages: vfile-matter@5.0.1: resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} - vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} - vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} @@ -9024,9 +9667,6 @@ packages: vfile-statistics@3.0.0: resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} - vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -10144,7 +10784,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.8.2 + semver: 7.8.5 '@changesets/assemble-release-plan@6.0.10': dependencies: @@ -10153,7 +10793,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.8.2 + semver: 7.8.5 '@changesets/changelog-git@0.2.1': dependencies: @@ -10192,7 +10832,7 @@ snapshots: package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.8.2 + semver: 7.8.5 spawndamnit: 3.0.1 term-size: 2.2.1 transitivePeerDependencies: @@ -10218,7 +10858,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.8.2 + semver: 7.8.5 '@changesets/get-github-info@0.8.0': dependencies: @@ -10393,6 +11033,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 @@ -10907,95 +11552,199 @@ snapshots: '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true + '@img/sharp-darwin-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.2 + optional: true + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true + '@img/sharp-darwin-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.2 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 + optional: true + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true + '@img/sharp-libvips-darwin-arm64@1.3.2': + optional: true + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true + '@img/sharp-libvips-darwin-x64@1.3.2': + optional: true + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true + '@img/sharp-libvips-linux-arm64@1.3.2': + optional: true + '@img/sharp-libvips-linux-arm@1.2.4': optional: true + '@img/sharp-libvips-linux-arm@1.3.2': + optional: true + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true + '@img/sharp-libvips-linux-ppc64@1.3.2': + optional: true + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true + '@img/sharp-libvips-linux-riscv64@1.3.2': + optional: true + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true + '@img/sharp-libvips-linux-s390x@1.3.2': + optional: true + '@img/sharp-libvips-linux-x64@1.2.4': optional: true + '@img/sharp-libvips-linux-x64@1.3.2': + optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': + optional: true + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true + '@img/sharp-libvips-linuxmusl-x64@1.3.2': + optional: true + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true + '@img/sharp-linux-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.2 + optional: true + '@img/sharp-linux-arm@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.2.4 optional: true + '@img/sharp-linux-arm@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.2 + optional: true + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true + '@img/sharp-linux-ppc64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.2 + optional: true + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true + '@img/sharp-linux-riscv64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.2 + optional: true + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true + '@img/sharp-linux-s390x@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.2 + optional: true + '@img/sharp-linux-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.2.4 optional: true + '@img/sharp-linux-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.2 + optional: true + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true + '@img/sharp-linuxmusl-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 + optional: true + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true + '@img/sharp-linuxmusl-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 + optional: true + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.10.0 + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-wasm32@0.35.3': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 optional: true '@img/sharp-win32-arm64@0.34.5': optional: true + '@img/sharp-win32-arm64@0.35.3': + optional: true + '@img/sharp-win32-ia32@0.34.5': optional: true + '@img/sharp-win32-ia32@0.35.3': + optional: true + '@img/sharp-win32-x64@0.34.5': optional: true + '@img/sharp-win32-x64@0.35.3': + optional: true + '@inquirer/external-editor@1.0.3(@types/node@24.10.1)': dependencies: chardet: 2.2.0 @@ -11072,7 +11821,7 @@ snapshots: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 + '@types/mdx': 2.0.14 acorn: 8.16.0 collapse-white-space: 2.1.0 devlop: 1.1.0 @@ -11183,7 +11932,7 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 + '@emnapi/runtime': 1.11.2 '@tybys/wasm-util': 0.10.2 optional: true @@ -11208,34 +11957,34 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true - '@next/env@16.2.6': {} + '@next/env@16.3.0-preview.9': {} '@next/eslint-plugin-next@16.2.6': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.2.6': + '@next/swc-darwin-arm64@16.3.0-preview.9': optional: true - '@next/swc-darwin-x64@16.2.6': + '@next/swc-darwin-x64@16.3.0-preview.9': optional: true - '@next/swc-linux-arm64-gnu@16.2.6': + '@next/swc-linux-arm64-gnu@16.3.0-preview.9': optional: true - '@next/swc-linux-arm64-musl@16.2.6': + '@next/swc-linux-arm64-musl@16.3.0-preview.9': optional: true - '@next/swc-linux-x64-gnu@16.2.6': + '@next/swc-linux-x64-gnu@16.3.0-preview.9': optional: true - '@next/swc-linux-x64-musl@16.2.6': + '@next/swc-linux-x64-musl@16.3.0-preview.9': optional: true - '@next/swc-win32-arm64-msvc@16.2.6': + '@next/swc-win32-arm64-msvc@16.3.0-preview.9': optional: true - '@next/swc-win32-x64-msvc@16.2.6': + '@next/swc-win32-x64-msvc@16.3.0-preview.9': optional: true '@noble/ciphers@1.3.0': {} @@ -11282,7 +12031,7 @@ snapshots: remark-rehype: 11.1.2 remark-stringify: 11.0.0 rolldown: 1.0.0-rc.13 - semver: 7.8.2 + semver: 7.8.5 shiki: 4.0.2 tinyglobby: 0.2.16 unified: 11.0.5 @@ -11381,7 +12130,7 @@ snapshots: dependencies: '@nodevu/parsefiles': 0.0.3 luxon: 3.6.1 - semver: 7.8.2 + semver: 7.8.5 '@nodevu/parsefiles@0.0.3': {} @@ -11393,7 +12142,7 @@ snapshots: ini: 4.1.3 nopt: 7.2.1 proc-log: 4.2.0 - semver: 7.8.2 + semver: 7.8.5 walk-up-path: 3.0.1 transitivePeerDependencies: - bluebird @@ -11407,7 +12156,7 @@ snapshots: proc-log: 4.2.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.8.2 + semver: 7.8.5 which: 4.0.0 transitivePeerDependencies: - bluebird @@ -11429,7 +12178,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.2 proc-log: 4.2.0 - semver: 7.8.2 + semver: 7.8.5 transitivePeerDependencies: - bluebird @@ -11446,7 +12195,7 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opennextjs/aws@3.10.2(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': + '@opennextjs/aws@3.10.2(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': dependencies: '@ast-grep/napi': 0.40.5 '@aws-sdk/client-cloudfront': 3.984.0 @@ -11462,7 +12211,7 @@ snapshots: cookie: 1.1.1 esbuild: 0.25.4 express: 5.2.1 - next: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) path-to-regexp: 6.3.0 urlpattern-polyfill: 10.1.0 yaml: 2.9.0 @@ -11470,17 +12219,17 @@ snapshots: - aws-crt - supports-color - '@opennextjs/cloudflare@1.19.3(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(wrangler@4.77.0(@cloudflare/workers-types@4.20260422.1))': + '@opennextjs/cloudflare@1.19.3(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(wrangler@4.77.0(@cloudflare/workers-types@4.20260422.1))': dependencies: '@ast-grep/napi': 0.40.5 '@dotenvx/dotenvx': 1.31.0 - '@opennextjs/aws': 3.10.2(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) + '@opennextjs/aws': 3.10.2(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) ci-info: 4.3.0 cloudflare: 4.5.0 comment-json: 4.6.2 enquirer: 2.4.1 glob: 12.0.0 - next: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) ts-tqdm: 0.8.6 wrangler: 4.77.0(@cloudflare/workers-types@4.20260422.1) yargs: 18.0.0 @@ -11775,9 +12524,9 @@ snapshots: '@pkgr/core@0.2.9': {} - '@playwright/test@1.59.1': + '@playwright/test@1.62.0': dependencies: - playwright: 1.59.1 + playwright: 1.62.0 '@poppinss/colors@4.1.6': dependencies: @@ -11793,8 +12542,20 @@ snapshots: '@radix-ui/number@1.1.1': {} + '@radix-ui/number@1.1.3': {} + '@radix-ui/primitive@1.1.3': {} + '@radix-ui/primitive@1.1.7': {} + + '@radix-ui/react-arrow@1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-arrow@1.1.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -11815,6 +12576,30 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-avatar@1.2.6(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-collection@1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-collection@1.1.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) @@ -11832,6 +12617,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-compose-refs@1.1.5(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-context@1.1.2(@types/react@19.2.16)(react@19.2.6)': dependencies: react: 19.2.6 @@ -11844,6 +12635,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-context@1.2.2(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-dialog@1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -11865,12 +12662,40 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-dialog@1.1.23(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-portal': 1.1.17(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.16)(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-direction@1.1.1(@types/react@19.2.16)(react@19.2.6)': dependencies: react: 19.2.6 optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-direction@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -11883,6 +12708,18 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-dismissable-layer@1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-dropdown-menu@2.1.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -11897,12 +12734,42 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-dropdown-menu@2.1.24(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-menu': 2.1.24(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.16)(react@19.2.6)': dependencies: react: 19.2.6 optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-focus-guards@1.1.6(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-focus-scope@1.1.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-focus-scope@1.1.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) @@ -11920,6 +12787,21 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-id@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-label@2.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-label@2.1.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-primitive': 2.1.4(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -11953,6 +12835,31 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-menu@2.1.24(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-collection': 1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-direction': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-popper': 1.3.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-portal': 1.1.17(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.16)(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-popper@1.2.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -11970,6 +12877,32 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-popper@1.3.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-arrow': 1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-rect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/rect': 1.1.3 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-portal@1.1.17(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-portal@1.1.9(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -11979,6 +12912,14 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-presence@1.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-presence@1.1.5(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) @@ -11988,6 +12929,14 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-primitive@2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-primitive@2.1.3(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.6) @@ -12020,6 +12969,24 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-roving-focus@1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-collection': 1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-direction': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-select@2.2.6(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/number': 1.1.1 @@ -12048,6 +13015,43 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-select@2.3.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/number': 1.1.3 + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-collection': 1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-direction': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-popper': 1.3.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-portal': 1.1.17(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.11(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.16)(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-separator@1.1.15(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-separator@1.1.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-primitive': 2.1.4(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -12070,6 +13074,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-slot@1.3.3(@types/react@19.2.16)(react@19.2.6)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-tabs@1.1.13(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -12085,6 +13096,41 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-tabs@1.1.21(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-direction': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-presence': 1.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-tooltip@1.2.16(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-popper': 1.3.7(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-portal': 1.1.17(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.11(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-tooltip@1.2.8(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -12110,6 +13156,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-callback-ref@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.16)(react@19.2.6)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.16)(react@19.2.6) @@ -12118,6 +13170,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-controllable-state@1.2.6(@types/react@19.2.16)(react@19.2.6)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.16)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.16)(react@19.2.6)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) @@ -12125,6 +13186,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-effect-event@0.0.5(@types/react@19.2.16)(react@19.2.6)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.16)(react@19.2.6)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.6) @@ -12139,18 +13207,36 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-is-hydrated@0.1.3(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.16)(react@19.2.6)': dependencies: react: 19.2.6 optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-layout-effect@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.16)(react@19.2.6)': dependencies: react: 19.2.6 optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-previous@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.16)(react@19.2.6)': dependencies: '@radix-ui/rect': 1.1.1 @@ -12158,6 +13244,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-rect@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + '@radix-ui/rect': 1.1.3 + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.16)(react@19.2.6)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) @@ -12165,6 +13258,21 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + '@radix-ui/react-use-size@1.1.4(@types/react@19.2.16)(react@19.2.6)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.16)(react@19.2.6) + react: 19.2.6 + optionalDependencies: + '@types/react': 19.2.16 + + '@radix-ui/react-visually-hidden@1.2.11(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + '@radix-ui/react-visually-hidden@1.2.3(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -12175,6 +13283,8 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@radix-ui/rect@1.1.3': {} + '@reporters/github@2.0.0': dependencies: '@actions/core': 3.0.1 @@ -12269,6 +13379,14 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/core@4.3.1': + dependencies: + '@shikijs/primitive': 4.3.1 + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@3.22.0': dependencies: '@shikijs/types': 3.22.0 @@ -12287,6 +13405,12 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.5 + '@shikijs/engine-javascript@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + '@shikijs/engine-oniguruma@3.22.0': dependencies: '@shikijs/types': 3.22.0 @@ -12302,6 +13426,11 @@ snapshots: '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@3.22.0': dependencies: '@shikijs/types': 3.22.0 @@ -12310,12 +13439,22 @@ snapshots: dependencies: '@shikijs/types': 4.0.2 + '@shikijs/langs@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/primitive@4.0.2': dependencies: '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/primitive@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/themes@3.22.0': dependencies: '@shikijs/types': 3.22.0 @@ -12324,20 +13463,24 @@ snapshots: dependencies: '@shikijs/types': 4.0.2 + '@shikijs/themes@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/twoslash@3.23.0(typescript@5.9.3)': dependencies: '@shikijs/core': 3.23.0 '@shikijs/types': 3.23.0 - twoslash: 0.3.8(typescript@5.9.3) + twoslash: 0.3.9(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@shikijs/twoslash@4.0.2(typescript@5.9.3)': + '@shikijs/twoslash@4.3.1(typescript@5.9.3)': dependencies: - '@shikijs/core': 4.0.2 - '@shikijs/types': 4.0.2 - twoslash: 0.3.8(typescript@5.9.3) + '@shikijs/core': 4.3.1 + '@shikijs/types': 4.3.1 + twoslash: 0.3.9(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12357,6 +13500,11 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@4.3.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/vscode-textmate@10.0.2': {} '@sindresorhus/is@7.2.0': {} @@ -12774,7 +13922,7 @@ snapshots: react-docgen: 7.1.1 react-dom: 19.2.6(react@19.2.6) resolve: 1.22.12 - semver: 7.8.2 + semver: 7.8.5 storybook: 10.4.1(@testing-library/dom@10.4.0)(@types/react@19.2.16)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tsconfig-paths: 4.2.0 webpack: 5.107.2(@swc/core@1.15.40)(postcss@8.5.15) @@ -13193,7 +14341,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/mdx@2.0.13': {} + '@types/mdx@2.0.14': {} '@types/ms@2.1.0': {} @@ -13330,7 +14478,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.2 + semver: 7.8.5 tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 @@ -13345,7 +14493,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.2 + semver: 7.8.5 tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 @@ -13457,9 +14605,9 @@ snapshots: mdast-util-to-string: 3.2.0 unist-util-visit: 4.1.2 - '@vercel/analytics@2.0.1(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)': + '@vercel/analytics@2.0.1(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)': optionalDependencies: - next: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: 19.2.6 '@vercel/otel@2.1.2(@opentelemetry/api-logs@0.218.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))': @@ -13472,9 +14620,9 @@ snapshots: '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) - '@vercel/speed-insights@2.0.0(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)': + '@vercel/speed-insights@2.0.0(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)': optionalDependencies: - next: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: 19.2.6 '@vitest/expect@3.2.4': @@ -14084,7 +15232,7 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.15) postcss-modules-values: 4.0.0(postcss@8.5.15) postcss-value-parser: 4.2.0 - semver: 7.8.2 + semver: 7.8.5 optionalDependencies: webpack: 5.107.2(@swc/core@1.15.40)(postcss@8.5.15) @@ -14631,7 +15779,7 @@ snapshots: eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 - semver: 7.8.2 + semver: 7.8.5 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: @@ -15139,7 +16287,7 @@ snapshots: minimatch: 3.1.5 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.8.2 + semver: 7.8.5 tapable: 2.3.3 typescript: 5.9.3 webpack: 5.107.2(@swc/core@1.15.40)(postcss@8.5.15) @@ -15682,11 +16830,9 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-buffer@2.0.5: {} - is-bun-module@2.0.0: dependencies: - semver: 7.8.2 + semver: 7.8.5 is-callable@1.2.7: {} @@ -16662,14 +17808,14 @@ snapshots: next-intl-swc-plugin-extractor@4.13.0: {} - next-intl@4.13.0(next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(typescript@5.9.3): + next-intl@4.13.0(next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(typescript@5.9.3): dependencies: '@formatjs/intl-localematcher': 0.8.10 '@parcel/watcher': 2.5.6 '@swc/core': 1.15.40 icu-minify: 4.13.0 negotiator: 1.0.0 - next: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) next-intl-swc-plugin-extractor: 4.13.0 po-parser: 2.1.1 react: 19.2.6 @@ -16684,31 +17830,32 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + next@16.3.0-preview.9(@opentelemetry/api@1.9.1)(@playwright/test@1.62.0)(@types/node@24.10.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@next/env': 16.2.6 + '@next/env': 16.3.0-preview.9 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.10.33 caniuse-lite: 1.0.30001793 - postcss: 8.4.31 + postcss: 8.5.10 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) styled-jsx: 5.1.6(react@19.2.6) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.6 - '@next/swc-darwin-x64': 16.2.6 - '@next/swc-linux-arm64-gnu': 16.2.6 - '@next/swc-linux-arm64-musl': 16.2.6 - '@next/swc-linux-x64-gnu': 16.2.6 - '@next/swc-linux-x64-musl': 16.2.6 - '@next/swc-win32-arm64-msvc': 16.2.6 - '@next/swc-win32-x64-msvc': 16.2.6 + '@next/swc-darwin-arm64': 16.3.0-preview.9 + '@next/swc-darwin-x64': 16.3.0-preview.9 + '@next/swc-linux-arm64-gnu': 16.3.0-preview.9 + '@next/swc-linux-arm64-musl': 16.3.0-preview.9 + '@next/swc-linux-x64-gnu': 16.3.0-preview.9 + '@next/swc-linux-x64-musl': 16.3.0-preview.9 + '@next/swc-win32-arm64-msvc': 16.3.0-preview.9 + '@next/swc-win32-x64-msvc': 16.3.0-preview.9 '@opentelemetry/api': 1.9.1 - '@playwright/test': 1.59.1 + '@playwright/test': 1.62.0 babel-plugin-react-compiler: 1.0.0 - sharp: 0.34.5 + sharp: 0.35.3(@types/node@24.10.1) transitivePeerDependencies: - '@babel/core' + - '@types/node' - babel-plugin-macros no-case@3.0.4: @@ -16741,14 +17888,14 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.8.2 + semver: 7.8.5 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} npm-install-checks@6.3.0: dependencies: - semver: 7.8.2 + semver: 7.8.5 npm-normalize-package-bin@3.0.1: {} @@ -16756,7 +17903,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.8.2 + semver: 7.8.5 validate-npm-package-name: 5.0.1 npm-pick-manifest@9.1.0: @@ -16764,7 +17911,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 11.0.3 - semver: 7.8.2 + semver: 7.8.5 npm-run-path@4.0.1: dependencies: @@ -16841,12 +17988,20 @@ snapshots: oniguruma-parser@0.12.1: {} + oniguruma-parser@0.12.2: {} + oniguruma-to-es@4.3.5: dependencies: oniguruma-parser: 0.12.1 regex: 6.1.0 regex-recursion: 6.0.2 + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + open@10.2.0: dependencies: default-browser: 5.5.0 @@ -17047,11 +18202,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.59.1: {} + playwright-core@1.62.0: {} - playwright@1.59.1: + playwright@1.62.0: dependencies: - playwright-core: 1.59.1 + playwright-core: 1.62.0 optionalDependencies: fsevents: 2.3.2 @@ -17105,7 +18260,7 @@ snapshots: cosmiconfig: 9.0.1(typescript@5.9.3) jiti: 2.7.0 postcss: 8.5.15 - semver: 7.8.2 + semver: 7.8.5 optionalDependencies: webpack: 5.107.2(@swc/core@1.15.40)(postcss@8.5.15) transitivePeerDependencies: @@ -17155,7 +18310,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.31: + postcss@8.5.10: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -17329,6 +18484,17 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 + react-remove-scroll@2.7.2(@types/react@19.2.16)(react@19.2.6): + dependencies: + react: 19.2.6 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.16)(react@19.2.6) + react-style-singleton: 2.2.3(@types/react@19.2.16)(react@19.2.6) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.16)(react@19.2.6) + use-sidecar: 1.1.3(@types/react@19.2.16)(react@19.2.6) + optionalDependencies: + '@types/react': 19.2.16 + react-style-singleton@2.2.3(@types/react@19.2.16)(react@19.2.6): dependencies: get-nonce: 1.0.1 @@ -17755,7 +18921,7 @@ snapshots: unified-lint-rule: 3.0.1 vfile-location: 5.0.3 - remark-lint-no-trailing-spaces@4.0.3: + remark-lint-no-trailing-spaces@5.0.0: dependencies: unified-lint-rule: 3.0.1 vfile-location: 5.0.3 @@ -17788,10 +18954,10 @@ snapshots: unist-util-visit-parents: 6.0.2 vfile-message: 4.0.3 - remark-lint-prohibited-strings@4.0.0: + remark-lint-prohibited-strings@5.0.0: dependencies: escape-string-regexp: 5.0.0 - unified-lint-rule: 2.1.2 + unified-lint-rule: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.1.0 vfile-location: 5.0.3 @@ -18062,7 +19228,7 @@ snapshots: semver@6.3.1: {} - semver@7.8.2: {} + semver@7.8.5: {} send@1.2.1: dependencies: @@ -18117,7 +19283,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.8.2 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -18144,6 +19310,40 @@ snapshots: '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 + sharp@0.35.3(@types/node@24.10.1): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.3 + '@img/sharp-darwin-x64': 0.35.3 + '@img/sharp-freebsd-wasm32': 0.35.3 + '@img/sharp-libvips-darwin-arm64': 1.3.2 + '@img/sharp-libvips-darwin-x64': 1.3.2 + '@img/sharp-libvips-linux-arm': 1.3.2 + '@img/sharp-libvips-linux-arm64': 1.3.2 + '@img/sharp-libvips-linux-ppc64': 1.3.2 + '@img/sharp-libvips-linux-riscv64': 1.3.2 + '@img/sharp-libvips-linux-s390x': 1.3.2 + '@img/sharp-libvips-linux-x64': 1.3.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 + '@img/sharp-linux-arm': 0.35.3 + '@img/sharp-linux-arm64': 0.35.3 + '@img/sharp-linux-ppc64': 0.35.3 + '@img/sharp-linux-riscv64': 0.35.3 + '@img/sharp-linux-s390x': 0.35.3 + '@img/sharp-linux-x64': 0.35.3 + '@img/sharp-linuxmusl-arm64': 0.35.3 + '@img/sharp-linuxmusl-x64': 0.35.3 + '@img/sharp-webcontainers-wasm32': 0.35.3 + '@img/sharp-win32-arm64': 0.35.3 + '@img/sharp-win32-ia32': 0.35.3 + '@img/sharp-win32-x64': 0.35.3 + '@types/node': 24.10.1 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -18174,6 +19374,17 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + shiki@4.3.1: + dependencies: + '@shikijs/core': 4.3.1 + '@shikijs/engine-javascript': 4.3.1 + '@shikijs/engine-oniguruma': 4.3.1 + '@shikijs/langs': 4.3.1 + '@shikijs/themes': 4.3.1 + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -18282,7 +19493,7 @@ snapshots: oxc-parser: 0.127.0 oxc-resolver: 11.20.0 recast: 0.23.11 - semver: 7.8.2 + semver: 7.8.5 use-sync-external-store: 1.6.0(react@19.2.6) ws: 8.21.0 optionalDependencies: @@ -18654,12 +19865,12 @@ snapshots: '@turbo/windows-64': 2.9.16 '@turbo/windows-arm64': 2.9.16 - twoslash-protocol@0.3.8: {} + twoslash-protocol@0.3.9: {} - twoslash@0.3.8(typescript@5.9.3): + twoslash@0.3.9(typescript@5.9.3): dependencies: '@typescript/vfs': 1.6.4(typescript@5.9.3) - twoslash-protocol: 0.3.8 + twoslash-protocol: 0.3.9 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -18779,13 +19990,6 @@ snapshots: - bluebird - supports-color - unified-lint-rule@2.1.2: - dependencies: - '@types/unist': 2.0.11 - trough: 2.2.0 - unified: 10.1.2 - vfile: 5.3.7 - unified-lint-rule@3.0.1: dependencies: '@types/unist': 3.0.3 @@ -18804,16 +20008,6 @@ snapshots: vfile-location: 5.0.3 vfile-message: 4.0.3 - unified@10.1.2: - dependencies: - '@types/unist': 2.0.11 - bail: 2.0.2 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 5.3.7 - unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -18867,10 +20061,6 @@ snapshots: nth-check: 2.1.1 zwitch: 2.0.4 - unist-util-stringify-position@3.0.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -18991,11 +20181,6 @@ snapshots: vfile: 6.0.3 yaml: 2.9.0 - vfile-message@3.1.4: - dependencies: - '@types/unist': 2.0.11 - unist-util-stringify-position: 3.0.3 - vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 @@ -19022,13 +20207,6 @@ snapshots: vfile: 6.0.3 vfile-message: 4.0.3 - vfile@5.3.7: - dependencies: - '@types/unist': 2.0.11 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 - vfile@6.0.3: dependencies: '@types/unist': 3.0.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2de78bf7999ac..c49ce075541a1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,10 +1,11 @@ packages: - packages/* - apps/* + - platforms/* allowBuilds: - "@parcel/watcher": true - "@swc/core": true + '@parcel/watcher': true + '@swc/core': true esbuild: true sharp: true unrs-resolver: true @@ -15,6 +16,8 @@ catalog: '@types/react': ^19.2.15 classnames: ~2.5.1 cross-env: ^10.0.0 + # Running on the preview to incorporate https://github.com/vercel/next.js/pull/93308 + next: 16.3.0-preview.9 react: ^19.2.6 tailwindcss: ~4.1.17 typescript: 5.9.3