From 0eda662042dcc6b28819e8cd0edd984788c6bd92 Mon Sep 17 00:00:00 2001 From: Aaron Reisman Date: Sat, 18 Oct 2025 03:25:48 -0700 Subject: [PATCH 01/10] [WEB-5169] feat: migrate admin app from Next.js to React Router --- .dockerignore | 2 +- .gitignore | 3 + apps/admin/.dockerignore | 5 + apps/admin/{.eslintrc.js => .eslintrc.cjs} | 9 +- apps/admin/Dockerfile.admin | 111 +- .../admin/app/(all)/(dashboard)/ai/layout.tsx | 10 - apps/admin/app/(all)/(dashboard)/ai/page.tsx | 5 +- .../authentication/github/layout.tsx | 10 - .../authentication/github/page.tsx | 9 +- .../authentication/gitlab/layout.tsx | 10 - .../authentication/gitlab/page.tsx | 7 +- .../authentication/google/layout.tsx | 10 - .../authentication/google/page.tsx | 7 +- .../(dashboard)/authentication/layout.tsx | 10 - .../(all)/(dashboard)/authentication/page.tsx | 5 +- .../app/(all)/(dashboard)/email/layout.tsx | 14 - .../app/(all)/(dashboard)/email/page.tsx | 5 +- .../app/(all)/(dashboard)/general/layout.tsx | 10 - .../app/(all)/(dashboard)/general/page.tsx | 3 + .../app/(all)/(dashboard)/image/layout.tsx | 14 - .../app/(all)/(dashboard)/image/page.tsx | 5 +- apps/admin/app/(all)/(dashboard)/layout.tsx | 22 +- .../(dashboard)/workspace/create/page.tsx | 5 +- .../(all)/(dashboard)/workspace/layout.tsx | 10 - .../app/(all)/(dashboard)/workspace/page.tsx | 5 +- apps/admin/app/(all)/(home)/auth-helpers.tsx | 11 +- apps/admin/app/(all)/(home)/layout.tsx | 6 +- apps/admin/app/(all)/(home)/page.tsx | 6 + .../assets}/favicon/apple-touch-icon.png | Bin .../assets}/favicon/favicon-16x16.png | Bin .../assets}/favicon/favicon-32x32.png | Bin .../assets}/favicon/favicon.ico | Bin apps/admin/app/assets/images/404.svg | 17 + .../assets}/images/logo-spinner-dark.gif | Bin .../assets}/images/logo-spinner-light.gif | Bin .../assets}/images/plane-takeoff.png | Bin .../instance/instance-failure-dark.svg | 0 .../assets}/instance/instance-failure.svg | 0 .../assets}/logos/github-black.png | Bin .../assets}/logos/github-white.png | Bin .../assets}/logos/gitlab-logo.svg | 0 .../assets}/logos/google-logo.svg | 0 .../assets}/logos/oidc-logo.svg | 0 .../assets}/logos/saml-logo.svg | 0 .../assets}/logos/takeoff-icon-dark.svg | 0 .../assets}/logos/takeoff-icon-light.svg | 0 apps/admin/app/compat/next/helper.ts | 33 + apps/admin/app/compat/next/image.tsx | 14 + apps/admin/app/compat/next/link.tsx | 24 + apps/admin/app/compat/next/navigation.ts | 34 + apps/admin/app/components/404.tsx | 34 + apps/admin/app/error.tsx | 9 - apps/admin/app/layout.tsx | 39 - .../app/{(all)/layout.tsx => providers.tsx} | 13 +- apps/admin/app/root.tsx | 65 + apps/admin/app/routes.ts | 20 + apps/admin/app/types/next-image.d.ts | 5 + apps/admin/app/types/next-link.d.ts | 12 + apps/admin/app/types/next-navigation.d.ts | 13 + .../admin/app/types/react-router-virtual.d.ts | 5 + .../authentication/authentication-modes.tsx | 14 +- .../core/components/common/logo-spinner.tsx | 5 +- .../core/components/instance/failure.tsx | 7 +- .../instance/instance-not-ready.tsx | 5 +- .../core/components/instance/loading.tsx | 4 +- apps/admin/core/components/new-user-popup.tsx | 11 +- apps/admin/middleware.js | 14 + apps/admin/next-env.d.ts | 5 - apps/admin/next.config.js | 29 - apps/admin/nginx/nginx.conf | 29 + apps/admin/package.json | 49 +- .../{postcss.config.js => postcss.config.cjs} | 0 .../appspecific/com.chrome.devtools.json | 1 + .../public/auth/background-pattern-dark.svg | 68 - apps/admin/public/auth/background-pattern.svg | 68 - apps/admin/public/favicon/site.webmanifest | 11 - apps/admin/public/instance/plane-takeoff.png | Bin 47818 -> 0 bytes apps/admin/react-router.config.ts | 8 + apps/admin/server.mjs | 76 + apps/admin/server/app.ts | 46 + apps/admin/styles/globals.css | 2 +- ...tailwind.config.js => tailwind.config.cjs} | 0 apps/admin/tsconfig.json | 12 +- apps/admin/vite.config.ts | 60 + apps/api/plane/license/api/views/admin.py | 7 +- apps/live/package.json | 2 +- apps/web/package.json | 1 - packages/decorators/package.json | 2 +- packages/editor/package.json | 1 + packages/editor/tsdown.config.ts | 5 +- packages/eslint-config/package.json | 14 +- packages/i18n/package.json | 4 +- packages/logger/package.json | 2 +- packages/propel/package.json | 11 + packages/propel/tsdown.config.ts | 6 +- packages/services/package.json | 20 +- packages/shared-state/package.json | 2 +- packages/ui/package.json | 53 +- packages/utils/package.json | 2 +- packages/utils/src/string.ts | 2 +- pnpm-lock.yaml | 2255 +++++++++++++---- pnpm-workspace.yaml | 40 +- 102 files changed, 2575 insertions(+), 1044 deletions(-) create mode 100644 apps/admin/.dockerignore rename apps/admin/{.eslintrc.js => .eslintrc.cjs} (77%) delete mode 100644 apps/admin/app/(all)/(dashboard)/ai/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/authentication/github/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/authentication/google/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/authentication/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/email/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/general/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/image/layout.tsx delete mode 100644 apps/admin/app/(all)/(dashboard)/workspace/layout.tsx rename apps/admin/{public => app/assets}/favicon/apple-touch-icon.png (100%) rename apps/admin/{public => app/assets}/favicon/favicon-16x16.png (100%) rename apps/admin/{public => app/assets}/favicon/favicon-32x32.png (100%) rename apps/admin/{public => app/assets}/favicon/favicon.ico (100%) create mode 100644 apps/admin/app/assets/images/404.svg rename apps/admin/{public => app/assets}/images/logo-spinner-dark.gif (100%) rename apps/admin/{public => app/assets}/images/logo-spinner-light.gif (100%) rename apps/admin/{public => app/assets}/images/plane-takeoff.png (100%) rename apps/admin/{public => app/assets}/instance/instance-failure-dark.svg (100%) rename apps/admin/{public => app/assets}/instance/instance-failure.svg (100%) rename apps/admin/{public => app/assets}/logos/github-black.png (100%) rename apps/admin/{public => app/assets}/logos/github-white.png (100%) rename apps/admin/{public => app/assets}/logos/gitlab-logo.svg (100%) rename apps/admin/{public => app/assets}/logos/google-logo.svg (100%) rename apps/admin/{public => app/assets}/logos/oidc-logo.svg (100%) rename apps/admin/{public => app/assets}/logos/saml-logo.svg (100%) rename apps/admin/{public => app/assets}/logos/takeoff-icon-dark.svg (100%) rename apps/admin/{public => app/assets}/logos/takeoff-icon-light.svg (100%) create mode 100644 apps/admin/app/compat/next/helper.ts create mode 100644 apps/admin/app/compat/next/image.tsx create mode 100644 apps/admin/app/compat/next/link.tsx create mode 100644 apps/admin/app/compat/next/navigation.ts create mode 100644 apps/admin/app/components/404.tsx delete mode 100644 apps/admin/app/error.tsx delete mode 100644 apps/admin/app/layout.tsx rename apps/admin/app/{(all)/layout.tsx => providers.tsx} (66%) create mode 100644 apps/admin/app/root.tsx create mode 100644 apps/admin/app/routes.ts create mode 100644 apps/admin/app/types/next-image.d.ts create mode 100644 apps/admin/app/types/next-link.d.ts create mode 100644 apps/admin/app/types/next-navigation.d.ts create mode 100644 apps/admin/app/types/react-router-virtual.d.ts create mode 100644 apps/admin/middleware.js delete mode 100644 apps/admin/next-env.d.ts delete mode 100644 apps/admin/next.config.js create mode 100644 apps/admin/nginx/nginx.conf rename apps/admin/{postcss.config.js => postcss.config.cjs} (100%) create mode 100644 apps/admin/public/.well-known/appspecific/com.chrome.devtools.json delete mode 100644 apps/admin/public/auth/background-pattern-dark.svg delete mode 100644 apps/admin/public/auth/background-pattern.svg delete mode 100644 apps/admin/public/favicon/site.webmanifest delete mode 100644 apps/admin/public/instance/plane-takeoff.png create mode 100644 apps/admin/react-router.config.ts create mode 100644 apps/admin/server.mjs create mode 100644 apps/admin/server/app.ts rename apps/admin/{tailwind.config.js => tailwind.config.cjs} (100%) create mode 100644 apps/admin/vite.config.ts diff --git a/.dockerignore b/.dockerignore index fe11e95b685..e0b681fef63 100644 --- a/.dockerignore +++ b/.dockerignore @@ -66,4 +66,4 @@ temp/ .react-router/ build/ node_modules/ -README.md \ No newline at end of file +README.md diff --git a/.gitignore b/.gitignore index 0edc47dccb4..e28746d2647 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ dev-editor storybook-static CLAUDE.md + +build/ +.react-router/ \ No newline at end of file diff --git a/apps/admin/.dockerignore b/apps/admin/.dockerignore new file mode 100644 index 00000000000..92963a35b0b --- /dev/null +++ b/apps/admin/.dockerignore @@ -0,0 +1,5 @@ +# React Router - https://github.com/remix-run/react-router-templates/blob/dc79b1a065f59f3bfd840d4ef75cc27689b611e6/default/.dockerignore +.react-router/ +build/ +node_modules/ +README.md diff --git a/apps/admin/.eslintrc.js b/apps/admin/.eslintrc.cjs similarity index 77% rename from apps/admin/.eslintrc.js rename to apps/admin/.eslintrc.cjs index a0bc76d5d9a..af3135e6a54 100644 --- a/apps/admin/.eslintrc.js +++ b/apps/admin/.eslintrc.cjs @@ -1,9 +1,14 @@ module.exports = { root: true, extends: ["@plane/eslint-config/next.js"], + ignorePatterns: [ + "build/**", + "dist/**", + ".vite/**", + ], rules: { "no-duplicate-imports": "off", - "import/no-duplicates": ["error", { "prefer-inline": false }], + "import/no-duplicates": ["error", {"prefer-inline": false}], "import/consistent-type-specifier-style": ["error", "prefer-top-level"], "@typescript-eslint/no-import-type-side-effects": "error", "@typescript-eslint/consistent-type-imports": [ @@ -16,3 +21,5 @@ module.exports = { ], }, }; + + diff --git a/apps/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin index 6bfa0765f6e..fe1597c9f66 100644 --- a/apps/admin/Dockerfile.admin +++ b/apps/admin/Dockerfile.admin @@ -1,103 +1,86 @@ -# syntax=docker/dockerfile:1.7 FROM node:22-alpine AS base -# Setup pnpm package manager with corepack and configure global bin directory for caching +WORKDIR /app + +ENV TURBO_TELEMETRY_DISABLED=1 ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" -RUN corepack enable +ENV CI=1 + +RUN corepack enable pnpm + +# =========================================================================== # -# ***************************************************************************** -# STAGE 1: Build the project -# ***************************************************************************** FROM base AS builder -RUN apk add --no-cache libc6-compat -WORKDIR /app -ARG TURBO_VERSION=2.5.6 -RUN corepack enable pnpm && pnpm add -g turbo@${TURBO_VERSION} +RUN pnpm add -g turbo@2.5.8 + COPY . . +# Create a pruned workspace for just the admin app RUN turbo prune --scope=admin --docker -# ***************************************************************************** -# STAGE 2: Install dependencies & build the project -# ***************************************************************************** -FROM base AS installer - -RUN apk add --no-cache libc6-compat -WORKDIR /app +# =========================================================================== # -COPY .gitignore .gitignore -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -RUN corepack enable pnpm -RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm fetch --store-dir=/pnpm/store +FROM base AS installer -COPY --from=builder /app/out/full/ . -COPY turbo.json turbo.json -RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm install --offline --frozen-lockfile --store-dir=/pnpm/store +# Build in production mode; we still install dev deps explicitly below +ENV NODE_ENV=production +# Public envs required at build time (pick up via process.env) ARG NEXT_PUBLIC_API_BASE_URL="" ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL +ARG NEXT_PUBLIC_API_BASE_PATH="/api" +ENV NEXT_PUBLIC_API_BASE_PATH=$NEXT_PUBLIC_API_BASE_PATH ARG NEXT_PUBLIC_ADMIN_BASE_URL="" ENV NEXT_PUBLIC_ADMIN_BASE_URL=$NEXT_PUBLIC_ADMIN_BASE_URL - ARG NEXT_PUBLIC_ADMIN_BASE_PATH="/god-mode" ENV NEXT_PUBLIC_ADMIN_BASE_PATH=$NEXT_PUBLIC_ADMIN_BASE_PATH ARG NEXT_PUBLIC_SPACE_BASE_URL="" ENV NEXT_PUBLIC_SPACE_BASE_URL=$NEXT_PUBLIC_SPACE_BASE_URL - ARG NEXT_PUBLIC_SPACE_BASE_PATH="/spaces" ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH +ARG NEXT_PUBLIC_LIVE_BASE_URL="" +ENV NEXT_PUBLIC_LIVE_BASE_URL=$NEXT_PUBLIC_LIVE_BASE_URL +ARG NEXT_PUBLIC_LIVE_BASE_PATH="/live" +ENV NEXT_PUBLIC_LIVE_BASE_PATH=$NEXT_PUBLIC_LIVE_BASE_PATH + ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL +ARG NEXT_PUBLIC_WEB_BASE_PATH="" +ENV NEXT_PUBLIC_WEB_BASE_PATH=$NEXT_PUBLIC_WEB_BASE_PATH -ENV NEXT_TELEMETRY_DISABLED=1 -ENV TURBO_TELEMETRY_DISABLED=1 - -RUN pnpm turbo run build --filter=admin +ARG NEXT_PUBLIC_WEBSITE_URL="https://plane.so" +ENV NEXT_PUBLIC_WEBSITE_URL=$NEXT_PUBLIC_WEBSITE_URL +ARG NEXT_PUBLIC_SUPPORT_EMAIL="support@plane.so" +ENV NEXT_PUBLIC_SUPPORT_EMAIL=$NEXT_PUBLIC_SUPPORT_EMAIL -# ***************************************************************************** -# STAGE 3: Copy the project and start it -# ***************************************************************************** -FROM base AS runner -WORKDIR /app - -# Don't run production as root -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs -USER nextjs - -# Automatically leverage output traces to reduce image size -# https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=installer /app/apps/admin/.next/standalone ./ -COPY --from=installer /app/apps/admin/.next/static ./apps/admin/.next/static -COPY --from=installer /app/apps/admin/public ./apps/admin/public - -ARG NEXT_PUBLIC_API_BASE_URL="" -ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL - -ARG NEXT_PUBLIC_ADMIN_BASE_URL="" -ENV NEXT_PUBLIC_ADMIN_BASE_URL=$NEXT_PUBLIC_ADMIN_BASE_URL +COPY .gitignore .gitignore +COPY --from=builder /app/out/json/ . +COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -ARG NEXT_PUBLIC_ADMIN_BASE_PATH="/god-mode" -ENV NEXT_PUBLIC_ADMIN_BASE_PATH=$NEXT_PUBLIC_ADMIN_BASE_PATH +# Fetch dependencies to cache store, then install offline with dev deps +RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm fetch --store-dir=/pnpm/store +COPY --from=builder /app/out/full/ . +COPY turbo.json turbo.json +RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store pnpm install --offline --frozen-lockfile --store-dir=/pnpm/store --prod=false -ARG NEXT_PUBLIC_SPACE_BASE_URL="" -ENV NEXT_PUBLIC_SPACE_BASE_URL=$NEXT_PUBLIC_SPACE_BASE_URL +# Build only the admin package +RUN pnpm turbo run build --filter=admin -ARG NEXT_PUBLIC_SPACE_BASE_PATH="/spaces" -ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH +# =========================================================================== # -ARG NEXT_PUBLIC_WEB_BASE_URL="" -ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL +FROM nginx:1.27-alpine AS production -ENV NEXT_TELEMETRY_DISABLED=1 -ENV TURBO_TELEMETRY_DISABLED=1 +COPY apps/admin/nginx/nginx.conf /etc/nginx/nginx.conf +COPY --from=installer /app/apps/admin/build/client /usr/share/nginx/html EXPOSE 3000 -CMD ["node", "apps/admin/server.js"] +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -fsS http://127.0.0.1:3000/ >/dev/null || exit 1 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/apps/admin/app/(all)/(dashboard)/ai/layout.tsx b/apps/admin/app/(all)/(dashboard)/ai/layout.tsx deleted file mode 100644 index 303ed56045b..00000000000 --- a/apps/admin/app/(all)/(dashboard)/ai/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Artificial Intelligence Settings - God Mode", -}; - -export default function AILayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/ai/page.tsx b/apps/admin/app/(all)/(dashboard)/ai/page.tsx index 2a0747776e1..e5323e92b88 100644 --- a/apps/admin/app/(all)/(dashboard)/ai/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/ai/page.tsx @@ -6,9 +6,10 @@ import { Loader } from "@plane/ui"; // hooks import { useInstance } from "@/hooks/store"; // components +import type { Route } from "./+types/page"; import { InstanceAIForm } from "./form"; -const InstanceAIPage = observer(() => { +const InstanceAIPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig } = useInstance(); @@ -42,4 +43,6 @@ const InstanceAIPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Artificial Intelligence Settings - God Mode" }]; + export default InstanceAIPage; diff --git a/apps/admin/app/(all)/(dashboard)/authentication/github/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/github/layout.tsx deleted file mode 100644 index 2da5a9031ee..00000000000 --- a/apps/admin/app/(all)/(dashboard)/authentication/github/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "GitHub Authentication - God Mode", -}; - -export default function GitHubAuthenticationLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/authentication/github/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/github/page.tsx index 5709ba4ba4e..7a2c6d7a85b 100644 --- a/apps/admin/app/(all)/(dashboard)/authentication/github/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/authentication/github/page.tsx @@ -10,16 +10,17 @@ import { setPromiseToast } from "@plane/propel/toast"; import { Loader, ToggleSwitch } from "@plane/ui"; import { resolveGeneralTheme } from "@plane/utils"; // components +import githubLightModeImage from "@/app/assets/logos/github-black.png?url"; +import githubDarkModeImage from "@/app/assets/logos/github-white.png?url"; import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; // icons -import githubLightModeImage from "@/public/logos/github-black.png"; -import githubDarkModeImage from "@/public/logos/github-white.png"; // local components +import type { Route } from "./+types/page"; import { InstanceGithubConfigForm } from "./form"; -const InstanceGithubAuthenticationPage = observer(() => { +const InstanceGithubAuthenticationPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, updateInstanceConfigurations } = useInstance(); // state @@ -111,4 +112,6 @@ const InstanceGithubAuthenticationPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "GitHub Authentication - God Mode" }]; + export default InstanceGithubAuthenticationPage; diff --git a/apps/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx deleted file mode 100644 index 79b5de5afe9..00000000000 --- a/apps/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "GitLab Authentication - God Mode", -}; - -export default function GitlabAuthenticationLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx index ae85168aebf..47ec9bd197b 100644 --- a/apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx @@ -7,15 +7,16 @@ import useSWR from "swr"; import { setPromiseToast } from "@plane/propel/toast"; import { Loader, ToggleSwitch } from "@plane/ui"; // components +import GitlabLogo from "@/app/assets/logos/gitlab-logo.svg?url"; import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; // icons -import GitlabLogo from "@/public/logos/gitlab-logo.svg"; // local components +import type { Route } from "./+types/page"; import { InstanceGitlabConfigForm } from "./form"; -const InstanceGitlabAuthenticationPage = observer(() => { +const InstanceGitlabAuthenticationPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, updateInstanceConfigurations } = useInstance(); // state @@ -99,4 +100,6 @@ const InstanceGitlabAuthenticationPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "GitLab Authentication - God Mode" }]; + export default InstanceGitlabAuthenticationPage; diff --git a/apps/admin/app/(all)/(dashboard)/authentication/google/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/google/layout.tsx deleted file mode 100644 index ddc0cff4589..00000000000 --- a/apps/admin/app/(all)/(dashboard)/authentication/google/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Google Authentication - God Mode", -}; - -export default function GoogleAuthenticationLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx index d6ca370d495..ce546119ab0 100644 --- a/apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx @@ -7,15 +7,16 @@ import useSWR from "swr"; import { setPromiseToast } from "@plane/propel/toast"; import { Loader, ToggleSwitch } from "@plane/ui"; // components +import GoogleLogo from "@/app/assets/logos/google-logo.svg?url"; import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; // icons -import GoogleLogo from "@/public/logos/google-logo.svg"; // local components +import type { Route } from "./+types/page"; import { InstanceGoogleConfigForm } from "./form"; -const InstanceGoogleAuthenticationPage = observer(() => { +const InstanceGoogleAuthenticationPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, updateInstanceConfigurations } = useInstance(); // state @@ -100,4 +101,6 @@ const InstanceGoogleAuthenticationPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Google Authentication - God Mode" }]; + export default InstanceGoogleAuthenticationPage; diff --git a/apps/admin/app/(all)/(dashboard)/authentication/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/layout.tsx deleted file mode 100644 index bed80f2240d..00000000000 --- a/apps/admin/app/(all)/(dashboard)/authentication/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Authentication Settings - Plane Web", -}; - -export default function AuthenticationLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/authentication/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/page.tsx index 16be71e5862..380966e0246 100644 --- a/apps/admin/app/(all)/(dashboard)/authentication/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/authentication/page.tsx @@ -12,8 +12,9 @@ import { cn } from "@plane/utils"; import { useInstance } from "@/hooks/store"; // plane admin components import { AuthenticationModes } from "@/plane-admin/components/authentication"; +import type { Route } from "./+types/page"; -const InstanceAuthenticationPage = observer(() => { +const InstanceAuthenticationPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, updateInstanceConfigurations } = useInstance(); @@ -111,4 +112,6 @@ const InstanceAuthenticationPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Authentication Settings - Plane Web" }]; + export default InstanceAuthenticationPage; diff --git a/apps/admin/app/(all)/(dashboard)/email/layout.tsx b/apps/admin/app/(all)/(dashboard)/email/layout.tsx deleted file mode 100644 index 0e6fc06cd3c..00000000000 --- a/apps/admin/app/(all)/(dashboard)/email/layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -interface EmailLayoutProps { - children: ReactNode; -} - -export const metadata: Metadata = { - title: "Email Settings - God Mode", -}; - -export default function EmailLayout({ children }: EmailLayoutProps) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/email/page.tsx b/apps/admin/app/(all)/(dashboard)/email/page.tsx index a509f6d28e8..152c51dda89 100644 --- a/apps/admin/app/(all)/(dashboard)/email/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/email/page.tsx @@ -8,9 +8,10 @@ import { Loader, ToggleSwitch } from "@plane/ui"; // hooks import { useInstance } from "@/hooks/store"; // components +import type { Route } from "./+types/page"; import { InstanceEmailForm } from "./email-config-form"; -const InstanceEmailPage: React.FC = observer(() => { +const InstanceEmailPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, disableEmail } = useInstance(); @@ -91,4 +92,6 @@ const InstanceEmailPage: React.FC = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Email Settings - God Mode" }]; + export default InstanceEmailPage; diff --git a/apps/admin/app/(all)/(dashboard)/general/layout.tsx b/apps/admin/app/(all)/(dashboard)/general/layout.tsx deleted file mode 100644 index f5167e7504b..00000000000 --- a/apps/admin/app/(all)/(dashboard)/general/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "General Settings - God Mode", -}; - -export default function GeneralLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/general/page.tsx b/apps/admin/app/(all)/(dashboard)/general/page.tsx index f0d32f26187..4531da1e20e 100644 --- a/apps/admin/app/(all)/(dashboard)/general/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/general/page.tsx @@ -3,6 +3,7 @@ import { observer } from "mobx-react"; // hooks import { useInstance } from "@/hooks/store"; // components +import type { Route } from "./+types/page"; import { GeneralConfigurationForm } from "./form"; function GeneralPage() { @@ -28,4 +29,6 @@ function GeneralPage() { ); } +export const meta: Route.MetaFunction = () => [{ title: "General Settings - God Mode" }]; + export default observer(GeneralPage); diff --git a/apps/admin/app/(all)/(dashboard)/image/layout.tsx b/apps/admin/app/(all)/(dashboard)/image/layout.tsx deleted file mode 100644 index 559a15f9d47..00000000000 --- a/apps/admin/app/(all)/(dashboard)/image/layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -interface ImageLayoutProps { - children: ReactNode; -} - -export const metadata: Metadata = { - title: "Images Settings - God Mode", -}; - -export default function ImageLayout({ children }: ImageLayoutProps) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/image/page.tsx b/apps/admin/app/(all)/(dashboard)/image/page.tsx index ade9687d5ef..8a8fad01ada 100644 --- a/apps/admin/app/(all)/(dashboard)/image/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/image/page.tsx @@ -6,9 +6,10 @@ import { Loader } from "@plane/ui"; // hooks import { useInstance } from "@/hooks/store"; // local +import type { Route } from "./+types/page"; import { InstanceImageConfigForm } from "./form"; -const InstanceImagePage = observer(() => { +const InstanceImagePage = observer>(() => { // store const { formattedConfig, fetchInstanceConfigurations } = useInstance(); @@ -38,4 +39,6 @@ const InstanceImagePage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Images Settings - God Mode" }]; + export default InstanceImagePage; diff --git a/apps/admin/app/(all)/(dashboard)/layout.tsx b/apps/admin/app/(all)/(dashboard)/layout.tsx index 76d74f4638c..da9be8bb910 100644 --- a/apps/admin/app/(all)/(dashboard)/layout.tsx +++ b/apps/admin/app/(all)/(dashboard)/layout.tsx @@ -1,34 +1,28 @@ "use client"; -import type { FC, ReactNode } from "react"; import { useEffect } from "react"; import { observer } from "mobx-react"; import { useRouter } from "next/navigation"; +import { Outlet } from "react-router"; // components import { LogoSpinner } from "@/components/common/logo-spinner"; import { NewUserPopup } from "@/components/new-user-popup"; // hooks import { useUser } from "@/hooks/store"; // local components +import type { Route } from "./+types/layout"; import { AdminHeader } from "./header"; import { AdminSidebar } from "./sidebar"; -type TAdminLayout = { - children: ReactNode; -}; - -const AdminLayout: FC = (props) => { - const { children } = props; +const AdminLayout: React.FC = () => { // router - const router = useRouter(); + const { replace } = useRouter(); // store hooks const { isUserLoggedIn } = useUser(); useEffect(() => { - if (isUserLoggedIn === false) { - router.push("/"); - } - }, [router, isUserLoggedIn]); + if (isUserLoggedIn === false) replace("/"); + }, [replace, isUserLoggedIn]); if (isUserLoggedIn === undefined) { return ( @@ -44,7 +38,9 @@ const AdminLayout: FC = (props) => {
-
{children}
+
+ +
diff --git a/apps/admin/app/(all)/(dashboard)/workspace/create/page.tsx b/apps/admin/app/(all)/(dashboard)/workspace/create/page.tsx index 0186286a7b4..6d69d313f1c 100644 --- a/apps/admin/app/(all)/(dashboard)/workspace/create/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/workspace/create/page.tsx @@ -2,9 +2,10 @@ import { observer } from "mobx-react"; // components +import type { Route } from "./+types/page"; import { WorkspaceCreateForm } from "./form"; -const WorkspaceCreatePage = observer(() => ( +const WorkspaceCreatePage = observer>(() => (
Create a new workspace on this instance.
@@ -18,4 +19,6 @@ const WorkspaceCreatePage = observer(() => (
)); +export const meta: Route.MetaFunction = () => [{ title: "Create Workspace - God Mode" }]; + export default WorkspaceCreatePage; diff --git a/apps/admin/app/(all)/(dashboard)/workspace/layout.tsx b/apps/admin/app/(all)/(dashboard)/workspace/layout.tsx deleted file mode 100644 index 4749e2f7b0a..00000000000 --- a/apps/admin/app/(all)/(dashboard)/workspace/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Workspace Management - God Mode", -}; - -export default function WorkspaceManagementLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/workspace/page.tsx b/apps/admin/app/(all)/(dashboard)/workspace/page.tsx index a03c443d8a4..5b6c96daaa1 100644 --- a/apps/admin/app/(all)/(dashboard)/workspace/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/workspace/page.tsx @@ -16,8 +16,9 @@ import { cn } from "@plane/utils"; import { WorkspaceListItem } from "@/components/workspace/list-item"; // hooks import { useInstance, useWorkspace } from "@/hooks/store"; +import type { Route } from "./+types/page"; -const WorkspaceManagementPage = observer(() => { +const WorkspaceManagementPage = observer>(() => { // states const [isSubmitting, setIsSubmitting] = useState(false); // store @@ -167,4 +168,6 @@ const WorkspaceManagementPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Workspace Management - God Mode" }]; + export default WorkspaceManagementPage; diff --git a/apps/admin/app/(all)/(home)/auth-helpers.tsx b/apps/admin/app/(all)/(home)/auth-helpers.tsx index 4da6d7eca0c..a1271d186fc 100644 --- a/apps/admin/app/(all)/(home)/auth-helpers.tsx +++ b/apps/admin/app/(all)/(home)/auth-helpers.tsx @@ -1,4 +1,3 @@ -import type { ReactNode } from "react"; import Image from "next/image"; import Link from "next/link"; import { KeyRound, Mails } from "lucide-react"; @@ -8,16 +7,16 @@ import { SUPPORT_EMAIL, EAdminAuthErrorCodes } from "@plane/constants"; import type { TGetBaseAuthenticationModeProps, TInstanceAuthenticationModes } from "@plane/types"; import { resolveGeneralTheme } from "@plane/utils"; // components +import githubLightModeImage from "@/app/assets/logos/github-black.png?url"; +import githubDarkModeImage from "@/app/assets/logos/github-white.png?url"; +import GitlabLogo from "@/app/assets/logos/gitlab-logo.svg?url"; +import GoogleLogo from "@/app/assets/logos/google-logo.svg?url"; import { EmailCodesConfiguration } from "@/components/authentication/email-config-switch"; import { GithubConfiguration } from "@/components/authentication/github-config"; import { GitlabConfiguration } from "@/components/authentication/gitlab-config"; import { GoogleConfiguration } from "@/components/authentication/google-config"; import { PasswordLoginConfiguration } from "@/components/authentication/password-config-switch"; // images -import githubLightModeImage from "@/public/logos/github-black.png"; -import githubDarkModeImage from "@/public/logos/github-white.png"; -import GitlabLogo from "@/public/logos/gitlab-logo.svg"; -import GoogleLogo from "@/public/logos/google-logo.svg"; export enum EErrorAlertType { BANNER_ALERT = "BANNER_ALERT", @@ -28,7 +27,7 @@ export enum EErrorAlertType { } const errorCodeMessages: { - [key in EAdminAuthErrorCodes]: { title: string; message: (email?: string | undefined) => ReactNode }; + [key in EAdminAuthErrorCodes]: { title: string; message: (email?: string | undefined) => React.ReactNode }; } = { // admin [EAdminAuthErrorCodes.ADMIN_ALREADY_EXIST]: { diff --git a/apps/admin/app/(all)/(home)/layout.tsx b/apps/admin/app/(all)/(home)/layout.tsx index 25638c67768..a73ec5cdd37 100644 --- a/apps/admin/app/(all)/(home)/layout.tsx +++ b/apps/admin/app/(all)/(home)/layout.tsx @@ -1,9 +1,11 @@ "use client"; -export default function RootLayout({ children }: { children: React.ReactNode }) { +import { Outlet } from "react-router"; + +export default function RootLayout() { return (
- {children} +
); } diff --git a/apps/admin/app/(all)/(home)/page.tsx b/apps/admin/app/(all)/(home)/page.tsx index e6ebdf45592..2308c691d11 100644 --- a/apps/admin/app/(all)/(home)/page.tsx +++ b/apps/admin/app/(all)/(home)/page.tsx @@ -8,6 +8,7 @@ import { InstanceSetupForm } from "@/components/instance/setup-form"; // hooks import { useInstance } from "@/hooks/store"; // components +import type { Route } from "./+types/page"; import { InstanceSignInForm } from "./sign-in-form"; const HomePage = () => { @@ -38,3 +39,8 @@ const HomePage = () => { }; export default observer(HomePage); + +export const meta: Route.MetaFunction = () => [ + { title: "Admin – Instance Setup & Sign-In" }, + { name: "description", content: "Configure your Plane instance or sign in to the admin portal." }, +]; diff --git a/apps/admin/public/favicon/apple-touch-icon.png b/apps/admin/app/assets/favicon/apple-touch-icon.png similarity index 100% rename from apps/admin/public/favicon/apple-touch-icon.png rename to apps/admin/app/assets/favicon/apple-touch-icon.png diff --git a/apps/admin/public/favicon/favicon-16x16.png b/apps/admin/app/assets/favicon/favicon-16x16.png similarity index 100% rename from apps/admin/public/favicon/favicon-16x16.png rename to apps/admin/app/assets/favicon/favicon-16x16.png diff --git a/apps/admin/public/favicon/favicon-32x32.png b/apps/admin/app/assets/favicon/favicon-32x32.png similarity index 100% rename from apps/admin/public/favicon/favicon-32x32.png rename to apps/admin/app/assets/favicon/favicon-32x32.png diff --git a/apps/admin/public/favicon/favicon.ico b/apps/admin/app/assets/favicon/favicon.ico similarity index 100% rename from apps/admin/public/favicon/favicon.ico rename to apps/admin/app/assets/favicon/favicon.ico diff --git a/apps/admin/app/assets/images/404.svg b/apps/admin/app/assets/images/404.svg new file mode 100644 index 00000000000..4c298417dcb --- /dev/null +++ b/apps/admin/app/assets/images/404.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/admin/public/images/logo-spinner-dark.gif b/apps/admin/app/assets/images/logo-spinner-dark.gif similarity index 100% rename from apps/admin/public/images/logo-spinner-dark.gif rename to apps/admin/app/assets/images/logo-spinner-dark.gif diff --git a/apps/admin/public/images/logo-spinner-light.gif b/apps/admin/app/assets/images/logo-spinner-light.gif similarity index 100% rename from apps/admin/public/images/logo-spinner-light.gif rename to apps/admin/app/assets/images/logo-spinner-light.gif diff --git a/apps/admin/public/images/plane-takeoff.png b/apps/admin/app/assets/images/plane-takeoff.png similarity index 100% rename from apps/admin/public/images/plane-takeoff.png rename to apps/admin/app/assets/images/plane-takeoff.png diff --git a/apps/admin/public/instance/instance-failure-dark.svg b/apps/admin/app/assets/instance/instance-failure-dark.svg similarity index 100% rename from apps/admin/public/instance/instance-failure-dark.svg rename to apps/admin/app/assets/instance/instance-failure-dark.svg diff --git a/apps/admin/public/instance/instance-failure.svg b/apps/admin/app/assets/instance/instance-failure.svg similarity index 100% rename from apps/admin/public/instance/instance-failure.svg rename to apps/admin/app/assets/instance/instance-failure.svg diff --git a/apps/admin/public/logos/github-black.png b/apps/admin/app/assets/logos/github-black.png similarity index 100% rename from apps/admin/public/logos/github-black.png rename to apps/admin/app/assets/logos/github-black.png diff --git a/apps/admin/public/logos/github-white.png b/apps/admin/app/assets/logos/github-white.png similarity index 100% rename from apps/admin/public/logos/github-white.png rename to apps/admin/app/assets/logos/github-white.png diff --git a/apps/admin/public/logos/gitlab-logo.svg b/apps/admin/app/assets/logos/gitlab-logo.svg similarity index 100% rename from apps/admin/public/logos/gitlab-logo.svg rename to apps/admin/app/assets/logos/gitlab-logo.svg diff --git a/apps/admin/public/logos/google-logo.svg b/apps/admin/app/assets/logos/google-logo.svg similarity index 100% rename from apps/admin/public/logos/google-logo.svg rename to apps/admin/app/assets/logos/google-logo.svg diff --git a/apps/admin/public/logos/oidc-logo.svg b/apps/admin/app/assets/logos/oidc-logo.svg similarity index 100% rename from apps/admin/public/logos/oidc-logo.svg rename to apps/admin/app/assets/logos/oidc-logo.svg diff --git a/apps/admin/public/logos/saml-logo.svg b/apps/admin/app/assets/logos/saml-logo.svg similarity index 100% rename from apps/admin/public/logos/saml-logo.svg rename to apps/admin/app/assets/logos/saml-logo.svg diff --git a/apps/admin/public/logos/takeoff-icon-dark.svg b/apps/admin/app/assets/logos/takeoff-icon-dark.svg similarity index 100% rename from apps/admin/public/logos/takeoff-icon-dark.svg rename to apps/admin/app/assets/logos/takeoff-icon-dark.svg diff --git a/apps/admin/public/logos/takeoff-icon-light.svg b/apps/admin/app/assets/logos/takeoff-icon-light.svg similarity index 100% rename from apps/admin/public/logos/takeoff-icon-light.svg rename to apps/admin/app/assets/logos/takeoff-icon-light.svg diff --git a/apps/admin/app/compat/next/helper.ts b/apps/admin/app/compat/next/helper.ts new file mode 100644 index 00000000000..fe1a984460d --- /dev/null +++ b/apps/admin/app/compat/next/helper.ts @@ -0,0 +1,33 @@ +/** + * Ensures that a URL has a trailing slash while preserving query parameters and fragments + * @param url - The URL to process + * @returns The URL with a trailing slash added to the pathname (if not already present) + */ +export function ensureTrailingSlash(url: string): string { + try { + // Handle relative URLs by creating a URL object with a dummy base + const urlObj = new URL(url, "http://dummy.com"); + + // Don't modify root path + if (urlObj.pathname === "/") { + return url; + } + + // Add trailing slash if it doesn't exist + if (!urlObj.pathname.endsWith("/")) { + urlObj.pathname += "/"; + } + + // For relative URLs, return just the path + search + hash + if (url.startsWith("/")) { + return urlObj.pathname + urlObj.search + urlObj.hash; + } + + // For absolute URLs, return the full URL + return urlObj.toString(); + } catch (error) { + // If URL parsing fails, return the original URL + console.warn("Failed to parse URL for trailing slash enforcement:", url, error); + return url; + } +} diff --git a/apps/admin/app/compat/next/image.tsx b/apps/admin/app/compat/next/image.tsx new file mode 100644 index 00000000000..91de8b7810a --- /dev/null +++ b/apps/admin/app/compat/next/image.tsx @@ -0,0 +1,14 @@ +"use client"; + +import React from "react"; + +// Minimal shim so code using next/image compiles under React Router + Vite +// without changing call sites. It just renders a native img. + +type NextImageProps = React.ImgHTMLAttributes & { + src: string; +}; + +const Image: React.FC = ({ src, alt = "", ...rest }) => {alt}; + +export default Image; diff --git a/apps/admin/app/compat/next/link.tsx b/apps/admin/app/compat/next/link.tsx new file mode 100644 index 00000000000..4f42363272f --- /dev/null +++ b/apps/admin/app/compat/next/link.tsx @@ -0,0 +1,24 @@ +"use client"; + +import React from "react"; +import { Link as RRLink } from "react-router"; +import { ensureTrailingSlash } from "./helper"; + +type NextLinkProps = React.ComponentProps<"a"> & { + href: string; + replace?: boolean; + prefetch?: boolean; // next.js prop, ignored + scroll?: boolean; // next.js prop, ignored + shallow?: boolean; // next.js prop, ignored +}; + +const Link: React.FC = ({ + href, + replace, + prefetch: _prefetch, + scroll: _scroll, + shallow: _shallow, + ...rest +}) => ; + +export default Link; diff --git a/apps/admin/app/compat/next/navigation.ts b/apps/admin/app/compat/next/navigation.ts new file mode 100644 index 00000000000..27ee0334039 --- /dev/null +++ b/apps/admin/app/compat/next/navigation.ts @@ -0,0 +1,34 @@ +"use client"; + +import { useMemo } from "react"; +import { useLocation, useNavigate, useSearchParams as useSearchParamsRR } from "react-router"; +import { ensureTrailingSlash } from "./helper"; + +export function useRouter() { + const navigate = useNavigate(); + return useMemo( + () => ({ + push: (to: string) => navigate(ensureTrailingSlash(to)), + replace: (to: string) => navigate(ensureTrailingSlash(to), { replace: true }), + back: () => navigate(-1), + forward: () => navigate(1), + refresh: () => { + location.reload(); + }, + prefetch: async (_to: string) => { + // no-op in this shim + }, + }), + [navigate] + ); +} + +export function usePathname(): string { + const { pathname } = useLocation(); + return pathname; +} + +export function useSearchParams(): URLSearchParams { + const [searchParams] = useSearchParamsRR(); + return searchParams; +} diff --git a/apps/admin/app/components/404.tsx b/apps/admin/app/components/404.tsx new file mode 100644 index 00000000000..fa17e4fcdc3 --- /dev/null +++ b/apps/admin/app/components/404.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import { Link } from "react-router"; +// ui +import { Button } from "@plane/propel/button"; +// images +import Image404 from "@/app/assets/images/404.svg?url"; + +const PageNotFound = () => ( +
+
+
+
+ 404 - Page not found +
+
+

