From 674ec348ceebf5920e91c687955f0d25d661f21d Mon Sep 17 00:00:00 2001 From: Jarvis Date: Thu, 16 Jul 2026 20:25:09 +0000 Subject: [PATCH] feat: Modern styling, draw.io integration, and C4 architecture docs Styling: - Dark-first design (Vercel/Linear inspired) with Geist font - Custom CSS with full --ifm- token overrides - Glassmorphic navbar, refined sidebar, modern tables - Gradient hero with animated glow, app cards, C4 section - Custom badge, tag, and callout components - Announcement bar, TOC config, dark scrollbar draw.io: - Added docusaurus-plugin-drawio + raw-loader - SMP full pipeline diagram (smp-pipeline.drawio) - Embedded in architecture overview Mermaid: - Added @docusaurus/theme-mermaid - C4Context, C4Container, C4Component diagrams - Sequence and graph diagrams in architecture C4 Architecture (Stock Market Professional): - L1 Context: system in the world, actors, external systems - L2 Containers: Data Ingestor, Analysis Engine, Signal Generator, TimescaleDB, Notifier - L3 Components: deep component breakdown with mermaid C4Component diagrams Other: - Sidebar restructured with C4 section and Modules section - Homepage rebuilt as modern dark landing page --- .../c4/components.md | 112 +++ .../c4/containers.md | 71 ++ .../stock-market-professional/c4/context.md | 50 + .../architecture/diagrams/smp-pipeline.drawio | 94 ++ docs/architecture/overview.md | 76 +- docs/intro/index.md | 2 +- docusaurus.config.ts | 93 +- package.json | 3 + pnpm-lock.yaml | 880 ++++++++++++++++++ sidebars.ts | 45 +- src/css/custom.css | 378 +++++++- src/pages/index.module.css | 280 +++++- src/pages/index.tsx | 130 ++- static/diagrams/smp-pipeline.drawio | 94 ++ 14 files changed, 2164 insertions(+), 144 deletions(-) create mode 100644 docs/applications/stock-market-professional/c4/components.md create mode 100644 docs/applications/stock-market-professional/c4/containers.md create mode 100644 docs/applications/stock-market-professional/c4/context.md create mode 100644 docs/architecture/diagrams/smp-pipeline.drawio create mode 100644 static/diagrams/smp-pipeline.drawio diff --git a/docs/applications/stock-market-professional/c4/components.md b/docs/applications/stock-market-professional/c4/components.md new file mode 100644 index 0000000..ce6a3e3 --- /dev/null +++ b/docs/applications/stock-market-professional/c4/components.md @@ -0,0 +1,112 @@ +--- +sidebar_position: 3 +--- + +# L3 — Components + +> **C4 Level 3**: Zooms into the key containers and shows their internal modules, classes, and responsibilities. + +:::info C4 Model — Level 3 +The Component diagram answers: *What are the major structural elements inside each container?* +::: + +## Analysis Engine — Component Diagram + +```mermaid +C4Component + title Components — Analysis Engine + + Container_Ext(tsdb, "Market Data Store", "SQLite / TimescaleDB", "OHLCV candles") + Container_Ext(signalGen, "Signal Generator", "Python", "Consumes indicator snapshots") + + Container_Boundary(analyser, "Analysis Engine") { + Component(candleLoader, "Candle Loader", "pandas", "Loads recent OHLCV windows from DB for each symbol and timeframe.") + Component(trendEngine, "Trend Engine", "pandas-ta", "Computes EMA, MACD, ADX, Parabolic SAR.") + Component(momentumEngine, "Momentum Engine", "pandas-ta", "Computes RSI, Stochastic, CCI, Williams %R.") + Component(volatilityEngine, "Volatility Engine", "pandas-ta", "Computes Bollinger Bands, ATR, Keltner Channels.") + Component(volumeEngine, "Volume Engine", "pandas-ta", "Computes VWAP, OBV, Volume Profile.") + Component(patternRecog, "Pattern Recogniser", "ta-lib / custom", "Detects candlestick and chart patterns.") + Component(confluenceScorer, "Confluence Scorer", "Python", "Weights and combines indicator signals into a 0–1 confluence score.") + Component(snapshotWriter, "Snapshot Writer", "pandas / SQLAlchemy", "Persists indicator snapshots to DB for the signal generator.") + } + + Rel(candleLoader, tsdb, "Reads OHLCV", "SQL") + Rel(trendEngine, candleLoader, "Reads candle frame") + Rel(momentumEngine, candleLoader, "Reads candle frame") + Rel(volatilityEngine, candleLoader, "Reads candle frame") + Rel(volumeEngine, candleLoader, "Reads candle frame") + Rel(patternRecog, candleLoader, "Reads candle frame") + Rel(confluenceScorer, trendEngine, "Reads signals") + Rel(confluenceScorer, momentumEngine, "Reads signals") + Rel(confluenceScorer, volatilityEngine, "Reads signals") + Rel(confluenceScorer, volumeEngine, "Reads signals") + Rel(confluenceScorer, patternRecog, "Reads patterns") + Rel(snapshotWriter, confluenceScorer, "Reads scored snapshot") + Rel(snapshotWriter, tsdb, "Writes snapshots", "SQL") + Rel(signalGen, snapshotWriter, "Reads snapshots", "SQL") +``` + +## Signal Generator — Component Diagram + +```mermaid +C4Component + title Components — Signal Generator + + Container_Ext(tsdb, "Market Data Store", "TimescaleDB", "Indicator snapshots") + Container_Ext(newsApi, "Economic Calendar API", "REST", "High-impact events") + Container_Ext(notifier, "Notifier", "Python", "Receives final signals") + + Container_Boundary(signalGen, "Signal Generator") { + Component(snapshotReader, "Snapshot Reader", "SQLAlchemy", "Loads latest indicator snapshots per symbol.") + Component(biasFilter, "Bias Filter", "Python", "Determines directional bias (bullish/bearish/neutral) per pair from higher-TF trend.") + Component(setupScanner, "Setup Scanner", "Python", "Identifies candidate setups where confluence score ≥ 0.65.") + Component(riskCalc, "Risk Calculator", "Python", "Calculates entry, stop-loss, take-profit; validates R:R ≥ 1.5.") + Component(newsFilter, "News Filter", "Python / requests", "Rejects signals within 30 min of high-impact economic events.") + Component(correlFilter, "Correlation Filter", "Python", "Prevents conflicting signals on correlated pairs (e.g. EUR/USD + GBP/USD both long).") + Component(dailyLimitGuard, "Daily Limit Guard", "Python", "Enforces max 3 signals per day hard cap.") + Component(signalAssembler, "Signal Assembler", "Python", "Packages final signals with metadata, reasoning, and time window.") + } + + Rel(snapshotReader, tsdb, "Reads snapshots", "SQL") + Rel(biasFilter, snapshotReader, "Reads higher-TF data") + Rel(setupScanner, snapshotReader, "Reads scored snapshots") + Rel(setupScanner, biasFilter, "Applies directional filter") + Rel(riskCalc, setupScanner, "Calculates levels per setup") + Rel(newsFilter, newsApi, "Fetches upcoming events", "REST") + Rel(newsFilter, riskCalc, "Filters out news-window setups") + Rel(correlFilter, newsFilter, "Deduplicates correlated setups") + Rel(dailyLimitGuard, correlFilter, "Enforces ≤3 cap") + Rel(signalAssembler, dailyLimitGuard, "Assembles final signals") + Rel(notifier, signalAssembler, "Receives signals for delivery") +``` + +## Data Ingestor — Component Breakdown + +| Component | Responsibility | +|---|---| +| **Source Router** | Selects primary/fallback data source per symbol | +| **REST Poller** | Fetches 1m candles from REST API on schedule | +| **WS Stream Client** | Maintains WebSocket connection for real-time tick data | +| **Normaliser** | Maps source-specific field names → unified OHLCV schema | +| **Gap Detector** | Identifies missing candles, triggers backfill | +| **Backfiller** | Fetches historical data to fill detected gaps | +| **Rate Limiter** | Tracks and respects per-API-key rate limits | +| **Health Reporter** | Emits data freshness metrics; alerts on stale data | + +## Confluence Scoring — Detail + +```python +# Scoring weights (sum = 1.0) +WEIGHTS = { + 'trend_alignment': 0.30, # EMA cross, MACD, ADX + 'momentum': 0.25, # RSI, Stochastic, CCI + 'volume': 0.20, # VWAP, OBV + 'pattern': 0.15, # Candlestick / chart patterns + 'key_level': 0.10, # Support/resistance proximity +} + +MINIMUM_CONFLUENCE = 0.65 # Hard threshold +MINIMUM_RR_RATIO = 1.5 # Risk/reward hard floor +MAX_DAILY_SIGNALS = 3 # Hard daily cap +MAX_HOLD_MINUTES = 30 # Hard position time limit +``` diff --git a/docs/applications/stock-market-professional/c4/containers.md b/docs/applications/stock-market-professional/c4/containers.md new file mode 100644 index 0000000..a82fcde --- /dev/null +++ b/docs/applications/stock-market-professional/c4/containers.md @@ -0,0 +1,71 @@ +--- +sidebar_position: 2 +--- + +# L2 — Containers + +> **C4 Level 2**: Zooms into Stock Market Professional and shows its deployable units — services, databases, and schedulers. + +:::info C4 Model — Level 2 +The Container diagram answers: *What are the high-level technical building blocks, and how do they talk to each other?* +::: + +## Container Diagram + +```mermaid +C4Container + title Container Diagram — Stock Market Professional + + Person(trader, "Trader", "Reviews signals, executes manually") + + System_Boundary(smp, "Stock Market Professional") { + Container(ingestor, "Data Ingestor", "Python / APScheduler", "Polls market data APIs on schedule, normalises OHLCV candles, detects gaps.") + Container(analyser, "Analysis Engine", "Python / pandas-ta", "Applies technical indicators and pattern recognition on latest candle data.") + Container(signalGen, "Signal Generator", "Python", "Scores setups by confluence, filters by risk rules, produces ≤3 daily signals.") + Container(scheduler, "Job Scheduler", "APScheduler / cron", "Orchestrates pipeline runs: ingest every minute, analyse every 5 min, generate plan pre-market.") + ContainerDb(tsdb, "Market Data Store", "SQLite / TimescaleDB", "Stores normalised OHLCV candles, indicator snapshots, and signal history.") + Container(notifier, "Notifier", "Python / Discord Webhook", "Formats and delivers the daily trading plan and intraday alerts.") + } + + System_Ext(marketData, "Market Data APIs", "Yahoo Finance, Alpha Vantage, Polygon") + System_Ext(discord, "Discord", "Signal delivery") + System_Ext(newsApi, "Economic Calendar API", "Forex Factory, Investing.com") + + Rel(scheduler, ingestor, "Triggers", "Internal call") + Rel(scheduler, analyser, "Triggers", "Internal call") + Rel(scheduler, signalGen, "Triggers", "Internal call") + Rel(ingestor, marketData, "Fetches OHLCV", "REST / WS") + Rel(ingestor, tsdb, "Writes candles", "SQL") + Rel(analyser, tsdb, "Reads candles", "SQL") + Rel(analyser, tsdb, "Writes indicator snapshots", "SQL") + Rel(signalGen, tsdb, "Reads snapshots", "SQL") + Rel(signalGen, newsApi, "Checks economic calendar", "REST") + Rel(signalGen, notifier, "Passes signals", "In-process") + Rel(notifier, discord, "Posts daily plan", "Webhook") + Rel(trader, discord, "Reads signals", "Discord UI") +``` + +## Containers Inventory + +| Container | Technology | Responsibility | +|---|---|---| +| **Data Ingestor** | Python, requests, websockets | Poll & normalise market data | +| **Analysis Engine** | Python, pandas, pandas-ta, ta-lib | Technical indicators + pattern recognition | +| **Signal Generator** | Python | Confluence scoring, risk rules, signal assembly | +| **Job Scheduler** | APScheduler | Pipeline orchestration & timing | +| **Market Data Store** | SQLite (dev) / TimescaleDB (prod) | Persist OHLCV, indicators, signals | +| **Notifier** | Python, Discord Webhook | Format and deliver signals | + +## Deployment + +All containers run as a single **Python process** in development (scheduler + all modules), and can be split into separate Docker containers in production: + +``` +docker/ +├── ingestor/ # Data poller container +├── analyser/ # Analysis worker container +├── signal-gen/ # Signal generation + notifier +└── timescaledb/ # Database container +``` + +The CI pipeline (Gitea Actions) builds images and pushes to the Zot container registry at `lego-cloud.eu:30264`. diff --git a/docs/applications/stock-market-professional/c4/context.md b/docs/applications/stock-market-professional/c4/context.md new file mode 100644 index 0000000..9d38377 --- /dev/null +++ b/docs/applications/stock-market-professional/c4/context.md @@ -0,0 +1,50 @@ +--- +sidebar_position: 1 +--- + +# L1 — System Context + +> **C4 Level 1**: Shows how Stock Market Professional fits into the world — who uses it, and what external systems it depends on. + +:::info C4 Model — Level 1 +The Context diagram answers: *What does this system do, and who / what interacts with it?* +::: + +## Context Diagram + +```mermaid +C4Context + title System Context — Stock Market Professional + + Person(trader, "Trader (Lego)", "Human operator who reviews signals and executes trades manually.") + + System(smp, "Stock Market Professional", "Monitors markets, runs technical analysis, and emits daily trading signals.") + + System_Ext(marketData, "Market Data Provider", "Real-time & historical price feeds (Yahoo Finance, Alpha Vantage, Polygon.io)") + System_Ext(discord, "Discord", "Signal delivery channel — daily trading plans posted to a server.") + System_Ext(broker, "Broker / Trading Platform", "Where the trader manually executes trades (e.g. Interactive Brokers, MetaTrader).") + System_Ext(newsApi, "Economic Calendar / News API", "High-impact event feed used to filter signals around news releases.") + + Rel(trader, smp, "Reviews signals and trading plan") + Rel(smp, marketData, "Fetches OHLCV data", "REST / WebSocket") + Rel(smp, discord, "Posts daily plan & alerts", "Webhook / Bot API") + Rel(smp, newsApi, "Queries upcoming events", "REST API") + Rel(trader, broker, "Executes trades manually", "Web UI / API") +``` + +## Actors & Systems + +| Entity | Type | Role | +|---|---|---| +| Trader (Lego) | Person | Reviews daily signal plan, executes trades manually | +| Market Data Provider | External System | Source of truth for price data | +| Discord | External System | Primary delivery channel for signals | +| Broker / Trading Platform | External System | Where actual trades happen (out of scope) | +| Economic Calendar API | External System | News filter to avoid high-impact event windows | + +## Key Constraints + +- **No auto-trading** — all order execution is manual +- **Signal limit** — max **3 signals per day** to enforce quality +- **Hold time** — max **30 minutes** per position (scalping / intraday) +- **Manual review** — trader has final say on all entries diff --git a/docs/architecture/diagrams/smp-pipeline.drawio b/docs/architecture/diagrams/smp-pipeline.drawio new file mode 100644 index 0000000..1c6da14 --- /dev/null +++ b/docs/architecture/diagrams/smp-pipeline.drawio @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 4c2b592..f550b8e 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -6,47 +6,67 @@ sidebar_position: 1 ## Overview -All SKIC Playground applications share a common infrastructure pattern: +All SKIC Playground applications share a common infrastructure built on TrueNAS SCALE and Gitea. -``` -┌─────────────────────────────────────────────────────┐ -│ TrueNAS SCALE │ -│ │ -│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ -│ │ Gitea │ │ Registry │ │ App Containers │ │ -│ │ + CI/CD │ │ (Zot) │ │ │ │ -│ └──────────┘ └──────────┘ └──────────────────┘ │ -│ │ -│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ -│ │Keycloak │ │ Hermes │ │ Monitoring │ │ -│ │ (Auth) │ │ (Agent) │ │ │ │ -│ └──────────┘ └──────────┘ └──────────────────┘ │ -└─────────────────────────────────────────────────────┘ +## Full Pipeline — Interactive Diagram + +import Drawio from '@theme/Drawio'; +import smpPipeline from '!!raw-loader!./diagrams/smp-pipeline.drawio'; + + + +## Infrastructure + +```mermaid +graph TB + subgraph TrueNAS["🖥 TrueNAS SCALE — lego-cloud.eu"] + Gitea["🗂 Gitea\nSource + CI/CD"] + Zot["📦 Zot Registry\n:30264"] + Apps["🐳 App Containers"] + Hermes["🤖 Hermes Agent\nAI Operations"] + Keycloak["🔐 Keycloak\nAuth / SSO"] + end + + Gitea -->|push image| Zot + Zot -->|pull & deploy| Apps + Hermes -->|automates| Gitea + Hermes -->|manages| Apps + Keycloak -->|secures| Apps ``` ## Shared Services | Service | URL | Purpose | |---|---|---| -| Gitea | gitea.lego-cloud.eu | Source code, CI/CD | -| Keycloak | keycloak.lego-cloud.eu | Authentication, SSO | -| Zot Registry | :30264 | Container images | -| Hermes Agent | Local | AI operations, automation | +| Gitea | gitea.lego-cloud.eu | Source code, CI/CD, issue tracking | +| Keycloak | keycloak.lego-cloud.eu | Authentication & SSO | +| Zot Registry | :30264 | OCI container image registry | +| Hermes Agent | Local | AI operations, automation, documentation | -## CI/CD Pattern +## CI/CD Flow -All applications follow the same Gitea Actions workflow: +```mermaid +sequenceDiagram + participant Dev as Developer / Jarvis + participant Git as Gitea + participant CI as Gitea Actions + participant Reg as Zot Registry + participant Host as TrueNAS -1. **Push to main** → Build + Test -2. **Build container** → Push to Zot registry -3. **Deploy** → Update running container -4. **Docs update** → Rebuild documentation site + Dev->>Git: git push main + Git->>CI: Trigger workflow + CI->>CI: pnpm install + CI->>CI: pnpm build + CI->>Reg: docker push image + CI->>Host: Deploy updated container + Host-->>Dev: ✅ Live +``` ## Repository Structure ``` skic-v1-playground/ -├── documentation/ # This docs site -├── stock-market-pro/ # (Planned) Trading system -└── ... # Future applications +├── documentation/ ← This docs site (Docusaurus) +├── stock-market-pro/ ← (Planned) Trading system +└── ... ← Future applications ``` diff --git a/docs/intro/index.md b/docs/intro/index.md index f56c439..959eab4 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -20,7 +20,7 @@ This documentation covers various applications designed, developed, and operated | Application | Status | Description | |---|---|---| -| [Stock Market Professional](/docs/applications/stock-market-professional) | 🚧 In Development | Forex/stock monitoring, technical analysis, and signal generation | +| [Stock Market Professional](../applications/stock-market-professional/index.md) | 🚧 In Development | Forex/stock monitoring, technical analysis, and signal generation | ## Technology Stack diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 64b9aae..65ec2da 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -4,7 +4,7 @@ import type * as Preset from '@docusaurus/preset-classic'; const config: Config = { title: 'SKIC Playground', - tagline: 'Documentation for SKIC autonomous applications', + tagline: 'Autonomous application documentation', favicon: 'img/favicon.ico', url: 'https://docs.skic-playground.lego-cloud.eu', @@ -14,26 +14,41 @@ const config: Config = { projectName: 'documentation', onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', + markdown: { + hooks: { + onBrokenMarkdownLinks: 'warn', + }, + mermaid: true, + }, i18n: { defaultLocale: 'en', locales: ['en'], }, + themes: [ + '@docusaurus/theme-mermaid', + ], + + plugins: [ + 'docusaurus-plugin-drawio', + ], + presets: [ [ 'classic', { docs: { sidebarPath: './sidebars.ts', - editUrl: - 'https://gitea.lego-cloud.eu/skic-v1-playground/documentation/src/branch/main/', + editUrl: 'https://gitea.lego-cloud.eu/skic-v1-playground/documentation/src/branch/main/', + showLastUpdateTime: true, + showLastUpdateAuthor: true, }, blog: { showReadingTime: true, - editUrl: - 'https://gitea.lego-cloud.eu/skic-v1-playground/documentation/src/branch/main/', + blogTitle: 'Changelog', + blogDescription: 'Updates and changes to SKIC applications', + postsPerPage: 'ALL', }, theme: { customCss: './src/css/custom.css', @@ -43,58 +58,78 @@ const config: Config = { ], themeConfig: { + colorMode: { + defaultMode: 'dark', + disableSwitch: false, + respectPrefersColorScheme: true, + }, + + image: 'img/docusaurus-social-card.jpg', + + announcementBar: { + id: 'wip', + content: '🚧 SKIC Playground is under active development — documentation is being built autonomously.', + backgroundColor: '#1a1a2e', + textColor: '#818cf8', + isCloseable: true, + }, + navbar: { title: 'SKIC Playground', + hideOnScroll: true, items: [ { type: 'docSidebar', sidebarId: 'docsSidebar', position: 'left', - label: 'Documentation', - }, - { - to: '/blog', - label: 'Changelog', - position: 'left', + label: 'Docs', }, + { href: 'https://gitea.lego-cloud.eu/skic-v1-playground', - label: 'Gitea', position: 'right', + className: 'header-gitea-link', + 'aria-label': 'Gitea repository', + label: 'Gitea ↗', }, ], }, + footer: { style: 'dark', links: [ { - title: 'Docs', + title: 'Documentation', items: [ - { - label: 'Getting Started', - to: '/docs/intro', - }, - { - label: 'Applications', - to: '/docs/applications/stock-market-professional', - }, + { label: 'Getting Started', to: '/docs/guides/getting-started' }, + { label: 'Stock Market Pro', to: '/docs/applications/stock-market-professional' }, + { label: 'Architecture', to: '/docs/architecture/overview' }, ], }, { title: 'Infrastructure', items: [ - { - label: 'Gitea', - href: 'https://gitea.lego-cloud.eu/skic-v1-playground', - }, + { label: 'Gitea', href: 'https://gitea.lego-cloud.eu/skic-v1-playground' }, + { label: 'Keycloak', href: 'https://keycloak.lego-cloud.eu' }, ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} SKIC Playground. Built with Docusaurus.`, + copyright: `© ${new Date().getFullYear()} SKIC Playground · Built by Jarvis`, }, + prism: { - theme: prismThemes.github, - darkTheme: prismThemes.dracula, + theme: prismThemes.oneDark, + darkTheme: prismThemes.oneDark, + additionalLanguages: ['bash', 'python', 'sql', 'yaml', 'json', 'typescript', 'docker'], + }, + + mermaid: { + theme: { light: 'neutral', dark: 'dark' }, + }, + + tableOfContents: { + minHeadingLevel: 2, + maxHeadingLevel: 4, }, } satisfies Preset.ThemeConfig, }; diff --git a/package.json b/package.json index 2af638b..4983a99 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,12 @@ "@docusaurus/core": "3.10.2", "@docusaurus/faster": "3.10.2", "@docusaurus/preset-classic": "3.10.2", + "@docusaurus/theme-mermaid": "^3.10.2", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", + "docusaurus-plugin-drawio": "^0.4.0", "prism-react-renderer": "^2.3.0", + "raw-loader": "^4.0.2", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb19daf..be20d4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,15 +17,24 @@ importers: '@docusaurus/preset-classic': specifier: 3.10.2 version: 3.10.2(@algolia/client-search@5.56.0)(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(@types/react@19.2.17)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(typescript@6.0.3) + '@docusaurus/theme-mermaid': + specifier: ^3.10.2 + version: 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) '@mdx-js/react': specifier: ^3.0.0 version: 3.1.1(@types/react@19.2.17)(react@19.2.7) clsx: specifier: ^2.0.0 version: 2.1.1 + docusaurus-plugin-drawio: + specifier: ^0.4.0 + version: 0.4.0(webpack@5.108.4(@swc/core@1.15.43)(postcss@8.5.19)) prism-react-renderer: specifier: ^2.3.0 version: 2.4.1(react@19.2.7) + raw-loader: + specifier: ^4.0.2 + version: 4.0.2(webpack@5.108.4(@swc/core@1.15.43)(postcss@8.5.19)) react: specifier: ^19.0.0 version: 19.2.7 @@ -142,6 +151,9 @@ packages: resolution: {integrity: sha512-PIOUXlSnrqM0S+WOgDRb4RzotydJH7ZoT6tOyL7tAO7qJOfvX5wsEW8Pe+PMKMwvuI4/gIyK9cg2H7lJXqnc4Q==} engines: {node: '>= 14.0.0'} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -714,6 +726,12 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1204,6 +1222,17 @@ packages: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 + '@docusaurus/theme-mermaid@3.10.2': + resolution: {integrity: sha512-Stssh5MYQJ+EdYugUXf+ZcpeJFQPKXf0KCd/SWp10o3CmXNaOoh5IEgVjVqY1e1XhQf3on4+Y4BnrMiD95E2SQ==} + engines: {node: '>=20.0'} + peerDependencies: + '@mermaid-js/layout-elk': ^0.1.9 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@mermaid-js/layout-elk': + optional: true + '@docusaurus/theme-search-algolia@3.10.2': resolution: {integrity: sha512-1msxllyhi/5m77JukXtp5UFnUAriwZIC1oJ7MTnpQpCwLTbclJi5BK5n28CTZuSXpQN2ewbbnqRgAhMM6c6ihg==} engines: {node: '>=20.0'} @@ -1251,6 +1280,12 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1410,6 +1445,9 @@ packages: '@types/react': '>=16' react: '>=16' + '@mermaid-js/parser@1.2.0': + resolution: {integrity: sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==} + '@module-federation/error-codes@0.22.0': resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} @@ -1868,6 +1906,99 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.4': + resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debug@4.1.13': resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} @@ -1883,6 +2014,9 @@ packages: '@types/express@4.17.25': resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/hast@3.0.5': resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} @@ -1973,6 +2107,9 @@ packages: '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1991,6 +2128,9 @@ packages: '@ungap/structured-clone@1.3.3': resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2490,6 +2630,12 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -2625,6 +2771,165 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.34.0: + resolution: {integrity: sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -2688,6 +2993,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -2727,6 +3035,9 @@ packages: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} + docusaurus-plugin-drawio@0.4.0: + resolution: {integrity: sha512-7y3cgtwdQ3evWY/phq/iGJectDlRzpRrKzbcBeT79o+w+OStU0noTcTOmVd/oTiylu2OJXhQWF9z+4CoxTgAtA==} + dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} @@ -2747,6 +3058,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@3.4.12: + resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} + domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -2829,6 +3143,9 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} + es-toolkit@1.49.0: + resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} + esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -3091,6 +3408,9 @@ packages: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -3234,6 +3554,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -3257,6 +3581,9 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3282,6 +3609,13 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -3478,9 +3812,16 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -3496,6 +3837,12 @@ packages: launch-editor@2.14.1: resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -3593,6 +3940,9 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -3629,6 +3979,11 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -3712,6 +4067,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid@11.16.0: + resolution: {integrity: sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -4086,6 +4444,9 @@ packages: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} + package-manager-detector@1.7.0: + resolution: {integrity: sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==} + param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} @@ -4116,6 +4477,9 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4158,6 +4522,12 @@ packages: resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} engines: {node: '>=16.0.0'} + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + postcss-attribute-case-insensitive@7.0.1: resolution: {integrity: sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==} engines: {node: '>=18'} @@ -4630,6 +5000,12 @@ packages: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} + raw-loader@4.0.2: + resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -4807,6 +5183,12 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + rtlcss@4.3.0: resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} engines: {node: '>=12.0.0'} @@ -4819,6 +5201,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -5067,6 +5452,9 @@ packages: peerDependencies: postcss: ^8.4.31 + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5160,6 +5548,10 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + tinypool@1.1.1: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -5188,6 +5580,10 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -5311,6 +5707,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@14.0.1: + resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -5615,6 +6015,11 @@ snapshots: dependencies: '@algolia/client-common': 5.56.0 + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.7.0 + tinyexec: 1.2.4 + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -6373,6 +6778,10 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@braintree/sanitize-url@7.1.2': {} + + '@chevrotain/types@11.1.2': {} + '@colors/colors@1.5.0': optional: true @@ -7504,6 +7913,42 @@ snapshots: - uglify-js - webpack-cli + '@docusaurus/theme-mermaid@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3)': + dependencies: + '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3) + '@docusaurus/module-type-aliases': 3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@6.0.3))(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils-validation': 3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + mermaid: 11.16.0 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@docusaurus/plugin-content-docs' + - '@mdx-js/react' + - '@minify-html/node' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - bufferutil + - clean-css + - cssnano + - csso + - debug + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + '@docusaurus/theme-search-algolia@3.10.2(@algolia/client-search@5.56.0)(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.15.43)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(postcss@8.5.19))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.12)(@swc/core@1.15.43)(@types/react@19.2.17)(postcss@8.5.19)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(typescript@6.0.3)': dependencies: '@algolia/autocomplete-core': 1.19.9(@algolia/client-search@5.56.0)(algoliasearch@5.56.0)(search-insights@2.17.3) @@ -7795,6 +8240,14 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.4': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.10 @@ -7998,6 +8451,10 @@ snapshots: '@types/react': 19.2.17 react: 19.2.7 + '@mermaid-js/parser@1.2.0': + dependencies: + '@chevrotain/types': 11.1.2 + '@module-federation/error-codes@0.22.0': {} '@module-federation/runtime-core@0.22.0': @@ -8468,6 +8925,123 @@ snapshots: dependencies: '@types/node': 26.1.1 + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.4': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + 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.4 + '@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 + '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -8492,6 +9066,8 @@ snapshots: '@types/qs': 6.15.1 '@types/serve-static': 1.15.10 + '@types/geojson@7946.0.16': {} + '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 @@ -8592,6 +9168,9 @@ snapshots: dependencies: '@types/node': 26.1.1 + '@types/trusted-types@2.0.7': + optional: true + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -8608,6 +9187,11 @@ snapshots: '@ungap/structured-clone@1.3.3': {} + '@upsetjs/venn.js@2.0.0': + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -9163,6 +9747,14 @@ snapshots: core-util-is@1.0.3: {} + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 @@ -9321,6 +9913,192 @@ snapshots: csstype@3.2.3: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.0): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.34.0 + + cytoscape-fcose@2.2.0(cytoscape@3.34.0): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.34.0 + + cytoscape@3.34.0: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + 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) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + 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 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + 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 + + d3-zoom@3.0.0: + 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) + + d3@7.9.0: + 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 + + dagre-d3-es@7.0.14: + dependencies: + d3: 7.9.0 + lodash-es: 4.18.1 + + dayjs@1.11.21: {} + debounce@1.2.1: {} debug@2.6.9: @@ -9368,6 +10146,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + depd@1.1.2: {} depd@2.0.0: {} @@ -9396,6 +10178,12 @@ snapshots: dependencies: '@leichtgewicht/ip-codec': 2.0.5 + docusaurus-plugin-drawio@0.4.0(webpack@5.108.4(@swc/core@1.15.43)(postcss@8.5.19)): + dependencies: + raw-loader: 4.0.2(webpack@5.108.4(@swc/core@1.15.43)(postcss@8.5.19)) + transitivePeerDependencies: + - webpack + dom-converter@0.2.0: dependencies: utila: 0.4.0 @@ -9422,6 +10210,10 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@3.4.12: + optionalDependencies: + '@types/trusted-types': 2.0.7 + domutils@2.8.0: dependencies: dom-serializer: 1.4.1 @@ -9494,6 +10286,8 @@ snapshots: dependencies: es-errors: 1.3.0 + es-toolkit@1.49.0: {} + esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -9807,6 +10601,8 @@ snapshots: dependencies: duplexer: 0.1.2 + hachure-fill@0.5.2: {} + handle-thing@2.0.1: {} has-flag@4.0.0: {} @@ -10045,6 +10841,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.5.19): dependencies: postcss: 8.5.19 @@ -10060,6 +10860,8 @@ snapshots: import-lazy@4.0.0: {} + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -10074,6 +10876,10 @@ snapshots: inline-style-parser@0.2.7: {} + internmap@1.0.1: {} + + internmap@2.0.3: {} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -10230,10 +11036,16 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + katex@0.16.47: + dependencies: + commander: 8.3.0 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 + khroma@2.1.0: {} + kind-of@6.0.3: {} kleur@3.0.3: {} @@ -10247,6 +11059,10 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.10.0 + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + leven@3.1.0: {} lightningcss-android-arm64@1.32.0: @@ -10314,6 +11130,8 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash-es@4.18.1: {} + lodash.debounce@4.0.8: {} lodash.memoize@4.1.2: {} @@ -10342,6 +11160,8 @@ snapshots: markdown-table@3.0.4: {} + marked@16.4.2: {} + math-intrinsics@1.1.0: {} mdast-util-directive@3.1.0: @@ -10561,6 +11381,30 @@ snapshots: merge2@1.4.1: {} + mermaid@11.16.0: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.4 + '@mermaid-js/parser': 1.2.0 + '@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.21 + dompurify: 3.4.12 + es-toolkit: 1.49.0 + katex: 0.16.47 + khroma: 2.1.0 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.4.0 + ts-dedent: 2.3.0 + uuid: 14.0.1 + methods@1.1.2: {} micromark-core-commonmark@2.0.3: @@ -11074,6 +11918,8 @@ snapshots: registry-url: 6.0.1 semver: 7.8.5 + package-manager-detector@1.7.0: {} + param-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -11118,6 +11964,8 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + path-data-parser@0.1.0: {} + path-exists@5.0.0: {} path-is-inside@1.0.2: {} @@ -11153,6 +12001,13 @@ snapshots: pvutils: 1.1.5 tslib: 2.8.1 + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + postcss-attribute-case-insensitive@7.0.1(postcss@8.5.19): dependencies: postcss: 8.5.19 @@ -11669,6 +12524,12 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-loader@4.0.2(webpack@5.108.4(@swc/core@1.15.43)(postcss@8.5.19)): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.108.4(@swc/core@1.15.43)(postcss@8.5.19) + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -11925,6 +12786,15 @@ snapshots: reusify@1.1.0: {} + robust-predicates@3.0.3: {} + + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + rtlcss@4.3.0: dependencies: escalade: 3.2.0 @@ -11938,6 +12808,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rw@1.3.3: {} + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -12232,6 +13104,8 @@ snapshots: postcss: 8.5.19 postcss-selector-parser: 6.1.4 + stylis@4.4.0: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -12293,6 +13167,8 @@ snapshots: tiny-warning@1.0.3: {} + tinyexec@1.2.4: {} + tinypool@1.1.1: {} to-regex-range@5.0.1: @@ -12311,6 +13187,8 @@ snapshots: trough@2.2.0: {} + ts-dedent@2.3.0: {} + tslib@1.14.1: {} tslib@2.8.1: {} @@ -12438,6 +13316,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@14.0.1: {} + uuid@8.3.2: {} value-equal@1.0.1: {} diff --git a/sidebars.ts b/sidebars.ts index 68db6e5..2d70fd8 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -2,38 +2,49 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; const sidebars: SidebarsConfig = { docsSidebar: [ - 'intro/index', + { + type: 'doc', + id: 'intro/index', + label: '← Overview', + }, { type: 'category', label: 'Applications', + collapsed: false, items: [ { type: 'category', - label: 'Stock Market Professional', - link: { - type: 'doc', - id: 'applications/stock-market-professional/index', - }, + label: '📈 Stock Market Pro', + link: { type: 'doc', id: 'applications/stock-market-professional/index' }, items: [ - 'applications/stock-market-professional/overview/architecture', - 'applications/stock-market-professional/data-monitoring/index', - 'applications/stock-market-professional/technical-analysis/index', - 'applications/stock-market-professional/signal-generation/index', + { + type: 'category', + label: 'C4 Architecture', + collapsed: false, + items: [ + 'applications/stock-market-professional/c4/context', + 'applications/stock-market-professional/c4/containers', + 'applications/stock-market-professional/c4/components', + ], + }, + { + type: 'category', + label: 'Modules', + items: [ + 'applications/stock-market-professional/data-monitoring/index', + 'applications/stock-market-professional/technical-analysis/index', + 'applications/stock-market-professional/signal-generation/index', + ], + }, ], }, ], }, { type: 'category', - label: 'Architecture', + label: 'Platform', items: [ 'architecture/overview', - ], - }, - { - type: 'category', - label: 'Guides', - items: [ 'guides/getting-started', ], }, diff --git a/src/css/custom.css b/src/css/custom.css index 2bc6a4c..768eaf3 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,30 +1,360 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ +/* ============================================================ + SKIC Playground Docs — Modern Dark-First Technical Theme + Inspired by Vercel / Linear design language + Font: Geist (by Vercel) + Geist Mono + ============================================================ */ -/* You can override the default Infima variables here. */ +/* --- Google Fonts / Geist import --- */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); + +/* Geist via CDN */ +@import url('https://cdn.jsdelivr.net/npm/geist@1.3.0/dist/fonts/geist-sans/style.css'); +@import url('https://cdn.jsdelivr.net/npm/geist@1.3.0/dist/fonts/geist-mono/style.css'); + +/* ── Design Tokens ───────────────────────────────────────── */ :root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + /* Brand */ + --skic-accent: #6366f1; /* indigo-500 */ + --skic-accent-light: #818cf8; /* indigo-400 */ + --skic-accent-dark: #4f46e5; /* indigo-600 */ + --skic-green: #10b981; + --skic-amber: #f59e0b; + --skic-red: #ef4444; + + /* Docusaurus overrides — Light mode */ + --ifm-color-primary: #6366f1; + --ifm-color-primary-dark: #4f46e5; + --ifm-color-primary-darker: #4338ca; + --ifm-color-primary-darkest: #3730a3; + --ifm-color-primary-light: #818cf8; + --ifm-color-primary-lighter: #a5b4fc; + --ifm-color-primary-lightest: #c7d2fe; + + --ifm-font-family-base: 'Geist', 'Inter', system-ui, sans-serif; + --ifm-font-family-monospace: 'Geist Mono', 'Fira Code', monospace; + --ifm-font-size-base: 15px; + --ifm-line-height-base: 1.7; + --ifm-font-weight-normal: 400; + + --ifm-heading-font-weight: 600; + --ifm-heading-letter-spacing: -0.02em; + --ifm-h1-font-size: 2.25rem; + --ifm-h2-font-size: 1.5rem; + --ifm-h3-font-size: 1.2rem; + + --ifm-navbar-height: 60px; + --ifm-navbar-shadow: none; + + --ifm-toc-border-color: var(--ifm-color-emphasis-200); + --ifm-code-font-size: 0.85rem; + --ifm-code-border-radius: 6px; + --ifm-code-padding-horizontal: 0.4em; + --ifm-code-padding-vertical: 0.15em; + --ifm-pre-border-radius: 10px; + --ifm-pre-padding: 1.25rem; + + --ifm-global-radius: 8px; + --ifm-global-shadow-lw: 0 1px 3px 0 rgba(0,0,0,.08); + --ifm-global-shadow-md: 0 4px 12px 0 rgba(0,0,0,.1); + + --docusaurus-highlighted-code-line-bg: rgba(99, 102, 241, 0.08); } -/* For readability concerns, you should choose a lighter palette in dark mode. */ +/* ── Dark Mode ───────────────────────────────────────────── */ [data-theme='dark'] { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --ifm-color-primary: #818cf8; + --ifm-color-primary-dark: #6366f1; + --ifm-color-primary-darker: #4f46e5; + --ifm-color-primary-darkest: #4338ca; + --ifm-color-primary-light: #a5b4fc; + --ifm-color-primary-lighter: #c7d2fe; + --ifm-color-primary-lightest: #e0e7ff; + + --ifm-background-color: #0a0a0a; + --ifm-background-surface-color: #111111; + --ifm-navbar-background-color: rgba(10, 10, 10, 0.85); + --ifm-sidebar-background: #0a0a0a; + --ifm-footer-background-color: #0a0a0a; + + --ifm-color-content: #ededed; + --ifm-color-content-secondary:#a1a1a1; + --ifm-color-emphasis-100: #1a1a1a; + --ifm-color-emphasis-200: #222222; + --ifm-color-emphasis-300: #333333; + --ifm-color-emphasis-400: #555555; + --ifm-color-emphasis-600: #999999; + --ifm-color-emphasis-700: #cccccc; + --ifm-color-emphasis-900: #ffffff; + + --ifm-toc-border-color: #222222; + --ifm-hr-border-color: #1f1f1f; + + --ifm-code-background: #161616; + --ifm-pre-background: #111111; + --ifm-blockquote-border-left-color: var(--skic-accent); + + --docusaurus-highlighted-code-line-bg: rgba(129, 140, 248, 0.12); } + +/* ── Typography ──────────────────────────────────────────── */ +h1, h2, h3, h4, h5, h6 { + letter-spacing: -0.02em; + font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; +} + +h1 { font-size: 2.25rem; font-weight: 700; } +h2 { font-size: 1.5rem; border-bottom: 1px solid var(--ifm-color-emphasis-200); padding-bottom: 0.4rem; } +h3 { font-size: 1.15rem; } + +p { color: var(--ifm-color-content); } + +/* ── Navbar ──────────────────────────────────────────────── */ +.navbar { + border-bottom: 1px solid var(--ifm-color-emphasis-200); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); +} + +[data-theme='dark'] .navbar { + background: rgba(10, 10, 10, 0.85); +} + +.navbar__title { + font-weight: 700; + font-size: 1rem; + letter-spacing: -0.02em; +} + +.navbar__logo { + height: 24px; +} + +.navbar__link { + font-size: 0.875rem; + font-weight: 500; + color: var(--ifm-color-content-secondary); + transition: color 0.15s ease; +} + +.navbar__link:hover, +.navbar__link--active { + color: var(--ifm-color-content) !important; +} + +/* ── Sidebar ─────────────────────────────────────────────── */ +.theme-doc-sidebar-container { + border-right: 1px solid var(--ifm-color-emphasis-200) !important; +} + +.menu__link { + font-size: 0.875rem; + border-radius: 6px; + padding: 0.35rem 0.75rem; + color: var(--ifm-color-content-secondary); + transition: all 0.15s ease; +} + +.menu__link:hover { + background: var(--ifm-color-emphasis-100); + color: var(--ifm-color-content); +} + +.menu__link--active { + background: var(--ifm-color-emphasis-100) !important; + color: var(--ifm-color-primary) !important; + font-weight: 600; +} + +.menu__caret::before { + background: var(--ifm-color-content-secondary); +} + +/* ── Code Blocks ─────────────────────────────────────────── */ +code { + font-size: 0.84em; + border: 1px solid var(--ifm-color-emphasis-200); + background: var(--ifm-color-emphasis-100); + border-radius: 5px; +} + +.prism-code { + font-size: 0.84rem; + line-height: 1.6; +} + +.codeBlockContainer_node_modules-\@docusaurus-theme-classic-lib-theme-CodeBlock-Container-styles-module { + border: 1px solid var(--ifm-color-emphasis-200); +} + +div[class*="codeBlockContainer"] { + border: 1px solid var(--ifm-color-emphasis-200); + box-shadow: none; +} + +div[class*="codeBlockTitle"] { + background: var(--ifm-color-emphasis-100); + border-bottom: 1px solid var(--ifm-color-emphasis-200); + font-size: 0.78rem; + font-family: var(--ifm-font-family-monospace); + color: var(--ifm-color-content-secondary); +} + +/* ── Tables ──────────────────────────────────────────────── */ +table { + border-collapse: collapse; + width: 100%; + font-size: 0.875rem; + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 8px; + overflow: hidden; +} + +thead { + background: var(--ifm-color-emphasis-100); +} + +th { + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--ifm-color-content-secondary); + padding: 0.75rem 1rem; + border-bottom: 1px solid var(--ifm-color-emphasis-200); +} + +td { + padding: 0.7rem 1rem; + border-bottom: 1px solid var(--ifm-color-emphasis-100); +} + +tr:last-child td { border-bottom: none; } + +tbody tr:hover { + background: var(--ifm-color-emphasis-100); +} + +/* ── Admonitions (callouts) ──────────────────────────────── */ +.admonition { + border-radius: 8px; + border: 1px solid; + border-left-width: 3px; + font-size: 0.9rem; +} + +.admonition-note { border-color: var(--ifm-color-emphasis-300); background: var(--ifm-color-emphasis-100); } +.admonition-tip { border-color: var(--skic-green); background: rgba(16, 185, 129, 0.06); } +.admonition-info { border-color: var(--skic-accent); background: rgba(99, 102, 241, 0.06); } +.admonition-warning { border-color: var(--skic-amber); background: rgba(245, 158, 11, 0.06); } +.admonition-danger { border-color: var(--skic-red); background: rgba(239, 68, 68, 0.06); } + +.admonition-heading h5 { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.06em; } + +/* ── Breadcrumbs ─────────────────────────────────────────── */ +.breadcrumbs__link { + font-size: 0.8rem; +} + +/* ── TOC ─────────────────────────────────────────────────── */ +.table-of-contents__link { + font-size: 0.8rem; + color: var(--ifm-color-content-secondary); +} +.table-of-contents__link:hover, +.table-of-contents__link--active { + color: var(--ifm-color-primary); +} + +/* ── Pagination ──────────────────────────────────────────── */ +.pagination-nav__link { + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 8px; + transition: all 0.15s ease; +} +.pagination-nav__link:hover { + border-color: var(--ifm-color-primary); + background: var(--ifm-color-emphasis-100); +} + +/* ── Footer ──────────────────────────────────────────────── */ +.footer { + border-top: 1px solid var(--ifm-color-emphasis-200); + padding: 2rem 0; +} + +.footer__title { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.08em; + font-weight: 600; + color: var(--ifm-color-content-secondary); +} + +.footer__link-item { + font-size: 0.875rem; + color: var(--ifm-color-content-secondary); +} + +/* ── Doc article ─────────────────────────────────────────── */ +.markdown { + --ifm-heading-margin-top: 1.75rem; +} + +.markdown > h2:first-child { margin-top: 0; } + +/* ── Hero (homepage) ─────────────────────────────────────── */ +.hero--primary { + background: linear-gradient(135deg, #0a0a0a 0%, #111827 50%, #0a0a0a 100%); + position: relative; + overflow: hidden; +} + +.hero--primary::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient(ellipse at 60% 40%, rgba(99,102,241,0.15) 0%, transparent 65%); + pointer-events: none; +} + +.hero__title { + font-size: 3rem; + font-weight: 800; + letter-spacing: -0.04em; + background: linear-gradient(135deg, #ffffff 0%, #a5b4fc 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.hero__subtitle { + color: #a1a1a1; + font-size: 1.1rem; + font-weight: 400; +} + +/* ── Badge component ─────────────────────────────────────── */ +.badge--status { + display: inline-flex; + align-items: center; + gap: 0.35rem; + font-size: 0.7rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + padding: 0.2rem 0.6rem; + border-radius: 100px; + border: 1px solid; +} +.badge--wip { color: var(--skic-amber); border-color: var(--skic-amber); background: rgba(245,158,11,0.08); } +.badge--stable { color: var(--skic-green); border-color: var(--skic-green); background: rgba(16,185,129,0.08); } +.badge--planned { color: var(--ifm-color-content-secondary); border-color: var(--ifm-color-emphasis-300); background: transparent; } + +/* ── Scrollbar (webkit) ──────────────────────────────────── */ +[data-theme='dark'] ::-webkit-scrollbar { width: 6px; height: 6px; } +[data-theme='dark'] ::-webkit-scrollbar-track { background: transparent; } +[data-theme='dark'] ::-webkit-scrollbar-thumb { background: #333; border-radius: 3px; } +[data-theme='dark'] ::-webkit-scrollbar-thumb:hover { background: #555; } + +/* ── Selection ───────────────────────────────────────────── */ +::selection { background: rgba(99,102,241,0.25); } diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 9f71a5d..9b21f2e 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -1,23 +1,267 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; +/* ── Hero ────────────────────────────────────────────────── */ +.hero { position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { display: flex; align-items: center; justify-content: center; + min-height: 480px; + padding: 5rem 1.5rem; + background: #0a0a0a; + overflow: hidden; +} + +.heroGlow { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 60% 50% at 50% 30%, rgba(99,102,241,0.18) 0%, transparent 70%), + radial-gradient(ellipse 40% 30% at 80% 70%, rgba(16,185,129,0.06) 0%, transparent 60%); + pointer-events: none; +} + +.heroContent { + position: relative; + text-align: center; + max-width: 680px; +} + +.heroPill { + display: inline-flex; + align-items: center; + gap: 0.4rem; + font-size: 0.7rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #818cf8; + background: rgba(99,102,241,0.1); + border: 1px solid rgba(99,102,241,0.25); + border-radius: 100px; + padding: 0.3rem 0.9rem; + margin-bottom: 1.5rem; +} + +.heroTitle { + font-size: clamp(2.5rem, 5vw, 3.75rem) !important; + font-weight: 800 !important; + letter-spacing: -0.04em !important; + line-height: 1.1 !important; + background: linear-gradient(135deg, #ffffff 0%, #a5b4fc 60%, #818cf8 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + margin-bottom: 1.25rem !important; + border-bottom: none !important; +} + +.heroSubtitle { + font-size: 1.1rem; + color: #a1a1a1; + line-height: 1.65; + margin-bottom: 2rem; + max-width: 520px; + margin-left: auto; + margin-right: auto; +} + +.heroCta { + display: flex; + gap: 0.75rem; + justify-content: center; + flex-wrap: wrap; +} + +.btnPrimary { + background: #6366f1 !important; + color: #fff !important; + border: none !important; + padding: 0.65rem 1.5rem !important; + border-radius: 8px !important; + font-weight: 600 !important; + font-size: 0.9rem !important; + transition: background 0.15s ease, transform 0.15s ease !important; +} +.btnPrimary:hover { + background: #4f46e5 !important; + transform: translateY(-1px); +} + +.btnSecondary { + background: transparent !important; + color: #a1a1a1 !important; + border: 1px solid #333 !important; + padding: 0.65rem 1.5rem !important; + border-radius: 8px !important; + font-weight: 500 !important; + font-size: 0.9rem !important; + transition: all 0.15s ease !important; +} +.btnSecondary:hover { + border-color: #555 !important; + color: #fff !important; +} + +/* ── Main ────────────────────────────────────────────────── */ +.main { + background: #0a0a0a; +} + +.section { + max-width: 1100px; + margin: 0 auto; + padding: 4rem 1.5rem; +} + +.sectionDivider { + border-top: 1px solid #1a1a1a; +} + +.sectionHeader { + margin-bottom: 2.5rem; +} + +.sectionTitle { + font-size: 1.6rem !important; + font-weight: 700 !important; + letter-spacing: -0.02em !important; + color: #ededed !important; + border-bottom: none !important; + margin-bottom: 0.5rem !important; +} + +.sectionSubtitle { + color: #a1a1a1; + font-size: 0.95rem; + margin: 0; +} + +/* ── App Cards ───────────────────────────────────────────── */ +.appGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); + gap: 1rem; +} + +.appCard { + display: block; + background: #111111; + border: 1px solid #222222; + border-radius: 12px; + padding: 1.5rem; + text-decoration: none !important; + transition: all 0.15s ease; +} + +.appCard:hover { + border-color: #6366f1; + background: #161625; + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(99,102,241,0.12); +} + +.appCardHeader { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 0.75rem; + margin-bottom: 0.75rem; +} + +.appCardTitle { + font-size: 1rem !important; + font-weight: 600 !important; + color: #ededed !important; + margin: 0 !important; + border-bottom: none !important; +} + +.appCardDesc { + font-size: 0.875rem; + color: #a1a1a1; + line-height: 1.65; + margin-bottom: 1rem; +} + +/* ── Badges ──────────────────────────────────────────────── */ +.badge { + flex-shrink: 0; + font-size: 0.65rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + padding: 0.2rem 0.55rem; + border-radius: 100px; + border: 1px solid; + white-space: nowrap; +} + +.badgeStable { color: #10b981; border-color: #10b981; background: rgba(16,185,129,0.08); } +.badgeWip { color: #f59e0b; border-color: #f59e0b; background: rgba(245,158,11,0.08); } +.badgePlanned { color: #666; border-color: #333; background: transparent; } + +/* ── Tags ────────────────────────────────────────────────── */ +.tagList { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; +} + +.tag { + font-size: 0.7rem; + font-weight: 500; + color: #666; + background: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 5px; + padding: 0.15rem 0.5rem; + font-family: var(--ifm-font-family-monospace); +} + +/* ── C4 Grid ─────────────────────────────────────────────── */ +.c4Grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; +} + +@media (max-width: 768px) { + .c4Grid { grid-template-columns: 1fr; } + .appGrid { grid-template-columns: 1fr; } +} + +.c4Card { + background: #111111; + border: 1px solid #222222; + border-radius: 12px; + padding: 1.5rem; +} + +.c4Level { + display: inline-block; + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #6366f1; + background: rgba(99,102,241,0.1); + border: 1px solid rgba(99,102,241,0.2); + border-radius: 5px; + padding: 0.15rem 0.5rem; + margin-bottom: 0.75rem; + font-family: var(--ifm-font-family-monospace); +} + +.c4Name { + font-size: 1rem !important; + font-weight: 600 !important; + color: #ededed !important; + margin-bottom: 0.5rem !important; + border-bottom: none !important; +} + +.c4Desc { + font-size: 0.85rem; + color: #a1a1a1; + line-height: 1.6; + margin: 0; } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2e006d1..90fe5ed 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,43 +1,119 @@ -import type {ReactNode} from 'react'; import clsx from 'clsx'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; import Heading from '@theme/Heading'; - import styles from './index.module.css'; -function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); +type AppStatus = 'stable' | 'wip' | 'planned'; + +type Application = { + name: string; + description: string; + status: AppStatus; + link: string; + tags: string[]; +}; + +const applications: Application[] = [ + { + name: 'Stock Market Professional', + description: 'Monitors forex & stock markets, runs technical analysis to spot patterns, and emits daily trading signals with max 3 positions / 30-minute hold.', + status: 'wip', + link: '/docs/applications/stock-market-professional', + tags: ['Python', 'Forex', 'TA', 'Signals'], + }, +]; + +const statusLabels: Record = { + stable: '✦ Stable', + wip: '◎ In Development', + planned: '◇ Planned', +}; + +const statusClass: Record = { + stable: styles.badgeStable, + wip: styles.badgeWip, + planned: styles.badgePlanned, +}; + +function AppCard({ name, description, status, link, tags }: Application) { return ( -
-
- - {siteConfig.title} - -

