@cryptotaxi247 / CoPilot / commits / 0dc6b6ff

Feat/shuffle mcps bump and trymcp (#875)

* feat(shuffle-mcps): bump to 0.0.5 + Try MCP tab on alert detail v0.0.5 ships the rest of the demo's components (AppSearchDrawer, AppDetailDrawer, AppAuthSection, TryMcpSection, SingulActionsPreview) plus hooks (useAppLookup, useAppAuth, useAppDetail) and the setToastImpl facade. We were stuck on 0.0.4 which only exported ShuffleMCP. Bump unlocks all of it. What this PR ships: 1. **Bump** `@shuffleio/shuffle-mcps` 0.0.4 → 0.0.5 (frontend/package.json + lockfile). 2. **Toast bridge** (`ShuffleToastBridge.vue`). New no-op-rendering component mounted inside `<n-message-provider>` in `Provider.vue`. Calls `setToastImpl(...)` once with a `useMessage()` adapter so the package's internal toasts (auth saved, test connection results, errors) surface as Naive UI messages instead of falling back to console.warn. 3. **Try MCP tab on alert detail.** Analyst can pick an app from Shuffle's catalog while reading an alert and chat against that app's MCP tools (block IP, isolate host, lookup hash, …) without leaving the alert view. - `TryMcpEmbed.vue` — Vue wrapper around the React `<TryMcpSection>`. Same manual `react-dom/client` mount as `ShuffleMCPEmbed`. Inline React component uses `useAppLookup(name)` to resolve the app's Algolia id before mounting `<TryMcpSection>`. Auth via global `API_CONFIG.setApiKey(token)` on mount. - `AlertTryMcp.vue` — tab content. Loads the alert customer's Shuffle integration, fetches the org auth token (same flow as the existing CustomerShuffleAppsDrawer), renders `<ShuffleMCPEmbed>` as the app picker, then swaps in `<TryMcpEmbed>` once an app is chosen. "Pick a different app" resets. Surfaces clear messages for the no-customer / no-integration / token-fetch-failed paths. - `AlertDetails.vue` — new tab pane labelled "Try MCP" with a `carbon:bot` icon, async-imported alongside the rest. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(frontend): pin @mui/icons-material to v7 to unblock vite dev server Vite/esbuild failed to start the frontend after bumping shuffle-mcps to 0.0.5: Could not resolve "@mui/icons-material/CheckCircleOutline" The module "./CheckCircleOutline.mjs" was not found on the file system Cause: shuffle-mcps imports `@mui/icons-material/CheckCircleOutline` (the unsuffixed/filled variant). v9.0.1 — the latest matching the package's `>=5` peer constraint — dropped that filename in a naming reorganization (only `CheckCircleOutlineOutlined`, `*Rounded`, `*Sharp` remain). The package's `exports` field still maps `./*` → `./*.mjs`, so vite tries to resolve a `.mjs` file that doesn't exist. Pin @mui/icons-material and @mui/material to v7 via `pnpm.overrides`. v7.3.x has the file, the exports map points at the correct `./esm/*.js`, and vite resolves cleanly. Same major as the rest of the v7 era so no compat surprises with shuffle-mcps's React/MUI usage. Lockfile regenerated from scratch (rm node_modules + pnpm-lock.yaml, fresh `pnpm install`) — pnpm was reusing cached 9.0.1 resolutions otherwise. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): plumb connector API key into ShuffleMCP embeds Fixes the recurring CORS noise: Access to fetch at 'https://shuffler.io/api/v1/apps' from origin 'http://localhost:5173' has been blocked by CORS policy Failed to fetch private apps: TypeError: Failed to fetch ShuffleMCP's private-apps fetch (`/api/v1/apps`) was unauthenticated because we never passed an `apiKey` prop. Without auth the package hits shuffler.io directly with no Authorization header, and shuffler.io's CORS policy doesn't whitelist arbitrary origins. With the Shuffle connector's `connector_api_key` (already stored in the deployment-wide `connectors` table) routed in, the request lands on whichever Shuffle backend the connector points at and is allowed to bypass the CORS preflight when that backend's auth tier is permissive. What this PR adds: - **Backend**: new `GET /api/shuffle/integrations/credentials` endpoint (admin/analyst). Reads the Shuffle row from the connectors table via the existing `get_connector_info_from_db` helper and returns just `{base_url, api_key}` — narrower than the generic `GET /connectors/{id}` which exposes everything. - **Frontend API**: `Api.shuffle.getConnectorCredentials()` wraps the new endpoint. - **Cache module**: `composables/shuffleConnectorCredentials.ts` — single-fetch promise cache so every embed in the session shares one round-trip; errors cache as `null` (no retry). - **`ShuffleMCPEmbed.vue`**: loads creds on mount and re-renders with `apiKey` + `apiBaseUrl` set. Caller-provided overrides still win, and the first paint is unblocked (renders before the fetch lands). - **`TryMcpEmbed.vue`**: same pattern via `API_CONFIG.setApiKey()`. Falls back to the per-customer org auth token if connector creds aren't configured. Switches to the connector key once it loads. Existing call sites (`ShuffleAppAuth.vue`, `CustomerShuffleAppsDrawer.vue`, the new `AlertTryMcp.vue`) need no changes — the wrappers self-fetch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): same-origin proxy + first-render gating for embeds Two fixes for the residual CORS noise on the ShuffleMCP / TryMcp embeds: **1. First-render race** The package fires its private/authenticated apps fetches eagerly on mount. Previously we rendered immediately with default config and then re-rendered once `fetchShuffleConnectorCredentials()` resolved — by which time the first request had already gone out to `shuffler.io` with no apiKey, eating a 401 + CORS preflight rejection. Now both wrappers (`ShuffleMCPEmbed.vue`, `TryMcpEmbed.vue`) await the creds before the first React render. One async tick of latency on mount; clean console. **2. Hosted Shuffle CORS** Even with the right apiKey, the hosted Shuffle backends (e.g. `california.shuffler.io`) refuse the CORS preflight from CoPilot's origin. The browser blocks the request before auth even matters. Fix by making the embed talk same-origin: a new `/api/shuffle/proxy/{path:path}` route on the FastAPI side that: - Validates the Bearer token against the stored `connectors.connector_api_key`. - Reads `connector_url` from the DB at request time (so URL/key rotations don't require a redeploy). - Forwards the method, query params, body, and (filtered) headers to `connector_url + path` via httpx. - Strips hop-by-hop headers in both directions per RFC 7230 §6.1. - Returns the upstream response unchanged otherwise. The `/credentials` endpoint now returns `base_url='/api/shuffle/proxy'` instead of the raw Shuffle URL — the embed never knows where the real Shuffle lives. The api_key it returns is still the connector key, which functions as the proxy's auth gate (only callers who already passed admin/analyst auth on `/credentials` have it). OAuth handoff redirects (`/appauth`) will currently route through the proxy too — those need separate handling because they're top-level navigations, not XHR. Deferred to a follow-up since the immediate visible breakage is the CORS console spam, which this fixes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(shuffle): /credentials returns the actual proxy mount path The proxy route lives at `/api/shuffle/integrations/proxy/{path}` because it's on the integrations router (prefixed `/shuffle/integrations`), but `/credentials` was returning `base_url='/api/shuffle/proxy'` — missing the `/integrations` segment. The browser correctly hit the same-origin URL Vite forwarded to the backend, but the backend 404'd because nothing was mounted at that path. One-line fix: match the credentials response to where the proxy actually lives. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): proxy /appauth with a 302 redirect to the real Shuffle URL Picking an app like Office365 in the embed triggers an OAuth handoff via the package's `appAuthPath` (default `/appauth`). The package builds the URL by appending it to `apiBaseUrl` and opens it as a top-level navigation. With our same-origin `apiBaseUrl='/api/shuffle/integrations/proxy'`, that resolved to `/api/shuffle/integrations/proxy/appauth?app_id=…&auth=…` — and the proxy 401'd because: 1. Top-level navigations don't carry an Authorization header (browsers only attach it on fetch/XHR), so the Bearer check rejected the request before it could do anything. 2. Even if the request reached the forwarder, the OAuth dance has to land on Shuffle's real URL — that's where Shuffle redirects out to the third-party provider (Microsoft, Google, etc.). Fix: special-case `path == "appauth"` in the proxy. Skip the Bearer check (the URL exposes no secrets — just the OAuth state Shuffle already handed to the browser) and 302-redirect to `${connector_url}/appauth?<qs>` so the user lands on the real Shuffle backend for the OAuth flow. All other paths still require the Bearer token (= the connector API key) as before. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(shuffle): point /appauth redirect at shuffler.io (not the regional backend) Shuffle's OAuth handoff UI lives on the canonical `shuffler.io` host, not on the regional API backend (`california.shuffler.io`, `virginia.shuffler.io`, etc.). `connector_url` is the *API* backend — right for XHR proxying, wrong for the OAuth top-level navigation. Hardcode the appauth redirect target to `https://shuffler.io/appauth` and pass the query string through unchanged. The OAuth session id + app id Shuffle generated still resolve correctly because Shuffle's authoritative auth state lives on the canonical host. Self-hosted Shuffle deployments aren't covered by this hardcode — would need a connector config field or env var if/when a self-hosted user needs different behavior. Hosted shuffler.io is by far the common case; deferring the configurability until someone hits it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): inline AppDetailDrawer for non-OAuth (API-key) auth ShuffleMCP's default behaviour redirects every selected app to shuffler.io's hosted /appauth handoff page. That works for OAuth apps (Office 365, Google) but is overkill for API-key/URL apps like IRIS v2, where the auth is just two text fields. Now picking any app in CoPilot opens the package's <AppDetailDrawer> instead — the drawer renders an inline auth form for credential-based apps (admin fills, hits Save, done) and still triggers the OAuth redirect from a button inside the drawer for OAuth-based apps. Components: - New `AppDetailDrawerEmbed.vue` — Vue wrapper around React <AppDetailDrawer>, mirrors the ShuffleMCPEmbed/TryMcpEmbed mount pattern. Awaits connector creds before first render so the drawer's internal fetches (auth save, MCP chat, action playground) all hit the same-origin proxy with the right Bearer token. - `ShuffleAppAuth.vue` (External Services page) — picker now sets `prevent-default` so clicks fire `app-selected` instead of redirecting; the handler opens AppDetailDrawerEmbed for that app. - `CustomerShuffleAppsDrawer.vue` (per-customer Manage apps drawer) — same pattern. The success-toast on selection went away because the drawer is now the next step (replaces the "auth initiated, refresh to use it" message — admin sees and acts on the result directly). `AlertTryMcp.vue` keeps its current ShuffleMCPEmbed → TryMcpEmbed flow (scoped to "take action via MCP", not "configure auth"); could be unified with AppDetailDrawer in a follow-up since AppDetailDrawer also contains the chat panel, but doing it later keeps this slice focused. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(shuffle): set VITE_SHUFFLE_API_URL so all embeds route through proxy `<ShuffleMCP>` accepts an `apiBaseUrl` prop, but the rest of the package's components — `<AppDetailDrawer>`, `<TryMcpSection>`, `<SingulActionsPreview>`, etc. — ignore props and read straight from the package-internal `API_CONFIG.baseUrl` getter. Inspecting v0.0.5's bundled source: var getDefaultBaseUrl = () => { const envUrl = getEnvVar("VITE_SHUFFLE_API_URL"); if (envUrl) return envUrl; ... if (typeof window !== "undefined") return window.location.origin; return PROD_BACKEND; }; `getEnvVar` reads `import.meta.env.VITE_*`. With nothing set, the getter falls through to `window.location.origin` — that's why the AppDetailDrawer was hitting `http://localhost:5173/api/v1/apps/...` and 404'ing against Vite directly. Default `VITE_SHUFFLE_API_URL=/api/shuffle/integrations/proxy` in `vite.config.ts` (only when not already set, so .env files still win) and document it in `.env.example`. After this every embed routes through the same-origin proxy regardless of whether the consumer remembered to pass an explicit `apiBaseUrl` prop. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(shuffle): inject VITE_SHUFFLE_API_URL via Vite `define` text-replacement Setting `process.env.VITE_SHUFFLE_API_URL` in `vite.config.ts` was a no-op — Vite only auto-pipes env vars from `.env` files into `import.meta.env`, not from process.env at config-load time. The package was still reading the empty value, falling through to `window.location.origin`, and 404-ing against the dev server. Use `define` instead so Vite does literal text replacement of `import.meta.env.VITE_SHUFFLE_API_URL` in every module (source + pre-bundled deps). Any explicit env (.env file or shell) still wins because we read process.env first. One-time cleanup needed on each developer's machine: `rm -rf node_modules/.vite` to drop stale pre-bundled deps. Vite caches optimized deps with `import.meta.env` already substituted; without a cache clear, restarts keep serving the old bundle with the old value. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(shuffle): override API_CONFIG.baseUrl at runtime instead of via env We've tried three ways to make `@shuffleio/shuffle-mcps` use our same-origin proxy: `process.env` assignment in `vite.config.ts`, Vite `define` text-replacement, and a developer-local `frontend/.env` value. None held up reliably across the matrix of cached pre-bundled deps in `node_modules/.vite`, fresh clones (`.env` is gitignored), and HMR vs full restart. The user kept seeing AppDetailDrawer's fetches go to `localhost:5173/api/v1/apps/...` instead of through the proxy. Switch strategies entirely. `API_CONFIG.baseUrl` is a JS getter on a plain object exported by the package — override it at runtime via `Object.defineProperty` and never look back. The package's `getApiUrl` helper re-reads `API_CONFIG.baseUrl` per request, so the override takes effect immediately for all subsequent fetches. Wired up: - New `composables/installShuffleApiBase.ts`. IIFE installs the override on first import; subsequent imports are no-ops. The property descriptor is `configurable: true` so future package versions could re-install if needed. - Side-effect import at the top of `ShuffleMCPEmbed.vue`, `TryMcpEmbed.vue`, `AppDetailDrawerEmbed.vue`. Critical: the install import must precede the `@shuffleio/shuffle-mcps` import so the override is in place before the package's module-init code runs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(shuffle): drop unused VITE_SHUFFLE_API_URL plumbing Earlier commits tried to set the Shuffle API base via Vite `define` text-replacement and a documented `.env.example` entry. The previous commit (0cacc1aa) switched to a runtime `Object.defineProperty` override on `API_CONFIG.baseUrl` because the env-var path was unreliable across cached pre-bundled deps, gitignored `.env` files, and HMR vs full restarts. The runtime override is now the single source of truth, so the env plumbing is dead weight that misleadingly suggests env vars control the routing. Drop the `define` entry and the `.env.example` note; revert vite.config.ts to its pre-Shuffle state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): wrap embeds in a MUI ThemeProvider matching CoPilot's theme `@shuffleio/shuffle-mcps` is built on `@mui/material`. Without a ThemeProvider, MUI components render with their default light-mode palette — translucent against CoPilot's dark backdrop, which made the AppDetailDrawer's auth form practically unreadable. Shared MUI theme bridge: - New `composables/shuffleMuiTheme.ts` exports `getMuiTheme(isDark)` (memoised, light + dark) and a small `<MuiProvider>` React component that wraps children in MUI's `ThemeProvider`. - We don't pipe Naive UI's full token set into MUI (different palette semantics, huge surface). Just the light/dark mode plus a slightly elevated paper background for dark mode so drawer/menu surfaces sit visibly above the page. Typography family inherits CoPilot's "Public Sans" so embeds don't introduce a second typeface mid-view. Wired into all three React-mount wrappers — ShuffleMCPEmbed, TryMcpEmbed, AppDetailDrawerEmbed — each now: - Reads `useThemeStore().isThemeDark` via `storeToRefs`. - Wraps its createElement(...) call with `<MuiProvider isDark={...}>`. - Adds a watch on `isThemeDark` so toggling CoPilot's theme re-renders the React tree with the matching MUI theme. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): Bump MCPS; refactor pnpm setup * fix(secure-storage): Adapt secure-ls import * feat(shuffle): Add charting and UI dependencies * lint * feat(shuffle): Support more toast variants * chore(deps): Bump TypeScript and Vite * chore(deps): Bump @mui/material * feat(shuffle): Add frontend dependencies * refactor(env): Migrate to import.meta.env * build(vite): Suppress Rolldown warnings & devtools * build(docker): Upgrade Node.js and pnpm * build(pnpm): Exclude deps from trust policy * refactor(toast): Remove toast bridge component * refactor(toast): Move toast bridge to composable * feat(shuffle): Configure API base URL * refactor(shuffle): Move files to utils * refactor(shuffle): Move Shuffle components * refactor(shuffle): Use Shuffle MCPs types * feat(theme): Standardize theme and integrate MUI * refactor(shuffle): drop CORS proxy now that Shuffle backends accept cross-origin The Shuffle team has fixed CORS on shuffler.io (and the regional backends), so the browser-side `<ShuffleMCP>` / `<TryMcpSection>` / `<AppDetailDrawer>` embeds can hit Shuffle directly. The same-origin proxy we built as a workaround is no longer needed. Removed from app/connectors/shuffle/routes/integrations.py: - `* /api/shuffle/integrations/proxy/{path:path}` route (forwarded authenticated XHR to `connector_url + path` server-side). - The `/appauth` 302 special case that handled OAuth handoff (browsers won't set Authorization on a navigation, so it had to bypass the proxy's Bearer check by redirecting to shuffler.io). - `_HOP_BY_HOP_HEADERS` constant + the now-unused httpx, Request, Response, and RedirectResponse imports. Changed `GET /api/shuffle/integrations/credentials` payload: - `base_url` now returns the real `connector_url` from the connectors table (e.g. https://shuffler.io, or a regional / self-hosted host), trailing slash stripped — not the same-origin proxy path. The frontend on this branch still wires `apiBaseUrl` through the old proxy path; the corresponding FE refactor (move the API_CONFIG.baseUrl override out of `VITE_SHUFFLE_API_BASE_URL` and into the credentials fetcher) is being handled by our frontend developer in a follow-up commit on this same branch. The two need to land together — once both sides ship, the embeds talk to Shuffle directly. Verified: backend boots clean (`Application startup complete`); the OpenAPI surface for `/api/shuffle/integrations/...` now shows only `/credentials`, `/execute`, `/invoke-workflow`; a probe to the deleted `/proxy/foo` returns 404. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(shuffle): Bump MCPs dependency * refactor(shuffle): Dynamically configure Shuffle API base URL * feat(theme): Refine MUI component styling * refactor(shuffle): Move app detail drawer to MCP embed * fix(theme): Update background color variable in CSS vars and adjust MuiDrawer zIndex * feat(alerts): Enhance AlertAiAnalyst component layout and styling - Updated the layout of the report selection and summary display for better usability. - Introduced a new CardEntity component for displaying report summaries. - Improved report options formatting to include job IDs and relative time. - Added a background color to the CSS overrides for better visual consistency. * refactor(alerts): Improve layout and styling of IoCs list and alert components - Wrapped IoCs list in a CollapseKeepAlive component for better state management. - Adjusted CSS for alert display, enhancing visual consistency. - Updated button styling for improved user experience. * chore(dependencies): Update package versions in package.json - Bumped versions for apexcharts, @vitejs/plugin-vue, eslint, jscpd, and taze to their latest releases for improved performance and features. * refactor(alerts): Enhance AlertTryMcp component layout and styling - Wrapped ShuffleMCPEmbed in a CollapseKeepAlive for improved state management. - Added n-collapse-transition for TryMcpEmbed to enhance visual transitions. - Adjusted loading message styling in TryMcpEmbed for better alignment. - Updated MuiDrawer zIndex for improved layering in the theme. * precommit-fixes * chore(version): bump current version to 0.1.65 --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>

taylor_socfortress committed May 15, 2026 at 16:17 UTC 0dc6b6ff821bc7d9d0a33c602ac6f66c7e164014
41 files changed +3361 -1883
.cursor/rules new
+1
@@ -0,0 +1 @@
1 +/Users/linko/Projects/cursor-global/agent
\ No newline at end of file
backend/app/connectors/shuffle/routes/integrations.py
+41
@@ -1,16 +1,57 @@
1 from fastapi import APIRouter
2 +from fastapi import Depends
3 +from fastapi import HTTPException
4 from fastapi import Security
5 from loguru import logger
6 +from sqlalchemy.ext.asyncio import AsyncSession
7
8 from app.auth.utils import AuthHandler
9 from app.connectors.shuffle.schema.integrations import ExecuteWorkflowRequest
10 from app.connectors.shuffle.schema.integrations import IntegrationRequest
11 +from app.connectors.shuffle.schema.integrations import (
12 + ShuffleConnectorCredentialsResponse,
13 +)
14 from app.connectors.shuffle.services.integrations import execute_integration
15 from app.connectors.shuffle.services.integrations import execute_workflow
16 +from app.connectors.utils import get_connector_info_from_db
17 +from app.db.db_session import get_db
18
19 shuffle_integrations_router = APIRouter()
20
21
22 +@shuffle_integrations_router.get(
23 + "/credentials",
24 + response_model=ShuffleConnectorCredentialsResponse,
25 + description="Return the Shuffle connector base URL + API key for the embedded MCP picker.",
26 + dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
27 +)
28 +async def get_shuffle_connector_credentials(
29 + session: AsyncSession = Depends(get_db),
30 +) -> ShuffleConnectorCredentialsResponse:
31 + """Return the deployment-wide Shuffle connector URL + API key for the
32 + embedded `<ShuffleMCP>` / `<TryMcpSection>` / `<AppDetailDrawer>`
33 + React components. The browser talks to Shuffle directly now that the
34 + Shuffle team has fixed CORS on their backends — base_url is the real
35 + connector URL (e.g. https://shuffler.io or a regional/self-hosted
36 + deployment), not a same-origin proxy path."""
37 + info = await get_connector_info_from_db("Shuffle", session)
38 + if not info:
39 + raise HTTPException(status_code=404, detail="Shuffle connector is not configured.")
40 + api_key = info.get("connector_api_key")
41 + real_base_url = info.get("connector_url")
42 + if not api_key or not real_base_url:
43 + raise HTTPException(
44 + status_code=400,
45 + detail="Shuffle connector is missing connector_url or connector_api_key.",
46 + )
47 + return ShuffleConnectorCredentialsResponse(
48 + success=True,
49 + message="Shuffle connector credentials retrieved.",
50 + base_url=real_base_url.rstrip("/"),
51 + api_key=api_key,
52 + )
53 +
54 +
55 @shuffle_integrations_router.post(
56 "/execute",
57 description="Execute a Shuffle Integration.",
backend/app/connectors/shuffle/schema/integrations.py
+11
@@ -9,6 +9,17 @@ from pydantic import Field
9 from pydantic import model_validator
10
11
12 +class ShuffleConnectorCredentialsResponse(BaseModel):
13 + """Minimal Shuffle connector creds for the frontend's `<ShuffleMCP>` /
14 + `<TryMcpSection>` embeds. We only expose URL + API key — not the full
15 + connector row — to keep the frontend surface narrow."""
16 +
17 + success: bool
18 + message: str
19 + base_url: str = Field(..., description="The Shuffle backend base URL (e.g. https://shuffler.io).")
20 + api_key: str = Field(..., description="The deployment-wide Shuffle API key from the connectors table.")
21 +
22 +
23 class IntegrationRequest(BaseModel):
24 app_name: str = Field(..., description="The name of the application", examples=["PagerDuty"])
25 category: str = Field(..., description="The category of the application", examples=["cases"])
backend/app/version/services/version.py
+1 -1
@@ -7,7 +7,7 @@ from loguru import logger
7 from packaging.version import Version
8
9 # Current version - update this with each release
10 -CURRENT_VERSION = "0.1.64"
10 +CURRENT_VERSION = "0.1.65"
11 VERSION_CHECK_URL = "https://api.github.com/repos/socfortress/CoPilot/releases/latest"
12
13
frontend/.nvmrc
+1 -1
@@ -1 +1 @@
1 -20.11.0
1 +24
frontend/Dockerfile
+6 -6
@@ -4,8 +4,8 @@
4 # # Install pnpm globally
5 # RUN npm install -g pnpm
6
7 -FROM node:22 as builder
8 -RUN npm install -g pnpm@10.33.2
7 +FROM node:24 AS builder
8 +RUN corepack enable && corepack prepare pnpm@11.1.1 --activate
9
10 # Drop root
11 USER node
@@ -13,11 +13,11 @@ USER node
13 # Set the working directory
14 WORKDIR /app
15
16 -# Copy the package.json and pnpm-lock.yaml files into the working directory
17 -COPY package.json pnpm-lock.yaml ./
16 +# `pnpm-workspace.yaml` carries `allowBuilds` (required for @parcel/watcher native install).
17 +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
18
19 # Install project dependencies using pnpm
20 -RUN pnpm install
20 +RUN pnpm install --frozen-lockfile
21
22 # Copy project files into the working directory
23 COPY --chown=node . .
@@ -25,7 +25,7 @@ COPY --chown=node . .
25 # Run the Vue.js project build using pnpm
26 RUN pnpm run build:only
27
28 -FROM node:21 as dev
28 +FROM node:24 AS dev
29
30 RUN apt-get update && apt-get install -y openssl
31
frontend/package.json
+41 -47
@@ -3,9 +3,9 @@
3 "type": "module",
4 "version": "1.0.0",
5 "private": true,
6 - "packageManager": "pnpm@10.33.2+sha512.a90faf6feeab71ad6c6e57f94e0fe1a12f5dcc22cd754db40ae9593eb6a3e0b6b12e3540218bb37ae083404b1f2ce6db2a4121e979829b4aff94b99f49da1cf8",
6 + "packageManager": "pnpm@11.1.2+sha512.415a1cc25974731e75455c1468371be74c5aa5fb7621b50d4056d222451609f11412f23fd602e6169f1e060466641f798597e1be961a10688836a67b16569499",
7 "engines": {
8 - "node": ">=18.0.0"
8 + "node": ">=24.0.0"
9 },
10 "scripts": {
11 "dev": "vite --host 0.0.0.0",
@@ -39,28 +39,31 @@
39 "@codemirror/commands": "^6.10.3",
40 "@codemirror/lang-javascript": "^6.2.5",
41 "@codemirror/lang-xml": "^6.1.0",
42 - "@codemirror/lint": "^6.9.5",
42 + "@codemirror/lint": "^6.9.6",
43 + "@codemirror/state": "^6.6.0",
44 "@codemirror/theme-one-dark": "^6.1.3",
44 - "@codemirror/view": "^6.41.1",
45 + "@codemirror/view": "^6.43.0",
46 "@f3ve/vue-markdown-it": "^0.2.3",
47 "@fontsource/jetbrains-mono": "^5.2.8",
48 "@fontsource/lexend": "^5.2.11",
49 "@fontsource/public-sans": "^5.2.7",
50 "@microsoft/fetch-event-source": "^2.0.1",
51 + "@mui/material": "^9.0.1",
52 "@shikijs/markdown-it": "^4.0.2",
51 - "@shuffleio/shuffle-mcps": "^0.0.4",
53 + "@shuffleio/shuffle-mcps": "^0.0.11",
54 "@types/codemirror": "^5.60.17",
55 "@vueuse/core": "^14.3.0",
56 "@vueuse/motion": "^3.0.3",
55 - "algoliasearch": "^5.52.0",
56 - "axios": "^1.16.0",
57 + "algoliasearch": "^5.52.1",
58 + "apexcharts": "^5.12.0",
59 + "axios": "^1.16.1",
60 "bytes": "^3.1.2",
61 "codemirror": "~6.0.2",
62 "colord": "^2.9.3",
63 "dayjs": "^1.11.20",
64 "detect-touch-device": "^1.1.6",
65 "echarts": "^6.0.0",
63 - "fast-xml-parser": "^5.7.2",
66 + "fast-xml-parser": "^5.8.0",
67 "file-saver": "^2.0.5",
68 "html-entities": "^2.6.0",
69 "jose": "^6.2.3",
@@ -72,18 +75,21 @@
75 "password-validator": "^5.3.0",
76 "pinia": "^3.0.4",
77 "pinia-plugin-persistedstate": "^4.7.1",
75 - "react": "^19.2.5",
76 - "react-dom": "^19.2.5",
78 + "react": "^19.2.6",
79 + "react-dom": "^19.2.6",
80 + "react-router-dom": "^7.15.1",
81 + "react18-json-view": "^0.2.10",
82 + "remark-breaks": "^4.0.0",
83 "secure-ls": "^2.0.0",
84 "shiki": "^4.0.2",
85 "thememirror": "^2.0.1",
86 "validator": "^13.15.35",
81 - "vue": "^3.5.33",
87 + "vue": "^3.5.34",
88 "vue-advanced-cropper": "^2.8.9",
89 "vue-codemirror": "^6.1.1",
90 "vue-highlight-words": "^3.0.1",
85 - "vue-i18n": "^11.4.0",
86 - "vue-router": "^5.0.6",
91 + "vue-i18n": "^11.4.2",
92 + "vue-router": "^5.0.7",
93 "vue-sjv": "^0.0.6",
94 "vue3-apexcharts": "^1.11.1",
95 "vue3-marquee": "^4.2.2",
@@ -97,60 +103,48 @@
103 "vueuc": "^0.4.64"
104 },
105 "devDependencies": {
100 - "@antfu/eslint-config": "~8.2.0",
101 - "@clack/prompts": "^1.3.0",
102 - "@iconify/vue": "^5.0.0",
103 - "@tailwindcss/vite": "^4.2.4",
106 + "@antfu/eslint-config": "~9.0.0",
107 + "@clack/prompts": "^1.4.0",
108 + "@iconify/vue": "^5.0.1",
109 + "@tailwindcss/vite": "^4.3.0",
110 "@tsconfig/node20": "^20.1.9",
111 "@types/bytes": "^3.1.5",
112 "@types/file-saver": "^2.0.7",
113 "@types/fs-extra": "^11.0.4",
108 - "@types/jsdom": "^28.0.1",
114 + "@types/jsdom": "^28.0.3",
115 "@types/lodash": "^4.17.24",
116 "@types/markdown-it": "^14.1.2",
111 - "@types/node": "^25.6.0",
117 + "@types/node": "^25.8.0",
118 "@types/react": "^19.2.14",
119 "@types/react-dom": "^19.2.3",
120 "@types/validator": "^13.15.10",
115 - "@vitejs/plugin-vue": "^6.0.6",
121 + "@vitejs/plugin-vue": "^6.0.7",
122 "@vitejs/plugin-vue-jsx": "^5.1.5",
123 "@vue/test-utils": "^2.4.10",
124 "@vue/tsconfig": "~0.9.1",
119 - "baseline-browser-mapping": "^2.10.25",
125 + "baseline-browser-mapping": "^2.10.29",
126 "depcheck": "^1.4.7",
121 - "eslint": "~10.3.0",
127 + "eslint": "~10.4.0",
128 "flourite": "^1.3.0",
123 - "fs-extra": "^11.3.4",
124 - "jscpd": "^4.0.9",
129 + "fs-extra": "^11.3.5",
130 + "jscpd": "^4.2.2",
131 "jsdom": "^29.1.1",
132 "npm-run-all2": "^8.0.4",
133 "prettier": "^3.8.3",
128 - "prettier-plugin-tailwindcss": "^0.7.4",
134 + "prettier-plugin-tailwindcss": "^0.8.0",
135 + "rolldown": "1.0.1",
136 "sass": "^1.99.0",
130 - "start-server-and-test": "^3.0.2",
131 - "tailwindcss": "^4.2.4",
132 - "taze": "^19.11.0",
137 + "start-server-and-test": "^3.0.5",
138 + "tailwindcss": "^4.3.0",
139 + "taze": "^19.12.0",
140 "type-fest": "^5.6.0",
134 - "typescript": "~5.9.3",
135 - "vite": "^7.3.1",
141 + "typescript": "~6.0.3",
142 + "vite": "^8.0.13",
143 "vite-bundle-visualizer": "^1.2.1",
144 "vite-plugin-inspect": "^11.3.3",
138 - "vite-plugin-vue-devtools": "^8.1.1",
145 + "vite-plugin-vue-devtools": "^8.1.2",
146 "vite-svg-loader": "^5.1.1",
140 - "vitest": "^4.1.5",
141 - "vue-tsc": "^3.2.7"
142 - },
143 - "pnpm": {
144 - "peerDependencyRules": {
145 - "allowedVersions": {
146 - "eslint": "10"
147 - }
148 - },
149 - "onlyBuiltDependencies": [
150 - "@parcel/watcher",
151 - "@tailwindcss/oxide",
152 - "esbuild",
153 - "unrs-resolver"
154 - ]
147 + "vitest": "^4.1.6",
148 + "vue-tsc": "^3.2.9"
149 }
156 -}
150 +}
\ No newline at end of file
frontend/pnpm-lock.yaml
+2172 -1530
@@ -4,6 +4,9 @@ settings:
4 autoInstallPeers: true
5 excludeLinksFromLockfile: false
6
7 +overrides:
8 + '@mui/icons-material': ^7.3.9
9 +
10 importers:
11
12 .:
@@ -21,17 +24,20 @@ importers:
24 specifier: ^6.1.0
25 version: 6.1.0
26 '@codemirror/lint':
24 - specifier: ^6.9.5
25 - version: 6.9.5
27 + specifier: ^6.9.6
28 + version: 6.9.6
29 + '@codemirror/state':
30 + specifier: ^6.6.0
31 + version: 6.6.0
32 '@codemirror/theme-one-dark':
33 specifier: ^6.1.3
34 version: 6.1.3
35 '@codemirror/view':
30 - specifier: ^6.41.1
31 - version: 6.41.1
36 + specifier: ^6.43.0
37 + version: 6.43.0
38 '@f3ve/vue-markdown-it':
39 specifier: ^0.2.3
34 - version: 0.2.3(vue@3.5.33(typescript@5.9.3))
40 + version: 0.2.3(vue@3.5.34(typescript@6.0.3))
41 '@fontsource/jetbrains-mono':
42 specifier: ^5.2.8
43 version: 5.2.8
@@ -44,27 +50,33 @@ importers:
50 '@microsoft/fetch-event-source':
51 specifier: ^2.0.1
52 version: 2.0.1
53 + '@mui/material':
54 + specifier: ^9.0.1
55 + version: 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
56 '@shikijs/markdown-it':
57 specifier: ^4.0.2
58 version: 4.0.2
59 '@shuffleio/shuffle-mcps':
51 - specifier: ^0.0.4
52 - version: 0.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
60 + specifier: ^0.0.11
61 + version: 0.0.11(eeed91f181808c3b62bfac5431c1b580)
62 '@types/codemirror':
63 specifier: ^5.60.17
64 version: 5.60.17
65 '@vueuse/core':
66 specifier: ^14.3.0
58 - version: 14.3.0(vue@3.5.33(typescript@5.9.3))
67 + version: 14.3.0(vue@3.5.34(typescript@6.0.3))
68 '@vueuse/motion':
69 specifier: ^3.0.3
61 - version: 3.0.3(vue@3.5.33(typescript@5.9.3))
70 + version: 3.0.3(vue@3.5.34(typescript@6.0.3))
71 algoliasearch:
63 - specifier: ^5.52.0
64 - version: 5.52.0
72 + specifier: ^5.52.1
73 + version: 5.52.1
74 + apexcharts:
75 + specifier: ^5.12.0
76 + version: 5.12.0
77 axios:
66 - specifier: ^1.16.0
67 - version: 1.16.0(debug@4.4.3)
78 + specifier: ^1.16.1
79 + version: 1.16.1(debug@4.4.3)
80 bytes:
81 specifier: ^3.1.2
82 version: 3.1.2
@@ -84,8 +96,8 @@ importers:
96 specifier: ^6.0.0
97 version: 6.0.0
98 fast-xml-parser:
87 - specifier: ^5.7.2
88 - version: 5.7.2
99 + specifier: ^5.8.0
100 + version: 5.8.0
101 file-saver:
102 specifier: ^2.0.5
103 version: 2.0.5
@@ -106,7 +118,7 @@ importers:
118 version: 3.0.1
119 naive-ui:
120 specifier: ^2.44.1
109 - version: 2.44.1(vue@3.5.33(typescript@5.9.3))
121 + version: 2.44.1(vue@3.5.34(typescript@6.0.3))
122 nanoid:
123 specifier: ^5.1.11
124 version: 5.1.11
@@ -115,16 +127,25 @@ importers:
127 version: 5.3.0
128 pinia:
129 specifier: ^3.0.4
118 - version: 3.0.4(typescript@5.9.3)(vue@3.5.33(typescript@5.9.3))
130 + version: 3.0.4(typescript@6.0.3)(vue@3.5.34(typescript@6.0.3))
131 pinia-plugin-persistedstate:
132 specifier: ^4.7.1
121 - version: 4.7.1(@nuxt/kit@3.21.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.33(typescript@5.9.3)))
133 + version: 4.7.1(@nuxt/kit@3.21.5)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.34(typescript@6.0.3)))
134 react:
123 - specifier: ^19.2.5
124 - version: 19.2.5
135 + specifier: ^19.2.6
136 + version: 19.2.6
137 react-dom:
126 - specifier: ^19.2.5
127 - version: 19.2.5(react@19.2.5)
138 + specifier: ^19.2.6
139 + version: 19.2.6(react@19.2.6)
140 + react-router-dom:
141 + specifier: ^7.15.1
142 + version: 7.15.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
143 + react18-json-view:
144 + specifier: ^0.2.10
145 + version: 0.2.10(react@19.2.6)
146 + remark-breaks:
147 + specifier: ^4.0.0
148 + version: 4.0.0
149 secure-ls:
150 specifier: ^2.0.0
151 version: 2.0.0
@@ -133,59 +154,59 @@ importers:
154 version: 4.0.2
155 thememirror:
156 specifier: ^2.0.1
136 - version: 2.0.1(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)
157 + version: 2.0.1(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.43.0)
158 validator:
159 specifier: ^13.15.35
160 version: 13.15.35
161 vue:
141 - specifier: ^3.5.33
142 - version: 3.5.33(typescript@5.9.3)
162 + specifier: ^3.5.34
163 + version: 3.5.34(typescript@6.0.3)
164 vue-advanced-cropper:
165 specifier: ^2.8.9
145 - version: 2.8.9(vue@3.5.33(typescript@5.9.3))
166 + version: 2.8.9(vue@3.5.34(typescript@6.0.3))
167 vue-codemirror:
168 specifier: ^6.1.1
148 - version: 6.1.1(codemirror@6.0.2)(vue@3.5.33(typescript@5.9.3))
169 + version: 6.1.1(codemirror@6.0.2)(vue@3.5.34(typescript@6.0.3))
170 vue-highlight-words:
171 specifier: ^3.0.1
151 - version: 3.0.1(vue@3.5.33(typescript@5.9.3))
172 + version: 3.0.1(vue@3.5.34(typescript@6.0.3))
173 vue-i18n:
153 - specifier: ^11.4.0
154 - version: 11.4.0(vue@3.5.33(typescript@5.9.3))
174 + specifier: ^11.4.2
175 + version: 11.4.2(vue@3.5.34(typescript@6.0.3))
176 vue-router:
156 - specifier: ^5.0.6
157 - version: 5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.33(typescript@5.9.3)))(vue@3.5.33(typescript@5.9.3))
177 + specifier: ^5.0.7
178 + version: 5.0.7(@vue/compiler-sfc@3.5.34)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3))
179 vue-sjv:
180 specifier: ^0.0.6
160 - version: 0.0.6(vue@3.5.33(typescript@5.9.3))
181 + version: 0.0.6(vue@3.5.34(typescript@6.0.3))
182 vue3-apexcharts:
183 specifier: ^1.11.1
163 - version: 1.11.1(apexcharts@5.10.6)(vue@3.5.33(typescript@5.9.3))
184 + version: 1.11.1(apexcharts@5.12.0)(vue@3.5.34(typescript@6.0.3))
185 vue3-marquee:
186 specifier: ^4.2.2
166 - version: 4.2.2(vue@3.5.33(typescript@5.9.3))
187 + version: 4.2.2(vue@3.5.34(typescript@6.0.3))
188 vuedraggable:
189 specifier: ^4.1.0
169 - version: 4.1.0(vue@3.5.33(typescript@5.9.3))
190 + version: 4.1.0(vue@3.5.34(typescript@6.0.3))
191 xmllint:
192 specifier: ^0.1.1
193 version: 0.1.1
194 xmllint-wasm:
195 specifier: ^5.2.0
175 - version: 5.2.0(@types/node@25.6.0)
196 + version: 5.2.0(@types/node@25.8.0)
197 devDependencies:
198 '@antfu/eslint-config':
178 - specifier: ~8.2.0
179 - version: 8.2.0(@typescript-eslint/rule-tester@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3))(@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.33)(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.5(@types/node@25.6.0)(jsdom@29.1.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)))
199 + specifier: ~9.0.0
200 + version: 9.0.0(@typescript-eslint/rule-tester@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3))(@typescript-eslint/utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.34)(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.6(@types/node@25.8.0)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)))
201 '@clack/prompts':
181 - specifier: ^1.3.0
182 - version: 1.3.0
202 + specifier: ^1.4.0
203 + version: 1.4.0
204 '@iconify/vue':
184 - specifier: ^5.0.0
185 - version: 5.0.0(vue@3.5.33(typescript@5.9.3))
205 + specifier: ^5.0.1
206 + version: 5.0.1(vue@3.5.34(typescript@6.0.3))
207 '@tailwindcss/vite':
187 - specifier: ^4.2.4
188 - version: 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))
208 + specifier: ^4.3.0
209 + version: 4.3.0(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))
210 '@tsconfig/node20':
211 specifier: ^20.1.9
212 version: 20.1.9
@@ -199,8 +220,8 @@ importers:
220 specifier: ^11.0.4
221 version: 11.0.4
222 '@types/jsdom':
202 - specifier: ^28.0.1
203 - version: 28.0.1
223 + specifier: ^28.0.3
224 + version: 28.0.3
225 '@types/lodash':
226 specifier: ^4.17.24
227 version: 4.17.24
@@ -208,8 +229,8 @@ importers:
229 specifier: ^14.1.2
230 version: 14.1.2
231 '@types/node':
211 - specifier: ^25.6.0
212 - version: 25.6.0
232 + specifier: ^25.8.0
233 + version: 25.8.0
234 '@types/react':
235 specifier: ^19.2.14
236 version: 19.2.14
@@ -220,35 +241,35 @@ importers:
241 specifier: ^13.15.10
242 version: 13.15.10
243 '@vitejs/plugin-vue':
223 - specifier: ^6.0.6
224 - version: 6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3))
244 + specifier: ^6.0.7
245 + version: 6.0.7(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))(vue@3.5.34(typescript@6.0.3))
246 '@vitejs/plugin-vue-jsx':
247 specifier: ^5.1.5
227 - version: 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3))
248 + version: 5.1.5(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))(vue@3.5.34(typescript@6.0.3))
249 '@vue/test-utils':
250 specifier: ^2.4.10
230 - version: 2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@5.9.3)))(vue@3.5.33(typescript@5.9.3))
251 + version: 2.4.10(@vue/compiler-dom@3.5.34)(@vue/server-renderer@3.5.34(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3))
252 '@vue/tsconfig':
253 specifier: ~0.9.1
233 - version: 0.9.1(typescript@5.9.3)(vue@3.5.33(typescript@5.9.3))
254 + version: 0.9.1(typescript@6.0.3)(vue@3.5.34(typescript@6.0.3))
255 baseline-browser-mapping:
235 - specifier: ^2.10.25
236 - version: 2.10.25
256 + specifier: ^2.10.29
257 + version: 2.10.29
258 depcheck:
259 specifier: ^1.4.7
260 version: 1.4.7
261 eslint:
241 - specifier: ~10.3.0
242 - version: 10.3.0(jiti@2.6.1)
262 + specifier: ~10.4.0
263 + version: 10.4.0(jiti@2.7.0)
264 flourite:
265 specifier: ^1.3.0
266 version: 1.3.0
267 fs-extra:
247 - specifier: ^11.3.4
248 - version: 11.3.4
268 + specifier: ^11.3.5
269 + version: 11.3.5
270 jscpd:
250 - specifier: ^4.0.9
251 - version: 4.0.9
271 + specifier: ^4.2.2
272 + version: 4.2.2
273 jsdom:
274 specifier: ^29.1.1
275 version: 29.1.1
@@ -259,127 +280,130 @@ importers:
280 specifier: ^3.8.3
281 version: 3.8.3
282 prettier-plugin-tailwindcss:
262 - specifier: ^0.7.4
263 - version: 0.7.4(prettier@3.8.3)
283 + specifier: ^0.8.0
284 + version: 0.8.0(prettier@3.8.3)
285 + rolldown:
286 + specifier: 1.0.1
287 + version: 1.0.1
288 sass:
289 specifier: ^1.99.0
290 version: 1.99.0
291 start-server-and-test:
268 - specifier: ^3.0.2
269 - version: 3.0.2
292 + specifier: ^3.0.5
293 + version: 3.0.5
294 tailwindcss:
271 - specifier: ^4.2.4
272 - version: 4.2.4
295 + specifier: ^4.3.0
296 + version: 4.3.0
297 taze:
274 - specifier: ^19.11.0
275 - version: 19.11.0
298 + specifier: ^19.12.0
299 + version: 19.12.0
300 type-fest:
301 specifier: ^5.6.0
302 version: 5.6.0
303 typescript:
280 - specifier: ~5.9.3
281 - version: 5.9.3
304 + specifier: ~6.0.3
305 + version: 6.0.3
306 vite:
283 - specifier: ^7.3.1
284 - version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
307 + specifier: ^8.0.13
308 + version: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)
309 vite-bundle-visualizer:
310 specifier: ^1.2.1
287 - version: 1.2.1(rollup@4.60.2)
311 + version: 1.2.1(rolldown@1.0.1)
312 vite-plugin-inspect:
313 specifier: ^11.3.3
290 - version: 11.3.3(@nuxt/kit@3.21.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))
314 + version: 11.3.3(@nuxt/kit@3.21.5)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))
315 vite-plugin-vue-devtools:
292 - specifier: ^8.1.1
293 - version: 8.1.1(@nuxt/kit@3.21.4)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3))
316 + specifier: ^8.1.2
317 + version: 8.1.2(@nuxt/kit@3.21.5)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))(vue@3.5.34(typescript@6.0.3))
318 vite-svg-loader:
319 specifier: ^5.1.1
296 - version: 5.1.1(vue@3.5.33(typescript@5.9.3))
320 + version: 5.1.1(vue@3.5.34(typescript@6.0.3))
321 vitest:
298 - specifier: ^4.1.5
299 - version: 4.1.5(@types/node@25.6.0)(jsdom@29.1.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))
322 + specifier: ^4.1.6
323 + version: 4.1.6(@types/node@25.8.0)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))
324 vue-tsc:
301 - specifier: ^3.2.7
302 - version: 3.2.7(typescript@5.9.3)
325 + specifier: ^3.2.9
326 + version: 3.2.9(typescript@6.0.3)
327 optionalDependencies:
328 '@rollup/rollup-linux-x64-gnu':
329 specifier: ^4.46.2
306 - version: 4.60.2
330 + version: 4.60.4
331 treemate:
332 specifier: ^0.3.11
333 version: 0.3.11
334 vueuc:
335 specifier: ^0.4.64
312 - version: 0.4.65(vue@3.5.33(typescript@5.9.3))
336 + version: 0.4.65(vue@3.5.34(typescript@6.0.3))
337
338 packages:
339
340 '@ajoelp/json-to-formdata@1.5.0':
341 resolution: {integrity: sha512-nrlfeTSL0X0dtx5r2KpzPiqLSIQquiiJjUKsQAKzWaCmO2QoYZCyb5ENZwF3YoffKronOCJr25mxaD8JRJmK8w==}
342
319 - '@algolia/abtesting@1.18.0':
320 - resolution: {integrity: sha512-8siuLG+FIns1AjZ/g2SDVwHz9S+ObacDQISEJvS8XsNei1zl3FXqfqQrBpmrG7ACWCyesXHbicMJtvRbg00FEw==}
343 + '@algolia/abtesting@1.18.1':
344 + resolution: {integrity: sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw==}
345 engines: {node: '>= 14.0.0'}
346
323 - '@algolia/client-abtesting@5.52.0':
324 - resolution: {integrity: sha512-wtwPgyPmO7b7sQPVgoK29c1VpfS08DnnJCmxX/oU1pV2DlMRJCzQcLN7JSloYpodyKHwM8+9wOzlAM0co3TDmA==}
347 + '@algolia/client-abtesting@5.52.1':
348 + resolution: {integrity: sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ==}
349 engines: {node: '>= 14.0.0'}
350
327 - '@algolia/client-analytics@5.52.0':
328 - resolution: {integrity: sha512-9KY36bRl4AH7RjqSeDDOKnjsz4IxQFBEOB8/fWmEbdQe+Isbs5jGzVJu9NEPQ1Tgwxlf8Uf07Swj3jZyMNUZ2g==}
351 + '@algolia/client-analytics@5.52.1':
352 + resolution: {integrity: sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg==}
353 engines: {node: '>= 14.0.0'}
354
331 - '@algolia/client-common@5.52.0':
332 - resolution: {integrity: sha512-3a/qM3dzJqqfTx7Yrw7uGQ98I3Q0rDfb4Vkv0wEzko96l7YQMxfBVz/VbLq2N+c59GweYv6Vhp8mPeqnWJSITw==}
355 + '@algolia/client-common@5.52.1':
356 + resolution: {integrity: sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw==}
357 engines: {node: '>= 14.0.0'}
358
335 - '@algolia/client-insights@5.52.0':
336 - resolution: {integrity: sha512-Rki7ACbMcvbQW0BuM84x9dkGHY47ABmv4jU6tYssat2k02p3mIUms2YOLUAMeknhmnFsj6lb6ZzOXdMWMyc1sA==}
359 + '@algolia/client-insights@5.52.1':
360 + resolution: {integrity: sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ==}
361 engines: {node: '>= 14.0.0'}
362
339 - '@algolia/client-personalization@5.52.0':
340 - resolution: {integrity: sha512-96s4Uzc3kk+/f4jJXIVVGWP5XlngOGNQ1x6hW9AT59pOixHlOs5tqJg+ZUS/GQ6h/iYP0ceQcmxDQeLyCLTaDQ==}
363 + '@algolia/client-personalization@5.52.1':
364 + resolution: {integrity: sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q==}
365 engines: {node: '>= 14.0.0'}
366
343 - '@algolia/client-query-suggestions@5.52.0':
344 - resolution: {integrity: sha512-lqeycNpSPe5Qa0OUWpejVvYQjQWV5nQuLT0a4aq7XzRAvCxprV/6Lf841EygdD2nrFnuS58ok7Au1uOtXzpnkg==}
367 + '@algolia/client-query-suggestions@5.52.1':
368 + resolution: {integrity: sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ==}
369 engines: {node: '>= 14.0.0'}
370
347 - '@algolia/client-search@5.52.0':
348 - resolution: {integrity: sha512-ly1wETVGRo30cx61O7fetESN+ElL9c9K+bD/AVgnT1ar4c6v+/Yqjrhdtu6Fm4D0s4NZP081Isf6tunH1wUXHg==}
371 + '@algolia/client-search@5.52.1':
372 + resolution: {integrity: sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg==}
373 engines: {node: '>= 14.0.0'}
374
351 - '@algolia/ingestion@1.52.0':
352 - resolution: {integrity: sha512-U4EeTvgmluRjj39ykZSAd5X+a6LD5m7/mcOWDmB7hqm1R6QY0yT8jLxpNVEjYhzgEN5hcDGW6X67EWQY8KiYGQ==}
375 + '@algolia/ingestion@1.52.1':
376 + resolution: {integrity: sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw==}
377 engines: {node: '>= 14.0.0'}
378
355 - '@algolia/monitoring@1.52.0':
356 - resolution: {integrity: sha512-FCPnDcILfpTE94u7BVlV4DmnSV5wE3+j25EEF+3dYPrVzkVCSoAHs318oWDGxnxsAgiL4HpL12Jc4XHmw9shpA==}
379 + '@algolia/monitoring@1.52.1':
380 + resolution: {integrity: sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ==}
381 engines: {node: '>= 14.0.0'}
382
359 - '@algolia/recommend@5.52.0':
360 - resolution: {integrity: sha512-br3DO7n4N8CXwTRbZS0MnB4WQ9YHfNjCwkCEzVR/wek/qNTDQKDb0nROmkFaNZ8ucUqUVKZi074dbwMwRDlK8Q==}
383 + '@algolia/recommend@5.52.1':
384 + resolution: {integrity: sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ==}
385 engines: {node: '>= 14.0.0'}
386
363 - '@algolia/requester-browser-xhr@5.52.0':
364 - resolution: {integrity: sha512-b0T/Ca2c9KyEslKsVrGZvbe1UrrKKSdfXhBZ2pbpKahFUzJfziRZ0urbOm7V65O0tO/jwU+Lo/+bIiiyhzGt8w==}
387 + '@algolia/requester-browser-xhr@5.52.1':
388 + resolution: {integrity: sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q==}
389 engines: {node: '>= 14.0.0'}
390
367 - '@algolia/requester-fetch@5.52.0':
368 - resolution: {integrity: sha512-ozBT8J/mtD4H4IAojw8QPirlcL2gHrI1BGuZ4/ZXXO/rTE1yQ4VIPJj4mTTbwo4FbkS1MoJsD/DsrqLzhnc4/g==}
391 + '@algolia/requester-fetch@5.52.1':
392 + resolution: {integrity: sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg==}
393 engines: {node: '>= 14.0.0'}
394
371 - '@algolia/requester-node-http@5.52.0':
372 - resolution: {integrity: sha512-gyyWcLD22tnabmoit4iukCXuoRc5HYJuUjPSEa8a0D/f/NlRafpWi52AlAaa4Uu/rsl7saHsJFTNjTptWbu2+A==}
395 + '@algolia/requester-node-http@5.52.1':
396 + resolution: {integrity: sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg==}
397 engines: {node: '>= 14.0.0'}
398
375 - '@antfu/eslint-config@8.2.0':
376 - resolution: {integrity: sha512-spfwYXMNrlkl69riTSBnbC0C2K8EVfVMOK3ceP2EpAAioyfprIW1gTwyLRtd9jZSFeNdX4mFNAIG+o0sOneOfA==}
399 + '@antfu/eslint-config@9.0.0':
400 + resolution: {integrity: sha512-8aQW0UWHoNMdVxTfzs1+w10t26plsc9oFs8YhCyCtST5nnANJe/VAjqvR3hYI1l3PHBeo4tjVMg8wuu6g3OLlA==}
401 hasBin: true
402 peerDependencies:
403 '@angular-eslint/eslint-plugin': ^21.1.0
404 '@angular-eslint/eslint-plugin-template': ^21.1.0
405 '@angular-eslint/template-parser': ^21.1.0
382 - '@eslint-react/eslint-plugin': ^3.0.0
406 + '@eslint-react/eslint-plugin': ^5.6.0
407 '@next/eslint-plugin-next': '>=15.0.0'
408 '@prettier/plugin-xml': ^3.4.1
409 '@unocss/eslint-plugin': '>=0.50.0'
@@ -472,6 +496,10 @@ packages:
496 resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
497 engines: {node: '>=6.9.0'}
498
499 + '@babel/generator@8.0.0-rc.5':
500 + resolution: {integrity: sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg==}
501 + engines: {node: ^22.18.0 || >=24.11.0}
502 +
503 '@babel/helper-annotate-as-pure@7.27.3':
504 resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
505 engines: {node: '>=6.9.0'}
@@ -526,10 +554,18 @@ packages:
554 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
555 engines: {node: '>=6.9.0'}
556
557 + '@babel/helper-string-parser@8.0.0-rc.5':
558 + resolution: {integrity: sha512-sN7R8rBvDurfaziNfDEIjIntlazmlkCDGO4SNl2RJ3wRCn+QxspLV7hzYAE8WWVd2joVuT8sUxeePdLp2idI1A==}
559 + engines: {node: ^22.18.0 || >=24.11.0}
560 +
561 '@babel/helper-validator-identifier@7.28.5':
562 resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
563 engines: {node: '>=6.9.0'}
564
565 + '@babel/helper-validator-identifier@8.0.0-rc.5':
566 + resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==}
567 + engines: {node: ^22.18.0 || >=24.11.0}
568 +
569 '@babel/helper-validator-option@7.27.1':
570 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
571 engines: {node: '>=6.9.0'}
@@ -543,6 +579,11 @@ packages:
579 engines: {node: '>=6.0.0'}
580 hasBin: true
581
582 + '@babel/parser@8.0.0-rc.5':
583 + resolution: {integrity: sha512-/Mfg83rK3+jsRbl4Vbd0jqxc6M1A1/WNFtgrowRM1unEsD3XcNnrBdMM0JWakd0/RN9lseQKwPduW1TiEwKOlQ==}
584 + engines: {node: ^22.18.0 || >=24.11.0}
585 + hasBin: true
586 +
587 '@babel/plugin-proposal-decorators@7.29.0':
588 resolution: {integrity: sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==}
589 engines: {node: '>=6.9.0'}
@@ -584,6 +625,10 @@ packages:
625 peerDependencies:
626 '@babel/core': ^7.0.0-0
627
628 + '@babel/runtime@7.29.2':
629 + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
630 + engines: {node: '>=6.9.0'}
631 +
632 '@babel/template@7.28.6':
633 resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
634 engines: {node: '>=6.9.0'}
@@ -596,20 +641,24 @@ packages:
641 resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
642 engines: {node: '>=6.9.0'}
643
644 + '@babel/types@8.0.0-rc.5':
645 + resolution: {integrity: sha512-JeSVu/m8x/zpp4CLjYHVNXuhEyOkhPXuxM8YOXjh6L4LlvQNKuUNOTo5KdBuKAcTDHw8DquToTaEkhsBqPXOaA==}
646 + engines: {node: ^22.18.0 || >=24.11.0}
647 +
648 '@bramus/specificity@2.4.2':
649 resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
650 hasBin: true
651
603 - '@clack/core@1.3.0':
604 - resolution: {integrity: sha512-xJPHpAmEQUBrXSLx0gF+q5K/IyihXpsHZcha+jB+tyahsKRK3Dxo4D0coZDewHo12NhiuzC3dTtMPbm53GEAAA==}
652 + '@clack/core@1.3.1':
653 + resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==}
654 engines: {node: '>= 20.12.0'}
655
607 - '@clack/prompts@1.3.0':
608 - resolution: {integrity: sha512-GgcWwRCs/xPtaqlMy8qRhPnZf9vlWcWZNHAitnVQ3yk7JmSralSiq5q07yaffYE8SogtDm7zFeKccx1QNVARpw==}
656 + '@clack/prompts@1.4.0':
657 + resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==}
658 engines: {node: '>= 20.12.0'}
659
611 - '@codemirror/autocomplete@6.20.1':
612 - resolution: {integrity: sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==}
660 + '@codemirror/autocomplete@6.20.2':
661 + resolution: {integrity: sha512-G5FPkgIiLjOgZMjqVjvuKQ1rGPtHogLldJr33eFJdVLtmwY+giGrlv/ewljLz6b9BSQLkjxuwBc6g6omDM+YxQ==}
662
663 '@codemirror/commands@6.10.3':
664 resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==}
@@ -623,8 +672,8 @@ packages:
672 '@codemirror/language@6.12.3':
673 resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==}
674
626 - '@codemirror/lint@6.9.5':
627 - resolution: {integrity: sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==}
675 + '@codemirror/lint@6.9.6':
676 + resolution: {integrity: sha512-6Kp7r6XfCi/D/5sdXieMfg9pJU1bUEx96WITuLU6ESaKizCz0QHFMjY/TaFSbigDdEAIgi93itLBIUETP4oK+A==}
677
678 '@codemirror/search@6.7.0':
679 resolution: {integrity: sha512-ZvGm99wc/s2cITtMT15LFdn8aH/aS+V+DqyGq/N5ZlV5vWtH+nILvC2nw0zX7ByNoHHDZ2IxxdW38O0tc5nVHg==}
@@ -635,8 +684,8 @@ packages:
684 '@codemirror/theme-one-dark@6.1.3':
685 resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==}
686
638 - '@codemirror/view@6.41.1':
639 - resolution: {integrity: sha512-ToDnWKbBnke+ZLrP6vgTTDScGi5H37YYuZGniQaBzxMVdtCxMrslsmtnOvbPZk4RX9bvkQqnWR/WS/35tJA0qg==}
687 + '@codemirror/view@6.43.0':
688 + resolution: {integrity: sha512-V7ZCLQO3Jus9hzh2jVCCPW3mO4IBMr43O37PqSUYautJSnnJF41YlgLw21x0fLJTYvJ+Vkm6Gp+qKGH9pltgXA==}
689
690 '@colors/colors@1.5.0':
691 resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
@@ -656,15 +705,15 @@ packages:
705 resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==}
706 engines: {node: '>=20.19.0'}
707
659 - '@csstools/css-calc@3.2.0':
660 - resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==}
708 + '@csstools/css-calc@3.2.1':
709 + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==}
710 engines: {node: '>=20.19.0'}
711 peerDependencies:
712 '@csstools/css-parser-algorithms': ^4.0.0
713 '@csstools/css-tokenizer': ^4.0.0
714
666 - '@csstools/css-color-parser@4.1.0':
667 - resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==}
715 + '@csstools/css-color-parser@4.1.1':
716 + resolution: {integrity: sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==}
717 engines: {node: '>=20.19.0'}
718 peerDependencies:
719 '@csstools/css-parser-algorithms': ^4.0.0
@@ -676,8 +725,8 @@ packages:
725 peerDependencies:
726 '@csstools/css-tokenizer': ^4.0.0
727
679 - '@csstools/css-syntax-patches-for-csstree@1.1.3':
680 - resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==}
728 + '@csstools/css-syntax-patches-for-csstree@1.1.4':
729 + resolution: {integrity: sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==}
730 peerDependencies:
731 css-tree: ^3.2.1
732 peerDependenciesMeta:
@@ -688,187 +737,94 @@ packages:
737 resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
738 engines: {node: '>=20.19.0'}
739
691 - '@e18e/eslint-plugin@0.3.0':
692 - resolution: {integrity: sha512-hHgfpxsrZ2UYHcicA+tGZnmk19uJTaye9VH79O+XS8R4ona2Hx3xjhXghclNW58uXMk3xXlbYEOMr8thsoBmWg==}
740 + '@e18e/eslint-plugin@0.4.1':
741 + resolution: {integrity: sha512-Re00N8ad1HsNrzpuIX7Bhdr8RSaFWp6VgwJUEJF+47+D1CMcXoS7VNRkIG23e46pddhgxWU0cWk4wYiQIuMHqQ==}
742 peerDependencies:
743 eslint: ^9.0.0 || ^10.0.0
695 - oxlint: ^1.55.0
744 + oxlint: ^1.61.0
745 peerDependenciesMeta:
746 eslint:
747 optional: true
748 oxlint:
749 optional: true
750
702 - '@emotion/hash@0.8.0':
703 - resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
704 -
705 - '@es-joy/jsdoccomment@0.84.0':
706 - resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==}
707 - engines: {node: ^20.19.0 || ^22.13.0 || >=24}
708 -
709 - '@es-joy/jsdoccomment@0.86.0':
710 - resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==}
711 - engines: {node: ^20.19.0 || ^22.13.0 || >=24}
712 -
713 - '@es-joy/resolve.exports@1.2.0':
714 - resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
715 - engines: {node: '>=10'}
716 -
717 - '@esbuild/aix-ppc64@0.27.7':
718 - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
719 - engines: {node: '>=18'}
720 - cpu: [ppc64]
721 - os: [aix]
722 -
723 - '@esbuild/android-arm64@0.27.7':
724 - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
725 - engines: {node: '>=18'}
726 - cpu: [arm64]
727 - os: [android]
728 -
729 - '@esbuild/android-arm@0.27.7':
730 - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
731 - engines: {node: '>=18'}
732 - cpu: [arm]
733 - os: [android]
751 + '@emnapi/core@1.10.0':
752 + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
753
735 - '@esbuild/android-x64@0.27.7':
736 - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
737 - engines: {node: '>=18'}
738 - cpu: [x64]
739 - os: [android]
754 + '@emnapi/runtime@1.10.0':
755 + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
756
741 - '@esbuild/darwin-arm64@0.27.7':
742 - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
743 - engines: {node: '>=18'}
744 - cpu: [arm64]
745 - os: [darwin]
757 + '@emnapi/wasi-threads@1.2.1':
758 + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
759
747 - '@esbuild/darwin-x64@0.27.7':
748 - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
749 - engines: {node: '>=18'}
750 - cpu: [x64]
751 - os: [darwin]
760 + '@emotion/babel-plugin@11.13.5':
761 + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
762
753 - '@esbuild/freebsd-arm64@0.27.7':
754 - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
755 - engines: {node: '>=18'}
756 - cpu: [arm64]
757 - os: [freebsd]
758 -
759 - '@esbuild/freebsd-x64@0.27.7':
760 - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
761 - engines: {node: '>=18'}
762 - cpu: [x64]
763 - os: [freebsd]
764 -
765 - '@esbuild/linux-arm64@0.27.7':
766 - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
767 - engines: {node: '>=18'}
768 - cpu: [arm64]
769 - os: [linux]
770 -
771 - '@esbuild/linux-arm@0.27.7':
772 - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
773 - engines: {node: '>=18'}
774 - cpu: [arm]
775 - os: [linux]
763 + '@emotion/cache@11.14.0':
764 + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
765
777 - '@esbuild/linux-ia32@0.27.7':
778 - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
779 - engines: {node: '>=18'}
780 - cpu: [ia32]
781 - os: [linux]
782 -
783 - '@esbuild/linux-loong64@0.27.7':
784 - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
785 - engines: {node: '>=18'}
786 - cpu: [loong64]
787 - os: [linux]
766 + '@emotion/hash@0.8.0':
767 + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
768
789 - '@esbuild/linux-mips64el@0.27.7':
790 - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
791 - engines: {node: '>=18'}
792 - cpu: [mips64el]
793 - os: [linux]
769 + '@emotion/hash@0.9.2':
770 + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
771
795 - '@esbuild/linux-ppc64@0.27.7':
796 - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
797 - engines: {node: '>=18'}
798 - cpu: [ppc64]
799 - os: [linux]
772 + '@emotion/is-prop-valid@1.4.0':
773 + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==}
774
801 - '@esbuild/linux-riscv64@0.27.7':
802 - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
803 - engines: {node: '>=18'}
804 - cpu: [riscv64]
805 - os: [linux]
775 + '@emotion/memoize@0.9.0':
776 + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
777
807 - '@esbuild/linux-s390x@0.27.7':
808 - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
809 - engines: {node: '>=18'}
810 - cpu: [s390x]
811 - os: [linux]
778 + '@emotion/react@11.14.0':
779 + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==}
780 + peerDependencies:
781 + '@types/react': '*'
782 + react: '>=16.8.0'
783 + peerDependenciesMeta:
784 + '@types/react':
785 + optional: true
786
813 - '@esbuild/linux-x64@0.27.7':
814 - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
815 - engines: {node: '>=18'}
816 - cpu: [x64]
817 - os: [linux]
787 + '@emotion/serialize@1.3.3':
788 + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
789
819 - '@esbuild/netbsd-arm64@0.27.7':
820 - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
821 - engines: {node: '>=18'}
822 - cpu: [arm64]
823 - os: [netbsd]
790 + '@emotion/sheet@1.4.0':
791 + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
792
825 - '@esbuild/netbsd-x64@0.27.7':
826 - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
827 - engines: {node: '>=18'}
828 - cpu: [x64]
829 - os: [netbsd]
793 + '@emotion/styled@11.14.1':
794 + resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==}
795 + peerDependencies:
796 + '@emotion/react': ^11.0.0-rc.0
797 + '@types/react': '*'
798 + react: '>=16.8.0'
799 + peerDependenciesMeta:
800 + '@types/react':
801 + optional: true
802
831 - '@esbuild/openbsd-arm64@0.27.7':
832 - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
833 - engines: {node: '>=18'}
834 - cpu: [arm64]
835 - os: [openbsd]
803 + '@emotion/unitless@0.10.0':
804 + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
805
837 - '@esbuild/openbsd-x64@0.27.7':
838 - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
839 - engines: {node: '>=18'}
840 - cpu: [x64]
841 - os: [openbsd]
806 + '@emotion/use-insertion-effect-with-fallbacks@1.2.0':
807 + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
808 + peerDependencies:
809 + react: '>=16.8.0'
810
843 - '@esbuild/openharmony-arm64@0.27.7':
844 - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
845 - engines: {node: '>=18'}
846 - cpu: [arm64]
847 - os: [openharmony]
811 + '@emotion/utils@1.4.2':
812 + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
813
849 - '@esbuild/sunos-x64@0.27.7':
850 - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
851 - engines: {node: '>=18'}
852 - cpu: [x64]
853 - os: [sunos]
814 + '@emotion/weak-memoize@0.4.0':
815 + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
816
855 - '@esbuild/win32-arm64@0.27.7':
856 - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
857 - engines: {node: '>=18'}
858 - cpu: [arm64]
859 - os: [win32]
817 + '@es-joy/jsdoccomment@0.84.0':
818 + resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==}
819 + engines: {node: ^20.19.0 || ^22.13.0 || >=24}
820
861 - '@esbuild/win32-ia32@0.27.7':
862 - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
863 - engines: {node: '>=18'}
864 - cpu: [ia32]
865 - os: [win32]
821 + '@es-joy/jsdoccomment@0.86.0':
822 + resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==}
823 + engines: {node: ^20.19.0 || ^22.13.0 || >=24}
824
867 - '@esbuild/win32-x64@0.27.7':
868 - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
869 - engines: {node: '>=18'}
870 - cpu: [x64]
871 - os: [win32]
825 + '@es-joy/resolve.exports@1.2.0':
826 + resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
827 + engines: {node: '>=10'}
828
829 '@eslint-community/eslint-plugin-eslint-comments@4.7.1':
830 resolution: {integrity: sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==}
@@ -886,8 +842,8 @@ packages:
842 resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
843 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
844
889 - '@eslint/compat@2.0.5':
890 - resolution: {integrity: sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==}
845 + '@eslint/compat@2.1.0':
846 + resolution: {integrity: sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==}
847 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
848 peerDependencies:
849 eslint: ^8.40 || 9 || 10
@@ -903,6 +859,10 @@ packages:
859 resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
860 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
861
862 + '@eslint/config-helpers@0.6.0':
863 + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==}
864 + engines: {node: ^20.19.0 || ^22.13.0 || >=24}
865 +
866 '@eslint/core@1.2.1':
867 resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
868 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
@@ -992,25 +952,25 @@ packages:
952 '@iconify/types@2.0.0':
953 resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
954
995 - '@iconify/vue@5.0.0':
996 - resolution: {integrity: sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==}
955 + '@iconify/vue@5.0.1':
956 + resolution: {integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==}
957 peerDependencies:
998 - vue: '>=3'
958 + vue: '>=3.0.0'
959
1000 - '@intlify/core-base@11.4.0':
1001 - resolution: {integrity: sha512-nlxFOnmjJgVkL1PsuSMagyh3qIHTwc2KlO2R3qQQV1ydrcwh1XpM7opWUGqvGaLlktttopDzbLBpr/k5tvbNmA==}
960 + '@intlify/core-base@11.4.2':
961 + resolution: {integrity: sha512-7fpuCcVmeLv2T9qHsARqGvh8xt+sV2fH+Q+gMHFwB/rPXzo85DpbJFKn7dBH1L5p0c2cSh2DW+2h/64EKrISmA==}
962 engines: {node: '>= 16'}
963
1004 - '@intlify/devtools-types@11.4.0':
1005 - resolution: {integrity: sha512-LtQ04kG8/2Nv6AbuINpkjODuhKHdd+MGLlXKW3I0GTCeDsDIBZUot82nnyK7D6+qersF08FqSvoN/eGPcL3c7Q==}
964 + '@intlify/devtools-types@11.4.2':
965 + resolution: {integrity: sha512-3u8EN1kB6EMSi96KXs5k7a8y2X2g4+h3X6iwVZU47cP4n+mTuq//WMjG588BzSp/2XQ/dTXo2BLUXX+XS+PNfA==}
966 engines: {node: '>= 16'}
967
1008 - '@intlify/message-compiler@11.4.0':
1009 - resolution: {integrity: sha512-v455gVZqMb0er63Wd/akX8DXTnwSubgrgQaRigLB60V3xpnq3B99oPvGXW+N4G/5QFt8Ls84FJ8qHJUVnRCs1A==}
968 + '@intlify/message-compiler@11.4.2':
969 + resolution: {integrity: sha512-a6CDSGSMTGrg0BjD97x8TBYPf7qQMDlZipJ6UDfv/pd4OIym8TMlHu3MsH0bTNnRdAG2D6EFEykIgiQPqvtTkA==}
970 engines: {node: '>= 16'}
971
1012 - '@intlify/shared@11.4.0':
1013 - resolution: {integrity: sha512-r9qUeLeO0TMZmUZ+mXS6IGQ6xwzZJaVMK6j4CdoA3eQP8xp3JtCfwkZ30gB4+knlN40pmBdDXgx85SWhMCzHng==}
972 + '@intlify/shared@11.4.2':
973 + resolution: {integrity: sha512-NzpHbguRCsOHDwxmlBa9qu/imc+/QWgsYUaK6FZeNC0wK8QfAbhqrktEp/haVzxU1aikH8IX4ytD+mfFEMi/9A==}
974 engines: {node: '>= 16'}
975
976 '@isaacs/cliui@8.0.2':
@@ -1033,20 +993,20 @@ packages:
993 '@jridgewell/trace-mapping@0.3.31':
994 resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
995
1036 - '@jscpd/badge-reporter@4.0.5':
1037 - resolution: {integrity: sha512-SLVhP00R9lkQ//Ivaanfm7k0L9sewpBven670kk1uGec2SWUOa7MVQcuad/TV59KEZ73UIC1lXvi6O9hAnbpUw==}
996 + '@jscpd/badge-reporter@4.2.2':
997 + resolution: {integrity: sha512-03ngWGBtvdL6dRC7+Q/4FdoUozN4KBHpaJ1SjGnPaMuPoEmcGDdw7W/+HfhPWSwpzam3lfTM2yBsGhrG2g3LqQ==}
998
1039 - '@jscpd/core@4.0.5':
1040 - resolution: {integrity: sha512-Udvym21nWzxjYRVXwwpYNBqZ6b50QV2zHN3fFNzOPPg4cfQVYOZerILB7xNDUsXHC1PCr/N52Tq3q7AElvjWWA==}
999 + '@jscpd/core@4.2.2':
1000 + resolution: {integrity: sha512-YheyoZAVIeZXyQ5mE1lZ+no8Rs8bo02PXnTfW6PN9QrPUOlRsuJ0br5F3T/H6GU8S2DUP5gUJPOp1Lz7oxN+aA==}
1001
1042 - '@jscpd/finder@4.0.5':
1043 - resolution: {integrity: sha512-/2VkRoVrrfya+51sitZo5I9MdwsRaPKB8X3L3khAYoHFXk4L/mUuG81RmGazDHjUIGg22ItlkQtwzorNZ2+aPw==}
1002 + '@jscpd/finder@4.2.2':
1003 + resolution: {integrity: sha512-HGsvprcIVTjSU3x8+Ofb5mKq2gRYYZ8Cd1O00w97x8GWUub5sHLGOdvlP4Bw19FVoZzBz+1pjnF5dDvzEoj4rg==}
1004
1045 - '@jscpd/html-reporter@4.0.5':
1046 - resolution: {integrity: sha512-drK2J8KyPIW9wvaElSIobZFp4dBO9GA++JW4gx3oihvLdDSp8qSo/CNqH47Dw0XkjQTxND3j/+Wz5JWvYRBgFQ==}
1005 + '@jscpd/html-reporter@4.2.2':
1006 + resolution: {integrity: sha512-pw+spkYfgWNiDH9bURB0jWzGlfbpQjc8gUe3c726qzPSgMUe9QB3fBA44e9iAJP/o0jtizgUd4MZHyWRbVAw1w==}
1007
1048 - '@jscpd/tokenizer@4.0.5':
1049 - resolution: {integrity: sha512-WzRujQtN5WedxZVDKuoanxmKAFrxcLrHpcA6kaM4z8AhGtWXZ325yseqgL5TZ8OK7Auwu7kQLlqhfk05fGYG7A==}
1008 + '@jscpd/tokenizer@4.2.2':
1009 + resolution: {integrity: sha512-haV7OWM2xzQ3I7tWgNTAOcR+kkFr0lYxkdnTOSd5Pve4QGx1Jk7kwk9gotqpXTd6AauaPnBdfHPxeZrUY21QYA==}
1010
1011 '@juggle/resize-observer@3.4.0':
1012 resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
@@ -1072,6 +1032,103 @@ packages:
1032 '@microsoft/fetch-event-source@2.0.1':
1033 resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==}
1034
1035 + '@mui/core-downloads-tracker@9.0.1':
1036 + resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==}
1037 +
1038 + '@mui/icons-material@7.3.11':
1039 + resolution: {integrity: sha512-+hz5ilwHZ3djd5es3sCErLioqe/NhZcYTsV/TNXZAMdJdb23F4xzJjqnnZdnurc3S1+ietcssRNqieOhPQLZ7Q==}
1040 + engines: {node: '>=14.0.0'}
1041 + peerDependencies:
1042 + '@mui/material': ^7.3.11
1043 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
1044 + react: ^17.0.0 || ^18.0.0 || ^19.0.0
1045 + peerDependenciesMeta:
1046 + '@types/react':
1047 + optional: true
1048 +
1049 + '@mui/material@9.0.1':
1050 + resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==}
1051 + engines: {node: '>=14.0.0'}
1052 + peerDependencies:
1053 + '@emotion/react': ^11.5.0
1054 + '@emotion/styled': ^11.3.0
1055 + '@mui/material-pigment-css': ^9.0.1
1056 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
1057 + react: ^17.0.0 || ^18.0.0 || ^19.0.0
1058 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
1059 + peerDependenciesMeta:
1060 + '@emotion/react':
1061 + optional: true
1062 + '@emotion/styled':
1063 + optional: true
1064 + '@mui/material-pigment-css':
1065 + optional: true
1066 + '@types/react':
1067 + optional: true
1068 +
1069 + '@mui/private-theming@9.0.1':
1070 + resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==}
1071 + engines: {node: '>=14.0.0'}
1072 + peerDependencies:
1073 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
1074 + react: ^17.0.0 || ^18.0.0 || ^19.0.0
1075 + peerDependenciesMeta:
1076 + '@types/react':
1077 + optional: true
1078 +
1079 + '@mui/styled-engine@9.0.0':
1080 + resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==}
1081 + engines: {node: '>=14.0.0'}
1082 + peerDependencies:
1083 + '@emotion/react': ^11.4.1
1084 + '@emotion/styled': ^11.3.0
1085 + react: ^17.0.0 || ^18.0.0 || ^19.0.0
1086 + peerDependenciesMeta:
1087 + '@emotion/react':
1088 + optional: true
1089 + '@emotion/styled':
1090 + optional: true
1091 +
1092 + '@mui/system@9.0.1':
1093 + resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==}
1094 + engines: {node: '>=14.0.0'}
1095 + peerDependencies:
1096 + '@emotion/react': ^11.5.0
1097 + '@emotion/styled': ^11.3.0
1098 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
1099 + react: ^17.0.0 || ^18.0.0 || ^19.0.0
1100 + peerDependenciesMeta:
1101 + '@emotion/react':
1102 + optional: true
1103 + '@emotion/styled':
1104 + optional: true
1105 + '@types/react':
1106 + optional: true
1107 +
1108 + '@mui/types@9.0.0':
1109 + resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==}
1110 + peerDependencies:
1111 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
1112 + peerDependenciesMeta:
1113 + '@types/react':
1114 + optional: true
1115 +
1116 + '@mui/utils@9.0.1':
1117 + resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==}
1118 + engines: {node: '>=14.0.0'}
1119 + peerDependencies:
1120 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
1121 + react: ^17.0.0 || ^18.0.0 || ^19.0.0
1122 + peerDependenciesMeta:
1123 + '@types/react':
1124 + optional: true
1125 +
1126 + '@napi-rs/wasm-runtime@1.1.4':
1127 + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
1128 + peerDependencies:
1129 + '@emnapi/core': ^1.7.1
1130 + '@emnapi/runtime': ^1.7.1
1131 +
1132 '@nodable/entities@2.1.0':
1133 resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==}
1134
@@ -1087,8 +1144,8 @@ packages:
1144 resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
1145 engines: {node: '>= 8'}
1146
1090 - '@nuxt/kit@3.21.4':
1091 - resolution: {integrity: sha512-XDWhQJsA5hpdFpVSmImQIVXcsANJI07TjT1LZC/AUKJxl/dcM52Rq4uU+b3uqyVl4LZR1fODSDEzLxcdXq4Rmg==}
1147 + '@nuxt/kit@3.21.5':
1148 + resolution: {integrity: sha512-eGo9DjJ9NzKMbJpFU/UTd4c5iOSYuivghKD8W/jVGHs7kew+hdSMvUy401IfQB7EObKPvt/WXEutAIaTg9OsyA==}
1149 engines: {node: '>=18.12.0'}
1150
1151 '@one-ini/wasm@0.1.1':
@@ -1098,6 +1155,9 @@ packages:
1155 resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==}
1156 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
1157
1158 + '@oxc-project/types@0.130.0':
1159 + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==}
1160 +
1161 '@parcel/watcher-android-arm64@2.5.6':
1162 resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
1163 engines: {node: '>= 10.0.0'}
@@ -1197,152 +1257,115 @@ packages:
1257 '@polka/url@1.0.0-next.29':
1258 resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
1259
1260 + '@popperjs/core@2.11.8':
1261 + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
1262 +
1263 '@quansync/fs@1.0.0':
1264 resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
1265
1203 - '@rolldown/pluginutils@1.0.0-rc.13':
1204 - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==}
1205 -
1206 - '@rolldown/pluginutils@1.0.0-rc.18':
1207 - resolution: {integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==}
1208 -
1209 - '@rollup/rollup-android-arm-eabi@4.60.2':
1210 - resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==}
1211 - cpu: [arm]
1212 - os: [android]
1213 -
1214 - '@rollup/rollup-android-arm64@4.60.2':
1215 - resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==}
1266 + '@rolldown/binding-android-arm64@1.0.1':
1267 + resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==}
1268 + engines: {node: ^20.19.0 || >=22.12.0}
1269 cpu: [arm64]
1270 os: [android]
1271
1219 - '@rollup/rollup-darwin-arm64@4.60.2':
1220 - resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==}
1272 + '@rolldown/binding-darwin-arm64@1.0.1':
1273 + resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==}
1274 + engines: {node: ^20.19.0 || >=22.12.0}
1275 cpu: [arm64]
1276 os: [darwin]
1277
1224 - '@rollup/rollup-darwin-x64@4.60.2':
1225 - resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==}
1278 + '@rolldown/binding-darwin-x64@1.0.1':
1279 + resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==}
1280 + engines: {node: ^20.19.0 || >=22.12.0}
1281 cpu: [x64]
1282 os: [darwin]
1283
1229 - '@rollup/rollup-freebsd-arm64@4.60.2':
1230 - resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==}
1231 - cpu: [arm64]
1232 - os: [freebsd]
1233 -
1234 - '@rollup/rollup-freebsd-x64@4.60.2':
1235 - resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==}
1284 + '@rolldown/binding-freebsd-x64@1.0.1':
1285 + resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==}
1286 + engines: {node: ^20.19.0 || >=22.12.0}
1287 cpu: [x64]
1288 os: [freebsd]
1289
1239 - '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
1240 - resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==}
1241 - cpu: [arm]
1242 - os: [linux]
1243 - libc: [glibc]
1244 -
1245 - '@rollup/rollup-linux-arm-musleabihf@4.60.2':
1246 - resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==}
1290 + '@rolldown/binding-linux-arm-gnueabihf@1.0.1':
1291 + resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==}
1292 + engines: {node: ^20.19.0 || >=22.12.0}
1293 cpu: [arm]
1294 os: [linux]
1249 - libc: [musl]
1295
1251 - '@rollup/rollup-linux-arm64-gnu@4.60.2':
1252 - resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==}
1296 + '@rolldown/binding-linux-arm64-gnu@1.0.1':
1297 + resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==}
1298 + engines: {node: ^20.19.0 || >=22.12.0}
1299 cpu: [arm64]
1300 os: [linux]
1301 libc: [glibc]
1302
1257 - '@rollup/rollup-linux-arm64-musl@4.60.2':
1258 - resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==}
1303 + '@rolldown/binding-linux-arm64-musl@1.0.1':
1304 + resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==}
1305 + engines: {node: ^20.19.0 || >=22.12.0}
1306 cpu: [arm64]
1307 os: [linux]
1308 libc: [musl]
1309
1263 - '@rollup/rollup-linux-loong64-gnu@4.60.2':
1264 - resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==}
1265 - cpu: [loong64]
1266 - os: [linux]
1267 - libc: [glibc]
1268 -
1269 - '@rollup/rollup-linux-loong64-musl@4.60.2':
1270 - resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==}
1271 - cpu: [loong64]
1272 - os: [linux]
1273 - libc: [musl]
1274 -
1275 - '@rollup/rollup-linux-ppc64-gnu@4.60.2':
1276 - resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==}
1310 + '@rolldown/binding-linux-ppc64-gnu@1.0.1':
1311 + resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==}
1312 + engines: {node: ^20.19.0 || >=22.12.0}
1313 cpu: [ppc64]
1314 os: [linux]
1315 libc: [glibc]
1316
1281 - '@rollup/rollup-linux-ppc64-musl@4.60.2':
1282 - resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==}
1283 - cpu: [ppc64]
1284 - os: [linux]
1285 - libc: [musl]
1286 -
1287 - '@rollup/rollup-linux-riscv64-gnu@4.60.2':
1288 - resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==}
1289 - cpu: [riscv64]
1290 - os: [linux]
1291 - libc: [glibc]
1292 -
1293 - '@rollup/rollup-linux-riscv64-musl@4.60.2':
1294 - resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==}
1295 - cpu: [riscv64]
1296 - os: [linux]
1297 - libc: [musl]
1298 -
1299 - '@rollup/rollup-linux-s390x-gnu@4.60.2':
1300 - resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==}
1317 + '@rolldown/binding-linux-s390x-gnu@1.0.1':
1318 + resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==}
1319 + engines: {node: ^20.19.0 || >=22.12.0}
1320 cpu: [s390x]
1321 os: [linux]
1322 libc: [glibc]
1323
1305 - '@rollup/rollup-linux-x64-gnu@4.60.2':
1306 - resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==}
1324 + '@rolldown/binding-linux-x64-gnu@1.0.1':
1325 + resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==}
1326 + engines: {node: ^20.19.0 || >=22.12.0}
1327 cpu: [x64]
1328 os: [linux]
1329 libc: [glibc]
1330
1311 - '@rollup/rollup-linux-x64-musl@4.60.2':
1312 - resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==}
1331 + '@rolldown/binding-linux-x64-musl@1.0.1':
1332 + resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==}
1333 + engines: {node: ^20.19.0 || >=22.12.0}
1334 cpu: [x64]
1335 os: [linux]
1336 libc: [musl]
1337
1317 - '@rollup/rollup-openbsd-x64@4.60.2':
1318 - resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==}
1319 - cpu: [x64]
1320 - os: [openbsd]
1321 -
1322 - '@rollup/rollup-openharmony-arm64@4.60.2':
1323 - resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==}
1338 + '@rolldown/binding-openharmony-arm64@1.0.1':
1339 + resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==}
1340 + engines: {node: ^20.19.0 || >=22.12.0}
1341 cpu: [arm64]
1342 os: [openharmony]
1343
1327 - '@rollup/rollup-win32-arm64-msvc@4.60.2':
1328 - resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==}
1329 - cpu: [arm64]
1330 - os: [win32]
1344 + '@rolldown/binding-wasm32-wasi@1.0.1':
1345 + resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==}
1346 + engines: {node: ^20.19.0 || >=22.12.0}
1347 + cpu: [wasm32]
1348
1332 - '@rollup/rollup-win32-ia32-msvc@4.60.2':
1333 - resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==}
1334 - cpu: [ia32]
1349 + '@rolldown/binding-win32-arm64-msvc@1.0.1':
1350 + resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==}
1351 + engines: {node: ^20.19.0 || >=22.12.0}
1352 + cpu: [arm64]
1353 os: [win32]
1354
1337 - '@rollup/rollup-win32-x64-gnu@4.60.2':
1338 - resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==}
1355 + '@rolldown/binding-win32-x64-msvc@1.0.1':
1356 + resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==}
1357 + engines: {node: ^20.19.0 || >=22.12.0}
1358 cpu: [x64]
1359 os: [win32]
1360
1342 - '@rollup/rollup-win32-x64-msvc@4.60.2':
1343 - resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==}
1361 + '@rolldown/pluginutils@1.0.1':
1362 + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
1363 +
1364 + '@rollup/rollup-linux-x64-gnu@4.60.4':
1365 + resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==}
1366 cpu: [x64]
1345 - os: [win32]
1367 + os: [linux]
1368 + libc: [glibc]
1369
1370 '@shikijs/core@4.0.2':
1371 resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==}
@@ -1384,11 +1407,24 @@ packages:
1407 '@shikijs/vscode-textmate@10.0.2':
1408 resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
1409
1387 - '@shuffleio/shuffle-mcps@0.0.4':
1388 - resolution: {integrity: sha512-Oj7m3KY4QBO5OdjhDrhAGyf0yQ7SSaaZ8ty75wx0M9C+o+9ftPpefli3n4/P/kD4btCmPmUK3iRGMd3Ov4jP0Q==}
1410 + '@shuffleio/shuffle-mcps@0.0.11':
1411 + resolution: {integrity: sha512-wZnGUT96Ka5nE10ocOYjwn1AGAV4XhzNkAv9n7wXINrzKCtVKzM08rs+10UkW0eIEmMJwZsIzjohLNjzeOa/MA==}
1412 peerDependencies:
1413 + '@emotion/react': '>=11'
1414 + '@emotion/styled': '>=11'
1415 + '@mui/icons-material': ^7.3.9
1416 + '@mui/material': '>=5'
1417 + framer-motion: '>=10'
1418 + lucide-react: '>=0.300.0'
1419 react: '>=18'
1420 react-dom: '>=18'
1421 + react-markdown: '>=8'
1422 + react-router-dom: '>=6'
1423 + remark-gfm: '>=3'
1424 + sonner: '>=1'
1425 + peerDependenciesMeta:
1426 + react-router-dom:
1427 + optional: true
1428
1429 '@sindresorhus/base62@1.0.0':
1430 resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
@@ -1403,69 +1439,69 @@ packages:
1439 peerDependencies:
1440 eslint: ^9.0.0 || ^10.0.0
1441
1406 - '@tailwindcss/node@4.2.4':
1407 - resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==}
1442 + '@tailwindcss/node@4.3.0':
1443 + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==}
1444
1409 - '@tailwindcss/oxide-android-arm64@4.2.4':
1410 - resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==}
1445 + '@tailwindcss/oxide-android-arm64@4.3.0':
1446 + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==}
1447 engines: {node: '>= 20'}
1448 cpu: [arm64]
1449 os: [android]
1450
1415 - '@tailwindcss/oxide-darwin-arm64@4.2.4':
1416 - resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==}
1451 + '@tailwindcss/oxide-darwin-arm64@4.3.0':
1452 + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==}
1453 engines: {node: '>= 20'}
1454 cpu: [arm64]
1455 os: [darwin]
1456
1421 - '@tailwindcss/oxide-darwin-x64@4.2.4':
1422 - resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==}
1457 + '@tailwindcss/oxide-darwin-x64@4.3.0':
1458 + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==}
1459 engines: {node: '>= 20'}
1460 cpu: [x64]
1461 os: [darwin]
1462
1427 - '@tailwindcss/oxide-freebsd-x64@4.2.4':
1428 - resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==}
1463 + '@tailwindcss/oxide-freebsd-x64@4.3.0':
1464 + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==}
1465 engines: {node: '>= 20'}
1466 cpu: [x64]
1467 os: [freebsd]
1468
1433 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
1434 - resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==}
1469 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0':
1470 + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==}
1471 engines: {node: '>= 20'}
1472 cpu: [arm]
1473 os: [linux]
1474
1439 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
1440 - resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==}
1475 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0':
1476 + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==}
1477 engines: {node: '>= 20'}
1478 cpu: [arm64]
1479 os: [linux]
1480 libc: [glibc]
1481
1446 - '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
1447 - resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==}
1482 + '@tailwindcss/oxide-linux-arm64-musl@4.3.0':
1483 + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==}
1484 engines: {node: '>= 20'}
1485 cpu: [arm64]
1486 os: [linux]
1487 libc: [musl]
1488
1453 - '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
1454 - resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==}
1489 + '@tailwindcss/oxide-linux-x64-gnu@4.3.0':
1490 + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==}
1491 engines: {node: '>= 20'}
1492 cpu: [x64]
1493 os: [linux]
1494 libc: [glibc]
1495
1460 - '@tailwindcss/oxide-linux-x64-musl@4.2.4':
1461 - resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==}
1496 + '@tailwindcss/oxide-linux-x64-musl@4.3.0':
1497 + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==}
1498 engines: {node: '>= 20'}
1499 cpu: [x64]
1500 os: [linux]
1501 libc: [musl]
1502
1467 - '@tailwindcss/oxide-wasm32-wasi@4.2.4':
1468 - resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==}
1503 + '@tailwindcss/oxide-wasm32-wasi@4.3.0':
1504 + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==}
1505 engines: {node: '>=14.0.0'}
1506 cpu: [wasm32]
1507 bundledDependencies:
@@ -1476,30 +1512,33 @@ packages:
1512 - '@emnapi/wasi-threads'
1513 - tslib
1514
1479 - '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
1480 - resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==}
1515 + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0':
1516 + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==}
1517 engines: {node: '>= 20'}
1518 cpu: [arm64]
1519 os: [win32]
1520
1485 - '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
1486 - resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==}
1521 + '@tailwindcss/oxide-win32-x64-msvc@4.3.0':
1522 + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==}
1523 engines: {node: '>= 20'}
1524 cpu: [x64]
1525 os: [win32]
1526
1491 - '@tailwindcss/oxide@4.2.4':
1492 - resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==}
1527 + '@tailwindcss/oxide@4.3.0':
1528 + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==}
1529 engines: {node: '>= 20'}
1530
1495 - '@tailwindcss/vite@4.2.4':
1496 - resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==}
1531 + '@tailwindcss/vite@4.3.0':
1532 + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==}
1533 peerDependencies:
1534 vite: ^5.2.0 || ^6 || ^7 || ^8
1535
1536 '@tsconfig/node20@20.1.9':
1537 resolution: {integrity: sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==}
1538
1539 + '@tybys/wasm-util@0.10.2':
1540 + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
1541 +
1542 '@types/bytes@3.1.5':
1543 resolution: {integrity: sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==}
1544
@@ -1518,8 +1557,11 @@ packages:
1557 '@types/esrecurse@4.3.1':
1558 resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
1559
1521 - '@types/estree@1.0.8':
1522 - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
1560 + '@types/estree-jsx@1.0.5':
1561 + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
1562 +
1563 + '@types/estree@1.0.9':
1564 + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
1565
1566 '@types/file-saver@2.0.7':
1567 resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==}
@@ -1530,8 +1572,11 @@ packages:
1572 '@types/hast@3.0.4':
1573 resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
1574
1533 - '@types/jsdom@28.0.1':
1534 - resolution: {integrity: sha512-GJq2QE4TAZ5ajSoCasn5DOFm8u1mI3tIFvM5tIq3W5U/RTB6gsHwc6Yhpl91X9VSDOUVblgXmG+2+sSvFQrdlw==}
1575 + '@types/jsdom@28.0.3':
1576 + resolution: {integrity: sha512-/HQ2uFoetFTXuye8vzIcHw2z6Fwi7Hi/qcgC+RoS9NCyewiqxhVGqlG+ViGB6lkax481R6dmhf1I7lIGlzJStQ==}
1577 +
1578 + '@types/jsesc@2.5.1':
1579 + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
1580
1581 '@types/json-schema@7.0.15':
1582 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -1566,17 +1611,25 @@ packages:
1611 '@types/ms@2.1.0':
1612 resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
1613
1569 - '@types/node@25.6.0':
1570 - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
1614 + '@types/node@25.8.0':
1615 + resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==}
1616
1617 '@types/parse-json@4.0.2':
1618 resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
1619
1620 + '@types/prop-types@15.7.15':
1621 + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
1622 +
1623 '@types/react-dom@19.2.3':
1624 resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
1625 peerDependencies:
1626 '@types/react': ^19.2.0
1627
1628 + '@types/react-transition-group@4.4.12':
1629 + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
1630 + peerDependencies:
1631 + '@types/react': '*'
1632 +
1633 '@types/react@19.2.14':
1634 resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
1635
@@ -1589,6 +1642,9 @@ packages:
1642 '@types/tough-cookie@4.0.5':
1643 resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
1644
1645 + '@types/unist@2.0.11':
1646 + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
1647 +
1648 '@types/unist@3.0.3':
1649 resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
1650
@@ -1598,73 +1654,74 @@ packages:
1654 '@types/web-bluetooth@0.0.21':
1655 resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
1656
1601 - '@typescript-eslint/eslint-plugin@8.59.1':
1602 - resolution: {integrity: sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag==}
1657 + '@typescript-eslint/eslint-plugin@8.59.3':
1658 + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==}
1659 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1660 peerDependencies:
1605 - '@typescript-eslint/parser': ^8.59.1
1661 + '@typescript-eslint/parser': ^8.59.3
1662 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1663 typescript: '>=4.8.4 <6.1.0'
1664
1609 - '@typescript-eslint/parser@8.59.1':
1610 - resolution: {integrity: sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA==}
1665 + '@typescript-eslint/parser@8.59.3':
1666 + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==}
1667 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1668 peerDependencies:
1669 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1670 typescript: '>=4.8.4 <6.1.0'
1671
1616 - '@typescript-eslint/project-service@8.59.1':
1617 - resolution: {integrity: sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg==}
1672 + '@typescript-eslint/project-service@8.59.3':
1673 + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==}
1674 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1675 peerDependencies:
1676 typescript: '>=4.8.4 <6.1.0'
1677
1622 - '@typescript-eslint/rule-tester@8.59.1':
1623 - resolution: {integrity: sha512-VAlTRylRP+zh2jepYylwEllQSI8yP0QWQqUKc3xcPbuSlnDeC0CjbpWAOp5CrqfGl9ZMGw74BjZnutb7mILOzA==}
1678 + '@typescript-eslint/rule-tester@8.59.3':
1679 + resolution: {integrity: sha512-GH5g42Dt0IvM/G4ojD4JoOJaZCmogsQBGTSNExRa1ND+sDLI1SVppzYX66+xLIX/jFhcJRpYhiBOhHJEpLtgkA==}
1680 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1681 peerDependencies:
1682 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1683 + typescript: '>=4.8.4 <6.1.0'
1684
1628 - '@typescript-eslint/scope-manager@8.59.1':
1629 - resolution: {integrity: sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg==}
1685 + '@typescript-eslint/scope-manager@8.59.3':
1686 + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==}
1687 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1688
1632 - '@typescript-eslint/tsconfig-utils@8.59.1':
1633 - resolution: {integrity: sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA==}
1689 + '@typescript-eslint/tsconfig-utils@8.59.3':
1690 + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==}
1691 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1692 peerDependencies:
1693 typescript: '>=4.8.4 <6.1.0'
1694
1638 - '@typescript-eslint/type-utils@8.59.1':
1639 - resolution: {integrity: sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w==}
1695 + '@typescript-eslint/type-utils@8.59.3':
1696 + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==}
1697 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1698 peerDependencies:
1699 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1700 typescript: '>=4.8.4 <6.1.0'
1701
1645 - '@typescript-eslint/types@8.59.1':
1646 - resolution: {integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==}
1702 + '@typescript-eslint/types@8.59.3':
1703 + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==}
1704 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1705
1649 - '@typescript-eslint/typescript-estree@8.59.1':
1650 - resolution: {integrity: sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==}
1706 + '@typescript-eslint/typescript-estree@8.59.3':
1707 + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==}
1708 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1709 peerDependencies:
1710 typescript: '>=4.8.4 <6.1.0'
1711
1655 - '@typescript-eslint/utils@8.59.1':
1656 - resolution: {integrity: sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA==}
1712 + '@typescript-eslint/utils@8.59.3':
1713 + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==}
1714 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1715 peerDependencies:
1716 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
1717 typescript: '>=4.8.4 <6.1.0'
1718
1662 - '@typescript-eslint/visitor-keys@8.59.1':
1663 - resolution: {integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==}
1719 + '@typescript-eslint/visitor-keys@8.59.3':
1720 + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==}
1721 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1722
1666 - '@ungap/structured-clone@1.3.0':
1667 - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
1723 + '@ungap/structured-clone@1.3.1':
1724 + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==}
1725
1726 '@vitejs/plugin-vue-jsx@5.1.5':
1727 resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==}
@@ -1673,15 +1730,15 @@ packages:
1730 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
1731 vue: ^3.0.0
1732
1676 - '@vitejs/plugin-vue@6.0.6':
1677 - resolution: {integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==}
1733 + '@vitejs/plugin-vue@6.0.7':
1734 + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==}
1735 engines: {node: ^20.19.0 || >=22.12.0}
1736 peerDependencies:
1737 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
1738 vue: ^3.2.25
1739
1683 - '@vitest/eslint-plugin@1.6.16':
1684 - resolution: {integrity: sha512-2pBN1F1JXq6zTSaYC58CMJa7pGxXIRsLfOioeZM4cPE3pRdSh1ySTSoHPQlOTEF5WgoVzWZQxhGQ3ygT78hOVg==}
1740 + '@vitest/eslint-plugin@1.6.17':
1741 + resolution: {integrity: sha512-sIVY9ZeVcXyPxFCNRkIt8Yw4keKIcUyp9/8qnmuomPwE+ST1htw5sZsbqdUMTiah9SmCg1JYoK9RqdDtPeNYYg==}
1742 engines: {node: '>=18'}
1743 peerDependencies:
1744 '@typescript-eslint/eslint-plugin': '*'
@@ -1696,11 +1753,11 @@ packages:
1753 vitest:
1754 optional: true
1755
1699 - '@vitest/expect@4.1.5':
1700 - resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==}
1756 + '@vitest/expect@4.1.6':
1757 + resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==}
1758
1702 - '@vitest/mocker@4.1.5':
1703 - resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==}
1759 + '@vitest/mocker@4.1.6':
1760 + resolution: {integrity: sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==}
1761 peerDependencies:
1762 msw: ^2.4.9
1763 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -1710,20 +1767,20 @@ packages:
1767 vite:
1768 optional: true
1769
1713 - '@vitest/pretty-format@4.1.5':
1714 - resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==}
1770 + '@vitest/pretty-format@4.1.6':
1771 + resolution: {integrity: sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==}
1772
1716 - '@vitest/runner@4.1.5':
1717 - resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==}
1773 + '@vitest/runner@4.1.6':
1774 + resolution: {integrity: sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==}
1775
1719 - '@vitest/snapshot@4.1.5':
1720 - resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==}
1776 + '@vitest/snapshot@4.1.6':
1777 + resolution: {integrity: sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==}
1778
1722 - '@vitest/spy@4.1.5':
1723 - resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==}
1779 + '@vitest/spy@4.1.6':
1780 + resolution: {integrity: sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==}
1781
1725 - '@vitest/utils@4.1.5':
1726 - resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==}
1782 + '@vitest/utils@4.1.6':
1783 + resolution: {integrity: sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==}
1784
1785 '@volar/language-core@2.4.28':
1786 resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
@@ -1775,17 +1832,17 @@ packages:
1832 peerDependencies:
1833 '@babel/core': ^7.0.0-0
1834
1778 - '@vue/compiler-core@3.5.33':
1779 - resolution: {integrity: sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw==}
1835 + '@vue/compiler-core@3.5.34':
1836 + resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==}
1837
1781 - '@vue/compiler-dom@3.5.33':
1782 - resolution: {integrity: sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA==}
1838 + '@vue/compiler-dom@3.5.34':
1839 + resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==}
1840
1784 - '@vue/compiler-sfc@3.5.33':
1785 - resolution: {integrity: sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA==}
1841 + '@vue/compiler-sfc@3.5.34':
1842 + resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==}
1843
1787 - '@vue/compiler-ssr@3.5.33':
1788 - resolution: {integrity: sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A==}
1844 + '@vue/compiler-ssr@3.5.34':
1845 + resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==}
1846
1847 '@vue/devtools-api@6.6.4':
1848 resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
@@ -1793,45 +1850,45 @@ packages:
1850 '@vue/devtools-api@7.7.9':
1851 resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
1852
1796 - '@vue/devtools-api@8.1.1':
1797 - resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
1853 + '@vue/devtools-api@8.1.2':
1854 + resolution: {integrity: sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==}
1855
1799 - '@vue/devtools-core@8.1.1':
1800 - resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==}
1856 + '@vue/devtools-core@8.1.2':
1857 + resolution: {integrity: sha512-ZGGyaSBP4/+bN2Nd9ZHNYAVDRIzMw1rv2RyXWtyZlo6mQal+IDmTvKY4V+DjAEBhaXt30mHmsgYp1yXJ/2tIWg==}
1858 peerDependencies:
1859 vue: ^3.0.0
1860
1861 '@vue/devtools-kit@7.7.9':
1862 resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
1863
1807 - '@vue/devtools-kit@8.1.1':
1808 - resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==}
1864 + '@vue/devtools-kit@8.1.2':
1865 + resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==}
1866
1867 '@vue/devtools-shared@7.7.9':
1868 resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
1869
1813 - '@vue/devtools-shared@8.1.1':
1814 - resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==}
1870 + '@vue/devtools-shared@8.1.2':
1871 + resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==}
1872
1816 - '@vue/language-core@3.2.7':
1817 - resolution: {integrity: sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==}
1873 + '@vue/language-core@3.2.9':
1874 + resolution: {integrity: sha512-ie0ojt/0fU/GfIogh+zgHbaYRPlt9S+cLOxcWwF7nTSFh897BVgnFKL2byT4kpp1mlqYWZ2psGwSniyE2xsxYw==}
1875
1819 - '@vue/reactivity@3.5.33':
1820 - resolution: {integrity: sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A==}
1876 + '@vue/reactivity@3.5.34':
1877 + resolution: {integrity: sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==}
1878
1822 - '@vue/runtime-core@3.5.33':
1823 - resolution: {integrity: sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ==}
1879 + '@vue/runtime-core@3.5.34':
1880 + resolution: {integrity: sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==}
1881
1825 - '@vue/runtime-dom@3.5.33':
1826 - resolution: {integrity: sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw==}
1882 + '@vue/runtime-dom@3.5.34':
1883 + resolution: {integrity: sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==}
1884
1828 - '@vue/server-renderer@3.5.33':
1829 - resolution: {integrity: sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw==}
1885 + '@vue/server-renderer@3.5.34':
1886 + resolution: {integrity: sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==}
1887 peerDependencies:
1831 - vue: 3.5.33
1888 + vue: 3.5.34
1889
1833 - '@vue/shared@3.5.33':
1834 - resolution: {integrity: sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==}
1890 + '@vue/shared@3.5.34':
1891 + resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==}
1892
1893 '@vue/test-utils@2.4.10':
1894 resolution: {integrity: sha512-SmoZ5EA1kYiAFs9NkYdiFFQF+cSnUwnvlYEbY+DogWQZUiqOm/Y29eSbc5T6yi75SgSF9863SBeXniIEoPajCA==}
@@ -1904,15 +1961,19 @@ packages:
1961 engines: {node: '>=0.4.0'}
1962 hasBin: true
1963
1964 + agent-base@6.0.2:
1965 + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
1966 + engines: {node: '>= 6.0.0'}
1967 +
1968 ajv@6.15.0:
1969 resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
1970
1910 - algoliasearch@5.52.0:
1911 - resolution: {integrity: sha512-0ZzY9mjqV7gop/AH8pIBiAS8giXP7WcSiUfoFYIzYAK9QC5c37E4SIVtJVBMwlURc0/uNt2o4RcNRvdHa4CJ5w==}
1971 + algoliasearch@5.52.1:
1972 + resolution: {integrity: sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg==}
1973 engines: {node: '>= 14.0.0'}
1974
1914 - alien-signals@3.1.2:
1915 - resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==}
1975 + alien-signals@3.2.1:
1976 + resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==}
1977
1978 ansi-regex@5.0.1:
1979 resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -1930,12 +1991,12 @@ packages:
1991 resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
1992 engines: {node: '>=12'}
1993
1933 - ansis@4.2.0:
1934 - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
1994 + ansis@4.3.0:
1995 + resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==}
1996 engines: {node: '>=14'}
1997
1937 - apexcharts@5.10.6:
1938 - resolution: {integrity: sha512-FJQGbso3iRuOwUYnj0yUhkWeKeJE6aboVol+ae09lsc+lbLMWZqSRbrAWVa/qishLiaeG2icxdvmVkm+9n6kOQ==}
1998 + apexcharts@5.12.0:
1999 + resolution: {integrity: sha512-vNCw62M5rhVg09FHFCL/ztpH7VlTOF8/+lWLUVjBdQffIAgQaxtyDGfojCyYoZHM3Hh17srWwz6rrD/XzblRSw==}
2000
2001 are-docs-informative@0.0.2:
2002 resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
@@ -1986,15 +2047,22 @@ packages:
2047 asynckit@0.4.0:
2048 resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
2049
1989 - axios@1.16.0:
1990 - resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==}
2050 + axios@1.16.1:
2051 + resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==}
2052 +
2053 + babel-plugin-macros@3.1.0:
2054 + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
2055 + engines: {node: '>=10', npm: '>=6'}
2056
2057 babel-walk@3.0.0-canary-5:
2058 resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
2059 engines: {node: '>= 10.0.0'}
2060
1996 - badgen@3.2.3:
1997 - resolution: {integrity: sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==}
2061 + badgen@3.3.2:
2062 + resolution: {integrity: sha512-fbQwK9norfdzbdsoPwbLIAmgBXDGEme3jeIyqPAH7o6vp9lmuLHS7uXULvOiQ6XnMLkYNG4gDjILf74hgtTAug==}
2063 +
2064 + bail@2.0.2:
2065 + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
2066
2067 balanced-match@1.0.2:
2068 resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -2003,8 +2071,8 @@ packages:
2071 resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
2072 engines: {node: 18 || 20 || >=22}
2073
2006 - baseline-browser-mapping@2.10.25:
2007 - resolution: {integrity: sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA==}
2074 + baseline-browser-mapping@2.10.29:
2075 + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==}
2076 engines: {node: '>=6.0.0'}
2077 hasBin: true
2078
@@ -2030,8 +2098,8 @@ packages:
2098 brace-expansion@2.1.0:
2099 resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
2100
2033 - brace-expansion@5.0.5:
2034 - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
2101 + brace-expansion@5.0.6:
2102 + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
2103 engines: {node: 18 || 20 || >=22}
2104
2105 braces@3.0.3:
@@ -2043,8 +2111,8 @@ packages:
2111 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
2112 hasBin: true
2113
2046 - builtin-modules@5.1.0:
2047 - resolution: {integrity: sha512-c5JxaDrzwRjq3WyJkI1AGR5xy6Gr6udlt7sQPbl09+3ckB+Zo2qqQ2KhCTBr7Q8dHB43bENGYEk4xddrFH/b7A==}
2114 + builtin-modules@5.2.0:
2115 + resolution: {integrity: sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==}
2116 engines: {node: '>=18.20'}
2117
2118 bundle-name@4.1.0:
@@ -2090,8 +2158,8 @@ packages:
2158 resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
2159 engines: {node: '>=10'}
2160
2093 - caniuse-lite@1.0.30001791:
2094 - resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==}
2161 + caniuse-lite@1.0.30001792:
2162 + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==}
2163
2164 ccount@2.0.1:
2165 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -2115,6 +2183,9 @@ packages:
2183 character-parser@2.2.0:
2184 resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
2185
2186 + character-reference-invalid@2.0.1:
2187 + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
2188 +
2189 check-more-types@2.24.0:
2190 resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==}
2191 engines: {node: '>= 0.8.0'}
@@ -2152,6 +2223,10 @@ packages:
2223 resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
2224 engines: {node: '>=12'}
2225
2226 + clsx@2.1.1:
2227 + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
2228 + engines: {node: '>=6'}
2229 +
2230 codemirror@6.0.2:
2231 resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==}
2232
@@ -2219,13 +2294,23 @@ packages:
2294 constantinople@4.0.1:
2295 resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
2296
2297 + convert-source-map@1.9.0:
2298 + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
2299 +
2300 convert-source-map@2.0.0:
2301 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
2302
2303 + cookie@1.1.1:
2304 + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
2305 + engines: {node: '>=18'}
2306 +
2307 copy-anything@4.0.5:
2308 resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
2309 engines: {node: '>=18'}
2310
2311 + copy-to-clipboard@3.3.3:
2312 + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
2313 +
2314 core-js-compat@3.49.0:
2315 resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
2316
@@ -2375,6 +2460,9 @@ packages:
2460 doctypes@1.1.0:
2461 resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==}
2462
2463 + dom-helpers@5.2.1:
2464 + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
2465 +
2466 dom-serializer@2.0.0:
2467 resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
2468
@@ -2410,8 +2498,8 @@ packages:
2498 engines: {node: '>=14'}
2499 hasBin: true
2500
2413 - electron-to-chromium@1.5.348:
2414 - resolution: {integrity: sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==}
2501 + electron-to-chromium@1.5.355:
2502 + resolution: {integrity: sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ==}
2503
2504 emoji-regex@8.0.0:
2505 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2419,25 +2507,21 @@ packages:
2507 emoji-regex@9.2.2:
2508 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
2509
2422 - empathic@2.0.0:
2423 - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
2510 + empathic@2.0.1:
2511 + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
2512 engines: {node: '>=14'}
2513
2514 end-of-stream@1.4.5:
2515 resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
2516
2429 - enhanced-resolve@5.21.0:
2430 - resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==}
2517 + enhanced-resolve@5.21.3:
2518 + resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==}
2519 engines: {node: '>=10.13.0'}
2520
2521 entities@4.5.0:
2522 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
2523 engines: {node: '>=0.12'}
2524
2437 - entities@6.0.1:
2438 - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
2439 - engines: {node: '>=0.12'}
2440 -
2525 entities@7.0.1:
2526 resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
2527 engines: {node: '>=0.12'}
@@ -2474,11 +2558,6 @@ packages:
2558 resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
2559 engines: {node: '>= 0.4'}
2560
2477 - esbuild@0.27.7:
2478 - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
2479 - engines: {node: '>=18'}
2480 - hasBin: true
2481 -
2561 escalade@3.2.0:
2562 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
2563 engines: {node: '>=6'}
@@ -2525,8 +2604,8 @@ packages:
2604 peerDependencies:
2605 eslint: '*'
2606
2528 - eslint-plugin-antfu@3.2.2:
2529 - resolution: {integrity: sha512-Qzixht2Dmd/pMbb5EnKqw2V8TiWHbotPlsORO8a+IzCLFwE0RxK8a9k4DCTFPzBwyxJzH+0m2Mn8IUGeGQkyUw==}
2607 + eslint-plugin-antfu@3.2.3:
2608 + resolution: {integrity: sha512-U2fnz/H0gFPxpuC7QpaHa0Jv2AgCZ5hunp36SOP/yWo8yFzgvMh8X4pZ4uN4IKoqtBhk7G3HuVa93Urf51+sZg==}
2609 peerDependencies:
2610 eslint: '*'
2611
@@ -2538,11 +2617,6 @@ packages:
2617 '@typescript-eslint/utils': '*'
2618 eslint: '*'
2619
2541 - eslint-plugin-depend@1.5.0:
2542 - resolution: {integrity: sha512-i3UeLYmclf1Icp35+6W7CR4Bp2PIpDgBuf/mpmXK5UeLkZlvYJ21VuQKKHHAIBKRTPivPGX/gZl5JGno1o9Y0A==}
2543 - peerDependencies:
2544 - eslint: '>=8.40.0'
2545 -
2620 eslint-plugin-es-x@7.8.0:
2621 resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==}
2622 engines: {node: ^14.18.0 || >=16.0.0}
@@ -2567,11 +2641,18 @@ packages:
2641 peerDependencies:
2642 eslint: '>=9.38.0'
2643
2570 - eslint-plugin-n@17.24.0:
2571 - resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==}
2572 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2644 + eslint-plugin-n@18.0.1:
2645 + resolution: {integrity: sha512-q3ARhk+eZRc7myR0KHx+R3/GJeOHF+Ir6PK95Pu2tEX8Sl/4BIpmmVLva2kPrjC2gCmn6WHlHm+3yeo6Rxhycw==}
2646 + engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2647 peerDependencies:
2574 - eslint: '>=8.23.0'
2648 + eslint: '>=8.57.1'
2649 + ts-declaration-location: ^1.0.6
2650 + typescript: '>=5.0.0'
2651 + peerDependenciesMeta:
2652 + ts-declaration-location:
2653 + optional: true
2654 + typescript:
2655 + optional: true
2656
2657 eslint-plugin-no-only-tests@3.4.0:
2658 resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==}
@@ -2615,14 +2696,14 @@ packages:
2696 '@typescript-eslint/eslint-plugin':
2697 optional: true
2698
2618 - eslint-plugin-vue@10.9.0:
2619 - resolution: {integrity: sha512-EFNNzu4HqtTRb5DJINpyd+u3bDdzETWDMpCzG+UBHz1tpsnMDCeOcf61u4Wy/cbXnMymK+MT9bjH7KcG1fItSw==}
2699 + eslint-plugin-vue@10.9.1:
2700 + resolution: {integrity: sha512-cHB0Tf4Duvzwecwd/AqWzZvF/QszE13BhjVUpVXWCy9AeMR5GjkAjP3i85vqgLgOuTmkHR1OJ5oMeqLHtuw8zg==}
2701 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2702 peerDependencies:
2703 '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
2704 '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
2705 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
2625 - vue-eslint-parser: ^10.0.0
2706 + vue-eslint-parser: ^10.3.0
2707 peerDependenciesMeta:
2708 '@stylistic/eslint-plugin':
2709 optional: true
@@ -2657,8 +2738,8 @@ packages:
2738 resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
2739 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2740
2660 - eslint@10.3.0:
2661 - resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==}
2741 + eslint@10.4.0:
2742 + resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==}
2743 engines: {node: ^20.19.0 || ^22.13.0 || >=24}
2744 hasBin: true
2745 peerDependencies:
@@ -2692,6 +2773,9 @@ packages:
2773 resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
2774 engines: {node: '>=4.0'}
2775
2776 + estree-util-is-identifier-name@3.0.0:
2777 + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
2778 +
2779 estree-walker@2.0.2:
2780 resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
2781
@@ -2727,6 +2811,9 @@ packages:
2811 exsolve@1.0.8:
2812 resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
2813
2814 + extend@3.0.2:
2815 + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
2816 +
2817 fast-deep-equal@3.1.3:
2818 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
2819
@@ -2749,11 +2836,11 @@ packages:
2836 fast-wrap-ansi@0.2.0:
2837 resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==}
2838
2752 - fast-xml-builder@1.1.5:
2753 - resolution: {integrity: sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==}
2839 + fast-xml-builder@1.2.0:
2840 + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==}
2841
2755 - fast-xml-parser@5.7.2:
2756 - resolution: {integrity: sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==}
2842 + fast-xml-parser@5.8.0:
2843 + resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==}
2844 hasBin: true
2845
2846 fastq@1.20.1:
@@ -2782,6 +2869,9 @@ packages:
2869 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
2870 engines: {node: '>=8'}
2871
2872 + find-root@1.1.0:
2873 + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
2874 +
2875 find-up-simple@1.0.1:
2876 resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
2877 engines: {node: '>=18'}
@@ -2826,11 +2916,25 @@ packages:
2916 resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
2917 engines: {node: '>=0.4.x'}
2918
2919 + framer-motion@12.38.0:
2920 + resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==}
2921 + peerDependencies:
2922 + '@emotion/is-prop-valid': '*'
2923 + react: ^18.0.0 || ^19.0.0
2924 + react-dom: ^18.0.0 || ^19.0.0
2925 + peerDependenciesMeta:
2926 + '@emotion/is-prop-valid':
2927 + optional: true
2928 + react:
2929 + optional: true
2930 + react-dom:
2931 + optional: true
2932 +
2933 framesync@6.1.2:
2934 resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==}
2935
2832 - fs-extra@11.3.4:
2833 - resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==}
2936 + fs-extra@11.3.5:
2937 + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==}
2938 engines: {node: '>=14.14'}
2939
2940 fsevents@2.3.3:
@@ -2932,6 +3036,9 @@ packages:
3036 hast-util-to-html@9.0.5:
3037 resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
3038
3039 + hast-util-to-jsx-runtime@2.3.6:
3040 + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
3041 +
3042 hast-util-whitespace@3.0.0:
3043 resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
3044
@@ -2945,6 +3052,9 @@ packages:
3052 resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
3053 engines: {node: '>=12.0.0'}
3054
3055 + hoist-non-react-statics@3.3.2:
3056 + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
3057 +
3058 homedir-polyfill@1.0.3:
3059 resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
3060 engines: {node: '>=0.10.0'}
@@ -2959,9 +3069,16 @@ packages:
3069 html-entities@2.6.0:
3070 resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
3071
3072 + html-url-attributes@3.0.1:
3073 + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
3074 +
3075 html-void-elements@3.0.0:
3076 resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
3077
3078 + https-proxy-agent@5.0.1:
3079 + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
3080 + engines: {node: '>= 6'}
3081 +
3082 human-signals@1.1.1:
3083 resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
3084 engines: {node: '>=8.12.0'}
@@ -3003,6 +3120,15 @@ packages:
3120 ini@1.3.8:
3121 resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
3122
3123 + inline-style-parser@0.2.7:
3124 + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
3125 +
3126 + is-alphabetical@2.0.1:
3127 + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
3128 +
3129 + is-alphanumerical@2.0.1:
3130 + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
3131 +
3132 is-arrayish@0.2.1:
3133 resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
3134
@@ -3010,10 +3136,13 @@ packages:
3136 resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
3137 engines: {node: '>=18.20'}
3138
3013 - is-core-module@2.16.1:
3014 - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
3139 + is-core-module@2.16.2:
3140 + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==}
3141 engines: {node: '>= 0.4'}
3142
3143 + is-decimal@2.0.1:
3144 + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
3145 +
3146 is-docker@2.2.1:
3147 resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
3148 engines: {node: '>=8'}
@@ -3039,6 +3168,9 @@ packages:
3168 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
3169 engines: {node: '>=0.10.0'}
3170
3171 + is-hexadecimal@2.0.1:
3172 + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
3173 +
3174 is-inside-container@1.0.0:
3175 resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
3176 engines: {node: '>=14.16'}
@@ -3048,6 +3180,10 @@ packages:
3180 resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
3181 engines: {node: '>=0.12.0'}
3182
3183 + is-plain-obj@4.1.0:
3184 + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
3185 + engines: {node: '>=12'}
3186 +
3187 is-potential-custom-element-name@1.0.1:
3188 resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
3189
@@ -3088,12 +3224,12 @@ packages:
3224 jackspeak@3.4.3:
3225 resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
3226
3091 - jiti@2.6.1:
3092 - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
3227 + jiti@2.7.0:
3228 + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
3229 hasBin: true
3230
3095 - joi@18.1.2:
3096 - resolution: {integrity: sha512-rF5MAmps5esSlhCA+N1b6IYHDw9j/btzGaqfgie522jS02Ju/HXBxamlXVlKEHAxoMKQL77HWI8jlqWsFuekZA==}
3231 + joi@18.2.1:
3232 + resolution: {integrity: sha512-2/OKlogiESf2Nh3TFCrRjrr9z1DRHeW0I+KReF67+4J0Ns+8hBtHRmoWAZ2OFU6I5+TWLEe6sVlSdXPjHm5UbQ==}
3233 engines: {node: '>= 20'}
3234
3235 jose@6.2.3:
@@ -3121,11 +3257,11 @@ packages:
3257 resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
3258 hasBin: true
3259
3124 - jscpd-sarif-reporter@4.0.7:
3125 - resolution: {integrity: sha512-Q/VlfTI/Nbjc8dZ/2pDVIf1aRi2bM2CTYujcAoeYr7brRnS4o5ZeW86W8q7MM7cQu40gezlNckl+E9wKFSMFiA==}
3260 + jscpd-sarif-reporter@4.2.2:
3261 + resolution: {integrity: sha512-qpLhFZ6pVJcIjvEcUVRxnsrQuTbRY7bBnAgzXY9th0mL1uYhb1ii+SkMcBrBchH23vFfZu/9EG4lIxLCGfEpCQ==}
3262
3127 - jscpd@4.0.9:
3128 - resolution: {integrity: sha512-fp6Sh42W3mIPoQgZmgYmKDLQzEDnnX2vaGlTN4haILkB2vsi+ewcCHEtWR/2CR/QbsBvAvsNo8U5Sa+p9aHiGw==}
3263 + jscpd@4.2.2:
3264 + resolution: {integrity: sha512-zmoSXtG5Dsgo3QHhnsA06okqnKu3DlYBeAuD7MRnNQoNiL13UgBBh28pEEhe0tyR4yqYXk4Q3GAFoHx5cY+oDw==}
3265 hasBin: true
3266
3267 jsdoc-type-pratt-parser@7.1.1:
@@ -3181,8 +3317,8 @@ packages:
3317 jstransformer@1.0.0:
3318 resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==}
3319
3184 - katex@0.16.45:
3185 - resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==}
3320 + katex@0.16.46:
3321 + resolution: {integrity: sha512-WHy4Coo+bGZyH7NwJKHkS04YFsFcarWbAEOAC3EMndzdN6VSZqklLLIgfxzyaW9jDoeGYJX9SWbJPKpecox0Uw==}
3322 hasBin: true
3323
3324 keyv@4.5.4:
@@ -3309,16 +3445,25 @@ packages:
3445 longest-streak@3.1.0:
3446 resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
3447
3448 + loose-envify@1.4.0:
3449 + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
3450 + hasBin: true
3451 +
3452 lru-cache@10.4.3:
3453 resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
3454
3315 - lru-cache@11.3.5:
3316 - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
3455 + lru-cache@11.3.6:
3456 + resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==}
3457 engines: {node: 20 || >=22}
3458
3459 lru-cache@5.1.1:
3460 resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
3461
3462 + lucide-react@1.16.0:
3463 + resolution: {integrity: sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==}
3464 + peerDependencies:
3465 + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
3466 +
3467 lz-string@1.5.0:
3468 resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
3469 hasBin: true
@@ -3374,6 +3519,18 @@ packages:
3519 mdast-util-math@3.0.0:
3520 resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
3521
3522 + mdast-util-mdx-expression@2.0.1:
3523 + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
3524 +
3525 + mdast-util-mdx-jsx@3.2.0:
3526 + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
3527 +
3528 + mdast-util-mdxjs-esm@2.0.1:
3529 + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
3530 +
3531 + mdast-util-newline-to-break@2.0.0:
3532 + resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==}
3533 +
3534 mdast-util-phrasing@4.1.0:
3535 resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
3536
@@ -3547,8 +3704,14 @@ packages:
3704 mlly@1.8.2:
3705 resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
3706
3550 - module-replacements@2.11.0:
3551 - resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==}
3707 + module-replacements@3.0.0-beta.7:
3708 + resolution: {integrity: sha512-n1F9l3gF1wNh13xmnXS2JU7P9c3DlzCgVEyLKrVN0U37RwrXyYoePMMvYvs/6aUONAxbnscphzESZTCorXFh7Q==}
3709 +
3710 + motion-dom@12.38.0:
3711 + resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==}
3712 +
3713 + motion-utils@12.36.0:
3714 + resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==}
3715
3716 mrmime@2.0.1:
3717 resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
@@ -3593,8 +3756,8 @@ packages:
3756 node-fetch-native@1.6.7:
3757 resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
3758
3596 - node-releases@2.0.38:
3597 - resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==}
3759 + node-releases@2.0.44:
3760 + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==}
3761
3762 node-sarif-builder@3.4.0:
3763 resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==}
@@ -3684,6 +3847,9 @@ packages:
3847 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
3848 engines: {node: '>=6'}
3849
3850 + parse-entities@4.0.2:
3851 + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
3852 +
3853 parse-gitignore@2.0.0:
3854 resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
3855 engines: {node: '>=14'}
@@ -3702,9 +3868,6 @@ packages:
3868 parse-statements@1.0.11:
3869 resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
3870
3705 - parse5@7.3.0:
3706 - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
3707 -
3871 parse5@8.0.1:
3872 resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==}
3873
@@ -3809,16 +3972,16 @@ packages:
3972 resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
3973 engines: {node: '>=4'}
3974
3812 - postcss@8.5.13:
3813 - resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==}
3975 + postcss@8.5.14:
3976 + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==}
3977 engines: {node: ^10 || ^12 || >=14}
3978
3979 prelude-ls@1.2.1:
3980 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
3981 engines: {node: '>= 0.8.0'}
3982
3820 - prettier-plugin-tailwindcss@0.7.4:
3821 - resolution: {integrity: sha512-UKii4RjY05SNt/WQi6/NcOn/LsT0/ILLXsxygjbRg5/YZelsSu5jTqorYHPDGq4nZy5q5hpCu+XdGZ1xaJEQgw==}
3983 + prettier-plugin-tailwindcss@0.8.0:
3984 + resolution: {integrity: sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==}
3985 engines: {node: '>=20.19'}
3986 peerDependencies:
3987 '@ianvs/prettier-plugin-sort-imports': '*'
@@ -3880,6 +4043,9 @@ packages:
4043 promise@7.3.1:
4044 resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
4045
4046 + prop-types@15.8.1:
4047 + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
4048 +
4049 property-information@7.1.0:
4050 resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
4051
@@ -3949,13 +4115,53 @@ packages:
4115 rc9@3.0.1:
4116 resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
4117
3952 - react-dom@19.2.5:
3953 - resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==}
4118 + react-dom@19.2.6:
4119 + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==}
4120 + peerDependencies:
4121 + react: ^19.2.6
4122 +
4123 + react-is@16.13.1:
4124 + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
4125 +
4126 + react-is@19.2.6:
4127 + resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==}
4128 +
4129 + react-markdown@10.1.0:
4130 + resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
4131 + peerDependencies:
4132 + '@types/react': '>=18'
4133 + react: '>=18'
4134 +
4135 + react-router-dom@7.15.1:
4136 + resolution: {integrity: sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==}
4137 + engines: {node: '>=20.0.0'}
4138 + peerDependencies:
4139 + react: '>=18'
4140 + react-dom: '>=18'
4141 +
4142 + react-router@7.15.1:
4143 + resolution: {integrity: sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==}
4144 + engines: {node: '>=20.0.0'}
4145 peerDependencies:
3955 - react: ^19.2.5
4146 + react: '>=18'
4147 + react-dom: '>=18'
4148 + peerDependenciesMeta:
4149 + react-dom:
4150 + optional: true
4151
3957 - react@19.2.5:
3958 - resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==}
4152 + react-transition-group@4.4.5:
4153 + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
4154 + peerDependencies:
4155 + react: '>=16.6.0'
4156 + react-dom: '>=16.6.0'
4157 +
4158 + react18-json-view@0.2.10:
4159 + resolution: {integrity: sha512-rYEbaCG/U4THY1qp1xY14/Kbnp9yY3W6Qm3Rmu+jlCIdxzMS5EcD+wI97kCKRoN3CuJyJU8hqkax5xWfl8A4EA==}
4160 + peerDependencies:
4161 + react: '>=16.8.0'
4162 +
4163 + react@19.2.6:
4164 + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==}
4165 engines: {node: '>=0.10.0'}
4166
4167 read-package-json-fast@4.0.0:
@@ -3999,13 +4205,25 @@ packages:
4205 resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==}
4206 hasBin: true
4207
4208 + remark-breaks@4.0.0:
4209 + resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==}
4210 +
4211 + remark-gfm@4.0.1:
4212 + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
4213 +
4214 + remark-parse@11.0.0:
4215 + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
4216 +
4217 + remark-rehype@11.1.2:
4218 + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
4219 +
4220 + remark-stringify@11.0.0:
4221 + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
4222 +
4223 repeat-string@1.6.1:
4224 resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
4225 engines: {node: '>=0.10'}
4226
4006 - reprism@0.0.11:
4007 - resolution: {integrity: sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==}
4008 -
4227 require-directory@2.1.1:
4228 resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
4229 engines: {node: '>=0.10.0'}
@@ -4052,6 +4270,11 @@ packages:
4270 rfdc@1.4.1:
4271 resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
4272
4273 + rolldown@1.0.1:
4274 + resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==}
4275 + engines: {node: ^20.19.0 || >=22.12.0}
4276 + hasBin: true
4277 +
4278 rollup-plugin-visualizer@5.14.0:
4279 resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==}
4280 engines: {node: '>=18'}
@@ -4065,11 +4288,6 @@ packages:
4288 rollup:
4289 optional: true
4290
4068 - rollup@4.60.2:
4069 - resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==}
4070 - engines: {node: '>=18.0.0', npm: '>=8.0.0'}
4071 - hasBin: true
4072 -
4291 run-applescript@7.1.0:
4292 resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
4293 engines: {node: '>=18'}
@@ -4117,11 +4335,14 @@ packages:
4335 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
4336 hasBin: true
4337
4120 - semver@7.7.4:
4121 - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
4338 + semver@7.8.0:
4339 + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==}
4340 engines: {node: '>=10'}
4341 hasBin: true
4342
4343 + set-cookie-parser@2.7.2:
4344 + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
4345 +
4346 shebang-command@2.0.0:
4347 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
4348 engines: {node: '>=8'}
@@ -4155,6 +4376,12 @@ packages:
4376 sisteransi@1.0.5:
4377 resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
4378
4379 + sonner@2.0.7:
4380 + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==}
4381 + peerDependencies:
4382 + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
4383 + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
4384 +
4385 sortablejs@1.14.0:
4386 resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
4387
@@ -4162,6 +4389,10 @@ packages:
4389 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
4390 engines: {node: '>=0.10.0'}
4391
4392 + source-map@0.5.7:
4393 + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
4394 + engines: {node: '>=0.10.0'}
4395 +
4396 source-map@0.7.6:
4397 resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
4398 engines: {node: '>= 12'}
@@ -4191,8 +4422,8 @@ packages:
4422 stackback@0.0.2:
4423 resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
4424
4194 - start-server-and-test@3.0.2:
4195 - resolution: {integrity: sha512-g6v4zPr1RRL5XxXJ+Wnk1GFLb+DGZLjFqse+5lNZ0X7m4SRMC6eOA+AXYboQDfNCEjpnTu0AGrvJb/JTUOg8dQ==}
4425 + start-server-and-test@3.0.5:
4426 + resolution: {integrity: sha512-2SvI2UR+rVM4FQ3GqEnjjfVATln6JgJGsZjRRyAqgl1EI6fJFH5zVCawqJLcmU9vBxwI0ZX9i3M+GFpY+sxWcw==}
4427 engines: {node: ^22 || >=24}
4428 hasBin: true
4429
@@ -4226,15 +4457,24 @@ packages:
4457 resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
4458 engines: {node: '>=12'}
4459
4229 - strnum@2.2.3:
4230 - resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==}
4460 + strnum@2.3.0:
4461 + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==}
4462
4463 style-mod@4.1.3:
4464 resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
4465
4466 + style-to-js@1.1.21:
4467 + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
4468 +
4469 + style-to-object@1.0.14:
4470 + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
4471 +
4472 style-value-types@5.1.2:
4473 resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==}
4474
4475 + stylis@4.2.0:
4476 + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
4477 +
4478 superjson@2.2.6:
4479 resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==}
4480 engines: {node: '>=16'}
@@ -4259,15 +4499,15 @@ packages:
4499 resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
4500 engines: {node: '>=20'}
4501
4262 - tailwindcss@4.2.4:
4263 - resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==}
4502 + tailwindcss@4.3.0:
4503 + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==}
4504
4505 tapable@2.3.3:
4506 resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
4507 engines: {node: '>=6'}
4508
4269 - taze@19.11.0:
4270 - resolution: {integrity: sha512-BlfH8Z6JdoIsrUptnz4P4YuEqdYsa/bSNNDOMhTlsHZ7Bbg1/0NyYh6uPkoRREjrt/kVovV+HYdi1ilHxvChfw==}
4509 + taze@19.12.0:
4510 + resolution: {integrity: sha512-qe9mTHwyJUNgWyqx62chVcJN0bfel2AJHsqlFVVxVto0GiBhKjNsPo0FOnFxpKin1Nh0uBooZHgNAjcsP8t2Fw==}
4511 hasBin: true
4512
4513 thememirror@2.0.1:
@@ -4292,11 +4532,11 @@ packages:
4532 resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
4533 engines: {node: '>=14.0.0'}
4534
4295 - tldts-core@7.0.29:
4296 - resolution: {integrity: sha512-W99NuU7b1DcG3uJ3v9k9VztCH3WialNbBkBft5wCs8V8mexu0XQqaZEYb9l9RNNzK8+3EJ9PKWB0/RUtTQ/o+Q==}
4535 + tldts-core@7.0.30:
4536 + resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==}
4537
4298 - tldts@7.0.29:
4299 - resolution: {integrity: sha512-JIXCerhudr/N6OWLwLF1HVsTTUo7ry6qHa5eWZEkiMuxsIiAACL55tGLfqfHfoH7QaMQUW8fngD7u7TxWexYQg==}
4538 + tldts@7.0.30:
4539 + resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==}
4540 hasBin: true
4541
4542 tmp@0.2.5:
@@ -4311,6 +4551,9 @@ packages:
4551 resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
4552 engines: {node: '>=20'}
4553
4554 + toggle-selection@1.0.6:
4555 + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
4556 +
4557 token-stream@1.0.0:
4558 resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
4559
@@ -4340,17 +4583,15 @@ packages:
4583 trim-lines@3.0.1:
4584 resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
4585
4586 + trough@2.2.0:
4587 + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
4588 +
4589 ts-api-utils@2.5.0:
4590 resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
4591 engines: {node: '>=18.12'}
4592 peerDependencies:
4593 typescript: '>=4.8.4'
4594
4349 - ts-declaration-location@1.0.7:
4350 - resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==}
4351 - peerDependencies:
4352 - typescript: '>=4.0.0'
4353 -
4595 tslib@2.3.0:
4596 resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
4597
@@ -4368,8 +4609,8 @@ packages:
4609 resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
4610 engines: {node: '>=20'}
4611
4371 - typescript@5.9.3:
4372 - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
4612 + typescript@6.0.3:
4613 + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
4614 engines: {node: '>=14.17'}
4615 hasBin: true
4616
@@ -4388,8 +4629,8 @@ packages:
4629 unctx@2.5.0:
4630 resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
4631
4391 - undici-types@7.19.2:
4392 - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
4632 + undici-types@7.24.6:
4633 + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
4634
4635 undici-types@7.25.0:
4636 resolution: {integrity: sha512-AXNgS1Byr27fTI+2bsPEkV9CxkT8H6xNyRI68b3TatlZo3RkzlqQBLL+w7SmGPVpokjHbcuNVQUWE7FRTg+LRA==}
@@ -4398,6 +4639,9 @@ packages:
4639 resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==}
4640 engines: {node: '>=20.18.1'}
4641
4642 + unified@11.0.5:
4643 + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
4644 +
4645 unist-util-is@6.0.1:
4646 resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
4647
@@ -4488,14 +4732,14 @@ packages:
4732 '@nuxt/kit':
4733 optional: true
4734
4491 - vite-plugin-vue-devtools@8.1.1:
4492 - resolution: {integrity: sha512-9qTpOmZ2vHpvlI9hdVXAQ1Ry4I8GcBArU7aPi0qfIaV7fQIXy0L1nb6X4mFY2Gw0dYshHuLbIl0Ulb572SCjsQ==}
4735 + vite-plugin-vue-devtools@8.1.2:
4736 + resolution: {integrity: sha512-gt5h1CNryR9Hy0tvhSbqY3j0F7aj0pGxBxWLa1lXSiZVkhdWDf0vbCOZyjh8ivFGE6FDHTGy3zkcZGlMZdVHig==}
4737 engines: {node: '>=v14.21.3'}
4738 peerDependencies:
4739 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
4740
4497 - vite-plugin-vue-inspector@5.4.0:
4498 - resolution: {integrity: sha512-Iq/024CydcE46FZqWPU4t4lw4uYOdLnFSO1RNxJVt2qY9zxIjmnkBqhHnYaReWM82kmNnaXs7OkfgRrV2GEjyw==}
4741 + vite-plugin-vue-inspector@6.0.0:
4742 + resolution: {integrity: sha512-OpyITJLgZNibxlrik1EmRtvXHDjLRxNPsWkGFTERZs2LgMEdG4W0WoFt5GIgp3a3jRou+eJR8U1zOBk/XQgEbw==}
4743 peerDependencies:
4744 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
4745
@@ -4504,15 +4748,16 @@ packages:
4748 peerDependencies:
4749 vue: '>=3.2.13'
4750
4507 - vite@7.3.2:
4508 - resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==}
4751 + vite@8.0.13:
4752 + resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==}
4753 engines: {node: ^20.19.0 || >=22.12.0}
4754 hasBin: true
4755 peerDependencies:
4756 '@types/node': ^20.19.0 || >=22.12.0
4757 + '@vitejs/devtools': ^0.1.18
4758 + esbuild: ^0.27.0 || ^0.28.0
4759 jiti: '>=1.21.0'
4760 less: ^4.0.0
4515 - lightningcss: ^1.21.0
4761 sass: ^1.70.0
4762 sass-embedded: ^1.70.0
4763 stylus: '>=0.54.8'
@@ -4523,12 +4768,14 @@ packages:
4768 peerDependenciesMeta:
4769 '@types/node':
4770 optional: true
4771 + '@vitejs/devtools':
4772 + optional: true
4773 + esbuild:
4774 + optional: true
4775 jiti:
4776 optional: true
4777 less:
4778 optional: true
4530 - lightningcss:
4531 - optional: true
4779 sass:
4780 optional: true
4781 sass-embedded:
@@ -4544,20 +4791,20 @@ packages:
4791 yaml:
4792 optional: true
4793
4547 - vitest@4.1.5:
4548 - resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==}
4794 + vitest@4.1.6:
4795 + resolution: {integrity: sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==}
4796 engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
4797 hasBin: true
4798 peerDependencies:
4799 '@edge-runtime/vm': '*'
4800 '@opentelemetry/api': ^1.9.0
4801 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
4555 - '@vitest/browser-playwright': 4.1.5
4556 - '@vitest/browser-preview': 4.1.5
4557 - '@vitest/browser-webdriverio': 4.1.5
4558 - '@vitest/coverage-istanbul': 4.1.5
4559 - '@vitest/coverage-v8': 4.1.5
4560 - '@vitest/ui': 4.1.5
4802 + '@vitest/browser-playwright': 4.1.6
4803 + '@vitest/browser-preview': 4.1.6
4804 + '@vitest/browser-webdriverio': 4.1.6
4805 + '@vitest/coverage-istanbul': 4.1.6
4806 + '@vitest/coverage-v8': 4.1.6
4807 + '@vitest/ui': 4.1.6
4808 happy-dom: '*'
4809 jsdom: '*'
4810 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -4609,8 +4856,8 @@ packages:
4856 codemirror: 6.x
4857 vue: 3.x
4858
4612 - vue-component-type-helpers@3.2.7:
4613 - resolution: {integrity: sha512-+gPp5YGmhfsj1IN+xUo7y0fb4clfnOiiUA39y07yW1VzCRjzVgwLbtmdWlghh7mXrPsEaYc7rrIir/HT6C8vYQ==}
4859 + vue-component-type-helpers@3.2.9:
4860 + resolution: {integrity: sha512-S3BiWYaLSzHxTpln665ELSrMR9UYmrIDUmhik7nVZxmJjTKL2/a+ew1hvGxksKelivm0ujjWfG1fYOiU/2e8rA==}
4861
4862 vue-eslint-parser@10.4.0:
4863 resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
@@ -4623,19 +4870,19 @@ packages:
4870 peerDependencies:
4871 vue: ^3.0.0
4872
4626 - vue-i18n@11.4.0:
4627 - resolution: {integrity: sha512-gxLVtcwdvOgwKSzkdb7nHKlW0N85A6aDNmHLnq6V+3w2/BXy/os5l71P7TIlgIQTxX0zJjiz89iImoHi51GieQ==}
4873 + vue-i18n@11.4.2:
4874 + resolution: {integrity: sha512-sADDeKXqAGsPX6tK3t3y2ZiMpbVWN12tG+MhTiJ06rVoh58eGtM4wFyw3uWGbVkXByVp9Ne/AP+nSSzI+J9OAQ==}
4875 engines: {node: '>= 16'}
4876 peerDependencies:
4877 vue: ^3.0.0
4878
4632 - vue-router@5.0.6:
4633 - resolution: {integrity: sha512-9+kmUTGbKMyW9Asoy98IXXYIzrTMT7JDAdpDDeEkorHvybpUvBI2wsrSM5jFOXrFydpzRFJ9vAh+80DN2PGu9w==}
4879 + vue-router@5.0.7:
4880 + resolution: {integrity: sha512-dqfk8kvRbCutmCOCj/XLDqDEYxc1wBdAOGLuVy5M93ifYMsBd5fIjfaPN4tQAbxr5IprdBDIox1gr4wYyOx/SA==}
4881 peerDependencies:
4882 '@pinia/colada': '>=0.21.2'
4636 - '@vue/compiler-sfc': ^3.5.17
4883 + '@vue/compiler-sfc': ^3.5.34
4884 pinia: ^3.0.4
4638 - vue: ^3.5.0
4885 + vue: ^3.5.34
4886 peerDependenciesMeta:
4887 '@pinia/colada':
4888 optional: true
@@ -4649,8 +4896,8 @@ packages:
4896 peerDependencies:
4897 vue: ^3.3.4
4898
4652 - vue-tsc@3.2.7:
4653 - resolution: {integrity: sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ==}
4899 + vue-tsc@3.2.9:
4900 + resolution: {integrity: sha512-qm8/nbo+9eZc1SCndm9wT+gq23pM+wRIdHY0wjm83B3lIginHTwcdrLUyTrKjDWXbMVNjKegNrnymhpdqnCL3A==}
4901 hasBin: true
4902 peerDependencies:
4903 typescript: '>=5.0.0'
@@ -4667,8 +4914,8 @@ packages:
4914 peerDependencies:
4915 vue: ^3.2
4916
4670 - vue@3.5.33:
4671 - resolution: {integrity: sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==}
4917 + vue@3.5.34:
4918 + resolution: {integrity: sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==}
4919 peerDependencies:
4920 typescript: '*'
4921 peerDependenciesMeta:
@@ -4692,8 +4939,8 @@ packages:
4939 resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
4940 engines: {node: '>=18'}
4941
4695 - wait-on@9.0.5:
4696 - resolution: {integrity: sha512-qgnbHDfDTRIp73ANEJNRW/7kn8CrDUcvZz18xotJQku/P4saTGkbIzvnMZebPmVvVNUiRq1qWAPyqCH+W4H8KA==}
4942 + wait-on@9.0.10:
4943 + resolution: {integrity: sha512-rCoJEhvMr0X6alHmwc9abbrA5ZrLZFKpFQVKPNFwl2h7DapXOGdmimIHDtLOWhT4PjhZhxFEtZoQgEXbkDWdZw==}
4944 engines: {node: '>=20.0.0'}
4945 hasBin: true
4946
@@ -4762,6 +5009,10 @@ packages:
5009 resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
5010 engines: {node: '>=18'}
5011
5012 + xml-naming@0.1.0:
5013 + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==}
5014 + engines: {node: '>=16.0.0'}
5015 +
5016 xmlchars@2.2.0:
5017 resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
5018
@@ -4789,8 +5040,8 @@ packages:
5040 resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==}
5041 engines: {node: '>= 6'}
5042
4792 - yaml@2.8.3:
4793 - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
5043 + yaml@2.9.0:
5044 + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
5045 engines: {node: '>= 14.6'}
5046 hasBin: true
5047
@@ -4826,128 +5077,128 @@ snapshots:
5077 dependencies:
5078 lodash: 4.17.21
5079
4829 - '@algolia/abtesting@1.18.0':
5080 + '@algolia/abtesting@1.18.1':
5081 dependencies:
4831 - '@algolia/client-common': 5.52.0
4832 - '@algolia/requester-browser-xhr': 5.52.0
4833 - '@algolia/requester-fetch': 5.52.0
4834 - '@algolia/requester-node-http': 5.52.0
5082 + '@algolia/client-common': 5.52.1
5083 + '@algolia/requester-browser-xhr': 5.52.1
5084 + '@algolia/requester-fetch': 5.52.1
5085 + '@algolia/requester-node-http': 5.52.1
5086
4836 - '@algolia/client-abtesting@5.52.0':
5087 + '@algolia/client-abtesting@5.52.1':
5088 dependencies:
4838 - '@algolia/client-common': 5.52.0
4839 - '@algolia/requester-browser-xhr': 5.52.0
4840 - '@algolia/requester-fetch': 5.52.0
4841 - '@algolia/requester-node-http': 5.52.0
5089 + '@algolia/client-common': 5.52.1
5090 + '@algolia/requester-browser-xhr': 5.52.1
5091 + '@algolia/requester-fetch': 5.52.1
5092 + '@algolia/requester-node-http': 5.52.1
5093
4843 - '@algolia/client-analytics@5.52.0':
5094 + '@algolia/client-analytics@5.52.1':
5095 dependencies:
4845 - '@algolia/client-common': 5.52.0
4846 - '@algolia/requester-browser-xhr': 5.52.0
4847 - '@algolia/requester-fetch': 5.52.0
4848 - '@algolia/requester-node-http': 5.52.0
5096 + '@algolia/client-common': 5.52.1
5097 + '@algolia/requester-browser-xhr': 5.52.1
5098 + '@algolia/requester-fetch': 5.52.1
5099 + '@algolia/requester-node-http': 5.52.1
5100
4850 - '@algolia/client-common@5.52.0': {}
5101 + '@algolia/client-common@5.52.1': {}
5102
4852 - '@algolia/client-insights@5.52.0':
5103 + '@algolia/client-insights@5.52.1':
5104 dependencies:
4854 - '@algolia/client-common': 5.52.0
4855 - '@algolia/requester-browser-xhr': 5.52.0
4856 - '@algolia/requester-fetch': 5.52.0
4857 - '@algolia/requester-node-http': 5.52.0
5105 + '@algolia/client-common': 5.52.1
5106 + '@algolia/requester-browser-xhr': 5.52.1
5107 + '@algolia/requester-fetch': 5.52.1
5108 + '@algolia/requester-node-http': 5.52.1
5109
4859 - '@algolia/client-personalization@5.52.0':
5110 + '@algolia/client-personalization@5.52.1':
5111 dependencies:
4861 - '@algolia/client-common': 5.52.0
4862 - '@algolia/requester-browser-xhr': 5.52.0
4863 - '@algolia/requester-fetch': 5.52.0
4864 - '@algolia/requester-node-http': 5.52.0
5112 + '@algolia/client-common': 5.52.1
5113 + '@algolia/requester-browser-xhr': 5.52.1
5114 + '@algolia/requester-fetch': 5.52.1
5115 + '@algolia/requester-node-http': 5.52.1
5116
4866 - '@algolia/client-query-suggestions@5.52.0':
5117 + '@algolia/client-query-suggestions@5.52.1':
5118 dependencies:
4868 - '@algolia/client-common': 5.52.0
4869 - '@algolia/requester-browser-xhr': 5.52.0
4870 - '@algolia/requester-fetch': 5.52.0
4871 - '@algolia/requester-node-http': 5.52.0
5119 + '@algolia/client-common': 5.52.1
5120 + '@algolia/requester-browser-xhr': 5.52.1
5121 + '@algolia/requester-fetch': 5.52.1
5122 + '@algolia/requester-node-http': 5.52.1
5123
4873 - '@algolia/client-search@5.52.0':
5124 + '@algolia/client-search@5.52.1':
5125 dependencies:
4875 - '@algolia/client-common': 5.52.0
4876 - '@algolia/requester-browser-xhr': 5.52.0
4877 - '@algolia/requester-fetch': 5.52.0
4878 - '@algolia/requester-node-http': 5.52.0
5126 + '@algolia/client-common': 5.52.1
5127 + '@algolia/requester-browser-xhr': 5.52.1
5128 + '@algolia/requester-fetch': 5.52.1
5129 + '@algolia/requester-node-http': 5.52.1
5130
4880 - '@algolia/ingestion@1.52.0':
5131 + '@algolia/ingestion@1.52.1':
5132 dependencies:
4882 - '@algolia/client-common': 5.52.0
4883 - '@algolia/requester-browser-xhr': 5.52.0
4884 - '@algolia/requester-fetch': 5.52.0
4885 - '@algolia/requester-node-http': 5.52.0
5133 + '@algolia/client-common': 5.52.1
5134 + '@algolia/requester-browser-xhr': 5.52.1
5135 + '@algolia/requester-fetch': 5.52.1
5136 + '@algolia/requester-node-http': 5.52.1
5137
4887 - '@algolia/monitoring@1.52.0':
5138 + '@algolia/monitoring@1.52.1':
5139 dependencies:
4889 - '@algolia/client-common': 5.52.0
4890 - '@algolia/requester-browser-xhr': 5.52.0
4891 - '@algolia/requester-fetch': 5.52.0
4892 - '@algolia/requester-node-http': 5.52.0
5140 + '@algolia/client-common': 5.52.1
5141 + '@algolia/requester-browser-xhr': 5.52.1
5142 + '@algolia/requester-fetch': 5.52.1
5143 + '@algolia/requester-node-http': 5.52.1
5144
4894 - '@algolia/recommend@5.52.0':
5145 + '@algolia/recommend@5.52.1':
5146 dependencies:
4896 - '@algolia/client-common': 5.52.0
4897 - '@algolia/requester-browser-xhr': 5.52.0
4898 - '@algolia/requester-fetch': 5.52.0
4899 - '@algolia/requester-node-http': 5.52.0
5147 + '@algolia/client-common': 5.52.1
5148 + '@algolia/requester-browser-xhr': 5.52.1
5149 + '@algolia/requester-fetch': 5.52.1
5150 + '@algolia/requester-node-http': 5.52.1
5151
4901 - '@algolia/requester-browser-xhr@5.52.0':
5152 + '@algolia/requester-browser-xhr@5.52.1':
5153 dependencies:
4903 - '@algolia/client-common': 5.52.0
5154 + '@algolia/client-common': 5.52.1
5155
4905 - '@algolia/requester-fetch@5.52.0':
5156 + '@algolia/requester-fetch@5.52.1':
5157 dependencies:
4907 - '@algolia/client-common': 5.52.0
5158 + '@algolia/client-common': 5.52.1
5159
4909 - '@algolia/requester-node-http@5.52.0':
5160 + '@algolia/requester-node-http@5.52.1':
5161 dependencies:
4911 - '@algolia/client-common': 5.52.0
5162 + '@algolia/client-common': 5.52.1
5163
4913 - '@antfu/eslint-config@8.2.0(@typescript-eslint/rule-tester@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3))(@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.33)(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.5(@types/node@25.6.0)(jsdom@29.1.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)))':
5164 + '@antfu/eslint-config@9.0.0(@typescript-eslint/rule-tester@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3))(@typescript-eslint/utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.34)(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.6(@types/node@25.8.0)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)))':
5165 dependencies:
5166 '@antfu/install-pkg': 1.1.0
4916 - '@clack/prompts': 1.3.0
4917 - '@e18e/eslint-plugin': 0.3.0(eslint@10.3.0(jiti@2.6.1))
4918 - '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@10.3.0(jiti@2.6.1))
5167 + '@clack/prompts': 1.4.0
5168 + '@e18e/eslint-plugin': 0.4.1(eslint@10.4.0(jiti@2.7.0))
5169 + '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@10.4.0(jiti@2.7.0))
5170 '@eslint/markdown': 8.0.1
4920 - '@stylistic/eslint-plugin': 5.10.0(eslint@10.3.0(jiti@2.6.1))
4921 - '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
4922 - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
4923 - '@vitest/eslint-plugin': 1.6.16(@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.5(@types/node@25.6.0)(jsdom@29.1.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)))
4924 - ansis: 4.2.0
5171 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.4.0(jiti@2.7.0))
5172 + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5173 + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5174 + '@vitest/eslint-plugin': 1.6.17(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.6(@types/node@25.8.0)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)))
5175 + ansis: 4.3.0
5176 cac: 7.0.0
4926 - eslint: 10.3.0(jiti@2.6.1)
4927 - eslint-config-flat-gitignore: 2.3.0(eslint@10.3.0(jiti@2.6.1))
5177 + eslint: 10.4.0(jiti@2.7.0)
5178 + eslint-config-flat-gitignore: 2.3.0(eslint@10.4.0(jiti@2.7.0))
5179 eslint-flat-config-utils: 3.2.0
4929 - eslint-merge-processors: 2.0.0(eslint@10.3.0(jiti@2.6.1))
4930 - eslint-plugin-antfu: 3.2.2(eslint@10.3.0(jiti@2.6.1))
4931 - eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3))(@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))
4932 - eslint-plugin-import-lite: 0.6.0(eslint@10.3.0(jiti@2.6.1))
4933 - eslint-plugin-jsdoc: 62.9.0(eslint@10.3.0(jiti@2.6.1))
4934 - eslint-plugin-jsonc: 3.1.2(eslint@10.3.0(jiti@2.6.1))
4935 - eslint-plugin-n: 17.24.0(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
5180 + eslint-merge-processors: 2.0.0(eslint@10.4.0(jiti@2.7.0))
5181 + eslint-plugin-antfu: 3.2.3(eslint@10.4.0(jiti@2.7.0))
5182 + eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3))(@typescript-eslint/utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))
5183 + eslint-plugin-import-lite: 0.6.0(eslint@10.4.0(jiti@2.7.0))
5184 + eslint-plugin-jsdoc: 62.9.0(eslint@10.4.0(jiti@2.7.0))
5185 + eslint-plugin-jsonc: 3.1.2(eslint@10.4.0(jiti@2.7.0))
5186 + eslint-plugin-n: 18.0.1(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5187 eslint-plugin-no-only-tests: 3.4.0
4937 - eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
4938 - eslint-plugin-pnpm: 1.6.0(eslint@10.3.0(jiti@2.6.1))
4939 - eslint-plugin-regexp: 3.1.0(eslint@10.3.0(jiti@2.6.1))
4940 - eslint-plugin-toml: 1.3.1(eslint@10.3.0(jiti@2.6.1))
4941 - eslint-plugin-unicorn: 64.0.0(eslint@10.3.0(jiti@2.6.1))
4942 - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))
4943 - eslint-plugin-vue: 10.9.0(@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.6.1)))(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.6.1)))
4944 - eslint-plugin-yml: 3.3.2(eslint@10.3.0(jiti@2.6.1))
4945 - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.33)(eslint@10.3.0(jiti@2.6.1))
5188 + eslint-plugin-perfectionist: 5.9.0(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
5189 + eslint-plugin-pnpm: 1.6.0(eslint@10.4.0(jiti@2.7.0))
5190 + eslint-plugin-regexp: 3.1.0(eslint@10.4.0(jiti@2.7.0))
5191 + eslint-plugin-toml: 1.3.1(eslint@10.4.0(jiti@2.7.0))
5192 + eslint-plugin-unicorn: 64.0.0(eslint@10.4.0(jiti@2.7.0))
5193 + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))
5194 + eslint-plugin-vue: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@10.4.0(jiti@2.7.0)))(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.4.0(jiti@2.7.0)))
5195 + eslint-plugin-yml: 3.3.2(eslint@10.4.0(jiti@2.7.0))
5196 + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.34)(eslint@10.4.0(jiti@2.7.0))
5197 globals: 17.6.0
5198 local-pkg: 1.1.2
5199 parse-gitignore: 2.0.0
5200 toml-eslint-parser: 1.0.3
4950 - vue-eslint-parser: 10.4.0(eslint@10.3.0(jiti@2.6.1))
5201 + vue-eslint-parser: 10.4.0(eslint@10.4.0(jiti@2.7.0))
5202 yaml-eslint-parser: 2.0.0
5203 transitivePeerDependencies:
5204 - '@eslint/json'
@@ -4957,6 +5208,7 @@ snapshots:
5208 - '@vue/compiler-sfc'
5209 - oxlint
5210 - supports-color
5211 + - ts-declaration-location
5212 - typescript
5213 - vitest
5214
@@ -4975,8 +5227,8 @@ snapshots:
5227 '@asamuzakjp/css-color@5.1.11':
5228 dependencies:
5229 '@asamuzakjp/generational-cache': 1.0.1
4978 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
4979 - '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
5230 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
5231 + '@csstools/css-color-parser': 4.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
5232 '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
5233 '@csstools/css-tokenizer': 4.0.0
5234
@@ -5028,6 +5280,15 @@ snapshots:
5280 '@jridgewell/trace-mapping': 0.3.31
5281 jsesc: 3.1.0
5282
5283 + '@babel/generator@8.0.0-rc.5':
5284 + dependencies:
5285 + '@babel/parser': 8.0.0-rc.5
5286 + '@babel/types': 8.0.0-rc.5
5287 + '@jridgewell/gen-mapping': 0.3.13
5288 + '@jridgewell/trace-mapping': 0.3.31
5289 + '@types/jsesc': 2.5.1
5290 + jsesc: 3.1.0
5291 +
5292 '@babel/helper-annotate-as-pure@7.27.3':
5293 dependencies:
5294 '@babel/types': 7.29.0
@@ -5102,8 +5363,12 @@ snapshots:
5363
5364 '@babel/helper-string-parser@7.27.1': {}
5365
5366 + '@babel/helper-string-parser@8.0.0-rc.5': {}
5367 +
5368 '@babel/helper-validator-identifier@7.28.5': {}
5369
5370 + '@babel/helper-validator-identifier@8.0.0-rc.5': {}
5371 +
5372 '@babel/helper-validator-option@7.27.1': {}
5373
5374 '@babel/helpers@7.29.2':
@@ -5115,6 +5380,10 @@ snapshots:
5380 dependencies:
5381 '@babel/types': 7.29.0
5382
5383 + '@babel/parser@8.0.0-rc.5':
5384 + dependencies:
5385 + '@babel/types': 8.0.0-rc.5
5386 +
5387 '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)':
5388 dependencies:
5389 '@babel/core': 7.29.0
@@ -5160,6 +5429,8 @@ snapshots:
5429 transitivePeerDependencies:
5430 - supports-color
5431
5432 + '@babel/runtime@7.29.2': {}
5433 +
5434 '@babel/template@7.28.6':
5435 dependencies:
5436 '@babel/code-frame': 7.29.0
@@ -5183,74 +5454,79 @@ snapshots:
5454 '@babel/helper-string-parser': 7.27.1
5455 '@babel/helper-validator-identifier': 7.28.5
5456
5457 + '@babel/types@8.0.0-rc.5':
5458 + dependencies:
5459 + '@babel/helper-string-parser': 8.0.0-rc.5
5460 + '@babel/helper-validator-identifier': 8.0.0-rc.5
5461 +
5462 '@bramus/specificity@2.4.2':
5463 dependencies:
5464 css-tree: 3.2.1
5465
5190 - '@clack/core@1.3.0':
5466 + '@clack/core@1.3.1':
5467 dependencies:
5468 fast-wrap-ansi: 0.2.0
5469 sisteransi: 1.0.5
5470
5195 - '@clack/prompts@1.3.0':
5471 + '@clack/prompts@1.4.0':
5472 dependencies:
5197 - '@clack/core': 1.3.0
5473 + '@clack/core': 1.3.1
5474 fast-string-width: 3.0.2
5475 fast-wrap-ansi: 0.2.0
5476 sisteransi: 1.0.5
5477
5202 - '@codemirror/autocomplete@6.20.1':
5478 + '@codemirror/autocomplete@6.20.2':
5479 dependencies:
5480 '@codemirror/language': 6.12.3
5481 '@codemirror/state': 6.6.0
5206 - '@codemirror/view': 6.41.1
5482 + '@codemirror/view': 6.43.0
5483 '@lezer/common': 1.5.2
5484
5485 '@codemirror/commands@6.10.3':
5486 dependencies:
5487 '@codemirror/language': 6.12.3
5488 '@codemirror/state': 6.6.0
5213 - '@codemirror/view': 6.41.1
5489 + '@codemirror/view': 6.43.0
5490 '@lezer/common': 1.5.2
5491
5492 '@codemirror/lang-javascript@6.2.5':
5493 dependencies:
5218 - '@codemirror/autocomplete': 6.20.1
5494 + '@codemirror/autocomplete': 6.20.2
5495 '@codemirror/language': 6.12.3
5220 - '@codemirror/lint': 6.9.5
5496 + '@codemirror/lint': 6.9.6
5497 '@codemirror/state': 6.6.0
5222 - '@codemirror/view': 6.41.1
5498 + '@codemirror/view': 6.43.0
5499 '@lezer/common': 1.5.2
5500 '@lezer/javascript': 1.5.4
5501
5502 '@codemirror/lang-xml@6.1.0':
5503 dependencies:
5228 - '@codemirror/autocomplete': 6.20.1
5504 + '@codemirror/autocomplete': 6.20.2
5505 '@codemirror/language': 6.12.3
5506 '@codemirror/state': 6.6.0
5231 - '@codemirror/view': 6.41.1
5507 + '@codemirror/view': 6.43.0
5508 '@lezer/common': 1.5.2
5509 '@lezer/xml': 1.0.6
5510
5511 '@codemirror/language@6.12.3':
5512 dependencies:
5513 '@codemirror/state': 6.6.0
5238 - '@codemirror/view': 6.41.1
5514 + '@codemirror/view': 6.43.0
5515 '@lezer/common': 1.5.2
5516 '@lezer/highlight': 1.2.3
5517 '@lezer/lr': 1.4.10
5518 style-mod: 4.1.3
5519
5244 - '@codemirror/lint@6.9.5':
5520 + '@codemirror/lint@6.9.6':
5521 dependencies:
5522 '@codemirror/state': 6.6.0
5247 - '@codemirror/view': 6.41.1
5523 + '@codemirror/view': 6.43.0
5524 crelt: 1.0.6
5525
5526 '@codemirror/search@6.7.0':
5527 dependencies:
5528 '@codemirror/state': 6.6.0
5253 - '@codemirror/view': 6.41.1
5529 + '@codemirror/view': 6.43.0
5530 crelt: 1.0.6
5531
5532 '@codemirror/state@6.6.0':
@@ -5261,10 +5537,10 @@ snapshots:
5537 dependencies:
5538 '@codemirror/language': 6.12.3
5539 '@codemirror/state': 6.6.0
5264 - '@codemirror/view': 6.41.1
5540 + '@codemirror/view': 6.43.0
5541 '@lezer/highlight': 1.2.3
5542
5267 - '@codemirror/view@6.41.1':
5543 + '@codemirror/view@6.43.0':
5544 dependencies:
5545 '@codemirror/state': 6.6.0
5546 crelt: 1.0.6
@@ -5278,21 +5554,21 @@ snapshots:
5554 dependencies:
5555 css-render: 0.15.14
5556
5281 - '@css-render/vue3-ssr@0.15.14(vue@3.5.33(typescript@5.9.3))':
5557 + '@css-render/vue3-ssr@0.15.14(vue@3.5.34(typescript@6.0.3))':
5558 dependencies:
5283 - vue: 3.5.33(typescript@5.9.3)
5559 + vue: 3.5.34(typescript@6.0.3)
5560
5561 '@csstools/color-helpers@6.0.2': {}
5562
5287 - '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
5563 + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
5564 dependencies:
5565 '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
5566 '@csstools/css-tokenizer': 4.0.0
5567
5292 - '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
5568 + '@csstools/css-color-parser@4.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
5569 dependencies:
5570 '@csstools/color-helpers': 6.0.2
5295 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
5571 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
5572 '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
5573 '@csstools/css-tokenizer': 4.0.0
5574
@@ -5300,134 +5576,157 @@ snapshots:
5576 dependencies:
5577 '@csstools/css-tokenizer': 4.0.0
5578
5303 - '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)':
5579 + '@csstools/css-syntax-patches-for-csstree@1.1.4(css-tree@3.2.1)':
5580 optionalDependencies:
5581 css-tree: 3.2.1
5582
5583 '@csstools/css-tokenizer@4.0.0': {}
5584
5309 - '@e18e/eslint-plugin@0.3.0(eslint@10.3.0(jiti@2.6.1))':
5585 + '@e18e/eslint-plugin@0.4.1(eslint@10.4.0(jiti@2.7.0))':
5586 dependencies:
5311 - eslint-plugin-depend: 1.5.0(eslint@10.3.0(jiti@2.6.1))
5587 + empathic: 2.0.1
5588 + module-replacements: 3.0.0-beta.7
5589 + semver: 7.8.0
5590 optionalDependencies:
5313 - eslint: 10.3.0(jiti@2.6.1)
5591 + eslint: 10.4.0(jiti@2.7.0)
5592
5315 - '@emotion/hash@0.8.0': {}
5316 -
5317 - '@es-joy/jsdoccomment@0.84.0':
5318 - dependencies:
5319 - '@types/estree': 1.0.8
5320 - '@typescript-eslint/types': 8.59.1
5321 - comment-parser: 1.4.5
5322 - esquery: 1.7.0
5323 - jsdoc-type-pratt-parser: 7.1.1
5324 -
5325 - '@es-joy/jsdoccomment@0.86.0':
5593 + '@emnapi/core@1.10.0':
5594 dependencies:
5327 - '@types/estree': 1.0.8
5328 - '@typescript-eslint/types': 8.59.1
5329 - comment-parser: 1.4.6
5330 - esquery: 1.7.0
5331 - jsdoc-type-pratt-parser: 7.2.0
5332 -
5333 - '@es-joy/resolve.exports@1.2.0': {}
5334 -
5335 - '@esbuild/aix-ppc64@0.27.7':
5336 - optional: true
5337 -
5338 - '@esbuild/android-arm64@0.27.7':
5339 - optional: true
5340 -
5341 - '@esbuild/android-arm@0.27.7':
5342 - optional: true
5343 -
5344 - '@esbuild/android-x64@0.27.7':
5345 - optional: true
5346 -
5347 - '@esbuild/darwin-arm64@0.27.7':
5348 - optional: true
5349 -
5350 - '@esbuild/darwin-x64@0.27.7':
5351 - optional: true
5352 -
5353 - '@esbuild/freebsd-arm64@0.27.7':
5595 + '@emnapi/wasi-threads': 1.2.1
5596 + tslib: 2.8.1
5597 optional: true
5598
5356 - '@esbuild/freebsd-x64@0.27.7':
5599 + '@emnapi/runtime@1.10.0':
5600 + dependencies:
5601 + tslib: 2.8.1
5602 optional: true
5603
5359 - '@esbuild/linux-arm64@0.27.7':
5604 + '@emnapi/wasi-threads@1.2.1':
5605 + dependencies:
5606 + tslib: 2.8.1
5607 optional: true
5608
5362 - '@esbuild/linux-arm@0.27.7':
5363 - optional: true
5609 + '@emotion/babel-plugin@11.13.5':
5610 + dependencies:
5611 + '@babel/helper-module-imports': 7.28.6
5612 + '@babel/runtime': 7.29.2
5613 + '@emotion/hash': 0.9.2
5614 + '@emotion/memoize': 0.9.0
5615 + '@emotion/serialize': 1.3.3
5616 + babel-plugin-macros: 3.1.0
5617 + convert-source-map: 1.9.0
5618 + escape-string-regexp: 4.0.0
5619 + find-root: 1.1.0
5620 + source-map: 0.5.7
5621 + stylis: 4.2.0
5622 + transitivePeerDependencies:
5623 + - supports-color
5624
5365 - '@esbuild/linux-ia32@0.27.7':
5366 - optional: true
5625 + '@emotion/cache@11.14.0':
5626 + dependencies:
5627 + '@emotion/memoize': 0.9.0
5628 + '@emotion/sheet': 1.4.0
5629 + '@emotion/utils': 1.4.2
5630 + '@emotion/weak-memoize': 0.4.0
5631 + stylis: 4.2.0
5632
5368 - '@esbuild/linux-loong64@0.27.7':
5369 - optional: true
5633 + '@emotion/hash@0.8.0': {}
5634
5371 - '@esbuild/linux-mips64el@0.27.7':
5372 - optional: true
5635 + '@emotion/hash@0.9.2': {}
5636
5374 - '@esbuild/linux-ppc64@0.27.7':
5375 - optional: true
5637 + '@emotion/is-prop-valid@1.4.0':
5638 + dependencies:
5639 + '@emotion/memoize': 0.9.0
5640
5377 - '@esbuild/linux-riscv64@0.27.7':
5378 - optional: true
5641 + '@emotion/memoize@0.9.0': {}
5642
5380 - '@esbuild/linux-s390x@0.27.7':
5381 - optional: true
5643 + '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6)':
5644 + dependencies:
5645 + '@babel/runtime': 7.29.2
5646 + '@emotion/babel-plugin': 11.13.5
5647 + '@emotion/cache': 11.14.0
5648 + '@emotion/serialize': 1.3.3
5649 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6)
5650 + '@emotion/utils': 1.4.2
5651 + '@emotion/weak-memoize': 0.4.0
5652 + hoist-non-react-statics: 3.3.2
5653 + react: 19.2.6
5654 + optionalDependencies:
5655 + '@types/react': 19.2.14
5656 + transitivePeerDependencies:
5657 + - supports-color
5658
5383 - '@esbuild/linux-x64@0.27.7':
5384 - optional: true
5659 + '@emotion/serialize@1.3.3':
5660 + dependencies:
5661 + '@emotion/hash': 0.9.2
5662 + '@emotion/memoize': 0.9.0
5663 + '@emotion/unitless': 0.10.0
5664 + '@emotion/utils': 1.4.2
5665 + csstype: 3.2.3
5666
5386 - '@esbuild/netbsd-arm64@0.27.7':
5387 - optional: true
5667 + '@emotion/sheet@1.4.0': {}
5668
5389 - '@esbuild/netbsd-x64@0.27.7':
5390 - optional: true
5669 + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)':
5670 + dependencies:
5671 + '@babel/runtime': 7.29.2
5672 + '@emotion/babel-plugin': 11.13.5
5673 + '@emotion/is-prop-valid': 1.4.0
5674 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6)
5675 + '@emotion/serialize': 1.3.3
5676 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6)
5677 + '@emotion/utils': 1.4.2
5678 + react: 19.2.6
5679 + optionalDependencies:
5680 + '@types/react': 19.2.14
5681 + transitivePeerDependencies:
5682 + - supports-color
5683
5392 - '@esbuild/openbsd-arm64@0.27.7':
5393 - optional: true
5684 + '@emotion/unitless@0.10.0': {}
5685
5395 - '@esbuild/openbsd-x64@0.27.7':
5396 - optional: true
5686 + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.6)':
5687 + dependencies:
5688 + react: 19.2.6
5689
5398 - '@esbuild/openharmony-arm64@0.27.7':
5399 - optional: true
5690 + '@emotion/utils@1.4.2': {}
5691
5401 - '@esbuild/sunos-x64@0.27.7':
5402 - optional: true
5692 + '@emotion/weak-memoize@0.4.0': {}
5693
5404 - '@esbuild/win32-arm64@0.27.7':
5405 - optional: true
5694 + '@es-joy/jsdoccomment@0.84.0':
5695 + dependencies:
5696 + '@types/estree': 1.0.9
5697 + '@typescript-eslint/types': 8.59.3
5698 + comment-parser: 1.4.5
5699 + esquery: 1.7.0
5700 + jsdoc-type-pratt-parser: 7.1.1
5701
5407 - '@esbuild/win32-ia32@0.27.7':
5408 - optional: true
5702 + '@es-joy/jsdoccomment@0.86.0':
5703 + dependencies:
5704 + '@types/estree': 1.0.9
5705 + '@typescript-eslint/types': 8.59.3
5706 + comment-parser: 1.4.6
5707 + esquery: 1.7.0
5708 + jsdoc-type-pratt-parser: 7.2.0
5709
5410 - '@esbuild/win32-x64@0.27.7':
5411 - optional: true
5710 + '@es-joy/resolve.exports@1.2.0': {}
5711
5413 - '@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@10.3.0(jiti@2.6.1))':
5712 + '@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@10.4.0(jiti@2.7.0))':
5713 dependencies:
5714 escape-string-regexp: 4.0.0
5416 - eslint: 10.3.0(jiti@2.6.1)
5715 + eslint: 10.4.0(jiti@2.7.0)
5716 ignore: 7.0.5
5717
5419 - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.6.1))':
5718 + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.7.0))':
5719 dependencies:
5421 - eslint: 10.3.0(jiti@2.6.1)
5720 + eslint: 10.4.0(jiti@2.7.0)
5721 eslint-visitor-keys: 3.4.3
5722
5723 '@eslint-community/regexpp@4.12.2': {}
5724
5426 - '@eslint/compat@2.0.5(eslint@10.3.0(jiti@2.6.1))':
5725 + '@eslint/compat@2.1.0(eslint@10.4.0(jiti@2.7.0))':
5726 dependencies:
5727 '@eslint/core': 1.2.1
5728 optionalDependencies:
5430 - eslint: 10.3.0(jiti@2.6.1)
5729 + eslint: 10.4.0(jiti@2.7.0)
5730
5731 '@eslint/config-array@0.23.5':
5732 dependencies:
@@ -5441,6 +5740,10 @@ snapshots:
5740 dependencies:
5741 '@eslint/core': 1.2.1
5742
5743 + '@eslint/config-helpers@0.6.0':
5744 + dependencies:
5745 + '@eslint/core': 1.2.1
5746 +
5747 '@eslint/core@1.2.1':
5748 dependencies:
5749 '@types/json-schema': 7.0.15
@@ -5475,10 +5778,10 @@ snapshots:
5778
5779 '@exodus/bytes@1.15.0': {}
5780
5478 - '@f3ve/vue-markdown-it@0.2.3(vue@3.5.33(typescript@5.9.3))':
5781 + '@f3ve/vue-markdown-it@0.2.3(vue@3.5.34(typescript@6.0.3))':
5782 dependencies:
5783 markdown-it: 14.1.1
5481 - vue: 3.5.33(typescript@5.9.3)
5784 + vue: 3.5.34(typescript@6.0.3)
5785
5786 '@fontsource/jetbrains-mono@5.2.8': {}
5787
@@ -5522,28 +5825,28 @@ snapshots:
5825
5826 '@iconify/types@2.0.0': {}
5827
5525 - '@iconify/vue@5.0.0(vue@3.5.33(typescript@5.9.3))':
5828 + '@iconify/vue@5.0.1(vue@3.5.34(typescript@6.0.3))':
5829 dependencies:
5830 '@iconify/types': 2.0.0
5528 - vue: 3.5.33(typescript@5.9.3)
5831 + vue: 3.5.34(typescript@6.0.3)
5832
5530 - '@intlify/core-base@11.4.0':
5833 + '@intlify/core-base@11.4.2':
5834 dependencies:
5532 - '@intlify/devtools-types': 11.4.0
5533 - '@intlify/message-compiler': 11.4.0
5534 - '@intlify/shared': 11.4.0
5835 + '@intlify/devtools-types': 11.4.2
5836 + '@intlify/message-compiler': 11.4.2
5837 + '@intlify/shared': 11.4.2
5838
5536 - '@intlify/devtools-types@11.4.0':
5839 + '@intlify/devtools-types@11.4.2':
5840 dependencies:
5538 - '@intlify/core-base': 11.4.0
5539 - '@intlify/shared': 11.4.0
5841 + '@intlify/core-base': 11.4.2
5842 + '@intlify/shared': 11.4.2
5843
5541 - '@intlify/message-compiler@11.4.0':
5844 + '@intlify/message-compiler@11.4.2':
5845 dependencies:
5543 - '@intlify/shared': 11.4.0
5846 + '@intlify/shared': 11.4.2
5847 source-map-js: 1.2.1
5848
5546 - '@intlify/shared@11.4.0': {}
5849 + '@intlify/shared@11.4.2': {}
5850
5851 '@isaacs/cliui@8.0.2':
5852 dependencies:
@@ -5573,39 +5876,38 @@ snapshots:
5876 '@jridgewell/resolve-uri': 3.1.2
5877 '@jridgewell/sourcemap-codec': 1.5.5
5878
5576 - '@jscpd/badge-reporter@4.0.5':
5879 + '@jscpd/badge-reporter@4.2.2':
5880 dependencies:
5578 - badgen: 3.2.3
5881 + badgen: 3.3.2
5882 colors: 1.4.0
5580 - fs-extra: 11.3.4
5883 + fs-extra: 11.3.5
5884
5582 - '@jscpd/core@4.0.5':
5885 + '@jscpd/core@4.2.2':
5886 dependencies:
5887 eventemitter3: 5.0.4
5888
5586 - '@jscpd/finder@4.0.5':
5889 + '@jscpd/finder@4.2.2':
5890 dependencies:
5588 - '@jscpd/core': 4.0.5
5589 - '@jscpd/tokenizer': 4.0.5
5891 + '@jscpd/core': 4.2.2
5892 + '@jscpd/tokenizer': 4.2.2
5893 blamer: 1.0.7
5894 bytes: 3.1.2
5895 cli-table3: 0.6.5
5896 colors: 1.4.0
5897 fast-glob: 3.3.3
5595 - fs-extra: 11.3.4
5898 + fs-extra: 11.3.5
5899 markdown-table: 2.0.0
5900 pug: 3.0.4
5901
5599 - '@jscpd/html-reporter@4.0.5':
5902 + '@jscpd/html-reporter@4.2.2':
5903 dependencies:
5904 colors: 1.4.0
5602 - fs-extra: 11.3.4
5905 + fs-extra: 11.3.5
5906 pug: 3.0.4
5907
5605 - '@jscpd/tokenizer@4.0.5':
5908 + '@jscpd/tokenizer@4.2.2':
5909 dependencies:
5607 - '@jscpd/core': 4.0.5
5608 - reprism: 0.0.11
5910 + '@jscpd/core': 4.2.2
5911 spark-md5: 3.0.2
5912
5913 '@juggle/resize-observer@3.4.0': {}
@@ -5616,25 +5918,119 @@ snapshots:
5918 dependencies:
5919 '@lezer/common': 1.5.2
5920
5619 - '@lezer/javascript@1.5.4':
5921 + '@lezer/javascript@1.5.4':
5922 + dependencies:
5923 + '@lezer/common': 1.5.2
5924 + '@lezer/highlight': 1.2.3
5925 + '@lezer/lr': 1.4.10
5926 +
5927 + '@lezer/lr@1.4.10':
5928 + dependencies:
5929 + '@lezer/common': 1.5.2
5930 +
5931 + '@lezer/xml@1.0.6':
5932 + dependencies:
5933 + '@lezer/common': 1.5.2
5934 + '@lezer/highlight': 1.2.3
5935 + '@lezer/lr': 1.4.10
5936 +
5937 + '@marijn/find-cluster-break@1.0.2': {}
5938 +
5939 + '@microsoft/fetch-event-source@2.0.1': {}
5940 +
5941 + '@mui/core-downloads-tracker@9.0.1': {}
5942 +
5943 + '@mui/icons-material@7.3.11(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)':
5944 + dependencies:
5945 + '@babel/runtime': 7.29.2
5946 + '@mui/material': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
5947 + react: 19.2.6
5948 + optionalDependencies:
5949 + '@types/react': 19.2.14
5950 +
5951 + '@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
5952 + dependencies:
5953 + '@babel/runtime': 7.29.2
5954 + '@mui/core-downloads-tracker': 9.0.1
5955 + '@mui/system': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)
5956 + '@mui/types': 9.0.0(@types/react@19.2.14)
5957 + '@mui/utils': 9.0.1(@types/react@19.2.14)(react@19.2.6)
5958 + '@popperjs/core': 2.11.8
5959 + '@types/react-transition-group': 4.4.12(@types/react@19.2.14)
5960 + clsx: 2.1.1
5961 + csstype: 3.2.3
5962 + prop-types: 15.8.1
5963 + react: 19.2.6
5964 + react-dom: 19.2.6(react@19.2.6)
5965 + react-is: 19.2.6
5966 + react-transition-group: 4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
5967 + optionalDependencies:
5968 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6)
5969 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)
5970 + '@types/react': 19.2.14
5971 +
5972 + '@mui/private-theming@9.0.1(@types/react@19.2.14)(react@19.2.6)':
5973 + dependencies:
5974 + '@babel/runtime': 7.29.2
5975 + '@mui/utils': 9.0.1(@types/react@19.2.14)(react@19.2.6)
5976 + prop-types: 15.8.1
5977 + react: 19.2.6
5978 + optionalDependencies:
5979 + '@types/react': 19.2.14
5980 +
5981 + '@mui/styled-engine@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(react@19.2.6)':
5982 + dependencies:
5983 + '@babel/runtime': 7.29.2
5984 + '@emotion/cache': 11.14.0
5985 + '@emotion/serialize': 1.3.3
5986 + '@emotion/sheet': 1.4.0
5987 + csstype: 3.2.3
5988 + prop-types: 15.8.1
5989 + react: 19.2.6
5990 + optionalDependencies:
5991 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6)
5992 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)
5993 +
5994 + '@mui/system@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)':
5995 dependencies:
5621 - '@lezer/common': 1.5.2
5622 - '@lezer/highlight': 1.2.3
5623 - '@lezer/lr': 1.4.10
5996 + '@babel/runtime': 7.29.2
5997 + '@mui/private-theming': 9.0.1(@types/react@19.2.14)(react@19.2.6)
5998 + '@mui/styled-engine': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(react@19.2.6)
5999 + '@mui/types': 9.0.0(@types/react@19.2.14)
6000 + '@mui/utils': 9.0.1(@types/react@19.2.14)(react@19.2.6)
6001 + clsx: 2.1.1
6002 + csstype: 3.2.3
6003 + prop-types: 15.8.1
6004 + react: 19.2.6
6005 + optionalDependencies:
6006 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6)
6007 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)
6008 + '@types/react': 19.2.14
6009
5625 - '@lezer/lr@1.4.10':
6010 + '@mui/types@9.0.0(@types/react@19.2.14)':
6011 dependencies:
5627 - '@lezer/common': 1.5.2
6012 + '@babel/runtime': 7.29.2
6013 + optionalDependencies:
6014 + '@types/react': 19.2.14
6015
5629 - '@lezer/xml@1.0.6':
6016 + '@mui/utils@9.0.1(@types/react@19.2.14)(react@19.2.6)':
6017 dependencies:
5631 - '@lezer/common': 1.5.2
5632 - '@lezer/highlight': 1.2.3
5633 - '@lezer/lr': 1.4.10
5634 -
5635 - '@marijn/find-cluster-break@1.0.2': {}
6018 + '@babel/runtime': 7.29.2
6019 + '@mui/types': 9.0.0(@types/react@19.2.14)
6020 + '@types/prop-types': 15.7.15
6021 + clsx: 2.1.1
6022 + prop-types: 15.8.1
6023 + react: 19.2.6
6024 + react-is: 19.2.6
6025 + optionalDependencies:
6026 + '@types/react': 19.2.14
6027
5637 - '@microsoft/fetch-event-source@2.0.1': {}
6028 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
6029 + dependencies:
6030 + '@emnapi/core': 1.10.0
6031 + '@emnapi/runtime': 1.10.0
6032 + '@tybys/wasm-util': 0.10.2
6033 + optional: true
6034
6035 '@nodable/entities@2.1.0': {}
6036
@@ -5650,7 +6046,7 @@ snapshots:
6046 '@nodelib/fs.scandir': 2.1.5
6047 fastq: 1.20.1
6048
5653 - '@nuxt/kit@3.21.4':
6049 + '@nuxt/kit@3.21.5':
6050 dependencies:
6051 c12: 3.3.4
6052 consola: 3.4.2
@@ -5659,7 +6055,7 @@ snapshots:
6055 errx: 0.1.0
6056 exsolve: 1.0.8
6057 ignore: 7.0.5
5662 - jiti: 2.6.1
6058 + jiti: 2.7.0
6059 klona: 2.0.6
6060 knitwork: 1.3.0
6061 mlly: 1.8.2
@@ -5668,7 +6064,7 @@ snapshots:
6064 pkg-types: 2.3.1
6065 rc9: 3.0.1
6066 scule: 1.3.0
5671 - semver: 7.7.4
6067 + semver: 7.8.0
6068 tinyglobby: 0.2.16
6069 ufo: 1.6.4
6070 unctx: 2.5.0
@@ -5681,6 +6077,8 @@ snapshots:
6077
6078 '@ota-meshi/ast-token-store@0.3.0': {}
6079
6080 + '@oxc-project/types@0.130.0': {}
6081 +
6082 '@parcel/watcher-android-arm64@2.5.6':
6083 optional: true
6084
@@ -5749,87 +6147,64 @@ snapshots:
6147
6148 '@polka/url@1.0.0-next.29': {}
6149
6150 + '@popperjs/core@2.11.8': {}
6151 +
6152 '@quansync/fs@1.0.0':
6153 dependencies:
6154 quansync: 1.0.0
6155
5756 - '@rolldown/pluginutils@1.0.0-rc.13': {}
5757 -
5758 - '@rolldown/pluginutils@1.0.0-rc.18': {}
5759 -
5760 - '@rollup/rollup-android-arm-eabi@4.60.2':
5761 - optional: true
5762 -
5763 - '@rollup/rollup-android-arm64@4.60.2':
5764 - optional: true
5765 -
5766 - '@rollup/rollup-darwin-arm64@4.60.2':
5767 - optional: true
5768 -
5769 - '@rollup/rollup-darwin-x64@4.60.2':
6156 + '@rolldown/binding-android-arm64@1.0.1':
6157 optional: true
6158
5772 - '@rollup/rollup-freebsd-arm64@4.60.2':
6159 + '@rolldown/binding-darwin-arm64@1.0.1':
6160 optional: true
6161
5775 - '@rollup/rollup-freebsd-x64@4.60.2':
6162 + '@rolldown/binding-darwin-x64@1.0.1':
6163 optional: true
6164
5778 - '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
6165 + '@rolldown/binding-freebsd-x64@1.0.1':
6166 optional: true
6167
5781 - '@rollup/rollup-linux-arm-musleabihf@4.60.2':
6168 + '@rolldown/binding-linux-arm-gnueabihf@1.0.1':
6169 optional: true
6170
5784 - '@rollup/rollup-linux-arm64-gnu@4.60.2':
6171 + '@rolldown/binding-linux-arm64-gnu@1.0.1':
6172 optional: true
6173
5787 - '@rollup/rollup-linux-arm64-musl@4.60.2':
6174 + '@rolldown/binding-linux-arm64-musl@1.0.1':
6175 optional: true
6176
5790 - '@rollup/rollup-linux-loong64-gnu@4.60.2':
6177 + '@rolldown/binding-linux-ppc64-gnu@1.0.1':
6178 optional: true
6179
5793 - '@rollup/rollup-linux-loong64-musl@4.60.2':
6180 + '@rolldown/binding-linux-s390x-gnu@1.0.1':
6181 optional: true
6182
5796 - '@rollup/rollup-linux-ppc64-gnu@4.60.2':
6183 + '@rolldown/binding-linux-x64-gnu@1.0.1':
6184 optional: true
6185
5799 - '@rollup/rollup-linux-ppc64-musl@4.60.2':
6186 + '@rolldown/binding-linux-x64-musl@1.0.1':
6187 optional: true
6188
5802 - '@rollup/rollup-linux-riscv64-gnu@4.60.2':
6189 + '@rolldown/binding-openharmony-arm64@1.0.1':
6190 optional: true
6191
5805 - '@rollup/rollup-linux-riscv64-musl@4.60.2':
5806 - optional: true
5807 -
5808 - '@rollup/rollup-linux-s390x-gnu@4.60.2':
5809 - optional: true
5810 -
5811 - '@rollup/rollup-linux-x64-gnu@4.60.2':
5812 - optional: true
5813 -
5814 - '@rollup/rollup-linux-x64-musl@4.60.2':
5815 - optional: true
5816 -
5817 - '@rollup/rollup-openbsd-x64@4.60.2':
5818 - optional: true
5819 -
5820 - '@rollup/rollup-openharmony-arm64@4.60.2':
6192 + '@rolldown/binding-wasm32-wasi@1.0.1':
6193 + dependencies:
6194 + '@emnapi/core': 1.10.0
6195 + '@emnapi/runtime': 1.10.0
6196 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
6197 optional: true
6198
5823 - '@rollup/rollup-win32-arm64-msvc@4.60.2':
6199 + '@rolldown/binding-win32-arm64-msvc@1.0.1':
6200 optional: true
6201
5826 - '@rollup/rollup-win32-ia32-msvc@4.60.2':
6202 + '@rolldown/binding-win32-x64-msvc@1.0.1':
6203 optional: true
6204
5829 - '@rollup/rollup-win32-x64-gnu@4.60.2':
5830 - optional: true
6205 + '@rolldown/pluginutils@1.0.1': {}
6206
5832 - '@rollup/rollup-win32-x64-msvc@4.60.2':
6207 + '@rollup/rollup-linux-x64-gnu@4.60.4':
6208 optional: true
6209
6210 '@shikijs/core@4.0.2':
@@ -5877,96 +6252,112 @@ snapshots:
6252
6253 '@shikijs/vscode-textmate@10.0.2': {}
6254
5880 - '@shuffleio/shuffle-mcps@0.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
5881 - dependencies:
5882 - algoliasearch: 5.52.0
5883 - react: 19.2.5
5884 - react-dom: 19.2.5(react@19.2.5)
6255 + '@shuffleio/shuffle-mcps@0.0.11(eeed91f181808c3b62bfac5431c1b580)':
6256 + dependencies:
6257 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6)
6258 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)
6259 + '@mui/icons-material': 7.3.11(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)
6260 + '@mui/material': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6261 + algoliasearch: 5.52.1
6262 + framer-motion: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6263 + lucide-react: 1.16.0(react@19.2.6)
6264 + react: 19.2.6
6265 + react-dom: 19.2.6(react@19.2.6)
6266 + react-markdown: 10.1.0(@types/react@19.2.14)(react@19.2.6)
6267 + remark-gfm: 4.0.1
6268 + sonner: 2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6269 + optionalDependencies:
6270 + react-router-dom: 7.15.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
6271
6272 '@sindresorhus/base62@1.0.0': {}
6273
6274 '@standard-schema/spec@1.1.0': {}
6275
5890 - '@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.6.1))':
6276 + '@stylistic/eslint-plugin@5.10.0(eslint@10.4.0(jiti@2.7.0))':
6277 dependencies:
5892 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1))
5893 - '@typescript-eslint/types': 8.59.1
5894 - eslint: 10.3.0(jiti@2.6.1)
6278 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
6279 + '@typescript-eslint/types': 8.59.3
6280 + eslint: 10.4.0(jiti@2.7.0)
6281 eslint-visitor-keys: 4.2.1
6282 espree: 10.4.0
6283 estraverse: 5.3.0
6284 picomatch: 4.0.4
6285
5900 - '@tailwindcss/node@4.2.4':
6286 + '@tailwindcss/node@4.3.0':
6287 dependencies:
6288 '@jridgewell/remapping': 2.3.5
5903 - enhanced-resolve: 5.21.0
5904 - jiti: 2.6.1
6289 + enhanced-resolve: 5.21.3
6290 + jiti: 2.7.0
6291 lightningcss: 1.32.0
6292 magic-string: 0.30.21
6293 source-map-js: 1.2.1
5908 - tailwindcss: 4.2.4
6294 + tailwindcss: 4.3.0
6295
5910 - '@tailwindcss/oxide-android-arm64@4.2.4':
6296 + '@tailwindcss/oxide-android-arm64@4.3.0':
6297 optional: true
6298
5913 - '@tailwindcss/oxide-darwin-arm64@4.2.4':
6299 + '@tailwindcss/oxide-darwin-arm64@4.3.0':
6300 optional: true
6301
5916 - '@tailwindcss/oxide-darwin-x64@4.2.4':
6302 + '@tailwindcss/oxide-darwin-x64@4.3.0':
6303 optional: true
6304
5919 - '@tailwindcss/oxide-freebsd-x64@4.2.4':
6305 + '@tailwindcss/oxide-freebsd-x64@4.3.0':
6306 optional: true
6307
5922 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
6308 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0':
6309 optional: true
6310
5925 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
6311 + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0':
6312 optional: true
6313
5928 - '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
6314 + '@tailwindcss/oxide-linux-arm64-musl@4.3.0':
6315 optional: true
6316
5931 - '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
6317 + '@tailwindcss/oxide-linux-x64-gnu@4.3.0':
6318 optional: true
6319
5934 - '@tailwindcss/oxide-linux-x64-musl@4.2.4':
6320 + '@tailwindcss/oxide-linux-x64-musl@4.3.0':
6321 optional: true
6322
5937 - '@tailwindcss/oxide-wasm32-wasi@4.2.4':
6323 + '@tailwindcss/oxide-wasm32-wasi@4.3.0':
6324 optional: true
6325
5940 - '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
6326 + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0':
6327 optional: true
6328
5943 - '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
6329 + '@tailwindcss/oxide-win32-x64-msvc@4.3.0':
6330 optional: true
6331
5946 - '@tailwindcss/oxide@4.2.4':
6332 + '@tailwindcss/oxide@4.3.0':
6333 optionalDependencies:
5948 - '@tailwindcss/oxide-android-arm64': 4.2.4
5949 - '@tailwindcss/oxide-darwin-arm64': 4.2.4
5950 - '@tailwindcss/oxide-darwin-x64': 4.2.4
5951 - '@tailwindcss/oxide-freebsd-x64': 4.2.4
5952 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4
5953 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4
5954 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.4
5955 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.4
5956 - '@tailwindcss/oxide-linux-x64-musl': 4.2.4
5957 - '@tailwindcss/oxide-wasm32-wasi': 4.2.4
5958 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4
5959 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.4
5960 -
5961 - '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))':
5962 - dependencies:
5963 - '@tailwindcss/node': 4.2.4
5964 - '@tailwindcss/oxide': 4.2.4
5965 - tailwindcss: 4.2.4
5966 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
6334 + '@tailwindcss/oxide-android-arm64': 4.3.0
6335 + '@tailwindcss/oxide-darwin-arm64': 4.3.0
6336 + '@tailwindcss/oxide-darwin-x64': 4.3.0
6337 + '@tailwindcss/oxide-freebsd-x64': 4.3.0
6338 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0
6339 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0
6340 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0
6341 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0
6342 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0
6343 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0
6344 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0
6345 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0
6346 +
6347 + '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))':
6348 + dependencies:
6349 + '@tailwindcss/node': 4.3.0
6350 + '@tailwindcss/oxide': 4.3.0
6351 + tailwindcss: 4.3.0
6352 + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)
6353
6354 '@tsconfig/node20@20.1.9': {}
6355
6356 + '@tybys/wasm-util@0.10.2':
6357 + dependencies:
6358 + tslib: 2.8.1
6359 + optional: true
6360 +
6361 '@types/bytes@3.1.5': {}
6362
6363 '@types/chai@5.2.3':
@@ -5986,31 +6377,37 @@ snapshots:
6377
6378 '@types/esrecurse@4.3.1': {}
6379
5989 - '@types/estree@1.0.8': {}
6380 + '@types/estree-jsx@1.0.5':
6381 + dependencies:
6382 + '@types/estree': 1.0.9
6383 +
6384 + '@types/estree@1.0.9': {}
6385
6386 '@types/file-saver@2.0.7': {}
6387
6388 '@types/fs-extra@11.0.4':
6389 dependencies:
6390 '@types/jsonfile': 6.1.4
5996 - '@types/node': 25.6.0
6391 + '@types/node': 25.8.0
6392
6393 '@types/hast@3.0.4':
6394 dependencies:
6395 '@types/unist': 3.0.3
6396
6002 - '@types/jsdom@28.0.1':
6397 + '@types/jsdom@28.0.3':
6398 dependencies:
6004 - '@types/node': 25.6.0
6399 + '@types/node': 25.8.0
6400 '@types/tough-cookie': 4.0.5
6006 - parse5: 7.3.0
6401 + parse5: 8.0.1
6402 undici-types: 7.25.0
6403
6404 + '@types/jsesc@2.5.1': {}
6405 +
6406 '@types/json-schema@7.0.15': {}
6407
6408 '@types/jsonfile@6.1.4':
6409 dependencies:
6013 - '@types/node': 25.6.0
6410 + '@types/node': 25.8.0
6411
6412 '@types/katex@0.16.8': {}
6413
@@ -6037,16 +6434,22 @@ snapshots:
6434
6435 '@types/ms@2.1.0': {}
6436
6040 - '@types/node@25.6.0':
6437 + '@types/node@25.8.0':
6438 dependencies:
6042 - undici-types: 7.19.2
6439 + undici-types: 7.24.6
6440
6441 '@types/parse-json@4.0.2': {}
6442
6443 + '@types/prop-types@15.7.15': {}
6444 +
6445 '@types/react-dom@19.2.3(@types/react@19.2.14)':
6446 dependencies:
6447 '@types/react': 19.2.14
6448
6449 + '@types/react-transition-group@4.4.12(@types/react@19.2.14)':
6450 + dependencies:
6451 + '@types/react': 19.2.14
6452 +
6453 '@types/react@19.2.14':
6454 dependencies:
6455 csstype: 3.2.3
@@ -6055,191 +6458,193 @@ snapshots:
6458
6459 '@types/tern@0.23.9':
6460 dependencies:
6058 - '@types/estree': 1.0.8
6461 + '@types/estree': 1.0.9
6462
6463 '@types/tough-cookie@4.0.5': {}
6464
6465 + '@types/unist@2.0.11': {}
6466 +
6467 '@types/unist@3.0.3': {}
6468
6469 '@types/validator@13.15.10': {}
6470
6471 '@types/web-bluetooth@0.0.21': {}
6472
6068 - '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)':
6473 + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6474 dependencies:
6475 '@eslint-community/regexpp': 4.12.2
6071 - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6072 - '@typescript-eslint/scope-manager': 8.59.1
6073 - '@typescript-eslint/type-utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6074 - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6075 - '@typescript-eslint/visitor-keys': 8.59.1
6076 - eslint: 10.3.0(jiti@2.6.1)
6476 + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6477 + '@typescript-eslint/scope-manager': 8.59.3
6478 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6479 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6480 + '@typescript-eslint/visitor-keys': 8.59.3
6481 + eslint: 10.4.0(jiti@2.7.0)
6482 ignore: 7.0.5
6483 natural-compare: 1.4.0
6079 - ts-api-utils: 2.5.0(typescript@5.9.3)
6080 - typescript: 5.9.3
6484 + ts-api-utils: 2.5.0(typescript@6.0.3)
6485 + typescript: 6.0.3
6486 transitivePeerDependencies:
6487 - supports-color
6488
6084 - '@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)':
6489 + '@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6490 dependencies:
6086 - '@typescript-eslint/scope-manager': 8.59.1
6087 - '@typescript-eslint/types': 8.59.1
6088 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3)
6089 - '@typescript-eslint/visitor-keys': 8.59.1
6491 + '@typescript-eslint/scope-manager': 8.59.3
6492 + '@typescript-eslint/types': 8.59.3
6493 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3)
6494 + '@typescript-eslint/visitor-keys': 8.59.3
6495 debug: 4.4.3
6091 - eslint: 10.3.0(jiti@2.6.1)
6092 - typescript: 5.9.3
6496 + eslint: 10.4.0(jiti@2.7.0)
6497 + typescript: 6.0.3
6498 transitivePeerDependencies:
6499 - supports-color
6500
6096 - '@typescript-eslint/project-service@8.59.1(typescript@5.9.3)':
6501 + '@typescript-eslint/project-service@8.59.3(typescript@6.0.3)':
6502 dependencies:
6098 - '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@5.9.3)
6099 - '@typescript-eslint/types': 8.59.1
6503 + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3)
6504 + '@typescript-eslint/types': 8.59.3
6505 debug: 4.4.3
6101 - typescript: 5.9.3
6506 + typescript: 6.0.3
6507 transitivePeerDependencies:
6508 - supports-color
6509
6105 - '@typescript-eslint/rule-tester@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)':
6510 + '@typescript-eslint/rule-tester@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6511 dependencies:
6107 - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6108 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3)
6109 - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6512 + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6513 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3)
6514 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6515 ajv: 6.15.0
6111 - eslint: 10.3.0(jiti@2.6.1)
6516 + eslint: 10.4.0(jiti@2.7.0)
6517 json-stable-stringify-without-jsonify: 1.0.1
6518 lodash.merge: 4.6.2
6114 - semver: 7.7.4
6519 + semver: 7.8.0
6520 + typescript: 6.0.3
6521 transitivePeerDependencies:
6522 - supports-color
6117 - - typescript
6523
6119 - '@typescript-eslint/scope-manager@8.59.1':
6524 + '@typescript-eslint/scope-manager@8.59.3':
6525 dependencies:
6121 - '@typescript-eslint/types': 8.59.1
6122 - '@typescript-eslint/visitor-keys': 8.59.1
6526 + '@typescript-eslint/types': 8.59.3
6527 + '@typescript-eslint/visitor-keys': 8.59.3
6528
6124 - '@typescript-eslint/tsconfig-utils@8.59.1(typescript@5.9.3)':
6529 + '@typescript-eslint/tsconfig-utils@8.59.3(typescript@6.0.3)':
6530 dependencies:
6126 - typescript: 5.9.3
6531 + typescript: 6.0.3
6532
6128 - '@typescript-eslint/type-utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)':
6533 + '@typescript-eslint/type-utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6534 dependencies:
6130 - '@typescript-eslint/types': 8.59.1
6131 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3)
6132 - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6535 + '@typescript-eslint/types': 8.59.3
6536 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3)
6537 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6538 debug: 4.4.3
6134 - eslint: 10.3.0(jiti@2.6.1)
6135 - ts-api-utils: 2.5.0(typescript@5.9.3)
6136 - typescript: 5.9.3
6539 + eslint: 10.4.0(jiti@2.7.0)
6540 + ts-api-utils: 2.5.0(typescript@6.0.3)
6541 + typescript: 6.0.3
6542 transitivePeerDependencies:
6543 - supports-color
6544
6140 - '@typescript-eslint/types@8.59.1': {}
6545 + '@typescript-eslint/types@8.59.3': {}
6546
6142 - '@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3)':
6547 + '@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3)':
6548 dependencies:
6144 - '@typescript-eslint/project-service': 8.59.1(typescript@5.9.3)
6145 - '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@5.9.3)
6146 - '@typescript-eslint/types': 8.59.1
6147 - '@typescript-eslint/visitor-keys': 8.59.1
6549 + '@typescript-eslint/project-service': 8.59.3(typescript@6.0.3)
6550 + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3)
6551 + '@typescript-eslint/types': 8.59.3
6552 + '@typescript-eslint/visitor-keys': 8.59.3
6553 debug: 4.4.3
6554 minimatch: 10.2.5
6150 - semver: 7.7.4
6555 + semver: 7.8.0
6556 tinyglobby: 0.2.16
6152 - ts-api-utils: 2.5.0(typescript@5.9.3)
6153 - typescript: 5.9.3
6557 + ts-api-utils: 2.5.0(typescript@6.0.3)
6558 + typescript: 6.0.3
6559 transitivePeerDependencies:
6560 - supports-color
6561
6157 - '@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)':
6562 + '@typescript-eslint/utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)':
6563 dependencies:
6159 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1))
6160 - '@typescript-eslint/scope-manager': 8.59.1
6161 - '@typescript-eslint/types': 8.59.1
6162 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3)
6163 - eslint: 10.3.0(jiti@2.6.1)
6164 - typescript: 5.9.3
6564 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0))
6565 + '@typescript-eslint/scope-manager': 8.59.3
6566 + '@typescript-eslint/types': 8.59.3
6567 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3)
6568 + eslint: 10.4.0(jiti@2.7.0)
6569 + typescript: 6.0.3
6570 transitivePeerDependencies:
6571 - supports-color
6572
6168 - '@typescript-eslint/visitor-keys@8.59.1':
6573 + '@typescript-eslint/visitor-keys@8.59.3':
6574 dependencies:
6170 - '@typescript-eslint/types': 8.59.1
6575 + '@typescript-eslint/types': 8.59.3
6576 eslint-visitor-keys: 5.0.1
6577
6173 - '@ungap/structured-clone@1.3.0': {}
6578 + '@ungap/structured-clone@1.3.1': {}
6579
6175 - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3))':
6580 + '@vitejs/plugin-vue-jsx@5.1.5(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))(vue@3.5.34(typescript@6.0.3))':
6581 dependencies:
6582 '@babel/core': 7.29.0
6583 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
6584 '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
6180 - '@rolldown/pluginutils': 1.0.0-rc.18
6585 + '@rolldown/pluginutils': 1.0.1
6586 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
6182 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
6183 - vue: 3.5.33(typescript@5.9.3)
6587 + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)
6588 + vue: 3.5.34(typescript@6.0.3)
6589 transitivePeerDependencies:
6590 - supports-color
6591
6187 - '@vitejs/plugin-vue@6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))(vue@3.5.33(typescript@5.9.3))':
6592 + '@vitejs/plugin-vue@6.0.7(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))(vue@3.5.34(typescript@6.0.3))':
6593 dependencies:
6189 - '@rolldown/pluginutils': 1.0.0-rc.13
6190 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
6191 - vue: 3.5.33(typescript@5.9.3)
6594 + '@rolldown/pluginutils': 1.0.1
6595 + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)
6596 + vue: 3.5.34(typescript@6.0.3)
6597
6193 - '@vitest/eslint-plugin@1.6.16(@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.5(@types/node@25.6.0)(jsdom@29.1.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)))':
6598 + '@vitest/eslint-plugin@1.6.17(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)(vitest@4.1.6(@types/node@25.8.0)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)))':
6599 dependencies:
6195 - '@typescript-eslint/scope-manager': 8.59.1
6196 - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6197 - eslint: 10.3.0(jiti@2.6.1)
6600 + '@typescript-eslint/scope-manager': 8.59.3
6601 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6602 + eslint: 10.4.0(jiti@2.7.0)
6603 optionalDependencies:
6199 - '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)
6200 - typescript: 5.9.3
6201 - vitest: 4.1.5(@types/node@25.6.0)(jsdom@29.1.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))
6604 + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)
6605 + typescript: 6.0.3
6606 + vitest: 4.1.6(@types/node@25.8.0)(jsdom@29.1.1)(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))
6607 transitivePeerDependencies:
6608 - supports-color
6609
6205 - '@vitest/expect@4.1.5':
6610 + '@vitest/expect@4.1.6':
6611 dependencies:
6612 '@standard-schema/spec': 1.1.0
6613 '@types/chai': 5.2.3
6209 - '@vitest/spy': 4.1.5
6210 - '@vitest/utils': 4.1.5
6614 + '@vitest/spy': 4.1.6
6615 + '@vitest/utils': 4.1.6
6616 chai: 6.2.2
6617 tinyrainbow: 3.1.0
6618
6214 - '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3))':
6619 + '@vitest/mocker@4.1.6(vite@8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0))':
6620 dependencies:
6216 - '@vitest/spy': 4.1.5
6621 + '@vitest/spy': 4.1.6
6622 estree-walker: 3.0.3
6623 magic-string: 0.30.21
6624 optionalDependencies:
6220 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(yaml@2.8.3)
6625 + vite: 8.0.13(@types/node@25.8.0)(jiti@2.7.0)(sass@1.99.0)(yaml@2.9.0)
6626
6222 - '@vitest/pretty-format@4.1.5':
6627 + '@vitest/pretty-format@4.1.6':
6628 dependencies:
6629 tinyrainbow: 3.1.0
6630
6226 - '@vitest/runner@4.1.5':
6631 + '@vitest/runner@4.1.6':
6632 dependencies:
6228 - '@vitest/utils': 4.1.5
6633 + '@vitest/utils': 4.1.6
6634 pathe: 2.0.3
6635
6231 - '@vitest/snapshot@4.1.5':
6636 + '@vitest/snapshot@4.1.6':
6637 dependencies:
6233 - '@vitest/pretty-format': 4.1.5
6234 - '@vitest/utils': 4.1.5
6638 + '@vitest/pretty-format': 4.1.6
6639 + '@vitest/utils': 4.1.6
6640 magic-string: 0.30.21
6641 pathe: 2.0.3
6642
6238 - '@vitest/spy@4.1.5': {}
6643 + '@vitest/spy@4.1.6': {}
6644
6240 - '@vitest/utils@4.1.5':
6645 + '@vitest/utils@4.1.6':
6646 dependencies:
6242 - '@vitest/pretty-format': 4.1.5
6647 + '@vitest/pretty-format': 4.1.6
6648 convert-source-map: 2.0.0
6649 tinyrainbow: 3.1.0
6650
@@ -6255,15 +6660,15 @@ snapshots:
6660 path-browserify: 1.0.1
6661 vscode-uri: 3.1.0
6662
6258 - '@vue-macros/common@3.1.2(vue@3.5.33(typescript@5.9.3))':
6663 + '@vue-macros/common@3.1.2(vue@3.5.34(typescript@6.0.3))':
6664 dependencies:
6260 - '@vue/compiler-sfc': 3.5.33
6665 + '@vue/compiler-sfc': 3.5.34
6666 ast-kit: 2.2.0
6667 local-pkg: 1.1.2
6668 magic-string-ast: 1.0.3
6669 unplugin-utils: 0.3.1
6670 optionalDependencies:
6266 - vue: 3.5.33(typescript@5.9.3)
6671 + vue: 3.5.34(typescript@6.0.3)
6672
6673 '@vue/babel-helper-vue-transform-on@1.5.0': {}
6674
@@ -6279,7 +6684,7 @@ snapshots:
6684 '@babel/types': 7.29.0
6685 '@vue/babel-helper-vue-transform-on': 1.5.0
6686 '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.0)
6282 - '@vue/shared': 3.5.33
6687 + '@vue/shared': 3.5.34
6688 optionalDependencies:
6689 '@babel/core': 7.29.0
6690 transitivePeerDependencies:
@@ -6295,7 +6700,7 @@ snapshots:
6700 '@babel/types': 7.29.0
6701 '@vue/babel-helper-vue-transform-on': 2.0.1
6702 '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
6298 - '@vue/shared': 3.5.33
6703 + '@vue/shared': 3.5.34
6704 optionalDependencies:
6705 '@babel/core': 7.29.0
6706 transitivePeerDependencies:
@@ -6308,7 +6713,7 @@ snapshots:
6713 '@babel/helper-module-imports': 7.28.6
6714 '@babel/helper-plugin-utils': 7.28.6
6715 '@babel/parser': 7.29.3
6311 - '@vue/compiler-sfc': 3.5.33
6716 + '@vue/compiler-sfc': 3.5.34
6717 transitivePeerDependencies:
6718 - supports-color
6719
@@ -6319,39 +6724,39 @@ snapshots:
6724 '@babel/helper-module-imports': 7.28.6
6725 '@babel/helper-plugin-utils': 7.28.6
6726 '@babel/parser': 7.29.3
6322 - '@vue/compiler-sfc': 3.5.33
6727 + '@vue/compiler-sfc': 3.5.34
6728 transitivePeerDependencies:
6729 - supports-color
6730
6326 - '@vue/compiler-core@3.5.33':
6731 + '@vue/compiler-core@3.5.34':
6732 dependencies:
6733 '@babel/parser': 7.29.3
6329 - '@vue/shared': 3.5.33
6734 + '@vue/shared': 3.5.34
6735 entities: 7.0.1
6736 estree-walker: 2.0.2
6737 source-map-js: 1.2.1
6738
6334 - '@vue/compiler-dom@3.5.33':
6739 + '@vue/compiler-dom@3.5.34':
6740 dependencies:
6336 - '@vue/compiler-core': 3.5.33
6337 - '@vue/shared': 3.5.33
6741 + '@vue/compiler-core': 3.5.34
6742 + '@vue/shared': 3.5.34
6743
6339 - '@vue/compiler-sfc@3.5.33':
6744 + '@vue/compiler-sfc@3.5.34':
6745 dependencies:
6746 '@babel/parser': 7.29.3
6342 - '@vue/compiler-core': 3.5.33
6343 - '@vue/compiler-dom': 3.5.33
6344 - '@vue/compiler-ssr': 3.5.33
6345 - '@vue/shared': 3.5.33
6747 + '@vue/compiler-core': 3.5.34
6748 + '@vue/compiler-dom': 3.5.34
6749 + '@vue/compiler-ssr': 3.5.34
6750 + '@vue/shared': 3.5.34
6751 estree-walker: 2.0.2
6752 magic-string: 0.30.21
6348 - postcss: 8.5.13
6753 + postcss: 8.5.14
6754 source-map-js: 1.2.1
6755
6351 - '@vue/compiler-ssr@3.5.33':
6756 + '@vue/compiler-ssr@3.5.34':
6757 dependencies:
6353 - '@vue/compiler-dom': 3.5.33
6354 - '@vue/shared': 3.5.33
6758 + '@vue/compiler-dom': 3.5.34
6759 + '@vue/shared': 3.5.34
6760
6761 '@vue/devtools-api@6.6.4': {}
6762
@@ -6359,15 +6764,15 @@ snapshots:
6764 dependencies:
6765 '@vue/devtools-kit': 7.7.9
6766
6362 - '@vue/devtools-api@8.1.1':
6767 + '@vue/devtools-api@8.1.2':
6768 dependencies:
6364 - '@vue/devtools-kit': 8.1.1
6769 + '@vue/devtools-kit': 8.1.2
6770
6366 - '@vue/devtools-core@8.1.1(vue@3.5.33(typescript@5.9.3))':
6771 + '@vue/devtools-core@8.1.2(vue@3.5.34(typescript@6.0.3))':
6772 dependencies:
6368 - '@vue/devtools-kit': 8.1.1
6369 - '@vue/devtools-shared': 8.1.1
6370 - vue: 3.5.33(typescript@5.9.3)
6773 + '@vue/devtools-kit': 8.1.2
6774 + '@vue/devtools-shared': 8.1.2
6775 + vue: 3.5.34(typescript@6.0.3)
6776
6777 '@vue/devtools-kit@7.7.9':
6778 dependencies:
@@ -6379,9 +6784,9 @@ snapshots:
6784 speakingurl: 14.0.1
6785 superjson: 2.2.6
6786
6382 - '@vue/devtools-kit@8.1.1':
6787 + '@vue/devtools-kit@8.1.2':
6788 dependencies:
6384 - '@vue/devtools-shared': 8.1.1
6789 + '@vue/devtools-shared': 8.1.2
6790 birpc: 2.9.0
6791 hookable: 5.5.3
6792 perfect-debounce: 2.1.0
@@ -6390,95 +6795,95 @@ snapshots:
6795 dependencies:
6796 rfdc: 1.4.1
6797
6393 - '@vue/devtools-shared@8.1.1': {}
6798 + '@vue/devtools-shared@8.1.2': {}
6799
6395 - '@vue/language-core@3.2.7':
6800 + '@vue/language-core@3.2.9':
6801 dependencies:
6802 '@volar/language-core': 2.4.28
6398 - '@vue/compiler-dom': 3.5.33
6399 - '@vue/shared': 3.5.33
6400 - alien-signals: 3.1.2
6803 + '@vue/compiler-dom': 3.5.34
6804 + '@vue/shared': 3.5.34
6805 + alien-signals: 3.2.1
6806 muggle-string: 0.4.1
6807 path-browserify: 1.0.1
6808 picomatch: 4.0.4
6809
6405 - '@vue/reactivity@3.5.33':
6810 + '@vue/reactivity@3.5.34':
6811 dependencies:
6407 - '@vue/shared': 3.5.33
6812 + '@vue/shared': 3.5.34
6813
6409 - '@vue/runtime-core@3.5.33':
6814 + '@vue/runtime-core@3.5.34':
6815 dependencies:
6411 - '@vue/reactivity': 3.5.33
6412 - '@vue/shared': 3.5.33
6816 + '@vue/reactivity': 3.5.34
6817 + '@vue/shared': 3.5.34
6818
6414 - '@vue/runtime-dom@3.5.33':
6819 + '@vue/runtime-dom@3.5.34':
6820 dependencies:
6416 - '@vue/reactivity': 3.5.33
6417 - '@vue/runtime-core': 3.5.33
6418 - '@vue/shared': 3.5.33
6821 + '@vue/reactivity': 3.5.34
6822 + '@vue/runtime-core': 3.5.34
6823 + '@vue/shared': 3.5.34
6824 csstype: 3.2.3
6825
6421 - '@vue/server-renderer@3.5.33(vue@3.5.33(typescript@5.9.3))':
6826 + '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@6.0.3))':
6827 dependencies:
6423 - '@vue/compiler-ssr': 3.5.33
6424 - '@vue/shared': 3.5.33
6425 - vue: 3.5.33(typescript@5.9.3)
6828 + '@vue/compiler-ssr': 3.5.34
6829 + '@vue/shared': 3.5.34
6830 + vue: 3.5.34(typescript@6.0.3)
6831
6427 - '@vue/shared@3.5.33': {}
6832 + '@vue/shared@3.5.34': {}
6833
6429 - '@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@5.9.3)))(vue@3.5.33(typescript@5.9.3))':
6834 + '@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.34)(@vue/server-renderer@3.5.34(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3))':
6835 dependencies:
6431 - '@vue/compiler-dom': 3.5.33
6836 + '@vue/compiler-dom': 3.5.34
6837 js-beautify: 1.15.4
6433 - vue: 3.5.33(typescript@5.9.3)
6434 - vue-component-type-helpers: 3.2.7
6838 + vue: 3.5.34(typescript@6.0.3)
6839 + vue-component-type-helpers: 3.2.9
6840 optionalDependencies:
6436 - '@vue/server-renderer': 3.5.33(vue@3.5.33(typescript@5.9.3))
6841 + '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@6.0.3))
6842
6438 - '@vue/tsconfig@0.9.1(typescript@5.9.3)(vue@3.5.33(typescript@5.9.3))':
6843 + '@vue/tsconfig@0.9.1(typescript@6.0.3)(vue@3.5.34(typescript@6.0.3))':
6844 optionalDependencies:
6440 - typescript: 5.9.3
6441 - vue: 3.5.33(typescript@5.9.3)
6845 + typescript: 6.0.3
6846 + vue: 3.5.34(typescript@6.0.3)
6847
6443 - '@vueuse/core@13.9.0(vue@3.5.33(typescript@5.9.3))':
6848 + '@vueuse/core@13.9.0(vue@3.5.34(typescript@6.0.3))':
6849 dependencies:
6850 '@types/web-bluetooth': 0.0.21
6851 '@vueuse/metadata': 13.9.0
6447 - '@vueuse/shared': 13.9.0(vue@3.5.33(typescript@5.9.3))
6448 - vue: 3.5.33(typescript@5.9.3)
6852 + '@vueuse/shared': 13.9.0(vue@3.5.34(typescript@6.0.3))
6853 + vue: 3.5.34(typescript@6.0.3)
6854
6450 - '@vueuse/core@14.3.0(vue@3.5.33(typescript@5.9.3))':
6855 + '@vueuse/core@14.3.0(vue@3.5.34(typescript@6.0.3))':
6856 dependencies:
6857 '@types/web-bluetooth': 0.0.21
6858 '@vueuse/metadata': 14.3.0
6454 - '@vueuse/shared': 14.3.0(vue@3.5.33(typescript@5.9.3))
6455 - vue: 3.5.33(typescript@5.9.3)
6859 + '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@6.0.3))
6860 + vue: 3.5.34(typescript@6.0.3)
6861
6862 '@vueuse/metadata@13.9.0': {}
6863
6864 '@vueuse/metadata@14.3.0': {}
6865
6461 - '@vueuse/motion@3.0.3(vue@3.5.33(typescript@5.9.3))':
6866 + '@vueuse/motion@3.0.3(vue@3.5.34(typescript@6.0.3))':
6867 dependencies:
6463 - '@vueuse/core': 13.9.0(vue@3.5.33(typescript@5.9.3))
6464 - '@vueuse/shared': 13.9.0(vue@3.5.33(typescript@5.9.3))
6868 + '@vueuse/core': 13.9.0(vue@3.5.34(typescript@6.0.3))
6869 + '@vueuse/shared': 13.9.0(vue@3.5.34(typescript@6.0.3))
6870 defu: 6.1.7
6871 framesync: 6.1.2
6872 popmotion: 11.0.5
6873 style-value-types: 5.1.2
6469 - vue: 3.5.33(typescript@5.9.3)
6874 + vue: 3.5.34(typescript@6.0.3)
6875 optionalDependencies:
6471 - '@nuxt/kit': 3.21.4
6876 + '@nuxt/kit': 3.21.5
6877 transitivePeerDependencies:
6878 - magicast
6879
6475 - '@vueuse/shared@13.9.0(vue@3.5.33(typescript@5.9.3))':
6880 + '@vueuse/shared@13.9.0(vue@3.5.34(typescript@6.0.3))':
6881 dependencies:
6477 - vue: 3.5.33(typescript@5.9.3)
6882 + vue: 3.5.34(typescript@6.0.3)
6883
6479 - '@vueuse/shared@14.3.0(vue@3.5.33(typescript@5.9.3))':
6884 + '@vueuse/shared@14.3.0(vue@3.5.34(typescript@6.0.3))':
6885 dependencies:
6481 - vue: 3.5.33(typescript@5.9.3)
6886 + vue: 3.5.34(typescript@6.0.3)
6887
6888 abbrev@2.0.0: {}
6889
@@ -6490,6 +6895,12 @@ snapshots:
6895
6896 acorn@8.16.0: {}
6897
6898 + agent-base@6.0.2:
6899 + dependencies:
6900 + debug: 4.4.3
6901 + transitivePeerDependencies:
6902 + - supports-color
6903 +
6904 ajv@6.15.0:
6905 dependencies:
6906 fast-deep-equal: 3.1.3
@@ -6497,24 +6908,24 @@ snapshots:
6908 json-schema-traverse: 0.4.1
6909 uri-js: 4.4.1
6910
6500 - algoliasearch@5.52.0:
6501 - dependencies:
6502 - '@algolia/abtesting': 1.18.0
6503 - '@algolia/client-abtesting': 5.52.0
6504 - '@algolia/client-analytics': 5.52.0
6505 - '@algolia/client-common': 5.52.0
6506 - '@algolia/client-insights': 5.52.0
6507 - '@algolia/client-personalization': 5.52.0
6508 - '@algolia/client-query-suggestions': 5.52.0
6509 - '@algolia/client-search': 5.52.0
6510 - '@algolia/ingestion': 1.52.0
6511 - '@algolia/monitoring': 1.52.0
6512 - '@algolia/recommend': 5.52.0
6513 - '@algolia/requester-browser-xhr': 5.52.0
6514 - '@algolia/requester-fetch': 5.52.0
6515 - '@algolia/requester-node-http': 5.52.0
6516 -
6517 - alien-signals@3.1.2: {}
6911 + algoliasearch@5.52.1:
6912 + dependencies:
6913 + '@algolia/abtesting': 1.18.1
6914 + '@algolia/client-abtesting': 5.52.1
6915 + '@algolia/client-analytics': 5.52.1
6916 + '@algolia/client-common': 5.52.1
6917 + '@algolia/client-insights': 5.52.1
6918 + '@algolia/client-personalization': 5.52.1
6919 + '@algolia/client-query-suggestions': 5.52.1
6920 + '@algolia/client-search': 5.52.1
6921 + '@algolia/ingestion': 1.52.1
6922 + '@algolia/monitoring': 1.52.1
6923 + '@algolia/recommend': 5.52.1
6924 + '@algolia/requester-browser-xhr': 5.52.1
6925 + '@algolia/requester-fetch': 5.52.1
6926 + '@algolia/requester-node-http': 5.52.1
6927 +
6928 + alien-signals@3.2.1: {}
6929
6930 ansi-regex@5.0.1: {}
6931
@@ -6526,9 +6937,9 @@ snapshots:
6937
6938 ansi-styles@6.2.3: {}
6939
6529 - ansis@4.2.0: {}
6940 + ansis@4.3.0: {}
6941
6531 - apexcharts@5.10.6: {}
6942 + apexcharts@5.12.0: {}
6943
6944 are-docs-informative@0.0.2: {}
6945
@@ -6566,25 +6977,35 @@ snapshots:
6977
6978 asynckit@0.4.0: {}
6979
6569 - axios@1.16.0(debug@4.4.3):
6980 + axios@1.16.1(debug@4.4.3):
6981 dependencies:
6982 follow-redirects: 1.16.0(debug@4.4.3)
6983 form-data: 4.0.5
6984 + https-proxy-agent: 5.0.1
6985 proxy-from-env: 2.1.0
6986 transitivePeerDependencies:
6987 - debug
6988 + - supports-color
6989 +
6990 + babel-plugin-macros@3.1.0:
6991 + dependencies:
6992 + '@babel/runtime': 7.29.2
6993 + cosmiconfig: 7.1.0
6994 + resolve: 1.22.12
6995
6996 babel-walk@3.0.0-canary-5:
6997 dependencies:
6998 '@babel/types': 7.29.0
6999
6581 - badgen@3.2.3: {}
7000 + badgen@3.3.2: {}
7001 +
7002 + bail@2.0.2: {}
7003
7004 balanced-match@1.0.2: {}
7005
7006 balanced-match@4.0.4: {}
7007
6587 - baseline-browser-mapping@2.10.25: {}
7008 + baseline-browser-mapping@2.10.29: {}
7009
7010 bidi-js@1.0.3:
7011 dependencies:
@@ -6610,7 +7031,7 @@ snapshots:
7031 dependencies:
7032 balanced-match: 1.0.2
7033
6613 - brace-expansion@5.0.5:
7034 + brace-expansion@5.0.6:
7035 dependencies:
7036 balanced-match: 4.0.4
7037
@@ -6620,13 +7041,13 @@ snapshots:
7041
7042 browserslist@4.28.2:
7043 dependencies:
6623 - baseline-browser-mapping: 2.10.25
6624 - caniuse-lite: 1.0.30001791
6625 - electron-to-chromium: 1.5.348
6626 - node-releases: 2.0.38
7044 + baseline-browser-mapping: 2.10.29
7045 + caniuse-lite: 1.0.30001792
7046 + electron-to-chromium: 1.5.355
7047 + node-releases: 2.0.44
7048 update-browserslist-db: 1.2.3(browserslist@4.28.2)
7049
6629 - builtin-modules@5.1.0: {}
7050 + builtin-modules@5.2.0: {}
7051
7052 bundle-name@4.1.0:
7053 dependencies:
@@ -6642,7 +7063,7 @@ snapshots:
7063 dotenv: 17.4.2
7064 exsolve: 1.0.8
7065 giget: 3.2.0
6645 - jiti: 2.6.1
7066 + jiti: 2.7.0
7067 ohash: 2.0.11
7068 pathe: 2.0.3
7069 perfect-debounce: 2.1.0
@@ -6670,7 +7091,7 @@ snapshots:
7091
7092 camelcase@6.3.0: {}
7093
6673 - caniuse-lite@1.0.30001791: {}
7094 + caniuse-lite@1.0.30001792: {}
7095
7096 ccount@2.0.1: {}
7097
@@ -6688,6 +7109,8 @@ snapshots:
7109 dependencies:
7110 is-regex: 1.2.1
7111
7112 + character-reference-invalid@2.0.1: {}
7113 +
7114 check-more-types@2.24.0: {}
7115
7116 chokidar@4.0.3:
@@ -6729,15 +7152,17 @@ snapshots:
7152 strip-ansi: 6.0.1
7153 wrap-ansi: 7.0.0
7154
7155 + clsx@2.1.1: {}
7156 +
7157 codemirror@6.0.2:
7158 dependencies:
6734 - '@codemirror/autocomplete': 6.20.1
7159 + '@codemirror/autocomplete': 6.20.2
7160 '@codemirror/commands': 6.10.3
7161 '@codemirror/language': 6.12.3
6737 - '@codemirror/lint': 6.9.5
7162 + '@codemirror/lint': 6.9.6
7163 '@codemirror/search': 6.7.0
7164 '@codemirror/state': 6.6.0
6740 - '@codemirror/view': 6.41.1
7165 + '@codemirror/view': 6.43.0
7166
7167 color-convert@2.0.1:
7168 dependencies:
@@ -6786,12 +7211,20 @@ snapshots:
7211 '@babel/parser': 7.29.3
7212 '@babel/types': 7.29.0
7213
7214 + convert-source-map@1.9.0: {}
7215 +
7216 convert-source-map@2.0.0: {}
7217
7218 + cookie@1.1.1: {}
7219 +
7220 copy-anything@4.0.5:
7221 dependencies:
7222 is-what: 5.5.0
7223
7224 + copy-to-clipboard@3.3.3:
7225 + dependencies:
7226 + toggle-selection: 1.0.6
7227 +
7228 core-js-compat@3.49.0:
7229 dependencies:
7230 browserslist: 4.28.2
@@ -6902,7 +7335,7 @@ snapshots:
7335 dependencies:
7336 '@babel/parser': 7.29.3
7337 '@babel/traverse': 7.29.0
6905 - '@vue/compiler-sfc': 3.5.33
7338 + '@vue/compiler-sfc': 3.5.34
7339 callsite: 1.0.0
7340 camelcase: 6.3.0
7341 cosmiconfig: 7.1.0
@@ -6910,7 +7343,7 @@ snapshots:
7343 deps-regex: 0.2.0
7344 findup-sync: 5.0.0
7345 ignore: 5.3.2
6913 - is-core-module: 2.16.1
7346 + is-core-module: 2.16.2
7347 js-yaml: 3.14.2
7348 json5: 2.2.3
7349 lodash: 4.18.1
@@ -6921,7 +7354,7 @@ snapshots:
7354 require-package-name: 2.0.1
7355 resolve: 1.22.12
7356 resolve-from: 5.0.0
6924 - semver: 7.7.4
7357 + semver: 7.8.0
7358 yargs: 16.2.0
7359 transitivePeerDependencies:
7360 - supports-color
@@ -6946,6 +7379,11 @@ snapshots:
7379
7380 doctypes@1.1.0: {}
7381
7382 + dom-helpers@5.2.1:
7383 + dependencies:
7384 + '@babel/runtime': 7.29.2
7385 + csstype: 3.2.3
7386 +
7387 dom-serializer@2.0.0:
7388 dependencies:
7389 domelementtype: 2.3.0
@@ -6987,29 +7425,27 @@ snapshots:
7425 '@one-ini/wasm': 0.1.1
7426 commander: 10.0.1
7427 minimatch: 9.0.9
6990 - semver: 7.7.4
7428 + semver: 7.8.0
7429
6992 - electron-to-chromium@1.5.348: {}
7430 + electron-to-chromium@1.5.355: {}
7431
7432 emoji-regex@8.0.0: {}
7433
7434 emoji-regex@9.2.2: {}
7435
6998 - empathic@2.0.0: {}
7436 + empathic@2.0.1: {}
7437
7438 end-of-stream@1.4.5:
7439 dependencies:
7440 once: 1.4.0
7441
7004 - enhanced-resolve@5.21.0:
7442 + enhanced-resolve@5.21.3:
7443 dependencies:
7444 graceful-fs: 4.2.11
7445 tapable: 2.3.3
7446
7447 entities@4.5.0: {}
7448
7011 - entities@6.0.1: {}
7012 -
7449 entities@7.0.1: {}
7450
7451 entities@8.0.0: {}
@@ -7040,35 +7476,6 @@ snapshots:
7476 has-tostringtag: 1.0.2
7477 hasown: 2.0.3
7478
7043 - esbuild@0.27.7:
7044 - optionalDependencies:
7045 - '@esbuild/aix-ppc64': 0.27.7
7046 - '@esbuild/android-arm': 0.27.7
7047 - '@esbuild/android-arm64': 0.27.7
7048 - '@esbuild/android-x64': 0.27.7
7049 - '@esbuild/darwin-arm64': 0.27.7
7050 - '@esbuild/darwin-x64': 0.27.7
7051 - '@esbuild/freebsd-arm64': 0.27.7
7052 - '@esbuild/freebsd-x64': 0.27.7
7053 - '@esbuild/linux-arm': 0.27.7
7054 - '@esbuild/linux-arm64': 0.27.7
7055 - '@esbuild/linux-ia32': 0.27.7
7056 - '@esbuild/linux-loong64': 0.27.7
7057 - '@esbuild/linux-mips64el': 0.27.7
7058 - '@esbuild/linux-ppc64': 0.27.7
7059 - '@esbuild/linux-riscv64': 0.27.7

This file is too large to show in full.

frontend/pnpm-workspace.yaml new
+19
@@ -0,0 +1,19 @@
1 +shellEmulator: true
2 +
3 +trustPolicy: no-downgrade
4 +
5 +trustPolicyExclude:
6 + - chokidar
7 + - semver
8 +
9 +allowBuilds:
10 + "@parcel/watcher": true
11 + "@tailwindcss/oxide": true
12 + esbuild: true
13 + unrs-resolver: true
14 +
15 +overrides:
16 + "@mui/icons-material": ^7.3.9
17 +peerDependencyRules:
18 + allowedVersions:
19 + eslint: "10"
frontend/src/api/endpoints/copilotSearches.ts
+1 -1
@@ -1,10 +1,10 @@
1 import type {
2 BulkProvisionGraylogAlertRequest,
3 BulkProvisionGraylogAlertResponse,
4 - GraylogProvisioningStatusResponse,
4 ExecuteGraylogQueryRequest,
5 ExecuteSearchRequest,
6 ExecuteSearchResponse,
7 + GraylogProvisioningStatusResponse,
8 GraylogQueryResponse,
9 MitreCoverageQuery,
10 MitreCoverageResponse,
frontend/src/api/endpoints/shuffle.ts
+10
@@ -2,6 +2,11 @@ import type { FlaskBaseResponse } from "@/types/flask.d"
2 import type { Organization } from "@/types/shuffle.d"
3 import { HttpClient } from "../httpClient"
4
5 +export interface ShuffleConnectorCredentials {
6 + base_url: string
7 + api_key: string
8 +}
9 +
10 export default {
11 getOrganizations() {
12 return HttpClient.get<FlaskBaseResponse & { data: Organization[]; total_count: number }>(
@@ -12,5 +17,10 @@ export default {
17 return HttpClient.get<FlaskBaseResponse & { data: Organization }>(
18 `/shuffle/organizations/organizations/${organizationId}?connector_name=Shuffle`
19 )
20 + },
21 + // Returns the deployment-wide Shuffle connector base URL + API key for
22 + // the React MCP embeds. Backed by the connectors table.
23 + getConnectorCredentials() {
24 + return HttpClient.get<FlaskBaseResponse & ShuffleConnectorCredentials>(`/shuffle/integrations/credentials`)
25 }
26 }
frontend/src/app-layouts/common/GlobalListener.vue
+2
@@ -6,10 +6,12 @@
6 import { useMessage, useNotification } from "naive-ui"
7 import { useGlobalActions } from "@/composables/useGlobalActions"
8 import { useLoadingBarSetup } from "@/composables/useLoadingBarSetup"
9 +import { useShuffleToastBridge } from "@/composables/useShuffleToastBridge"
10
11 const message = useMessage()
12 const notification = useNotification()
13
14 useGlobalActions().init({ message, notification })
15 useLoadingBarSetup()
16 +useShuffleToastBridge()
17 </script>
frontend/src/assets/scss/index.scss
+1
@@ -5,3 +5,4 @@
5 @include meta.load-css("router-animations");
6 @include meta.load-css("overrides/naive-override");
7 @include meta.load-css("overrides/singul-override");
8 +@include meta.load-css("overrides/mui-override");
frontend/src/assets/scss/overrides/mui-override.scss new
+35
@@ -0,0 +1,35 @@
1 +.MuiBox-root,
2 +.MuiDialogContent-root,
3 +.MuiAutocomplete-popper,
4 +.MuiPopover-paper {
5 + scrollbar-width: thin;
6 + scrollbar-color: var(--hover-color) var(--bg-secondary-color);
7 +
8 + /* Works on Chrome, Edge, and Safari */
9 + &::-webkit-scrollbar,
10 + ::-webkit-scrollbar {
11 + width: 12px;
12 + }
13 +
14 + &::-webkit-scrollbar-track,
15 + ::-webkit-scrollbar-track {
16 + background: var(--bg-secondary-color);
17 + }
18 +
19 + &::-webkit-scrollbar-thumb,
20 + ::-webkit-scrollbar-thumb {
21 + background-color: var(--hover-color);
22 + border-radius: 20px;
23 + border: 2px solid var(--bg-secondary-color);
24 + }
25 +}
26 +
27 +.MuiBox-root {
28 + box-shadow: none !important;
29 +}
30 +
31 +.MuiInputBase-root.MuiOutlinedInput-root.Mui-focused {
32 + .MuiOutlinedInput-notchedOutline {
33 + border-width: 1px !important;
34 + }
35 +}
frontend/src/assets/scss/overrides/singul-override.scss
+20 -1
@@ -2,9 +2,9 @@
2 max-height: 100%;
3 display: flex !important;
4 flex-direction: column;
5 - max-height: 100%;
5 overflow: hidden;
6 }
7 +
8 .singul-search-bar-container {
9 --singul-input-border-radius: var(--border-radius);
10 --singul-input-bg: var(--color-background-secondary);
@@ -18,6 +18,9 @@
18 --singul-app-name-color: var(--fg-default-color);
19 --singul-app-description-color: var(--fg-secondary-color);
20 --singul-item-hover-bg: var(--bg-secondary-color);
21 + --singul-spinner-border-top: 2px solid var(--primary-color);
22 + --singul-item-selected-border: rgba(var(--primary-color-rgb) / 0.55);
23 + --singul-accent-color: var(--primary-color);
24
25 display: flex;
26 flex-direction: column;
@@ -57,4 +60,20 @@
60 }
61 }
62 }
63 +
64 + .singul-source-pill-active {
65 + background: transparent;
66 + border-color: var(--primary-color);
67 + color: var(--primary-color);
68 +
69 + .singul-source-count {
70 + background: rgba(var(--primary-color-rgb) / 0.2);
71 + color: var(--primary-color);
72 + }
73 + }
74 +
75 + .singul-dot-inactive {
76 + background-color: var(--primary-color);
77 + box-shadow: 0 0 6px rgba(var(--primary-color-rgb) / 0.4);
78 + }
79 }
frontend/src/assets/scss/overrides/vue-md-it-override.scss
+1
@@ -20,6 +20,7 @@
20 overflow-x: scroll;
21 display: block;
22 white-space: nowrap;
23 + background-color: var(--bg-secondary-color);
24
25 thead {
26 tr {
frontend/src/components/common/ShuffleMCPEmbed.vue deleted
-117
@@ -1,117 +0,0 @@
1 -<template>
2 - <div ref="container" class="w-full" />
3 -</template>
4 -
5 -<script setup lang="ts">
6 -// Vue wrapper around `<ShuffleMCP>` (a React component from
7 -// `@shuffleio/shuffle-mcps`). We don't pull in a Vue/React interop
8 -// library — for a single component the manual mount via
9 -// react-dom/client is cleaner and avoids the abstraction tax. Vite
10 -// already handles JSX through esbuild so no build config changes
11 -// were needed.
12 -//
13 -// Lifecycle: createRoot in onMounted, unmount in onBeforeUnmount,
14 -// re-render with `root.render(...)` on prop change so the embed
15 -// reacts to live updates (e.g. when the parent swaps the auth token
16 -// after picking a different Shuffle org).
17 -
18 -import type { Root } from "react-dom/client"
19 -// `@shuffleio/shuffle-mcps/dist/index.js` self-imports its CSS via a
20 -// hash-suffixed filename (`./singul-GZKBHJNI.css`). The package's own
21 -// `./singul.css` export entry points at `./dist/singul.css` which
22 -// doesn't exist on disk — that's a package bug. We don't need to
23 -// import the CSS here ourselves; importing `ShuffleMCP` pulls it in.
24 -import { ShuffleMCP } from "@shuffleio/shuffle-mcps"
25 -import { createElement } from "react"
26 -import { createRoot } from "react-dom/client"
27 -import { onBeforeUnmount, onMounted, ref, watch } from "vue"
28 -
29 -interface Props {
30 - authToken: string
31 - apiKey?: string
32 - apiBaseUrl?: string
33 - inline?: boolean
34 - layout?: "list" | "grid"
35 - gridColumns?: number
36 - placeholder?: string
37 - preventDefault?: boolean
38 - multiSelect?: boolean
39 - showCheckbox?: boolean
40 - initialFilterQuery?: string
41 - showSourceFilter?: boolean
42 -}
43 -
44 -const props = withDefaults(defineProps<Props>(), {
45 - apiKey: undefined,
46 - apiBaseUrl: undefined,
47 - inline: true,
48 - layout: "list",
49 - gridColumns: 3,
50 - placeholder: "Find an app…",
51 - preventDefault: false,
52 - multiSelect: false,
53 - showCheckbox: false,
54 - initialFilterQuery: undefined,
55 - showSourceFilter: true
56 -})
57 -
58 -const emit = defineEmits<{
59 - (e: "appSelected", payload: unknown): void
60 - (e: "selectionChange", payload: unknown): void
61 -}>()
62 -
63 -const container = ref<HTMLElement | null>(null)
64 -let root: Root | null = null
65 -const EMPTY_SELECTED_APPS: unknown[] = []
66 -
67 -function render() {
68 - if (!root) return
69 - // Drop undefined props so React doesn't override the package's
70 - // own defaults with our `undefined` (different semantics in TS vs
71 - // React's prop-default mechanism).
72 - const reactProps: Record<string, unknown> = {
73 - authToken: props.authToken,
74 - inline: props.inline,
75 - layout: props.layout,
76 - gridColumns: props.gridColumns,
77 - placeholder: props.placeholder,
78 - preventDefault: props.preventDefault,
79 - multiSelect: props.multiSelect,
80 - showCheckbox: props.showCheckbox,
81 - showSourceFilter: props.showSourceFilter,
82 - // The package currently defaults `selectedApps` to a fresh `[]`
83 - // inside the React component, then mirrors it into state from a
84 - // useEffect. Passing a stable array avoids that render loop.
85 - selectedApps: EMPTY_SELECTED_APPS,
86 - onAppSelected: (payload: unknown) => emit("appSelected", payload),
87 - onSelectionChange: (payload: unknown) => emit("selectionChange", payload)
88 - }
89 - if (props.apiKey) reactProps.apiKey = props.apiKey
90 - if (props.apiBaseUrl) reactProps.apiBaseUrl = props.apiBaseUrl
91 - if (props.initialFilterQuery) reactProps.initialFilterQuery = props.initialFilterQuery
92 -
93 - root.render(createElement(ShuffleMCP as never, reactProps))
94 -}
95 -
96 -onMounted(() => {
97 - if (!container.value) return
98 - root = createRoot(container.value)
99 - render()
100 -})
101 -
102 -// Re-render when any reactive prop changes. The shallow watch is fine
103 -// since all our props are primitives or strings — no nested object
104 -// identity churn to worry about.
105 -watch(
106 - () => ({ ...props }),
107 - () => render(),
108 - { deep: true }
109 -)
110 -
111 -onBeforeUnmount(() => {
112 - if (root) {
113 - root.unmount()
114 - root = null
115 - }
116 -})
117 -</script>
frontend/src/components/copilotSearches/BulkProvisionModal.vue
+5 -10
@@ -9,9 +9,9 @@
9 >
10 <div v-if="!result" class="flex flex-col gap-3">
11 <n-alert type="info" :show-icon="false">
12 - This will create one Graylog event definition per rule, using the shared
13 - configuration below. Rules whose alert title already exists in Graylog
14 - are skipped automatically. Rules without a Graylog query are also skipped.
12 + This will create one Graylog event definition per rule, using the shared configuration below. Rules
13 + whose alert title already exists in Graylog are skipped automatically. Rules without a Graylog query are
14 + also skipped.
15 </n-alert>
16
17 <div class="grid grid-cols-2 gap-3">
@@ -40,9 +40,7 @@
40 </div>
41
42 <div class="flex justify-end gap-2">
43 - <n-button size="small" quaternary :disabled="submitting" @click="showLocal = false">
44 - Cancel
45 - </n-button>
43 + <n-button size="small" quaternary :disabled="submitting" @click="showLocal = false">Cancel</n-button>
44 <n-button
45 size="small"
46 type="primary"
@@ -92,10 +90,7 @@
90
91 <script setup lang="ts">
92 import type { BadgeColor } from "@/components/common/Badge.vue"
95 -import type {
96 - BulkProvisionGraylogAlertResponse,
97 - BulkProvisionRuleStatus
98 -} from "@/types/copilotSearches.d"
93 +import type { BulkProvisionGraylogAlertResponse, BulkProvisionRuleStatus } from "@/types/copilotSearches.d"
94 import { NAlert, NButton, NInputNumber, NModal, NSelect, useMessage } from "naive-ui"
95 import { computed, reactive, ref, watch } from "vue"
96 import Api from "@/api"
frontend/src/components/copilotSearches/List.vue
+4 -5
@@ -559,10 +559,7 @@ function exportSelectedCsv() {
559 .map(row => row.map(cell => `"${String(cell).replace(/"/g, '""')}"`).join(","))
560 .join("\n")
561 const stamp = new Date().toISOString().slice(0, 10)
562 - downloadBlob(
563 - new Blob([csv], { type: "text/csv;charset=utf-8;" }),
564 - `copilot-searches-selected-${stamp}.csv`
565 - )
562 + downloadBlob(new Blob([csv], { type: "text/csv;charset=utf-8;" }), `copilot-searches-selected-${stamp}.csv`)
563 }
564
565 function exportSelectedJson() {
@@ -598,7 +595,9 @@ function exportSelectedJson() {
595
596 .fade-up-enter-active,
597 .fade-up-leave-active {
601 - transition: opacity 0.2s ease, transform 0.2s ease;
598 + transition:
599 + opacity 0.2s ease,
600 + transform 0.2s ease;
601 }
602 .fade-up-enter-from,
603 .fade-up-leave-to {
frontend/src/components/copilotSearches/MatrixView.vue
+52 -50
@@ -96,11 +96,7 @@
96 </div>
97 </n-popover>
98
99 - <n-checkbox
100 - v-model:checked="onlyCovered"
101 - size="small"
102 - class="shrink-0! self-center whitespace-nowrap"
103 - >
99 + <n-checkbox v-model:checked="onlyCovered" size="small" class="shrink-0! self-center whitespace-nowrap">
100 <span class="text-xs">Only covered</span>
101 </n-checkbox>
102 </div>
@@ -114,7 +110,8 @@
110 Export CSV
111 </n-button>
112 </template>
117 - Download a CSV of the current coverage (one row per technique and sub-technique, with rule counts and IDs).
113 + Download a CSV of the current coverage (one row per technique and sub-technique, with rule counts and
114 + IDs).
115 </n-tooltip>
116
117 <n-tooltip placement="bottom-end">
@@ -128,8 +125,8 @@
125 </template>
126 Force a re-fetch of the MITRE ATT&amp;CK STIX bundle from
127 <code>github.com/mitre/cti</code>
131 - , bypassing the 24-hour cache. Use this if MITRE published a new release and you want
132 - the matrix to pick it up immediately.
128 + , bypassing the 24-hour cache. Use this if MITRE published a new release and you want the matrix to pick
129 + it up immediately.
130 </n-tooltip>
131 </div>
132
@@ -153,10 +150,7 @@
150 <!-- Subtle top progress bar replaces the heavy spin overlay during refetches. -->
151 <div v-if="loading && coverage" class="matrix-progress" />
152
156 - <div
157 - class="matrix-scroll"
158 - :class="{ 'matrix-scroll-loading': loading && coverage }"
159 - >
153 + <div class="matrix-scroll" :class="{ 'matrix-scroll-loading': loading && coverage }">
154 <n-empty
155 v-if="!loading && coverage && filteredTactics.length === 0"
156 description="No techniques match your filters."
@@ -167,14 +161,11 @@
161 </template>
162 </n-empty>
163
170 - <n-spin v-else-if="loading && !coverage" :show="true" class="matrix-initial-load" />
164 + <n-spin v-else-if="loading && !coverage" show class="matrix-initial-load" />
165
166 <div v-else class="matrix-grid">
167 <div v-for="tactic of filteredTactics" :key="tactic.id" class="tactic-column">
174 - <div
175 - class="tactic-header"
176 - :class="{ 'tactic-uncovered': isTacticUncovered(tactic) }"
177 - >
168 + <div class="tactic-header" :class="{ 'tactic-uncovered': isTacticUncovered(tactic) }">
169 <div class="flex items-center justify-between gap-2">
170 <div class="tactic-name">{{ tactic.name }}</div>
171 <span
@@ -206,8 +197,7 @@
197 cellClass(tech),
198 {
199 'cell-cross-tactic':
209 - hoveredTechniqueId === tech.id &&
210 - hoveredTacticId !== tactic.id
200 + hoveredTechniqueId === tech.id && hoveredTacticId !== tactic.id
201 }
202 ]"
203 :title="cellTooltip(tech)"
@@ -241,11 +231,7 @@
231 {{ tech.subtechniques.length }} sub
232 </div>
233
244 - <div
245 - v-if="expanded[tactic.id + tech.id]"
246 - class="subtechnique-list"
247 - @click.stop
248 - >
234 + <div v-if="expanded[tactic.id + tech.id]" class="subtechnique-list" @click.stop>
235 <n-popover
236 v-for="sub of visibleSubs(tech, tactic.id + tech.id)"
237 :key="sub.id"
@@ -259,7 +245,7 @@
245 <template #trigger>
246 <div
247 class="subtechnique-cell"
262 - :class="cellClass(sub, true)"
248 + :class="cellClass(sub)"
249 :title="subCellTooltip(sub)"
250 @click="openSubTechnique(tactic, tech, sub)"
251 >
@@ -297,7 +283,11 @@
283 </div>
284 </template>
285
300 - <RulePreviewList :rule-ids="tech.rule_ids" :index="rulesIndex" :extra-via-subs="tech.total_rule_count - tech.rule_count" />
286 + <RulePreviewList
287 + :rule-ids="tech.rule_ids"
288 + :index="rulesIndex"
289 + :extra-via-subs="tech.total_rule_count - tech.rule_count"
290 + />
291 </n-popover>
292
293 <n-empty
@@ -443,11 +433,7 @@ const statusOptions = [
433 ]
434
435 const anyFiltersActive = computed(
446 - () =>
447 - !!selectedPlatform.value ||
448 - !!selectedSeverity.value ||
449 - !!selectedStatus.value ||
450 - !!hasGraylogFilter.value
436 + () => !!selectedPlatform.value || !!selectedSeverity.value || !!selectedStatus.value || !!hasGraylogFilter.value
437 )
438
439 const rulesIndex = computed<Record<string, MitreRuleIndexEntry>>(() => coverage.value?.rules_index ?? {})
@@ -477,8 +463,7 @@ const filteredTactics = computed<MitreTactic[]>(() => {
463 const techHaystack = `${tech.id} ${tech.name}`.toLowerCase()
464 const techMatches = techHaystack.includes(q)
465 const ruleMatches =
480 - ruleIdsMatch(tech.rule_ids, q) ||
481 - tech.subtechniques.some(s => ruleIdsMatch(s.rule_ids, q))
466 + ruleIdsMatch(tech.rule_ids, q) || tech.subtechniques.some(s => ruleIdsMatch(s.rule_ids, q))
467 if (!techMatches && !ruleMatches) return false
468 }
469 return true
@@ -510,7 +495,7 @@ function isTacticUncovered(tactic: MitreTactic): boolean {
495 return total > 0 && covered === 0
496 }
497
513 -function cellClass(item: MitreTechnique | MitreSubTechnique, isSub = false) {
498 +function cellClass(item: MitreTechnique | MitreSubTechnique) {
499 const count = "total_rule_count" in item ? item.total_rule_count : item.rule_count
500 if (count === 0) return `cov-empty`
501 if (count === 1) return `cov-1`
@@ -527,9 +512,7 @@ function cellTooltip(tech: MitreTechnique) {
512 : `${tech.id} ${tech.name} — ${tech.rule_count} rule(s)`
513 }
514 function subCellTooltip(sub: MitreSubTechnique) {
530 - return sub.rule_count
531 - ? `${sub.id} ${sub.name} — ${sub.rule_count} rule(s)`
532 - : `${sub.id} ${sub.name} — no rules`
515 + return sub.rule_count ? `${sub.id} ${sub.name} — ${sub.rule_count} rule(s)` : `${sub.id} ${sub.name} — no rules`
516 }
517
518 function toggleExpand(tacticId: string, techId: string) {
@@ -558,7 +541,17 @@ function clearAllFilters() {
541
542 function exportCoverageCsv() {
543 if (!coverage.value) return
561 - const rows: string[][] = [["tactic_id", "tactic_name", "technique_id", "technique_name", "rule_count_direct", "rule_count_total", "rule_ids"]]
544 + const rows: string[][] = [
545 + [
546 + "tactic_id",
547 + "tactic_name",
548 + "technique_id",
549 + "technique_name",
550 + "rule_count_direct",
551 + "rule_count_total",
552 + "rule_ids"
553 + ]
554 + ]
555 for (const tactic of coverage.value.tactics) {
556 for (const tech of tactic.techniques) {
557 rows.push([
@@ -674,8 +667,7 @@ function applyFiltersFromUrl() {
667 platform && (validPlatforms as string[]).includes(platform) ? (platform as PlatformFilter) : null
668 selectedSeverity.value =
669 severity && (validSeverities as string[]).includes(severity) ? (severity as RuleSeverity) : null
677 - selectedStatus.value =
678 - status && (validStatuses as string[]).includes(status) ? (status as RuleStatus) : null
670 + selectedStatus.value = status && (validStatuses as string[]).includes(status) ? (status as RuleStatus) : null
671 hasGraylogFilter.value = q.has_graylog === "true"
672 }
673
@@ -772,11 +764,11 @@ const platformIcon: Record<string, string> = {
764 unknown: "carbon:help"
765 }
766
775 -const RulePreviewList = (props: {
767 +function RulePreviewList(props: {
768 ruleIds: string[]
769 index: Record<string, MitreRuleIndexEntry>
770 extraViaSubs?: number
779 -}) => {
771 +}) {
772 const ids = props.ruleIds || []
773 if (!ids.length) {
774 return h("div", { class: "preview-empty text-secondary text-xs" }, "No rules")
@@ -787,8 +779,9 @@ const RulePreviewList = (props: {
779 h(
780 "div",
781 { class: "text-tertiary text-xs uppercase tracking-wide" },
790 - `${ids.length} rule${ids.length === 1 ? "" : "s"}` +
791 - (props.extraViaSubs ? ` · +${props.extraViaSubs} via sub-techniques` : "")
782 + `${ids.length} rule${ids.length === 1 ? "" : "s"}${
783 + props.extraViaSubs ? ` · +${props.extraViaSubs} via sub-techniques` : ""
784 + }`
785 ),
786 ...shown.map(id => {
787 const entry = props.index[id]
@@ -815,7 +808,7 @@ const RulePreviewList = (props: {
808 "span",
809 { class: `preview-sev preview-sev-${entry.severity.toLowerCase()} text-xs` },
810 entry.severity
818 - )
811 + )
812 : null
813 ]),
814 dataSources.length
@@ -823,7 +816,7 @@ const RulePreviewList = (props: {
816 "div",
817 { class: "preview-sources flex flex-wrap items-center gap-1" },
818 dataSources.map(s => h("span", { class: "preview-source text-xs", key: s }, s))
826 - )
819 + )
820 : null
821 ]
822 )
@@ -903,8 +896,12 @@ const RulePreviewList = (props: {
896 animation: matrix-progress-slide 1.1s ease-in-out infinite;
897 }
898 @keyframes matrix-progress-slide {
906 - 0% { left: -40%; }
907 - 100% { left: 100%; }
899 + 0% {
900 + left: -40%;
901 + }
902 + 100% {
903 + left: 100%;
904 + }
905 }
906
907 /* Matrix scrolls inside its own bounded box so the horizontal scrollbar
@@ -1001,7 +998,10 @@ const RulePreviewList = (props: {
998 padding: 6px 8px;
999 border-radius: 4px;
1000 cursor: pointer;
1004 - transition: background-color 0.12s, border-color 0.12s, box-shadow 0.12s;
1001 + transition:
1002 + background-color 0.12s,
1003 + border-color 0.12s,
1004 + box-shadow 0.12s;
1005 font-size: 0.75rem;
1006 border: 1px solid var(--border-color);
1007 background: var(--bg-default-color);
@@ -1080,7 +1080,9 @@ const RulePreviewList = (props: {
1080 font-size: 0.7rem;
1081 border: 1px solid var(--border-color);
1082 background: var(--bg-default-color);
1083 - transition: background-color 0.12s, border-color 0.12s;
1083 + transition:
1084 + background-color 0.12s,
1085 + border-color 0.12s;
1086 }
1087
1088 .subtechnique-cell:hover {
frontend/src/components/copilotSearches/RuleCard.vue
+3 -1
@@ -264,7 +264,9 @@ function handleProvisionSuccess() {
264 border-radius: 4px;
265 padding: 2px;
266 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
267 - transition: border-color 0.12s, box-shadow 0.12s;
267 + transition:
268 + border-color 0.12s,
269 + box-shadow 0.12s;
270 }
271 .rule-card-wrap.is-selected .rule-card-checkbox {
272 border-color: rgba(var(--primary-color-rgb) / 0.6);
frontend/src/components/copilotSearches/TechniqueDrawer.vue
+4 -1
@@ -17,7 +17,10 @@
17 </div>
18 </div>
19
20 - <div v-if="provisionableCount > 0" class="mb-3 flex items-center justify-between gap-2 rounded-md border border-default bg-secondary p-2">
20 + <div
21 + v-if="provisionableCount > 0"
22 + class="border-default bg-secondary mb-3 flex items-center justify-between gap-2 rounded-md border p-2"
23 + >
24 <div class="text-secondary text-xs">
25 <strong>{{ provisionableCount }}</strong>
26 of
frontend/src/components/customers/aiNotifications/CustomerAiNotificationRoutes/CustomerAiNotificationRouteForm.vue
+19 -14
@@ -23,8 +23,8 @@
23 <n-form-item label="Channel">
24 <n-select v-model:value="form.channel" :options="channelOptions" disabled />
25 <template v-if="!fieldErrors.channel" #feedback>
26 - Email is direct SMTP via CoPilot's deployment config. Shuffle proxies to
27 - 3,000+ integrations through a customer's authenticated Shuffle org.
26 + Email is direct SMTP via CoPilot's deployment config. Shuffle proxies to 3,000+ integrations through a
27 + customer's authenticated Shuffle org.
28 </template>
29 </n-form-item>
30
@@ -41,7 +41,8 @@
41 #feedback
42 >
43 No Shuffle integrations configured for this customer yet — go to the
44 - <strong>Shuffle integrations</strong> tab to add one first.
44 + <strong>Shuffle integrations</strong>
45 + tab to add one first.
46 </template>
47 </n-form-item>
48
@@ -55,13 +56,8 @@
56 filterable
57 @update:value="onAppChange"
58 />
58 - <template
59 - v-if="!fieldErrors.shuffle_app_id && form.shuffle_integration_id && !appOptions.length && !loadingApps && appsError"
60 - #feedback
61 - >
62 - <div class="text-error">
63 - Couldn't fetch apps from Shuffle: {{ appsError }}
64 - </div>
59 + <template v-if="showShuffleAppsFetchError" #feedback>
60 + <div class="text-error">Couldn't fetch apps from Shuffle: {{ appsError }}</div>
61 </template>
62 </n-form-item>
63
@@ -73,9 +69,9 @@
69 />
70 <template v-if="!fieldErrors.destination" #feedback>
71 Free-form — gets prepended to the outgoing message as a
76 - <code>Send to &lt;destination&gt;: …</code> hint so the Shuffle app
77 - agent knows where to deliver. Channel name for Slack, email for
78 - Outlook / Gmail, handle for chat apps, etc.
72 + <code>Send to &lt;destination&gt;: …</code>
73 + hint so the Shuffle app agent knows where to deliver. Channel name for Slack, email for Outlook / Gmail,
74 + handle for chat apps, etc.
75 </template>
76 </n-form-item>
77 <n-form-item label="Custom message template (optional)" path="format_template" :show-feedback="false">
@@ -199,6 +195,15 @@ const appOptions = computed(() =>
195 }))
196 )
197
198 +const showShuffleAppsFetchError = computed(
199 + () =>
200 + !fieldErrors.shuffle_app_id &&
201 + Boolean(form.shuffle_integration_id) &&
202 + appOptions.value.length === 0 &&
203 + !loadingApps.value &&
204 + Boolean(appsError.value)
205 +)
206 +
207 function clearFieldError(field: FeedbackField) {
208 delete fieldErrors[field]
209 }
@@ -273,7 +278,7 @@ const rules: FormRules = {
278 required: true,
279 validator: (_rule, value: string) => {
280 if (!value || !value.trim()) {
276 - createFieldError("destination", "Destination hint is required")
281 + createFieldError("destination", "Destination hint is required")
282 }
283 clearFieldError("destination")
284 return true
frontend/src/components/customers/aiNotifications/CustomerShuffleIntegrations/CustomerShuffleAppsDrawer.vue
+11 -32
@@ -1,5 +1,5 @@
1 <template>
2 - <n-drawer v-model:show="showLocal" :width="720" placement="right">
2 + <n-drawer v-model:show="show" :width="720" placement="right" display-directive="show">
3 <n-drawer-content closable>
4 <template #header>
5 <div class="flex items-center gap-2">
@@ -32,7 +32,7 @@
32 inline
33 layout="grid"
34 :grid-columns="3"
35 - @app-selected="onAppSelected"
35 + prevent-default
36 />
37 </div>
38 </n-drawer-content>
@@ -42,11 +42,11 @@
42 <script setup lang="ts">
43 import type { ApiError } from "@/types/common"
44 import type { ShuffleIntegration } from "@/types/notifications.d"
45 -import { NDrawer, NDrawerContent, useMessage } from "naive-ui"
46 -import { computed, ref, watch } from "vue"
45 +import { NDrawer, NDrawerContent } from "naive-ui"
46 +import { ref, watch } from "vue"
47 import Api from "@/api"
48 import Icon from "@/components/common/Icon.vue"
49 -import ShuffleMCPEmbed from "@/components/common/ShuffleMCPEmbed.vue"
49 +import ShuffleMCPEmbed from "@/components/shuffle/ShuffleMCPEmbed.vue"
50 import { getApiErrorMessage } from "@/utils"
51
52 // Per-integration "Manage apps" drawer. Opened from the Shuffle
@@ -59,27 +59,18 @@ import { getApiErrorMessage } from "@/utils"
59 // 3. Surfacing a confirmation message when the admin picks an app
60
61 const props = defineProps<{
62 - show: boolean
62 integration: ShuffleIntegration | null
63 }>()
64
66 -const emit = defineEmits<{
67 - (e: "update:show", value: boolean): void
68 -}>()
69 -
70 -// v-model:show bridge — lets the drawer's built-in close button
71 -// propagate state back to the parent.
72 -const showLocal = computed({
73 - get: () => props.show,
74 - set: (v: boolean) => emit("update:show", v)
75 -})
65 +const show = defineModel<boolean>("show", { required: true, default: false })
66
77 -const message = useMessage()
67 const orgAuthToken = ref<string | null>(null)
68 const loadingToken = ref(false)
69 const error = ref<string | null>(null)
70
71 async function loadOrgToken(orgId: string) {
72 + if (orgAuthToken.value) return
73 +
74 loadingToken.value = true
75 error.value = null
76
@@ -101,26 +92,14 @@ async function loadOrgToken(orgId: string) {
92 }
93 }
94
104 -function onAppSelected(payload: unknown) {
105 - // Shuffle handles the actual OAuth flow inside the picker — by the
106 - // time we get this callback, the user has either started or
107 - // completed authentication. Surface a confirmation; the new app
108 - // will appear in the route form's app picker on next refresh.
109 - const name = (payload as { app?: { name?: string } } | undefined)?.app?.name ?? "the selected app"
110 - message.success(`${name} authentication initiated. Refresh the route form to use it.`)
111 -}
112 -
95 // Re-fetch the org token whenever the drawer opens or switches to a
96 // different integration. Cleared when closing so reopening on a
97 // different integration doesn't briefly flash stale data.
98 watch(
117 - () => [props.show, props.integration?.id] as const,
118 - ([show, id]) => {
119 - if (show && id && props.integration?.shuffle_org_id) {
99 + [show, () => props.integration?.id],
100 + ([showValue, integrationId]) => {
101 + if (showValue && integrationId && props.integration?.shuffle_org_id) {
102 loadOrgToken(props.integration.shuffle_org_id)
121 - } else if (!show) {
122 - orgAuthToken.value = null
123 - error.value = null
103 }
104 },
105 { immediate: true }
frontend/src/components/incidentManagement/alerts/AlertAiAnalyst.vue
+43 -24
@@ -1,27 +1,33 @@
1 <template>
2 <n-spin :show="loading" class="min-h-[200px]">
3 <div v-if="reports.length" class="flex flex-col gap-4">
4 - <div v-if="reports.length > 1" class="flex items-center gap-3">
5 - <n-select v-model:value="selectedIndex" :options="reportOptions" size="small" class="max-w-[400px]" />
6 - <span class="text-tertiary shrink-0 text-xs">
7 - {{ reports.length }} report{{ reports.length > 1 ? "s" : "" }}
8 - </span>
9 - </div>
4 + <div v-if="reports.length > 1" class="flex flex-col gap-2">
5 + <n-select v-model:value="selectedIndex" :options="reportOptions" size="small" />
6 + <div class="flex items-center justify-between gap-2">
7 + <div>
8 + <div v-if="report" class="flex flex-wrap items-center gap-2">
9 + <n-tag v-if="report.severity_assessment" :type="severityType" size="small" round>
10 + {{ report.severity_assessment }}
11 + </n-tag>
12 + <n-tag size="small" round>
13 + {{ formatDate(report.created_at, dFormats.datetime) }}
14 + </n-tag>
15 + </div>
16 + </div>
17
11 - <div v-if="report" class="flex flex-col gap-4">
12 - <div class="flex flex-wrap items-center gap-3">
13 - <n-tag v-if="report.severity_assessment" :type="severityType" size="small" round>
14 - {{ report.severity_assessment }}
15 - </n-tag>
16 - <span class="text-tertiary text-xs">
17 - {{ formatDate(report.created_at, dFormats.datetime) }}
18 + <span class="text-secondary shrink-0 text-xs">
19 + {{ reports.length }} report{{ reports.length > 1 ? "s" : "" }}
20 </span>
21 </div>
22 + </div>
23
21 - <div v-if="report.summary" class="bg-secondary rounded-lg p-4">
22 - <div class="text-secondary mb-1 text-xs font-semibold uppercase">Summary</div>
23 - <p class="text-default text-sm leading-relaxed">{{ report.summary }}</p>
24 - </div>
24 + <div v-if="report" class="flex flex-col gap-4">
25 + <CardEntity v-if="report.summary" embedded size="small">
26 + <div class="text-secondary mb-1 text-sm font-semibold uppercase">Summary</div>
27 + <div class="text-sm">
28 + {{ report.summary }}
29 + </div>
30 + </CardEntity>
31
32 <n-tabs type="line" animated :tabs-padding="0">
33 <n-tab-pane name="report" tab="Full Report" display-directive="show:lazy">
@@ -50,9 +56,11 @@ import type { TalonJobData } from "@/types/talon.d"
56 import { NSelect, NSpin, NTabPane, NTabs, NTag } from "naive-ui"
57 import { computed, onBeforeMount, ref } from "vue"
58 import Api from "@/api"
59 +import CardEntity from "@/components/common/cards/CardEntity.vue"
60 import Icon from "@/components/common/Icon.vue"
61 import Markdown from "@/components/common/Markdown.vue"
62 import { useSettingsStore } from "@/stores/settings"
63 +import dayjs from "@/utils/dayjs"
64 import { formatDate } from "@/utils/format"
65
66 const props = defineProps<{
@@ -72,10 +80,24 @@ const reports = computed(() => {
80 })
81
82 const reportOptions = computed(() =>
75 - reports.value.map((r, i) => ({
76 - label: `${formatDate(r.created_at, dFormats.datetime)}${r.severity_assessment ? ` — ${r.severity_assessment}` : ""}`,
77 - value: i
78 - }))
83 + reports.value.map((r, i) => {
84 + const chunks = []
85 +
86 + chunks.push(dayjs(r.created_at).fromNow())
87 +
88 + if (r.severity_assessment) {
89 + chunks.push(r.severity_assessment)
90 + }
91 +
92 + if (r.job_id) {
93 + chunks.push(`#${r.job_id}`)
94 + }
95 +
96 + return {
97 + label: chunks.join(" — "),
98 + value: i
99 + }
100 + })
101 )
102
103 const report = computed(() => reports.value[selectedIndex.value] || null)
@@ -97,9 +119,6 @@ function fetchJob() {
119 job.value = res.data.data
120 }
121 })
100 - .catch(() => {
101 - // No job found — not an error, just no report
102 - })
122 .finally(() => {
123 loading.value = false
124 })
frontend/src/components/incidentManagement/alerts/AlertDetails.vue
+12
@@ -50,6 +50,17 @@
50 <AlertIoCsList :iocs="alert.iocs" :alert-id="alert.id" @updated="updateIos($event)" />
51 </div>
52 </n-tab-pane>
53 + <n-tab-pane name="TryMcp" display-directive="show:lazy">
54 + <template #tab>
55 + <div class="flex items-center gap-1.5">
56 + <Icon name="carbon:bot" :size="14" class="text-primary" />
57 + <span>Try MCP</span>
58 + </div>
59 + </template>
60 + <div class="p-7 pt-4">
61 + <AlertTryMcp :alert />
62 + </div>
63 + </n-tab-pane>
64 </n-tabs>
65 </n-spin>
66 </template>
@@ -76,6 +87,7 @@ const AlertCommentsList = defineAsyncComponent(() => import("./AlertCommentsList
87 const AlertIoCsList = defineAsyncComponent(() => import("./AlertIoCsList.vue"))
88 const AlertOverview = defineAsyncComponent(() => import("./AlertOverview.vue"))
89 const AlertAiAnalyst = defineAsyncComponent(() => import("./AlertAiAnalyst.vue"))
90 +const AlertTryMcp = defineAsyncComponent(() => import("./AlertTryMcp.vue"))
91
92 const { alertData, alertId } = toRefs(props)
93
frontend/src/components/incidentManagement/alerts/AlertIoCsList.vue
+22 -20
@@ -24,26 +24,28 @@
24 </div>
25 </CollapseKeepAlive>
26
27 - <div class="mt-3 flex flex-col gap-2">
28 - <template v-if="iocs.length">
29 - <AlertIoCItem v-for="ioc of iocs" :key="ioc.id" :ioc :alert-id embedded @deleted="delIoc(ioc)" />
30 - </template>
31 - <template v-else>
32 - <n-collapse-transition :show="!showForm">
33 - <n-empty v-if="!loading" class="min-h-48">
34 - <div class="flex flex-col items-center gap-4">
35 - <p>No IoCs found</p>
36 - <n-button type="primary" :loading="submitting" @click="openForm()">
37 - <template #icon>
38 - <Icon :name="AddIcon" />
39 - </template>
40 - Create an IoCs
41 - </n-button>
42 - </div>
43 - </n-empty>
44 - </n-collapse-transition>
45 - </template>
46 - </div>
27 + <CollapseKeepAlive :show="!showForm">
28 + <div class="mt-3 flex flex-col gap-2">
29 + <template v-if="iocs.length">
30 + <AlertIoCItem v-for="ioc of iocs" :key="ioc.id" :ioc :alert-id embedded @deleted="delIoc(ioc)" />
31 + </template>
32 + <template v-else>
33 + <n-collapse-transition :show="!showForm">
34 + <n-empty v-if="!loading" class="min-h-48">
35 + <div class="flex flex-col items-center gap-4">
36 + <p>No IoCs found</p>
37 + <n-button type="primary" :loading="submitting" @click="openForm()">
38 + <template #icon>
39 + <Icon :name="AddIcon" />
40 + </template>
41 + Create an IoCs
42 + </n-button>
43 + </div>
44 + </n-empty>
45 + </n-collapse-transition>
46 + </template>
47 + </div>
48 + </CollapseKeepAlive>
49 </div>
50 </template>
51
frontend/src/components/incidentManagement/alerts/AlertTryMcp.vue new
+149
@@ -0,0 +1,149 @@
1 +<template>
2 + <div class="flex flex-col gap-4">
3 + <!-- No customer code on alert -->
4 + <n-alert v-if="!alert.customer_code" type="warning" title="No customer associated with this alert">
5 + Try MCP needs the alert's customer to look up their Shuffle integration.
6 + </n-alert>
7 +
8 + <!-- Loading customer integration -->
9 + <div v-else-if="loadingIntegration" class="text-tertiary py-6 text-center text-sm">
10 + Loading Shuffle integration for customer {{ alert.customer_code }}…
11 + </div>
12 +
13 + <!-- No integration configured -->
14 + <n-alert v-else-if="!activeIntegration" type="info" title="No Shuffle integration configured">
15 + This customer has no enabled Shuffle integration. Configure one in
16 + <strong>Customer → AI Notifications → Shuffle integrations</strong>
17 + before using Try MCP.
18 + </n-alert>
19 +
20 + <!-- Loading the org auth token -->
21 + <div v-else-if="loadingToken" class="text-tertiary py-6 text-center text-sm">Fetching org auth token…</div>
22 +
23 + <!-- Token fetch error -->
24 + <n-alert v-else-if="tokenError" type="error" title="Couldn't fetch Shuffle auth token">
25 + {{ tokenError }}
26 + </n-alert>
27 +
28 + <!-- Active flow: pick an app, then mount TryMcpSection -->
29 + <template v-else-if="orgAuthToken">
30 + <div class="flex flex-col gap-2">
31 + <div class="flex items-center justify-between">
32 + <span class="text-sm">
33 + Acting as
34 + <strong>{{ activeIntegration.display_name }}</strong>
35 + <span class="text-secondary">&nbsp;• alert #{{ alert.id }}</span>
36 + </span>
37 + <n-button v-if="selectedAppName" size="tiny" @click="selectedAppName = null">
38 + <template #icon>
39 + <Icon :name="ResetIcon" :size="14" />
40 + </template>
41 + Pick a different app
42 + </n-button>
43 + </div>
44 +
45 + <!-- App picker: only mounted until a selection is made -->
46 + <CollapseKeepAlive :show="!selectedAppName">
47 + <ShuffleMCPEmbed
48 + :auth-token="orgAuthToken"
49 + placeholder="Pick an app to act on this alert (e.g. Crowdstrike, Cloudflare, VirusTotal)…"
50 + inline
51 + class="[&_.singul-container]:max-h-100!"
52 + disable-app-drawer
53 + prevent-default
54 + @app-selected="onAppSelected"
55 + />
56 + </CollapseKeepAlive>
57 +
58 + <!-- Try MCP for the chosen app -->
59 + <n-collapse-transition :show="!!selectedAppName">
60 + <TryMcpEmbed v-if="selectedAppName" :app-name="selectedAppName" :auth-token="orgAuthToken" />
61 + </n-collapse-transition>
62 + </div>
63 + </template>
64 + </div>
65 +</template>
66 +
67 +<script setup lang="ts">
68 +import type { AppSelectedEvent } from "@shuffleio/shuffle-mcps"
69 +import type { Alert } from "@/types/incidentManagement/alerts.d"
70 +import type { ShuffleIntegration } from "@/types/notifications.d"
71 +import { NAlert, NButton, NCollapseTransition, useMessage } from "naive-ui"
72 +import { computed, onBeforeMount, ref } from "vue"
73 +import Api from "@/api"
74 +import CollapseKeepAlive from "@/components/common/CollapseKeepAlive.vue"
75 +import Icon from "@/components/common/Icon.vue"
76 +import ShuffleMCPEmbed from "@/components/shuffle/ShuffleMCPEmbed.vue"
77 +import TryMcpEmbed from "@/components/shuffle/TryMcpEmbed.vue"
78 +
79 +const props = defineProps<{ alert: Alert }>()
80 +
81 +const ResetIcon = "carbon:reset"
82 +
83 +const message = useMessage()
84 +
85 +const integrations = ref<ShuffleIntegration[]>([])
86 +const loadingIntegration = ref(false)
87 +const orgAuthToken = ref<string | null>(null)
88 +const loadingToken = ref(false)
89 +const tokenError = ref<string | null>(null)
90 +const selectedAppName = ref<string | null>(null)
91 +
92 +// First enabled integration wins. Multi-integration customers will need
93 +// a picker in a follow-up; vast majority have one.
94 +const activeIntegration = computed<ShuffleIntegration | null>(
95 + () => integrations.value.find(i => i.enabled) ?? integrations.value[0] ?? null
96 +)
97 +
98 +async function loadIntegrations() {
99 + if (!props.alert.customer_code) return
100 + loadingIntegration.value = true
101 + try {
102 + const res = await Api.notifications.listShuffleIntegrations(props.alert.customer_code)
103 + if (res.data.success) {
104 + integrations.value = res.data?.integrations || []
105 + if (activeIntegration.value?.shuffle_org_id) {
106 + await loadOrgToken(activeIntegration.value.shuffle_org_id)
107 + }
108 + } else {
109 + message.warning(res.data?.message || "Failed to load Shuffle integrations.")
110 + }
111 + } catch (err: unknown) {
112 + const msg = (err as { response?: { data?: { message?: string } } })?.response?.data?.message
113 + message.error(msg || "Failed to load Shuffle integrations.")
114 + } finally {
115 + loadingIntegration.value = false
116 + }
117 +}
118 +
119 +async function loadOrgToken(orgId: string) {
120 + loadingToken.value = true
121 + tokenError.value = null
122 + try {
123 + const res = await Api.shuffle.getOrganization(orgId)
124 + if (res.data.success) {
125 + orgAuthToken.value = res.data.data?.org_auth?.token ?? null
126 + if (!orgAuthToken.value) {
127 + tokenError.value = "Shuffle returned an org without an org_auth.token."
128 + }
129 + } else {
130 + tokenError.value = res.data.message || "Failed to fetch org auth token."
131 + }
132 + } catch (err: unknown) {
133 + const msg = (err as { response?: { data?: { message?: string } } })?.response?.data?.message
134 + tokenError.value = msg || "Failed to fetch org auth token."
135 + } finally {
136 + loadingToken.value = false
137 + }
138 +}
139 +
140 +function onAppSelected(payload: AppSelectedEvent) {
141 + const name = payload.app?.name
142 + if (!name) return
143 + selectedAppName.value = name
144 +}
145 +
146 +onBeforeMount(() => {
147 + loadIntegrations()
148 +})
149 +</script>
frontend/src/components/incidentManagement/alerts/AlertsList.vue
+1 -1
@@ -88,7 +88,7 @@
88 </div>
89 </n-button>
90 </div>
91 - <n-button size="small" ghost type="error" @click="showDeleteByTitleModal = true">
91 + <n-button size="small" text type="error" @click="showDeleteByTitleModal = true">
92 <div class="flex items-center gap-2">
93 <Icon :name="TrashIcon" />
94 <span class="hidden @3xl:inline">Bulk Delete</span>
frontend/src/components/shuffle/AppDetailDrawerEmbed.vue new
+88
@@ -0,0 +1,88 @@
1 +<template>
2 + <div ref="container" />
3 +</template>
4 +
5 +<script setup lang="ts">
6 +// Vue wrapper around `<AppDetailDrawer>` (a React component from
7 +// `@shuffleio/shuffle-mcps`). Same manual `react-dom/client` mount
8 +// pattern as ShuffleMCPEmbed / TryMcpEmbed.
9 +//
10 +// AppDetailDrawer is the all-in-one panel for a single app: header
11 +// + auth card (inline form for API-key apps, redirect handoff for
12 +// OAuth apps) + MCP chat + Singul actions playground. We use it after
13 +// picking an app from <ShuffleMCP preventDefault> so the user lands
14 +// on a CoPilot-orchestrated drawer instead of a top-level redirect.
15 +
16 +import type { Root } from "react-dom/client"
17 +import { API_CONFIG, AppDetailDrawer } from "@shuffleio/shuffle-mcps"
18 +import { storeToRefs } from "pinia"
19 +import { createElement } from "react"
20 +import { createRoot } from "react-dom/client"
21 +import { onBeforeUnmount, onMounted, ref, watch } from "vue"
22 +import { useThemeStore } from "@/stores/theme"
23 +import { fetchShuffleConnectorCredentials } from "@/utils/shuffle/shuffleConnectorCredentials"
24 +import { MuiProvider } from "@/utils/shuffle/shuffleMuiTheme"
25 +
26 +interface Props {
27 + appName: string | null
28 + width?: number
29 + anchor?: "left" | "right"
30 +}
31 +
32 +const props = withDefaults(defineProps<Props>(), {
33 + width: 720,
34 + anchor: "right"
35 +})
36 +
37 +const emit = defineEmits<{
38 + (e: "refresh"): void
39 +}>()
40 +
41 +const show = defineModel<boolean>("show", { required: true, default: false })
42 +
43 +const container = ref<HTMLElement | null>(null)
44 +let root: Root | null = null
45 +
46 +const themeStore = useThemeStore()
47 +const { isThemeDark } = storeToRefs(themeStore)
48 +
49 +function render() {
50 + if (!root) return
51 + root.render(
52 + createElement(
53 + MuiProvider as never,
54 + { isDark: isThemeDark.value },
55 + createElement(AppDetailDrawer as never, {
56 + open: show.value,
57 + onClose: () => (show.value = false),
58 + appName: props.appName,
59 + anchor: props.anchor,
60 + width: props.width,
61 + onRefresh: () => emit("refresh")
62 + })
63 + )
64 + )
65 +}
66 +
67 +watch([show.value, () => props.appName, () => props.width, () => props.anchor, isThemeDark], () => render())
68 +
69 +onBeforeUnmount(() => {
70 + if (root) {
71 + root.unmount()
72 + root = null
73 + }
74 +})
75 +
76 +onMounted(async () => {
77 + if (!container.value) return
78 + root = createRoot(container.value)
79 + // Same gating as the other embeds — wait for connector creds before
80 + // the first render so the drawer's internal fetches go through the
81 + // proxy with the right Bearer token.
82 + const creds = await fetchShuffleConnectorCredentials()
83 + if (creds?.api_key) {
84 + API_CONFIG.setApiKey(creds.api_key)
85 + }
86 + render()
87 +})
88 +</script>
frontend/src/components/shuffle/ShuffleMCPEmbed.vue new
+190
@@ -0,0 +1,190 @@
1 +<template>
2 + <div>
3 + <div ref="container" class="w-full" />
4 +
5 + <!-- All-in-one app drawer (auth + MCP chat + actions). Replaces the
6 + top-level redirect to shuffler.io that <ShuffleMCP> would do
7 + by default. Inline auth form for API-key/URL apps; OAuth apps
8 + still redirect from inside the drawer when the user clicks
9 + "Authenticate". -->
10 + <AppDetailDrawerEmbed v-model:show="showAppDrawer" :app-name="selectedAppName" />
11 + </div>
12 +</template>
13 +
14 +<script setup lang="ts">
15 +// Vue wrapper around `<ShuffleMCP>` (a React component from
16 +// `@shuffleio/shuffle-mcps`). We don't pull in a Vue/React interop
17 +// library — for a single component the manual mount via
18 +// react-dom/client is cleaner and avoids the abstraction tax. Vite
19 +// already handles JSX through esbuild so no build config changes
20 +// were needed.
21 +//
22 +// Lifecycle: createRoot in onMounted, unmount in onBeforeUnmount,
23 +// re-render with `root.render(...)` on prop change so the embed
24 +// reacts to live updates (e.g. when the parent swaps the auth token
25 +// after picking a different Shuffle org).
26 +
27 +// `@shuffleio/shuffle-mcps/dist/index.js` self-imports its CSS via a
28 +// hash-suffixed filename (`./singul-GZKBHJNI.css`). The package's own
29 +// `./singul.css` export entry points at `./dist/singul.css` which
30 +// doesn't exist on disk — that's a package bug. We don't need to
31 +// import the CSS here ourselves; importing `ShuffleMCP` pulls it in.
32 +
33 +import type { AlgoliaSearchApp, AppSelectedEvent } from "@shuffleio/shuffle-mcps"
34 +import type { Root } from "react-dom/client"
35 +import { ShuffleMCP } from "@shuffleio/shuffle-mcps"
36 +import { storeToRefs } from "pinia"
37 +import { createElement } from "react"
38 +import { createRoot } from "react-dom/client"
39 +import { onBeforeUnmount, onMounted, ref, watch } from "vue"
40 +import { useThemeStore } from "@/stores/theme"
41 +import { fetchShuffleConnectorCredentials } from "@/utils/shuffle/shuffleConnectorCredentials"
42 +import { MuiProvider } from "@/utils/shuffle/shuffleMuiTheme"
43 +import AppDetailDrawerEmbed from "./AppDetailDrawerEmbed.vue"
44 +
45 +interface Props {
46 + authToken: string
47 + apiKey?: string
48 + apiBaseUrl?: string
49 + inline?: boolean
50 + layout?: "list" | "grid"
51 + gridColumns?: number
52 + placeholder?: string
53 + preventDefault?: boolean
54 + multiSelect?: boolean
55 + showCheckbox?: boolean
56 + initialFilterQuery?: string
57 + showSourceFilter?: boolean
58 + disableAppDrawer?: boolean
59 +}
60 +
61 +const props = withDefaults(defineProps<Props>(), {
62 + apiKey: undefined,
63 + apiBaseUrl: undefined,
64 + inline: true,
65 + layout: "list",
66 + gridColumns: 3,
67 + placeholder: "Find an app…",
68 + preventDefault: false,
69 + multiSelect: false,
70 + showCheckbox: false,
71 + initialFilterQuery: undefined,
72 + showSourceFilter: true,
73 + disableAppDrawer: false
74 +})
75 +
76 +const emit = defineEmits<{
77 + (e: "app-selected", payload: AppSelectedEvent): void
78 + (e: "selection-change", payload: AlgoliaSearchApp[]): void
79 +}>()
80 +
81 +const container = ref<HTMLElement | null>(null)
82 +let root: Root | null = null
83 +const EMPTY_SELECTED_APPS: AlgoliaSearchApp[] = []
84 +
85 +const themeStore = useThemeStore()
86 +const { isThemeDark } = storeToRefs(themeStore)
87 +
88 +// Connector creds (URL + admin API key) read from CoPilot's `connectors`
89 +// table. Without these, ShuffleMCP fetches private/authenticated apps
90 +// unauthenticated and CORS-blocks against the default `shuffler.io`
91 +// origin. Loaded lazily so the embed doesn't gate on the round-trip
92 +// when the caller already passed explicit overrides.
93 +const connectorApiKey = ref<string | null>(null)
94 +const connectorBaseUrl = ref<string | null>(null)
95 +
96 +const showAppDrawer = ref(false)
97 +const selectedAppName = ref<string | null>(null)
98 +
99 +function render() {
100 + if (!root) return
101 + // Drop undefined props so React doesn't override the package's
102 + // own defaults with our `undefined` (different semantics in TS vs
103 + // React's prop-default mechanism).
104 + const reactProps: Record<string, unknown> = {
105 + authToken: props.authToken,
106 + inline: props.inline,
107 + layout: props.layout,
108 + gridColumns: props.gridColumns,
109 + placeholder: props.placeholder,
110 + preventDefault: props.preventDefault,
111 + multiSelect: props.multiSelect,
112 + showCheckbox: props.showCheckbox,
113 + showSourceFilter: props.showSourceFilter,
114 + // The package currently defaults `selectedApps` to a fresh `[]`
115 + // inside the React component, then mirrors it into state from a
116 + // useEffect. Passing a stable array avoids that render loop.
117 + selectedApps: EMPTY_SELECTED_APPS,
118 + onAppSelected: (payload: AppSelectedEvent) => onAppSelected(payload),
119 + onSelectionChange: (payload: AlgoliaSearchApp[]) => emit("selection-change", payload)
120 + }
121 + // Caller-provided overrides win; fall back to the connector creds.
122 + const effectiveApiKey = props.apiKey ?? connectorApiKey.value
123 + const effectiveBaseUrl = props.apiBaseUrl ?? connectorBaseUrl.value
124 + if (effectiveApiKey) reactProps.apiKey = effectiveApiKey
125 + if (effectiveBaseUrl) reactProps.apiBaseUrl = effectiveBaseUrl
126 + if (props.initialFilterQuery) reactProps.initialFilterQuery = props.initialFilterQuery
127 +
128 + root.render(
129 + createElement(
130 + MuiProvider as never,
131 + { isDark: isThemeDark.value },
132 + createElement(ShuffleMCP as never, reactProps)
133 + )
134 + )
135 +}
136 +
137 +function onAppSelected(payload: AppSelectedEvent) {
138 + emit("app-selected", payload)
139 +
140 + if (props.disableAppDrawer) return
141 +
142 + const name = payload.app?.name
143 + if (!name) return
144 + selectedAppName.value = name
145 + showAppDrawer.value = true
146 +}
147 +
148 +watch(showAppDrawer, value => {
149 + if (!value) {
150 + selectedAppName.value = null
151 + }
152 +})
153 +
154 +// Re-render when any reactive prop changes. The shallow watch is fine
155 +// since all our props are primitives or strings — no nested object
156 +// identity churn to worry about.
157 +watch(
158 + () => ({ ...props }),
159 + () => render(),
160 + { deep: true }
161 +)
162 +
163 +// Re-render when the host theme toggles so the MUI provider swaps to
164 +// the matching light/dark palette.
165 +watch(isThemeDark, () => render())
166 +
167 +onBeforeUnmount(() => {
168 + if (root) {
169 + root.unmount()
170 + root = null
171 + }
172 +})
173 +
174 +onMounted(async () => {
175 + if (!container.value) return
176 + root = createRoot(container.value)
177 +
178 + // Wait for the connector creds before the first render. The package
179 + // fires its private/authenticated apps fetches eagerly on mount; if we
180 + // render with no apiKey/apiBaseUrl those fetches go to the package
181 + // defaults (shuffler.io, unauthed) and 401/CORS-block. Better to hold
182 + // off one async tick and render once with the right config.
183 + const creds = await fetchShuffleConnectorCredentials()
184 + if (creds) {
185 + connectorApiKey.value = creds.api_key
186 + connectorBaseUrl.value = creds.base_url
187 + }
188 + render()
189 +})
190 +</script>
frontend/src/components/shuffle/TryMcpEmbed.vue new
+118
@@ -0,0 +1,118 @@
1 +<template>
2 + <div ref="container" class="w-full" />
3 +</template>
4 +
5 +<script setup lang="ts">
6 +// Vue wrapper around `<TryMcpSection>` (a React component from
7 +// `@shuffleio/shuffle-mcps`). Same manual react-dom/client mount
8 +// strategy as ShuffleMCPEmbed.
9 +//
10 +// Difference from ShuffleMCPEmbed: TryMcpSection requires a *resolved*
11 +// app id (Algolia objectID), not just a name. The package's
12 +// `useAppLookup(name)` hook does the resolution, so we wrap both in a
13 +// tiny inline React component and let the hook drive what gets rendered.
14 +//
15 +// Auth: TryMcpSection reads from the package's global API_CONFIG rather
16 +// than props. We call `API_CONFIG.setApiKey(authToken)` once on mount —
17 +// good enough for a single-customer prototype. Multi-customer scoping
18 +// (per-org headers via `getAuthHeader(orgId)`) is a follow-up.
19 +
20 +import type { FC } from "react"
21 +import type { Root } from "react-dom/client"
22 +import { API_CONFIG, TryMcpSection, useAppLookup } from "@shuffleio/shuffle-mcps"
23 +import { storeToRefs } from "pinia"
24 +import { createElement } from "react"
25 +import { createRoot } from "react-dom/client"
26 +import { onBeforeUnmount, onMounted, ref, watch } from "vue"
27 +import { useThemeStore } from "@/stores/theme"
28 +import { fetchShuffleConnectorCredentials } from "@/utils/shuffle/shuffleConnectorCredentials"
29 +import { MuiProvider } from "@/utils/shuffle/shuffleMuiTheme"
30 +
31 +interface Props {
32 + appName: string
33 + /**
34 + * Per-customer Shuffle org auth token. Forwarded to TryMcpSection's
35 + * underlying chat so per-customer scoping holds even when the
36 + * deployment-wide connector API key is also set.
37 + */
38 + authToken: string
39 +}
40 +
41 +const props = defineProps<Props>()
42 +
43 +const container = ref<HTMLElement | null>(null)
44 +let root: Root | null = null
45 +
46 +const themeStore = useThemeStore()
47 +const { isThemeDark } = storeToRefs(themeStore)
48 +
49 +// Inline React component that resolves appName → algoliaId via the
50 +// package's hook, then mounts TryMcpSection. Lives inline (not a
51 +// separate .tsx file) because it's tightly coupled to this wrapper and
52 +// has no other consumers.
53 +const TryMcpInline: FC<{ appName: string }> = ({ appName }) => {
54 + const { displayName, image, categories, algoliaId, loading } = useAppLookup(appName)
55 + if (loading) {
56 + return createElement("div", { className: "text-tertiary text-center text-sm" }, "Resolving app…")
57 + }
58 + if (!algoliaId) {
59 + return createElement(
60 + "div",
61 + { className: "text-error p-4 text-sm" },
62 + `Could not resolve "${appName}" against Shuffle's catalog.`
63 + )
64 + }
65 + return createElement(TryMcpSection as never, {
66 + appName: displayName,
67 + appIcon: image,
68 + appId: algoliaId,
69 + categories
70 + })
71 +}
72 +
73 +function render() {
74 + if (!root) return
75 + root.render(
76 + createElement(
77 + MuiProvider as never,
78 + { isDark: isThemeDark.value },
79 + createElement(TryMcpInline, { appName: props.appName })
80 + )
81 + )
82 +}
83 +
84 +onMounted(async () => {
85 + if (!container.value) return
86 + root = createRoot(container.value)
87 + // Resolve creds before the first render — same reason as
88 + // ShuffleMCPEmbed. The package's hooks (useAppLookup, the chat fetch)
89 + // fire on mount; rendering them with the wrong API key burns
90 + // unauthenticated requests to shuffler.io.
91 + const creds = await fetchShuffleConnectorCredentials()
92 + API_CONFIG.setApiKey(creds?.api_key ?? props.authToken)
93 + render()
94 +})
95 +
96 +watch(
97 + () => [props.appName, props.authToken] as const,
98 + () => {
99 + // Don't clobber the connector key if it's already loaded —
100 + // fetchShuffleConnectorCredentials caches across the session.
101 + fetchShuffleConnectorCredentials().then(creds => {
102 + API_CONFIG.setApiKey(creds?.api_key ?? props.authToken)
103 + render()
104 + })
105 + }
106 +)
107 +
108 +// Re-render when the host theme toggles so the MUI provider swaps to
109 +// the matching light/dark palette.
110 +watch(isThemeDark, () => render())
111 +
112 +onBeforeUnmount(() => {
113 + if (root) {
114 + root.unmount()
115 + root = null
116 + }
117 +})
118 +</script>
frontend/src/composables/useShuffleToastBridge.ts new
+38
@@ -0,0 +1,38 @@
1 +import { setToastImpl } from "@shuffleio/shuffle-mcps"
2 +import { useMessage } from "naive-ui"
3 +import { onMounted } from "vue"
4 +
5 +/**
6 + * Bridges `@shuffleio/shuffle-mcps`'s internal toast facade onto Naive
7 + * UI's message API so toasts the package emits (auth saved, test
8 + * connection results, errors, etc.) surface in CoPilot's UI instead of
9 + * the package's silent console.warn fallback.
10 + *
11 + * Must run inside the `<n-message-provider>` tree, hence its home here
12 + * in `GlobalListener` rather than in `App.vue`.
13 + */
14 +
15 +const VARIANT_TO_METHOD = {
16 + destructive: "error",
17 + error: "error",
18 + success: "success",
19 + warning: "warning"
20 +} as const
21 +
22 +export function useShuffleToastBridge() {
23 + const message = useMessage()
24 +
25 + onMounted(() => {
26 + setToastImpl((arg, opts) => {
27 + const obj = typeof arg === "string" ? null : arg
28 + const title = obj ? obj.title : arg
29 + const description = obj?.description ?? opts?.description
30 + const text = [title, description].filter(Boolean).join(" — ")
31 + if (!text) return
32 +
33 + const variant = obj?.variant ?? opts?.variant
34 + const method = VARIANT_TO_METHOD[variant as keyof typeof VARIANT_TO_METHOD] ?? "info"
35 + message[method](text)
36 + })
37 + })
38 +}
frontend/src/theme/index.ts
+30 -2
@@ -2,7 +2,7 @@ import type { GlobalThemeOverrides, ThemeCommonVars } from "naive-ui"
2 import { useOsTheme } from "naive-ui"
3 import tokens from "@/design-tokens.json"
4 import { Layout, RouterTransition, ThemeNameEnum } from "@/types/theme.d"
5 -import { colorToArray, expandPattern, getThemeColors, getTypeValue } from "@/utils/theme"
5 +import { colorToArray, colorToHslValues, expandPattern, getThemeColors, getTypeValue } from "@/utils/theme"
6
7 type ThemeState = ReturnType<typeof getDefaultState>
8
@@ -203,7 +203,35 @@ export function getCssVars(state: ThemeState, getters: ThemeGetters): { [key: st
203 "font-family-display": `${fontFamilyDisplay}`,
204 "font-family-mono": `${fontFamilyMono}`,
205 "font-size": `${fontSize}`,
206 - "line-height": `${lineHeight}`
206 + "line-height": `${lineHeight}`,
207 +
208 + background: `${colorToHslValues(bgSecondaryColor)}`,
209 + "background-elevated": `${colorToHslValues(bgColor)}`,
210 + "background-surface": `${colorToHslValues(bgSecondaryColor)}`,
211 + foreground: `${colorToHslValues(fgColor)}`,
212 + card: `${colorToHslValues(bgColor)}`,
213 + "card-foreground": `${colorToHslValues(fgColor)}`,
214 + popover: `${colorToHslValues(bgColor)}`,
215 + "popover-foreground": `${colorToHslValues(fgColor)}`,
216 + primary: `${colorToHslValues(state.colors[state.themeName].primary)}`,
217 + "primary-foreground": `${colorToHslValues(bgBody)}`,
218 + secondary: `${colorToHslValues(state.colors[state.themeName].primary)}`,
219 + "secondary-foreground": `${colorToHslValues(fgSecondaryColor)}`,
220 + muted: `${colorToHslValues(bgSecondaryColor)}`,
221 + "muted-foreground": `${colorToHslValues(fgSecondaryColor)}`,
222 + accent: `${colorToHslValues(state.colors[state.themeName].primary)}`,
223 + "accent-foreground": `${colorToHslValues(bgBody)}`,
224 + destructive: `${colorToHslValues(state.colors[state.themeName].error)}`,
225 + "destructive-foreground": `${colorToHslValues(bgBody)}`,
226 + border: `${colorToHslValues(state.colors[state.themeName].border)}`,
227 + input: `${colorToHslValues(bgSecondaryColor)}`,
228 + ring: `${colorToHslValues(state.colors[state.themeName].border)}`,
229 + "severity-info": `${colorToHslValues(state.colors[state.themeName].info)}`,
230 + "severity-low": `${colorToHslValues(state.colors[state.themeName].success)}`,
231 + "severity-medium": `${colorToHslValues(state.colors[state.themeName].warning)}`,
232 + "severity-high": `${colorToHslValues(state.colors[state.themeName].error)}`,
233 + "severity-critical": `${colorToHslValues(state.colors[state.themeName].error)}`,
234 + "infra-email": `${colorToHslValues(state.colors[state.themeName].info)}`
235 }
236
237 // import colors by patterns
frontend/src/utils/index.ts
+3 -4
@@ -1,6 +1,5 @@
1 import type { Component } from "vue"
2 import type { ApiError, OsTypesFull, SafeAny } from "@/types/common.d"
3 -import process from "node:process"
3 import { isMobile as detectMobile } from "detect-touch-device"
4 import { md5 } from "js-md5"
5 import isDateObject from "lodash/isDate"
@@ -22,13 +21,13 @@ export function file2Base64(blob: Blob): Promise<string> {
21 }
22
23 export function isEnvDev() {
25 - return process.env.NODE_ENV === "development"
24 + return import.meta.env.DEV
25 }
26 export function isEnvTest() {
28 - return process.env.NODE_ENV === "test"
27 + return import.meta.env.MODE === "test"
28 }
29 export function isEnvProd() {
31 - return process.env.NODE_ENV === "production"
30 + return import.meta.env.PROD
31 }
32
33 export function isMobile() {
frontend/src/utils/secure-storage.ts
+8 -1
@@ -1,4 +1,11 @@
1 -import SecureLS from "secure-ls"
1 +import SecureLSModule from "secure-ls"
2 +
3 +type SecureLSConstructor = typeof SecureLSModule
4 +
5 +const SecureLS: SecureLSConstructor =
6 + typeof SecureLSModule === "function"
7 + ? SecureLSModule
8 + : (SecureLSModule as unknown as { default: SecureLSConstructor }).default
9
10 const secureLS = new SecureLS({
11 encodingType: "aes",
frontend/src/utils/shuffle/shuffleConnectorCredentials.ts new
+58
@@ -0,0 +1,58 @@
1 +// Single-fetch cache for the deployment-wide Shuffle connector creds
2 +// (URL + admin API key) used by the ShuffleMCP / TryMcp React embeds.
3 +//
4 +// The embed wrappers (`ShuffleMCPEmbed.vue`, `TryMcpEmbed.vue`,
5 +// `AppDetailDrawerEmbed.vue`) call
6 +// `fetchShuffleConnectorCredentials()` on mount. The first call hits the
7 +// backend; subsequent calls re-use the in-flight or resolved promise so
8 +// every embed in the session shares one round-trip. On error we cache
9 +// `null` and don't retry — callers stay on whatever explicit overrides
10 +// they were already passing.
11 +//
12 +// On first successful resolve, `setShuffleApiBaseUrl` patches the package
13 +// global `API_CONFIG.baseUrl` so embeds that ignore props see the real
14 +// connector URL from the DB.
15 +
16 +import type { ShuffleConnectorCredentials } from "@/api/endpoints/shuffle"
17 +import { API_CONFIG } from "@shuffleio/shuffle-mcps"
18 +import Api from "@/api"
19 +
20 +let currentBaseUrl: string | null = null
21 +let installed = false
22 +let cached: Promise<ShuffleConnectorCredentials | null> | null = null
23 +
24 +function setShuffleApiBaseUrl(url: string): void {
25 + currentBaseUrl = url
26 + if (installed) return
27 + installed = true
28 + try {
29 + Object.defineProperty(API_CONFIG, "baseUrl", {
30 + get: () => currentBaseUrl ?? "",
31 + configurable: true
32 + })
33 + } catch (err) {
34 + console.warn("[shuffle] could not override API_CONFIG.baseUrl:", err)
35 + }
36 +}
37 +
38 +export function fetchShuffleConnectorCredentials(): Promise<ShuffleConnectorCredentials | null> {
39 + if (cached) return cached
40 + cached = Api.shuffle
41 + .getConnectorCredentials()
42 + .then(res => {
43 + if (!res.data.success) return null
44 + const creds: ShuffleConnectorCredentials = {
45 + base_url: res.data.base_url,
46 + api_key: res.data.api_key
47 + }
48 + setShuffleApiBaseUrl(creds.base_url)
49 + return creds
50 + })
51 + .catch(() => null)
52 + return cached
53 +}
54 +
55 +/** Test-only — drops the cached result so the next call re-fetches. */
56 +export function resetShuffleConnectorCredentialsCache(): void {
57 + cached = null
58 +}
frontend/src/utils/shuffle/shuffleMuiTheme.ts new
+103
@@ -0,0 +1,103 @@
1 +// Shared Material UI theme bridge for the React-mounted Shuffle embeds.
2 +//
3 +// Background: `@shuffleio/shuffle-mcps` is built with `@mui/material`.
4 +// Without a `<ThemeProvider>` wrapping the React mount, MUI falls back
5 +// to its built-in light-mode palette — which, against CoPilot's dark
6 +// backdrop, looks washed-out and transparent (the AppDetailDrawer in
7 +// particular ended up unreadable for users on the default theme).
8 +//
9 +// We expose:
10 +// - `getMuiTheme(isDark)` — returns a memoised MUI Theme matching
11 +// CoPilot's light/dark mode. We don't pipe every Naive UI token in
12 +// (the surface area is huge and the MUI palette has its own
13 +// semantics) — just the mode plus a darkened paper background so
14 +// drawer/menu surfaces are opaque against the page underneath.
15 +// - `MuiProvider` — small React component that wraps children in
16 +// `<ThemeProvider value={mui-theme}>`. Each embed wrapper renders
17 +// this around the package's exported component.
18 +
19 +import type { Theme } from "@mui/material/styles"
20 +import type { ReactNode } from "react"
21 +import { createTheme, ThemeProvider } from "@mui/material/styles"
22 +import { createElement } from "react"
23 +import { useThemeStore } from "@/stores/theme"
24 +
25 +let lightTheme: Theme | null = null
26 +let darkTheme: Theme | null = null
27 +
28 +function buildTheme(isDark: boolean): Theme {
29 + const themeStore = useThemeStore()
30 +
31 + return createTheme({
32 + palette: {
33 + mode: isDark ? "dark" : "light",
34 + ...(isDark
35 + ? {
36 + background: {
37 + default: "var(--bg-body-color) !important",
38 + paper: "var(--bg-default-color) !important"
39 + },
40 + primary: {
41 + main: themeStore.style["primary-color"]
42 + }
43 + }
44 + : {})
45 + },
46 + components: {
47 + MuiPaper: {
48 + styleOverrides: {
49 + root: {
50 + backgroundImage: "none !important",
51 + boxShadow: "none !important"
52 + }
53 + }
54 + },
55 + MuiCard: {
56 + styleOverrides: {
57 + root: {
58 + border: "1px solid var(--border-color) !important",
59 + borderColor: "var(--border-color) !important",
60 + backgroundImage: "none !important",
61 + backgroundColor: "var(--bg-secondary-color) !important"
62 + }
63 + }
64 + },
65 + MuiDrawer: {
66 + styleOverrides: {
67 + root: {
68 + zIndex: "2104 !important"
69 + },
70 + paper: {
71 + borderLeft: "none !important",
72 + borderTopLeftRadius: "var(--border-radius) !important",
73 + borderBottomLeftRadius: "var(--border-radius) !important"
74 + }
75 + }
76 + },
77 + MuiButton: {
78 + styleOverrides: {
79 + root: {
80 + borderRadius: "var(--border-radius) !important",
81 + boxShadow: "none !important"
82 + }
83 + }
84 + }
85 + },
86 + typography: {
87 + fontFamily: "var(--font-family)"
88 + }
89 + })
90 +}
91 +
92 +export function getMuiTheme(isDark: boolean): Theme {
93 + if (isDark) {
94 + if (!darkTheme) darkTheme = buildTheme(true)
95 + return darkTheme
96 + }
97 + if (!lightTheme) lightTheme = buildTheme(false)
98 + return lightTheme
99 +}
100 +
101 +export function MuiProvider(props: { isDark: boolean; children: ReactNode }) {
102 + return createElement(ThemeProvider as never, { theme: getMuiTheme(props.isDark) }, props.children)
103 +}
frontend/src/utils/theme.ts
+9
@@ -36,6 +36,15 @@ export function colorToArray(color: string, output: "rgb" | "hsl"): number[] {
36 }
37 }
38
39 +export function colorToRgbValues(color: string): string {
40 + return colorToArray(color, "rgb").join(" ")
41 +}
42 +
43 +export function colorToHslValues(color: string): string {
44 + const values = colorToArray(color, "hsl")
45 + return `${values[0]} ${values[1]}% ${values[2]}%`
46 +}
47 +
48 export function exposure(color: string, amount: number): string {
49 return colord(color)
50 .lighten(amount) /* .desaturate(Math.abs(amount)) */
frontend/src/views/externalServices/ShuffleAppAuth.vue
+2 -1
@@ -19,6 +19,7 @@
19 :auth-token="organization.org_auth.token"
20 placeholder="Find an app..."
21 inline
22 + prevent-default
23 class="h-full"
24 />
25 </n-spin>
@@ -30,7 +31,7 @@ import type { Organization } from "@/types/shuffle.d"
31 import { NSelect, NSpin, useMessage } from "naive-ui"
32 import { computed, onBeforeMount, ref, watch } from "vue"
33 import Api from "@/api"
33 -import ShuffleMCPEmbed from "@/components/common/ShuffleMCPEmbed.vue"
34 +import ShuffleMCPEmbed from "@/components/shuffle/ShuffleMCPEmbed.vue"
35
36 const loadingList = ref(false)
37 const loadingToken = ref(false)
frontend/vite.config.ts
+26 -13
@@ -1,3 +1,4 @@
1 +import type { RollupLog, RollupLogWithString } from "rolldown"
2 import fs from "node:fs"
3 import process from "node:process"
4 import { fileURLToPath, URL } from "node:url"
@@ -9,8 +10,19 @@ import VueDevTools from "vite-plugin-vue-devtools"
10 import svgLoader from "vite-svg-loader"
11 // import { analyzer } from "vite-bundle-analyzer"
12
13 +function suppressRolldownIifeNameWarning(
14 + warning: RollupLog,
15 + defaultHandler: (warning: RollupLogWithString | (() => RollupLogWithString)) => void
16 +) {
17 + if (warning.code === "MISSING_NAME_OPTION_FOR_IIFE_EXPORT") {
18 + return
19 + }
20 +
21 + defaultHandler(warning)
22 +}
23 +
24 // https://vitejs.dev/config/
13 -export default defineConfig(({ mode }) => {
25 +export default defineConfig(({ mode, command }) => {
26 // Load env file based on `mode` in the current working directory.
27 // Set the third parameter to '' to load all env regardless of the `VITE_` prefix.
28 process.env = { ...process.env, ...loadEnv(mode, process.cwd(), "") }
@@ -29,9 +41,13 @@ export default defineConfig(({ mode }) => {
41 }
42 }),
43 vueJsx(),
32 - VueDevTools({
33 - launchEditor: "cursor"
34 - }),
44 + ...(command === "serve"
45 + ? [
46 + VueDevTools({
47 + launchEditor: "cursor"
48 + })
49 + ]
50 + : []),
51 svgLoader()
52 // uncomment to enable analyzer after build
53 // analyzer()
@@ -43,7 +59,10 @@ export default defineConfig(({ mode }) => {
59 },
60 optimizeDeps: {
61 exclude: ["xmllint-wasm"],
46 - include: ["fast-deep-equal"]
62 + include: ["fast-deep-equal"],
63 + rolldownOptions: {
64 + onwarn: suppressRolldownIifeNameWarning
65 + }
66 },
67 server: {
68 allowedHosts: true,
@@ -71,14 +90,8 @@ export default defineConfig(({ mode }) => {
90 }
91 },
92 build: {
74 - rollupOptions: {
75 - onwarn(warning, warn) {
76 - if (warning.code === "PLUGIN_WARNING" && warning.message.includes('Module "node:process"')) {
77 - return
78 - }
79 -
80 - warn(warning)
81 - }
93 + rolldownOptions: {
94 + onwarn: suppressRolldownIifeNameWarning
95 }
96 }
97 }