Oops! Something went wrong.

+

+ Sorry, the page you are looking for cannot be found. It may have been removed, had its name changed, or is + temporarily unavailable. +

+
+ + + + + +
+
+
+); + +export default PageNotFound; diff --git a/apps/admin/app/error.tsx b/apps/admin/app/error.tsx deleted file mode 100644 index 76794e04a7f..00000000000 --- a/apps/admin/app/error.tsx +++ /dev/null @@ -1,9 +0,0 @@ -"use client"; - -export default function RootErrorPage() { - return ( -
-

Something went wrong.

-
- ); -} diff --git a/apps/admin/app/layout.tsx b/apps/admin/app/layout.tsx deleted file mode 100644 index b9cdd17caff..00000000000 --- a/apps/admin/app/layout.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; -// plane imports -import { ADMIN_BASE_PATH } from "@plane/constants"; -// styles -import "@/styles/globals.css"; - -export const metadata: Metadata = { - title: "Plane | Simple, extensible, open-source project management tool.", - description: - "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind.", - openGraph: { - title: "Plane | Simple, extensible, open-source project management tool.", - description: - "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind.", - url: "https://plane.so/", - }, - keywords: - "software development, customer feedback, software, accelerate, code management, release management, project management, work items tracking, agile, scrum, kanban, collaboration", - twitter: { - site: "@planepowers", - }, -}; - -export default function RootLayout({ children }: { children: ReactNode }) { - const ASSET_PREFIX = ADMIN_BASE_PATH; - return ( - - - - - - - - - {children} - - ); -} diff --git a/apps/admin/app/(all)/layout.tsx b/apps/admin/app/providers.tsx similarity index 66% rename from apps/admin/app/(all)/layout.tsx rename to apps/admin/app/providers.tsx index ddfba732a91..30a87df088f 100644 --- a/apps/admin/app/(all)/layout.tsx +++ b/apps/admin/app/providers.tsx @@ -2,22 +2,21 @@ import { ThemeProvider } from "next-themes"; import { SWRConfig } from "swr"; -// providers -import { InstanceProvider } from "./instance.provider"; -import { StoreProvider } from "./store.provider"; -import { ToastWithTheme } from "./toast"; -import { UserProvider } from "./user.provider"; +import { InstanceProvider } from "./(all)/instance.provider"; +import { StoreProvider } from "./(all)/store.provider"; +import { ToastWithTheme } from "./(all)/toast"; +import { UserProvider } from "./(all)/user.provider"; const DEFAULT_SWR_CONFIG = { refreshWhenHidden: false, revalidateIfStale: false, revalidateOnFocus: false, revalidateOnMount: true, - refreshInterval: 600000, + refreshInterval: 600_000, errorRetryCount: 3, }; -export default function InstanceLayout({ children }: { children: React.ReactNode }) { +export function AppProviders({ children }: { children: React.ReactNode }) { return ( diff --git a/apps/admin/app/root.tsx b/apps/admin/app/root.tsx new file mode 100644 index 00000000000..128e36f6a3d --- /dev/null +++ b/apps/admin/app/root.tsx @@ -0,0 +1,65 @@ +import type { ReactNode } from "react"; +import { Links, Meta, Outlet, Scripts } from "react-router"; +import type { LinksFunction } from "react-router"; +import "../styles/globals.css"; +import appleTouchIcon from "@/app/assets/favicon/apple-touch-icon.png?url"; +import favicon16 from "@/app/assets/favicon/favicon-16x16.png?url"; +import favicon32 from "@/app/assets/favicon/favicon-32x32.png?url"; +import faviconIco from "@/app/assets/favicon/favicon.ico?url"; +import type { Route } from "./+types/root"; +import { AppProviders } from "./providers"; + +const APP_TITLE = "Plane | Simple, extensible, open-source project management tool."; +const APP_DESCRIPTION = + "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind."; + +export const links: LinksFunction = () => [ + { rel: "apple-touch-icon", sizes: "180x180", href: appleTouchIcon }, + { rel: "icon", type: "image/png", sizes: "32x32", href: favicon32 }, + { rel: "icon", type: "image/png", sizes: "16x16", href: favicon16 }, + { rel: "shortcut icon", href: faviconIco }, + { rel: "manifest", href: `/site.webmanifest.json` }, +]; + +export function Layout({ children }: { children: ReactNode }) { + return ( + + + + + + + + + {children} + + + + ); +} + +export const meta: Route.MetaFunction = () => [ + { title: APP_TITLE }, + { name: "description", content: APP_DESCRIPTION }, + { property: "og:title", content: APP_TITLE }, + { property: "og:description", content: APP_DESCRIPTION }, + { property: "og:url", content: "https://plane.so/" }, + { + name: "keywords", + content: + "software development, customer feedback, software, accelerate, code management, release management, project management, work items tracking, agile, scrum, kanban, collaboration", + }, + { name: "twitter:site", content: "@planepowers" }, +]; + +export default function Root() { + return ; +} + +export function ErrorBoundary() { + return ( +
+