{siteConfig.tagline}

-
- - Docusaurus Tutorial - 5min ⏱️ - -
+ +
+ {name} + + {statusLabels[status]} +
-
+

{description}

+
+ {tags.map(t => {t})} +
+ ); } -export default function Home(): ReactNode { - const {siteConfig} = useDocusaurusContext(); +function Hero() { return ( - - -
- +
+
+
+
Autonomous · Self-Documenting
+ + SKIC Playground + +

+ Documentation for autonomous applications — designed, built, and operated by Jarvis. +

+
+ + Browse Docs + + + View Source ↗ + +
+
+
+ ); +} + +export default function Home(): JSX.Element { + const { siteConfig } = useDocusaurusContext(); + return ( + + +
+
+
+ Applications +

Production-grade systems built and documented autonomously.

+
+
+ {applications.map(app => )} +
+
+ +
+
+ Architecture Approach +

Every application is documented using the C4 model.

+
+
+ {[ + { level: 'L1', name: 'Context', desc: 'System in the real world — users, external systems, and high-level relationships.' }, + { level: 'L2', name: 'Containers', desc: 'Deployable units — applications, services, databases, and their interactions.' }, + { level: 'L3', name: 'Components', desc: 'Internal structure of each container — modules, classes, and responsibilities.' }, + ].map(({ level, name, desc }) => ( +
+ {level} + {name} +

{desc}

+
+ ))} +
+
); diff --git a/static/diagrams/smp-pipeline.drawio b/static/diagrams/smp-pipeline.drawio new file mode 100644 index 0000000..1c6da14 --- /dev/null +++ b/static/diagrams/smp-pipeline.drawio @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +