From ecb16c759dc08deb20546ab79c6832f659e9b01c Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:14:44 +0700 Subject: [PATCH 1/7] refactor: migrate docs-dev from storybook to vitepress config and update devcontainer configuration --- .devcontainer/devcontainer.json | 13 +- .gitignore | 6 +- README.md | 317 +-- Untitled.java | 29 - apps/docs-dev/.storybook/main.js | 38 - apps/docs-dev/package.json | 25 +- apps/docs-dev/src/.vitepress/config.mts | 84 + .../src/apps/desktop}/AUTO_UPDATER.md | 12 +- .../src/apps/desktop}/CONFIGURATION.md | 1 - .../src/apps/desktop}/IPC_ARCHITECTURE.md | 20 +- .../src/apps/desktop/index.md} | 14 +- apps/docs-dev/src/index.md | 21 + apps/docs-dev/src/overview.md | 95 + .../docs-dev/src/packages/core-api/index.md | 1 - .../src/packages/core-events/index.md | 1 - .../docs-dev/src/packages/core-i18n/index.md | 1 - .../src/packages/core-storage/index.md | 1 - .../src/packages/ui}/CORE-APP-SHELL.md | 8 +- .../src/packages/ui}/FORM-COMPONENTS.md | 8 +- .../docs-dev/src/packages/ui/index.md | 2 +- apps/docs-dev/src/setup.md | 75 + apps/docs-dev/stories/button.stories.tsx | 46 - apps/docs-dev/test-vite-config.js | 7 + apps/docs-dev/test.js | 14 + apps/docs-dev/vite.config.js | 4 - pnpm-lock.yaml | 2463 ++++++++++------- 26 files changed, 1892 insertions(+), 1414 deletions(-) delete mode 100644 Untitled.java delete mode 100644 apps/docs-dev/.storybook/main.js create mode 100644 apps/docs-dev/src/.vitepress/config.mts rename apps/{desktop/docs => docs-dev/src/apps/desktop}/AUTO_UPDATER.md (95%) rename apps/{desktop/docs => docs-dev/src/apps/desktop}/CONFIGURATION.md (99%) rename apps/{desktop/docs => docs-dev/src/apps/desktop}/IPC_ARCHITECTURE.md (92%) rename apps/{desktop/README.md => docs-dev/src/apps/desktop/index.md} (90%) create mode 100644 apps/docs-dev/src/index.md create mode 100644 apps/docs-dev/src/overview.md rename packages/core-api/README.md => apps/docs-dev/src/packages/core-api/index.md (99%) rename packages/core-events/README.md => apps/docs-dev/src/packages/core-events/index.md (99%) rename packages/core-i18n/README.md => apps/docs-dev/src/packages/core-i18n/index.md (99%) rename packages/core-storage/README.md => apps/docs-dev/src/packages/core-storage/index.md (99%) rename {packages/ui/docs => apps/docs-dev/src/packages/ui}/CORE-APP-SHELL.md (99%) rename {packages/ui/docs => apps/docs-dev/src/packages/ui}/FORM-COMPONENTS.md (99%) rename packages/ui/README.md => apps/docs-dev/src/packages/ui/index.md (97%) create mode 100644 apps/docs-dev/src/setup.md delete mode 100644 apps/docs-dev/stories/button.stories.tsx create mode 100644 apps/docs-dev/test-vite-config.js create mode 100644 apps/docs-dev/test.js delete mode 100644 apps/docs-dev/vite.config.js diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1ab2509..f759ae2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,14 +14,19 @@ }, // ─── Port Topology ────────────────────────────────────────────────────────── - // 6006: Storybook (Docs) + // 6060: VitePress Docs (Development) + // 4173: VitePress Docs (Preview) // 5173: Web App (Must be strictly 5173 for Electron IPC compatibility) // 3000: Landing App (Isolated from Vite's default 517x blast radius) - "forwardPorts": [6006, 5173, 3000], + "forwardPorts": [6060, 4173, 5173, 3000], "portsAttributes": { - "6006": { - "label": "Storybook", + "6060": { + "label": "VitePress Docs", + "onAutoForward": "notify" + }, + "4173": { + "label": "VitePress Preview", "onAutoForward": "notify" }, "5173": { diff --git a/.gitignore b/.gitignore index 5698ad8..e4ba428 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,8 @@ release/ web-dist/ # Legacy Code (if applicable) -legacy/ \ No newline at end of file +legacy/ + +# VitePress +**/.vitepress/cache/ +**/.vitepress/dist/ \ No newline at end of file diff --git a/README.md b/README.md index a0596c0..4c77929 100644 --- a/README.md +++ b/README.md @@ -10,324 +10,31 @@ ![Vitest](https://img.shields.io/badge/Vitest-Testing-green?style=flat\&logo=vitest) A **scalable, enterprise-ready Web & Desktop monorepo** built with **Turborepo**, **pnpm**, **Vite**, and **Electron**. -This repository is designed for long-term maintainability, featuring: - -* Shared logic and UI libraries -* Centralized tooling configuration -* Turbo-powered task orchestration and caching -* Native desktop distribution with auto-updates -* Dedicated documentation & component playground using Storybook +This repository is designed for long-term maintainability, featuring shared logic and UI libraries, centralized tooling configuration, turbo-powered task orchestration, and native desktop distribution with auto-updates. --- -## 📂 Repository Structure +## 🌍 Global Context -The monorepo is organized into **Apps** (deployable applications) and **Packages** (shared libraries). +This repository utilizes a monorepo architecture to seamlessly share core systems, business logic, and UI components across multiple distribution targets (Web, Desktop, and Landing Page). -```text -. -├── apps/ -│ ├── web/ # Main React Application (Vite + TypeScript) -│ ├── landing/ # Public Promotional SPA (Vite + TypeScript) -│ ├── desktop/ # Electron Desktop Wrapper (electron-vite) -│ └── docs-dev/ # Component Documentation & Playground (Storybook) -│ -├── packages/ -│ ├── core-api/ # Shared HTTP Client, Observability & Data Services Engine -│ ├── core-storage/ # Enterprise Storage Engine (IndexedDB/localStorage + Encryption) -│ ├── core-i18n/ # Enterprise Internationalization Architecture -│ ├── ui/ # Shared UI Component Library -│ ├── utils/ # Shared Utilities (Date, Encryption, Core Logic, etc) -│ └── configs/ # Shared Tooling Configurations -│ ├── eslint/ # Shared ESLint rules -│ └── typescript/ # Shared TypeScript (tsconfig) bases -│ -├── package.json # Root scripts and dependencies -├── pnpm-workspace.yaml # pnpm workspace definition -└── turbo.json # Turborepo pipeline configuration -``` +### Topology Overview + +* **`apps/`**: Deployable applications (`web`, `desktop`, `landing`, `docs-dev`). +* **`packages/`**: Shared libraries and core engines (`core-api`, `core-storage`, `ui`, `utils`, `configs`, etc.). --- -## 🚀 Getting Started - -### Prerequisites - -Ensure your local environment matches the following versions to avoid compatibility issues: - -* **Node.js**: `v20+` (tested with `v24.11.1`) — required for the `--import tsx` flag used by the desktop prebuild script -* **pnpm**: `v8.15.6` - (Enforced via the `packageManager` field in `package.json`) - -### Installation - -Install all dependencies from the **root directory**: - -```bash -pnpm install -``` - ---- - -## 🛠 Usage & Scripts - -This repository uses **Turborepo** to orchestrate tasks efficiently. All commands are executed from the root. - -### Development - -| Command | Description | -| -------------------- | ---------------------------------------------------------------------------------- | -| `pnpm dev` | Start **all applications** (`web` and `docs-dev`) in parallel | -| `pnpm dev:web` | Start only the **Main Web App** (strictly at `http://localhost:5173`) | -| `pnpm dev:landing` | Start the **Public Landing App** (strictly at `http://localhost:3000`) | -| `pnpm dev:docs-dev` | Start **Storybook** for UI development (strictly at `http://localhost:6006`) | -| `pnpm dev:desktop` | Start the **Web App + Electron** in parallel for desktop development | - -> [!NOTE] -> **Port Topology**: `electron-vite` dynamically allocates a background port (usually `5174`) for its internal renderer shell during `pnpm dev:desktop`. We strictly isolate `web` (`5173`) and `landing` (`3000`) onto separate port ranges to prevent race conditions during parallel execution. - -### Building & Quality - -| Command | Description | -| --------------------- | ------------------------------------------------------- | -| `pnpm build` | Build all apps and packages using Turbo cache | -| `pnpm build:web` | Build only the web application | -| `pnpm build:landing` | Build only the landing page | -| `pnpm build:docs-dev` | Build only the docs-dev application | -| `pnpm build:desktop` | Build the web app, then compile the Electron app | -| `pnpm test` | Run unit tests (Vitest) across all packages | -| `pnpm lint` | Run ESLint across the workspace | -| `pnpm format` | Format code using Prettier | - -### 🚀 Desktop Packaging & Distribution - -To package the application into a production-ready installer, use the following commands from the **root directory**: - -| Command | Platform | Output Artifact | -| ---------------------- | ----------- | ------------------------------------------ | -| `pnpm package:desktop` | Current OS | Detects host OS and builds accordingly | -| `pnpm package:mac` | macOS | `.dmg` and `.zip` (supports x64 & arm64) | -| `pnpm package:win` | Windows | `.exe` (NSIS Installer) | -| `pnpm package:linux` | Linux | `.AppImage` | +## 📚 Single Source of Truth > [!IMPORTANT] -> **Build Sequence**: All `package:*` commands execute the following pipeline automatically: -> -> 1. **`turbo run build --filter=web`** — Compiles the React SPA into `apps/web/dist/`. -> 2. **`prebuild` hook** — Runs `node --import tsx scripts/copy-web-dist.ts`, which copies `apps/web/dist/` → `apps/desktop/web-dist/`. -> 3. **`electron-builder`** — Bundles `web-dist/` into the packaged app via the `files` and `extraResources` blocks in `electron-builder.yml`. -> -> You do not need to run these steps manually — they are chained via npm scripts. +> **Internal Documentation Hub** +> All documentation, installation guides, architectural deep-dives, and API references are hosted internally via our VitePress application. -> [!WARNING] -> **macOS Code Signing**: To build a distributable macOS app with Auto-Update support, you **must** have an Apple Developer Certificate and provide `CSC_LINK` and `CSC_KEY_PASSWORD` in your environment. Without code signing, macOS Gatekeeper will block the app and auto-updates will fail. See [AUTO_UPDATER.md](apps/desktop/docs/AUTO_UPDATER.md) for details. - -> [!NOTE] -> **Cross-Compilation**: It is highly recommended to build for Windows on a Windows machine and for macOS on a Mac. Cross-compilation (e.g., building `.dmg` on Linux) may fail due to platform-specific toolchain dependencies. Use a CI matrix strategy (e.g., GitHub Actions with `runs-on: [macos-latest, windows-latest, ubuntu-latest]`) for multi-platform releases. - - ---- - -## 📦 Packages Overview - -### 1. `apps/web` - -The main consumer-facing application. - -* Imports business logic from `@repo/utils` -* Uses shared UI components from `@repo/ui` - -**Tech Stack**: - -* React -* Vite -* TypeScript -* Tailwind CSS - ---- - -### 2. `apps/desktop` - -The **Electron desktop wrapper** that embeds `apps/web` for native desktop experiences. - -* In **development**: loads the Vite dev server with full hot reload -* In **production**: serves the static web build via a secure custom `app://` protocol -* Configurable target app via `.env` (can wrap `apps/web`, `apps/docs-dev`, or any future app) - -**Tech Stack**: - -* Electron 33.x -* electron-vite -* electron-builder -* electron-updater - -**Key Capabilities**: - -| Feature | Description | -|---|---| -| 🖨️ Native Printing | Silent and direct printing via secure IPC bridge | -| 🔄 Auto-Updates | Background downloads via GitHub Releases (switchable to S3) | -| 🔒 Secure IPC Bridge | `contextIsolation: true`, `nodeIntegration: false`, `sandbox: true` | -| 🌐 Custom Protocol | `app://` serves static files with SPA routing fallback to `index.html` | -| 🛡️ CORS Bypass | Transparent Origin header rewriting for cloud API calls | - -**Desktop Documentation**: - -| Document | Contents | -|---|---| -| [CONFIGURATION.md](apps/desktop/docs/CONFIGURATION.md) | Target app switching, `app://` protocol internals, HashRouter fallback | -| [AUTO_UPDATER.md](apps/desktop/docs/AUTO_UPDATER.md) | Release workflow, CI/CD variables, provider switching, code signing | -| [IPC_ARCHITECTURE.md](apps/desktop/docs/IPC_ARCHITECTURE.md) | Security model, Three-Step Bridge pattern, extending native features | - ---- - -### 3. `apps/landing` - -The **public promotional website** — a standalone SPA for the company profile and marketing pages. - -* Deployed independently to the web (e.g., Vercel) — no interaction with Electron -* Consumes shared UI components from `@repo/ui` and utilities from `@repo/utils` -* Locked to port **3000** (`strictPort: true`) — evacuated from the `517x` range to avoid `electron-vite` port collisions - -**Tech Stack**: - -* React -* Vite -* TypeScript -* Tailwind CSS v4 - ---- - -### 4. `apps/docs-dev` (Storybook) - -An isolated environment for developing and documenting UI components. - -* Ensures components in `@repo/ui` are built and tested independently -* Acts as a living design system and playground - ---- - -### 5. `packages/core-api` - -The **platform-agnostic API engine** for the monorepo. Provides an isolated HTTP client factory, a unified observability pipeline (Grafana Faro + OpenTelemetry), and a generic data services engine. - -* Consumed by `apps/web`, `apps/landing`, and any future workspace -* Centralizes all `@grafana/faro-*` and `@opentelemetry/*` dependencies -* Provides plug-and-play telemetry via `initTelemetry()` + `faroAdapter` - -**Tech Stack**: - -* Axios (isolated instances, zero singleton pollution) -* Grafana Faro (RUM, Logs, Error tracking) -* OpenTelemetry (custom spans, distributed tracing) -* TypeScript (strict types, module augmentation) - -**Key Capabilities**: - -| Feature | Description | -|---|---| -| 🏭 HTTP Client Factory | `createHttpClient()` — per-app isolated Axios instances with interceptor hooks | -| 📡 Faro/Loki Baseline | Every request automatically pushes structured logs with `module.key` and `module.action` | -| 🎯 Custom Spans (Opt-In) | `telemetryContext.customSpanName` creates explicit OTel spans visible in Grafana Tempo | -| 🛡️ Error Normalization | `ApiError.fromAxiosError()` — structured, serializable error codes for all failure modes | -| 📦 Data Services Engine | `CommonRemoteDataServices` — full CRUD + lifecycle operations with zero boilerplate | - -**Documentation**: - -| Document | Contents | -|---|---| -| [README.md](packages/core-api/README.md) | Architecture, HTTP client setup, observability strategy, data services, app integration guide | - ---- - -### 6. `packages/core-storage` - -The **Enterprise-grade storage engine** for the monorepo. - -Provides a unified, Promise-based interface for interacting with browser storage (`localStorage` and `IndexedDB`). Enforces strict type safety, prevents key collisions via a centralized registry, and automatically provides **AES encryption at rest** for sensitive payloads using `@repo/utils`. - -**Documentation**: [README.md](packages/core-storage/README.md) - ---- - -### 7. `packages/core-i18n` - -The **Enterprise Internationalization Architecture** for the monorepo. - -Provides a Hybrid Namespace Architecture combining a centralized i18n engine with decentralized, lazy-loaded feature dictionaries. Features strict TypeScript typings (including nested keys), optional backend synchronization with automatic error rollbacks, and a deep-merge mechanism for dynamic tenant-specific vocabulary overrides. - -**Key Capabilities**: - -| Feature | Description | -|---|---| -| 🌐 Hybrid Namespaces | Centralized `common` corpus + lazy-loaded feature dictionaries. | -| 🛡️ Strict Typings | Native TS autocomplete for nested paths (e.g., `header.title`) via module augmentation. | -| 🔄 Safe Backend Sync | `changeLanguage` accepts a `syncCallback` with built-in rollback if the API fails. | -| 🏢 Tenant Overrides | `applyTenantOverrides` performs a partial deep-merge to selectively override terminology. | - -**Documentation**: [README.md](packages/core-i18n/README.md) - ---- - -### 8. `packages/core-events` - -The **decoupled Nervous System** for the monorepo. - -Provides a highly performant, strictly typed Event Bus (Pub/Sub) powered by `mitt`. It allows independent modules to communicate seamlessly without tightly coupling their codebases or triggering expensive global React tree re-renders. - -**Key Capabilities**: - -| Feature | Description | -|---|---| -| 🧩 Zero Coupling | Publishers and subscribers interact via blind events, eliminating direct module imports and circular dependencies. | -| ⚡ Extreme Performance | Enables targeted DOM updates for high-frequency data streams (e.g., WebSockets) without re-rendering parent components. | -| 🧹 Memory Safety | Native `useAppEvent` hook automatically unsubscribes on component unmount, preventing SPA memory leaks. | -| 🛡️ Strict Contracts | Centralized `events.registry.ts` enforces payload shapes via TypeScript, ensuring cross-module data safety. | - -**Documentation**: [README.md](packages/core-events/README.md) - ---- - -### 9. `packages/utils` - -Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest. - -This package is intended to hold non-UI, cross-cutting logic such as date/time handling, security helpers, and other common utilities. It is designed to be framework-agnostic, predictable, and easy to extend as the system evolves. - ---- - -### 10. `packages/ui` - -Shared UI component library (Buttons, Inputs, Cards, Layouts) with a comprehensive **Form UI Library**. - -* Ensures consistent design across all applications -* Designed to be consumed by both web apps and Storybook -* **Form UI Library**: 22 RHF-connected Mantine form components with Zod validation and i18n error translation, built via a `withRHF()` HOC factory with `useController` micro-subscriptions and `React.memo` optimization for ERP-scale forms - -**Documentation**: [README.md](packages/ui/README.md) · [Form Components Guide](packages/ui/docs/FORM-COMPONENTS.md) - ---- - -### 11. `packages/configs` - -Single source of truth for tooling configuration. - -* **eslint-config**: Shared ESLint rules (React, libraries, Storybook) -* **typescript-config**: Shared `tsconfig.json` base configurations - ---- - -## ⚙️ Configuration & Environment - - -### Turborepo Caching - -This repository uses **Turborepo caching** for builds, tests, and other artifacts. - -To fully clean the workspace (dependencies, build outputs, and Turbo cache): +**To access the documentation and get started, run:** ```bash -rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release +pnpm --filter docs-dev dev ``` --- diff --git a/Untitled.java b/Untitled.java deleted file mode 100644 index 7751d7c..0000000 --- a/Untitled.java +++ /dev/null @@ -1,29 +0,0 @@ -**Role:** You are a Staff Level React Engineer and Architect managing a highly scalable Enterprise ERP monorepo. - -**Context:** -We have successfully established our Form UI library in `packages/ui/src/components/Form/fields` featuring 22 Mantine form components wrapped with React Hook Form (e.g., `FieldTextInput`, `FieldSelect`, `FieldColorPicker`, etc.). We also have a Zod validation layer at `packages/ui/src/validators` that uses JSON-stringified payloads for i18n translation. -We now need to build a showcase/demo page in the main web application to test and demonstrate these components in a real-world ERP form scenario. - -**Pre-Execution Analysis (READ THESE FIRST):** -Before writing any code, you MUST read and analyze: -1. The component signatures and exports in `packages/ui/src/components/Form/index.ts`. -2. The Zod validator pattern in `packages/ui/src/validators` (specifically how the JSON i18n payloads are structured). -3. The existing layout and routing patterns in `apps/web/src/apps/showcase/showcase-view.tsx` to understand how to correctly inject and mount new showcase features. - -**Task Requirements:** - -**Phase 1: Create the Form Showcase Component** -1. Create a new comprehensive demo component inside `apps/web/src/apps/showcase/example/features/`. Follow the existing file naming convention found in that directory. -2. The component should implement a realistic ERP form (e.g., Textile Production Order, Inventory Bulk Update, or User Registration) using `useForm`, `zodResolver`, and a custom Zod schema. -3. The Zod schema MUST utilize the JSON-stringified i18n message pattern for validation errors. -4. Utilize a diverse set of our generated UI components (text input, select, number input, color input/picker, etc.) to prove they function correctly in a unified form. -5. Include a visual output panel (e.g., using Mantine's `Code` or `Pre` component) that displays the validated JSON payload upon successful submission. - -**Phase 2: Connect to Showcase View** -1. Update `apps/web/src/apps/showcase/showcase-view.tsx` to import and render the newly created Form Showcase component. -2. Integrate it seamlessly into the existing UI layout of the showcase view (e.g., adding a new Tab, Accordion, or Section dedicated to the Form UI & Validation Layer). - -**Execution Rules:** -- Do not rely on hardcoded assumptions. Let your code be guided completely by the patterns, styles, and typings you discover during the Pre-Execution Analysis. -- Ensure all TypeScript typings are strict. -- Output the newly created files and the modified files cleanly. \ No newline at end of file diff --git a/apps/docs-dev/.storybook/main.js b/apps/docs-dev/.storybook/main.js deleted file mode 100644 index 8b3e80e..0000000 --- a/apps/docs-dev/.storybook/main.js +++ /dev/null @@ -1,38 +0,0 @@ -import { dirname, join, resolve } from 'path'; - -function getAbsolutePath(value) { - return dirname(require.resolve(join(value, 'package.json'))); -} - -const config = { - stories: ['../stories/*.stories.tsx', '../stories/**/*.stories.tsx'], - addons: [getAbsolutePath('@storybook/addon-links'), getAbsolutePath('@storybook/addon-essentials')], - framework: { - name: getAbsolutePath('@storybook/react-vite'), - options: {}, - }, - - core: {}, - - async viteFinal(config, { configType }) { - // customize the Vite config here - return { - ...config, - define: { 'process.env': {} }, - resolve: { - alias: [ - { - find: 'ui', - replacement: resolve(__dirname, '../../../packages/ui/'), - }, - ], - }, - }; - }, - - docs: { - autodocs: true, - }, -}; - -export default config; diff --git a/apps/docs-dev/package.json b/apps/docs-dev/package.json index febf57b..c9f71eb 100644 --- a/apps/docs-dev/package.json +++ b/apps/docs-dev/package.json @@ -1,33 +1,28 @@ { - "name": "docs-dev", + "name": "@repo/docs-dev", "version": "0.0.0", "type": "module", "private": true, "scripts": { - "dev": "storybook dev -p 6006", - "build": "storybook build --docs", - "preview-storybook": "serve storybook-static", - "clean": "rm -rf .turbo node_modules", - "lint": "eslint ./stories/*.stories.tsx --max-warnings 0" + "dev": "vitepress dev src --port 6060", + "build": "vitepress build src", + "serve": "vitepress serve src --port 6060", + "clean": "rm -rf .turbo node_modules src/.vitepress/dist src/.vitepress/cache" }, "dependencies": { "@repo/ui": "workspace:*", + "dayjs": "^1.11.19", "react": "^19.2.3", "react-dom": "^19.2.3" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@storybook/addon-actions": "^8.2.6", - "@storybook/addon-essentials": "^8.2.6", - "@storybook/addon-links": "^8.2.6", - "@storybook/react": "^8.2.6", - "@storybook/react-vite": "^8.2.6", - "@vitejs/plugin-react": "^5.1.2", "eslint": "^8.57.0", - "serve": "^14.2.1", - "storybook": "^8.2.6", + "mermaid": "^11.15.0", "typescript": "5.5.4", - "vite": "^5.1.4" + "vitepress": "^1.6.4", + "vitepress-plugin-mermaid": "^2.0.17", + "vue": "^3.5.38" } } \ No newline at end of file diff --git a/apps/docs-dev/src/.vitepress/config.mts b/apps/docs-dev/src/.vitepress/config.mts new file mode 100644 index 0000000..5ed0a57 --- /dev/null +++ b/apps/docs-dev/src/.vitepress/config.mts @@ -0,0 +1,84 @@ +import { defineConfig } from 'vitepress' +import { withMermaid } from 'vitepress-plugin-mermaid' + +const config = withMermaid( + defineConfig({ + title: "Frontend Monorepo Docs", + description: "Centralized documentation for the Enterprise Frontend Monorepo", + + themeConfig: { + nav: [ + { text: 'Docs', link: '/overview' }, + ], + + sidebar: [ + { + text: 'Introduction', + items: [ + { text: 'Overview', link: '/overview' }, + { text: 'Local Setup', link: '/setup' }, + ], + }, + { + text: 'Core Architecture & State', + collapsed: false, + items: [ + { text: 'Core API Engine', link: '/packages/core-api/' }, + { text: 'Core Events', link: '/packages/core-events/' }, + { text: 'Core Storage', link: '/packages/core-storage/' }, + { text: 'Core Internationalization', link: '/packages/core-i18n/' }, + { text: 'IPC Architecture', link: '/apps/desktop/IPC_ARCHITECTURE' }, + ], + }, + { + text: 'UI System & Layouts', + collapsed: false, + items: [ + { text: 'UI Components Overview', link: '/packages/ui/' }, + { text: 'Core App Shell', link: '/packages/ui/CORE-APP-SHELL' }, + { text: 'Form Components', link: '/packages/ui/FORM-COMPONENTS' }, + ], + }, + { + text: 'Applications & Configuration', + collapsed: false, + items: [ + { text: 'Desktop Application', link: '/apps/desktop/' }, + { text: 'Desktop Configuration', link: '/apps/desktop/CONFIGURATION' }, + { text: 'Desktop Auto Updater', link: '/apps/desktop/AUTO_UPDATER' }, + ], + }, + ], + + outline: { level: [2, 3] }, + socialLinks: [], + }, + + // Mermaid configuration + mermaid: { + theme: 'default', + }, + + // Fix cascading CJS/ESM SyntaxErrors caused by Vite dynamically discovering mermaid + vite: { + optimizeDeps: { + include: [ + 'mermaid' + ] + } + } + }) +); + +// Pnpm strict workspace workaround: +// vitepress-plugin-mermaid aggressively injects sub-dependencies into optimizeDeps.include. +// Because pnpm uses strict symlinks, Vite fails to resolve these sub-dependencies from the project root, +// causing pre-bundling to fail and cascading CJS/ESM SyntaxErrors in the browser. +// We strip them out so esbuild can naturally inline them into the 'mermaid' chunk instead. +if (config.vite?.optimizeDeps?.include) { + config.vite.optimizeDeps.include = config.vite.optimizeDeps.include.filter( + (dep) => !['@braintree/sanitize-url', 'debug', 'cytoscape-cose-bilkent', 'cytoscape'].includes(dep) + ); +} + +export default config; diff --git a/apps/desktop/docs/AUTO_UPDATER.md b/apps/docs-dev/src/apps/desktop/AUTO_UPDATER.md similarity index 95% rename from apps/desktop/docs/AUTO_UPDATER.md rename to apps/docs-dev/src/apps/desktop/AUTO_UPDATER.md index 686a629..1b43bfb 100644 --- a/apps/desktop/docs/AUTO_UPDATER.md +++ b/apps/docs-dev/src/apps/desktop/AUTO_UPDATER.md @@ -1,4 +1,3 @@ -[← Back to Root](../../../README.md) # Desktop Auto-Update System @@ -110,7 +109,8 @@ pnpm run prebuild GH_TOKEN=your_token electron-builder --publish always --config electron-builder.yml ``` -> [!CAUTION] > **Treat `GH_TOKEN` as a critical secret.** It grants write access to your repository's release assets. Never commit it to version control, never log it in CI output, and always inject it via encrypted secrets or a vault. +> [!CAUTION] +> **Treat `GH_TOKEN` as a critical secret.** It grants write access to your repository's release assets. Never commit it to version control, never log it in CI output, and always inject it via encrypted secrets or a vault. ### Automated Release (GitHub Actions) @@ -172,7 +172,7 @@ jobs: 1. Navigate to **Settings → Secrets and variables → Actions** in your GitHub repository. 2. Add each variable as a **Repository secret**. -3. Reference them in workflow files as `${{ secrets.VARIABLE_NAME }}`. +3. Reference them in workflow files as ${{ secrets.VARIABLE_NAME }}. --- @@ -228,7 +228,8 @@ publish: Your server must host the same directory structure as the S3 layout above. -> [!IMPORTANT] > **MIME Type Configuration**: Ensure your file server correctly serves `.yml` files with `text/yaml` and installer binaries with `application/octet-stream`. Incorrect MIME types will cause download corruption or silent update failures. +> [!IMPORTANT] +> **MIME Type Configuration**: Ensure your file server correctly serves `.yml` files with `text/yaml` and installer binaries with `application/octet-stream`. Incorrect MIME types will cause download corruption or silent update failures. **Nginx reference:** @@ -255,7 +256,8 @@ server { ## 🛡️ Code Signing: The Trust Boundary -> [!WARNING] > **Code signing is not merely a requirement — it is the Trust Boundary established by the operating system.** macOS Gatekeeper will explicitly terminate unsigned applications or refuse background updates to maintain system integrity. Windows SmartScreen will display alarming warnings to users. Without valid signatures, `electron-updater` will **reject update payloads entirely**. +> [!WARNING] +> **Code signing is not merely a requirement — it is the Trust Boundary established by the operating system.** macOS Gatekeeper will explicitly terminate unsigned applications or refuse background updates to maintain system integrity. Windows SmartScreen will display alarming warnings to users. Without valid signatures, `electron-updater` will **reject update payloads entirely**. ### macOS diff --git a/apps/desktop/docs/CONFIGURATION.md b/apps/docs-dev/src/apps/desktop/CONFIGURATION.md similarity index 99% rename from apps/desktop/docs/CONFIGURATION.md rename to apps/docs-dev/src/apps/desktop/CONFIGURATION.md index 208eb23..c0ec7f8 100644 --- a/apps/desktop/docs/CONFIGURATION.md +++ b/apps/docs-dev/src/apps/desktop/CONFIGURATION.md @@ -1,4 +1,3 @@ -[← Back to Root](../../../README.md) # Desktop Configuration Guide diff --git a/apps/desktop/docs/IPC_ARCHITECTURE.md b/apps/docs-dev/src/apps/desktop/IPC_ARCHITECTURE.md similarity index 92% rename from apps/desktop/docs/IPC_ARCHITECTURE.md rename to apps/docs-dev/src/apps/desktop/IPC_ARCHITECTURE.md index b36d79f..26a50e3 100644 --- a/apps/desktop/docs/IPC_ARCHITECTURE.md +++ b/apps/docs-dev/src/apps/desktop/IPC_ARCHITECTURE.md @@ -1,10 +1,21 @@ -[← Back to Root](../../../README.md) +--- +outline: [2, 3] +--- # IPC Architecture & Security Model -The Secure Communication Blueprint. +> **Scope**: Electron Main ↔ Renderer process communication +> **Enforcement Level**: Mandatory — deviations constitute security violations -> This document defines the **Hardened Security Perimeter** and communication topology governing the Desktop Wrapper. Every native capability exposed to the renderer is mediated through a **Non-Bypassable IPC Bridge**, ensuring that the Node.js Main Process remains cryptographically and logically isolated from untrusted web content. Adherence to this document is **mandatory** — deviations constitute security violations subject to immediate remediation. +This document defines the **hardened security perimeter** and communication topology governing the Desktop Wrapper. Every native capability exposed to the Renderer is mediated through a **non-bypassable IPC bridge**, enforcing strict privilege separation between the Node.js Main Process and untrusted web content. + +The architecture operates on three invariants: + +| Invariant | Guarantee | +|---|---| +| **Context Encapsulation** | The Preload Script executes in a hermetically sealed V8 context, isolated from both Main Process globals and the Renderer DOM. | +| **Interface Narrowing** | Only explicitly declared, type-safe API surfaces are exposed via `contextBridge`. No wildcard access patterns exist. | +| **Deterministic Lifecycle** | All IPC subscriptions are paired with unsubscribe functions, tying native event listeners to React's component lifecycle to prevent memory leaks. | --- @@ -96,7 +107,8 @@ These settings are declared in `BrowserWindow.webPreferences` and are **non-nego Every native feature in this architecture **must** follow the Three-Step Bridge — a Standard Operating Procedure (SOP) that ensures traceability, type-safety, and auditability across the entire IPC surface. -> [!IMPORTANT] > **Deterministic Synchronization**: Maintaining parity between the Main Process handler, the Preload Gateway exposure, and the TypeScript interface declaration is **mandatory**. A mismatch between any two of the three layers will result in either a **Type-Safety Gap** (silent failures in development) or a **Runtime Regression** (crashes in production). +> [!IMPORTANT] +> **Deterministic Synchronization**: Maintaining parity between the Main Process handler, the Preload Gateway exposure, and the TypeScript interface declaration is **mandatory**. A mismatch between any two of the three layers will result in either a **Type-Safety Gap** (silent failures in development) or a **Runtime Regression** (crashes in production). ### Step 1: Register the Handler — Main Process diff --git a/apps/desktop/README.md b/apps/docs-dev/src/apps/desktop/index.md similarity index 90% rename from apps/desktop/README.md rename to apps/docs-dev/src/apps/desktop/index.md index 220e0ee..68e245e 100644 --- a/apps/desktop/README.md +++ b/apps/docs-dev/src/apps/desktop/index.md @@ -102,7 +102,7 @@ All artifacts are emitted to the `release/` directory. > APPLE_APP_SPECIFIC_PASSWORD= > APPLE_TEAM_ID= > ``` -> Without valid code signing, macOS Gatekeeper will quarantine the application and `electron-updater` will reject update payloads. See [docs/AUTO_UPDATER.md](docs/AUTO_UPDATER.md) for the complete requirements. +> Without valid code signing, macOS Gatekeeper will quarantine the application and `electron-updater` will reject update payloads. See [AUTO_UPDATER.md](./AUTO_UPDATER.md) for the complete requirements. > [!NOTE] > **Cross-Compilation Advisory**: It is strongly recommended to build for each platform on its native OS. Cross-compilation (e.g., producing `.dmg` on Linux) may fail due to platform-specific toolchain dependencies. For CI, leverage a matrix strategy: @@ -124,7 +124,7 @@ DESKTOP_TARGET_APP=web DESKTOP_DEV_SERVER_URL=http://localhost:5173 ``` -See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for comprehensive guidance on target app switching, protocol internals, and the HashRouter fallback procedure. +See [CONFIGURATION.md](./CONFIGURATION.md) for comprehensive guidance on target app switching, protocol internals, and the HashRouter fallback procedure. --- @@ -140,7 +140,7 @@ Enables granular control over system peripherals — such as printers — throug ### 🔄 Auto-Update Engine -A fully managed update lifecycle powered by `electron-updater`. Background download progress is forwarded in real-time to the React UI via IPC event subscriptions, enabling rich notification experiences. See [docs/AUTO_UPDATER.md](docs/AUTO_UPDATER.md). +A fully managed update lifecycle powered by `electron-updater`. Background download progress is forwarded in real-time to the React UI via IPC event subscriptions, enabling rich notification experiences. See [AUTO_UPDATER.md](./AUTO_UPDATER.md). ### 🛡️ CORS Bypass Proxy @@ -173,7 +173,7 @@ The Desktop Wrapper enforces a **hardened security perimeter**, strictly isolati - **Origin Sanitization** — `session.defaultSession.webRequest` intercepts all outgoing requests, stripping `app://` / `file://` Origin headers to prevent backend CORS rejections. - **Navigation Guard** — The `will-navigate` event intercepts and blocks all navigation attempts to URLs outside the `app://` protocol and the authorized dev server origin. -See [docs/IPC_ARCHITECTURE.md](docs/IPC_ARCHITECTURE.md) for the full security model, the Three-Step Bridge pattern, and guidance on safely extending the app with new native features. +See [IPC_ARCHITECTURE.md](./IPC_ARCHITECTURE.md) for the full security model, the Three-Step Bridge pattern, and guidance on safely extending the app with new native features. --- @@ -181,6 +181,6 @@ See [docs/IPC_ARCHITECTURE.md](docs/IPC_ARCHITECTURE.md) for the full security m | Document | Scope | |---|---| -| [CONFIGURATION.md](docs/CONFIGURATION.md) | Target app switching, `app://` protocol internals, HashRouter fallback procedure | -| [AUTO_UPDATER.md](docs/AUTO_UPDATER.md) | Release lifecycle, CI/CD variables, provider switching, code signing | -| [IPC_ARCHITECTURE.md](docs/IPC_ARCHITECTURE.md) | Security model, Three-Step Bridge pattern, existing IPC channels, extensibility guide | +| [CONFIGURATION.md](./CONFIGURATION.md) | Target app switching, `app://` protocol internals, HashRouter fallback procedure | +| [AUTO_UPDATER.md](./AUTO_UPDATER.md) | Release lifecycle, CI/CD variables, provider switching, code signing | +| [IPC_ARCHITECTURE.md](./IPC_ARCHITECTURE.md) | Security model, Three-Step Bridge pattern, existing IPC channels, extensibility guide | diff --git a/apps/docs-dev/src/index.md b/apps/docs-dev/src/index.md new file mode 100644 index 0000000..5090758 --- /dev/null +++ b/apps/docs-dev/src/index.md @@ -0,0 +1,21 @@ +--- +layout: home +hero: + name: "Frontend Monorepo Template Docs" + text: "Centralized Documentation Engine" + tagline: "Enterprise-ready Web & Desktop architecture documentation." + actions: + - theme: brand + text: Get Started + link: /packages/core-api/ + - theme: alt + text: UI Components + link: /packages/ui/ +features: + - title: Centralized Source of Truth + details: All documentation for apps and packages is unified here. + - title: Markdown Powered + details: Simple to maintain and read. + - title: Built with VitePress + details: Fast, responsive, and reliable documentation engine. +--- diff --git a/apps/docs-dev/src/overview.md b/apps/docs-dev/src/overview.md new file mode 100644 index 0000000..6146a4f --- /dev/null +++ b/apps/docs-dev/src/overview.md @@ -0,0 +1,95 @@ +# Monorepo Architecture Overview + +## 📂 Repository Structure + +The monorepo is organized into **Apps** (deployable applications) and **Packages** (shared libraries). + +```text +. +├── apps/ +│ ├── web/ # Main React Application (Vite + TypeScript) +│ ├── landing/ # Public Promotional SPA (Vite + TypeScript) +│ ├── desktop/ # Electron Desktop Wrapper (electron-vite) +│ └── docs-dev/ # Component Documentation & Playground (VitePress) +│ +├── packages/ +│ ├── core-api/ # Shared HTTP Client, Observability & Data Services Engine +│ ├── core-storage/ # Enterprise Storage Engine (IndexedDB/localStorage + Encryption) +│ ├── core-i18n/ # Enterprise Internationalization Architecture +│ ├── ui/ # Shared UI Component Library +│ ├── utils/ # Shared Utilities (Date, Encryption, Core Logic, etc) +│ └── configs/ # Shared Tooling Configurations +│ ├── eslint/ # Shared ESLint rules +│ └── typescript/ # Shared TypeScript (tsconfig) bases +│ +├── package.json # Root scripts and dependencies +├── pnpm-workspace.yaml # pnpm workspace definition +└── turbo.json # Turborepo pipeline configuration +``` + +## 📦 Packages Overview + +### 1. `apps/web` +The main consumer-facing application. +* Imports business logic from `@repo/utils` +* Uses shared UI components from `@repo/ui` + +**Tech Stack**: React, Vite, TypeScript, Tailwind CSS + +### 2. `apps/desktop` +The **Electron desktop wrapper** that embeds `apps/web` for native desktop experiences. +* In **development**: loads the Vite dev server with full hot reload +* In **production**: serves the static web build via a secure custom `app://` protocol +* Configurable target app via `.env` (can wrap `apps/web`, `apps/docs-dev`, or any future app) + +**Tech Stack**: Electron 33.x, electron-vite, electron-builder, electron-updater + +### 3. `apps/landing` +The **public promotional website** — a standalone SPA for the company profile and marketing pages. +* Deployed independently to the web (e.g., Vercel) — no interaction with Electron +* Consumes shared UI components from `@repo/ui` and utilities from `@repo/utils` +* Locked to port **3000** (`strictPort: true`) — evacuated from the `517x` range to avoid `electron-vite` port collisions + +### 4. `apps/docs-dev` +An isolated environment for developing and documenting UI components. +* Ensures components in `@repo/ui` are built and tested independently +* Acts as a living design system and playground +* Built with **VitePress** + +### 5. `packages/core-api` +The **platform-agnostic API engine** for the monorepo. Provides an isolated HTTP client factory, a unified observability pipeline (Grafana Faro + OpenTelemetry), and a generic data services engine. + +### 6. `packages/core-storage` +The **Enterprise-grade storage engine** for the monorepo. +Provides a unified, Promise-based interface for interacting with browser storage (`localStorage` and `IndexedDB`). Enforces strict type safety, prevents key collisions via a centralized registry, and automatically provides **AES encryption at rest** for sensitive payloads using `@repo/utils`. + +### 7. `packages/core-i18n` +The **Enterprise Internationalization Architecture** for the monorepo. +Provides a Hybrid Namespace Architecture combining a centralized i18n engine with decentralized, lazy-loaded feature dictionaries. Features strict TypeScript typings (including nested keys), optional backend synchronization with automatic error rollbacks, and a deep-merge mechanism for dynamic tenant-specific vocabulary overrides. + +### 8. `packages/core-events` +The **decoupled Nervous System** for the monorepo. +Provides a highly performant, strictly typed Event Bus (Pub/Sub) powered by `mitt`. It allows independent modules to communicate seamlessly without tightly coupling their codebases or triggering expensive global React tree re-renders. + +### 9. `packages/utils` +Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest. + +### 10. `packages/ui` +Shared UI component library (Buttons, Inputs, Cards, Layouts) with a comprehensive **Form UI Library**. +* Ensures consistent design across all applications +* Designed to be consumed by both web apps and docs +* **Form UI Library**: 22 RHF-connected Mantine form components with Zod validation and i18n error translation, built via a `withRHF()` HOC factory with `useController` micro-subscriptions and `React.memo` optimization for ERP-scale forms + +### 11. `packages/configs` +Single source of truth for tooling configuration. +* **eslint-config**: Shared ESLint rules +* **typescript-config**: Shared `tsconfig.json` base configurations + +## ⚙️ Configuration & Environment + +### Turborepo Caching +This repository uses **Turborepo caching** for builds, tests, and other artifacts. +To fully clean the workspace (dependencies, build outputs, and Turbo cache): +```bash +rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release +``` diff --git a/packages/core-api/README.md b/apps/docs-dev/src/packages/core-api/index.md similarity index 99% rename from packages/core-api/README.md rename to apps/docs-dev/src/packages/core-api/index.md index 55189e4..34013cd 100644 --- a/packages/core-api/README.md +++ b/apps/docs-dev/src/packages/core-api/index.md @@ -1,4 +1,3 @@ -[← Back to Root](../../README.md) # Enterprise API Engine (`@repo/core-api`) diff --git a/packages/core-events/README.md b/apps/docs-dev/src/packages/core-events/index.md similarity index 99% rename from packages/core-events/README.md rename to apps/docs-dev/src/packages/core-events/index.md index 6f6c22e..5538b46 100644 --- a/packages/core-events/README.md +++ b/apps/docs-dev/src/packages/core-events/index.md @@ -1,4 +1,3 @@ -[← Back to Root](../../README.md) # Event Bus (`@repo/core-events`) diff --git a/packages/core-i18n/README.md b/apps/docs-dev/src/packages/core-i18n/index.md similarity index 99% rename from packages/core-i18n/README.md rename to apps/docs-dev/src/packages/core-i18n/index.md index 42f1fef..69d2342 100644 --- a/packages/core-i18n/README.md +++ b/apps/docs-dev/src/packages/core-i18n/index.md @@ -1,4 +1,3 @@ -[← Back to Root](../../README.md) # i18n Architecture (`@repo/core-i18n`) diff --git a/packages/core-storage/README.md b/apps/docs-dev/src/packages/core-storage/index.md similarity index 99% rename from packages/core-storage/README.md rename to apps/docs-dev/src/packages/core-storage/index.md index 1652ba6..535d0e9 100644 --- a/packages/core-storage/README.md +++ b/apps/docs-dev/src/packages/core-storage/index.md @@ -1,4 +1,3 @@ -[← Back to Root](../../README.md) # Storage Engine (`@repo/core-storage`) diff --git a/packages/ui/docs/CORE-APP-SHELL.md b/apps/docs-dev/src/packages/ui/CORE-APP-SHELL.md similarity index 99% rename from packages/ui/docs/CORE-APP-SHELL.md rename to apps/docs-dev/src/packages/ui/CORE-APP-SHELL.md index 9db6246..39119e8 100644 --- a/packages/ui/docs/CORE-APP-SHELL.md +++ b/apps/docs-dev/src/packages/ui/CORE-APP-SHELL.md @@ -1,4 +1,8 @@ -# Core App Shell — Layout Engine Architecture & Usage Guide +--- +outline: [2, 3] +--- + +# Core App Shell — Layout Engine > **Package**: `@repo/ui` · **Module Path**: `@repo/ui/components` > **Dependencies**: React 18+, Mantine v8 (`AppShell`), `@mantine/hooks` @@ -74,7 +78,7 @@ packages/ui/src/components/core-app-shell/ └── index.ts # Barrel exports ``` -**Source**: [`core-app-shell/`](../src/components/core-app-shell/) +**Source**: `packages/ui/src/components/core-app-shell/` --- diff --git a/packages/ui/docs/FORM-COMPONENTS.md b/apps/docs-dev/src/packages/ui/FORM-COMPONENTS.md similarity index 99% rename from packages/ui/docs/FORM-COMPONENTS.md rename to apps/docs-dev/src/packages/ui/FORM-COMPONENTS.md index e6105c9..220f4a1 100644 --- a/packages/ui/docs/FORM-COMPONENTS.md +++ b/apps/docs-dev/src/packages/ui/FORM-COMPONENTS.md @@ -1,4 +1,8 @@ -# Form UI Library — Architecture & Usage Guide +--- +outline: [2, 3] +--- + +# Form UI Library > **Package**: `@repo/ui` · **Module Path**: `@repo/ui/form` > **Dependencies**: React Hook Form v7, Zod v3, Mantine v8, `@repo/core-i18n` @@ -56,7 +60,7 @@ withRHF(displayName, MantineComponent, options?) └── Preserves full Mantine TypeScript generics ``` -**Source**: [`withRHF.tsx`](../src/components/Form/withRHF.tsx) +**Source**: `packages/ui/src/components/Form/withRHF.tsx` The factory accepts three arguments: diff --git a/packages/ui/README.md b/apps/docs-dev/src/packages/ui/index.md similarity index 97% rename from packages/ui/README.md rename to apps/docs-dev/src/packages/ui/index.md index 0ac8722..06c0784 100644 --- a/packages/ui/README.md +++ b/apps/docs-dev/src/packages/ui/index.md @@ -22,7 +22,7 @@ The centralized UI component library for the monorepo. Provides consistent desig ## 📋 Form UI Library -> **Full Documentation**: [docs/FORM-COMPONENTS.md](docs/FORM-COMPONENTS.md) +> **Full Documentation**: [FORM-COMPONENTS.md](./FORM-COMPONENTS.md) The Form UI Library wraps **all 22 applicable Mantine form components** with React Hook Form via a single `withRHF()` HOC factory. Key features: diff --git a/apps/docs-dev/src/setup.md b/apps/docs-dev/src/setup.md new file mode 100644 index 0000000..9a3571a --- /dev/null +++ b/apps/docs-dev/src/setup.md @@ -0,0 +1,75 @@ +# Local Development Setup + +## 🚀 Getting Started + +### Prerequisites + +Ensure your local environment matches the following versions to avoid compatibility issues: + +* **Node.js**: `v20+` (tested with `v24.11.1`) — required for the `--import tsx` flag used by the desktop prebuild script +* **pnpm**: `v8.15.6` + (Enforced via the `packageManager` field in `package.json`) + +### Installation + +Install all dependencies from the **root directory**: + +```bash +pnpm install +``` + +## 🛠 Usage & Scripts + +This repository uses **Turborepo** to orchestrate tasks efficiently. All commands are executed from the root. + +### Development + +| Command | Description | +| -------------------- | ---------------------------------------------------------------------------------- | +| `pnpm dev` | Start **all applications** (`web` and `docs-dev`) in parallel | +| `pnpm dev:web` | Start only the **Main Web App** (strictly at `http://localhost:5173`) | +| `pnpm dev:landing` | Start the **Public Landing App** (strictly at `http://localhost:3000`) | +| `pnpm dev:docs-dev` | Start **VitePress** for documentation development (strictly at `http://localhost:6060`) | +| `pnpm dev:desktop` | Start the **Web App + Electron** in parallel for desktop development | + +> [!NOTE] +> **Port Topology**: `electron-vite` dynamically allocates a background port (usually `5174`) for its internal renderer shell during `pnpm dev:desktop`. We strictly isolate `web` (`5173`) and `landing` (`3000`) onto separate port ranges to prevent race conditions during parallel execution. + +### Building & Quality + +| Command | Description | +| --------------------- | ------------------------------------------------------- | +| `pnpm build` | Build all apps and packages using Turbo cache | +| `pnpm build:web` | Build only the web application | +| `pnpm build:landing` | Build only the landing page | +| `pnpm build:docs-dev` | Build only the docs-dev application | +| `pnpm build:desktop` | Build the web app, then compile the Electron app | +| `pnpm test` | Run unit tests (Vitest) across all packages | +| `pnpm lint` | Run ESLint across the workspace | +| `pnpm format` | Format code using Prettier | + +### 🚀 Desktop Packaging & Distribution + +To package the application into a production-ready installer, use the following commands from the **root directory**: + +| Command | Platform | Output Artifact | +| ---------------------- | ----------- | ------------------------------------------ | +| `pnpm package:desktop` | Current OS | Detects host OS and builds accordingly | +| `pnpm package:mac` | macOS | `.dmg` and `.zip` (supports x64 & arm64) | +| `pnpm package:win` | Windows | `.exe` (NSIS Installer) | +| `pnpm package:linux` | Linux | `.AppImage` | + +> [!IMPORTANT] +> **Build Sequence**: All `package:*` commands execute the following pipeline automatically: +> +> 1. **`turbo run build --filter=web`** — Compiles the React SPA into `apps/web/dist/`. +> 2. **`prebuild` hook** — Runs `node --import tsx scripts/copy-web-dist.ts`, which copies `apps/web/dist/` → `apps/desktop/web-dist/`. +> 3. **`electron-builder`** — Bundles `web-dist/` into the packaged app via the `files` and `extraResources` blocks in `electron-builder.yml`. +> +> You do not need to run these steps manually — they are chained via npm scripts. + +> [!WARNING] +> **macOS Code Signing**: To build a distributable macOS app with Auto-Update support, you **must** have an Apple Developer Certificate and provide `CSC_LINK` and `CSC_KEY_PASSWORD` in your environment. Without code signing, macOS Gatekeeper will block the app and auto-updates will fail. See the Desktop documentation for details. + +> [!NOTE] +> **Cross-Compilation**: It is highly recommended to build for Windows on a Windows machine and for macOS on a Mac. Cross-compilation (e.g., building `.dmg` on Linux) may fail due to platform-specific toolchain dependencies. Use a CI matrix strategy (e.g., GitHub Actions with `runs-on: [macos-latest, windows-latest, ubuntu-latest]`) for multi-platform releases. diff --git a/apps/docs-dev/stories/button.stories.tsx b/apps/docs-dev/stories/button.stories.tsx deleted file mode 100644 index bfd9ecf..0000000 --- a/apps/docs-dev/stories/button.stories.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react'; -import { Button } from '@repo/ui'; - -const meta: Meta = { - component: Button, - argTypes: { - type: { - control: { type: 'radio' }, - options: ['button', 'submit', 'reset'], - }, - }, -}; - -export default meta; - -type Story = StoryObj; - -/* - *👇 Render functions are a framework specific feature to allow you control on how the component renders. - * See https://storybook.js.org/docs/react/api/csf - * to learn how to use render functions. - */ -export const Primary: Story = { - render: (props) => ( - - ), - name: 'Button', - args: { - children: 'Hello', - type: 'submit', - style: { - color: 'blue', - border: '1px solid gray', - padding: 10, - borderRadius: 10, - }, - }, -}; diff --git a/apps/docs-dev/test-vite-config.js b/apps/docs-dev/test-vite-config.js new file mode 100644 index 0000000..5719e6e --- /dev/null +++ b/apps/docs-dev/test-vite-config.js @@ -0,0 +1,7 @@ +export default { + vite: { + optimizeDeps: { + include: ['@repo/ui', 'mermaid', 'dayjs'] + } + } +} diff --git a/apps/docs-dev/test.js b/apps/docs-dev/test.js new file mode 100644 index 0000000..736e7cf --- /dev/null +++ b/apps/docs-dev/test.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'vitepress' +import { withMermaid } from 'vitepress-plugin-mermaid' + +const baseConfig = withMermaid( + defineConfig({ + title: "Test", + }) +); + +console.log("Before:", baseConfig.vite.optimizeDeps.include); +baseConfig.vite.optimizeDeps.include = baseConfig.vite.optimizeDeps.include.filter( + (dep) => !['@braintree/sanitize-url', 'debug', 'cytoscape-cose-bilkent', 'cytoscape'].includes(dep) +); +console.log("After:", baseConfig.vite.optimizeDeps.include); diff --git a/apps/docs-dev/vite.config.js b/apps/docs-dev/vite.config.js deleted file mode 100644 index 56f7628..0000000 --- a/apps/docs-dev/vite.config.js +++ /dev/null @@ -1,4 +0,0 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; - -export default defineConfig({ plugins: [react()] }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09af81a..311e1dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,6 +51,9 @@ importers: '@repo/ui': specifier: workspace:* version: link:../../packages/ui + dayjs: + specifier: ^1.11.19 + version: 1.11.19 react: specifier: ^19.2.3 version: 19.2.3 @@ -64,39 +67,24 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../packages/configs/typescript - '@storybook/addon-actions': - specifier: ^8.2.6 - version: 8.6.15(storybook@8.6.15) - '@storybook/addon-essentials': - specifier: ^8.2.6 - version: 8.6.14(@types/react@19.2.7)(storybook@8.6.15) - '@storybook/addon-links': - specifier: ^8.2.6 - version: 8.6.15(react@19.2.3)(storybook@8.6.15) - '@storybook/react': - specifier: ^8.2.6 - version: 8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15)(typescript@5.5.4) - '@storybook/react-vite': - specifier: ^8.2.6 - version: 8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15)(typescript@5.5.4)(vite@5.4.17) - '@vitejs/plugin-react': - specifier: ^5.1.2 - version: 5.1.2(vite@5.4.17) eslint: specifier: ^8.57.0 version: 8.57.1 - serve: - specifier: ^14.2.1 - version: 14.2.5 - storybook: - specifier: ^8.2.6 - version: 8.6.15(prettier@3.5.3) + mermaid: + specifier: ^11.15.0 + version: 11.15.0 typescript: specifier: 5.5.4 version: 5.5.4 - vite: - specifier: ^5.1.4 - version: 5.4.17(@types/node@22.19.3) + vitepress: + specifier: ^1.6.4 + version: 1.6.4(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3)(typescript@5.5.4) + vitepress-plugin-mermaid: + specifier: ^2.0.17 + version: 2.0.17(mermaid@11.15.0)(vitepress@1.6.4) + vue: + specifier: ^3.5.38 + version: 3.5.38(typescript@5.5.4) apps/landing: dependencies: @@ -245,7 +233,7 @@ importers: version: 5.4.17(@types/node@22.19.3) vitest: specifier: ^4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.1) + version: 4.0.17(jsdom@26.1.0) packages/configs/eslint: dependencies: @@ -442,7 +430,7 @@ importers: version: 5.5.4 vitest: specifier: ^4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.1) + version: 4.0.17(jsdom@26.1.0) packages/ui: dependencies: @@ -576,7 +564,7 @@ importers: version: 5.5.4 vitest: specifier: ^4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.1) + version: 4.0.17(jsdom@26.1.0) packages: @@ -588,6 +576,183 @@ packages: resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} dev: true + /@algolia/abtesting@1.21.1: + resolution: {integrity: sha512-Wia5/mNTfiU0PIUN25UMfAGGdASkkwuCS9nBAdmhqrNPY/ff7U/6MgBVdwFDPsa3sA1msutPtO50gvOzx6MOXA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1)(search-insights@2.17.3): + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1)(search-insights@2.17.3): + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1): + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1) + '@algolia/client-search': 5.55.1 + algoliasearch: 5.55.1 + dev: true + + /@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1): + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 5.55.1 + algoliasearch: 5.55.1 + dev: true + + /@algolia/client-abtesting@5.55.1: + resolution: {integrity: sha512-miW8RzAtBgNiEJ9fGEhsOPgWUpekAe64YcVufqXrlykj0Jjmo5nj0a5f/HAzRVX5ZuU1GAVd7BkzFDx7q50P3A==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/client-analytics@5.55.1: + resolution: {integrity: sha512-eR3J3kB9JX6DdCvDRi3I4KPfwO6fR9HWYRXhVke2TXIoOQafMKCRAneg33JRmIrb+DnnJ/eWApJLF1O1CLPERg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/client-common@5.55.1: + resolution: {integrity: sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==} + engines: {node: '>= 14.0.0'} + dev: true + + /@algolia/client-insights@5.55.1: + resolution: {integrity: sha512-OVtj9uA//+pjvKQI5INnzbyLrf3ClNv3XRbWswwJ2kHIStQNHtBfHo+LofNB/WhM9xjuXlW5ANn2aMj65UGx7w==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/client-personalization@5.55.1: + resolution: {integrity: sha512-oKlVFlp+qbIEe4p7E54zSiP2gEV/vDu972Ykv8VDMFwEvreS7m0YKA3a8hGGHwc7yiBUGGiR3LlwzMLfnJmy6Q==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/client-query-suggestions@5.55.1: + resolution: {integrity: sha512-BOVrld6vdtsFmotVDMTVQfYXwrVplJ+DUvy60JFi+tkWV698q2J9NNPKEO3dr5qxtSLKQP4vHF8n+3U5PDWhOQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/client-search@5.55.1: + resolution: {integrity: sha512-GAqHl9zERhC3bbBfubwUu07G3UXO06gORvOcsiTBZB3et0s3auNUbHlYdYNp4VKa3sUZqH5AcD3OKzU/KDGXjQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/ingestion@1.55.1: + resolution: {integrity: sha512-BXZw+C+gsWL7pZvbnhJUnCXASiDLGcQxVV7h55Pyh2DmSzwdZIVccE5xc9RVD2trtrhIqk5smuODTxtaZqd0IA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/monitoring@1.55.1: + resolution: {integrity: sha512-9g/ceZrZTqA62FA3588Xj0onRPjDNfu0pVQqefK0rrHp9H6Wblph/YmzGjZ2g8uqbTh0ZGIvAGCzErU8f7MHpA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/recommend@5.55.1: + resolution: {integrity: sha512-cZTIrGyAP+W4A6jDVwvWM/JOaoJKQkD/2a5eLUEeNdKAD45jN7BCpsMDONyhZlosLa4UwL8uiINQzj4iFy9nqg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 + dev: true + + /@algolia/requester-browser-xhr@5.55.1: + resolution: {integrity: sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + dev: true + + /@algolia/requester-fetch@5.55.1: + resolution: {integrity: sha512-ukU5zeeFs44rQkzv+TRdYard+d+3lmPGs8lPZhHtWE8rfz+LlBSF6s9kP3VQ7LeOYL8Dz0u6tZfnyTrqrumbHQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + dev: true + + /@algolia/requester-node-http@5.55.1: + resolution: {integrity: sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.55.1 + dev: true + + /@antfu/install-pkg@1.1.0: + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.0.2 + dev: true + /@asamuzakjp/css-color@3.2.0: resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} dependencies: @@ -701,10 +866,20 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.29.7: + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.28.5: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.29.7: + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.27.1: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -723,6 +898,14 @@ packages: dependencies: '@babel/types': 7.28.5 + /@babel/parser@7.29.7: + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.29.7 + dev: true + /@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5): resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} engines: {node: '>=6.9.0'} @@ -786,6 +969,28 @@ packages: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + /@babel/types@7.29.7: + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + dev: true + + /@braintree/sanitize-url@6.0.4: + resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + requiresBuild: true + dev: true + optional: true + + /@braintree/sanitize-url@7.1.2: + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + dev: true + + /@chevrotain/types@11.1.2: + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + dev: true + /@csstools/color-helpers@5.1.0: resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} @@ -837,6 +1042,51 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: true + /@docsearch/css@3.8.2: + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + dev: true + + /@docsearch/js@3.8.2(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3): + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3) + preact: 10.29.2 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.8.2(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3): + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.55.1)(algoliasearch@5.55.1) + '@docsearch/css': 3.8.2 + algoliasearch: 5.55.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + /@electron-toolkit/preload@3.0.2(electron@33.4.11): resolution: {integrity: sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg==} peerDependencies: @@ -1548,6 +1798,24 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + /@iconify-json/simple-icons@1.2.87: + resolution: {integrity: sha512-8YciStObhSji3OZFmWAWK6kBujyqO5bLCxeDwLxf3CR3F4PVelq7keC2LBvgTqviWzSTysj5/g4PCFLiAMVGsw==} + dependencies: + '@iconify/types': 2.0.0 + dev: true + + /@iconify/types@2.0.0: + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + dev: true + + /@iconify/utils@3.1.3: + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + dev: true + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1559,22 +1827,6 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - /@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.5.4)(vite@5.4.17): - resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} - peerDependencies: - typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - glob: 10.5.0 - magic-string: 0.27.0 - react-docgen-typescript: 2.4.0(typescript@5.5.4) - typescript: 5.5.4 - vite: 5.4.17(@types/node@22.19.3) - dev: true - /@jridgewell/gen-mapping@0.3.13: resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} dependencies: @@ -1686,15 +1938,24 @@ packages: react-dom: 19.2.3(react@19.2.3) dev: false - /@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.3): - resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' + /@mermaid-js/mermaid-mindmap@9.3.0: + resolution: {integrity: sha512-IhtYSVBBRYviH1Ehu8gk69pMDF8DSRqXBRDMWrEfHoaMruHeaP2DXA3PBnuwsMaCdPQhlUUcy/7DBLAEIXvCAw==} + requiresBuild: true dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.2.7 - react: 19.2.3 + '@braintree/sanitize-url': 6.0.4 + cytoscape: 3.34.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.0) + cytoscape-fcose: 2.2.0(cytoscape@3.34.0) + d3: 7.9.0 + khroma: 2.1.0 + non-layered-tidy-tree-layout: 2.0.2 + dev: true + optional: true + + /@mermaid-js/parser@1.1.1: + resolution: {integrity: sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==} + dependencies: + '@chevrotain/types': 11.1.2 dev: true /@microsoft/tsdoc-config@0.16.2: @@ -2166,20 +2427,6 @@ packages: resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} dev: true - /@rollup/pluginutils@5.3.0: - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.7 - estree-walker: 2.0.2 - picomatch: 4.0.3 - dev: true - /@rollup/rollup-android-arm-eabi@4.39.0: resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==} cpu: [arm] @@ -2528,6 +2775,62 @@ packages: resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} dev: false + /@shikijs/core@2.5.0: + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + dependencies: + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + dev: true + + /@shikijs/engine-javascript@2.5.0: + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 + dev: true + + /@shikijs/engine-oniguruma@2.5.0: + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + dev: true + + /@shikijs/langs@2.5.0: + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + dependencies: + '@shikijs/types': 2.5.0 + dev: true + + /@shikijs/themes@2.5.0: + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + dependencies: + '@shikijs/types': 2.5.0 + dev: true + + /@shikijs/transformers@2.5.0: + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 + dev: true + + /@shikijs/types@2.5.0: + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + dev: true + + /@shikijs/vscode-textmate@10.0.2: + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + dev: true + /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -2541,365 +2844,12 @@ packages: resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} dev: false - /@storybook/addon-actions@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 8.6.15(prettier@3.5.3) - uuid: 9.0.1 - dev: true - - /@storybook/addon-actions@8.6.15(storybook@8.6.15): - resolution: {integrity: sha512-zc600PBJqP9hCyRY5escKgKf6Zt9kdNZfm+Jwb46k5/NMSO4tNVeOPGBFxW9kSsIYk8j55sNske+Yh60G+8bcw==} - peerDependencies: - storybook: ^8.6.15 - dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 8.6.15(prettier@3.5.3) - uuid: 9.0.1 - dev: true - - /@storybook/addon-backgrounds@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-controls@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/global': 5.0.0 - dequal: 2.0.3 - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-docs@8.6.14(@types/react@19.2.7)(storybook@8.6.15): - resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.3) - '@storybook/blocks': 8.6.14(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15) - '@storybook/csf-plugin': 8.6.14(storybook@8.6.15) - '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - dev: true - - /@storybook/addon-essentials@8.6.14(@types/react@19.2.7)(storybook@8.6.15): - resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/addon-actions': 8.6.14(storybook@8.6.15) - '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.15) - '@storybook/addon-controls': 8.6.14(storybook@8.6.15) - '@storybook/addon-docs': 8.6.14(@types/react@19.2.7)(storybook@8.6.15) - '@storybook/addon-highlight': 8.6.14(storybook@8.6.15) - '@storybook/addon-measure': 8.6.14(storybook@8.6.15) - '@storybook/addon-outline': 8.6.14(storybook@8.6.15) - '@storybook/addon-toolbars': 8.6.14(storybook@8.6.15) - '@storybook/addon-viewport': 8.6.14(storybook@8.6.15) - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - dev: true - - /@storybook/addon-highlight@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/addon-links@8.6.15(react@19.2.3)(storybook@8.6.15): - resolution: {integrity: sha512-abRWnDPBTwnj6sQYfAjUnYCNuUQbrVLLOyuormbDUqOcvZ+OqehNYo4BKXx0/lz61h0A2dOD1IuDo40uWyYVFQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 - peerDependenciesMeta: - react: - optional: true - dependencies: - '@storybook/global': 5.0.0 - react: 19.2.3 - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-measure@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) - tiny-invariant: 1.3.3 - dev: true - - /@storybook/addon-outline@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-toolbars@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/addon-viewport@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - memoizerific: 1.11.3 - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/blocks@8.6.14(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15): - resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^8.6.14 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/icons': 1.6.0(react-dom@19.2.3)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - dev: true - - /@storybook/builder-vite@8.6.15(storybook@8.6.15)(vite@5.4.17): - resolution: {integrity: sha512-9Y05/ndZE6/eI7ZIUCD/QtH2htRIUs9j1gxE6oW0zRo9TJO1iqxfLNwgzd59KEkId7gdZxPei0l+LGTUGXYKRg==} - peerDependencies: - storybook: ^8.6.15 - vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - dependencies: - '@storybook/csf-plugin': 8.6.15(storybook@8.6.15) - browser-assert: 1.2.1 - storybook: 8.6.15(prettier@3.5.3) - ts-dedent: 2.2.0 - vite: 5.4.17(@types/node@22.19.3) - dev: true - - /@storybook/components@8.6.15(storybook@8.6.15): - resolution: {integrity: sha512-+9GVKXPEW8Kl9zvNSTm9+VrJtx/puMZiO7gxCML63nK4aTWJXHQr4t9YUoGammSBM3AV1JglsKm6dBgJEeCoiA==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/core@8.6.15(prettier@3.5.3)(storybook@8.6.15): - resolution: {integrity: sha512-VFpKcphNurJpSC4fpUfKL3GTXVoL53oytghGR30QIw5jKWwaT50HVbTyb41BLOUuZjmMhUQA8weiQEew6RX0gw==} - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true - dependencies: - '@storybook/theming': 8.6.15(storybook@8.6.15) - better-opn: 3.0.2 - browser-assert: 1.2.1 - esbuild: 0.21.5 - esbuild-register: 3.6.0(esbuild@0.21.5) - jsdoc-type-pratt-parser: 4.8.0 - prettier: 3.5.3 - process: 0.11.10 - recast: 0.23.11 - semver: 7.7.1 - util: 0.12.5 - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - storybook - - supports-color - - utf-8-validate - dev: true - - /@storybook/csf-plugin@8.6.14(storybook@8.6.15): - resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} - peerDependencies: - storybook: ^8.6.14 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - unplugin: 1.16.1 - dev: true - - /@storybook/csf-plugin@8.6.15(storybook@8.6.15): - resolution: {integrity: sha512-ZLz/mtOoE1Jj2lE4pK3U7MmYrv5+lot3mGtwxGb832tcABMc97j9O+reCVxZYc7DeFbBuuEdMT9rBL/O3kXYmw==} - peerDependencies: - storybook: ^8.6.15 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - unplugin: 1.16.1 - dev: true - /@storybook/csf@0.0.1: resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} dependencies: lodash: 4.17.21 dev: false - /@storybook/global@5.0.0: - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - dev: true - - /@storybook/icons@1.6.0(react-dom@19.2.3)(react@19.2.3): - resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - dev: true - - /@storybook/manager-api@8.6.15(storybook@8.6.15): - resolution: {integrity: sha512-ZOFtH821vFcwzECbFYFTKtSVO96Cvwwg45dMh3M/9bZIdN7klsloX7YNKw8OKvwE6XLFLsi2OvsNNcmTW6g88w==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/preview-api@8.6.15(storybook@8.6.15): - resolution: {integrity: sha512-oqsp8f7QekB9RzpDqOXZQcPPRXXd/mTsnZSdAAQB/pBVqUpC9h/y5hgovbYnJ6DWXcpODbMwH+wbJHZu5lvm+w==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/react-dom-shim@8.6.14(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15): - resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.14 - dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/react-dom-shim@8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15): - resolution: {integrity: sha512-m2trBmmd4iom1qwrp1F109zjRDc0cPaHYhDQxZR4Qqdz8pYevYJTlipDbH/K4NVB6Rn687RT29OoOPfJh6vkFA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 - dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - storybook: 8.6.15(prettier@3.5.3) - dev: true - - /@storybook/react-vite@8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15)(typescript@5.5.4)(vite@5.4.17): - resolution: {integrity: sha512-9st+2NCemzzBwmindpDrRLEqYJmwwd2RnXMoj+Wt4Y1r4MGoRe1l837ciT2tmstaqekY2mVUSYd6879NzeeMYw==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@storybook/test': 8.6.15 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 - vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - '@storybook/test': - optional: true - dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.5.4)(vite@5.4.17) - '@rollup/pluginutils': 5.3.0 - '@storybook/builder-vite': 8.6.15(storybook@8.6.15)(vite@5.4.17) - '@storybook/react': 8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15)(typescript@5.5.4) - find-up: 5.0.0 - magic-string: 0.30.21 - react: 19.2.3 - react-docgen: 7.1.1 - react-dom: 19.2.3(react@19.2.3) - resolve: 1.22.11 - storybook: 8.6.15(prettier@3.5.3) - tsconfig-paths: 4.2.0 - vite: 5.4.17(@types/node@22.19.3) - transitivePeerDependencies: - - rollup - - supports-color - - typescript - dev: true - - /@storybook/react@8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15)(typescript@5.5.4): - resolution: {integrity: sha512-hdnhlJg+YkpPMOw2hvK7+mhdxAbguA+TFTIAzVV9CeUYoHDIZAsgeKVhRmgZGN20NGjRN5ZcwkplAMJnF9v+6w==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@storybook/test': 8.6.15 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 - typescript: '>= 4.2.x' - peerDependenciesMeta: - '@storybook/test': - optional: true - typescript: - optional: true - dependencies: - '@storybook/components': 8.6.15(storybook@8.6.15) - '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.15(storybook@8.6.15) - '@storybook/preview-api': 8.6.15(storybook@8.6.15) - '@storybook/react-dom-shim': 8.6.15(react-dom@19.2.3)(react@19.2.3)(storybook@8.6.15) - '@storybook/theming': 8.6.15(storybook@8.6.15) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - storybook: 8.6.15(prettier@3.5.3) - typescript: 5.5.4 - dev: true - - /@storybook/theming@8.6.15(storybook@8.6.15): - resolution: {integrity: sha512-dAbL0XOekyT6XsF49R6Etj3WxQ/LpdJDIswUUeHgVJ6/yd2opZOGbPxnwA3zlmAh1c0tvpPyhSDXxSG79u8e4Q==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - dependencies: - storybook: 8.6.15(prettier@3.5.3) - dev: true - /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -3480,6 +3430,185 @@ packages: resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} dev: true + /@types/d3-array@3.2.2: + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + dev: true + + /@types/d3-axis@3.0.6: + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + dependencies: + '@types/d3-selection': 3.0.11 + dev: true + + /@types/d3-brush@3.0.6: + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + dependencies: + '@types/d3-selection': 3.0.11 + dev: true + + /@types/d3-chord@3.0.6: + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + dev: true + + /@types/d3-color@3.1.3: + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + dev: true + + /@types/d3-contour@3.0.6: + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + dev: true + + /@types/d3-delaunay@6.0.4: + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + dev: true + + /@types/d3-dispatch@3.0.7: + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + dev: true + + /@types/d3-drag@3.0.7: + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + dependencies: + '@types/d3-selection': 3.0.11 + dev: true + + /@types/d3-dsv@3.0.7: + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + dev: true + + /@types/d3-ease@3.0.2: + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + dev: true + + /@types/d3-fetch@3.0.7: + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + dependencies: + '@types/d3-dsv': 3.0.7 + dev: true + + /@types/d3-force@3.0.10: + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + dev: true + + /@types/d3-format@3.0.4: + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + dev: true + + /@types/d3-geo@3.1.0: + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + dependencies: + '@types/geojson': 7946.0.16 + dev: true + + /@types/d3-hierarchy@3.1.7: + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + dev: true + + /@types/d3-interpolate@3.0.4: + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + dependencies: + '@types/d3-color': 3.1.3 + dev: true + + /@types/d3-path@3.1.1: + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + dev: true + + /@types/d3-polygon@3.0.2: + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + dev: true + + /@types/d3-quadtree@3.0.6: + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + dev: true + + /@types/d3-random@3.0.3: + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + dev: true + + /@types/d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + dev: true + + /@types/d3-scale@4.0.9: + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + dependencies: + '@types/d3-time': 3.0.4 + dev: true + + /@types/d3-selection@3.0.11: + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + dev: true + + /@types/d3-shape@3.1.8: + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + dependencies: + '@types/d3-path': 3.1.1 + dev: true + + /@types/d3-time-format@4.0.3: + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + dev: true + + /@types/d3-time@3.0.4: + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + dev: true + + /@types/d3-timer@3.0.2: + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + dev: true + + /@types/d3-transition@3.0.9: + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + dependencies: + '@types/d3-selection': 3.0.11 + dev: true + + /@types/d3-zoom@3.0.8: + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + dev: true + + /@types/d3@7.4.3: + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + dev: true + /@types/debug@4.1.12: resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: @@ -3489,10 +3618,6 @@ packages: resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} dev: true - /@types/doctrine@0.0.9: - resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - dev: true - /@types/estree-jsx@1.0.5: resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: @@ -3512,11 +3637,14 @@ packages: '@types/node': 22.19.3 dev: true + /@types/geojson@7946.0.16: + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + dev: true + /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: '@types/unist': 3.0.3 - dev: false /@types/http-cache-semantics@4.2.0: resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} @@ -3540,14 +3668,24 @@ packages: '@types/node': 22.19.3 dev: true + /@types/linkify-it@5.0.0: + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + dev: true + + /@types/markdown-it@14.1.2: + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + dev: true + /@types/mdast@4.0.4: resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: '@types/unist': 3.0.3 - dev: false - /@types/mdx@2.0.13: - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + /@types/mdurl@2.0.0: + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} dev: true /@types/ms@2.1.0: @@ -3718,10 +3856,6 @@ packages: dependencies: csstype: 3.2.3 - /@types/resolve@1.20.6: - resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - dev: true - /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: @@ -3736,28 +3870,33 @@ packages: resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} dev: false + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + requiresBuild: true + dev: true + optional: true + /@types/unist@2.0.11: resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} dev: false /@types/unist@3.0.3: resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - dev: false /@types/use-sync-external-store@0.0.6: resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} dev: false - /@types/uuid@9.0.8: - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true - /@types/verror@1.10.11: resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} requiresBuild: true dev: true optional: true + /@types/web-bluetooth@0.0.21: + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + dev: true + /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true @@ -4244,6 +4383,13 @@ packages: dev: false optional: true + /@upsetjs/venn.js@2.0.0: + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: true + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.5.3)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} @@ -4308,6 +4454,17 @@ packages: - supports-color dev: true + /@vitejs/plugin-vue@5.2.4(vite@5.4.17)(vue@3.5.38): + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.4.17(@types/node@22.19.3) + vue: 3.5.38(typescript@5.5.4) + dev: true + /@vitest/expect@4.0.17: resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} dependencies: @@ -4368,16 +4525,182 @@ packages: tinyrainbow: 3.0.3 dev: true + /@vue/compiler-core@3.5.38: + resolution: {integrity: sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==} + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.38 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + dev: true + + /@vue/compiler-dom@3.5.38: + resolution: {integrity: sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==} + dependencies: + '@vue/compiler-core': 3.5.38 + '@vue/shared': 3.5.38 + dev: true + + /@vue/compiler-sfc@3.5.38: + resolution: {integrity: sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==} + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.38 + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.15 + source-map-js: 1.2.1 + dev: true + + /@vue/compiler-ssr@3.5.38: + resolution: {integrity: sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==} + dependencies: + '@vue/compiler-dom': 3.5.38 + '@vue/shared': 3.5.38 + dev: true + + /@vue/devtools-api@7.7.9: + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + dependencies: + '@vue/devtools-kit': 7.7.9 + dev: true + + /@vue/devtools-kit@7.7.9: + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + dev: true + + /@vue/devtools-shared@7.7.9: + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + dependencies: + rfdc: 1.4.1 + dev: true + + /@vue/reactivity@3.5.38: + resolution: {integrity: sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==} + dependencies: + '@vue/shared': 3.5.38 + dev: true + + /@vue/runtime-core@3.5.38: + resolution: {integrity: sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==} + dependencies: + '@vue/reactivity': 3.5.38 + '@vue/shared': 3.5.38 + dev: true + + /@vue/runtime-dom@3.5.38: + resolution: {integrity: sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==} + dependencies: + '@vue/reactivity': 3.5.38 + '@vue/runtime-core': 3.5.38 + '@vue/shared': 3.5.38 + csstype: 3.2.3 + dev: true + + /@vue/server-renderer@3.5.38(vue@3.5.38): + resolution: {integrity: sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==} + peerDependencies: + vue: 3.5.38 + dependencies: + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + vue: 3.5.38(typescript@5.5.4) + dev: true + + /@vue/shared@3.5.38: + resolution: {integrity: sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==} + dev: true + + /@vueuse/core@12.8.2(typescript@5.5.4): + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.5.4) + vue: 3.5.38(typescript@5.5.4) + transitivePeerDependencies: + - typescript + dev: true + + /@vueuse/integrations@12.8.2(focus-trap@7.8.0)(typescript@5.5.4): + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 12.8.2(typescript@5.5.4) + '@vueuse/shared': 12.8.2(typescript@5.5.4) + focus-trap: 7.8.0 + vue: 3.5.38(typescript@5.5.4) + transitivePeerDependencies: + - typescript + dev: true + + /@vueuse/metadata@12.8.2: + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + dev: true + + /@vueuse/shared@12.8.2(typescript@5.5.4): + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + dependencies: + vue: 3.5.38(typescript@5.5.4) + transitivePeerDependencies: + - typescript + dev: true + /@xmldom/xmldom@0.8.12: resolution: {integrity: sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==} engines: {node: '>=10.0.0'} requiresBuild: true dev: true - /@zeit/schemas@2.36.0: - resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} - dev: true - /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true @@ -4437,6 +4760,7 @@ packages: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true + dev: false /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -4482,19 +4806,24 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /algoliasearch@5.55.1: + resolution: {integrity: sha512-FyaFnnsbVPtevQwqSj/SdxE3jAsSsY0BEH8IVLf9rXxEBdAhAmT6VKCVSMWoaPIHVN1Eufh/1w8q6k8URpIkWw==} + engines: {node: '>= 14.0.0'} dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 + '@algolia/abtesting': 1.21.1 + '@algolia/client-abtesting': 5.55.1 + '@algolia/client-analytics': 5.55.1 + '@algolia/client-common': 5.55.1 + '@algolia/client-insights': 5.55.1 + '@algolia/client-personalization': 5.55.1 + '@algolia/client-query-suggestions': 5.55.1 + '@algolia/client-search': 5.55.1 + '@algolia/ingestion': 1.55.1 + '@algolia/monitoring': 1.55.1 + '@algolia/recommend': 5.55.1 + '@algolia/requester-browser-xhr': 5.55.1 + '@algolia/requester-fetch': 5.55.1 + '@algolia/requester-node-http': 5.55.1 dev: true /ansi-regex@5.0.1: @@ -4574,10 +4903,6 @@ packages: resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} dev: true - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: true - /archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -4632,10 +4957,6 @@ packages: readable-stream: 3.6.2 dev: true - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -4761,13 +5082,6 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: false - /ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} - dependencies: - tslib: 2.8.1 - dev: true - /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -4802,6 +5116,7 @@ packages: engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.1.0 + dev: false /axe-core@4.11.1: resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} @@ -4846,11 +5161,8 @@ packages: resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true - /better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} - dependencies: - open: 8.4.2 + /birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} dev: true /bl@4.1.0: @@ -4878,20 +5190,6 @@ packages: dev: true optional: true - /boxen@7.0.0: - resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} - engines: {node: '>=14.16'} - dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.0.1 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -4917,10 +5215,6 @@ packages: fill-range: 7.1.1 dev: false - /browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - dev: true - /browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -4994,16 +5288,6 @@ packages: engines: {node: '>=6'} dev: false - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -5068,6 +5352,7 @@ packages: es-define-property: 1.0.1 get-intrinsic: 1.3.0 set-function-length: 1.2.2 + dev: false /call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} @@ -5075,35 +5360,23 @@ packages: dependencies: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 + dev: false /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - dev: true - /caniuse-lite@1.0.30001762: resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - dev: false /chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} dev: true - /chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} - dependencies: - chalk: 4.1.2 - dev: true - /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -5111,18 +5384,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.0.1: - resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: false /character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: false /character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -5166,11 +5432,6 @@ packages: engines: {node: '>=6'} dev: true - /cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - dev: true - /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -5193,15 +5454,6 @@ packages: dev: true optional: true - /clipboardy@3.0.0: - resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - arch: 2.2.0 - execa: 5.1.1 - is-wsl: 2.2.0 - dev: true - /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -5247,11 +5499,25 @@ packages: dependencies: delayed-stream: 1.0.0 + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: true + /commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} dev: true + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + /compare-version@0.1.2: resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} engines: {node: '>=0.10.0'} @@ -5267,28 +5533,6 @@ packages: readable-stream: 3.6.2 dev: true - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.54.0 - dev: true - - /compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - engines: {node: '>= 0.8.0'} - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.1.0 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -5313,11 +5557,6 @@ packages: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true - /content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} - dev: true - /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -5326,6 +5565,13 @@ packages: engines: {node: '>=18'} dev: false + /copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + dependencies: + is-what: 5.5.0 + dev: true + /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} requiresBuild: true @@ -5336,6 +5582,18 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true + /cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + dependencies: + layout-base: 1.0.2 + dev: true + + /cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + dependencies: + layout-base: 2.0.1 + dev: true + /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -5385,6 +5643,307 @@ packages: /csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.0): + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + dependencies: + cose-base: 1.0.3 + cytoscape: 3.34.0 + dev: true + + /cytoscape-fcose@2.2.0(cytoscape@3.34.0): + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + dependencies: + cose-base: 2.2.0 + cytoscape: 3.34.0 + dev: true + + /cytoscape@3.34.0: + resolution: {integrity: sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==} + engines: {node: '>=0.10'} + dev: true + + /d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + dependencies: + internmap: 1.0.1 + dev: true + + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: true + + /d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + dev: true + + /d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: true + + /d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: true + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: true + + /d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: true + + /d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + dependencies: + delaunator: 5.1.0 + dev: true + + /d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: true + + /d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + dev: true + + /d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + dev: true + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: true + + /d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + dependencies: + d3-dsv: 3.0.1 + dev: true + + /d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + dev: true + + /d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + dev: true + + /d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: true + + /d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + dev: true + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: true + + /d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: true + + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: true + + /d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + dev: true + + /d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + dev: true + + /d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + dev: true + + /d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + dev: true + + /d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + dev: true + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: true + + /d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + dev: true + + /d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: true + + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: true + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: true + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: true + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: true + + /d3-transition@3.0.1(d3-selection@3.0.0): + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + dev: true + + /d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: true + + /d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + dev: true + + /dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + dependencies: + d3: 7.9.0 + lodash-es: 4.18.1 + dev: true + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: false @@ -5426,18 +5985,6 @@ packages: /dayjs@1.11.19: resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} - dev: false - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -5489,11 +6036,6 @@ packages: mimic-response: 3.1.0 dev: true - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -5525,11 +6067,6 @@ packages: es-errors: 1.3.0 gopd: 1.2.0 - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -5538,6 +6075,12 @@ packages: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + /delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + dependencies: + robust-predicates: 3.0.3 + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -5578,7 +6121,6 @@ packages: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} dependencies: dequal: 2.0.3 - dev: false /diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} @@ -5655,6 +6197,12 @@ packages: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dev: true + /dompurify@3.4.11: + resolution: {integrity: sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==} + optionalDependencies: + '@types/trusted-types': 2.0.7 + dev: true + /dotenv-expand@11.0.7: resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} engines: {node: '>=12'} @@ -5796,6 +6344,10 @@ packages: - supports-color dev: true + /emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + dev: true + /emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} dev: false @@ -5832,6 +6384,11 @@ packages: engines: {node: '>=0.12'} dev: true + /entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + dev: true + /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -5978,23 +6535,16 @@ packages: is-symbol: 1.1.1 dev: false + /es-toolkit@1.48.1: + resolution: {integrity: sha512-wfnXlwd5I75eXRtdD2vuEs50xHHESECDsGD7yiQnfFVNoa5522NwXEbmgo98LfiukSQHs+mBM7/YG3qKJB9/mQ==} + dev: true + /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} requiresBuild: true dev: true optional: true - /esbuild-register@3.6.0(esbuild@0.21.5): - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - dependencies: - debug: 4.4.3 - esbuild: 0.21.5 - transitivePeerDependencies: - - supports-color - dev: true - /esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -6512,12 +7062,6 @@ packages: acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - /esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -6569,21 +7113,6 @@ packages: engines: {node: '>=0.8.x'} dev: false - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - /expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -6716,6 +7245,12 @@ packages: /flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + /focus-trap@7.8.0: + resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} + dependencies: + tabbable: 6.4.0 + dev: true + /follow-redirects@1.16.0: resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} @@ -6731,6 +7266,7 @@ packages: engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 + dev: false /foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} @@ -6847,6 +7383,7 @@ packages: /generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} + dev: false /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -6891,11 +7428,6 @@ packages: pump: 3.0.4 dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - /get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -7026,6 +7558,10 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + /hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + dev: true + /has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -7067,12 +7603,38 @@ packages: dependencies: function-bind: 1.1.2 + /hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + dev: true + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 dev: false + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: false @@ -7104,6 +7666,10 @@ packages: void-elements: 3.1.0 dev: false + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: true + /http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} dev: true @@ -7156,11 +7722,6 @@ packages: - supports-color dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -7234,7 +7795,6 @@ packages: /import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - dev: false /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -7257,10 +7817,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true - /ini@4.1.3: resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -7275,6 +7831,15 @@ packages: side-channel: 1.1.0 dev: false + /internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + dev: true + + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: true + /ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -7291,14 +7856,6 @@ packages: is-decimal: 2.0.1 dev: false - /is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - dev: true - /is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -7354,6 +7911,7 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + dev: false /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} @@ -7367,6 +7925,7 @@ packages: engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 + dev: false /is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} @@ -7389,12 +7948,6 @@ packages: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: false - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - /is-empty@1.2.0: resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} dev: false @@ -7423,6 +7976,7 @@ packages: get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 + dev: false /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -7475,11 +8029,6 @@ packages: engines: {node: '>=12'} dev: false - /is-port-reachable@4.0.0: - resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -7492,6 +8041,7 @@ packages: gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 + dev: false /is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} @@ -7505,11 +8055,6 @@ packages: call-bound: 1.0.4 dev: false - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - /is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -7532,6 +8077,7 @@ packages: engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.19 + dev: false /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} @@ -7558,11 +8104,9 @@ packages: get-intrinsic: 1.3.0 dev: false - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 + /is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} dev: true /isarray@0.0.1: @@ -7640,11 +8184,6 @@ packages: dependencies: argparse: 2.0.1 - /jsdoc-type-pratt-parser@4.8.0: - resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} - engines: {node: '>=12.0.0'} - dev: true - /jsdom@26.1.0: resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} @@ -7705,10 +8244,6 @@ packages: /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true - /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -7753,11 +8288,22 @@ packages: object.values: 1.2.1 dev: false + /katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: true + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 + /khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + dev: true + /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -7774,6 +8320,14 @@ packages: language-subtag-registry: 0.3.23 dev: false + /layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + dev: true + + /layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + dev: true + /lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} @@ -7982,6 +8536,10 @@ packages: dependencies: p-locate: 5.0.0 + /lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + dev: true + /lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} dev: true @@ -8082,13 +8640,6 @@ packages: hasBin: true dev: true - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - dev: true - /magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} dependencies: @@ -8119,8 +8670,14 @@ packages: - supports-color dev: true - /map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + + /marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true dev: true /matcher@3.0.0: @@ -8219,6 +8776,20 @@ packages: unist-util-is: 6.0.1 dev: false + /mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + dev: true + /mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} dependencies: @@ -8251,21 +8822,37 @@ packages: safe-buffer: 5.1.2 dev: true - /memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} - dependencies: - map-or-similar: 1.5.0 - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: false + /mermaid@11.15.0: + resolution: {integrity: sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==} + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.3 + '@mermaid-js/parser': 1.1.1 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.34.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.0) + cytoscape-fcose: 2.2.0(cytoscape@3.34.0) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.19 + dompurify: 3.4.11 + es-toolkit: 1.48.1 + katex: 0.16.47 + khroma: 2.1.0 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.4.0 + ts-dedent: 2.2.0 + uuid: 14.0.1 + dev: true + /micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} dependencies: @@ -8409,7 +8996,6 @@ packages: dependencies: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - dev: false /micromark-util-chunked@2.0.1: resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} @@ -8449,7 +9035,6 @@ packages: /micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - dev: false /micromark-util-events-to-acorn@2.0.3: resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} @@ -8485,7 +9070,6 @@ packages: micromark-util-character: 2.1.1 micromark-util-encode: 2.0.1 micromark-util-symbol: 2.0.1 - dev: false /micromark-util-subtokenize@2.1.0: resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} @@ -8498,11 +9082,9 @@ packages: /micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - dev: false /micromark-util-types@2.0.2: resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - dev: false /micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} @@ -8540,11 +9122,6 @@ packages: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} - /mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - dev: true - /mime-types@2.1.18: resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} engines: {node: '>= 0.6'} @@ -8666,6 +9243,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + /minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} + dev: true + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -8676,7 +9257,6 @@ packages: /mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - dev: false /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -8693,10 +9273,6 @@ packages: engines: {node: '>=4'} dev: false - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true - /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -8704,6 +9280,12 @@ packages: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + /nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -8772,6 +9354,12 @@ packages: /node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + /non-layered-tidy-tree-layout@2.0.2: + resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} + requiresBuild: true + dev: true + optional: true + /nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -8848,13 +9436,6 @@ packages: semver: 7.7.1 dev: false - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -8939,11 +9520,6 @@ packages: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} dev: true - /on-headers@1.1.0: - resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} - engines: {node: '>= 0.8'} - dev: true - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -8956,13 +9532,12 @@ packages: mimic-fn: 2.1.0 dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + /oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 + emoji-regex-xs: 1.0.0 + regex: 6.1.0 + regex-recursion: 6.0.2 dev: true /optionator@0.9.4: @@ -9050,6 +9625,10 @@ packages: /package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + /package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + dev: true + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -9095,6 +9674,10 @@ packages: entities: 6.0.1 dev: true + /path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -9103,16 +9686,13 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - /path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - dev: true - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false /path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} @@ -9121,10 +9701,6 @@ packages: lru-cache: 10.4.3 minipass: 7.1.2 - /path-to-regexp@3.3.0: - resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - dev: true - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -9143,6 +9719,10 @@ packages: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + /picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -9169,16 +9749,30 @@ packages: engines: {node: '>=4'} dev: false - /polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} + /points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + dev: true + + /points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} dependencies: - '@babel/runtime': 7.28.4 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 dev: true /possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + dev: false + + /postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.15 + picocolors: 1.1.1 + source-map-js: 1.2.1 + dev: true /postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} @@ -9354,6 +9948,10 @@ packages: pouchdb-md5: 9.0.0 uuid: 8.3.2 + /preact@10.29.2: + resolution: {integrity: sha512-7tNmwg/7mzzAoB/8kSg6Hl37JraAZw3Z3A0JSY7VXlZwo82Xn0G7wKbNNs2qoF4ZEEsQGTwDAroNdqKs1ofJxQ==} + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -9393,11 +9991,6 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true - /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -9426,6 +10019,10 @@ packages: react-is: 16.13.1 dev: false + /property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + dev: true + /prosemirror-changeset@2.4.1: resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==} dependencies: @@ -9581,47 +10178,6 @@ packages: engines: {node: '>=10'} dev: true - /range-parser@1.2.0: - resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} - engines: {node: '>= 0.6'} - dev: true - - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - dev: true - - /react-docgen-typescript@2.4.0(typescript@5.5.4): - resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} - peerDependencies: - typescript: '>= 4.3.x' - dependencies: - typescript: 5.5.4 - dev: true - - /react-docgen@7.1.1: - resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} - engines: {node: '>=16.14.0'} - dependencies: - '@babel/core': 7.28.5 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - '@types/doctrine': 0.0.9 - '@types/resolve': 1.20.6 - doctrine: 3.0.0 - resolve: 1.22.11 - strip-indent: 4.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /react-dom@19.2.3(react@19.2.3): resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: @@ -9854,17 +10410,6 @@ packages: minimatch: 5.1.9 dev: true - /recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} - engines: {node: '>= 4'} - dependencies: - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tiny-invariant: 1.3.3 - tslib: 2.8.1 - dev: true - /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -9887,6 +10432,22 @@ packages: which-builtin-type: 1.2.1 dev: false + /regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + dependencies: + regex-utilities: 2.3.0 + dev: true + + /regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + dev: true + + /regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + dependencies: + regex-utilities: 2.3.0 + dev: true + /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -9904,20 +10465,6 @@ packages: set-function-name: 2.0.2 dev: false - /registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} - dependencies: - rc: 1.2.8 - safe-buffer: 5.2.1 - dev: true - - /registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} - engines: {node: '>=0.10.0'} - dependencies: - rc: 1.2.8 - dev: true - /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true @@ -9958,11 +10505,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - /require-in-the-middle@8.0.1: resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} @@ -10014,6 +10556,7 @@ packages: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: false /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -10046,6 +10589,10 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + dev: true + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} dependencies: @@ -10065,6 +10612,10 @@ packages: dev: true optional: true + /robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + dev: true + /rollup@4.39.0: resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -10132,6 +10683,15 @@ packages: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} dev: false + /roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + dev: true + /rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} dev: true @@ -10141,6 +10701,10 @@ packages: dependencies: queue-microtask: 1.2.3 + /rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: true + /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -10181,6 +10745,7 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 + dev: false /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -10206,6 +10771,10 @@ packages: /scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + /search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + dev: true + /semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} requiresBuild: true @@ -10241,38 +10810,6 @@ packages: dev: true optional: true - /serve-handler@6.1.6: - resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} - dependencies: - bytes: 3.0.0 - content-disposition: 0.5.2 - mime-types: 2.1.18 - minimatch: 3.1.2 - path-is-inside: 1.0.2 - path-to-regexp: 3.3.0 - range-parser: 1.2.0 - dev: true - - /serve@14.2.5: - resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==} - engines: {node: '>= 14'} - hasBin: true - dependencies: - '@zeit/schemas': 2.36.0 - ajv: 8.12.0 - arg: 5.0.2 - boxen: 7.0.0 - chalk: 5.0.1 - chalk-template: 0.4.0 - clipboardy: 3.0.0 - compression: 1.8.1 - is-port-reachable: 4.0.0 - serve-handler: 6.1.6 - update-check: 1.5.4 - transitivePeerDependencies: - - supports-color - dev: true - /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -10290,6 +10827,7 @@ packages: get-intrinsic: 1.3.0 gopd: 1.2.0 has-property-descriptors: 1.0.2 + dev: false /set-function-name@2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} @@ -10320,6 +10858,19 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + dev: true + /side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -10453,6 +11004,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true + /spark-md5@3.0.2: resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} @@ -10478,6 +11033,11 @@ packages: resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} dev: false + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + /sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} requiresBuild: true @@ -10516,23 +11076,6 @@ packages: internal-slot: 1.1.0 dev: false - /storybook@8.6.15(prettier@3.5.3): - resolution: {integrity: sha512-Ob7DMlwWx8s7dMvcQ3xPc02TvUeralb+xX3oaPRk9wY9Hc6M1IBC/7cEoITkSmRS2v38DHubC+mtEKNc1u2gQg==} - hasBin: true - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true - dependencies: - '@storybook/core': 8.6.15(prettier@3.5.3)(storybook@8.6.15) - prettier: 3.5.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -10645,7 +11188,6 @@ packages: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - dev: false /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -10662,11 +11204,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + dev: false /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -10674,20 +11212,14 @@ packages: dependencies: min-indent: 1.0.1 - /strip-indent@4.1.1: - resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} - engines: {node: '>=12'} - dev: true - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true - /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + dev: true + /sublevel-pouchdb@9.0.0: resolution: {integrity: sha512-pX4r8+F7wuts0C81kUJ341h4bl2aRe7qV572FE8X1FMz9VkKlmi2nPD1vfeiOJXz5Y09I4MHjGULAbqvTfQZEQ==} dependencies: @@ -10705,6 +11237,13 @@ packages: - supports-color dev: true + /superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + dependencies: + copy-anything: 4.0.5 + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -10719,6 +11258,7 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: false /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -10733,7 +11273,6 @@ packages: /tabbable@6.4.0: resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - dev: false /tailwind-merge@3.4.0: resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} @@ -10801,10 +11340,6 @@ packages: readable-stream: 3.6.2 dev: true - /tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - dev: true - /tiny-typed-emitter@2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} dev: false @@ -10885,6 +11420,10 @@ packages: punycode: 2.3.1 dev: true + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: true + /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false @@ -10917,15 +11456,6 @@ packages: strip-bom: 3.0.0 dev: false - /tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: false @@ -10933,6 +11463,7 @@ packages: /tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} requiresBuild: true + dev: false /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -11035,11 +11566,6 @@ packages: engines: {node: '>=8'} dev: false - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true - /type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} @@ -11187,7 +11713,6 @@ packages: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} dependencies: '@types/unist': 3.0.3 - dev: false /unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -11195,18 +11720,22 @@ packages: '@types/unist': 3.0.3 dev: false + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.3 + dev: true + /unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: '@types/unist': 3.0.3 - dev: false /unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - dev: false /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -11214,7 +11743,6 @@ packages: '@types/unist': 3.0.3 unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - dev: false /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -11229,14 +11757,6 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - /unplugin@1.16.1: - resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} - engines: {node: '>=14.0.0'} - dependencies: - acorn: 8.15.0 - webpack-virtual-modules: 0.6.2 - dev: true - /unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} requiresBuild: true @@ -11274,13 +11794,6 @@ packages: escalade: 3.2.0 picocolors: 1.1.1 - /update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} - dependencies: - registry-auth-token: 3.3.2 - registry-url: 3.1.0 - dev: true - /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -11378,25 +11891,15 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.2.0 - is-generator-function: 1.1.2 - is-typed-array: 1.1.15 - which-typed-array: 1.1.19 + /uuid@14.0.1: + resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} + hasBin: true dev: true /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true - /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -11420,11 +11923,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: false - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true - /verror@1.10.1: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} @@ -11441,7 +11939,6 @@ packages: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - dev: false /vfile-reporter@8.1.1: resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} @@ -11475,7 +11972,6 @@ packages: dependencies: '@types/unist': 3.0.3 vfile-message: 4.0.3 - dev: false /vite@5.4.17(@types/node@22.19.3): resolution: {integrity: sha512-5+VqZryDj4wgCs55o9Lp+p8GE78TLVg0lasCH5xFZ4jacZjtqZa6JUw9/p0WeAojaOfncSM6v77InkFPGnvPvg==} @@ -11565,6 +12061,76 @@ packages: fsevents: 2.3.3 dev: true + /vitepress-plugin-mermaid@2.0.17(mermaid@11.15.0)(vitepress@1.6.4): + resolution: {integrity: sha512-IUzYpwf61GC6k0XzfmAmNrLvMi9TRrVRMsUyCA8KNXhg/mQ1VqWnO0/tBVPiX5UoKF1mDUwqn5QV4qAJl6JnUg==} + peerDependencies: + mermaid: 10 || 11 + vitepress: ^1.0.0 || ^1.0.0-alpha + dependencies: + mermaid: 11.15.0 + vitepress: 1.6.4(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3)(typescript@5.5.4) + optionalDependencies: + '@mermaid-js/mermaid-mindmap': 9.3.0 + dev: true + + /vitepress@1.6.4(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3)(typescript@5.5.4): + resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.55.1)(react-dom@19.2.3)(react@19.2.3)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.87 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.17)(vue@3.5.38) + '@vue/devtools-api': 7.7.9 + '@vue/shared': 3.5.38 + '@vueuse/core': 12.8.2(typescript@5.5.4) + '@vueuse/integrations': 12.8.2(focus-trap@7.8.0)(typescript@5.5.4) + focus-trap: 7.8.0 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 2.5.0 + vite: 5.4.17(@types/node@22.19.3) + vue: 3.5.38(typescript@5.5.4) + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + /vitest@4.0.17(@opentelemetry/api@1.9.1): resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -11708,6 +12274,22 @@ packages: engines: {node: '>=0.10.0'} dev: false + /vue@3.5.38(typescript@5.5.4): + resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-sfc': 3.5.38 + '@vue/runtime-dom': 3.5.38 + '@vue/server-renderer': 3.5.38(vue@3.5.38) + '@vue/shared': 3.5.38 + typescript: 5.5.4 + dev: true + /vuvuzela@1.0.3: resolution: {integrity: sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==} @@ -11744,10 +12326,6 @@ packages: engines: {node: '>=12'} dev: true - /webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - dev: true - /whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -11826,6 +12404,7 @@ packages: get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 + dev: false /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -11856,13 +12435,6 @@ packages: string-width: 4.2.3 dev: true - /widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - dev: true - /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -11981,4 +12553,3 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - dev: false From 0ed535e652385fc46b7a295b9026febad4da5d98 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:29:02 +0700 Subject: [PATCH 2/7] feat: add Gitea social link to documentation and update local development instructions in README --- README.md | 8 +++++--- apps/docs-dev/src/.vitepress/config.mts | 9 ++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4c77929..c61ed22 100644 --- a/README.md +++ b/README.md @@ -31,11 +31,13 @@ This repository utilizes a monorepo architecture to seamlessly share core system > **Internal Documentation Hub** > All documentation, installation guides, architectural deep-dives, and API references are hosted internally via our VitePress application. -**To access the documentation and get started, run:** +**Access Documentation:** +* **View in Git Repository (Raw Markdown):** [Read Overview Documentation](apps/docs-dev/src/overview.md) +* **Run Documentation Locally:** ```bash -pnpm --filter docs-dev dev -``` + pnpm --filter docs-dev dev + ``` --- diff --git a/apps/docs-dev/src/.vitepress/config.mts b/apps/docs-dev/src/.vitepress/config.mts index 5ed0a57..3d93be0 100644 --- a/apps/docs-dev/src/.vitepress/config.mts +++ b/apps/docs-dev/src/.vitepress/config.mts @@ -51,7 +51,14 @@ const config = withMermaid( ], outline: { level: [2, 3] }, - socialLinks: [], + socialLinks: [ + { + icon: { + svg: 'Gitea' + }, + link: 'https://git.eigen.co.id/eigen/fe-monorepo-template' + } + ] }, // Mermaid configuration From 3b682736f845111970f5311825d087a08980ca21 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:40:39 +0700 Subject: [PATCH 3/7] docs: fix markdown formatting and remove redundant heading in README --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c61ed22..42738ac 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,11 @@ This repository utilizes a monorepo architecture to seamlessly share core system > **Internal Documentation Hub** > All documentation, installation guides, architectural deep-dives, and API references are hosted internally via our VitePress application. -**Access Documentation:** - * **View in Git Repository (Raw Markdown):** [Read Overview Documentation](apps/docs-dev/src/overview.md) * **Run Documentation Locally:** ```bash - pnpm --filter docs-dev dev - ``` +pnpm --filter docs-dev dev +``` --- From f05e1c6d0529b8a9293cd113841081a407ecf1bb Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:53:48 +0700 Subject: [PATCH 4/7] docs: expand monorepo architectural documentation and add Git link to homepage --- apps/docs-dev/src/index.md | 3 ++ apps/docs-dev/src/overview.md | 80 +++++++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/apps/docs-dev/src/index.md b/apps/docs-dev/src/index.md index 5090758..93268af 100644 --- a/apps/docs-dev/src/index.md +++ b/apps/docs-dev/src/index.md @@ -11,6 +11,9 @@ hero: - theme: alt text: UI Components link: /packages/ui/ + - theme: alt + text: View on Git + link: https://git.eigen.co.id/eigen/fe-monorepo-template features: - title: Centralized Source of Truth details: All documentation for apps and packages is unified here. diff --git a/apps/docs-dev/src/overview.md b/apps/docs-dev/src/overview.md index 6146a4f..70f3124 100644 --- a/apps/docs-dev/src/overview.md +++ b/apps/docs-dev/src/overview.md @@ -31,25 +31,55 @@ The monorepo is organized into **Apps** (deployable applications) and **Packages ### 1. `apps/web` The main consumer-facing application. + * Imports business logic from `@repo/utils` * Uses shared UI components from `@repo/ui` -**Tech Stack**: React, Vite, TypeScript, Tailwind CSS +**Tech Stack**: + +* React +* Vite +* TypeScript +* Tailwind CSS ### 2. `apps/desktop` The **Electron desktop wrapper** that embeds `apps/web` for native desktop experiences. + * In **development**: loads the Vite dev server with full hot reload * In **production**: serves the static web build via a secure custom `app://` protocol * Configurable target app via `.env` (can wrap `apps/web`, `apps/docs-dev`, or any future app) -**Tech Stack**: Electron 33.x, electron-vite, electron-builder, electron-updater +**Tech Stack**: + +* Electron 33.x +* electron-vite +* electron-builder +* electron-updater + +**Key Capabilities**: + +| Feature | Description | +|---|---| +| 🖨️ Native Printing | Silent and direct printing via secure IPC bridge | +| 🔄 Auto-Updates | Background downloads via GitHub Releases (switchable to S3) | +| 🔒 Secure IPC Bridge | `contextIsolation: true`, `nodeIntegration: false`, `sandbox: true` | +| 🌐 Custom Protocol | `app://` serves static files with SPA routing fallback to `index.html` | +| 🛡️ CORS Bypass | Transparent Origin header rewriting for cloud API calls | ### 3. `apps/landing` The **public promotional website** — a standalone SPA for the company profile and marketing pages. + * Deployed independently to the web (e.g., Vercel) — no interaction with Electron * Consumes shared UI components from `@repo/ui` and utilities from `@repo/utils` * Locked to port **3000** (`strictPort: true`) — evacuated from the `517x` range to avoid `electron-vite` port collisions +**Tech Stack**: + +* React +* Vite +* TypeScript +* Tailwind CSS v4 + ### 4. `apps/docs-dev` An isolated environment for developing and documenting UI components. * Ensures components in `@repo/ui` are built and tested independently @@ -59,25 +89,69 @@ An isolated environment for developing and documenting UI components. ### 5. `packages/core-api` The **platform-agnostic API engine** for the monorepo. Provides an isolated HTTP client factory, a unified observability pipeline (Grafana Faro + OpenTelemetry), and a generic data services engine. +* Consumed by `apps/web`, `apps/landing`, and any future workspace +* Centralizes all `@grafana/faro-*` and `@opentelemetry/*` dependencies +* Provides plug-and-play telemetry via `initTelemetry()` + `faroAdapter` + +**Tech Stack**: + +* Axios (isolated instances, zero singleton pollution) +* Grafana Faro (RUM, Logs, Error tracking) +* OpenTelemetry (custom spans, distributed tracing) +* TypeScript (strict types, module augmentation) + +**Key Capabilities**: + +| Feature | Description | +|---|---| +| 🏭 HTTP Client Factory | `createHttpClient()` — per-app isolated Axios instances with interceptor hooks | +| 📡 Faro/Loki Baseline | Every request automatically pushes structured logs with `module.key` and `module.action` | +| 🎯 Custom Spans (Opt-In) | `telemetryContext.customSpanName` creates explicit OTel spans visible in Grafana Tempo | +| 🛡️ Error Normalization | `ApiError.fromAxiosError()` — structured, serializable error codes for all failure modes | +| 📦 Data Services Engine | `CommonRemoteDataServices` — full CRUD + lifecycle operations with zero boilerplate | + ### 6. `packages/core-storage` The **Enterprise-grade storage engine** for the monorepo. Provides a unified, Promise-based interface for interacting with browser storage (`localStorage` and `IndexedDB`). Enforces strict type safety, prevents key collisions via a centralized registry, and automatically provides **AES encryption at rest** for sensitive payloads using `@repo/utils`. ### 7. `packages/core-i18n` The **Enterprise Internationalization Architecture** for the monorepo. + Provides a Hybrid Namespace Architecture combining a centralized i18n engine with decentralized, lazy-loaded feature dictionaries. Features strict TypeScript typings (including nested keys), optional backend synchronization with automatic error rollbacks, and a deep-merge mechanism for dynamic tenant-specific vocabulary overrides. +**Key Capabilities**: + +| Feature | Description | +|---|---| +| 🌐 Hybrid Namespaces | Centralized `common` corpus + lazy-loaded feature dictionaries. | +| 🛡️ Strict Typings | Native TS autocomplete for nested paths (e.g., `header.title`) via module augmentation. | +| 🔄 Safe Backend Sync | `changeLanguage` accepts a `syncCallback` with built-in rollback if the API fails. | +| 🏢 Tenant Overrides | `applyTenantOverrides` performs a partial deep-merge to selectively override terminology. | + ### 8. `packages/core-events` The **decoupled Nervous System** for the monorepo. + Provides a highly performant, strictly typed Event Bus (Pub/Sub) powered by `mitt`. It allows independent modules to communicate seamlessly without tightly coupling their codebases or triggering expensive global React tree re-renders. +**Key Capabilities**: + +| Feature | Description | +|---|---| +| 🧩 Zero Coupling | Publishers and subscribers interact via blind events, eliminating direct module imports and circular dependencies. | +| ⚡ Extreme Performance | Enables targeted DOM updates for high-frequency data streams (e.g., WebSockets) without re-rendering parent components. | +| 🧹 Memory Safety | Native `useAppEvent` hook automatically unsubscribes on component unmount, preventing SPA memory leaks. | +| 🛡️ Strict Contracts | Centralized `events.registry.ts` enforces payload shapes via TypeScript, ensuring cross-module data safety. | + ### 9. `packages/utils` Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest. +This package is intended to hold non-UI, cross-cutting logic such as date/time handling, security helpers, and other common utilities. It is designed to be framework-agnostic, predictable, and easy to extend as the system evolves. + ### 10. `packages/ui` Shared UI component library (Buttons, Inputs, Cards, Layouts) with a comprehensive **Form UI Library**. + * Ensures consistent design across all applications -* Designed to be consumed by both web apps and docs +* Designed to be consumed by both web apps and Storybook * **Form UI Library**: 22 RHF-connected Mantine form components with Zod validation and i18n error translation, built via a `withRHF()` HOC factory with `useController` micro-subscriptions and `React.memo` optimization for ERP-scale forms ### 11. `packages/configs` From 8e56e05d1b2872f2466d102d853d10bfd14baeb4 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 14:18:43 +0700 Subject: [PATCH 5/7] feat: redesign documentation landing page with custom theme and updated site navigation --- apps/docs-dev/src/.vitepress/config.mts | 46 +++++----- apps/docs-dev/src/.vitepress/theme/custom.css | 87 +++++++++++++++++++ apps/docs-dev/src/.vitepress/theme/index.ts | 6 ++ apps/docs-dev/src/index.md | 62 +++++++++---- 4 files changed, 163 insertions(+), 38 deletions(-) create mode 100644 apps/docs-dev/src/.vitepress/theme/custom.css create mode 100644 apps/docs-dev/src/.vitepress/theme/index.ts diff --git a/apps/docs-dev/src/.vitepress/config.mts b/apps/docs-dev/src/.vitepress/config.mts index 3d93be0..8b2d764 100644 --- a/apps/docs-dev/src/.vitepress/config.mts +++ b/apps/docs-dev/src/.vitepress/config.mts @@ -3,7 +3,7 @@ import { withMermaid } from 'vitepress-plugin-mermaid' const config = withMermaid( defineConfig({ - title: "Frontend Monorepo Docs", + title: "Frontend Monorepo", description: "Centralized documentation for the Enterprise Frontend Monorepo", themeConfig: { @@ -13,39 +13,39 @@ const config = withMermaid( sidebar: [ { - text: 'Introduction', + text: 'Getting Started', items: [ - { text: 'Overview', link: '/overview' }, - { text: 'Local Setup', link: '/setup' }, + { text: 'Project Overview', link: '/overview' }, + { text: 'Development Setup', link: '/setup' }, ], }, { - text: 'Core Architecture & State', + text: 'Core Architecture', collapsed: false, items: [ - { text: 'Core API Engine', link: '/packages/core-api/' }, - { text: 'Core Events', link: '/packages/core-events/' }, - { text: 'Core Storage', link: '/packages/core-storage/' }, - { text: 'Core Internationalization', link: '/packages/core-i18n/' }, - { text: 'IPC Architecture', link: '/apps/desktop/IPC_ARCHITECTURE' }, + { text: 'API & Domain Logic', link: '/packages/core-api/' }, + { text: 'Event Bus System', link: '/packages/core-events/' }, + { text: 'Storage & Persistence', link: '/packages/core-storage/' }, + { text: 'I18n & Localization', link: '/packages/core-i18n/' }, + ], + }, + { + text: 'UI System', + collapsed: false, + items: [ + { text: 'Overview', link: '/packages/ui/' }, + { text: 'App Layout', link: '/packages/ui/CORE-APP-SHELL' }, + { text: 'Form Primitives', link: '/packages/ui/FORM-COMPONENTS' }, ], }, { - text: 'UI System & Layouts', + text: 'Desktop Ecosystem', collapsed: false, items: [ - { text: 'UI Components Overview', link: '/packages/ui/' }, - { text: 'Core App Shell', link: '/packages/ui/CORE-APP-SHELL' }, - { text: 'Form Components', link: '/packages/ui/FORM-COMPONENTS' }, - ], - }, - { - text: 'Applications & Configuration', - collapsed: false, - items: [ - { text: 'Desktop Application', link: '/apps/desktop/' }, - { text: 'Desktop Configuration', link: '/apps/desktop/CONFIGURATION' }, - { text: 'Desktop Auto Updater', link: '/apps/desktop/AUTO_UPDATER' }, + { text: 'Overview', link: '/apps/desktop/' }, + { text: 'Lifecycle & Configuration', link: '/apps/desktop/CONFIGURATION' }, + { text: 'IPC & Bridge Architecture', link: '/apps/desktop/IPC_ARCHITECTURE' }, + { text: 'Distribution & Auto-Update', link: '/apps/desktop/AUTO_UPDATER' }, ], }, ], diff --git a/apps/docs-dev/src/.vitepress/theme/custom.css b/apps/docs-dev/src/.vitepress/theme/custom.css new file mode 100644 index 0000000..ebaa726 --- /dev/null +++ b/apps/docs-dev/src/.vitepress/theme/custom.css @@ -0,0 +1,87 @@ +/** + * VitePress Custom Theme CSS + * Applying brand color #652ed9 and its variants + */ + +:root { + /* Brand color #652ed9 */ + --vp-c-brand-1: #652ed9; + --vp-c-brand-2: #804aea; + --vp-c-brand-3: #9b6ff8; + --vp-c-brand-soft: rgba(101, 46, 217, 0.16); + + /* Hover states */ + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); + + /* Focus states */ + --vp-custom-block-brand-border: var(--vp-c-brand-1); +} + +.dark { + /* Slightly adjusted variants for dark mode, keeping the primary brand color consistent */ + --vp-c-brand-1: #8a57f3; + --vp-c-brand-2: #7a42ec; + --vp-c-brand-3: #652ed9; + --vp-c-brand-soft: rgba(101, 46, 217, 0.25); +} + +/* Custom Enterprise Section Styles */ +.enterprise-section { + max-width: 1152px; + margin: 0 auto; + padding: 64px 24px; +} +.enterprise-section h2 { + font-size: 2.2em; + font-weight: 700; + margin-bottom: 0.5em; + letter-spacing: -0.02em; + line-height: 1.2; +} +.enterprise-section > p { + font-size: 1.2em; + color: var(--vp-c-text-2); + margin-bottom: 2.5em; + max-width: 700px; +} +.enterprise-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 24px; +} +.enterprise-card { + padding: 32px 24px; + border-radius: 12px; + background-color: var(--vp-c-bg-soft); + border: 1px solid var(--vp-c-divider); + transition: border-color 0.25s, background-color 0.25s, transform 0.25s; +} +.enterprise-card:hover { + border-color: var(--vp-c-brand-1); + transform: translateY(-2px); +} +.enterprise-card h3 { + font-size: 1.25em; + font-weight: 600; + margin-bottom: 0.75em; + color: var(--vp-c-text-1); + display: flex; + align-items: center; + gap: 8px; +} +.enterprise-card h3::before { + content: ''; + display: inline-block; + width: 8px; + height: 8px; + border-radius: 50%; + background-color: var(--vp-c-brand-1); +} +.enterprise-card p { + font-size: 1em; + color: var(--vp-c-text-2); + line-height: 1.6; + margin: 0; +} diff --git a/apps/docs-dev/src/.vitepress/theme/index.ts b/apps/docs-dev/src/.vitepress/theme/index.ts new file mode 100644 index 0000000..15492a8 --- /dev/null +++ b/apps/docs-dev/src/.vitepress/theme/index.ts @@ -0,0 +1,6 @@ +import DefaultTheme from 'vitepress/theme' +import './custom.css' + +export default { + extends: DefaultTheme, +} diff --git a/apps/docs-dev/src/index.md b/apps/docs-dev/src/index.md index 93268af..15eed87 100644 --- a/apps/docs-dev/src/index.md +++ b/apps/docs-dev/src/index.md @@ -1,24 +1,56 @@ --- layout: home + hero: - name: "Frontend Monorepo Template Docs" - text: "Centralized Documentation Engine" - tagline: "Enterprise-ready Web & Desktop architecture documentation." + name: "Frontend Architecture" + text: "Enterprise Monorepo" + tagline: "A scalable, standardized foundation for Web & Desktop applications. Built for performance, consistency, and velocity." actions: - theme: brand text: Get Started - link: /packages/core-api/ + link: /setup - theme: alt - text: UI Components - link: /packages/ui/ - - theme: alt - text: View on Git - link: https://git.eigen.co.id/eigen/fe-monorepo-template + text: View Architecture + link: /overview + features: - - title: Centralized Source of Truth - details: All documentation for apps and packages is unified here. - - title: Markdown Powered - details: Simple to maintain and read. - - title: Built with VitePress - details: Fast, responsive, and reliable documentation engine. + - title: 🧩 Component Library + details: A centralized, highly accessible UI component library built for scale. + link: /packages/ui/ + linkText: Explore Components + - title: 🔌 Core API Engine + details: Robust state management and data fetching patterns across all applications. + link: /packages/core-api/ + linkText: View API Engine + - title: 🌐 Internationalization + details: First-class i18n support built into the core for global reach. + link: /packages/core-i18n/ + linkText: Read i18n Docs + - title: 🖥️ Desktop IPC + details: Secure and performant Inter-Process Communication architecture for desktop apps. + link: /apps/desktop/IPC_ARCHITECTURE + linkText: Explore IPC --- + +
+