Something went wrong.

+
+ ); +} diff --git a/apps/admin/app/routes.ts b/apps/admin/app/routes.ts new file mode 100644 index 00000000000..fba19dcefb3 --- /dev/null +++ b/apps/admin/app/routes.ts @@ -0,0 +1,20 @@ +import { index, layout, route } from "@react-router/dev/routes"; +import type { RouteConfig } from "@react-router/dev/routes"; + +export default [ + layout("./(all)/(home)/layout.tsx", [index("./(all)/(home)/page.tsx")]), + layout("./(all)/(dashboard)/layout.tsx", [ + route("general", "./(all)/(dashboard)/general/page.tsx"), + route("workspace", "./(all)/(dashboard)/workspace/page.tsx"), + route("workspace/create", "./(all)/(dashboard)/workspace/create/page.tsx"), + route("email", "./(all)/(dashboard)/email/page.tsx"), + route("authentication", "./(all)/(dashboard)/authentication/page.tsx"), + route("authentication/github", "./(all)/(dashboard)/authentication/github/page.tsx"), + route("authentication/gitlab", "./(all)/(dashboard)/authentication/gitlab/page.tsx"), + route("authentication/google", "./(all)/(dashboard)/authentication/google/page.tsx"), + route("ai", "./(all)/(dashboard)/ai/page.tsx"), + route("image", "./(all)/(dashboard)/image/page.tsx"), + ]), + // Catch-all route for 404 handling - must be last + route("*", "./components/404.tsx"), +] satisfies RouteConfig; diff --git a/apps/admin/app/types/next-image.d.ts b/apps/admin/app/types/next-image.d.ts new file mode 100644 index 00000000000..a81e721614a --- /dev/null +++ b/apps/admin/app/types/next-image.d.ts @@ -0,0 +1,5 @@ +declare module "next/image" { + type Props = React.ComponentProps<"img"> & { src: string }; + const Image: React.FC; + export default Image; +} diff --git a/apps/admin/app/types/next-link.d.ts b/apps/admin/app/types/next-link.d.ts new file mode 100644 index 00000000000..c724e3aec16 --- /dev/null +++ b/apps/admin/app/types/next-link.d.ts @@ -0,0 +1,12 @@ +declare module "next/link" { + type Props = React.ComponentProps<"a"> & { + href: string; + replace?: boolean; + prefetch?: boolean; + scroll?: boolean; + shallow?: boolean; + }; + + const Link: React.FC; + export default Link; +} diff --git a/apps/admin/app/types/next-navigation.d.ts b/apps/admin/app/types/next-navigation.d.ts new file mode 100644 index 00000000000..7a7a7f15413 --- /dev/null +++ b/apps/admin/app/types/next-navigation.d.ts @@ -0,0 +1,13 @@ +declare module "next/navigation" { + export function useRouter(): { + push: (to: string) => void; + replace: (to: string) => void; + back: () => void; + forward: () => void; + refresh: () => void; + prefetch: (to: string) => Promise | void; + }; + + export function usePathname(): string; + export function useSearchParams(): URLSearchParams; +} diff --git a/apps/admin/app/types/react-router-virtual.d.ts b/apps/admin/app/types/react-router-virtual.d.ts new file mode 100644 index 00000000000..abf3b638e41 --- /dev/null +++ b/apps/admin/app/types/react-router-virtual.d.ts @@ -0,0 +1,5 @@ +declare module "virtual:react-router/server-build" { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const build: any; + export default build; +} diff --git a/apps/admin/ce/components/authentication/authentication-modes.tsx b/apps/admin/ce/components/authentication/authentication-modes.tsx index 386e0c05e28..3945f294481 100644 --- a/apps/admin/ce/components/authentication/authentication-modes.tsx +++ b/apps/admin/ce/components/authentication/authentication-modes.tsx @@ -10,6 +10,12 @@ import type { } from "@plane/types"; import { resolveGeneralTheme } from "@plane/utils"; // components +import githubLightModeImage from "@/app/assets/logos/github-black.png?url"; +import githubDarkModeImage from "@/app/assets/logos/github-white.png?url"; +import GitlabLogo from "@/app/assets/logos/gitlab-logo.svg?url"; +import GoogleLogo from "@/app/assets/logos/google-logo.svg?url"; +import OIDCLogo from "@/app/assets/logos/oidc-logo.svg?url"; +import SAMLLogo from "@/app/assets/logos/saml-logo.svg?url"; import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; import { EmailCodesConfiguration } from "@/components/authentication/email-config-switch"; import { GithubConfiguration } from "@/components/authentication/github-config"; @@ -19,12 +25,6 @@ import { PasswordLoginConfiguration } from "@/components/authentication/password // plane admin components import { UpgradeButton } from "@/plane-admin/components/common"; // assets -import githubLightModeImage from "@/public/logos/github-black.png"; -import githubDarkModeImage from "@/public/logos/github-white.png"; -import GitlabLogo from "@/public/logos/gitlab-logo.svg"; -import GoogleLogo from "@/public/logos/google-logo.svg"; -import OIDCLogo from "@/public/logos/oidc-logo.svg"; -import SAMLLogo from "@/public/logos/saml-logo.svg"; export type TAuthenticationModeProps = { disabled: boolean; @@ -98,7 +98,7 @@ export const getAuthenticationModes: (props: TGetBaseAuthenticationModeProps) => }, ]; -export const AuthenticationModes: React.FC = observer((props) => { +export const AuthenticationModes = observer>((props) => { const { disabled, updateConfig } = props; // next-themes const { resolvedTheme } = useTheme(); diff --git a/apps/admin/core/components/common/logo-spinner.tsx b/apps/admin/core/components/common/logo-spinner.tsx index fda44fca591..a12dfcabbcc 100644 --- a/apps/admin/core/components/common/logo-spinner.tsx +++ b/apps/admin/core/components/common/logo-spinner.tsx @@ -1,8 +1,7 @@ import Image from "next/image"; import { useTheme } from "next-themes"; -// assets -import LogoSpinnerDark from "@/public/images/logo-spinner-dark.gif"; -import LogoSpinnerLight from "@/public/images/logo-spinner-light.gif"; +import LogoSpinnerDark from "@/app/assets/images/logo-spinner-dark.gif?url"; +import LogoSpinnerLight from "@/app/assets/images/logo-spinner-light.gif?url"; export const LogoSpinner = () => { const { resolvedTheme } = useTheme(); diff --git a/apps/admin/core/components/instance/failure.tsx b/apps/admin/core/components/instance/failure.tsx index 97ace834f86..bfe9fc27779 100644 --- a/apps/admin/core/components/instance/failure.tsx +++ b/apps/admin/core/components/instance/failure.tsx @@ -1,15 +1,14 @@ "use client"; -import type { FC } from "react"; import { observer } from "mobx-react"; import Image from "next/image"; import { useTheme } from "next-themes"; import { Button } from "@plane/propel/button"; // assets import { AuthHeader } from "@/app/(all)/(home)/auth-header"; -import InstanceFailureDarkImage from "@/public/instance/instance-failure-dark.svg"; -import InstanceFailureImage from "@/public/instance/instance-failure.svg"; +import InstanceFailureDarkImage from "@/app/assets/instance/instance-failure-dark.svg?url"; +import InstanceFailureImage from "@/app/assets/instance/instance-failure.svg?url"; -export const InstanceFailureView: FC = observer(() => { +export const InstanceFailureView: React.FC = observer(() => { const { resolvedTheme } = useTheme(); const instanceImage = resolvedTheme === "dark" ? InstanceFailureDarkImage : InstanceFailureImage; diff --git a/apps/admin/core/components/instance/instance-not-ready.tsx b/apps/admin/core/components/instance/instance-not-ready.tsx index b01d938bf9b..56cc1a54335 100644 --- a/apps/admin/core/components/instance/instance-not-ready.tsx +++ b/apps/admin/core/components/instance/instance-not-ready.tsx @@ -1,13 +1,12 @@ "use client"; -import type { FC } from "react"; import Image from "next/image"; import Link from "next/link"; import { Button } from "@plane/propel/button"; // assets -import PlaneTakeOffImage from "@/public/images/plane-takeoff.png"; +import PlaneTakeOffImage from "@/app/assets/images/plane-takeoff.png?url"; -export const InstanceNotReady: FC = () => ( +export const InstanceNotReady: React.FC = () => (
diff --git a/apps/admin/core/components/instance/loading.tsx b/apps/admin/core/components/instance/loading.tsx index 27dc4ae6e61..b664d00c2bd 100644 --- a/apps/admin/core/components/instance/loading.tsx +++ b/apps/admin/core/components/instance/loading.tsx @@ -1,8 +1,8 @@ import Image from "next/image"; import { useTheme } from "next-themes"; // assets -import LogoSpinnerDark from "@/public/images/logo-spinner-dark.gif"; -import LogoSpinnerLight from "@/public/images/logo-spinner-light.gif"; +import LogoSpinnerDark from "@/app/assets/images/logo-spinner-dark.gif?url"; +import LogoSpinnerLight from "@/app/assets/images/logo-spinner-light.gif?url"; export const InstanceLoading = () => { const { resolvedTheme } = useTheme(); diff --git a/apps/admin/core/components/new-user-popup.tsx b/apps/admin/core/components/new-user-popup.tsx index 4f0e0236bcd..3ada29c2d8c 100644 --- a/apps/admin/core/components/new-user-popup.tsx +++ b/apps/admin/core/components/new-user-popup.tsx @@ -1,24 +1,23 @@ "use client"; -import React from "react"; import { observer } from "mobx-react"; import Image from "next/image"; import Link from "next/link"; -import { useTheme as nextUseTheme } from "next-themes"; +import { useTheme as useNextTheme } from "next-themes"; // ui import { Button, getButtonStyling } from "@plane/propel/button"; import { resolveGeneralTheme } from "@plane/utils"; // hooks +import TakeoffIconDark from "@/app/assets/logos/takeoff-icon-dark.svg?url"; +import TakeoffIconLight from "@/app/assets/logos/takeoff-icon-light.svg?url"; import { useTheme } from "@/hooks/store"; // icons -import TakeoffIconLight from "/public/logos/takeoff-icon-light.svg"; -import TakeoffIconDark from "/public/logos/takeoff-icon-dark.svg"; -export const NewUserPopup: React.FC = observer(() => { +export const NewUserPopup = observer(() => { // hooks const { isNewUserPopup, toggleNewUserPopup } = useTheme(); // theme - const { resolvedTheme } = nextUseTheme(); + const { resolvedTheme } = useNextTheme(); if (!isNewUserPopup) return <>; return ( diff --git a/apps/admin/middleware.js b/apps/admin/middleware.js new file mode 100644 index 00000000000..6d9e71f07e7 --- /dev/null +++ b/apps/admin/middleware.js @@ -0,0 +1,14 @@ +import { next } from '@vercel/edge'; + +export default function middleware() { + return next({ + headers: { + 'Referrer-Policy': 'origin-when-cross-origin', + 'X-Frame-Options': 'DENY', + 'X-Content-Type-Options': 'nosniff', + 'X-DNS-Prefetch-Control': 'on', + 'Strict-Transport-Security': + 'max-age=31536000; includeSubDomains; preload', + }, + }); +} \ No newline at end of file diff --git a/apps/admin/next-env.d.ts b/apps/admin/next-env.d.ts deleted file mode 100644 index 40c3d68096c..00000000000 --- a/apps/admin/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/apps/admin/next.config.js b/apps/admin/next.config.js deleted file mode 100644 index c848e0b9255..00000000000 --- a/apps/admin/next.config.js +++ /dev/null @@ -1,29 +0,0 @@ -/** @type {import('next').NextConfig} */ - -const nextConfig = { - trailingSlash: true, - reactStrictMode: false, - swcMinify: true, - output: "standalone", - images: { - unoptimized: true, - }, - basePath: process.env.NEXT_PUBLIC_ADMIN_BASE_PATH || "", - experimental: { - optimizePackageImports: [ - "@plane/constants", - "@plane/editor", - "@plane/hooks", - "@plane/i18n", - "@plane/logger", - "@plane/propel", - "@plane/services", - "@plane/shared-state", - "@plane/types", - "@plane/ui", - "@plane/utils", - ], - }, -}; - -module.exports = nextConfig; diff --git a/apps/admin/nginx/nginx.conf b/apps/admin/nginx/nginx.conf new file mode 100644 index 00000000000..388642c8030 --- /dev/null +++ b/apps/admin/nginx/nginx.conf @@ -0,0 +1,29 @@ +worker_processes 4; + +events { + worker_connections 1024; +} + +http { + include mime.types; + + default_type application/octet-stream; + + set_real_ip_from 0.0.0.0/0; + real_ip_recursive on; + real_ip_header X-Forward-For; + limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; + + access_log /dev/stdout; + error_log /dev/stderr; + + server { + listen 3000; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + } +} \ No newline at end of file diff --git a/apps/admin/package.json b/apps/admin/package.json index 02ff3640393..84c4aabe384 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -4,14 +4,15 @@ "version": "1.0.0", "license": "AGPL-3.0", "private": true, + "type": "module", "scripts": { - "dev": "next dev --port 3001", - "build": "next build", - "preview": "next build && next start", - "start": "next start", - "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", + "dev": "cross-env NODE_ENV=development PORT=3001 node server.mjs", + "build": "react-router build", + "preview": "react-router build && cross-env NODE_ENV=production PORT=3001 node server.mjs", + "start": "serve -s build/client -l 3001", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist && rm -rf build", "check:lint": "eslint . --max-warnings 19", - "check:types": "tsc --noEmit", + "check:types": "react-router typegen && tsc --noEmit", "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", "fix:lint": "eslint . --fix", "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"" @@ -25,30 +26,56 @@ "@plane/types": "workspace:*", "@plane/ui": "workspace:*", "@plane/utils": "workspace:*", - "autoprefixer": "10.4.14", + "@react-router/express": "^7.9.3", + "@react-router/node": "^7.9.3", + "@tanstack/react-virtual": "^3.13.12", + "@tanstack/virtual-core": "^3.13.12", + "@vercel/edge": "1.2.2", "axios": "catalog:", + "client-only": "^0.0.1", + "compression": "^1.8.1", + "cookie": "^0.6.0", + "cross-env": "^7.0.3", + "debug": "4.4.3", + "dotenv": "^16.4.5", + "express": "^5.1.0", + "http-proxy-middleware": "^3.0.5", + "isbot": "^5.1.31", "lodash-es": "catalog:", "lucide-react": "catalog:", "mobx": "catalog:", "mobx-react": "catalog:", - "next": "catalog:", + "mobx-react-lite": "^4.0.7", + "morgan": "^1.10.1", + "ms": "^2.1.3", "next-themes": "^0.2.1", - "postcss": "^8.4.49", "react": "catalog:", "react-dom": "catalog:", "react-hook-form": "7.51.5", - "sharp": "catalog:", + "react-is": "^18.2.0", + "react-router": "^7.9.1", + "react-router-dom": "^7.9.1", + "scheduler": "^0.23.2", + "serve": "14.2.5", + "set-cookie-parser": "^2.6.0", "swr": "catalog:", + "use-sync-external-store": "^1.2.0", "uuid": "catalog:" }, "devDependencies": { "@plane/eslint-config": "workspace:*", "@plane/tailwind-config": "workspace:*", "@plane/typescript-config": "workspace:*", + "@react-router/dev": "^7.9.1", + "@types/compression": "^1.8.1", + "@types/express": "4.17.23", "@types/lodash-es": "catalog:", + "@types/morgan": "^1.9.10", "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vite": "7.1.7", + "vite-tsconfig-paths": "^5.1.4" } } diff --git a/apps/admin/postcss.config.js b/apps/admin/postcss.config.cjs similarity index 100% rename from apps/admin/postcss.config.js rename to apps/admin/postcss.config.cjs diff --git a/apps/admin/public/.well-known/appspecific/com.chrome.devtools.json b/apps/admin/public/.well-known/appspecific/com.chrome.devtools.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/apps/admin/public/.well-known/appspecific/com.chrome.devtools.json @@ -0,0 +1 @@ +{} diff --git a/apps/admin/public/auth/background-pattern-dark.svg b/apps/admin/public/auth/background-pattern-dark.svg deleted file mode 100644 index c258cbabf34..00000000000 --- a/apps/admin/public/auth/background-pattern-dark.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/admin/public/auth/background-pattern.svg b/apps/admin/public/auth/background-pattern.svg deleted file mode 100644 index 5fcbeec278a..00000000000 --- a/apps/admin/public/auth/background-pattern.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/admin/public/favicon/site.webmanifest b/apps/admin/public/favicon/site.webmanifest deleted file mode 100644 index 1d410578139..00000000000 --- a/apps/admin/public/favicon/site.webmanifest +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { "src": "/favicon/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, - { "src": "/favicon/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/apps/admin/public/instance/plane-takeoff.png b/apps/admin/public/instance/plane-takeoff.png deleted file mode 100644 index 417ff82999890f25a8d61da4e174375b58f457a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47818 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

;B*sK>V_Ek<3UIhOnk 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 + vite.createServer({ + server: { middlewareMode: true }, + appType: "custom", + }) + ); + + app.use(vite.middlewares); + + app.use(async (req, res, next) => { + try { + const source = await vite.ssrLoadModule("./server/app.ts"); + return source.app(req, res, next); + } catch (error) { + if (error instanceof Error) { + vite.ssrFixStacktrace(error); + } + + next(error); + } + }); + } else { + console.log("Starting production server"); + + app.use("/assets", express.static("build/client/assets", { immutable: true, maxAge: "1y" })); + app.use(morgan("tiny")); + app.use(express.static("build/client", { maxAge: "1h" })); + app.use(await import(BUILD_PATH).then((mod) => mod.app)); + } + + app.listen(PORT, () => { + const origin = `${parsedBaseUrl.protocol}//${parsedBaseUrl.hostname}:${PORT}`; + console.log(`Server is running on ${origin}`); + }); +} + +start().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/apps/admin/server/app.ts b/apps/admin/server/app.ts new file mode 100644 index 00000000000..70a61c38523 --- /dev/null +++ b/apps/admin/server/app.ts @@ -0,0 +1,46 @@ +import "react-router"; +import { createRequestHandler } from "@react-router/express"; +import express from "express"; +import type { Express } from "express"; +import { createProxyMiddleware } from "http-proxy-middleware"; + +const NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL + ? process.env.NEXT_PUBLIC_API_BASE_URL.replace(/\/$/, "") + : "http://127.0.0.1:8000"; +const NEXT_PUBLIC_API_BASE_PATH = process.env.NEXT_PUBLIC_API_BASE_PATH + ? process.env.NEXT_PUBLIC_API_BASE_PATH.replace(/\/+$/, "") + : "/api"; +const NORMALIZED_API_BASE_PATH = NEXT_PUBLIC_API_BASE_PATH.startsWith("/") + ? NEXT_PUBLIC_API_BASE_PATH + : `/${NEXT_PUBLIC_API_BASE_PATH}`; +const NEXT_PUBLIC_ADMIN_BASE_PATH = process.env.NEXT_PUBLIC_ADMIN_BASE_PATH + ? process.env.NEXT_PUBLIC_ADMIN_BASE_PATH.replace(/\/$/, "") + : "/"; + +export const app: Express = express(); + +// Ensure proxy-aware hostname/URL handling (e.g., X-Forwarded-Host/Proto) +// so generated URLs/redirects reflect the public host when behind Nginx. +// See related fix in Remix Express adapter. +app.set("trust proxy", true); + +app.use( + "/api", + createProxyMiddleware({ + target: NEXT_PUBLIC_API_BASE_URL, + changeOrigin: true, + secure: false, + pathRewrite: (path: string) => + NORMALIZED_API_BASE_PATH === "/api" ? path : path.replace(/^\/api/, NORMALIZED_API_BASE_PATH), + }) +); + +const router = express.Router(); + +router.use( + createRequestHandler({ + build: () => import("virtual:react-router/server-build"), + }) +); + +app.use(NEXT_PUBLIC_ADMIN_BASE_PATH, router); diff --git a/apps/admin/styles/globals.css b/apps/admin/styles/globals.css index 86a0b851833..11954a26be3 100644 --- a/apps/admin/styles/globals.css +++ b/apps/admin/styles/globals.css @@ -1,4 +1,4 @@ -@import "@plane/propel/styles/fonts"; +@import "@plane/propel/styles/fonts.css"; @tailwind base; @tailwind components; diff --git a/apps/admin/tailwind.config.js b/apps/admin/tailwind.config.cjs similarity index 100% rename from apps/admin/tailwind.config.js rename to apps/admin/tailwind.config.cjs diff --git a/apps/admin/tsconfig.json b/apps/admin/tsconfig.json index d85abf2cc9a..7dbd2eeb924 100644 --- a/apps/admin/tsconfig.json +++ b/apps/admin/tsconfig.json @@ -1,21 +1,17 @@ { - "extends": "@plane/typescript-config/nextjs.json", + "extends": "@plane/typescript-config/react-router.json", "compilerOptions": { - "plugins": [ - { - "name": "next" - } - ], "baseUrl": ".", + "rootDirs": [".", "./.react-router/types"], + "types": ["node", "vite/client"], "paths": { "@/app/*": ["app/*"], "@/*": ["core/*"], - "@/public/*": ["public/*"], "@/plane-admin/*": ["ce/*"], "@/styles/*": ["styles/*"] }, "strictNullChecks": true }, - "include": ["next-env.d.ts", "next.config.js", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": ["**/*", "**/.server/**/*", "**/.client/**/*", ".react-router/types/**/*"], "exclude": ["node_modules"] } diff --git a/apps/admin/vite.config.ts b/apps/admin/vite.config.ts new file mode 100644 index 00000000000..b908e07f245 --- /dev/null +++ b/apps/admin/vite.config.ts @@ -0,0 +1,60 @@ +import path from "node:path"; +import { reactRouter } from "@react-router/dev/vite"; +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; + +const PUBLIC_ENV_KEYS = [ + "NEXT_PUBLIC_API_BASE_URL", + "NEXT_PUBLIC_API_BASE_PATH", + "NEXT_PUBLIC_ADMIN_BASE_URL", + "NEXT_PUBLIC_ADMIN_BASE_PATH", + "NEXT_PUBLIC_SPACE_BASE_URL", + "NEXT_PUBLIC_SPACE_BASE_PATH", + "NEXT_PUBLIC_LIVE_BASE_URL", + "NEXT_PUBLIC_LIVE_BASE_PATH", + "NEXT_PUBLIC_WEB_BASE_URL", + "NEXT_PUBLIC_WEB_BASE_PATH", + "NEXT_PUBLIC_WEBSITE_URL", + "NEXT_PUBLIC_SUPPORT_EMAIL", +]; + +const publicEnv = PUBLIC_ENV_KEYS.reduce>((acc, key) => { + acc[key] = process.env[key] ?? ""; + return acc; +}, {}); + +export default defineConfig(({ isSsrBuild }) => { + // Only produce an SSR bundle when explicitly enabled. + // For static deployments (default), we skip the server build entirely. + const enableSsrBuild = process.env.ADMIN_ENABLE_SSR_BUILD === "true"; + + return { + define: { + "process.env": JSON.stringify(publicEnv), + }, + build: { + assetsInlineLimit: 0, + rollupOptions: + isSsrBuild && enableSsrBuild + ? { + input: path.resolve(__dirname, "server/app.ts"), + } + : undefined, + }, + plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })], + resolve: { + alias: { + // Next.js compatibility shims used within admin + "next/image": path.resolve(__dirname, "app/compat/next/image.tsx"), + "next/link": path.resolve(__dirname, "app/compat/next/link.tsx"), + "next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"), + }, + // When building inside Docker with pnpm workspaces, symlinks may be used + // for workspace packages. Preserve them so Vite can resolve their exports + // correctly instead of attempting to follow to source paths. + preserveSymlinks: true, + dedupe: ["react", "react-dom"], + }, + // No SSR-specific overrides needed; alias resolves to ESM build + }; +}); diff --git a/apps/api/plane/license/api/views/admin.py b/apps/api/plane/license/api/views/admin.py index 72c97611634..5b70beab9d1 100644 --- a/apps/api/plane/license/api/views/admin.py +++ b/apps/api/plane/license/api/views/admin.py @@ -134,7 +134,8 @@ def post(self, request): }, ) url = urljoin( - base_host(request=request, is_admin=True), + base_host(request=request, is_admin=True, ), + "?" + urlencode(exc.get_error_dict()), ) return HttpResponseRedirect(url) @@ -228,7 +229,7 @@ def post(self, request): # get tokens for user user_login(request=request, user=user, is_admin=True) - url = urljoin(base_host(request=request, is_admin=True), "general") + url = urljoin(base_host(request=request, is_admin=True), "general/") return HttpResponseRedirect(url) @@ -347,7 +348,7 @@ def post(self, request): # get tokens for user user_login(request=request, user=user, is_admin=True) - url = urljoin(base_host(request=request, is_admin=True), "general") + url = urljoin(base_host(request=request, is_admin=True), "general/") return HttpResponseRedirect(url) diff --git a/apps/live/package.json b/apps/live/package.json index ca065a87928..61239f6292a 100644 --- a/apps/live/package.json +++ b/apps/live/package.json @@ -53,7 +53,7 @@ "@plane/typescript-config": "workspace:*", "@types/compression": "1.8.1", "@types/cors": "^2.8.17", - "@types/express": "^4.17.23", + "@types/express": "4.17.23", "@types/express-ws": "^3.0.5", "@types/node": "catalog:", "@types/ws": "^8.18.1", diff --git a/apps/web/package.json b/apps/web/package.json index cdd2dc99f95..5543d9fffae 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -42,7 +42,6 @@ "dotenv": "^16.0.3", "emoji-picker-react": "^4.5.16", "export-to-csv": "^1.4.0", - "isomorphic-dompurify": "^2.12.0", "lodash-es": "catalog:", "lucide-react": "catalog:", "mobx": "catalog:", diff --git a/packages/decorators/package.json b/packages/decorators/package.json index 00a0aac77d9..a3fcc3fa6d3 100644 --- a/packages/decorators/package.json +++ b/packages/decorators/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@plane/eslint-config": "workspace:*", "@plane/typescript-config": "workspace:*", - "@types/express": "^4.17.21", + "@types/express": "4.17.23", "@types/node": "catalog:", "@types/ws": "^8.5.10", "reflect-metadata": "^0.2.2", diff --git a/packages/editor/package.json b/packages/editor/package.json index 2bf6fbe52bf..ef377a0e0b2 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -18,6 +18,7 @@ "require": "./dist/lib.cjs" }, "./package.json": "./package.json", + "./styles.css": "./dist/styles/index.css", "./styles": "./dist/styles/index.css" }, "scripts": { diff --git a/packages/editor/tsdown.config.ts b/packages/editor/tsdown.config.ts index 153eb4fa421..8118f1b08fd 100644 --- a/packages/editor/tsdown.config.ts +++ b/packages/editor/tsdown.config.ts @@ -6,8 +6,9 @@ export default defineConfig({ format: ["esm", "cjs"], copy: ["src/styles"], exports: { - customExports: (out) => ({ - ...out, + customExports: (exports) => ({ + ...exports, + "./styles.css": "./dist/styles/index.css", "./styles": "./dist/styles/index.css", }), }, diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index fa15fe57a1c..593622dbde4 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -9,15 +9,15 @@ "server.js" ], "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.6.0", - "@typescript-eslint/parser": "^8.6.0", + "@typescript-eslint/eslint-plugin": "^8.45.0", + "@typescript-eslint/parser": "^8.45.0", "eslint": "8.57.1", "eslint-config-next": "^14.1.0", - "eslint-config-prettier": "^9.1.0", - "eslint-config-turbo": "^1.12.4", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^5.2.0", + "eslint-config-prettier": "^10.1.8", + "eslint-config-turbo": "^2.5.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^6.1.1", "typescript": "catalog:" } } diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 06ff288a23d..91fc19c485e 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -24,16 +24,16 @@ "dependencies": { "@plane/utils": "workspace:*", "intl-messageformat": "^10.7.11", + "lodash-es": "catalog:", "mobx": "catalog:", "mobx-react": "catalog:", - "lodash-es": "catalog:", "react": "catalog:" }, "devDependencies": { "@plane/eslint-config": "workspace:*", "@plane/typescript-config": "workspace:*", - "@types/node": "catalog:", "@types/lodash-es": "catalog:", + "@types/node": "catalog:", "@types/react": "catalog:", "tsdown": "catalog:", "typescript": "catalog:" diff --git a/packages/logger/package.json b/packages/logger/package.json index bf75bd80fff..2ebe0aac3b8 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -28,7 +28,7 @@ "devDependencies": { "@plane/eslint-config": "workspace:*", "@plane/typescript-config": "workspace:*", - "@types/express": "^4.17.21", + "@types/express": "4.17.23", "@types/node": "catalog:", "tsdown": "catalog:", "typescript": "catalog:" diff --git a/packages/propel/package.json b/packages/propel/package.json index cd00ab38ea7..e5350f7e780 100644 --- a/packages/propel/package.json +++ b/packages/propel/package.json @@ -161,11 +161,19 @@ "require": "./dist/utils/index.js" }, "./package.json": "./package.json", + "./styles/fonts.css": "./dist/styles/fonts/index.css", "./styles/fonts": "./dist/styles/fonts/index.css", + "./styles/react-day-picker.css": "./dist/styles/react-day-picker.css", "./styles/react-day-picker": "./dist/styles/react-day-picker.css" }, "dependencies": { + "@babel/runtime": "7.26.10", "@base-ui-components/react": "1.0.0-beta.3", + "@base-ui-components/utils": "^0.1.0", + "@floating-ui/core": "^1.7.3", + "@floating-ui/dom": "^1.7.3", + "@floating-ui/react-dom": "^2.1.5", + "@floating-ui/utils": "^0.2.10", "@plane/constants": "workspace:*", "@plane/hooks": "workspace:*", "@plane/types": "workspace:*", @@ -173,12 +181,15 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", + "fontfaceobserver": "^2.3.0", "frimousse": "^0.3.0", "lucide-react": "catalog:", + "object-assign": "^4.1.1", "react": "catalog:", "react-day-picker": "9.5.0", "react-dom": "catalog:", "recharts": "^2.15.1", + "tabbable": "^6.2.0", "tailwind-merge": "^3.3.1", "use-font-face-observer": "^1.3.0" }, diff --git a/packages/propel/tsdown.config.ts b/packages/propel/tsdown.config.ts index 677fea529aa..45c17ac6db9 100644 --- a/packages/propel/tsdown.config.ts +++ b/packages/propel/tsdown.config.ts @@ -37,9 +37,11 @@ export default defineConfig({ outDir: "dist", format: ["esm", "cjs"], exports: { - customExports: (out) => ({ - ...out, + customExports: (exports) => ({ + ...exports, + "./styles/fonts.css": "./dist/styles/fonts/index.css", "./styles/fonts": "./dist/styles/fonts/index.css", + "./styles/react-day-picker.css": "./dist/styles/react-day-picker.css", "./styles/react-day-picker": "./dist/styles/react-day-picker.css", }), }, diff --git a/packages/services/package.json b/packages/services/package.json index eea823d9c40..f819947e896 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -3,10 +3,11 @@ "version": "1.0.0", "license": "AGPL-3.0", "private": true, + "type": "module", "exports": { ".": { - "import": "./dist/index.mjs", - "require": "./dist/index.js" + "import": "./dist/index.js", + "require": "./dist/index.cjs" }, "./package.json": "./package.json" }, @@ -21,10 +22,17 @@ "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { + "@borewit/text-codec": "0.1.1", "@plane/constants": "workspace:*", "@plane/types": "workspace:*", + "@tokenizer/inflate": "0.2.7", "axios": "catalog:", - "file-type": "^21.0.0" + "fflate": "0.8.2", + "file-type": "^21.0.0", + "ieee754": "1.2.1", + "strtok3": "10.3.4", + "token-types": "6.1.1", + "uint8array-extras": "1.5.0" }, "devDependencies": { "@plane/eslint-config": "workspace:*", @@ -32,7 +40,7 @@ "tsdown": "catalog:", "typescript": "catalog:" }, - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts" + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.cts" } diff --git a/packages/shared-state/package.json b/packages/shared-state/package.json index 019f4be2cca..e86cb96143a 100644 --- a/packages/shared-state/package.json +++ b/packages/shared-state/package.json @@ -27,8 +27,8 @@ "devDependencies": { "@plane/eslint-config": "workspace:*", "@plane/typescript-config": "workspace:*", - "@types/node": "catalog:", "@types/lodash-es": "catalog:", + "@types/node": "catalog:", "typescript": "catalog:" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index b65a81bd0a1..b40d6e19607 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -36,25 +36,74 @@ "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "catalog:", "@atlaskit/pragmatic-drag-and-drop-hitbox": "catalog:", + "@babel/runtime": "7.26.10", + "@blueprintjs/colors": "^4.2.1", "@blueprintjs/core": "^4.16.3", + "@blueprintjs/icons": "^4.16.0", "@blueprintjs/popover2": "^1.13.3", "@headlessui/react": "^1.7.3", + "@icons/material": "^0.2.4", + "@juggle/resize-observer": "^3.4.0", "@plane/constants": "workspace:*", "@plane/hooks": "workspace:*", + "@plane/propel": "workspace:*", "@plane/types": "workspace:*", "@plane/utils": "workspace:*", - "@plane/propel": "workspace:*", "@popperjs/core": "^2.11.8", + "@radix-ui/number": "^1.1.1", + "@radix-ui/primitive": "^1.1.3", + "@radix-ui/react-compose-refs": "^1.1.2", + "@radix-ui/react-context": "^1.1.2", + "@radix-ui/react-direction": "^1.1.1", + "@radix-ui/react-presence": "^1.1.1", + "@radix-ui/react-primitive": "^2.1.3", "@radix-ui/react-scroll-area": "^1.2.3", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-use-callback-ref": "^1.1.1", + "@radix-ui/react-use-layout-effect": "^1.1.1", + "@tanstack/react-virtual": "^3.13.12", + "bind-event-listener": "^3.0.0", + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "change-case": "^4.1.2", + "classnames": "^2.5.1", "clsx": "^2.0.0", + "constant-case": "^3.0.4", + "dom4": "^2.1.6", + "dom-helpers": "^5.2.1", + "dot-case": "^3.0.4", "emoji-picker-react": "^4.5.16", + "flairup": "1.0.0", + "fontfaceobserver": "^2.3.0", + "header-case": "^2.0.4", + "lodash": "^4.17.21", "lodash-es": "catalog:", + "lower-case": "^2.0.2", "lucide-react": "catalog:", + "material-colors": "^1.2.6", + "no-case": "^3.0.4", + "object-assign": "^4.1.1", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "prop-types": "^15.8.1", + "raf-schd": "^4.0.3", "react-color": "^2.19.3", "react-day-picker": "9.5.0", + "react-fast-compare": "^3.2.2", "react-popper": "^2.3.0", + "react-transition-group": "^4.4.5", + "reactcss": "^1.2.3", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "sonner": "^1.4.41", "tailwind-merge": "^2.0.0", - "use-font-face-observer": "^1.2.2" + "tinycolor2": "^1.6.0", + "tslib": "^2.7.0", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2", + "use-font-face-observer": "^1.2.2", + "warning": "^4.0.3" }, "devDependencies": { "@chromatic-com/storybook": "^1.4.0", diff --git a/packages/utils/package.json b/packages/utils/package.json index 9f8d3288653..0531a5b9cc4 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -27,7 +27,7 @@ "@plane/types": "workspace:*", "clsx": "^2.1.1", "date-fns": "^4.1.0", - "isomorphic-dompurify": "^2.16.0", + "dompurify": "^3.2.7", "lodash-es": "catalog:", "lucide-react": "catalog:", "react": "catalog:", diff --git a/packages/utils/src/string.ts b/packages/utils/src/string.ts index 7dfd28daa8a..cf5eb3df6ce 100644 --- a/packages/utils/src/string.ts +++ b/packages/utils/src/string.ts @@ -1,4 +1,4 @@ -import DOMPurify from "isomorphic-dompurify"; +import DOMPurify from "dompurify"; import type { Content, JSONContent } from "@plane/types"; /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68f23e209df..993e81501a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -131,12 +131,51 @@ importers: '@plane/utils': specifier: workspace:* version: link:../../packages/utils - autoprefixer: - specifier: 10.4.14 - version: 10.4.14(postcss@8.5.6) + '@react-router/express': + specifier: ^7.9.3 + version: 7.9.3(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) + '@react-router/node': + specifier: ^7.9.3 + version: 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) + '@tanstack/react-virtual': + specifier: ^3.13.12 + version: 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/virtual-core': + specifier: ^3.13.12 + version: 3.13.12 + '@vercel/edge': + specifier: 1.2.2 + version: 1.2.2 axios: specifier: 'catalog:' - version: 1.12.0 + version: 1.12.0(debug@4.4.3) + client-only: + specifier: ^0.0.1 + version: 0.0.1 + compression: + specifier: ^1.8.1 + version: 1.8.1 + cookie: + specifier: ^0.6.0 + version: 0.6.0 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + debug: + specifier: 4.4.3 + version: 4.4.3 + dotenv: + specifier: ^16.4.5 + version: 16.6.1 + express: + specifier: ^5.1.0 + version: 5.1.0 + http-proxy-middleware: + specifier: ^3.0.5 + version: 3.0.5 + isbot: + specifier: ^5.1.31 + version: 5.1.31 lodash-es: specifier: 'catalog:' version: 4.17.21 @@ -149,15 +188,18 @@ importers: mobx-react: specifier: 'catalog:' version: 9.1.1(mobx@6.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next: - specifier: 'catalog:' - version: 14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + mobx-react-lite: + specifier: ^4.0.7 + version: 4.1.0(mobx@6.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + morgan: + specifier: ^1.10.1 + version: 1.10.1 + ms: + specifier: ^2.1.3 + version: 2.1.3 next-themes: specifier: ^0.2.1 version: 0.2.1(next@14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - postcss: - specifier: ^8.4.49 - version: 8.5.6 react: specifier: 'catalog:' version: 18.3.1 @@ -167,12 +209,30 @@ importers: react-hook-form: specifier: 7.51.5 version: 7.51.5(react@18.3.1) - sharp: - specifier: 0.33.5 - version: 0.33.5 + react-is: + specifier: ^18.2.0 + version: 18.3.1 + react-router: + specifier: ^7.9.1 + version: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: + specifier: ^7.9.1 + version: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + scheduler: + specifier: ^0.23.2 + version: 0.23.2 + serve: + specifier: 14.2.5 + version: 14.2.5 + set-cookie-parser: + specifier: ^2.6.0 + version: 2.7.1 swr: specifier: 'catalog:' version: 2.2.4(react@18.3.1) + use-sync-external-store: + specifier: ^1.2.0 + version: 1.5.0(react@18.3.1) uuid: specifier: 'catalog:' version: 13.0.0 @@ -186,9 +246,21 @@ importers: '@plane/typescript-config': specifier: workspace:* version: link:../../packages/typescript-config + '@react-router/dev': + specifier: ^7.9.1 + version: 7.9.4(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1) + '@types/compression': + specifier: ^1.8.1 + version: 1.8.1 + '@types/express': + specifier: 4.17.23 + version: 4.17.23 '@types/lodash-es': specifier: 'catalog:' version: 4.17.12 + '@types/morgan': + specifier: ^1.9.10 + version: 1.9.10 '@types/node': specifier: 'catalog:' version: 22.12.0 @@ -201,6 +273,12 @@ importers: typescript: specifier: 5.8.3 version: 5.8.3 + vite: + specifier: 7.1.7 + version: 7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.8.3)(vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) apps/live: dependencies: @@ -248,7 +326,7 @@ importers: version: 3.6.2(@tiptap/core@3.6.2(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)(happy-dom@20.0.2) axios: specifier: 'catalog:' - version: 1.12.0 + version: 1.12.0(debug@4.4.3) compression: specifier: 1.8.1 version: 1.8.1 @@ -363,7 +441,7 @@ importers: version: 2.11.8 axios: specifier: 'catalog:' - version: 1.12.0 + version: 1.12.0(debug@4.4.3) clsx: specifier: ^2.0.0 version: 2.1.1 @@ -372,7 +450,7 @@ importers: version: 4.1.0 dompurify: specifier: ^3.0.11 - version: 3.2.6 + version: 3.2.7 dotenv: specifier: ^16.3.1 version: 16.6.1 @@ -396,7 +474,7 @@ importers: version: 6.0.8(mobx@6.12.0) next: specifier: 'catalog:' - version: 14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.2.1 version: 0.2.1(next@14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -520,7 +598,7 @@ importers: version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) axios: specifier: 'catalog:' - version: 1.12.0 + version: 1.12.0(debug@4.4.3) clsx: specifier: ^2.0.0 version: 2.1.1 @@ -542,9 +620,6 @@ importers: export-to-csv: specifier: ^1.4.0 version: 1.4.0 - isomorphic-dompurify: - specifier: ^2.12.0 - version: 2.25.0 lodash-es: specifier: 'catalog:' version: 4.17.21 @@ -562,7 +637,7 @@ importers: version: 6.0.8(mobx@6.12.0) next: specifier: 'catalog:' - version: 14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.2.1 version: 0.2.1(next@14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -864,11 +939,11 @@ importers: packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': - specifier: ^8.6.0 - version: 8.44.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + specifier: ^8.45.0 + version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/parser': - specifier: ^8.6.0 - version: 8.44.0(eslint@8.57.1)(typescript@5.8.3) + specifier: ^8.45.0 + version: 8.45.0(eslint@8.57.1)(typescript@5.8.3) eslint: specifier: 8.57.1 version: 8.57.1 @@ -876,20 +951,20 @@ importers: specifier: ^14.1.0 version: 14.2.32(eslint@8.57.1)(typescript@5.8.3) eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@8.57.1) eslint-config-turbo: - specifier: ^1.12.4 - version: 1.13.4(eslint@8.57.1) + specifier: ^2.5.8 + version: 2.5.8(eslint@8.57.1)(turbo@2.5.8) eslint-plugin-import: - specifier: ^2.29.1 - version: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + specifier: ^2.32.0 + version: 2.32.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) eslint-plugin-react: - specifier: ^7.33.2 + specifier: ^7.37.5 version: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.1) + specifier: ^6.1.1 + version: 6.1.1(eslint@8.57.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -992,9 +1067,27 @@ importers: packages/propel: dependencies: + '@babel/runtime': + specifier: 7.26.10 + version: 7.26.10 '@base-ui-components/react': specifier: 1.0.0-beta.3 version: 1.0.0-beta.3(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@base-ui-components/utils': + specifier: ^0.1.0 + version: 0.1.1(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/core': + specifier: ^1.7.3 + version: 1.7.3 + '@floating-ui/dom': + specifier: ^1.7.3 + version: 1.7.4 + '@floating-ui/react-dom': + specifier: ^2.1.5 + version: 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': + specifier: ^0.2.10 + version: 0.2.10 '@plane/constants': specifier: workspace:* version: link:../constants @@ -1016,12 +1109,18 @@ importers: cmdk: specifier: ^1.1.1 version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fontfaceobserver: + specifier: ^2.3.0 + version: 2.3.0 frimousse: specifier: ^0.3.0 version: 0.3.0(react@18.3.1)(typescript@5.8.3) lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) + object-assign: + specifier: ^4.1.1 + version: 4.1.1 react: specifier: 'catalog:' version: 18.3.1 @@ -1034,6 +1133,9 @@ importers: recharts: specifier: ^2.15.1 version: 2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tabbable: + specifier: ^6.2.0 + version: 6.2.0 tailwind-merge: specifier: ^3.3.1 version: 3.3.1 @@ -1080,18 +1182,39 @@ importers: packages/services: dependencies: + '@borewit/text-codec': + specifier: 0.1.1 + version: 0.1.1 '@plane/constants': specifier: workspace:* version: link:../constants '@plane/types': specifier: workspace:* version: link:../types + '@tokenizer/inflate': + specifier: 0.2.7 + version: 0.2.7 axios: specifier: 'catalog:' - version: 1.12.0 + version: 1.12.0(debug@4.4.3) + fflate: + specifier: 0.8.2 + version: 0.8.2 file-type: specifier: ^21.0.0 version: 21.0.0 + ieee754: + specifier: 1.2.1 + version: 1.2.1 + strtok3: + specifier: 10.3.4 + version: 10.3.4 + token-types: + specifier: 6.1.1 + version: 6.1.1 + uint8array-extras: + specifier: 1.5.0 + version: 1.5.0 devDependencies: '@plane/eslint-config': specifier: workspace:* @@ -1208,15 +1331,30 @@ importers: '@atlaskit/pragmatic-drag-and-drop-hitbox': specifier: 'catalog:' version: 1.1.0 + '@babel/runtime': + specifier: 7.26.10 + version: 7.26.10 + '@blueprintjs/colors': + specifier: ^4.2.1 + version: 4.2.1 '@blueprintjs/core': specifier: ^4.16.3 version: 4.20.2(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@blueprintjs/icons': + specifier: ^4.16.0 + version: 4.16.0 '@blueprintjs/popover2': specifier: ^1.13.3 version: 1.14.11(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@headlessui/react': specifier: ^1.7.3 version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@icons/material': + specifier: ^0.2.4 + version: 0.2.4(react@18.3.1) + '@juggle/resize-observer': + specifier: ^3.4.0 + version: 3.4.0 '@plane/constants': specifier: workspace:* version: link:../constants @@ -1235,21 +1373,120 @@ importers: '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 + '@radix-ui/number': + specifier: ^1.1.1 + version: 1.1.1 + '@radix-ui/primitive': + specifier: ^1.1.3 + version: 1.1.3 + '@radix-ui/react-compose-refs': + specifier: ^1.1.2 + version: 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': + specifier: ^1.1.2 + version: 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': + specifier: ^1.1.1 + version: 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-presence': + specifier: ^1.1.1 + version: 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': + specifier: ^2.1.3 + version: 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.3 version: 1.2.10(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.3(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-callback-ref': + specifier: ^1.1.1 + version: 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': + specifier: ^1.1.1 + version: 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@tanstack/react-virtual': + specifier: ^3.13.12 + version: 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + bind-event-listener: + specifier: ^3.0.0 + version: 3.0.0 + camel-case: + specifier: ^4.1.2 + version: 4.1.2 + capital-case: + specifier: ^1.0.4 + version: 1.0.4 + change-case: + specifier: ^4.1.2 + version: 4.1.2 + classnames: + specifier: ^2.5.1 + version: 2.5.1 clsx: specifier: ^2.0.0 version: 2.1.1 + constant-case: + specifier: ^3.0.4 + version: 3.0.4 + dom-helpers: + specifier: ^5.2.1 + version: 5.2.1 + dom4: + specifier: ^2.1.6 + version: 2.1.6 + dot-case: + specifier: ^3.0.4 + version: 3.0.4 emoji-picker-react: specifier: ^4.5.16 version: 4.12.2(react@18.3.1) + flairup: + specifier: 1.0.0 + version: 1.0.0 + fontfaceobserver: + specifier: ^2.3.0 + version: 2.3.0 + header-case: + specifier: ^2.0.4 + version: 2.0.4 + lodash: + specifier: ^4.17.21 + version: 4.17.21 lodash-es: specifier: 'catalog:' version: 4.17.21 + lower-case: + specifier: ^2.0.2 + version: 2.0.2 lucide-react: specifier: 'catalog:' version: 0.469.0(react@18.3.1) + material-colors: + specifier: ^1.2.6 + version: 1.2.6 + no-case: + specifier: ^3.0.4 + version: 3.0.4 + object-assign: + specifier: ^4.1.1 + version: 4.1.1 + param-case: + specifier: ^3.0.4 + version: 3.0.4 + pascal-case: + specifier: ^3.1.2 + version: 3.1.2 + path-case: + specifier: ^3.0.4 + version: 3.0.4 + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + raf-schd: + specifier: ^4.0.3 + version: 4.0.3 react: specifier: 'catalog:' version: 18.3.1 @@ -1262,15 +1499,48 @@ importers: react-dom: specifier: 'catalog:' version: 18.3.1(react@18.3.1) + react-fast-compare: + specifier: ^3.2.2 + version: 3.2.2 react-popper: specifier: ^2.3.0 version: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-transition-group: + specifier: ^4.4.5 + version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + reactcss: + specifier: ^1.2.3 + version: 1.2.3(react@18.3.1) + sentence-case: + specifier: ^3.0.4 + version: 3.0.4 + snake-case: + specifier: ^3.0.4 + version: 3.0.4 + sonner: + specifier: ^1.4.41 + version: 1.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.0.0 version: 2.6.0 + tinycolor2: + specifier: ^1.6.0 + version: 1.6.0 + tslib: + specifier: ^2.7.0 + version: 2.8.1 + upper-case: + specifier: ^2.0.2 + version: 2.0.2 + upper-case-first: + specifier: ^2.0.2 + version: 2.0.2 use-font-face-observer: specifier: ^1.2.2 version: 1.3.0(react@18.3.1) + warning: + specifier: ^4.0.3 + version: 4.0.3 devDependencies: '@chromatic-com/storybook': specifier: ^1.4.0 @@ -1362,9 +1632,9 @@ importers: date-fns: specifier: ^4.1.0 version: 4.1.0 - isomorphic-dompurify: - specifier: ^2.16.0 - version: 2.25.0 + dompurify: + specifier: ^3.2.7 + version: 3.2.7 lodash-es: specifier: 'catalog:' version: 4.17.21 @@ -1412,9 +1682,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@asamuzakjp/css-color@3.2.0': - resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@atlaskit/pragmatic-drag-and-drop-auto-scroll@1.4.0': resolution: {integrity: sha512-5GoikoTSW13UX76F9TDeWB8x3jbbGlp/Y+3aRkHe1MOBMkrWkwNpJ42MIVhhX/6NSeaZiPumP0KbGJVs2tOWSQ==} @@ -1440,14 +1707,28 @@ packages: resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} @@ -1458,6 +1739,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -1479,6 +1778,36 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.0': + resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.27.1': + resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.26.10': resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} engines: {node: '>=6.9.0'} @@ -1570,34 +1899,6 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - '@csstools/color-helpers@5.0.2': - resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} - engines: {node: '>=18'} - - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-color-parser@3.0.10': - resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -2121,6 +2422,9 @@ packages: '@types/react': '>=16' react: '>=16' + '@mjackson/node-fetch-server@0.2.0': + resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} + '@mui/core-downloads-tracker@5.18.0': resolution: {integrity: sha512-jbhwoQ1AY200PSSOrNXmrFCaSDSJWP7qk6urkTmIirvRXDROkqe+QwcLlUiw/PrREwsIF/vm3/dAXvjlMHF0RA==} @@ -2201,8 +2505,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.0.5': - resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} + '@napi-rs/wasm-runtime@1.0.6': + resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} '@next/env@14.2.32': resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==} @@ -2292,6 +2596,18 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@npmcli/git@4.1.0': + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@4.0.1': + resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/promise-spawn@6.0.2': + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@opentelemetry/api-logs@0.203.0': resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} engines: {node: '>=8.0.0'} @@ -2492,12 +2808,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@oxc-project/runtime@0.82.3': - resolution: {integrity: sha512-LNh5GlJvYHAnMurO+EyA8jJwN1rki7l3PSHuosDh2I7h00T6/u9rCkUjg/SvPmT1CZzvhuW0y+gf7jcqUy/Usg==} - engines: {node: '>=6.9.0'} - - '@oxc-project/types@0.82.3': - resolution: {integrity: sha512-6nCUxBnGX0c6qfZW5MaF6/fmu5dHJDMiMPaioKHKs5mi5+8/FHQ7WGjgQIz1zxpmceMYfdIXkOaLYE+ejbuOtA==} + '@oxc-project/types@0.94.0': + resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -2766,81 +3078,149 @@ packages: '@react-pdf/types@2.9.0': resolution: {integrity: sha512-ckj80vZLlvl9oYrQ4tovEaqKWP3O06Eb1D48/jQWbdwz1Yh7Y9v1cEmwlP8ET+a1Whp8xfdM0xduMexkuPANCQ==} + '@react-router/dev@7.9.4': + resolution: {integrity: sha512-bLs6DjKMJExT7Y57EBx25hkeGGUla3pURxvOn15IN8Mmaw2+euDtBUX9+OFrAPsAzD1xIj6+2HNLXlFH/LB86Q==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^7.9.4 + '@vitejs/plugin-rsc': '*' + react-router: ^7.9.4 + typescript: 5.8.3 + vite: 7.1.7 + wrangler: ^3.28.2 || ^4.0.0 + peerDependenciesMeta: + '@react-router/serve': + optional: true + '@vitejs/plugin-rsc': + optional: true + typescript: + optional: true + wrangler: + optional: true + + '@react-router/express@7.9.3': + resolution: {integrity: sha512-XNVj/8AfecE1n61bXD41LqpXAixyWBpmBWkrzVA2iG+SrQOb+J6TjqZYEmZmoqJHuHmkOjt6/Iz1f81p93peGQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + express: ^4.17.1 || ^5 + react-router: 7.9.3 + typescript: 5.8.3 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/node@7.9.3': + resolution: {integrity: sha512-+OvWxPPUgouOshw85QlG0J6yFJM0GMCCpXqPj38IcveeFLlP7ppOAEkOi7RBFrDvg7vSUtCEBDnsbuDCvxUPJg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 7.9.3 + typescript: 5.8.3 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/node@7.9.4': + resolution: {integrity: sha512-sdeDNRaqAB71BR2hPlhcQbPbrXh8uGJUjLVc+NpRiPsQbv6B8UvIucN4IX9YGVJkw3UxVQBn2vPSwxACAck32Q==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 7.9.4 + typescript: 5.8.3 + peerDependenciesMeta: + typescript: + optional: true + '@remirror/core-constants@3.0.0': resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@rolldown/binding-android-arm64@1.0.0-beta.34': - resolution: {integrity: sha512-jf5GNe5jP3Sr1Tih0WKvg2bzvh5T/1TA0fn1u32xSH7ca/p5t+/QRr4VRFCV/na5vjwKEhwWrChsL2AWlY+eoA==} + '@remix-run/node-fetch-server@0.9.0': + resolution: {integrity: sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==} + + '@rolldown/binding-android-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.34': - resolution: {integrity: sha512-2F/TqH4QuJQ34tgWxqBjFL3XV1gMzeQgUO8YRtCPGBSP0GhxtoFzsp7KqmQEothsxztlv+KhhT9Dbg3HHwHViQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.34': - resolution: {integrity: sha512-E1QuFslgLWbHQ8Qli/AqUKdfg0pockQPwRxVbhNQ74SciZEZpzLaujkdmOLSccMlSXDfFCF8RPnMoRAzQ9JV8Q==} + '@rolldown/binding-darwin-x64@1.0.0-beta.42': + resolution: {integrity: sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.34': - resolution: {integrity: sha512-VS8VInNCwnkpI9WeQaWu3kVBq9ty6g7KrHdLxYMzeqz24+w9hg712TcWdqzdY6sn+24lUoMD9jTZrZ/qfVpk0g==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.42': + resolution: {integrity: sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': - resolution: {integrity: sha512-4St4emjcnULnxJYb/5ZDrH/kK/j6PcUgc3eAqH5STmTrcF+I9m/X2xvSF2a2bWv1DOQhxBewThu0KkwGHdgu5w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': + resolution: {integrity: sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': - resolution: {integrity: sha512-a737FTqhFUoWfnebS2SnQ2BS50p0JdukdkUBwy2J06j4hZ6Eej0zEB8vTfAqoCjn8BQKkXBy+3Sx0IRkgwz1gA==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': + resolution: {integrity: sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': - resolution: {integrity: sha512-NH+FeQWKyuw0k+PbXqpFWNfvD8RPvfJk766B/njdaWz4TmiEcSB0Nb6guNw1rBpM1FmltQYb3fFnTumtC6pRfA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': + resolution: {integrity: sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': - resolution: {integrity: sha512-Q3RSCivp8pNadYK8ke3hLnQk08BkpZX9BmMjgwae2FWzdxhxxUiUzd9By7kneUL0vRQ4uRnhD9VkFQ+Haeqdvw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': + resolution: {integrity: sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': - resolution: {integrity: sha512-wDd/HrNcVoBhWWBUW3evJHoo7GJE/RofssBy3Dsiip05YUBmokQVrYAyrboOY4dzs/lJ7HYeBtWQ9hj8wlyF0A==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': + resolution: {integrity: sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': - resolution: {integrity: sha512-dH3FTEV6KTNWpYSgjSXZzeX7vLty9oBYn6R3laEdhwZftQwq030LKL+5wyQdlbX5pnbh4h127hpv3Hl1+sj8dg==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': - resolution: {integrity: sha512-y5BUf+QtO0JsIDKA51FcGwvhJmv89BYjUl8AmN7jqD6k/eU55mH6RJYnxwCsODq5m7KSSTigVb6O7/GqB8wbPw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': + resolution: {integrity: sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': - resolution: {integrity: sha512-ga5hFhdTwpaNxEiuxZHWnD3ed0GBAzbgzS5tRHpe0ObptxM1a9Xrq6TVfNQirBLwb5Y7T/FJmJi3pmdLy95ljg==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': - resolution: {integrity: sha512-4/MBp9T9eRnZskxWr8EXD/xHvLhdjWaeX/qY9LPRG1JdCGV3DphkLTy5AWwIQ5jhAy2ZNJR5z2fYRlpWU0sIyQ==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': - resolution: {integrity: sha512-7O5iUBX6HSBKlQU4WykpUoEmb0wQmonb6ziKFr3dJTHud2kzDnWMqk344T0qm3uGv9Ddq6Re/94pInxo1G2d4w==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.34': - resolution: {integrity: sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==} + '@rolldown/pluginutils@1.0.0-beta.42': + resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} @@ -3751,6 +4131,9 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3790,6 +4173,9 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/morgan@1.9.10': + resolution: {integrity: sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -3886,63 +4272,63 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.44.0': - resolution: {integrity: sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==} + '@typescript-eslint/eslint-plugin@8.45.0': + resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.44.0 + '@typescript-eslint/parser': ^8.45.0 eslint: ^8.57.0 || ^9.0.0 typescript: 5.8.3 - '@typescript-eslint/parser@8.44.0': - resolution: {integrity: sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==} + '@typescript-eslint/parser@8.45.0': + resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: 5.8.3 - '@typescript-eslint/project-service@8.44.0': - resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==} + '@typescript-eslint/project-service@8.45.0': + resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: 5.8.3 - '@typescript-eslint/scope-manager@8.44.0': - resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==} + '@typescript-eslint/scope-manager@8.45.0': + resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.44.0': - resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==} + '@typescript-eslint/tsconfig-utils@8.45.0': + resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.44.0': - resolution: {integrity: sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==} + '@typescript-eslint/type-utils@8.45.0': + resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: 5.8.3 - '@typescript-eslint/types@8.44.0': - resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==} + '@typescript-eslint/types@8.45.0': + resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.44.0': - resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==} + '@typescript-eslint/typescript-estree@8.45.0': + resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: 5.8.3 - '@typescript-eslint/utils@8.44.0': - resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==} + '@typescript-eslint/utils@8.45.0': + resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: 5.8.3 - '@typescript-eslint/visitor-keys@8.44.0': - resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==} + '@typescript-eslint/visitor-keys@8.45.0': + resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -4043,6 +4429,9 @@ packages: cpu: [x64] os: [win32] + '@vercel/edge@1.2.2': + resolution: {integrity: sha512-1+y+f6rk0Yc9ss9bRDgz/gdpLimwoRteKHhrcgHvEpjbP1nyT3ByqEMWm2BTcpIO5UtDmIFXc8zdq4LR190PDA==} + '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -4135,6 +4524,9 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + abs-svg-path@0.1.1: resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} @@ -4142,6 +4534,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -4163,10 +4559,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -4188,9 +4580,15 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -4220,8 +4618,8 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansis@4.1.0: - resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} any-promise@1.3.0: @@ -4231,6 +4629,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -4318,13 +4719,6 @@ packages: resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} engines: {node: '>=4'} - autoprefixer@10.4.14: - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - autoprefixer@10.4.21: resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} @@ -4347,6 +4741,9 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + babel-dead-code-elimination@1.0.10: + resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -4368,6 +4765,10 @@ packages: resolution: {integrity: sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw==} hasBin: true + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + batch-processor@1.0.0: resolution: {integrity: sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==} @@ -4392,9 +4793,17 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -4423,6 +4832,10 @@ packages: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -4454,6 +4867,10 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + caniuse-lite@1.0.30001743: resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} @@ -4468,6 +4885,10 @@ packages: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4480,6 +4901,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@4.1.2: resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} @@ -4523,9 +4948,17 @@ packages: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -4622,10 +5055,18 @@ packages: constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -4639,10 +5080,22 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + core-js@3.45.1: resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==} @@ -4660,6 +5113,11 @@ packages: crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} @@ -4704,10 +5162,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@4.6.0: - resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} - engines: {node: '>=18'} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -4758,10 +5212,6 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -4817,6 +5267,14 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -4825,6 +5283,10 @@ packages: resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} engines: {node: '>= 0.4'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4941,8 +5403,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.2.6: - resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} + dompurify@3.2.7: + resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -5047,9 +5509,8 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -5123,16 +5584,17 @@ packages: typescript: optional: true - eslint-config-prettier@9.1.2: - resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-config-turbo@1.13.4: - resolution: {integrity: sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw==} + eslint-config-turbo@2.5.8: + resolution: {integrity: sha512-wzxmN7dJNFGDwOvR/4j8U2iaIH/ruYez8qg/sCKrezJ3+ljbFMvJLmgKKt/1mDuyU9wj5aZqO6VijP3QH169FA==} peerDependencies: eslint: '>6.6.0' + turbo: '>2.0.0' eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -5193,9 +5655,9 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@6.1.1: + resolution: {integrity: sha512-St9EKZzOAQF704nt2oJvAKZHjhrpg25ClQoaAlHmPZuajFldVLqRDW4VBNAS01NzeiQF0m0qhG1ZA807K6aVaQ==} + engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -5212,10 +5674,11 @@ packages: eslint: '>=8' storybook: ^9.1.10 - eslint-plugin-turbo@1.13.4: - resolution: {integrity: sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg==} + eslint-plugin-turbo@2.5.8: + resolution: {integrity: sha512-bVjx4vTH0oTKIyQ7EGFAXnuhZMrKIfu17qlex/dps7eScPnGQLJ3r1/nFq80l8xA+8oYjsSirSQ2tXOKbz3kEw==} peerDependencies: eslint: '>6.6.0' + turbo: '>2.0.0' eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -5292,6 +5755,10 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + export-to-csv@1.4.0: resolution: {integrity: sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==} engines: {node: ^v12.20.0 || >=v14.13.0} @@ -5312,6 +5779,10 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5386,6 +5857,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} @@ -5433,6 +5908,9 @@ packages: fontfaceobserver@2.1.0: resolution: {integrity: sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng==} + fontfaceobserver@2.3.0: + resolution: {integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==} + fontkit@2.0.4: resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} @@ -5473,6 +5951,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + frimousse@0.3.0: resolution: {integrity: sha512-kO6LMoKY/cLAYEhXXtqLRaLIE6L/DagpFPrUZaLv3LsUa1/8Iza3HhwZcgN8eZ+weXnhv69eoclNUPohcCa/IQ==} peerDependencies: @@ -5577,6 +6059,9 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5653,16 +6138,16 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@6.1.3: + resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hsl-to-hex@1.0.0: resolution: {integrity: sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==} hsl-to-rgb-for-reals@1.1.1: resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} @@ -5690,13 +6175,13 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-middleware@3.0.5: + resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -5713,6 +6198,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -5755,6 +6244,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -5882,8 +6374,16 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} @@ -5935,6 +6435,10 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isbot@5.1.31: + resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -5942,10 +6446,6 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isomorphic-dompurify@2.25.0: - resolution: {integrity: sha512-bcpJzu9DOjN21qaCVpcoCwUX1ytpvA6EFqCK5RNtPg5+F0Jz9PX50jl6jbEicBNeO87eDDfC7XtPs4zjDClZJg==} - engines: {node: '>=18'} - isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} @@ -5986,14 +6486,10 @@ packages: resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} engines: {node: '>=12.0.0'} - jsdom@26.1.0: - resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} @@ -6006,6 +6502,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -6151,6 +6651,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + lucide-react@0.469.0: resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==} peerDependencies: @@ -6212,6 +6716,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs@3.5.3: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} @@ -6222,6 +6730,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -6300,6 +6812,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -6308,10 +6824,18 @@ packages: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -6376,6 +6900,10 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + morgan@1.10.1: + resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==} + engines: {node: '>= 0.8.0'} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -6410,6 +6938,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -6463,6 +6995,10 @@ packages: node-releases@2.0.21: resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} + normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -6477,6 +7013,22 @@ packages: normalize.css@8.0.1: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -6487,9 +7039,6 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.21: - resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -6537,6 +7086,10 @@ packages: objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -6624,9 +7177,6 @@ packages: parse-svg-path@0.1.2: resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -6652,6 +7202,9 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6666,10 +7219,19 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -6939,10 +7501,26 @@ packages: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} + proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -7056,6 +7634,10 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -7064,6 +7646,14 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-color@2.19.3: resolution: {integrity: sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==} peerDependencies: @@ -7156,6 +7746,10 @@ packages: react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -7176,6 +7770,33 @@ packages: '@types/react': optional: true + react-router-dom@7.9.3: + resolution: {integrity: sha512-1QSbA0TGGFKTAc/aWjpfW/zoEukYfU4dc1dLkT/vvf54JoGMkW+fNA+3oyo2gWVW1GM7BxjJVHz5GnPJv40rvg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.9.3: + resolution: {integrity: sha512-4o2iWCFIwhI/eYAIL43+cjORXYn/aRQPgtFRRZb3VzoyQ5Uej0Bmqj7437L97N9NJW4wnicSwLOLS+yCXfAPgg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-router@7.9.4: + resolution: {integrity: sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react-smooth@4.0.4: resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} peerDependencies: @@ -7258,6 +7879,13 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -7283,6 +7911,9 @@ packages: resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} engines: {node: '>=8.6.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} @@ -7305,6 +7936,10 @@ packages: restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -7333,8 +7968,9 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.34: - resolution: {integrity: sha512-Wwh7EwalMzzX3Yy3VN58VEajeR2Si8+HDNMf706jPLIqU7CxneRW+dQVfznf5O0TWTnJyu4npelwg2bzTXB1Nw==} + rolldown@1.0.0-beta.42: + resolution: {integrity: sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true rollup@4.52.4: @@ -7345,8 +7981,9 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -7359,6 +7996,9 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -7377,10 +8017,6 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - scheduler@0.17.0: resolution: {integrity: sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==} @@ -7411,16 +8047,35 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + serve@14.2.5: + resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==} + engines: {node: '>= 14'} + hasBin: true + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -7487,6 +8142,12 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + sonner@1.7.4: + resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -7505,6 +8166,18 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} @@ -7602,6 +8275,10 @@ packages: resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} engines: {node: '>=12'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -7670,9 +8347,6 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} @@ -7773,13 +8447,6 @@ packages: peerDependencies: '@tiptap/core': ^3.0.1 - tldts-core@6.1.86: - resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - - tldts@6.1.86: - resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} - hasBin: true - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7792,17 +8459,9 @@ packages: resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} engines: {node: '>=14.16'} - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} - engines: {node: '>=16'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -7830,6 +8489,16 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: 5.8.3 + peerDependenciesMeta: + typescript: + optional: true + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -7910,10 +8579,18 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -8010,6 +8687,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -8079,6 +8759,21 @@ packages: engines: {node: '>=8'} hasBin: true + valibot@1.1.0: + resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} + peerDependencies: + typescript: 5.8.3 + peerDependenciesMeta: + typescript: + optional: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -8096,6 +8791,19 @@ packages: resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} engines: {node: '>= 6'} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: 7.1.7 + peerDependenciesMeta: + vite: + optional: true + vite@7.1.7: resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -8139,10 +8847,6 @@ packages: w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} @@ -8156,10 +8860,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - webpack-dev-middleware@6.1.3: resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} engines: {node: '>= 14.15.0'} @@ -8189,22 +8889,10 @@ packages: webpack-cli: optional: true - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -8229,11 +8917,20 @@ packages: engines: {node: '>= 8'} hasBin: true + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + which@4.0.0: resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + winston-transport@4.9.0: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} @@ -8281,13 +8978,6 @@ packages: utf-8-validate: optional: true - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -8353,6 +9043,12 @@ packages: yoga-layout@2.0.1: resolution: {integrity: sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q==} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -8362,14 +9058,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@asamuzakjp/css-color@3.2.0': - dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 10.4.3 - '@atlaskit/pragmatic-drag-and-drop-auto-scroll@1.4.0': dependencies: '@atlaskit/pragmatic-drag-and-drop': 1.7.4 @@ -8422,6 +9110,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.4 + '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.28.4 @@ -8430,8 +9122,28 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.4 @@ -8448,6 +9160,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.27.1': {} @@ -8463,6 +9197,46 @@ snapshots: dependencies: '@babel/types': 7.28.4 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.26.10': dependencies: regenerator-runtime: 0.14.1 @@ -8565,7 +9339,7 @@ snapshots: dependencies: '@bprogress/core': 1.3.4 '@bprogress/react': 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next: 14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8589,26 +9363,6 @@ snapshots: '@colors/colors@1.6.0': {} - '@csstools/color-helpers@5.0.2': {} - - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-tokenizer@3.0.4': {} - '@dabh/diagnostics@2.0.3': dependencies: colorspace: 1.1.4 @@ -9130,6 +9884,8 @@ snapshots: '@types/react': 18.3.11 react: 18.3.1 + '@mjackson/node-fetch-server@0.2.0': {} + '@mui/core-downloads-tracker@5.18.0': {} '@mui/material@5.17.1(@emotion/react@11.14.0(@types/react@18.3.11)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -9213,7 +9969,7 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.0.5': + '@napi-rs/wasm-runtime@1.0.6': dependencies: '@emnapi/core': 1.5.0 '@emnapi/runtime': 1.5.0 @@ -9275,6 +10031,35 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@npmcli/git@4.1.0': + dependencies: + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.7.2 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/package-json@4.0.1': + dependencies: + '@npmcli/git': 4.1.0 + glob: 10.4.5 + hosted-git-info: 6.1.3 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + proc-log: 3.0.0 + semver: 7.7.2 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@6.0.2': + dependencies: + which: 3.0.1 + '@opentelemetry/api-logs@0.203.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -9532,9 +10317,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@oxc-project/runtime@0.82.3': {} - - '@oxc-project/types@0.82.3': {} + '@oxc-project/types@0.94.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -9866,53 +10649,126 @@ snapshots: '@react-pdf/primitives': 4.1.1 '@react-pdf/stylesheet': 6.1.0 + '@react-router/dev@7.9.4(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)': + dependencies: + '@babel/core': 7.28.4 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@npmcli/package-json': 4.0.1 + '@react-router/node': 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) + '@remix-run/node-fetch-server': 0.9.0 + arg: 5.0.2 + babel-dead-code-elimination: 1.0.10 + chokidar: 3.6.0 + dedent: 1.7.0(babel-plugin-macros@3.1.0) + es-module-lexer: 1.7.0 + exit-hook: 2.2.1 + isbot: 5.1.31 + jsesc: 3.0.2 + lodash: 4.17.21 + pathe: 1.1.2 + picocolors: 1.1.1 + prettier: 3.6.2 + react-refresh: 0.14.2 + react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + semver: 7.7.2 + tinyglobby: 0.2.15 + valibot: 1.1.0(typescript@5.8.3) + vite: 7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@react-router/express@7.9.3(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': + dependencies: + '@react-router/node': 7.9.3(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) + express: 5.1.0 + react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + optionalDependencies: + typescript: 5.8.3 + + '@react-router/node@7.9.3(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + optionalDependencies: + typescript: 5.8.3 + + '@react-router/node@7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + optionalDependencies: + typescript: 5.8.3 + '@remirror/core-constants@3.0.0': {} - '@rolldown/binding-android-arm64@1.0.0-beta.34': + '@remix-run/node-fetch-server@0.9.0': {} + + '@rolldown/binding-android-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.34': + '@rolldown/binding-darwin-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.34': + '@rolldown/binding-darwin-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.34': + '@rolldown/binding-freebsd-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': dependencies: - '@napi-rs/wasm-runtime': 1.0.5 + '@napi-rs/wasm-runtime': 1.0.6 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': optional: true - '@rolldown/pluginutils@1.0.0-beta.34': {} + '@rolldown/pluginutils@1.0.0-beta.42': {} '@rollup/pluginutils@5.2.0(rollup@4.52.4)': dependencies: @@ -10971,6 +11827,10 @@ snapshots: '@types/http-errors@2.0.5': {} + '@types/http-proxy@1.17.16': + dependencies: + '@types/node': 22.12.0 + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -11007,6 +11867,10 @@ snapshots: '@types/mime@1.3.5': {} + '@types/morgan@1.9.10': + dependencies: + '@types/node': 22.12.0 + '@types/ms@2.1.0': {} '@types/mysql@2.15.27': @@ -11102,14 +11966,14 @@ snapshots: dependencies: '@types/node': 22.12.0 - '@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.44.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/type-utils': 8.44.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/utils': 8.44.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/parser': 8.45.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.45.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 7.0.5 @@ -11119,41 +11983,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3 eslint: 8.57.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.44.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.45.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.8.3) - '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 debug: 4.4.3 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.44.0': + '@typescript-eslint/scope-manager@8.45.0': dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.44.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.45.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.44.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@8.57.1)(typescript@5.8.3) debug: 4.4.3 eslint: 8.57.1 ts-api-utils: 2.1.0(typescript@5.8.3) @@ -11161,14 +12025,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.44.0': {} + '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/typescript-estree@8.44.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.44.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.8.3) - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/project-service': 8.45.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -11179,20 +12043,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.44.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/utils@8.45.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.8.3) eslint: 8.57.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.44.0': + '@typescript-eslint/visitor-keys@8.45.0': dependencies: - '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -11256,6 +12120,8 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@vercel/edge@1.2.2': {} + '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -11398,6 +12264,8 @@ snapshots: '@xtuc/long@4.2.2': {} + '@zeit/schemas@2.36.0': {} + abs-svg-path@0.1.1: {} accepts@1.3.8: @@ -11405,6 +12273,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-import-attributes@1.9.5(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -11419,8 +12292,6 @@ snapshots: acorn@8.15.0: {} - agent-base@7.1.4: {} - ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -11441,14 +12312,25 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + uri-js: 4.4.1 - ansi-html-community@0.0.8: {} + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-html-community@0.0.8: {} ansi-regex@5.0.1: {} @@ -11466,7 +12348,7 @@ snapshots: ansi-styles@6.2.3: {} - ansis@4.1.0: {} + ansis@4.2.0: {} any-promise@1.3.0: {} @@ -11475,6 +12357,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + arch@2.2.0: {} + arg@5.0.2: {} argparse@2.0.1: {} @@ -11585,16 +12469,6 @@ snapshots: attr-accept@2.2.5: {} - autoprefixer@10.4.14(postcss@8.5.6): - dependencies: - browserslist: 4.26.2 - caniuse-lite: 1.0.30001743 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - autoprefixer@10.4.21(postcss@8.5.6): dependencies: browserslist: 4.26.2 @@ -11611,9 +12485,9 @@ snapshots: axe-core@4.10.3: {} - axios@1.12.0: + axios@1.12.0(debug@4.4.3): dependencies: - follow-redirects: 1.15.11 + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -11621,6 +12495,15 @@ snapshots: axobject-query@4.1.0: {} + babel-dead-code-elimination@1.0.10: + dependencies: + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.26.10 @@ -11637,6 +12520,10 @@ snapshots: baseline-browser-mapping@2.8.4: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + batch-processor@1.0.0: {} better-opn@3.0.2: @@ -11670,8 +12557,33 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.1 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + boolbase@1.0.0: {} + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.0.1 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -11704,6 +12616,8 @@ snapshots: dependencies: streamsearch: 1.1.0 + bytes@3.0.0: {} + bytes@3.1.2: {} cac@6.7.14: {} @@ -11730,16 +12644,18 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.5.3 + tslib: 2.8.1 camelcase-css@2.0.1: {} + camelcase@7.0.1: {} + caniuse-lite@1.0.30001743: {} capital-case@1.0.4: dependencies: no-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 upper-case-first: 2.0.2 case-sensitive-paths-webpack-plugin@2.4.0: {} @@ -11752,6 +12668,10 @@ snapshots: loupe: 3.2.1 pathval: 2.0.1 + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -11768,6 +12688,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.0.1: {} + change-case@4.1.2: dependencies: camel-case: 4.1.2 @@ -11781,7 +12703,7 @@ snapshots: path-case: 3.0.4 sentence-case: 3.0.4 snake-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 character-entities@2.0.2: {} @@ -11815,8 +12737,16 @@ snapshots: dependencies: source-map: 0.6.1 + cli-boxes@3.0.0: {} + client-only@0.0.1: {} + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -11914,15 +12844,21 @@ snapshots: constant-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 upper-case: 2.0.2 constants-browserify@1.0.0: {} + content-disposition@0.5.2: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} convert-source-map@1.9.0: {} @@ -11931,8 +12867,14 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + + cookie@0.6.0: {} + cookie@0.7.1: {} + cookie@1.0.2: {} + core-js@3.45.1: {} cors@2.8.5: @@ -11955,6 +12897,10 @@ snapshots: crelt@1.0.6: {} + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 @@ -12009,11 +12955,6 @@ snapshots: cssesc@3.0.0: {} - cssstyle@4.6.0: - dependencies: - '@asamuzakjp/css-color': 3.2.0 - rrweb-cssom: 0.8.0 - csstype@3.1.3: {} d3-array@3.2.4: @@ -12056,11 +12997,6 @@ snapshots: damerau-levenshtein@1.0.8: {} - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -12105,6 +13041,10 @@ snapshots: dedent@0.7.0: {} + dedent@1.7.0(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + deep-eql@5.0.2: {} deep-equal@1.1.2: @@ -12116,6 +13056,8 @@ snapshots: object-keys: 1.1.1 regexp.prototype.flags: 1.5.4 + deep-extend@0.6.0: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -12213,7 +13155,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.2.6: + dompurify@3.2.7: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -12232,7 +13174,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 dotenv@16.0.3: {} @@ -12305,7 +13247,7 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: {} + err-code@2.0.3: {} error-ex@1.3.4: dependencies: @@ -12461,12 +13403,12 @@ snapshots: dependencies: '@next/eslint-plugin-next': 14.2.32 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/parser': 8.44.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.45.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1) @@ -12477,14 +13419,15 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@9.1.2(eslint@8.57.1): + eslint-config-prettier@10.1.8(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-config-turbo@1.13.4(eslint@8.57.1): + eslint-config-turbo@2.5.8(eslint@8.57.1)(turbo@2.5.8): dependencies: eslint: 8.57.1 - eslint-plugin-turbo: 1.13.4(eslint@8.57.1) + eslint-plugin-turbo: 2.5.8(eslint@8.57.1)(turbo@2.5.8) + turbo: 2.5.8 eslint-import-resolver-node@0.3.9: dependencies: @@ -12505,22 +13448,22 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.45.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -12531,7 +13474,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -12543,7 +13486,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.45.0(eslint@8.57.1)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -12572,9 +13515,15 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-react-hooks@5.2.0(eslint@8.57.1): + eslint-plugin-react-hooks@6.1.1(eslint@8.57.1): dependencies: + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 eslint: 8.57.1 + zod: 3.25.76 + zod-validation-error: 4.0.2(zod@3.25.76) + transitivePeerDependencies: + - supports-color eslint-plugin-react@7.37.5(eslint@8.57.1): dependencies: @@ -12600,17 +13549,18 @@ snapshots: eslint-plugin-storybook@9.1.10(eslint@8.57.1)(storybook@9.1.10(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.44.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 storybook: 9.1.10(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-turbo@1.13.4(eslint@8.57.1): + eslint-plugin-turbo@2.5.8(eslint@8.57.1)(turbo@2.5.8): dependencies: dotenv: 16.0.3 eslint: 8.57.1 + turbo: 2.5.8 eslint-scope@5.1.1: dependencies: @@ -12717,6 +13667,8 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + exit-hook@2.2.1: {} + export-to-csv@1.4.0: {} express-winston@4.2.0(winston@3.17.0): @@ -12769,6 +13721,38 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -12844,6 +13828,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 @@ -12884,10 +13879,14 @@ snapshots: fn.name@1.1.0: {} - follow-redirects@1.15.11: {} + follow-redirects@1.15.11(debug@4.4.3): + optionalDependencies: + debug: 4.4.3 fontfaceobserver@2.1.0: {} + fontfaceobserver@2.3.0: {} + fontkit@2.0.4: dependencies: '@swc/helpers': 0.5.17 @@ -12944,6 +13943,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + frimousse@0.3.0(react@18.3.1)(typescript@5.8.3): dependencies: react: 18.3.1 @@ -13065,6 +14066,8 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + globrex@0.1.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -13110,7 +14113,7 @@ snapshots: header-case@2.0.4: dependencies: capital-case: 1.0.4 - tslib: 2.5.3 + tslib: 2.8.1 helmet@7.2.0: {} @@ -13124,16 +14127,16 @@ snapshots: hookable@5.5.3: {} + hosted-git-info@6.1.3: + dependencies: + lru-cache: 7.18.3 + hsl-to-hex@1.0.0: dependencies: hsl-to-rgb-for-reals: 1.1.1 hsl-to-rgb-for-reals@1.1.1: {} - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - html-entities@2.6.0: {} html-minifier-terser@6.1.0: @@ -13171,19 +14174,24 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: + http-proxy-middleware@3.0.5: dependencies: - agent-base: 7.1.4 + '@types/http-proxy': 1.17.16 debug: 4.4.3 + http-proxy: 1.18.1(debug@4.4.3) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: + http-proxy@1.18.1(debug@4.4.3): dependencies: - agent-base: 7.1.4 - debug: 4.4.3 + eventemitter3: 4.0.7 + follow-redirects: 1.15.11(debug@4.4.3) + requires-port: 1.0.0 transitivePeerDependencies: - - supports-color + - debug human-signals@2.1.0: {} @@ -13197,6 +14205,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -13234,6 +14246,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + inline-style-parser@0.1.1: {} internal-slot@1.1.0: @@ -13364,7 +14378,11 @@ snapshots: is-plain-obj@4.1.0: {} - is-potential-custom-element-name@1.0.1: {} + is-plain-object@5.0.0: {} + + is-port-reachable@4.0.0: {} + + is-promise@4.0.0: {} is-regex@1.2.1: dependencies: @@ -13415,20 +14433,12 @@ snapshots: isarray@2.0.5: {} + isbot@5.1.31: {} + isexe@2.0.0: {} isexe@3.1.1: {} - isomorphic-dompurify@2.25.0: - dependencies: - dompurify: 3.2.6 - jsdom: 26.1.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - isomorphic.js@0.2.5: {} iterator.prototype@1.1.5: @@ -13474,32 +14484,7 @@ snapshots: jsdoc-type-pratt-parser@4.8.0: {} - jsdom@26.1.0: - dependencies: - cssstyle: 4.6.0 - data-urls: 5.0.0 - decimal.js: 10.6.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 - parse5: 7.3.0 - rrweb-cssom: 0.8.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 5.1.2 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - ws: 8.18.3 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -13507,6 +14492,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -13637,7 +14624,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.5.3 + tslib: 2.8.1 lowlight@2.9.0: dependencies: @@ -13657,6 +14644,8 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + lucide-react@0.469.0(react@18.3.1): dependencies: react: 18.3.1 @@ -13739,6 +14728,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs@3.5.3: dependencies: fs-monkey: 1.1.0 @@ -13749,6 +14740,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -13893,14 +14886,24 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.33.0: {} + mime-db@1.52.0: {} mime-db@1.54.0: {} + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mimic-fn@2.1.0: {} @@ -13943,6 +14946,16 @@ snapshots: module-details-from-path@1.0.4: {} + morgan@1.10.1: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.1.0 + transitivePeerDependencies: + - supports-color + mri@1.2.0: {} ms@2.0.0: {} @@ -13965,15 +14978,17 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} next-themes@0.2.1(next@14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.32 '@swc/helpers': 0.5.5 @@ -13983,7 +14998,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.28.4)(babel-plugin-macros@3.1.0)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.32 '@next/swc-darwin-x64': 14.2.32 @@ -14002,7 +15017,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.5.3 + tslib: 2.8.1 node-abi@3.75.0: dependencies: @@ -14021,6 +15036,13 @@ snapshots: node-releases@2.0.21: {} + normalize-package-data@5.0.0: + dependencies: + hosted-git-info: 6.1.3 + is-core-module: 2.16.1 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -14031,6 +15053,26 @@ snapshots: normalize.css@8.0.1: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.7.2 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@10.1.0: + dependencies: + hosted-git-info: 6.1.3 + proc-log: 3.0.0 + semver: 7.7.2 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@8.0.2: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.7.2 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -14041,8 +15083,6 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.21: {} - object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -14096,6 +15136,10 @@ snapshots: objectorarray@1.0.5: {} + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -14178,7 +15222,7 @@ snapshots: param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 parent-module@1.0.1: dependencies: @@ -14193,23 +15237,19 @@ snapshots: parse-svg-path@0.1.2: {} - parse5@7.3.0: - dependencies: - entities: 6.0.1 - parseurl@1.3.3: {} pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 path-browserify@1.0.1: {} path-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 path-exists@4.0.0: {} @@ -14217,6 +15257,8 @@ snapshots: path-is-absolute@1.0.1: {} + path-is-inside@1.0.2: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -14228,8 +15270,14 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@3.3.0: {} + + path-to-regexp@8.3.0: {} + path-type@4.0.0: {} + pathe@1.1.2: {} + pathe@2.0.3: {} pathval@2.0.1: {} @@ -14414,8 +15462,17 @@ snapshots: pretty-hrtime@1.0.3: {} + proc-log@3.0.0: {} + process@0.11.10: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -14569,6 +15626,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + range-parser@1.2.0: {} + range-parser@1.2.1: {} raw-body@2.5.2: @@ -14578,6 +15637,20 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.1: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + react-color@2.19.3(react@18.3.1): dependencies: '@icons/material': 0.2.4(react@18.3.1) @@ -14720,6 +15793,8 @@ snapshots: react-fast-compare: 3.2.2 warning: 4.0.3 + react-refresh@0.14.2: {} + react-remove-scroll-bar@2.3.8(@types/react@18.3.11)(react@18.3.1): dependencies: react: 18.3.1 @@ -14739,6 +15814,28 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 + react-router-dom@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + + react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + cookie: 1.0.2 + react: 18.3.1 + set-cookie-parser: 2.7.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + + react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + cookie: 1.0.2 + react: 18.3.1 + set-cookie-parser: 2.7.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + react-smooth@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: fast-equals: 5.2.2 @@ -14847,6 +15944,15 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + relateurl@0.2.7: {} remark-parse@10.0.2: @@ -14884,6 +15990,8 @@ snapshots: transitivePeerDependencies: - supports-color + requires-port@1.0.0: {} + reselect@5.1.1: {} resolve-from@4.0.0: {} @@ -14904,13 +16012,15 @@ snapshots: restructure@3.0.2: {} + retry@0.12.0: {} + reusify@1.1.0: {} rimraf@3.0.2: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.34)(typescript@5.8.3): + rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.42)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 @@ -14921,34 +16031,33 @@ snapshots: dts-resolver: 2.1.2 get-tsconfig: 4.10.1 magic-string: 0.30.19 - rolldown: 1.0.0-beta.34 + rolldown: 1.0.0-beta.42 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown@1.0.0-beta.34: + rolldown@1.0.0-beta.42: dependencies: - '@oxc-project/runtime': 0.82.3 - '@oxc-project/types': 0.82.3 - '@rolldown/pluginutils': 1.0.0-beta.34 - ansis: 4.1.0 + '@oxc-project/types': 0.94.0 + '@rolldown/pluginutils': 1.0.0-beta.42 + ansis: 4.2.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.34 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.34 - '@rolldown/binding-darwin-x64': 1.0.0-beta.34 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.34 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.34 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.34 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.34 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.34 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.34 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.34 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.34 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.34 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.34 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.34 + '@rolldown/binding-android-arm64': 1.0.0-beta.42 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.42 + '@rolldown/binding-darwin-x64': 1.0.0-beta.42 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.42 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.42 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.42 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.42 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.42 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.42 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.42 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.42 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.42 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42 rollup@4.52.4: dependencies: @@ -14980,7 +16089,15 @@ snapshots: rope-sequence@1.3.4: {} - rrweb-cssom@0.8.0: {} + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.3.0 + transitivePeerDependencies: + - supports-color run-parallel@1.2.0: dependencies: @@ -14998,6 +16115,8 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-push-apply@1.0.0: @@ -15015,10 +16134,6 @@ snapshots: safer-buffer@2.1.2: {} - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - scheduler@0.17.0: dependencies: loose-envify: 1.4.0 @@ -15067,16 +16182,42 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + sentence-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 upper-case-first: 2.0.2 serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 + serve-handler@6.1.6: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -15086,6 +16227,33 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + serve@14.2.5: + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.12.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.8.1 + is-port-reachable: 4.0.0 + serve-handler: 6.1.6 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -15189,7 +16357,12 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.5.3 + tslib: 2.8.1 + + sonner@1.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) source-map-js@1.2.1: {} @@ -15204,6 +16377,20 @@ snapshots: space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + stable-hash@0.0.5: {} stack-trace@0.0.10: {} @@ -15337,6 +16524,8 @@ snapshots: strip-indent@4.1.0: {} + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} strtok3@10.3.4: @@ -15351,10 +16540,13 @@ snapshots: dependencies: inline-style-parser: 0.1.1 - styled-jsx@5.1.1(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.28.4)(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 + optionalDependencies: + '@babel/core': 7.28.4 + babel-plugin-macros: 3.1.0 stylis@4.2.0: {} @@ -15396,8 +16588,6 @@ snapshots: react: 18.3.1 use-sync-external-store: 1.5.0(react@18.3.1) - symbol-tree@3.2.4: {} - tabbable@6.2.0: {} tailwind-merge@2.6.0: {} @@ -15503,12 +16693,6 @@ snapshots: markdown-it-task-lists: 2.1.1 prosemirror-markdown: 1.13.2 - tldts-core@6.1.86: {} - - tldts@6.1.86: - dependencies: - tldts-core: 6.1.86 - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -15521,16 +16705,8 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - tough-cookie@5.1.2: - dependencies: - tldts: 6.1.86 - tr46@0.0.3: {} - tr46@5.1.1: - dependencies: - punycode: 2.3.1 - tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -15547,6 +16723,10 @@ snapshots: ts-interface-checker@0.1.13: {} + tsconfck@3.1.6(typescript@5.8.3): + optionalDependencies: + typescript: 5.8.3 + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -15562,15 +16742,15 @@ snapshots: tsdown@0.15.5(typescript@5.8.3): dependencies: - ansis: 4.1.0 + ansis: 4.2.0 cac: 6.7.14 chokidar: 3.6.0 debug: 4.4.3 diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.34 - rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.34)(typescript@5.8.3) + rolldown: 1.0.0-beta.42 + rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.42)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.15 @@ -15624,11 +16804,19 @@ snapshots: type-fest@0.20.2: {} + type-fest@2.19.0: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -15774,13 +16962,18 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + upper-case-first@2.0.2: dependencies: - tslib: 2.5.3 + tslib: 2.8.1 upper-case@2.0.2: dependencies: - tslib: 2.5.3 + tslib: 2.8.1 uri-js@4.4.1: dependencies: @@ -15840,6 +17033,17 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 + valibot@1.1.0(typescript@5.8.3): + optionalDependencies: + typescript: 5.8.3 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + vary@1.1.2: {} vfile-message@3.1.4: @@ -15877,6 +17081,38 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + vite-node@3.2.4(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)): + dependencies: + debug: 4.4.3 + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.8.3) + optionalDependencies: + vite: 7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + - typescript + vite@7.1.7(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1): dependencies: esbuild: 0.25.0 @@ -15894,10 +17130,6 @@ snapshots: w3c-keyname@2.2.8: {} - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - warning@4.0.3: dependencies: loose-envify: 1.4.0 @@ -15911,8 +17143,6 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} - webpack-dev-middleware@6.1.3(webpack@5.101.3(@swc/core@1.13.5(@swc/helpers@0.5.17))(esbuild@0.25.0)): dependencies: colorette: 2.0.20 @@ -15965,19 +17195,8 @@ snapshots: - esbuild - uglify-js - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-mimetype@3.0.0: {} - whatwg-mimetype@4.0.0: {} - - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -16028,10 +17247,18 @@ snapshots: dependencies: isexe: 2.0.0 + which@3.0.1: + dependencies: + isexe: 2.0.0 + which@4.0.0: dependencies: isexe: 3.1.1 + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + winston-transport@4.9.0: dependencies: logform: 2.7.0 @@ -16072,10 +17299,6 @@ snapshots: ws@8.18.3: {} - xml-name-validator@5.0.0: {} - - xmlchars@2.2.0: {} - xtend@4.0.2: {} y-indexeddb@9.0.12(yjs@13.6.27): @@ -16127,4 +17350,8 @@ snapshots: yoga-layout@2.0.1: {} + zod-validation-error@4.0.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0ef21fef154..edc34bb3952 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,37 +1,37 @@ packages: -- apps/* -- packages/* -- "!apps/api" -- "!apps/proxy" + - apps/* + - packages/* + - "!apps/api" + - "!apps/proxy" catalog: - "@atlaskit/pragmatic-drag-and-drop": 1.7.4 "@atlaskit/pragmatic-drag-and-drop-auto-scroll": 1.4.0 "@atlaskit/pragmatic-drag-and-drop-hitbox": 1.1.0 + "@atlaskit/pragmatic-drag-and-drop": 1.7.4 "@sentry/node": 10.5.0 "@sentry/profiling-node": 10.5.0 + "@tiptap/core": ^3.5.3 + "@tiptap/html": ^3.5.3 + "@types/lodash-es": 4.17.12 + "@types/node": 22.12.0 + "@types/react-dom": 18.3.1 + "@types/react": 18.3.11 axios: 1.12.0 - mobx: 6.12.0 - mobx-react: 9.1.1 - mobx-utils: 6.0.8 lodash-es: 4.17.21 - "@types/lodash-es": 4.17.12 lucide-react: 0.469.0 + mobx-react: 9.1.1 + mobx-utils: 6.0.8 + mobx: 6.12.0 next: 14.2.32 + react-dom: 18.3.1 + react: 18.3.1 sharp: 0.33.5 swr: 2.2.4 - react: 18.3.1 - react-dom: 18.3.1 - "@types/react": 18.3.11 - "@types/react-dom": 18.3.1 - "@types/node": 22.12.0 - typescript: 5.8.3 tsdown: 0.15.5 - vite: 7.1.7 + typescript: 5.8.3 uuid: 13.0.0 - "@tiptap/core": ^3.5.3 - "@tiptap/html": ^3.5.3 + vite: 7.1.7 onlyBuiltDependencies: -- turbo -- sharp + - turbo + - sharp From d9d78c85bec4b47d44b8138d08f83ef5060392b8 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 28 Oct 2025 16:53:26 +0530 Subject: [PATCH 02/10] chore: update dependencies in admin app and clean up package.json --- apps/admin/package.json | 8 -- apps/admin/vite.config.ts | 4 - pnpm-lock.yaml | 242 +++++++++++++++----------------------- 3 files changed, 94 insertions(+), 160 deletions(-) diff --git a/apps/admin/package.json b/apps/admin/package.json index 84c4aabe384..519dbc235fb 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -32,11 +32,8 @@ "@tanstack/virtual-core": "^3.13.12", "@vercel/edge": "1.2.2", "axios": "catalog:", - "client-only": "^0.0.1", "compression": "^1.8.1", - "cookie": "^0.6.0", "cross-env": "^7.0.3", - "debug": "4.4.3", "dotenv": "^16.4.5", "express": "^5.1.0", "http-proxy-middleware": "^3.0.5", @@ -47,19 +44,14 @@ "mobx-react": "catalog:", "mobx-react-lite": "^4.0.7", "morgan": "^1.10.1", - "ms": "^2.1.3", "next-themes": "^0.2.1", "react": "catalog:", "react-dom": "catalog:", "react-hook-form": "7.51.5", - "react-is": "^18.2.0", "react-router": "^7.9.1", "react-router-dom": "^7.9.1", - "scheduler": "^0.23.2", "serve": "14.2.5", - "set-cookie-parser": "^2.6.0", "swr": "catalog:", - "use-sync-external-store": "^1.2.0", "uuid": "catalog:" }, "devDependencies": { diff --git a/apps/admin/vite.config.ts b/apps/admin/vite.config.ts index b908e07f245..4d18b2a4225 100644 --- a/apps/admin/vite.config.ts +++ b/apps/admin/vite.config.ts @@ -49,10 +49,6 @@ export default defineConfig(({ isSsrBuild }) => { "next/link": path.resolve(__dirname, "app/compat/next/link.tsx"), "next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"), }, - // When building inside Docker with pnpm workspaces, symlinks may be used - // for workspace packages. Preserve them so Vite can resolve their exports - // correctly instead of attempting to follow to source paths. - preserveSymlinks: true, dedupe: ["react", "react-dom"], }, // No SSR-specific overrides needed; alias resolves to ESM build diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 993e81501a2..03d181abc13 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -133,7 +133,7 @@ importers: version: link:../../packages/utils '@react-router/express': specifier: ^7.9.3 - version: 7.9.3(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) + version: 7.9.4(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) '@react-router/node': specifier: ^7.9.3 version: 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) @@ -148,22 +148,13 @@ importers: version: 1.2.2 axios: specifier: 'catalog:' - version: 1.12.0(debug@4.4.3) - client-only: - specifier: ^0.0.1 - version: 0.0.1 + version: 1.12.0 compression: specifier: ^1.8.1 version: 1.8.1 - cookie: - specifier: ^0.6.0 - version: 0.6.0 cross-env: specifier: ^7.0.3 version: 7.0.3 - debug: - specifier: 4.4.3 - version: 4.4.3 dotenv: specifier: ^16.4.5 version: 16.6.1 @@ -194,9 +185,6 @@ importers: morgan: specifier: ^1.10.1 version: 1.10.1 - ms: - specifier: ^2.1.3 - version: 2.1.3 next-themes: specifier: ^0.2.1 version: 0.2.1(next@14.2.32(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -209,30 +197,18 @@ importers: react-hook-form: specifier: 7.51.5 version: 7.51.5(react@18.3.1) - react-is: - specifier: ^18.2.0 - version: 18.3.1 react-router: specifier: ^7.9.1 version: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-router-dom: specifier: ^7.9.1 version: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - scheduler: - specifier: ^0.23.2 - version: 0.23.2 serve: specifier: 14.2.5 version: 14.2.5 - set-cookie-parser: - specifier: ^2.6.0 - version: 2.7.1 swr: specifier: 'catalog:' version: 2.2.4(react@18.3.1) - use-sync-external-store: - specifier: ^1.2.0 - version: 1.5.0(react@18.3.1) uuid: specifier: 'catalog:' version: 13.0.0 @@ -326,7 +302,7 @@ importers: version: 3.6.2(@tiptap/core@3.6.2(@tiptap/pm@3.6.6))(@tiptap/pm@3.6.6)(happy-dom@20.0.2) axios: specifier: 'catalog:' - version: 1.12.0(debug@4.4.3) + version: 1.12.0 compression: specifier: 1.8.1 version: 1.8.1 @@ -441,7 +417,7 @@ importers: version: 2.11.8 axios: specifier: 'catalog:' - version: 1.12.0(debug@4.4.3) + version: 1.12.0 clsx: specifier: ^2.0.0 version: 2.1.1 @@ -598,7 +574,7 @@ importers: version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) axios: specifier: 'catalog:' - version: 1.12.0(debug@4.4.3) + version: 1.12.0 clsx: specifier: ^2.0.0 version: 2.1.1 @@ -1196,7 +1172,7 @@ importers: version: 0.2.7 axios: specifier: 'catalog:' - version: 1.12.0(debug@4.4.3) + version: 1.12.0 fflate: specifier: 0.8.2 version: 0.8.2 @@ -2505,8 +2481,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.0.6': - resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} + '@napi-rs/wasm-runtime@1.0.3': + resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} '@next/env@14.2.32': resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==} @@ -2808,8 +2784,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@oxc-project/types@0.94.0': - resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} + '@oxc-project/runtime@0.82.3': + resolution: {integrity: sha512-LNh5GlJvYHAnMurO+EyA8jJwN1rki7l3PSHuosDh2I7h00T6/u9rCkUjg/SvPmT1CZzvhuW0y+gf7jcqUy/Usg==} + engines: {node: '>=6.9.0'} + + '@oxc-project/types@0.82.3': + resolution: {integrity: sha512-6nCUxBnGX0c6qfZW5MaF6/fmu5dHJDMiMPaioKHKs5mi5+8/FHQ7WGjgQIz1zxpmceMYfdIXkOaLYE+ejbuOtA==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -3099,22 +3079,12 @@ packages: wrangler: optional: true - '@react-router/express@7.9.3': - resolution: {integrity: sha512-XNVj/8AfecE1n61bXD41LqpXAixyWBpmBWkrzVA2iG+SrQOb+J6TjqZYEmZmoqJHuHmkOjt6/Iz1f81p93peGQ==} + '@react-router/express@7.9.4': + resolution: {integrity: sha512-qba2YnZXWz8kyXNxXKDa0qS88ct4MwJKMwINmto/LPb08W/YdgRUBSZIw7QnOdN7aFkvWTRGXKBTCcle8WDnRA==} engines: {node: '>=20.0.0'} peerDependencies: express: ^4.17.1 || ^5 - react-router: 7.9.3 - typescript: 5.8.3 - peerDependenciesMeta: - typescript: - optional: true - - '@react-router/node@7.9.3': - resolution: {integrity: sha512-+OvWxPPUgouOshw85QlG0J6yFJM0GMCCpXqPj38IcveeFLlP7ppOAEkOi7RBFrDvg7vSUtCEBDnsbuDCvxUPJg==} - engines: {node: '>=20.0.0'} - peerDependencies: - react-router: 7.9.3 + react-router: 7.9.4 typescript: 5.8.3 peerDependenciesMeta: typescript: @@ -3136,91 +3106,78 @@ packages: '@remix-run/node-fetch-server@0.9.0': resolution: {integrity: sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==} - '@rolldown/binding-android-arm64@1.0.0-beta.42': - resolution: {integrity: sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-android-arm64@1.0.0-beta.34': + resolution: {integrity: sha512-jf5GNe5jP3Sr1Tih0WKvg2bzvh5T/1TA0fn1u32xSH7ca/p5t+/QRr4VRFCV/na5vjwKEhwWrChsL2AWlY+eoA==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.42': - resolution: {integrity: sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-darwin-arm64@1.0.0-beta.34': + resolution: {integrity: sha512-2F/TqH4QuJQ34tgWxqBjFL3XV1gMzeQgUO8YRtCPGBSP0GhxtoFzsp7KqmQEothsxztlv+KhhT9Dbg3HHwHViQ==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.42': - resolution: {integrity: sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-darwin-x64@1.0.0-beta.34': + resolution: {integrity: sha512-E1QuFslgLWbHQ8Qli/AqUKdfg0pockQPwRxVbhNQ74SciZEZpzLaujkdmOLSccMlSXDfFCF8RPnMoRAzQ9JV8Q==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.42': - resolution: {integrity: sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-freebsd-x64@1.0.0-beta.34': + resolution: {integrity: sha512-VS8VInNCwnkpI9WeQaWu3kVBq9ty6g7KrHdLxYMzeqz24+w9hg712TcWdqzdY6sn+24lUoMD9jTZrZ/qfVpk0g==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': - resolution: {integrity: sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': + resolution: {integrity: sha512-4St4emjcnULnxJYb/5ZDrH/kK/j6PcUgc3eAqH5STmTrcF+I9m/X2xvSF2a2bWv1DOQhxBewThu0KkwGHdgu5w==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': - resolution: {integrity: sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': + resolution: {integrity: sha512-a737FTqhFUoWfnebS2SnQ2BS50p0JdukdkUBwy2J06j4hZ6Eej0zEB8vTfAqoCjn8BQKkXBy+3Sx0IRkgwz1gA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': - resolution: {integrity: sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': + resolution: {integrity: sha512-NH+FeQWKyuw0k+PbXqpFWNfvD8RPvfJk766B/njdaWz4TmiEcSB0Nb6guNw1rBpM1FmltQYb3fFnTumtC6pRfA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': - resolution: {integrity: sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': + resolution: {integrity: sha512-Q3RSCivp8pNadYK8ke3hLnQk08BkpZX9BmMjgwae2FWzdxhxxUiUzd9By7kneUL0vRQ4uRnhD9VkFQ+Haeqdvw==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': - resolution: {integrity: sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': + resolution: {integrity: sha512-wDd/HrNcVoBhWWBUW3evJHoo7GJE/RofssBy3Dsiip05YUBmokQVrYAyrboOY4dzs/lJ7HYeBtWQ9hj8wlyF0A==} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': - resolution: {integrity: sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': + resolution: {integrity: sha512-dH3FTEV6KTNWpYSgjSXZzeX7vLty9oBYn6R3laEdhwZftQwq030LKL+5wyQdlbX5pnbh4h127hpv3Hl1+sj8dg==} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': - resolution: {integrity: sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': + resolution: {integrity: sha512-y5BUf+QtO0JsIDKA51FcGwvhJmv89BYjUl8AmN7jqD6k/eU55mH6RJYnxwCsODq5m7KSSTigVb6O7/GqB8wbPw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': - resolution: {integrity: sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': + resolution: {integrity: sha512-ga5hFhdTwpaNxEiuxZHWnD3ed0GBAzbgzS5tRHpe0ObptxM1a9Xrq6TVfNQirBLwb5Y7T/FJmJi3pmdLy95ljg==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': - resolution: {integrity: sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': + resolution: {integrity: sha512-4/MBp9T9eRnZskxWr8EXD/xHvLhdjWaeX/qY9LPRG1JdCGV3DphkLTy5AWwIQ5jhAy2ZNJR5z2fYRlpWU0sIyQ==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': - resolution: {integrity: sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': + resolution: {integrity: sha512-7O5iUBX6HSBKlQU4WykpUoEmb0wQmonb6ziKFr3dJTHud2kzDnWMqk344T0qm3uGv9Ddq6Re/94pInxo1G2d4w==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.42': - resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} + '@rolldown/pluginutils@1.0.0-beta.34': + resolution: {integrity: sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==} '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} @@ -5084,10 +5041,6 @@ packages: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -7968,9 +7921,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.42: - resolution: {integrity: sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==} - engines: {node: ^20.19.0 || >=22.12.0} + rolldown@1.0.0-beta.34: + resolution: {integrity: sha512-Wwh7EwalMzzX3Yy3VN58VEajeR2Si8+HDNMf706jPLIqU7CxneRW+dQVfznf5O0TWTnJyu4npelwg2bzTXB1Nw==} hasBin: true rollup@4.52.4: @@ -9969,7 +9921,7 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.0.6': + '@napi-rs/wasm-runtime@1.0.3': dependencies: '@emnapi/core': 1.5.0 '@emnapi/runtime': 1.5.0 @@ -10317,7 +10269,9 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@oxc-project/types@0.94.0': {} + '@oxc-project/runtime@0.82.3': {} + + '@oxc-project/types@0.82.3': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -10698,21 +10652,14 @@ snapshots: - tsx - yaml - '@react-router/express@7.9.3(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': + '@react-router/express@7.9.4(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': dependencies: - '@react-router/node': 7.9.3(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) + '@react-router/node': 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3) express: 5.1.0 react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) optionalDependencies: typescript: 5.8.3 - '@react-router/node@7.9.3(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': - dependencies: - '@mjackson/node-fetch-server': 0.2.0 - react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - optionalDependencies: - typescript: 5.8.3 - '@react-router/node@7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)': dependencies: '@mjackson/node-fetch-server': 0.2.0 @@ -10724,51 +10671,51 @@ snapshots: '@remix-run/node-fetch-server@0.9.0': {} - '@rolldown/binding-android-arm64@1.0.0-beta.42': + '@rolldown/binding-android-arm64@1.0.0-beta.34': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.42': + '@rolldown/binding-darwin-arm64@1.0.0-beta.34': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.42': + '@rolldown/binding-darwin-x64@1.0.0-beta.34': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.42': + '@rolldown/binding-freebsd-x64@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': dependencies: - '@napi-rs/wasm-runtime': 1.0.6 + '@napi-rs/wasm-runtime': 1.0.3 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': optional: true - '@rolldown/pluginutils@1.0.0-beta.42': {} + '@rolldown/pluginutils@1.0.0-beta.34': {} '@rollup/pluginutils@5.2.0(rollup@4.52.4)': dependencies: @@ -12485,7 +12432,7 @@ snapshots: axe-core@4.10.3: {} - axios@1.12.0(debug@4.4.3): + axios@1.12.0: dependencies: follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.4 @@ -12869,8 +12816,6 @@ snapshots: cookie-signature@1.2.2: {} - cookie@0.6.0: {} - cookie@0.7.1: {} cookie@1.0.2: {} @@ -16020,7 +15965,7 @@ snapshots: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.42)(typescript@5.8.3): + rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.34)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 @@ -16031,33 +15976,34 @@ snapshots: dts-resolver: 2.1.2 get-tsconfig: 4.10.1 magic-string: 0.30.19 - rolldown: 1.0.0-beta.42 + rolldown: 1.0.0-beta.34 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown@1.0.0-beta.42: + rolldown@1.0.0-beta.34: dependencies: - '@oxc-project/types': 0.94.0 - '@rolldown/pluginutils': 1.0.0-beta.42 + '@oxc-project/runtime': 0.82.3 + '@oxc-project/types': 0.82.3 + '@rolldown/pluginutils': 1.0.0-beta.34 ansis: 4.2.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.42 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.42 - '@rolldown/binding-darwin-x64': 1.0.0-beta.42 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.42 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.42 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.42 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.42 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.42 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.42 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.42 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.42 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.42 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42 + '@rolldown/binding-android-arm64': 1.0.0-beta.34 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.34 + '@rolldown/binding-darwin-x64': 1.0.0-beta.34 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.34 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.34 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.34 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.34 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.34 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.34 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.34 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.34 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.34 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.34 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.34 rollup@4.52.4: dependencies: @@ -16749,8 +16695,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.42 - rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.42)(typescript@5.8.3) + rolldown: 1.0.0-beta.34 + rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.34)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.15 From 5b56cd24bf9bad84ace6cafcaae5f26a3ba21900 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 28 Oct 2025 19:00:14 +0530 Subject: [PATCH 03/10] feat: redirect logged-in users to the general page Added a useEffect hook to redirect users to the "/general" route if they are logged in. This enhances user experience by preventing access to the home page for authenticated users. --- apps/admin/app/(all)/(home)/layout.tsx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/admin/app/(all)/(home)/layout.tsx b/apps/admin/app/(all)/(home)/layout.tsx index a73ec5cdd37..97626e7e829 100644 --- a/apps/admin/app/(all)/(home)/layout.tsx +++ b/apps/admin/app/(all)/(home)/layout.tsx @@ -1,11 +1,27 @@ "use client"; +import { useEffect } from "react"; +import { observer } from "mobx-react"; +import { useRouter } from "next/navigation"; import { Outlet } from "react-router"; +// hooks +import { useUser } from "@/hooks/store/use-user"; + +function RootLayout() { + // router + const { replace } = useRouter(); + // store hooks + const { isUserLoggedIn } = useUser(); + + useEffect(() => { + if (isUserLoggedIn === true) replace("/general"); + }, [replace, isUserLoggedIn]); -export default function RootLayout() { return (

); } + +export default observer(RootLayout); From d5871cc599cc8573c3cfe4f0ea837e739c39a394 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 28 Oct 2025 19:05:48 +0530 Subject: [PATCH 04/10] chore: remove mobx-react-lite dependency from admin app --- apps/admin/package.json | 1 - pnpm-lock.yaml | 3 --- 2 files changed, 4 deletions(-) diff --git a/apps/admin/package.json b/apps/admin/package.json index 3ebf4a10705..df3e7789871 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -42,7 +42,6 @@ "lucide-react": "catalog:", "mobx": "catalog:", "mobx-react": "catalog:", - "mobx-react-lite": "^4.0.7", "morgan": "^1.10.1", "next-themes": "^0.2.1", "react": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5fe1e76a5e..f874a2f6814 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -179,9 +179,6 @@ importers: mobx-react: specifier: 'catalog:' version: 9.1.1(mobx@6.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - mobx-react-lite: - specifier: ^4.0.7 - version: 4.1.0(mobx@6.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) morgan: specifier: ^1.10.1 version: 1.10.1 From c1077af6f3e9139485ae1657544310ffb62fc61d Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 28 Oct 2025 19:22:41 +0530 Subject: [PATCH 05/10] feat: add Gitea authentication route and update header - Introduced a new route for Gitea authentication in the admin panel. - Updated the AdminHeader component to include Gitea as an authentication option. - Removed the unused Gitea layout file. - Enhanced the Gitea authentication page with metadata for improved SEO. --- .../(all)/(dashboard)/authentication/gitea/layout.tsx | 10 ---------- .../(all)/(dashboard)/authentication/gitea/page.tsx | 8 +++----- apps/admin/app/(all)/(dashboard)/header.tsx | 2 ++ apps/admin/app/routes.ts | 1 + 4 files changed, 6 insertions(+), 15 deletions(-) delete mode 100644 apps/admin/app/(all)/(dashboard)/authentication/gitea/layout.tsx diff --git a/apps/admin/app/(all)/(dashboard)/authentication/gitea/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitea/layout.tsx deleted file mode 100644 index 9526d13fbb4..00000000000 --- a/apps/admin/app/(all)/(dashboard)/authentication/gitea/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { ReactNode } from "react"; -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Gitea Authentication - God Mode", -}; - -export default function GiteaAuthenticationLayout({ children }: { children: ReactNode }) { - return <>{children}; -} diff --git a/apps/admin/app/(all)/(dashboard)/authentication/gitea/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitea/page.tsx index 74834638f18..044b428663a 100644 --- a/apps/admin/app/(all)/(dashboard)/authentication/gitea/page.tsx +++ b/apps/admin/app/(all)/(dashboard)/authentication/gitea/page.tsx @@ -3,18 +3,17 @@ import { useState } from "react"; import { observer } from "mobx-react"; import Image from "next/image"; -import { useTheme } from "next-themes"; import useSWR from "swr"; // plane internal packages import { setPromiseToast } from "@plane/propel/toast"; import { Loader, ToggleSwitch } from "@plane/ui"; // components +import giteaLogo from "@/app/assets/logos/gitea-logo.svg?url"; import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; -// icons -import giteaLogo from "@/public/logos/gitea-logo.svg"; //local components +import type { Route } from "./+types/page"; import { InstanceGiteaConfigForm } from "./form"; const InstanceGiteaAuthenticationPage = observer(() => { @@ -22,8 +21,6 @@ const InstanceGiteaAuthenticationPage = observer(() => { const { fetchInstanceConfigurations, formattedConfig, updateInstanceConfigurations } = useInstance(); // state const [isSubmitting, setIsSubmitting] = useState(false); - // theme - const { resolvedTheme } = useTheme(); // config const enableGiteaConfig = formattedConfig?.IS_GITEA_ENABLED ?? ""; useSWR("INSTANCE_CONFIGURATIONS", () => fetchInstanceConfigurations()); @@ -100,5 +97,6 @@ const InstanceGiteaAuthenticationPage = observer(() => { ); }); +export const meta: Route.MetaFunction = () => [{ title: "Gitea Authentication - God Mode" }]; export default InstanceGiteaAuthenticationPage; diff --git a/apps/admin/app/(all)/(dashboard)/header.tsx b/apps/admin/app/(all)/(dashboard)/header.tsx index 82d7241f61f..900f5abeddf 100644 --- a/apps/admin/app/(all)/(dashboard)/header.tsx +++ b/apps/admin/app/(all)/(dashboard)/header.tsx @@ -44,6 +44,8 @@ export const AdminHeader: FC = observer(() => { return "GitHub"; case "gitlab": return "GitLab"; + case "gitea": + return "Gitea"; case "workspace": return "Workspace"; case "create": diff --git a/apps/admin/app/routes.ts b/apps/admin/app/routes.ts index fba19dcefb3..0f7232439fb 100644 --- a/apps/admin/app/routes.ts +++ b/apps/admin/app/routes.ts @@ -12,6 +12,7 @@ export default [ route("authentication/github", "./(all)/(dashboard)/authentication/github/page.tsx"), route("authentication/gitlab", "./(all)/(dashboard)/authentication/gitlab/page.tsx"), route("authentication/google", "./(all)/(dashboard)/authentication/google/page.tsx"), + route("authentication/gitea", "./(all)/(dashboard)/authentication/gitea/page.tsx"), route("ai", "./(all)/(dashboard)/ai/page.tsx"), route("image", "./(all)/(dashboard)/image/page.tsx"), ]), From c37b9621e414089530574e48f1818b2fabd6f0d3 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Wed, 29 Oct 2025 16:34:35 +0530 Subject: [PATCH 06/10] fix: format --- apps/admin/.eslintrc.cjs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/apps/admin/.eslintrc.cjs b/apps/admin/.eslintrc.cjs index af3135e6a54..d6a1fc83366 100644 --- a/apps/admin/.eslintrc.cjs +++ b/apps/admin/.eslintrc.cjs @@ -1,14 +1,10 @@ module.exports = { root: true, extends: ["@plane/eslint-config/next.js"], - ignorePatterns: [ - "build/**", - "dist/**", - ".vite/**", - ], + ignorePatterns: ["build/**", "dist/**", ".vite/**"], rules: { "no-duplicate-imports": "off", - "import/no-duplicates": ["error", {"prefer-inline": false}], + "import/no-duplicates": ["error", { "prefer-inline": false }], "import/consistent-type-specifier-style": ["error", "prefer-top-level"], "@typescript-eslint/no-import-type-side-effects": "error", "@typescript-eslint/consistent-type-imports": [ @@ -21,5 +17,3 @@ module.exports = { ], }, }; - - From 25dd6fdbb57c36f8897bd816c1053c8dab08cc86 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 3 Nov 2025 14:02:22 +0530 Subject: [PATCH 07/10] fix: update admin deployment configs --- apps/admin/Dockerfile.admin | 2 +- apps/admin/nginx/nginx.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin index fe1597c9f66..6af4ff6c3b6 100644 --- a/apps/admin/Dockerfile.admin +++ b/apps/admin/Dockerfile.admin @@ -76,7 +76,7 @@ RUN pnpm turbo run build --filter=admin FROM nginx:1.27-alpine AS production COPY apps/admin/nginx/nginx.conf /etc/nginx/nginx.conf -COPY --from=installer /app/apps/admin/build/client /usr/share/nginx/html +COPY --from=installer /app/apps/admin/build/client /usr/share/nginx/html/god-mode EXPOSE 3000 diff --git a/apps/admin/nginx/nginx.conf b/apps/admin/nginx/nginx.conf index 388642c8030..243aebff54d 100644 --- a/apps/admin/nginx/nginx.conf +++ b/apps/admin/nginx/nginx.conf @@ -23,7 +23,7 @@ http { location / { root /usr/share/nginx/html; index index.html index.htm; - try_files $uri $uri/ /index.html; + try_files $uri $uri/ /god-mode/index.html; } } } \ No newline at end of file From 4c8e1adeb17e51df8e60d02b80b5f8c127096fd3 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 3 Nov 2025 14:14:16 +0530 Subject: [PATCH 08/10] feat: integrate BProgress for navigation feedback in admin app - Added AppProgressBar component to display a progress bar during navigation. - Configured BProgress with custom settings for improved user experience. - Updated dependencies in pnpm-lock and package.json to include @bprogress/core. - Added global styles for the progress bar in globals.css. --- apps/admin/app/providers.tsx | 2 + .../core/lib/b-progress/AppProgressBar.tsx | 125 ++++++++++++++++++ apps/admin/core/lib/b-progress/index.tsx | 1 + apps/admin/package.json | 1 + apps/admin/styles/globals.css | 27 ++++ pnpm-lock.yaml | 6 + pnpm-workspace.yaml | 1 + 7 files changed, 163 insertions(+) create mode 100644 apps/admin/core/lib/b-progress/AppProgressBar.tsx create mode 100644 apps/admin/core/lib/b-progress/index.tsx diff --git a/apps/admin/app/providers.tsx b/apps/admin/app/providers.tsx index 30a87df088f..841e4cf38fa 100644 --- a/apps/admin/app/providers.tsx +++ b/apps/admin/app/providers.tsx @@ -2,6 +2,7 @@ import { ThemeProvider } from "next-themes"; import { SWRConfig } from "swr"; +import { AppProgressBar } from "@/lib/b-progress"; import { InstanceProvider } from "./(all)/instance.provider"; import { StoreProvider } from "./(all)/store.provider"; import { ToastWithTheme } from "./(all)/toast"; @@ -19,6 +20,7 @@ const DEFAULT_SWR_CONFIG = { export function AppProviders({ children }: { children: React.ReactNode }) { return ( + diff --git a/apps/admin/core/lib/b-progress/AppProgressBar.tsx b/apps/admin/core/lib/b-progress/AppProgressBar.tsx new file mode 100644 index 00000000000..7596e359a7b --- /dev/null +++ b/apps/admin/core/lib/b-progress/AppProgressBar.tsx @@ -0,0 +1,125 @@ +"use client"; + +import { useEffect, useRef } from "react"; +import { BProgress } from "@bprogress/core"; +import { useNavigation } from "react-router"; +import "@bprogress/core/css"; + +/** + * Progress bar configuration options + */ +interface ProgressConfig { + /** Whether to show the loading spinner */ + showSpinner: boolean; + /** Minimum progress percentage (0-1) */ + minimum: number; + /** Animation speed in milliseconds */ + speed: number; + /** Auto-increment speed in milliseconds */ + trickleSpeed: number; + /** CSS easing function */ + easing: string; + /** Enable auto-increment */ + trickle: boolean; + /** Delay before showing progress bar in milliseconds */ + delay: number; +} + +/** + * Configuration for the progress bar + */ +const PROGRESS_CONFIG: Readonly = { + showSpinner: false, + minimum: 0.1, + speed: 400, + trickleSpeed: 800, + easing: "ease", + trickle: true, + delay: 0, +} as const; + +/** + * Navigation Progress Bar Component + * + * Automatically displays a progress bar at the top of the page during React Router navigation. + * Integrates with React Router's useNavigation hook to monitor route changes. + * + * @returns null - This component doesn't render any visible elements + * + * @example + * ```tsx + * function App() { + * return ( + * <> + * + * + * + * ); + * } + * ``` + */ +export function AppProgressBar(): null { + const navigation = useNavigation(); + const timerRef = useRef | null>(null); + const startedRef = useRef(false); + + // Initialize BProgress once on mount + useEffect(() => { + // Configure BProgress with our settings + BProgress.configure({ + showSpinner: PROGRESS_CONFIG.showSpinner, + minimum: PROGRESS_CONFIG.minimum, + speed: PROGRESS_CONFIG.speed, + trickleSpeed: PROGRESS_CONFIG.trickleSpeed, + easing: PROGRESS_CONFIG.easing, + trickle: PROGRESS_CONFIG.trickle, + }); + + // Render the progress bar element in the DOM + BProgress.render(true); + + // Cleanup on unmount + return () => { + if (BProgress.isStarted()) { + BProgress.done(); + } + }; + }, []); + + // Handle navigation state changes + useEffect(() => { + if (navigation.state === "idle") { + // Navigation complete - clear any pending timer + if (timerRef.current !== null) { + clearTimeout(timerRef.current); + timerRef.current = null; + } + + // Complete progress if it was started + if (startedRef.current) { + BProgress.done(); + startedRef.current = false; + } + } else { + // Navigation in progress (loading or submitting) + // Only start if not already started and no timer pending + if (timerRef.current === null && !startedRef.current) { + timerRef.current = setTimeout((): void => { + if (!BProgress.isStarted()) { + BProgress.start(); + startedRef.current = true; + } + timerRef.current = null; + }, PROGRESS_CONFIG.delay); + } + } + + return () => { + if (timerRef.current !== null) { + clearTimeout(timerRef.current); + } + }; + }, [navigation.state]); + + return null; +} diff --git a/apps/admin/core/lib/b-progress/index.tsx b/apps/admin/core/lib/b-progress/index.tsx new file mode 100644 index 00000000000..7b531da2b25 --- /dev/null +++ b/apps/admin/core/lib/b-progress/index.tsx @@ -0,0 +1 @@ +export * from "./AppProgressBar"; diff --git a/apps/admin/package.json b/apps/admin/package.json index df3e7789871..b66a1ffe0a3 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -18,6 +18,7 @@ "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"" }, "dependencies": { + "@bprogress/core": "catalog:", "@headlessui/react": "^1.7.19", "@plane/constants": "workspace:*", "@plane/hooks": "workspace:*", diff --git a/apps/admin/styles/globals.css b/apps/admin/styles/globals.css index 11954a26be3..53c55a53349 100644 --- a/apps/admin/styles/globals.css +++ b/apps/admin/styles/globals.css @@ -394,3 +394,30 @@ body { :-ms-input-placeholder { color: rgb(var(--color-text-400)); } + +/* Progress Bar Styles */ +:root { + --bprogress-color: rgb(var(--color-primary-100)) !important; + --bprogress-height: 2.5px !important; +} + +.bprogress { + pointer-events: none; +} + +.bprogress .bar { + background: linear-gradient( + 90deg, + rgba(var(--color-primary-100), 0.8) 0%, + rgba(var(--color-primary-100), 1) 100% + ) !important; + will-change: width, opacity; +} + +.bprogress .peg { + display: block; + box-shadow: + 0 0 8px rgba(var(--color-primary-100), 0.6), + 0 0 4px rgba(var(--color-primary-100), 0.4) !important; + will-change: transform, opacity; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa4058e0d78..bb4d5653c3c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,9 @@ catalogs: '@atlaskit/pragmatic-drag-and-drop-hitbox': specifier: 1.1.0 version: 1.1.0 + '@bprogress/core': + specifier: ^1.3.4 + version: 1.3.4 '@sentry/node': specifier: 10.5.0 version: 10.5.0 @@ -107,6 +110,9 @@ importers: apps/admin: dependencies: + '@bprogress/core': + specifier: 'catalog:' + version: 1.3.4 '@headlessui/react': specifier: ^1.7.19 version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index eff6fdd71c1..e797315ac9f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,6 +8,7 @@ catalog: "@atlaskit/pragmatic-drag-and-drop-auto-scroll": 1.4.0 "@atlaskit/pragmatic-drag-and-drop-hitbox": 1.1.0 "@atlaskit/pragmatic-drag-and-drop": 1.7.4 + "@bprogress/core": ^1.3.4 "@sentry/node": 10.5.0 "@sentry/profiling-node": 10.5.0 axios: 1.12.0 From bd092a531ecc95df1e9ab44810c70a0ffe75ae4c Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 3 Nov 2025 15:11:49 +0530 Subject: [PATCH 09/10] fix: update X-Frame-Options header in admin middleware to SAMEORIGIN --- apps/admin/middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/admin/middleware.js b/apps/admin/middleware.js index 6d9e71f07e7..24034817e27 100644 --- a/apps/admin/middleware.js +++ b/apps/admin/middleware.js @@ -4,7 +4,7 @@ export default function middleware() { return next({ headers: { 'Referrer-Policy': 'origin-when-cross-origin', - 'X-Frame-Options': 'DENY', + 'X-Frame-Options': 'SAMEORIGIN', 'X-Content-Type-Options': 'nosniff', 'X-DNS-Prefetch-Control': 'on', 'Strict-Transport-Security': From cb1ae94889568c613f496bb4ae093eec8461654d Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 3 Nov 2025 15:56:58 +0530 Subject: [PATCH 10/10] Revert "fix: update X-Frame-Options header in admin middleware to SAMEORIGIN" This reverts commit bd092a531ecc95df1e9ab44810c70a0ffe75ae4c. --- apps/admin/middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/admin/middleware.js b/apps/admin/middleware.js index 24034817e27..6d9e71f07e7 100644 --- a/apps/admin/middleware.js +++ b/apps/admin/middleware.js @@ -4,7 +4,7 @@ export default function middleware() { return next({ headers: { 'Referrer-Policy': 'origin-when-cross-origin', - 'X-Frame-Options': 'SAMEORIGIN', + 'X-Frame-Options': 'DENY', 'X-Content-Type-Options': 'nosniff', 'X-DNS-Prefetch-Control': 'on', 'Strict-Transport-Security':