Why this Monorepo Exists

+

Building high-end enterprise applications requires strict consistency, shared tooling, and well-defined boundaries. This monorepo serves as the absolute source of truth for our frontend ecosystem.

+ +
+
+

Unified Tooling

+

By enforcing strict linting, formatting, and building patterns at the root, we ensure that every application in the ecosystem adheres to our high standards without duplicate configuration.

+
+ +
+

Shared Domain Logic

+

The separation of UI and Core logic means our web, desktop, and potential mobile applications all share the same state management and event-driven architecture, reducing cognitive load.

+
+ +
+

Accelerated Velocity

+

Stop reinventing the wheel. With a rich library of primitive components and pre-configured Vite/TypeScript environments, teams can start building product features on day one.

+
+
+
+ From 30c95e338b4cb52aa6cfbd84715b54328ed6e795 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:04:23 +0700 Subject: [PATCH 6/7] feat: revamp documentation landing page and update project naming convention --- apps/docs-dev/package.json | 2 +- apps/docs-dev/src/.vitepress/theme/custom.css | 59 ---- apps/docs-dev/src/index.md | 267 ++++++++++++++++-- 3 files changed, 239 insertions(+), 89 deletions(-) diff --git a/apps/docs-dev/package.json b/apps/docs-dev/package.json index c9f71eb..463a9b6 100644 --- a/apps/docs-dev/package.json +++ b/apps/docs-dev/package.json @@ -1,5 +1,5 @@ { - "name": "@repo/docs-dev", + "name": "docs-dev", "version": "0.0.0", "type": "module", "private": true, diff --git a/apps/docs-dev/src/.vitepress/theme/custom.css b/apps/docs-dev/src/.vitepress/theme/custom.css index ebaa726..0d698c6 100644 --- a/apps/docs-dev/src/.vitepress/theme/custom.css +++ b/apps/docs-dev/src/.vitepress/theme/custom.css @@ -26,62 +26,3 @@ --vp-c-brand-3: #652ed9; --vp-c-brand-soft: rgba(101, 46, 217, 0.25); } - -/* Custom Enterprise Section Styles */ -.enterprise-section { - max-width: 1152px; - margin: 0 auto; - padding: 64px 24px; -} -.enterprise-section h2 { - font-size: 2.2em; - font-weight: 700; - margin-bottom: 0.5em; - letter-spacing: -0.02em; - line-height: 1.2; -} -.enterprise-section > p { - font-size: 1.2em; - color: var(--vp-c-text-2); - margin-bottom: 2.5em; - max-width: 700px; -} -.enterprise-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 24px; -} -.enterprise-card { - padding: 32px 24px; - border-radius: 12px; - background-color: var(--vp-c-bg-soft); - border: 1px solid var(--vp-c-divider); - transition: border-color 0.25s, background-color 0.25s, transform 0.25s; -} -.enterprise-card:hover { - border-color: var(--vp-c-brand-1); - transform: translateY(-2px); -} -.enterprise-card h3 { - font-size: 1.25em; - font-weight: 600; - margin-bottom: 0.75em; - color: var(--vp-c-text-1); - display: flex; - align-items: center; - gap: 8px; -} -.enterprise-card h3::before { - content: ''; - display: inline-block; - width: 8px; - height: 8px; - border-radius: 50%; - background-color: var(--vp-c-brand-1); -} -.enterprise-card p { - font-size: 1em; - color: var(--vp-c-text-2); - line-height: 1.6; - margin: 0; -} diff --git a/apps/docs-dev/src/index.md b/apps/docs-dev/src/index.md index 15eed87..fbb548b 100644 --- a/apps/docs-dev/src/index.md +++ b/apps/docs-dev/src/index.md @@ -14,43 +14,252 @@ hero: link: /overview features: - - title: 🧩 Component Library - details: A centralized, highly accessible UI component library built for scale. - link: /packages/ui/ - linkText: Explore Components - - title: 🔌 Core API Engine - details: Robust state management and data fetching patterns across all applications. + - title: 🧩 App Layout Engine + details: Core App Shell wrapping Mantine for rapid, consistent layout creation across all products. + link: /packages/ui/CORE-APP-SHELL + linkText: Explore App Shell + - title: 📝 Form Primitives + details: RHF + Zod + Mantine components designed for O(1) render cost and deep type safety. + link: /packages/ui/FORM-COMPONENTS + linkText: View Forms + - title: 🖥️ Desktop Ecosystem + details: Complete Electron integration with secure Inter-Process Communication (IPC) and Bridge Architecture. + link: /apps/desktop/ + linkText: Desktop Docs + - title: 🔌 Core Architecture + details: Robust state management, Event Bus, first-class i18n, and unified Storage layers. link: /packages/core-api/ - linkText: View API Engine - - title: 🌐 Internationalization - details: First-class i18n support built into the core for global reach. - link: /packages/core-i18n/ - linkText: Read i18n Docs - - title: 🖥️ Desktop IPC - details: Secure and performant Inter-Process Communication architecture for desktop apps. - link: /apps/desktop/IPC_ARCHITECTURE - linkText: Explore IPC + linkText: Explore Core --- - -
-

Why this Monorepo Exists

-

Building high-end enterprise applications requires strict consistency, shared tooling, and well-defined boundaries. This monorepo serves as the absolute source of truth for our frontend ecosystem.

- -
-
+
+
+
+

Why this Monorepo Exists

+

Building high-end enterprise applications requires strict consistency, shared tooling, and well-defined boundaries. This monorepo serves as the absolute source of truth for our frontend ecosystem.

+
+
+
+
+ +

Unified Tooling

-

By enforcing strict linting, formatting, and building patterns at the root, we ensure that every application in the ecosystem adheres to our high standards without duplicate configuration.

+

By enforcing strict linting, formatting, and building patterns at the root (powered by Turborepo), we ensure that every application in the ecosystem adheres to our high standards without duplicate configuration.

- -
+
+
+ +

Shared Domain Logic

-

The separation of UI and Core logic means our web, desktop, and potential mobile applications all share the same state management and event-driven architecture, reducing cognitive load.

+

The separation of UI components and Core logic guarantees that our web and desktop applications all share the exact same state management and event-driven architecture, drastically reducing cognitive load.

- -
+
+
+ +

Accelerated Velocity

-

Stop reinventing the wheel. With a rich library of primitive components and pre-configured Vite/TypeScript environments, teams can start building product features on day one.

+

With a rich library of 22+ advanced Form components, pre-configured Vite/TypeScript environments, and an enterprise App Shell, teams can stop reinventing the wheel and start building product features on day one.

+ \ No newline at end of file From 3d56eed2b8d77674163f5627725a47d61c8d2753 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:35:14 +0700 Subject: [PATCH 7/7] feat: update docs site branding with custom logo, favicon, and elegant navbar styling --- apps/docs-dev/src/.vitepress/config.mts | 8 ++- apps/docs-dev/src/.vitepress/theme/custom.css | 52 +++++++++++++++++++ apps/docs-dev/src/public/favicon.svg | 6 +++ apps/docs-dev/src/public/logo.svg | 6 +++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 apps/docs-dev/src/public/favicon.svg create mode 100644 apps/docs-dev/src/public/logo.svg diff --git a/apps/docs-dev/src/.vitepress/config.mts b/apps/docs-dev/src/.vitepress/config.mts index 8b2d764..e995515 100644 --- a/apps/docs-dev/src/.vitepress/config.mts +++ b/apps/docs-dev/src/.vitepress/config.mts @@ -3,10 +3,14 @@ import { withMermaid } from 'vitepress-plugin-mermaid' const config = withMermaid( defineConfig({ - title: "Frontend Monorepo", + // title: "Frontend Monorepo", + title: 'Frontend Arch', description: "Centralized documentation for the Enterprise Frontend Monorepo", - + head: [ + ['link', { rel: 'icon', href: '/favicon.svg' }] // Jika Anda menggunakan favicon.svg + ], themeConfig: { + logo: '/logo.svg', nav: [ { text: 'Docs', link: '/overview' }, ], diff --git a/apps/docs-dev/src/.vitepress/theme/custom.css b/apps/docs-dev/src/.vitepress/theme/custom.css index 0d698c6..5746fe5 100644 --- a/apps/docs-dev/src/.vitepress/theme/custom.css +++ b/apps/docs-dev/src/.vitepress/theme/custom.css @@ -26,3 +26,55 @@ --vp-c-brand-3: #652ed9; --vp-c-brand-soft: rgba(101, 46, 217, 0.25); } + +/* Sesuaikan ukuran logo di navbar */ +/* .VPNavBar .logo { + height: 32px; +} + +.VPNavBar .VPNavBarTitle{ + +} */ + +/* ========================================================================== + OPTIMASI NAVBAR TITLE & LOGO (ELEGANT ALIGNMENT) + ========================================================================== */ +.VPNavBar .VPNavBarTitle { + display: flex; + align-items: center; /* Memastikan logo & teks sejajar sempurna secara vertikal */ + gap: 12px; /* Spasi yang lebih longgar dan elegan antara logo & teks */ + padding: 0 16px; /* Memberikan ruang napas di dalam kontainer title */ +} + +/* ========================================================================== + ELEGANT HARMONIOUS GRADIENT (Subtle Mode-Aware) + ========================================================================== */ +.VPNavBar .VPNavBarTitle .title { + /* LIGHT MODE: Gradien dari warna Brand gelap ke warna Brand terang */ + /* Kita hindari hitam pekat, gunakan ungu yang lebih dalam */ + background: linear-gradient(135deg, #4b23a6 0%, var(--vp-c-brand-1) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + transition: all 0.3s ease; +} + +/* DARK MODE: Gradien dari ungu sangat muda ke warna Brand */ +.dark .VPNavBar .VPNavBarTitle .title { + /* Kita kurangi dominasi putih dengan menggunakan ungu yang sangat terang */ + background: linear-gradient(135deg, #c5a8ff 30%, var(--vp-c-brand-1) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + /* Glow diperhalus agar tidak terlalu menyilaukan */ + filter: drop-shadow(0 0 8px rgba(101, 46, 217, 0.2)); +} + +/* Hover effect yang lebih kalem */ +.VPNavBar .VPNavBarTitle .title:hover { + filter: drop-shadow(0 0 12px rgba(101, 46, 217, 0.4)); +} + +.VPNavBar .logo { + height: 28px; /* Menyeimbangkan ukuran logo dengan tinggi teks */ + width: 28px; + margin-right: 0; /* Margin sudah digantikan oleh 'gap' pada parent */ +} \ No newline at end of file diff --git a/apps/docs-dev/src/public/favicon.svg b/apps/docs-dev/src/public/favicon.svg new file mode 100644 index 0000000..4328d48 --- /dev/null +++ b/apps/docs-dev/src/public/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs-dev/src/public/logo.svg b/apps/docs-dev/src/public/logo.svg new file mode 100644 index 0000000..7abbacf --- /dev/null +++ b/apps/docs-dev/src/public/logo.svg @@ -0,0 +1,6 @@ + + + + + +