diff --git a/.agents/skills/agent-browser/SKILL.md b/.agents/skills/agent-browser/SKILL.md new file mode 100644 index 000000000..19c2a3429 --- /dev/null +++ b/.agents/skills/agent-browser/SKILL.md @@ -0,0 +1,697 @@ +--- +name: agent-browser +description: Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. +allowed-tools: Bash(npx agent-browser:*), Bash(agent-browser:*) +--- + + + +# Browser Automation with agent-browser + +The CLI uses Chrome/Chromium via CDP directly. Install via `npm i -g agent-browser`, `brew install agent-browser`, or `cargo install agent-browser`. Run `agent-browser install` to download Chrome. Run `agent-browser upgrade` to update to the latest version. + +## Core Workflow + +Every browser automation follows this pattern: + +1. **Navigate**: `agent-browser open ` +2. **Snapshot**: `agent-browser snapshot -i` (get element refs like `@e1`, `@e2`) +3. **Interact**: Use refs to click, fill, select +4. **Re-snapshot**: After navigation or DOM changes, get fresh refs + +```bash +agent-browser open https://example.com/form +agent-browser snapshot -i +# Output: @e1 [input type="email"], @e2 [input type="password"], @e3 [button] "Submit" + +agent-browser fill @e1 "user@example.com" +agent-browser fill @e2 "password123" +agent-browser click @e3 +agent-browser wait --load networkidle +agent-browser snapshot -i # Check result +``` + +## Command Chaining + +Commands can be chained with `&&` in a single shell invocation. The browser persists between commands via a background daemon, so chaining is safe and more efficient than separate calls. + +```bash +# Chain open + wait + snapshot in one call +agent-browser open https://example.com && agent-browser wait --load networkidle && agent-browser snapshot -i + +# Chain multiple interactions +agent-browser fill @e1 "user@example.com" && agent-browser fill @e2 "password123" && agent-browser click @e3 + +# Navigate and capture +agent-browser open https://example.com && agent-browser wait --load networkidle && agent-browser screenshot page.png +``` + +**When to chain:** Use `&&` when you don't need to read the output of an intermediate command before proceeding (e.g., open + wait + screenshot). Run commands separately when you need to parse the output first (e.g., snapshot to discover refs, then interact using those refs). + +## Handling Authentication + +When automating a site that requires login, choose the approach that fits: + +**Option 1: Import auth from the user's browser (fastest for one-off tasks)** + +```bash +# Connect to the user's running Chrome (they're already logged in) +agent-browser --auto-connect state save ./auth.json +# Use that auth state +agent-browser --state ./auth.json open https://app.example.com/dashboard +``` + +State files contain session tokens in plaintext -- add to `.gitignore` and delete when no longer needed. Set `AGENT_BROWSER_ENCRYPTION_KEY` for encryption at rest. + +**Option 2: Persistent profile (simplest for recurring tasks)** + +```bash +# First run: login manually or via automation +agent-browser --profile ~/.myapp open https://app.example.com/login +# ... fill credentials, submit ... + +# All future runs: already authenticated +agent-browser --profile ~/.myapp open https://app.example.com/dashboard +``` + +**Option 3: Session name (auto-save/restore cookies + localStorage)** + +```bash +agent-browser --session-name myapp open https://app.example.com/login +# ... login flow ... +agent-browser close # State auto-saved + +# Next time: state auto-restored +agent-browser --session-name myapp open https://app.example.com/dashboard +``` + +**Option 4: Auth vault (credentials stored encrypted, login by name)** + +```bash +echo "$PASSWORD" | agent-browser auth save myapp --url https://app.example.com/login --username user --password-stdin +agent-browser auth login myapp +``` + +`auth login` navigates with `load` and then waits for login form selectors to appear before filling/clicking, which is more reliable on delayed SPA login screens. + +**Option 5: State file (manual save/load)** + +```bash +# After logging in: +agent-browser state save ./auth.json +# In a future session: +agent-browser state load ./auth.json +agent-browser open https://app.example.com/dashboard +``` + +See [references/authentication.md](references/authentication.md) for OAuth, 2FA, cookie-based auth, and token refresh patterns. + +## Essential Commands + +```bash +# Navigation +agent-browser open # Navigate (aliases: goto, navigate) +agent-browser close # Close browser + +# Snapshot +agent-browser snapshot -i # Interactive elements with refs (recommended) +agent-browser snapshot -s "#selector" # Scope to CSS selector + +# Interaction (use @refs from snapshot) +agent-browser click @e1 # Click element +agent-browser click @e1 --new-tab # Click and open in new tab +agent-browser fill @e2 "text" # Clear and type text +agent-browser type @e2 "text" # Type without clearing +agent-browser select @e1 "option" # Select dropdown option +agent-browser check @e1 # Check checkbox +agent-browser press Enter # Press key +agent-browser keyboard type "text" # Type at current focus (no selector) +agent-browser keyboard inserttext "text" # Insert without key events +agent-browser scroll down 500 # Scroll page +agent-browser scroll down 500 --selector "div.content" # Scroll within a specific container + +# Get information +agent-browser get text @e1 # Get element text +agent-browser get url # Get current URL +agent-browser get title # Get page title +agent-browser get cdp-url # Get CDP WebSocket URL + +# Wait +agent-browser wait @e1 # Wait for element +agent-browser wait --load networkidle # Wait for network idle +agent-browser wait --url "**/page" # Wait for URL pattern +agent-browser wait 2000 # Wait milliseconds +agent-browser wait --text "Welcome" # Wait for text to appear (substring match) +agent-browser wait --fn "!document.body.innerText.includes('Loading...')" # Wait for text to disappear +agent-browser wait "#spinner" --state hidden # Wait for element to disappear + +# Downloads +agent-browser download @e1 ./file.pdf # Click element to trigger download +agent-browser wait --download ./output.zip # Wait for any download to complete +agent-browser --download-path ./downloads open # Set default download directory + +# Network +agent-browser network requests # Inspect tracked requests +agent-browser network requests --type xhr,fetch # Filter by resource type +agent-browser network requests --method POST # Filter by HTTP method +agent-browser network requests --status 2xx # Filter by status (200, 2xx, 400-499) +agent-browser network request # View full request/response detail +agent-browser network route "**/api/*" --abort # Block matching requests +agent-browser network har start # Start HAR recording +agent-browser network har stop ./capture.har # Stop and save HAR file + +# Viewport & Device Emulation +agent-browser set viewport 1920 1080 # Set viewport size (default: 1280x720) +agent-browser set viewport 1920 1080 2 # 2x retina (same CSS size, higher res screenshots) +agent-browser set device "iPhone 14" # Emulate device (viewport + user agent) + +# Capture +agent-browser screenshot # Screenshot to temp dir +agent-browser screenshot --full # Full page screenshot +agent-browser screenshot --annotate # Annotated screenshot with numbered element labels +agent-browser screenshot --screenshot-dir ./shots # Save to custom directory +agent-browser screenshot --screenshot-format jpeg --screenshot-quality 80 +agent-browser pdf output.pdf # Save as PDF + +# Clipboard +agent-browser clipboard read # Read text from clipboard +agent-browser clipboard write "Hello, World!" # Write text to clipboard +agent-browser clipboard copy # Copy current selection +agent-browser clipboard paste # Paste from clipboard + +# Diff (compare page states) +agent-browser diff snapshot # Compare current vs last snapshot +agent-browser diff snapshot --baseline before.txt # Compare current vs saved file +agent-browser diff screenshot --baseline before.png # Visual pixel diff +agent-browser diff url # Compare two pages +agent-browser diff url --wait-until networkidle # Custom wait strategy +agent-browser diff url --selector "#main" # Scope to element +``` + +## Batch Execution + +Execute multiple commands in a single invocation by piping a JSON array of string arrays to `batch`. This avoids per-command process startup overhead when running multi-step workflows. + +```bash +echo '[ + ["open", "https://example.com"], + ["snapshot", "-i"], + ["click", "@e1"], + ["screenshot", "result.png"] +]' | agent-browser batch --json + +# Stop on first error +agent-browser batch --bail < commands.json +``` + +Use `batch` when you have a known sequence of commands that don't depend on intermediate output. Use separate commands or `&&` chaining when you need to parse output between steps (e.g., snapshot to discover refs, then interact). + +## Common Patterns + +### Form Submission + +```bash +agent-browser open https://example.com/signup +agent-browser snapshot -i +agent-browser fill @e1 "Jane Doe" +agent-browser fill @e2 "jane@example.com" +agent-browser select @e3 "California" +agent-browser check @e4 +agent-browser click @e5 +agent-browser wait --load networkidle +``` + +### Authentication with Auth Vault (Recommended) + +```bash +# Save credentials once (encrypted with AGENT_BROWSER_ENCRYPTION_KEY) +# Recommended: pipe password via stdin to avoid shell history exposure +echo "pass" | agent-browser auth save github --url https://github.com/login --username user --password-stdin + +# Login using saved profile (LLM never sees password) +agent-browser auth login github + +# List/show/delete profiles +agent-browser auth list +agent-browser auth show github +agent-browser auth delete github +``` + +`auth login` waits for username/password/submit selectors before interacting, with a timeout tied to the default action timeout. + +### Authentication with State Persistence + +```bash +# Login once and save state +agent-browser open https://app.example.com/login +agent-browser snapshot -i +agent-browser fill @e1 "$USERNAME" +agent-browser fill @e2 "$PASSWORD" +agent-browser click @e3 +agent-browser wait --url "**/dashboard" +agent-browser state save auth.json + +# Reuse in future sessions +agent-browser state load auth.json +agent-browser open https://app.example.com/dashboard +``` + +### Session Persistence + +```bash +# Auto-save/restore cookies and localStorage across browser restarts +agent-browser --session-name myapp open https://app.example.com/login +# ... login flow ... +agent-browser close # State auto-saved to ~/.agent-browser/sessions/ + +# Next time, state is auto-loaded +agent-browser --session-name myapp open https://app.example.com/dashboard + +# Encrypt state at rest +export AGENT_BROWSER_ENCRYPTION_KEY=$(openssl rand -hex 32) +agent-browser --session-name secure open https://app.example.com + +# Manage saved states +agent-browser state list +agent-browser state show myapp-default.json +agent-browser state clear myapp +agent-browser state clean --older-than 7 +``` + +### Working with Iframes + +Iframe content is automatically inlined in snapshots. Refs inside iframes carry frame context, so you can interact with them directly. + +```bash +agent-browser open https://example.com/checkout +agent-browser snapshot -i +# @e1 [heading] "Checkout" +# @e2 [Iframe] "payment-frame" +# @e3 [input] "Card number" +# @e4 [input] "Expiry" +# @e5 [button] "Pay" + +# Interact directly — no frame switch needed +agent-browser fill @e3 "4111111111111111" +agent-browser fill @e4 "12/28" +agent-browser click @e5 + +# To scope a snapshot to one iframe: +agent-browser frame @e2 +agent-browser snapshot -i # Only iframe content +agent-browser frame main # Return to main frame +``` + +### Data Extraction + +```bash +agent-browser open https://example.com/products +agent-browser snapshot -i +agent-browser get text @e5 # Get specific element text +agent-browser get text body > page.txt # Get all page text + +# JSON output for parsing +agent-browser snapshot -i --json +agent-browser get text @e1 --json +``` + +### Parallel Sessions + +```bash +agent-browser --session site1 open https://site-a.com +agent-browser --session site2 open https://site-b.com + +agent-browser --session site1 snapshot -i +agent-browser --session site2 snapshot -i + +agent-browser session list +``` + +### Connect to Existing Chrome + +```bash +# Auto-discover running Chrome with remote debugging enabled +agent-browser --auto-connect open https://example.com +agent-browser --auto-connect snapshot + +# Or with explicit CDP port +agent-browser --cdp 9222 snapshot +``` + +Auto-connect discovers Chrome via `DevToolsActivePort`, common debugging ports (9222, 9229), and falls back to a direct WebSocket connection if HTTP-based CDP discovery fails. + +### Color Scheme (Dark Mode) + +```bash +# Persistent dark mode via flag (applies to all pages and new tabs) +agent-browser --color-scheme dark open https://example.com + +# Or via environment variable +AGENT_BROWSER_COLOR_SCHEME=dark agent-browser open https://example.com + +# Or set during session (persists for subsequent commands) +agent-browser set media dark +``` + +### Viewport & Responsive Testing + +```bash +# Set a custom viewport size (default is 1280x720) +agent-browser set viewport 1920 1080 +agent-browser screenshot desktop.png + +# Test mobile-width layout +agent-browser set viewport 375 812 +agent-browser screenshot mobile.png + +# Retina/HiDPI: same CSS layout at 2x pixel density +# Screenshots stay at logical viewport size, but content renders at higher DPI +agent-browser set viewport 1920 1080 2 +agent-browser screenshot retina.png + +# Device emulation (sets viewport + user agent in one step) +agent-browser set device "iPhone 14" +agent-browser screenshot device.png +``` + +The `scale` parameter (3rd argument) sets `window.devicePixelRatio` without changing CSS layout. Use it when testing retina rendering or capturing higher-resolution screenshots. + +### Visual Browser (Debugging) + +```bash +agent-browser --headed open https://example.com +agent-browser highlight @e1 # Highlight element +agent-browser inspect # Open Chrome DevTools for the active page +agent-browser record start demo.webm # Record session +agent-browser profiler start # Start Chrome DevTools profiling +agent-browser profiler stop trace.json # Stop and save profile (path optional) +``` + +Use `AGENT_BROWSER_HEADED=1` to enable headed mode via environment variable. Browser extensions work in both headed and headless mode. + +### Local Files (PDFs, HTML) + +```bash +# Open local files with file:// URLs +agent-browser --allow-file-access open file:///path/to/document.pdf +agent-browser --allow-file-access open file:///path/to/page.html +agent-browser screenshot output.png +``` + +### iOS Simulator (Mobile Safari) + +```bash +# List available iOS simulators +agent-browser device list + +# Launch Safari on a specific device +agent-browser -p ios --device "iPhone 16 Pro" open https://example.com + +# Same workflow as desktop - snapshot, interact, re-snapshot +agent-browser -p ios snapshot -i +agent-browser -p ios tap @e1 # Tap (alias for click) +agent-browser -p ios fill @e2 "text" +agent-browser -p ios swipe up # Mobile-specific gesture + +# Take screenshot +agent-browser -p ios screenshot mobile.png + +# Close session (shuts down simulator) +agent-browser -p ios close +``` + +**Requirements:** macOS with Xcode, Appium (`npm install -g appium && appium driver install xcuitest`) + +**Real devices:** Works with physical iOS devices if pre-configured. Use `--device ""` where UDID is from `xcrun xctrace list devices`. + +## Security + +All security features are opt-in. By default, agent-browser imposes no restrictions on navigation, actions, or output. + +### Content Boundaries (Recommended for AI Agents) + +Enable `--content-boundaries` to wrap page-sourced output in markers that help LLMs distinguish tool output from untrusted page content: + +```bash +export AGENT_BROWSER_CONTENT_BOUNDARIES=1 +agent-browser snapshot +# Output: +# --- AGENT_BROWSER_PAGE_CONTENT nonce= origin=https://example.com --- +# [accessibility tree] +# --- END_AGENT_BROWSER_PAGE_CONTENT nonce= --- +``` + +### Domain Allowlist + +Restrict navigation to trusted domains. Wildcards like `*.example.com` also match the bare domain `example.com`. Sub-resource requests, WebSocket, and EventSource connections to non-allowed domains are also blocked. Include CDN domains your target pages depend on: + +```bash +export AGENT_BROWSER_ALLOWED_DOMAINS="example.com,*.example.com" +agent-browser open https://example.com # OK +agent-browser open https://malicious.com # Blocked +``` + +### Action Policy + +Use a policy file to gate destructive actions: + +```bash +export AGENT_BROWSER_ACTION_POLICY=./policy.json +``` + +Example `policy.json`: + +```json +{ "default": "deny", "allow": ["navigate", "snapshot", "click", "scroll", "wait", "get"] } +``` + +Auth vault operations (`auth login`, etc.) bypass action policy but domain allowlist still applies. + +### Output Limits + +Prevent context flooding from large pages: + +```bash +export AGENT_BROWSER_MAX_OUTPUT=50000 +``` + +## Diffing (Verifying Changes) + +Use `diff snapshot` after performing an action to verify it had the intended effect. This compares the current accessibility tree against the last snapshot taken in the session. + +```bash +# Typical workflow: snapshot -> action -> diff +agent-browser snapshot -i # Take baseline snapshot +agent-browser click @e2 # Perform action +agent-browser diff snapshot # See what changed (auto-compares to last snapshot) +``` + +For visual regression testing or monitoring: + +```bash +# Save a baseline screenshot, then compare later +agent-browser screenshot baseline.png +# ... time passes or changes are made ... +agent-browser diff screenshot --baseline baseline.png + +# Compare staging vs production +agent-browser diff url https://staging.example.com https://prod.example.com --screenshot +``` + +`diff snapshot` output uses `+` for additions and `-` for removals, similar to git diff. `diff screenshot` produces a diff image with changed pixels highlighted in red, plus a mismatch percentage. + +## Timeouts and Slow Pages + +The default timeout is 25 seconds. This can be overridden with the `AGENT_BROWSER_DEFAULT_TIMEOUT` environment variable (value in milliseconds). For slow websites or large pages, use explicit waits instead of relying on the default timeout: + +```bash +# Wait for network activity to settle (best for slow pages) +agent-browser wait --load networkidle + +# Wait for a specific element to appear +agent-browser wait "#content" +agent-browser wait @e1 + +# Wait for a specific URL pattern (useful after redirects) +agent-browser wait --url "**/dashboard" + +# Wait for a JavaScript condition +agent-browser wait --fn "document.readyState === 'complete'" + +# Wait a fixed duration (milliseconds) as a last resort +agent-browser wait 5000 +``` + +When dealing with consistently slow websites, use `wait --load networkidle` after `open` to ensure the page is fully loaded before taking a snapshot. If a specific element is slow to render, wait for it directly with `wait ` or `wait @ref`. + +## Session Management and Cleanup + +When running multiple agents or automations concurrently, always use named sessions to avoid conflicts: + +```bash +# Each agent gets its own isolated session +agent-browser --session agent1 open site-a.com +agent-browser --session agent2 open site-b.com + +# Check active sessions +agent-browser session list +``` + +Always close your browser session when done to avoid leaked processes: + +```bash +agent-browser close # Close default session +agent-browser --session agent1 close # Close specific session +``` + +If a previous session was not closed properly, the daemon may still be running. Use `agent-browser close` to clean it up before starting new work. + +To auto-shutdown the daemon after a period of inactivity (useful for ephemeral/CI environments): + +```bash +AGENT_BROWSER_IDLE_TIMEOUT_MS=60000 agent-browser open example.com +``` + +## Ref Lifecycle (Important) + +Refs (`@e1`, `@e2`, etc.) are invalidated when the page changes. Always re-snapshot after: + +- Clicking links or buttons that navigate +- Form submissions +- Dynamic content loading (dropdowns, modals) + +```bash +agent-browser click @e5 # Navigates to new page +agent-browser snapshot -i # MUST re-snapshot +agent-browser click @e1 # Use new refs +``` + +## Annotated Screenshots (Vision Mode) + +Use `--annotate` to take a screenshot with numbered labels overlaid on interactive elements. Each label `[N]` maps to ref `@eN`. This also caches refs, so you can interact with elements immediately without a separate snapshot. + +```bash +agent-browser screenshot --annotate +# Output includes the image path and a legend: +# [1] @e1 button "Submit" +# [2] @e2 link "Home" +# [3] @e3 textbox "Email" +agent-browser click @e2 # Click using ref from annotated screenshot +``` + +Use annotated screenshots when: + +- The page has unlabeled icon buttons or visual-only elements +- You need to verify visual layout or styling +- Canvas or chart elements are present (invisible to text snapshots) +- You need spatial reasoning about element positions + +## Semantic Locators (Alternative to Refs) + +When refs are unavailable or unreliable, use semantic locators: + +```bash +agent-browser find text "Sign In" click +agent-browser find label "Email" fill "user@test.com" +agent-browser find role button click --name "Submit" +agent-browser find placeholder "Search" type "query" +agent-browser find testid "submit-btn" click +``` + +## JavaScript Evaluation (eval) + +Use `eval` to run JavaScript in the browser context. **Shell quoting can corrupt complex expressions** -- use `--stdin` or `-b` to avoid issues. + +```bash +# Simple expressions work with regular quoting +agent-browser eval 'document.title' +agent-browser eval 'document.querySelectorAll("img").length' + +# Complex JS: use --stdin with heredoc (RECOMMENDED) +agent-browser eval --stdin <<'EVALEOF' +JSON.stringify( + Array.from(document.querySelectorAll("img")) + .filter(i => !i.alt) + .map(i => ({ src: i.src.split("/").pop(), width: i.width })) +) +EVALEOF + +# Alternative: base64 encoding (avoids all shell escaping issues) +agent-browser eval -b "$(echo -n 'Array.from(document.querySelectorAll("a")).map(a => a.href)' | base64)" +``` + +**Why this matters:** When the shell processes your command, inner double quotes, `!` characters (history expansion), backticks, and `$()` can all corrupt the JavaScript before it reaches agent-browser. The `--stdin` and `-b` flags bypass shell interpretation entirely. + +**Rules of thumb:** + +- Single-line, no nested quotes -> regular `eval 'expression'` with single quotes is fine +- Nested quotes, arrow functions, template literals, or multiline -> use `eval --stdin <<'EVALEOF'` +- Programmatic/generated scripts -> use `eval -b` with base64 + +## Configuration File + +Create `agent-browser.json` in the project root for persistent settings: + +```json +{ + "headed": true, + "proxy": "http://localhost:8080", + "profile": "./browser-data" +} +``` + +Priority (lowest to highest): `~/.agent-browser/config.json` < `./agent-browser.json` < env vars < CLI flags. Use `--config ` or `AGENT_BROWSER_CONFIG` env var for a custom config file (exits with error if missing/invalid). All CLI options map to camelCase keys (e.g., `--executable-path` -> `"executablePath"`). Boolean flags accept `true`/`false` values (e.g., `--headed false` overrides config). Extensions from user and project configs are merged, not replaced. + +## Deep-Dive Documentation + +| Reference | When to Use | +| -------------------------------------------------------------------- | --------------------------------------------------------- | +| [references/commands.md](references/commands.md) | Full command reference with all options | +| [references/snapshot-refs.md](references/snapshot-refs.md) | Ref lifecycle, invalidation rules, troubleshooting | +| [references/session-management.md](references/session-management.md) | Parallel sessions, state persistence, concurrent scraping | +| [references/authentication.md](references/authentication.md) | Login flows, OAuth, 2FA handling, state reuse | +| [references/video-recording.md](references/video-recording.md) | Recording workflows for debugging and documentation | +| [references/profiling.md](references/profiling.md) | Chrome DevTools profiling for performance analysis | +| [references/proxy-support.md](references/proxy-support.md) | Proxy configuration, geo-testing, rotating proxies | + +## Browser Engine Selection + +Use `--engine` to choose a local browser engine. The default is `chrome`. + +```bash +# Use Lightpanda (fast headless browser, requires separate install) +agent-browser --engine lightpanda open example.com + +# Via environment variable +export AGENT_BROWSER_ENGINE=lightpanda +agent-browser open example.com + +# With custom binary path +agent-browser --engine lightpanda --executable-path /path/to/lightpanda open example.com +``` + +Supported engines: + +- `chrome` (default) -- Chrome/Chromium via CDP +- `lightpanda` -- Lightpanda headless browser via CDP (10x faster, 10x less memory than Chrome) + +Lightpanda does not support `--extension`, `--profile`, `--state`, or `--allow-file-access`. Install Lightpanda from https://lightpanda.io/docs/open-source/installation. + +## Ready-to-Use Templates + +| Template | Description | +| ------------------------------------------------------------------------ | ----------------------------------- | +| [templates/form-automation.sh](templates/form-automation.sh) | Form filling with validation | +| [templates/authenticated-session.sh](templates/authenticated-session.sh) | Login once, reuse state | +| [templates/capture-workflow.sh](templates/capture-workflow.sh) | Content extraction with screenshots | + +```bash +./templates/form-automation.sh https://example.com/form +./templates/authenticated-session.sh https://app.example.com/login +./templates/capture-workflow.sh https://example.com ./output +``` diff --git a/.agents/skills/agent-browser/references/authentication.md b/.agents/skills/agent-browser/references/authentication.md new file mode 100644 index 000000000..ec57aecc7 --- /dev/null +++ b/.agents/skills/agent-browser/references/authentication.md @@ -0,0 +1,313 @@ + + +# Authentication Patterns + +Login flows, session persistence, OAuth, 2FA, and authenticated browsing. + +**Related**: [session-management.md](session-management.md) for state persistence details, [SKILL.md](../SKILL.md) for quick start. + +## Contents + +- [Import Auth from Your Browser](#import-auth-from-your-browser) +- [Persistent Profiles](#persistent-profiles) +- [Session Persistence](#session-persistence) +- [Basic Login Flow](#basic-login-flow) +- [Saving Authentication State](#saving-authentication-state) +- [Restoring Authentication](#restoring-authentication) +- [OAuth / SSO Flows](#oauth--sso-flows) +- [Two-Factor Authentication](#two-factor-authentication) +- [HTTP Basic Auth](#http-basic-auth) +- [Cookie-Based Auth](#cookie-based-auth) +- [Token Refresh Handling](#token-refresh-handling) +- [Security Best Practices](#security-best-practices) + +## Import Auth from Your Browser + +The fastest way to authenticate is to reuse cookies from a Chrome session you are already logged into. + +**Step 1: Start Chrome with remote debugging** + +```bash +# macOS +"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 + +# Linux +google-chrome --remote-debugging-port=9222 + +# Windows +"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 +``` + +Log in to your target site(s) in this Chrome window as you normally would. + +> **Security note:** `--remote-debugging-port` exposes full browser control on localhost. Any local process can connect and read cookies, execute JS, etc. Only use on trusted machines and close Chrome when done. + +**Step 2: Grab the auth state** + +```bash +# Auto-discover the running Chrome and save its cookies + localStorage +agent-browser --auto-connect state save ./my-auth.json +``` + +**Step 3: Reuse in automation** + +```bash +# Load auth at launch +agent-browser --state ./my-auth.json open https://app.example.com/dashboard + +# Or load into an existing session +agent-browser state load ./my-auth.json +agent-browser open https://app.example.com/dashboard +``` + +This works for any site, including those with complex OAuth flows, SSO, or 2FA -- as long as Chrome already has valid session cookies. + +> **Security note:** State files contain session tokens in plaintext. Add them to `.gitignore`, delete when no longer needed, and set `AGENT_BROWSER_ENCRYPTION_KEY` for encryption at rest. See [Security Best Practices](#security-best-practices). + +**Tip:** Combine with `--session-name` so the imported auth auto-persists across restarts: + +```bash +agent-browser --session-name myapp state load ./my-auth.json +# From now on, state is auto-saved/restored for "myapp" +``` + +## Persistent Profiles + +Use `--profile` to point agent-browser at a Chrome user data directory. This persists everything (cookies, IndexedDB, service workers, cache) across browser restarts without explicit save/load: + +```bash +# First run: login once +agent-browser --profile ~/.myapp-profile open https://app.example.com/login +# ... complete login flow ... + +# All subsequent runs: already authenticated +agent-browser --profile ~/.myapp-profile open https://app.example.com/dashboard +``` + +Use different paths for different projects or test users: + +```bash +agent-browser --profile ~/.profiles/admin open https://app.example.com +agent-browser --profile ~/.profiles/viewer open https://app.example.com +``` + +Or set via environment variable: + +```bash +export AGENT_BROWSER_PROFILE=~/.myapp-profile +agent-browser open https://app.example.com/dashboard +``` + +## Session Persistence + +Use `--session-name` to auto-save and restore cookies + localStorage by name, without managing files: + +```bash +# Auto-saves state on close, auto-restores on next launch +agent-browser --session-name twitter open https://twitter.com +# ... login flow ... +agent-browser close # state saved to ~/.agent-browser/sessions/ + +# Next time: state is automatically restored +agent-browser --session-name twitter open https://twitter.com +``` + +Encrypt state at rest: + +```bash +export AGENT_BROWSER_ENCRYPTION_KEY=$(openssl rand -hex 32) +agent-browser --session-name secure open https://app.example.com +``` + +## Basic Login Flow + +```bash +# Navigate to login page +agent-browser open https://app.example.com/login +agent-browser wait --load networkidle + +# Get form elements +agent-browser snapshot -i +# Output: @e1 [input type="email"], @e2 [input type="password"], @e3 [button] "Sign In" + +# Fill credentials +agent-browser fill @e1 "user@example.com" +agent-browser fill @e2 "password123" + +# Submit +agent-browser click @e3 +agent-browser wait --load networkidle + +# Verify login succeeded +agent-browser get url # Should be dashboard, not login +``` + +## Saving Authentication State + +After logging in, save state for reuse: + +```bash +# Login first (see above) +agent-browser open https://app.example.com/login +agent-browser snapshot -i +agent-browser fill @e1 "user@example.com" +agent-browser fill @e2 "password123" +agent-browser click @e3 +agent-browser wait --url "**/dashboard" + +# Save authenticated state +agent-browser state save ./auth-state.json +``` + +## Restoring Authentication + +Skip login by loading saved state: + +```bash +# Load saved auth state +agent-browser state load ./auth-state.json + +# Navigate directly to protected page +agent-browser open https://app.example.com/dashboard + +# Verify authenticated +agent-browser snapshot -i +``` + +## OAuth / SSO Flows + +For OAuth redirects: + +```bash +# Start OAuth flow +agent-browser open https://app.example.com/auth/google + +# Handle redirects automatically +agent-browser wait --url "**/accounts.google.com**" +agent-browser snapshot -i + +# Fill Google credentials +agent-browser fill @e1 "user@gmail.com" +agent-browser click @e2 # Next button +agent-browser wait 2000 +agent-browser snapshot -i +agent-browser fill @e3 "password" +agent-browser click @e4 # Sign in + +# Wait for redirect back +agent-browser wait --url "**/app.example.com**" +agent-browser state save ./oauth-state.json +``` + +## Two-Factor Authentication + +Handle 2FA with manual intervention: + +```bash +# Login with credentials +agent-browser open https://app.example.com/login --headed # Show browser +agent-browser snapshot -i +agent-browser fill @e1 "user@example.com" +agent-browser fill @e2 "password123" +agent-browser click @e3 + +# Wait for user to complete 2FA manually +echo "Complete 2FA in the browser window..." +agent-browser wait --url "**/dashboard" --timeout 120000 + +# Save state after 2FA +agent-browser state save ./2fa-state.json +``` + +## HTTP Basic Auth + +For sites using HTTP Basic Authentication: + +```bash +# Set credentials before navigation +agent-browser set credentials username password + +# Navigate to protected resource +agent-browser open https://protected.example.com/api +``` + +## Cookie-Based Auth + +Manually set authentication cookies: + +```bash +# Set auth cookie +agent-browser cookies set session_token "abc123xyz" + +# Navigate to protected page +agent-browser open https://app.example.com/dashboard +``` + +## Token Refresh Handling + +For sessions with expiring tokens: + +```bash +#!/bin/bash +# Wrapper that handles token refresh + +STATE_FILE="./auth-state.json" + +# Try loading existing state +if [[ -f "$STATE_FILE" ]]; then + agent-browser state load "$STATE_FILE" + agent-browser open https://app.example.com/dashboard + + # Check if session is still valid + URL=$(agent-browser get url) + if [[ "$URL" == *"/login"* ]]; then + echo "Session expired, re-authenticating..." + # Perform fresh login + agent-browser snapshot -i + agent-browser fill @e1 "$USERNAME" + agent-browser fill @e2 "$PASSWORD" + agent-browser click @e3 + agent-browser wait --url "**/dashboard" + agent-browser state save "$STATE_FILE" + fi +else + # First-time login + agent-browser open https://app.example.com/login + # ... login flow ... +fi +``` + +## Security Best Practices + +1. **Never commit state files** - They contain session tokens + + ```bash + echo "*.auth-state.json" >> .gitignore + ``` + +2. **Use environment variables for credentials** + + ```bash + agent-browser fill @e1 "$APP_USERNAME" + agent-browser fill @e2 "$APP_PASSWORD" + ``` + +3. **Clean up after automation** + + ```bash + agent-browser cookies clear + rm -f ./auth-state.json + ``` + +4. **Use short-lived sessions for CI/CD** + ```bash + # Don't persist state in CI + agent-browser open https://app.example.com/login + # ... login and perform actions ... + agent-browser close # Session ends, nothing persisted + ``` diff --git a/.agents/skills/agent-browser/references/commands.md b/.agents/skills/agent-browser/references/commands.md new file mode 100644 index 000000000..6a40f2b44 --- /dev/null +++ b/.agents/skills/agent-browser/references/commands.md @@ -0,0 +1,300 @@ + + +# Command Reference + +Complete reference for all agent-browser commands. For quick start and common patterns, see SKILL.md. + +## Navigation + +```bash +agent-browser open # Navigate to URL (aliases: goto, navigate) + # Supports: https://, http://, file://, about:, data:// + # Auto-prepends https:// if no protocol given +agent-browser back # Go back +agent-browser forward # Go forward +agent-browser reload # Reload page +agent-browser close # Close browser (aliases: quit, exit) +agent-browser connect 9222 # Connect to browser via CDP port +``` + +## Snapshot (page analysis) + +```bash +agent-browser snapshot # Full accessibility tree +agent-browser snapshot -i # Interactive elements only (recommended) +agent-browser snapshot -c # Compact output +agent-browser snapshot -d 3 # Limit depth to 3 +agent-browser snapshot -s "#main" # Scope to CSS selector +``` + +## Interactions (use @refs from snapshot) + +```bash +agent-browser click @e1 # Click +agent-browser click @e1 --new-tab # Click and open in new tab +agent-browser dblclick @e1 # Double-click +agent-browser focus @e1 # Focus element +agent-browser fill @e2 "text" # Clear and type +agent-browser type @e2 "text" # Type without clearing +agent-browser press Enter # Press key (alias: key) +agent-browser press Control+a # Key combination +agent-browser keydown Shift # Hold key down +agent-browser keyup Shift # Release key +agent-browser hover @e1 # Hover +agent-browser check @e1 # Check checkbox +agent-browser uncheck @e1 # Uncheck checkbox +agent-browser select @e1 "value" # Select dropdown option +agent-browser select @e1 "a" "b" # Select multiple options +agent-browser scroll down 500 # Scroll page (default: down 300px) +agent-browser scrollintoview @e1 # Scroll element into view (alias: scrollinto) +agent-browser drag @e1 @e2 # Drag and drop +agent-browser upload @e1 file.pdf # Upload files +``` + +## Get Information + +```bash +agent-browser get text @e1 # Get element text +agent-browser get html @e1 # Get innerHTML +agent-browser get value @e1 # Get input value +agent-browser get attr @e1 href # Get attribute +agent-browser get title # Get page title +agent-browser get url # Get current URL +agent-browser get cdp-url # Get CDP WebSocket URL +agent-browser get count ".item" # Count matching elements +agent-browser get box @e1 # Get bounding box +agent-browser get styles @e1 # Get computed styles (font, color, bg, etc.) +``` + +## Check State + +```bash +agent-browser is visible @e1 # Check if visible +agent-browser is enabled @e1 # Check if enabled +agent-browser is checked @e1 # Check if checked +``` + +## Screenshots and PDF + +```bash +agent-browser screenshot # Save to temporary directory +agent-browser screenshot path.png # Save to specific path +agent-browser screenshot --full # Full page +agent-browser pdf output.pdf # Save as PDF +``` + +## Video Recording + +```bash +agent-browser record start ./demo.webm # Start recording +agent-browser click @e1 # Perform actions +agent-browser record stop # Stop and save video +agent-browser record restart ./take2.webm # Stop current + start new +``` + +## Wait + +```bash +agent-browser wait @e1 # Wait for element +agent-browser wait 2000 # Wait milliseconds +agent-browser wait --text "Success" # Wait for text (or -t) +agent-browser wait --url "**/dashboard" # Wait for URL pattern (or -u) +agent-browser wait --load networkidle # Wait for network idle (or -l) +agent-browser wait --fn "window.ready" # Wait for JS condition (or -f) +``` + +## Mouse Control + +```bash +agent-browser mouse move 100 200 # Move mouse +agent-browser mouse down left # Press button +agent-browser mouse up left # Release button +agent-browser mouse wheel 100 # Scroll wheel +``` + +## Semantic Locators (alternative to refs) + +```bash +agent-browser find role button click --name "Submit" +agent-browser find text "Sign In" click +agent-browser find text "Sign In" click --exact # Exact match only +agent-browser find label "Email" fill "user@test.com" +agent-browser find placeholder "Search" type "query" +agent-browser find alt "Logo" click +agent-browser find title "Close" click +agent-browser find testid "submit-btn" click +agent-browser find first ".item" click +agent-browser find last ".item" click +agent-browser find nth 2 "a" hover +``` + +## Browser Settings + +```bash +agent-browser set viewport 1920 1080 # Set viewport size +agent-browser set viewport 1920 1080 2 # 2x retina (same CSS size, higher res screenshots) +agent-browser set device "iPhone 14" # Emulate device +agent-browser set geo 37.7749 -122.4194 # Set geolocation (alias: geolocation) +agent-browser set offline on # Toggle offline mode +agent-browser set headers '{"X-Key":"v"}' # Extra HTTP headers +agent-browser set credentials user pass # HTTP basic auth (alias: auth) +agent-browser set media dark # Emulate color scheme +agent-browser set media light reduced-motion # Light mode + reduced motion +``` + +## Cookies and Storage + +```bash +agent-browser cookies # Get all cookies +agent-browser cookies set name value # Set cookie +agent-browser cookies clear # Clear cookies +agent-browser storage local # Get all localStorage +agent-browser storage local key # Get specific key +agent-browser storage local set k v # Set value +agent-browser storage local clear # Clear all +``` + +## Network + +```bash +agent-browser network route # Intercept requests +agent-browser network route --abort # Block requests +agent-browser network route --body '{}' # Mock response +agent-browser network unroute [url] # Remove routes +agent-browser network requests # View tracked requests +agent-browser network requests --filter api # Filter requests +``` + +## Tabs and Windows + +```bash +agent-browser tab # List tabs +agent-browser tab new [url] # New tab +agent-browser tab 2 # Switch to tab by index +agent-browser tab close # Close current tab +agent-browser tab close 2 # Close tab by index +agent-browser window new # New window +``` + +## Frames + +```bash +agent-browser frame "#iframe" # Switch to iframe by CSS selector +agent-browser frame @e3 # Switch to iframe by element ref +agent-browser frame main # Back to main frame +``` + +### Iframe support + +Iframes are detected automatically during snapshots. When the main-frame snapshot runs, `Iframe` nodes are resolved and their content is inlined beneath the iframe element in the output (one level of nesting; iframes within iframes are not expanded). + +```bash +agent-browser snapshot -i +# @e3 [Iframe] "payment-frame" +# @e4 [input] "Card number" +# @e5 [button] "Pay" + +# Interact directly — refs inside iframes already work +agent-browser fill @e4 "4111111111111111" +agent-browser click @e5 + +# Or switch frame context for scoped snapshots +agent-browser frame @e3 # Switch using element ref +agent-browser snapshot -i # Snapshot scoped to that iframe +agent-browser frame main # Return to main frame +``` + +The `frame` command accepts: + +- **Element refs** — `frame @e3` resolves the ref to an iframe element +- **CSS selectors** — `frame "#payment-iframe"` finds the iframe by selector +- **Frame name/URL** — matches against the browser's frame tree + +## Dialogs + +```bash +agent-browser dialog accept [text] # Accept dialog +agent-browser dialog dismiss # Dismiss dialog +``` + +## JavaScript + +```bash +agent-browser eval "document.title" # Simple expressions only +agent-browser eval -b "" # Any JavaScript (base64 encoded) +agent-browser eval --stdin # Read script from stdin +``` + +Use `-b`/`--base64` or `--stdin` for reliable execution. Shell escaping with nested quotes and special characters is error-prone. + +```bash +# Base64 encode your script, then: +agent-browser eval -b "ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYyo9Il9uZXh0Il0nKQ==" + +# Or use stdin with heredoc for multiline scripts: +cat <<'EOF' | agent-browser eval --stdin +const links = document.querySelectorAll('a'); +Array.from(links).map(a => a.href); +EOF +``` + +## State Management + +```bash +agent-browser state save auth.json # Save cookies, storage, auth state +agent-browser state load auth.json # Restore saved state +``` + +## Global Options + +```bash +agent-browser --session ... # Isolated browser session +agent-browser --json ... # JSON output for parsing +agent-browser --headed ... # Show browser window (not headless) +agent-browser --full ... # Full page screenshot (-f) +agent-browser --cdp ... # Connect via Chrome DevTools Protocol +agent-browser -p ... # Cloud browser provider (--provider) +agent-browser --proxy ... # Use proxy server +agent-browser --proxy-bypass # Hosts to bypass proxy +agent-browser --headers ... # HTTP headers scoped to URL's origin +agent-browser --executable-path

# Custom browser executable +agent-browser --extension ... # Load browser extension (repeatable) +agent-browser --ignore-https-errors # Ignore SSL certificate errors +agent-browser --help # Show help (-h) +agent-browser --version # Show version (-V) +agent-browser --help # Show detailed help for a command +``` + +## Debugging + +```bash +agent-browser --headed open example.com # Show browser window +agent-browser --cdp 9222 snapshot # Connect via CDP port +agent-browser connect 9222 # Alternative: connect command +agent-browser console # View console messages +agent-browser console --clear # Clear console +agent-browser errors # View page errors +agent-browser errors --clear # Clear errors +agent-browser highlight @e1 # Highlight element +agent-browser inspect # Open Chrome DevTools for this session +agent-browser trace start # Start recording trace +agent-browser trace stop trace.zip # Stop and save trace +agent-browser profiler start # Start Chrome DevTools profiling +agent-browser profiler stop trace.json # Stop and save profile +``` + +## Environment Variables + +```bash +AGENT_BROWSER_SESSION="mysession" # Default session name +AGENT_BROWSER_EXECUTABLE_PATH="/path/chrome" # Custom browser path +AGENT_BROWSER_EXTENSIONS="/ext1,/ext2" # Comma-separated extension paths +AGENT_BROWSER_PROVIDER="browserbase" # Cloud browser provider +AGENT_BROWSER_STREAM_PORT="9223" # WebSocket streaming port +AGENT_BROWSER_HOME="/path/to/agent-browser" # Custom install location +``` diff --git a/.agents/skills/agent-browser/references/profiling.md b/.agents/skills/agent-browser/references/profiling.md new file mode 100644 index 000000000..bd47eaa0c --- /dev/null +++ b/.agents/skills/agent-browser/references/profiling.md @@ -0,0 +1,120 @@ +# Profiling + +Capture Chrome DevTools performance profiles during browser automation for performance analysis. + +**Related**: [commands.md](commands.md) for full command reference, [SKILL.md](../SKILL.md) for quick start. + +## Contents + +- [Basic Profiling](#basic-profiling) +- [Profiler Commands](#profiler-commands) +- [Categories](#categories) +- [Use Cases](#use-cases) +- [Output Format](#output-format) +- [Viewing Profiles](#viewing-profiles) +- [Limitations](#limitations) + +## Basic Profiling + +```bash +# Start profiling +agent-browser profiler start + +# Perform actions +agent-browser navigate https://example.com +agent-browser click "#button" +agent-browser wait 1000 + +# Stop and save +agent-browser profiler stop ./trace.json +``` + +## Profiler Commands + +```bash +# Start profiling with default categories +agent-browser profiler start + +# Start with custom trace categories +agent-browser profiler start --categories "devtools.timeline,v8.execute,blink.user_timing" + +# Stop profiling and save to file +agent-browser profiler stop ./trace.json +``` + +## Categories + +The `--categories` flag accepts a comma-separated list of Chrome trace categories. Default categories include: + +- `devtools.timeline` -- standard DevTools performance traces +- `v8.execute` -- time spent running JavaScript +- `blink` -- renderer events +- `blink.user_timing` -- `performance.mark()` / `performance.measure()` calls +- `latencyInfo` -- input-to-latency tracking +- `renderer.scheduler` -- task scheduling and execution +- `toplevel` -- broad-spectrum basic events + +Several `disabled-by-default-*` categories are also included for detailed timeline, call stack, and V8 CPU profiling data. + +## Use Cases + +### Diagnosing Slow Page Loads + +```bash +agent-browser profiler start +agent-browser navigate https://app.example.com +agent-browser wait --load networkidle +agent-browser profiler stop ./page-load-profile.json +``` + +### Profiling User Interactions + +```bash +agent-browser navigate https://app.example.com +agent-browser profiler start +agent-browser click "#submit" +agent-browser wait 2000 +agent-browser profiler stop ./interaction-profile.json +``` + +### CI Performance Regression Checks + +```bash +#!/bin/bash +agent-browser profiler start +agent-browser navigate https://app.example.com +agent-browser wait --load networkidle +agent-browser profiler stop "./profiles/build-${BUILD_ID}.json" +``` + +## Output Format + +The output is a JSON file in Chrome Trace Event format: + +```json +{ + "traceEvents": [ + { "cat": "devtools.timeline", "name": "RunTask", "ph": "X", "ts": 12345, "dur": 100, ... }, + ... + ], + "metadata": { + "clock-domain": "LINUX_CLOCK_MONOTONIC" + } +} +``` + +The `metadata.clock-domain` field is set based on the host platform (Linux or macOS). On Windows it is omitted. + +## Viewing Profiles + +Load the output JSON file in any of these tools: + +- **Chrome DevTools**: Performance panel > Load profile (Ctrl+Shift+I > Performance) +- **Perfetto UI**: https://ui.perfetto.dev/ -- drag and drop the JSON file +- **Trace Viewer**: `chrome://tracing` in any Chromium browser + +## Limitations + +- Only works with Chromium-based browsers (Chrome, Edge). Not supported on Firefox or WebKit. +- Trace data accumulates in memory while profiling is active (capped at 5 million events). Stop profiling promptly after the area of interest. +- Data collection on stop has a 30-second timeout. If the browser is unresponsive, the stop command may fail. diff --git a/.agents/skills/agent-browser/references/proxy-support.md b/.agents/skills/agent-browser/references/proxy-support.md new file mode 100644 index 000000000..e86a8fe33 --- /dev/null +++ b/.agents/skills/agent-browser/references/proxy-support.md @@ -0,0 +1,194 @@ +# Proxy Support + +Proxy configuration for geo-testing, rate limiting avoidance, and corporate environments. + +**Related**: [commands.md](commands.md) for global options, [SKILL.md](../SKILL.md) for quick start. + +## Contents + +- [Basic Proxy Configuration](#basic-proxy-configuration) +- [Authenticated Proxy](#authenticated-proxy) +- [SOCKS Proxy](#socks-proxy) +- [Proxy Bypass](#proxy-bypass) +- [Common Use Cases](#common-use-cases) +- [Verifying Proxy Connection](#verifying-proxy-connection) +- [Troubleshooting](#troubleshooting) +- [Best Practices](#best-practices) + +## Basic Proxy Configuration + +Use the `--proxy` flag or set proxy via environment variable: + +```bash +# Via CLI flag +agent-browser --proxy "http://proxy.example.com:8080" open https://example.com + +# Via environment variable +export HTTP_PROXY="http://proxy.example.com:8080" +agent-browser open https://example.com + +# HTTPS proxy +export HTTPS_PROXY="https://proxy.example.com:8080" +agent-browser open https://example.com + +# Both +export HTTP_PROXY="http://proxy.example.com:8080" +export HTTPS_PROXY="http://proxy.example.com:8080" +agent-browser open https://example.com +``` + +## Authenticated Proxy + +For proxies requiring authentication: + +```bash +# Include credentials in URL +export HTTP_PROXY="http://username:password@proxy.example.com:8080" +agent-browser open https://example.com +``` + +## SOCKS Proxy + +```bash +# SOCKS5 proxy +export ALL_PROXY="socks5://proxy.example.com:1080" +agent-browser open https://example.com + +# SOCKS5 with auth +export ALL_PROXY="socks5://user:pass@proxy.example.com:1080" +agent-browser open https://example.com +``` + +## Proxy Bypass + +Skip proxy for specific domains using `--proxy-bypass` or `NO_PROXY`: + +```bash +# Via CLI flag +agent-browser --proxy "http://proxy.example.com:8080" --proxy-bypass "localhost,*.internal.com" open https://example.com + +# Via environment variable +export NO_PROXY="localhost,127.0.0.1,.internal.company.com" +agent-browser open https://internal.company.com # Direct connection +agent-browser open https://external.com # Via proxy +``` + +## Common Use Cases + +### Geo-Location Testing + +```bash +#!/bin/bash +# Test site from different regions using geo-located proxies + +PROXIES=( + "http://us-proxy.example.com:8080" + "http://eu-proxy.example.com:8080" + "http://asia-proxy.example.com:8080" +) + +for proxy in "${PROXIES[@]}"; do + export HTTP_PROXY="$proxy" + export HTTPS_PROXY="$proxy" + + region=$(echo "$proxy" | grep -oP '^\w+-\w+') + echo "Testing from: $region" + + agent-browser --session "$region" open https://example.com + agent-browser --session "$region" screenshot "./screenshots/$region.png" + agent-browser --session "$region" close +done +``` + +### Rotating Proxies for Scraping + +```bash +#!/bin/bash +# Rotate through proxy list to avoid rate limiting + +PROXY_LIST=( + "http://proxy1.example.com:8080" + "http://proxy2.example.com:8080" + "http://proxy3.example.com:8080" +) + +URLS=( + "https://site.com/page1" + "https://site.com/page2" + "https://site.com/page3" +) + +for i in "${!URLS[@]}"; do + proxy_index=$((i % ${#PROXY_LIST[@]})) + export HTTP_PROXY="${PROXY_LIST[$proxy_index]}" + export HTTPS_PROXY="${PROXY_LIST[$proxy_index]}" + + agent-browser open "${URLS[$i]}" + agent-browser get text body > "output-$i.txt" + agent-browser close + + sleep 1 # Polite delay +done +``` + +### Corporate Network Access + +```bash +#!/bin/bash +# Access internal sites via corporate proxy + +export HTTP_PROXY="http://corpproxy.company.com:8080" +export HTTPS_PROXY="http://corpproxy.company.com:8080" +export NO_PROXY="localhost,127.0.0.1,.company.com" + +# External sites go through proxy +agent-browser open https://external-vendor.com + +# Internal sites bypass proxy +agent-browser open https://intranet.company.com +``` + +## Verifying Proxy Connection + +```bash +# Check your apparent IP +agent-browser open https://httpbin.org/ip +agent-browser get text body +# Should show proxy's IP, not your real IP +``` + +## Troubleshooting + +### Proxy Connection Failed + +```bash +# Test proxy connectivity first +curl -x http://proxy.example.com:8080 https://httpbin.org/ip + +# Check if proxy requires auth +export HTTP_PROXY="http://user:pass@proxy.example.com:8080" +``` + +### SSL/TLS Errors Through Proxy + +Some proxies perform SSL inspection. If you encounter certificate errors: + +```bash +# For testing only - not recommended for production +agent-browser open https://example.com --ignore-https-errors +``` + +### Slow Performance + +```bash +# Use proxy only when necessary +export NO_PROXY="*.cdn.com,*.static.com" # Direct CDN access +``` + +## Best Practices + +1. **Use environment variables** - Don't hardcode proxy credentials +2. **Set NO_PROXY appropriately** - Avoid routing local traffic through proxy +3. **Test proxy before automation** - Verify connectivity with simple requests +4. **Handle proxy failures gracefully** - Implement retry logic for unstable proxies +5. **Rotate proxies for large scraping jobs** - Distribute load and avoid bans diff --git a/.agents/skills/agent-browser/references/session-management.md b/.agents/skills/agent-browser/references/session-management.md new file mode 100644 index 000000000..64f3e8b6e --- /dev/null +++ b/.agents/skills/agent-browser/references/session-management.md @@ -0,0 +1,201 @@ + + +# Session Management + +Multiple isolated browser sessions with state persistence and concurrent browsing. + +**Related**: [authentication.md](authentication.md) for login patterns, [SKILL.md](../SKILL.md) for quick start. + +## Contents + +- [Named Sessions](#named-sessions) +- [Session Isolation Properties](#session-isolation-properties) +- [Session State Persistence](#session-state-persistence) +- [Common Patterns](#common-patterns) +- [Default Session](#default-session) +- [Session Cleanup](#session-cleanup) +- [Best Practices](#best-practices) + +## Named Sessions + +Use `--session` flag to isolate browser contexts: + +```bash +# Session 1: Authentication flow +agent-browser --session auth open https://app.example.com/login + +# Session 2: Public browsing (separate cookies, storage) +agent-browser --session public open https://example.com + +# Commands are isolated by session +agent-browser --session auth fill @e1 "user@example.com" +agent-browser --session public get text body +``` + +## Session Isolation Properties + +Each session has independent: + +- Cookies +- LocalStorage / SessionStorage +- IndexedDB +- Cache +- Browsing history +- Open tabs + +## Session State Persistence + +### Save Session State + +```bash +# Save cookies, storage, and auth state +agent-browser state save /path/to/auth-state.json +``` + +### Load Session State + +```bash +# Restore saved state +agent-browser state load /path/to/auth-state.json + +# Continue with authenticated session +agent-browser open https://app.example.com/dashboard +``` + +### State File Contents + +```json +{ + "cookies": [...], + "localStorage": {...}, + "sessionStorage": {...}, + "origins": [...] +} +``` + +## Common Patterns + +### Authenticated Session Reuse + +```bash +#!/bin/bash +# Save login state once, reuse many times + +STATE_FILE="/tmp/auth-state.json" + +# Check if we have saved state +if [[ -f "$STATE_FILE" ]]; then + agent-browser state load "$STATE_FILE" + agent-browser open https://app.example.com/dashboard +else + # Perform login + agent-browser open https://app.example.com/login + agent-browser snapshot -i + agent-browser fill @e1 "$USERNAME" + agent-browser fill @e2 "$PASSWORD" + agent-browser click @e3 + agent-browser wait --load networkidle + + # Save for future use + agent-browser state save "$STATE_FILE" +fi +``` + +### Concurrent Scraping + +```bash +#!/bin/bash +# Scrape multiple sites concurrently + +# Start all sessions +agent-browser --session site1 open https://site1.com & +agent-browser --session site2 open https://site2.com & +agent-browser --session site3 open https://site3.com & +wait + +# Extract from each +agent-browser --session site1 get text body > site1.txt +agent-browser --session site2 get text body > site2.txt +agent-browser --session site3 get text body > site3.txt + +# Cleanup +agent-browser --session site1 close +agent-browser --session site2 close +agent-browser --session site3 close +``` + +### A/B Testing Sessions + +```bash +# Test different user experiences +agent-browser --session variant-a open "https://app.com?variant=a" +agent-browser --session variant-b open "https://app.com?variant=b" + +# Compare +agent-browser --session variant-a screenshot /tmp/variant-a.png +agent-browser --session variant-b screenshot /tmp/variant-b.png +``` + +## Default Session + +When `--session` is omitted, commands use the default session: + +```bash +# These use the same default session +agent-browser open https://example.com +agent-browser snapshot -i +agent-browser close # Closes default session +``` + +## Session Cleanup + +```bash +# Close specific session +agent-browser --session auth close + +# List active sessions +agent-browser session list +``` + +## Best Practices + +### 1. Name Sessions Semantically + +```bash +# GOOD: Clear purpose +agent-browser --session github-auth open https://github.com +agent-browser --session docs-scrape open https://docs.example.com + +# AVOID: Generic names +agent-browser --session s1 open https://github.com +``` + +### 2. Always Clean Up + +```bash +# Close sessions when done +agent-browser --session auth close +agent-browser --session scrape close +``` + +### 3. Handle State Files Securely + +```bash +# Don't commit state files (contain auth tokens!) +echo "*.auth-state.json" >> .gitignore + +# Delete after use +rm /tmp/auth-state.json +``` + +### 4. Timeout Long Sessions + +```bash +# Set timeout for automated scripts +timeout 60 agent-browser --session long-task get text body +``` diff --git a/.agents/skills/agent-browser/references/snapshot-refs.md b/.agents/skills/agent-browser/references/snapshot-refs.md new file mode 100644 index 000000000..ea32b028c --- /dev/null +++ b/.agents/skills/agent-browser/references/snapshot-refs.md @@ -0,0 +1,229 @@ + + +# Snapshot and Refs + +Compact element references that reduce context usage dramatically for AI agents. + +**Related**: [commands.md](commands.md) for full command reference, [SKILL.md](../SKILL.md) for quick start. + +## Contents + +- [How Refs Work](#how-refs-work) +- [Snapshot Command](#the-snapshot-command) +- [Using Refs](#using-refs) +- [Ref Lifecycle](#ref-lifecycle) +- [Best Practices](#best-practices) +- [Ref Notation Details](#ref-notation-details) +- [Troubleshooting](#troubleshooting) + +## How Refs Work + +Traditional approach: + +``` +Full DOM/HTML → AI parses → CSS selector → Action (~3000-5000 tokens) +``` + +agent-browser approach: + +``` +Compact snapshot → @refs assigned → Direct interaction (~200-400 tokens) +``` + +## The Snapshot Command + +```bash +# Basic snapshot (shows page structure) +agent-browser snapshot + +# Interactive snapshot (-i flag) - RECOMMENDED +agent-browser snapshot -i +``` + +### Snapshot Output Format + +``` +Page: Example Site - Home +URL: https://example.com + +@e1 [header] + @e2 [nav] + @e3 [a] "Home" + @e4 [a] "Products" + @e5 [a] "About" + @e6 [button] "Sign In" + +@e7 [main] + @e8 [h1] "Welcome" + @e9 [form] + @e10 [input type="email"] placeholder="Email" + @e11 [input type="password"] placeholder="Password" + @e12 [button type="submit"] "Log In" + +@e13 [footer] + @e14 [a] "Privacy Policy" +``` + +## Using Refs + +Once you have refs, interact directly: + +```bash +# Click the "Sign In" button +agent-browser click @e6 + +# Fill email input +agent-browser fill @e10 "user@example.com" + +# Fill password +agent-browser fill @e11 "password123" + +# Submit the form +agent-browser click @e12 +``` + +## Ref Lifecycle + +**IMPORTANT**: Refs are invalidated when the page changes! + +```bash +# Get initial snapshot +agent-browser snapshot -i +# @e1 [button] "Next" + +# Click triggers page change +agent-browser click @e1 + +# MUST re-snapshot to get new refs! +agent-browser snapshot -i +# @e1 [h1] "Page 2" ← Different element now! +``` + +## Best Practices + +### 1. Always Snapshot Before Interacting + +```bash +# CORRECT +agent-browser open https://example.com +agent-browser snapshot -i # Get refs first +agent-browser click @e1 # Use ref + +# WRONG +agent-browser open https://example.com +agent-browser click @e1 # Ref doesn't exist yet! +``` + +### 2. Re-Snapshot After Navigation + +```bash +agent-browser click @e5 # Navigates to new page +agent-browser snapshot -i # Get new refs +agent-browser click @e1 # Use new refs +``` + +### 3. Re-Snapshot After Dynamic Changes + +```bash +agent-browser click @e1 # Opens dropdown +agent-browser snapshot -i # See dropdown items +agent-browser click @e7 # Select item +``` + +### 4. Snapshot Specific Regions + +For complex pages, snapshot specific areas: + +```bash +# Snapshot just the form +agent-browser snapshot @e9 +``` + +## Ref Notation Details + +``` +@e1 [tag type="value"] "text content" placeholder="hint" +│ │ │ │ │ +│ │ │ │ └─ Additional attributes +│ │ │ └─ Visible text +│ │ └─ Key attributes shown +│ └─ HTML tag name +└─ Unique ref ID +``` + +### Common Patterns + +``` +@e1 [button] "Submit" # Button with text +@e2 [input type="email"] # Email input +@e3 [input type="password"] # Password input +@e4 [a href="/page"] "Link Text" # Anchor link +@e5 [select] # Dropdown +@e6 [textarea] placeholder="Message" # Text area +@e7 [div class="modal"] # Container (when relevant) +@e8 [img alt="Logo"] # Image +@e9 [checkbox] checked # Checked checkbox +@e10 [radio] selected # Selected radio +``` + +## Iframes + +Snapshots automatically detect and inline iframe content. When the main-frame snapshot runs, each `Iframe` node is resolved and its child accessibility tree is included directly beneath it in the output. Refs assigned to elements inside iframes carry frame context, so interactions like `click`, `fill`, and `type` work without manually switching frames. + +```bash +agent-browser snapshot -i +# @e1 [heading] "Checkout" +# @e2 [Iframe] "payment-frame" +# @e3 [input] "Card number" +# @e4 [input] "Expiry" +# @e5 [button] "Pay" +# @e6 [button] "Cancel" + +# Interact with iframe elements directly using their refs +agent-browser fill @e3 "4111111111111111" +agent-browser fill @e4 "12/28" +agent-browser click @e5 +``` + +**Key details:** + +- Only one level of iframe nesting is expanded (iframes within iframes are not recursed) +- Cross-origin iframes that block accessibility tree access are silently skipped +- Empty iframes or iframes with no interactive content are omitted from the output +- To scope a snapshot to a single iframe, use `frame @ref` then `snapshot -i` + +## Troubleshooting + +### "Ref not found" Error + +```bash +# Ref may have changed - re-snapshot +agent-browser snapshot -i +``` + +### Element Not Visible in Snapshot + +```bash +# Scroll down to reveal element +agent-browser scroll down 1000 +agent-browser snapshot -i + +# Or wait for dynamic content +agent-browser wait 1000 +agent-browser snapshot -i +``` + +### Too Many Elements + +```bash +# Snapshot specific container +agent-browser snapshot @e5 + +# Or use get text for content-only extraction +agent-browser get text @e5 +``` diff --git a/.agents/skills/agent-browser/references/video-recording.md b/.agents/skills/agent-browser/references/video-recording.md new file mode 100644 index 000000000..e6a9fb4e2 --- /dev/null +++ b/.agents/skills/agent-browser/references/video-recording.md @@ -0,0 +1,173 @@ +# Video Recording + +Capture browser automation as video for debugging, documentation, or verification. + +**Related**: [commands.md](commands.md) for full command reference, [SKILL.md](../SKILL.md) for quick start. + +## Contents + +- [Basic Recording](#basic-recording) +- [Recording Commands](#recording-commands) +- [Use Cases](#use-cases) +- [Best Practices](#best-practices) +- [Output Format](#output-format) +- [Limitations](#limitations) + +## Basic Recording + +```bash +# Start recording +agent-browser record start ./demo.webm + +# Perform actions +agent-browser open https://example.com +agent-browser snapshot -i +agent-browser click @e1 +agent-browser fill @e2 "test input" + +# Stop and save +agent-browser record stop +``` + +## Recording Commands + +```bash +# Start recording to file +agent-browser record start ./output.webm + +# Stop current recording +agent-browser record stop + +# Restart with new file (stops current + starts new) +agent-browser record restart ./take2.webm +``` + +## Use Cases + +### Debugging Failed Automation + +```bash +#!/bin/bash +# Record automation for debugging + +agent-browser record start ./debug-$(date +%Y%m%d-%H%M%S).webm + +# Run your automation +agent-browser open https://app.example.com +agent-browser snapshot -i +agent-browser click @e1 || { + echo "Click failed - check recording" + agent-browser record stop + exit 1 +} + +agent-browser record stop +``` + +### Documentation Generation + +```bash +#!/bin/bash +# Record workflow for documentation + +agent-browser record start ./docs/how-to-login.webm + +agent-browser open https://app.example.com/login +agent-browser wait 1000 # Pause for visibility + +agent-browser snapshot -i +agent-browser fill @e1 "demo@example.com" +agent-browser wait 500 + +agent-browser fill @e2 "password" +agent-browser wait 500 + +agent-browser click @e3 +agent-browser wait --load networkidle +agent-browser wait 1000 # Show result + +agent-browser record stop +``` + +### CI/CD Test Evidence + +```bash +#!/bin/bash +# Record E2E test runs for CI artifacts + +TEST_NAME="${1:-e2e-test}" +RECORDING_DIR="./test-recordings" +mkdir -p "$RECORDING_DIR" + +agent-browser record start "$RECORDING_DIR/$TEST_NAME-$(date +%s).webm" + +# Run test +if run_e2e_test; then + echo "Test passed" +else + echo "Test failed - recording saved" +fi + +agent-browser record stop +``` + +## Best Practices + +### 1. Add Pauses for Clarity + +```bash +# Slow down for human viewing +agent-browser click @e1 +agent-browser wait 500 # Let viewer see result +``` + +### 2. Use Descriptive Filenames + +```bash +# Include context in filename +agent-browser record start ./recordings/login-flow-2024-01-15.webm +agent-browser record start ./recordings/checkout-test-run-42.webm +``` + +### 3. Handle Recording in Error Cases + +```bash +#!/bin/bash +set -e + +cleanup() { + agent-browser record stop 2>/dev/null || true + agent-browser close 2>/dev/null || true +} +trap cleanup EXIT + +agent-browser record start ./automation.webm +# ... automation steps ... +``` + +### 4. Combine with Screenshots + +```bash +# Record video AND capture key frames +agent-browser record start ./flow.webm + +agent-browser open https://example.com +agent-browser screenshot ./screenshots/step1-homepage.png + +agent-browser click @e1 +agent-browser screenshot ./screenshots/step2-after-click.png + +agent-browser record stop +``` + +## Output Format + +- Default format: WebM (VP8/VP9 codec) +- Compatible with all modern browsers and video players +- Compressed but high quality + +## Limitations + +- Recording adds slight overhead to automation +- Large recordings can consume significant disk space +- Some headless environments may have codec limitations diff --git a/.agents/skills/agent-browser/templates/authenticated-session.sh b/.agents/skills/agent-browser/templates/authenticated-session.sh new file mode 100755 index 000000000..b66c9289c --- /dev/null +++ b/.agents/skills/agent-browser/templates/authenticated-session.sh @@ -0,0 +1,105 @@ +#!/bin/bash +# Template: Authenticated Session Workflow +# Purpose: Login once, save state, reuse for subsequent runs +# Usage: ./authenticated-session.sh [state-file] +# +# RECOMMENDED: Use the auth vault instead of this template: +# echo "" | agent-browser auth save myapp --url --username --password-stdin +# agent-browser auth login myapp +# The auth vault stores credentials securely and the LLM never sees passwords. +# +# Environment variables: +# APP_USERNAME - Login username/email +# APP_PASSWORD - Login password +# +# Two modes: +# 1. Discovery mode (default): Shows form structure so you can identify refs +# 2. Login mode: Performs actual login after you update the refs +# +# Setup steps: +# 1. Run once to see form structure (discovery mode) +# 2. Update refs in LOGIN FLOW section below +# 3. Set APP_USERNAME and APP_PASSWORD +# 4. Delete the DISCOVERY section + +set -euo pipefail + +LOGIN_URL="${1:?Usage: $0 [state-file]}" +STATE_FILE="${2:-./auth-state.json}" + +echo "Authentication workflow: $LOGIN_URL" + +# ================================================================ +# SAVED STATE: Skip login if valid saved state exists +# ================================================================ +if [[ -f "$STATE_FILE" ]]; then + echo "Loading saved state from $STATE_FILE..." + if agent-browser --state "$STATE_FILE" open "$LOGIN_URL" 2>/dev/null; then + agent-browser wait --load networkidle + + CURRENT_URL=$(agent-browser get url) + if [[ "$CURRENT_URL" != *"login"* ]] && [[ "$CURRENT_URL" != *"signin"* ]]; then + echo "Session restored successfully" + agent-browser snapshot -i + exit 0 + fi + echo "Session expired, performing fresh login..." + agent-browser close 2>/dev/null || true + else + echo "Failed to load state, re-authenticating..." + fi + rm -f "$STATE_FILE" +fi + +# ================================================================ +# DISCOVERY MODE: Shows form structure (delete after setup) +# ================================================================ +echo "Opening login page..." +agent-browser open "$LOGIN_URL" +agent-browser wait --load networkidle + +echo "" +echo "Login form structure:" +echo "---" +agent-browser snapshot -i +echo "---" +echo "" +echo "Next steps:" +echo " 1. Note the refs: username=@e?, password=@e?, submit=@e?" +echo " 2. Update the LOGIN FLOW section below with your refs" +echo " 3. Set: export APP_USERNAME='...' APP_PASSWORD='...'" +echo " 4. Delete this DISCOVERY MODE section" +echo "" +agent-browser close +exit 0 + +# ================================================================ +# LOGIN FLOW: Uncomment and customize after discovery +# ================================================================ +# : "${APP_USERNAME:?Set APP_USERNAME environment variable}" +# : "${APP_PASSWORD:?Set APP_PASSWORD environment variable}" +# +# agent-browser open "$LOGIN_URL" +# agent-browser wait --load networkidle +# agent-browser snapshot -i +# +# # Fill credentials (update refs to match your form) +# agent-browser fill @e1 "$APP_USERNAME" +# agent-browser fill @e2 "$APP_PASSWORD" +# agent-browser click @e3 +# agent-browser wait --load networkidle +# +# # Verify login succeeded +# FINAL_URL=$(agent-browser get url) +# if [[ "$FINAL_URL" == *"login"* ]] || [[ "$FINAL_URL" == *"signin"* ]]; then +# echo "Login failed - still on login page" +# agent-browser screenshot /tmp/login-failed.png +# agent-browser close +# exit 1 +# fi +# +# # Save state for future runs +# echo "Saving state to $STATE_FILE" +# agent-browser state save "$STATE_FILE" +# echo "Login successful" +# agent-browser snapshot -i diff --git a/.agents/skills/agent-browser/templates/capture-workflow.sh b/.agents/skills/agent-browser/templates/capture-workflow.sh new file mode 100755 index 000000000..3bc93ad0c --- /dev/null +++ b/.agents/skills/agent-browser/templates/capture-workflow.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# Template: Content Capture Workflow +# Purpose: Extract content from web pages (text, screenshots, PDF) +# Usage: ./capture-workflow.sh [output-dir] +# +# Outputs: +# - page-full.png: Full page screenshot +# - page-structure.txt: Page element structure with refs +# - page-text.txt: All text content +# - page.pdf: PDF version +# +# Optional: Load auth state for protected pages + +set -euo pipefail + +TARGET_URL="${1:?Usage: $0 [output-dir]}" +OUTPUT_DIR="${2:-.}" + +echo "Capturing: $TARGET_URL" +mkdir -p "$OUTPUT_DIR" + +# Optional: Load authentication state +# if [[ -f "./auth-state.json" ]]; then +# echo "Loading authentication state..." +# agent-browser state load "./auth-state.json" +# fi + +# Navigate to target +agent-browser open "$TARGET_URL" +agent-browser wait --load networkidle + +# Get metadata +TITLE=$(agent-browser get title) +URL=$(agent-browser get url) +echo "Title: $TITLE" +echo "URL: $URL" + +# Capture full page screenshot +agent-browser screenshot --full "$OUTPUT_DIR/page-full.png" +echo "Saved: $OUTPUT_DIR/page-full.png" + +# Get page structure with refs +agent-browser snapshot -i > "$OUTPUT_DIR/page-structure.txt" +echo "Saved: $OUTPUT_DIR/page-structure.txt" + +# Extract all text content +agent-browser get text body > "$OUTPUT_DIR/page-text.txt" +echo "Saved: $OUTPUT_DIR/page-text.txt" + +# Save as PDF +agent-browser pdf "$OUTPUT_DIR/page.pdf" +echo "Saved: $OUTPUT_DIR/page.pdf" + +# Optional: Extract specific elements using refs from structure +# agent-browser get text @e5 > "$OUTPUT_DIR/main-content.txt" + +# Optional: Handle infinite scroll pages +# for i in {1..5}; do +# agent-browser scroll down 1000 +# agent-browser wait 1000 +# done +# agent-browser screenshot --full "$OUTPUT_DIR/page-scrolled.png" + +# Cleanup +agent-browser close + +echo "" +echo "Capture complete:" +ls -la "$OUTPUT_DIR" diff --git a/.agents/skills/agent-browser/templates/form-automation.sh b/.agents/skills/agent-browser/templates/form-automation.sh new file mode 100755 index 000000000..6784fcd3a --- /dev/null +++ b/.agents/skills/agent-browser/templates/form-automation.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# Template: Form Automation Workflow +# Purpose: Fill and submit web forms with validation +# Usage: ./form-automation.sh +# +# This template demonstrates the snapshot-interact-verify pattern: +# 1. Navigate to form +# 2. Snapshot to get element refs +# 3. Fill fields using refs +# 4. Submit and verify result +# +# Customize: Update the refs (@e1, @e2, etc.) based on your form's snapshot output + +set -euo pipefail + +FORM_URL="${1:?Usage: $0 }" + +echo "Form automation: $FORM_URL" + +# Step 1: Navigate to form +agent-browser open "$FORM_URL" +agent-browser wait --load networkidle + +# Step 2: Snapshot to discover form elements +echo "" +echo "Form structure:" +agent-browser snapshot -i + +# Step 3: Fill form fields (customize these refs based on snapshot output) +# +# Common field types: +# agent-browser fill @e1 "John Doe" # Text input +# agent-browser fill @e2 "user@example.com" # Email input +# agent-browser fill @e3 "SecureP@ss123" # Password input +# agent-browser select @e4 "Option Value" # Dropdown +# agent-browser check @e5 # Checkbox +# agent-browser click @e6 # Radio button +# agent-browser fill @e7 "Multi-line text" # Textarea +# agent-browser upload @e8 /path/to/file.pdf # File upload +# +# Uncomment and modify: +# agent-browser fill @e1 "Test User" +# agent-browser fill @e2 "test@example.com" +# agent-browser click @e3 # Submit button + +# Step 4: Wait for submission +# agent-browser wait --load networkidle +# agent-browser wait --url "**/success" # Or wait for redirect + +# Step 5: Verify result +echo "" +echo "Result:" +agent-browser get url +agent-browser snapshot -i + +# Optional: Capture evidence +agent-browser screenshot /tmp/form-result.png +echo "Screenshot saved: /tmp/form-result.png" + +# Cleanup +agent-browser close +echo "Done" diff --git a/.agents/skills/architecture-governance/references/golden-module/CONTRACT.md b/.agents/skills/architecture-governance/references/golden-module/CONTRACT.md new file mode 100644 index 000000000..ec61ab5fa --- /dev/null +++ b/.agents/skills/architecture-governance/references/golden-module/CONTRACT.md @@ -0,0 +1,3 @@ +# Golden module + +This fixture demonstrates the smallest managed module: a manifest, a narrow port, an example, and no implementation details in the public surface. diff --git a/.agents/skills/architecture-governance/references/golden-module/contract.example.ts b/.agents/skills/architecture-governance/references/golden-module/contract.example.ts new file mode 100644 index 000000000..ba43d0d71 --- /dev/null +++ b/.agents/skills/architecture-governance/references/golden-module/contract.example.ts @@ -0,0 +1,5 @@ +import type { GoldenPort } from "./contract.js"; + +export async function useGolden(port: GoldenPort): Promise<"ok"> { + return port.ping(); +} diff --git a/.agents/skills/architecture-governance/references/golden-module/contract.ts b/.agents/skills/architecture-governance/references/golden-module/contract.ts new file mode 100644 index 000000000..0cb777747 --- /dev/null +++ b/.agents/skills/architecture-governance/references/golden-module/contract.ts @@ -0,0 +1,3 @@ +export interface GoldenPort { + ping(): Promise<"ok">; +} diff --git a/.agents/skills/architecture-governance/references/golden-module/module.ts b/.agents/skills/architecture-governance/references/golden-module/module.ts new file mode 100644 index 000000000..594faa574 --- /dev/null +++ b/.agents/skills/architecture-governance/references/golden-module/module.ts @@ -0,0 +1,6 @@ +export const goldenModule = { + id: "golden", + requires: [], + provides: ["golden-port"], + publicEntrypoints: ["contract.ts"], +} as const; diff --git a/.agents/skills/architecture-governance/references/module-contract.md b/.agents/skills/architecture-governance/references/module-contract.md new file mode 100644 index 000000000..da3388299 --- /dev/null +++ b/.agents/skills/architecture-governance/references/module-contract.md @@ -0,0 +1,5 @@ +# Managed module contract + +A managed module exposes only its contract entrypoint. The contract contains branded identifiers, schemas, typed commands, events, errors, and the semantics required by callers. `domain` stays pure, `app` owns use-case orchestration, `adapters` owns IO and process boundaries, and `ui` consumes the module port/read model. + +The example is part of the agent context package. The short `CONTRACT.md` records invariants that types cannot express. diff --git a/.agents/skills/architecture-governance/references/policy-schema.md b/.agents/skills/architecture-governance/references/policy-schema.md new file mode 100644 index 000000000..12266525c --- /dev/null +++ b/.agents/skills/architecture-governance/references/policy-schema.md @@ -0,0 +1,9 @@ +# Policy schema + +`architecture-policy.yaml` contains `version: 1`, `modules`, global thresholds and optional exceptions. The current parser is `scripts/architecture/policy.mjs`. + +Each module declares an `id`, one or more `roots`, optional `managed: true`, `requires`, `publicEntrypoints`, `layers`, `layerOrder` and `owner`. Existing legacy modules can remain unmanaged. Dependencies must name registered module IDs. + +Global keys are `maxFileLines`, `maxContractLines`, `maxPublicMethods`, `forbidCycles`, `forbidDeepImports` and `managedOnly`. Layer names and ordering come from each module's configuration; do not assume a global layer list. + +The policy owns module topology. A managed module's `module.ts` declares local dependencies; keep it consistent with the policy. Verify supported options in the parser before documenting or using them. diff --git a/.agents/skills/architecture-governance/references/rule-catalog.md b/.agents/skills/architecture-governance/references/rule-catalog.md new file mode 100644 index 000000000..927014873 --- /dev/null +++ b/.agents/skills/architecture-governance/references/rule-catalog.md @@ -0,0 +1,20 @@ +# Rule catalog + +| Rule | Meaning | Typical fix | +| -------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------- | +| `module-dependency` | Cross-module import is missing from `requires` | Add a public contract or move the integration owner | +| `deep-import` | Import bypasses a module public entrypoint | Import the contract/index entrypoint | +| `cycle` | The managed dependency graph contains a cycle | Split the owner or invert the dependency through a port | +| `max-file-lines` | Managed source exceeds the policy budget | Split by responsibility; do not add a disable | +| `max-contract-lines` | A contract is too broad | Split the capability or reduce the public surface | +| `max-public-methods` | A contract exposes too many methods | Split the capability or introduce a narrower read/write contract | +| `layer-direction` | A layer imports a higher implementation layer | Depend on a lower layer port or move the integration owner | +| `domain-io` | Domain code imports process, network, filesystem, or timer APIs | Move IO to an adapter and pass a typed port into the domain | +| `ui-implementation-import` | A file in a `ui` layer imports a repository, runtime, or service implementation | Depend on the module port / read model exposed by `contract.ts` | +| `expired-exception` | A configured exception has expired | Resolve the violation and remove the expired exception | +| `missing-module-artifact` | A managed module lacks its manifest or contract fixtures | Add the required module contract, example, test, and CONTRACT.md | +| `disable-count` | Managed code adds a lint suppression | Fix the underlying violation or add a reviewed expiring exception | + +Existing violations are suppressible only through `.architecture-baseline.json`; new violations remain blocking. + +The current resolver follows relative imports among discovered source files. Workspace package names, path aliases and dynamic imports need separate inspection. `--changed` selects working-tree differences from `HEAD` and untracked files; use a full check when reviewing committed changes. diff --git a/.agents/skills/architecture-governance/references/troubleshooting.md b/.agents/skills/architecture-governance/references/troubleshooting.md new file mode 100644 index 000000000..0ee2143fd --- /dev/null +++ b/.agents/skills/architecture-governance/references/troubleshooting.md @@ -0,0 +1,11 @@ +# Troubleshooting + +- `module-dependency`: use a public contract or declare the dependency in both the local manifest and policy after confirming its owner. +- `deep-import`: use the target module's declared public entrypoint. +- `cycle`: move shared types into a contract or invert the dependency through a port. +- `missing-module-artifact`: add the managed module's manifest, contract, example or contract document reported by the check. +- `expired-exception`: resolve the underlying violation and remove the expired exception; do not silently extend it. +- Changed-file scope: `pnpm architecture:check --changed` selects differences from `HEAD` plus untracked files. Run `pnpm architecture:check` for a full scan; committed changes are no longer a dirty-worktree diff. +- Baseline mismatch: inspect the failures first. Use `pnpm architecture:baseline:update` only for an explicitly reviewed baseline change. + +The check currently resolves relative imports. Inspect workspace aliases and package imports separately; a passing result does not prove that every dependency was analyzed. diff --git a/.agents/skills/dogfood/SKILL.md b/.agents/skills/dogfood/SKILL.md new file mode 100644 index 000000000..a08a64807 --- /dev/null +++ b/.agents/skills/dogfood/SKILL.md @@ -0,0 +1,228 @@ +--- +name: dogfood +description: Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", "test this app/site/platform", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams. +allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*) +disable-model-invocation: true +--- + + + +# Dogfood + +Systematically explore a web application, find issues, and produce a report with full reproduction evidence for every finding. + +## Setup + +Only the **Target URL** is required. Everything else has sensible defaults -- use them unless the user explicitly provides an override. + +| Parameter | Default | Example override | +| -------------------- | ----------------------------------------------------- | ------------------------------------- | +| **Target URL** | _(required)_ | `vercel.com`, `http://localhost:3000` | +| **Session name** | Slugified domain (e.g., `vercel.com` -> `vercel-com`) | `--session my-session` | +| **Output directory** | `./dogfood-output/` | `Output directory: /tmp/qa` | +| **Scope** | Full app | `Focus on the billing page` | +| **Authentication** | None | `Sign in to user@example.com` | + +If the user says something like "dogfood vercel.com", start immediately with defaults. Do not ask clarifying questions unless authentication is mentioned but credentials are missing. + +Always use `agent-browser` directly -- never `npx agent-browser`. The direct binary uses the fast Rust client. `npx` routes through Node.js and is significantly slower. + +## Workflow + +``` +1. Initialize Set up session, output dirs, report file +2. Authenticate Sign in if needed, save state +3. Orient Navigate to starting point, take initial snapshot +4. Explore Systematically visit pages and test features +5. Document Screenshot + record each issue as found +6. Wrap up Update summary counts, close session +``` + +### 1. Initialize + +```bash +mkdir -p {OUTPUT_DIR}/screenshots {OUTPUT_DIR}/videos +``` + +Copy the report template into the output directory and fill in the header fields: + +```bash +cp {SKILL_DIR}/templates/dogfood-report-template.md {OUTPUT_DIR}/report.md +``` + +Start a named session: + +```bash +agent-browser --session {SESSION} open {TARGET_URL} +agent-browser --session {SESSION} wait --load networkidle +``` + +### 2. Authenticate + +If the app requires login: + +```bash +agent-browser --session {SESSION} snapshot -i +# Identify login form refs, fill credentials +agent-browser --session {SESSION} fill @e1 "{EMAIL}" +agent-browser --session {SESSION} fill @e2 "{PASSWORD}" +agent-browser --session {SESSION} click @e3 +agent-browser --session {SESSION} wait --load networkidle +``` + +For OTP/email codes: ask the user, wait for their response, then enter the code. + +After successful login, save state for potential reuse: + +```bash +agent-browser --session {SESSION} state save {OUTPUT_DIR}/auth-state.json +``` + +### 3. Orient + +Take an initial annotated screenshot and snapshot to understand the app structure: + +```bash +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/initial.png +agent-browser --session {SESSION} snapshot -i +``` + +Identify the main navigation elements and map out the sections to visit. + +### 4. Explore + +Read [references/issue-taxonomy.md](references/issue-taxonomy.md) for the full list of what to look for and the exploration checklist. + +**Strategy -- work through the app systematically:** + +- Start from the main navigation. Visit each top-level section. +- Within each section, test interactive elements: click buttons, fill forms, open dropdowns/modals. +- Check edge cases: empty states, error handling, boundary inputs. +- Try realistic end-to-end workflows (create, edit, delete flows). +- Check the browser console for errors periodically. + +**At each page:** + +```bash +agent-browser --session {SESSION} snapshot -i +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/{page-name}.png +agent-browser --session {SESSION} errors +agent-browser --session {SESSION} console +``` + +Use your judgment on how deep to go. Spend more time on core features and less on peripheral pages. If you find a cluster of issues in one area, investigate deeper. + +### 5. Document Issues (Repro-First) + +Steps 4 and 5 happen together -- explore and document in a single pass. When you find an issue, stop exploring and document it immediately before moving on. Do not explore the whole app first and document later. + +Every issue must be reproducible. When you find something wrong, do not just note it -- prove it with evidence. The goal is that someone reading the report can see exactly what happened and replay it. + +**Choose the right level of evidence for the issue:** + +#### Interactive / behavioral issues (functional, ux, console errors on action) + +These require user interaction to reproduce -- use full repro with video and step-by-step screenshots: + +1. **Start a repro video** _before_ reproducing: + +```bash +agent-browser --session {SESSION} record start {OUTPUT_DIR}/videos/issue-{NNN}-repro.webm +``` + +2. **Walk through the steps at human pace.** Pause 1-2 seconds between actions so the video is watchable. Take a screenshot at each step: + +```bash +agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-1.png +sleep 1 +# Perform action (click, fill, etc.) +sleep 1 +agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-2.png +sleep 1 +# ...continue until the issue manifests +``` + +3. **Capture the broken state.** Pause so the viewer can see it, then take an annotated screenshot: + +```bash +sleep 2 +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}-result.png +``` + +4. **Stop the video:** + +```bash +agent-browser --session {SESSION} record stop +``` + +5. Write numbered repro steps in the report, each referencing its screenshot. + +#### Static / visible-on-load issues (typos, placeholder text, clipped text, misalignment, console errors on load) + +These are visible without interaction -- a single annotated screenshot is sufficient. No video, no multi-step repro: + +```bash +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}.png +``` + +Write a brief description and reference the screenshot in the report. Set **Repro Video** to `N/A`. + +--- + +**For all issues:** + +1. **Append to the report immediately.** Do not batch issues for later. Write each one as you find it so nothing is lost if the session is interrupted. + +2. **Increment the issue counter** (ISSUE-001, ISSUE-002, ...). + +### 6. Wrap Up + +Aim to find **5-10 well-documented issues**, then wrap up. Depth of evidence matters more than total count -- 5 issues with full repro beats 20 with vague descriptions. + +After exploring: + +1. Re-read the report and update the summary severity counts so they match the actual issues. Every `### ISSUE-` block must be reflected in the totals. +2. Close the session: + +```bash +agent-browser --session {SESSION} close +``` + +3. Tell the user the report is ready and summarize findings: total issues, breakdown by severity, and the most critical items. + +## Guidance + +- **Repro is everything.** Every issue needs proof -- but match the evidence to the issue. Interactive bugs need video and step-by-step screenshots. Static bugs (typos, placeholder text, visual glitches visible on load) only need a single annotated screenshot. +- **Verify reproducibility before collecting evidence.** Before recording video or taking screenshots, verify the issue is reproducible with at least one retry. If it can't be reproduced consistently, it's not a valid issue. +- **Don't record video for static issues.** A typo or clipped text doesn't benefit from a video. Save video for issues that involve user interaction, timing, or state changes. +- **For interactive issues, screenshot each step.** Capture the before, the action, and the after -- so someone can see the full sequence. +- **Write repro steps that map to screenshots.** Each numbered step in the report should reference its corresponding screenshot. A reader should be able to follow the steps visually without touching a browser. +- **Use the right snapshot command.** + - `snapshot -i` — for finding clickable/fillable elements (buttons, inputs, links) + - `snapshot` (no flag) — for reading page content (text, headings, data lists) +- **Be thorough but use judgment.** You are not following a test script -- you are exploring like a real user would. If something feels off, investigate. +- **Write findings incrementally.** Append each issue to the report as you discover it. If the session is interrupted, findings are preserved. Never batch all issues for the end. +- **Never delete output files.** Do not `rm` screenshots, videos, or the report mid-session. Do not close the session and restart. Work forward, not backward. +- **Never read the target app's source code.** You are testing as a user, not auditing code. Do not read HTML, JS, or config files of the app under test. All findings must come from what you observe in the browser. +- **Check the console.** Many issues are invisible in the UI but show up as JS errors or failed requests. +- **Test like a user, not a robot.** Try common workflows end-to-end. Click things a real user would click. Enter realistic data. +- **Type like a human.** When filling form fields during video recording, use `type` instead of `fill` -- it types character-by-character. Use `fill` only outside of video recording when speed matters. +- **Pace repro videos for humans.** Add `sleep 1` between actions and `sleep 2` before the final result screenshot. Videos should be watchable at 1x speed -- a human reviewing the report needs to see what happened, not a blur of instant state changes. +- **Be efficient with commands.** Batch multiple `agent-browser` commands in a single shell call when they are independent (e.g., `agent-browser ... screenshot ... && agent-browser ... console`). Use `agent-browser --session {SESSION} scroll down 300` for scrolling -- do not use `key` or `evaluate` to scroll. + +## References + +| Reference | When to Read | +| ------------------------------------------------------------ | -------------------------------------------------------------------------------------- | +| [references/issue-taxonomy.md](references/issue-taxonomy.md) | Start of session -- calibrate what to look for, severity levels, exploration checklist | + +## Templates + +| Template | Purpose | +| ---------------------------------------------------------------------------- | --------------------------------------------- | +| [templates/dogfood-report-template.md](templates/dogfood-report-template.md) | Copy into output directory as the report file | diff --git a/.agents/skills/dogfood/references/issue-taxonomy.md b/.agents/skills/dogfood/references/issue-taxonomy.md new file mode 100644 index 000000000..7ef6b43cd --- /dev/null +++ b/.agents/skills/dogfood/references/issue-taxonomy.md @@ -0,0 +1,116 @@ + + +# Issue Taxonomy + +Reference for categorizing issues found during dogfooding. Read this at the start of a dogfood session to calibrate what to look for. + +## Contents + +- [Severity Levels](#severity-levels) +- [Categories](#categories) +- [Exploration Checklist](#exploration-checklist) + +## Severity Levels + +| Severity | Definition | +| ------------ | ------------------------------------------------------------- | +| **critical** | Blocks a core workflow, causes data loss, or crashes the app | +| **high** | Major feature broken or unusable, no workaround | +| **medium** | Feature works but with noticeable problems, workaround exists | +| **low** | Minor cosmetic or polish issue | + +## Categories + +### Visual / UI + +- Layout broken or misaligned elements +- Overlapping or clipped text +- Inconsistent spacing, padding, or margins +- Missing or broken icons/images +- Dark mode / light mode rendering issues +- Responsive layout problems (viewport sizes) +- Z-index stacking issues (elements hidden behind others) +- Font rendering issues (wrong font, size, weight) +- Color contrast problems +- Animation glitches or jank + +### Functional + +- Broken links (404, wrong destination) +- Buttons or controls that do nothing on click +- Form validation that rejects valid input or accepts invalid input +- Incorrect redirects +- Features that fail silently +- State not persisted when expected (lost on refresh, navigation) +- Race conditions (double-submit, stale data) +- Broken search or filtering +- Pagination issues +- File upload/download failures + +### UX + +- Confusing or unclear navigation +- Missing loading indicators or feedback after actions +- Slow or unresponsive interactions (>300ms perceived delay) +- Unclear error messages +- Missing confirmation for destructive actions +- Dead ends (no way to go back or proceed) +- Inconsistent patterns across similar features +- Missing keyboard shortcuts or focus management +- Unintuitive defaults +- Missing empty states or unhelpful empty states + +### Content + +- Typos or grammatical errors +- Outdated or incorrect text +- Placeholder or lorem ipsum content left in +- Truncated text without tooltip or expansion +- Missing or wrong labels +- Inconsistent terminology + +### Performance + +- Slow page loads (>3s) +- Janky scrolling or animations +- Large layout shifts (content jumping) +- Excessive network requests (check via console/network) +- Memory leaks (page slows over time) +- Unoptimized images (large file sizes) + +### Console / Errors + +- JavaScript exceptions in console +- Failed network requests (4xx, 5xx) +- Deprecation warnings +- CORS errors +- Mixed content warnings +- Unhandled promise rejections + +### Accessibility + +- Missing alt text on images +- Unlabeled form inputs +- Poor keyboard navigation (can't tab to elements) +- Focus traps +- Insufficient color contrast +- Missing ARIA attributes on dynamic content +- Screen reader incompatible patterns + +## Exploration Checklist + +Use this as a guide for what to test on each page/feature: + +1. **Visual scan** -- Take an annotated screenshot. Look for layout, alignment, and rendering issues. +2. **Interactive elements** -- Click every button, link, and control. Do they work? Is there feedback? +3. **Forms** -- Fill and submit. Test empty submission, invalid input, and edge cases. +4. **Navigation** -- Follow all navigation paths. Check breadcrumbs, back button, deep links. +5. **States** -- Check empty states, loading states, error states, and full/overflow states. +6. **Console** -- Check for JS errors, failed requests, and warnings. +7. **Responsiveness** -- If relevant, test at different viewport sizes. +8. **Auth boundaries** -- Test what happens when not logged in, with different roles if applicable. diff --git a/.agents/skills/dogfood/templates/dogfood-report-template.md b/.agents/skills/dogfood/templates/dogfood-report-template.md new file mode 100644 index 000000000..7d2059981 --- /dev/null +++ b/.agents/skills/dogfood/templates/dogfood-report-template.md @@ -0,0 +1,60 @@ + + +# Dogfood Report: {APP_NAME} + +| Field | Value | +| ----------- | -------------- | +| **Date** | {DATE} | +| **App URL** | {URL} | +| **Session** | {SESSION_NAME} | +| **Scope** | {SCOPE} | + +## Summary + +| Severity | Count | +| --------- | ----- | +| Critical | 0 | +| High | 0 | +| Medium | 0 | +| Low | 0 | +| **Total** | **0** | + +## Issues + + + +### ISSUE-001: {Short title} + +| Field | Value | +| --------------- | -------------------------------------------------------------------------- | +| **Severity** | critical / high / medium / low | +| **Category** | visual / functional / ux / content / performance / console / accessibility | +| **URL** | {page URL where issue was found} | +| **Repro Video** | {path to video, or N/A for static issues} | + +**Description** + +{What is wrong, what was expected, and what actually happened.} + +**Repro Steps** + + + +1. Navigate to {URL} + ![Step 1](screenshots/issue-001-step-1.png) + +2. {Action -- e.g., click "Settings" in the sidebar} + ![Step 2](screenshots/issue-001-step-2.png) + +3. {Action -- e.g., type "test" in the search field and press Enter} + ![Step 3](screenshots/issue-001-step-3.png) + +4. **Observe:** {what goes wrong -- e.g., the page shows a blank white screen instead of search results} + ![Result](screenshots/issue-001-result.png) + +--- diff --git a/.agents/skills/electron/SKILL.md b/.agents/skills/electron/SKILL.md new file mode 100644 index 000000000..a201f5ac7 --- /dev/null +++ b/.agents/skills/electron/SKILL.md @@ -0,0 +1,243 @@ +--- +name: electron +description: Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include "automate Slack app", "control VS Code", "interact with Discord app", "test this Electron app", "connect to desktop app", or any task requiring automation of a native Electron application. +allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*) +--- + + + +# Electron App Automation + +Automate any Electron desktop app using agent-browser. Electron apps are built on Chromium and expose a Chrome DevTools Protocol (CDP) port that agent-browser can connect to, enabling the same snapshot-interact workflow used for web pages. + +## Core Workflow + +1. **Launch** the Electron app with remote debugging enabled +2. **Connect** agent-browser to the CDP port +3. **Snapshot** to discover interactive elements +4. **Interact** using element refs +5. **Re-snapshot** after navigation or state changes + +```bash +# Launch an Electron app with remote debugging +open -a "Slack" --args --remote-debugging-port=9222 + +# Connect agent-browser to the app +agent-browser connect 9222 + +# Standard workflow from here +agent-browser snapshot -i +agent-browser click @e5 +agent-browser screenshot slack-desktop.png +``` + +## Launching Electron Apps with CDP + +Every Electron app supports the `--remote-debugging-port` flag since it's built into Chromium. + +### macOS + +```bash +# Slack +open -a "Slack" --args --remote-debugging-port=9222 + +# VS Code +open -a "Visual Studio Code" --args --remote-debugging-port=9223 + +# Discord +open -a "Discord" --args --remote-debugging-port=9224 + +# Figma +open -a "Figma" --args --remote-debugging-port=9225 + +# Notion +open -a "Notion" --args --remote-debugging-port=9226 + +# Spotify +open -a "Spotify" --args --remote-debugging-port=9227 +``` + +### Linux + +```bash +slack --remote-debugging-port=9222 +code --remote-debugging-port=9223 +discord --remote-debugging-port=9224 +``` + +### Windows + +```bash +"C:\Users\%USERNAME%\AppData\Local\slack\slack.exe" --remote-debugging-port=9222 +"C:\Users\%USERNAME%\AppData\Local\Programs\Microsoft VS Code\Code.exe" --remote-debugging-port=9223 +``` + +**Important:** If the app is already running, quit it first, then relaunch with the flag. The `--remote-debugging-port` flag must be present at launch time. + +## Connecting + +```bash +# Connect to a specific port +agent-browser connect 9222 + +# Or use --cdp on each command +agent-browser --cdp 9222 snapshot -i + +# Auto-discover a running Chromium-based app +agent-browser --auto-connect snapshot -i +``` + +After `connect`, all subsequent commands target the connected app without needing `--cdp`. + +## Tab Management + +Electron apps often have multiple windows or webviews. Use tab commands to list and switch between them: + +```bash +# List all available targets (windows, webviews, etc.) +agent-browser tab + +# Switch to a specific tab by index +agent-browser tab 2 + +# Switch by URL pattern +agent-browser tab --url "*settings*" +``` + +## Webview Support + +Electron `` elements are automatically discovered and can be controlled like regular pages. Webviews appear as separate targets in the tab list with `type: "webview"`: + +```bash +# Connect to running Electron app +agent-browser connect 9222 + +# List targets -- webviews appear alongside pages +agent-browser tab +# Example output: +# 0: [page] Slack - Main Window https://app.slack.com/ +# 1: [webview] Embedded Content https://example.com/widget + +# Switch to a webview +agent-browser tab 1 + +# Interact with the webview normally +agent-browser snapshot -i +agent-browser click @e3 +agent-browser screenshot webview.png +``` + +**Note:** Webview support works via raw CDP connection. + +## Common Patterns + +### Inspect and Navigate an App + +```bash +open -a "Slack" --args --remote-debugging-port=9222 +sleep 3 # Wait for app to start +agent-browser connect 9222 +agent-browser snapshot -i +# Read the snapshot output to identify UI elements +agent-browser click @e10 # Navigate to a section +agent-browser snapshot -i # Re-snapshot after navigation +``` + +### Take Screenshots of Desktop Apps + +```bash +agent-browser connect 9222 +agent-browser screenshot app-state.png +agent-browser screenshot --full full-app.png +agent-browser screenshot --annotate annotated-app.png +``` + +### Extract Data from a Desktop App + +```bash +agent-browser connect 9222 +agent-browser snapshot -i +agent-browser get text @e5 +agent-browser snapshot --json > app-state.json +``` + +### Fill Forms in Desktop Apps + +```bash +agent-browser connect 9222 +agent-browser snapshot -i +agent-browser fill @e3 "search query" +agent-browser press Enter +agent-browser wait 1000 +agent-browser snapshot -i +``` + +### Run Multiple Apps Simultaneously + +Use named sessions to control multiple Electron apps at the same time: + +```bash +# Connect to Slack +agent-browser --session slack connect 9222 + +# Connect to VS Code +agent-browser --session vscode connect 9223 + +# Interact with each independently +agent-browser --session slack snapshot -i +agent-browser --session vscode snapshot -i +``` + +## Color Scheme + +The default color scheme when connecting via CDP may be `light`. To preserve dark mode: + +```bash +agent-browser connect 9222 +agent-browser --color-scheme dark snapshot -i +``` + +Or set it globally: + +```bash +AGENT_BROWSER_COLOR_SCHEME=dark agent-browser connect 9222 +``` + +## Troubleshooting + +### "Connection refused" or "Cannot connect" + +- Make sure the app was launched with `--remote-debugging-port=NNNN` +- If the app was already running, quit and relaunch with the flag +- Check that the port isn't in use by another process: `lsof -i :9222` + +### App launches but connect fails + +- Wait a few seconds after launch before connecting (`sleep 3`) +- Some apps take time to initialize their webview + +### Elements not appearing in snapshot + +- The app may use multiple webviews. Use `agent-browser tab` to list targets and switch to the right one + +### Cannot type in input fields + +- Try `agent-browser keyboard type "text"` to type at the current focus without a selector +- Some Electron apps use custom input components; use `agent-browser keyboard inserttext "text"` to bypass key events + +## Supported Apps + +Any app built on Electron works, including: + +- **Communication:** Slack, Discord, Microsoft Teams, Signal, Telegram Desktop +- **Development:** VS Code, GitHub Desktop, Postman, Insomnia +- **Design:** Figma, Notion, Obsidian +- **Media:** Spotify, Tidal +- **Productivity:** Todoist, Linear, 1Password + +If an app is built with Electron, it supports `--remote-debugging-port` and can be automated with agent-browser. diff --git a/.agents/skills/ts-performance-rules/SKILL.md b/.agents/skills/ts-performance-rules/SKILL.md new file mode 100644 index 000000000..6277465b5 --- /dev/null +++ b/.agents/skills/ts-performance-rules/SKILL.md @@ -0,0 +1,65 @@ +--- +name: ts-performance-rules +description: TypeScript and JavaScript performance and code-quality rules, usable in any framework. Use when writing, reviewing, or refactoring hot paths, data-structure choices, async flows, or bundle-size-sensitive code. Triggers include "optimize this function", "too slow", "reduce allocations", "bundle size", "lazy load", "speed up imports", or general code review of utilities and services. +license: MIT +--- + +# TypeScript performance rules + +A rule catalog for TypeScript/JavaScript code in this repository. Rules are +framework-neutral: they apply to the CLI, the agent engines, the gateway, and the +web apps. Each rule file states its impact band, an incorrect/correct pair, and +the reasoning. + +Derived from Vercel's react-best-practices rule catalog (MIT); the +React-component-specific rules are intentionally not part of this skill. + +## Rule index + +### Plain JavaScript efficiency (`js-*.md`) + +| Rule | Applies when | +| ---- | ------------ | +| `js-early-exit` | Loops keep scanning after the answer is known | +| `js-length-check-first` | Cheap guards can precede expensive calls | +| `js-set-map-lookups` | Arrays are scanned inside loops for membership | +| `js-index-maps` | Repeated lookups rebuild the same index | +| `js-flatmap-filter` | `filter().map()` (or the reverse) makes two passes | +| `js-combine-iterations` | Multiple loops over the same array can share one pass | +| `js-hoist-regexp` | Regex literals or constructions sit inside hot loops | +| `js-min-max-loop` | `Math.min(...bigArray)` style spreads blow the stack or re-scan | +| `js-cache-function-results` | Pure functions recompute the same inputs | +| `js-cache-property-access` | Deep property chains are read repeatedly in loops | +| `js-cache-storage` | `localStorage`/`sessionStorage` reads sit in hot paths | +| `js-batch-dom-css` | DOM style reads/writes alternate and force layout thrash | +| `js-request-idle-callback` | Non-urgent work blocks interaction | +| `js-tosorted-immutable` | `.sort()` mutates arrays that callers own | + +### Async structure (`async-*.md`) + +| Rule | Applies when | +| ---- | ------------ | +| `async-cheap-condition-before-await` | A cheap guard sits after an expensive `await` | +| `async-defer-await` | Independent awaits run serially for no reason | +| `async-parallel` | Independent promises could run through `Promise.all` | +| `async-dependencies` | A chain of awaits hides which steps truly depend on each other | + +### Bundle size (`bundle-*.md`) + +| Rule | Applies when | +| ---- | ------------ | +| `bundle-barrel-imports` | Imports pull whole barrel files for one symbol | +| `bundle-conditional` | Large dependencies load for features that are rarely enabled | +| `bundle-defer-third-party` | Third-party SDKs load eagerly at startup | +| `bundle-dynamic-imports` | Rare code paths could be `import()` splits | +| `bundle-preload` | Known-next navigations could preload their chunks | +| `bundle-analyzable-paths` | Dynamic import paths are built in ways bundlers cannot trace | + +## How to apply + +1. Pick rules by the code's actual shape, not by keyword match alone; the impact + band in each rule's frontmatter says how much it typically matters. +2. Apply the smallest change that satisfies the rule; do not restructure working + code beyond the rule's scope. +3. For repository-specific constraints, the nearest `AGENTS.md` and the package's + own tests win over these general rules. diff --git a/.agents/skills/ts-performance-rules/rules/async-cheap-condition-before-await.md b/.agents/skills/ts-performance-rules/rules/async-cheap-condition-before-await.md new file mode 100644 index 000000000..d9491a559 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/async-cheap-condition-before-await.md @@ -0,0 +1,37 @@ +--- +title: Check Cheap Conditions Before Async Flags +impact: HIGH +impactDescription: avoids unnecessary async work when a synchronous guard already fails +tags: async, await, feature-flags, short-circuit, conditional +--- + +## Check Cheap Conditions Before Async Flags + +When a branch uses `await` for a flag or remote value and also requires a **cheap synchronous** condition (local props, request metadata, already-loaded state), evaluate the cheap condition **first**. Otherwise you pay for the async call even when the compound condition can never be true. + +This is a specialization of [Defer Await Until Needed](./async-defer-await.md) for `flag && cheapCondition` style checks. + +**Incorrect:** + +```typescript +const someFlag = await getFlag(); + +if (someFlag && someCondition) { + // ... +} +``` + +**Correct:** + +```typescript +if (someCondition) { + const someFlag = await getFlag(); + if (someFlag) { + // ... + } +} +``` + +This matters when `getFlag` hits the network, a feature-flag service, or `React.cache` / DB work: skipping it when `someCondition` is false removes that cost on the cold path. + +Keep the original order if `someCondition` is expensive, depends on the flag, or you must run side effects in a fixed order. diff --git a/.agents/skills/ts-performance-rules/rules/async-defer-await.md b/.agents/skills/ts-performance-rules/rules/async-defer-await.md new file mode 100644 index 000000000..29f1a852d --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/async-defer-await.md @@ -0,0 +1,82 @@ +--- +title: Defer Await Until Needed +impact: HIGH +impactDescription: avoids blocking unused code paths +tags: async, await, conditional, optimization +--- + +## Defer Await Until Needed + +Move `await` operations into the branches where they're actually used to avoid blocking code paths that don't need them. + +**Incorrect (blocks both branches):** + +```typescript +async function handleRequest(userId: string, skipProcessing: boolean) { + const userData = await fetchUserData(userId); + + if (skipProcessing) { + // Returns immediately but still waited for userData + return { skipped: true }; + } + + // Only this branch uses userData + return processUserData(userData); +} +``` + +**Correct (only blocks when needed):** + +```typescript +async function handleRequest(userId: string, skipProcessing: boolean) { + if (skipProcessing) { + // Returns immediately without waiting + return { skipped: true }; + } + + // Fetch only when needed + const userData = await fetchUserData(userId); + return processUserData(userData); +} +``` + +**Another example (early return optimization):** + +```typescript +// Incorrect: always fetches permissions +async function updateResource(resourceId: string, userId: string) { + const permissions = await fetchPermissions(userId); + const resource = await getResource(resourceId); + + if (!resource) { + return { error: "Not found" }; + } + + if (!permissions.canEdit) { + return { error: "Forbidden" }; + } + + return await updateResourceData(resource, permissions); +} + +// Correct: fetches only when needed +async function updateResource(resourceId: string, userId: string) { + const resource = await getResource(resourceId); + + if (!resource) { + return { error: "Not found" }; + } + + const permissions = await fetchPermissions(userId); + + if (!permissions.canEdit) { + return { error: "Forbidden" }; + } + + return await updateResourceData(resource, permissions); +} +``` + +This optimization is especially valuable when the skipped branch is frequently taken, or when the deferred operation is expensive. + +For `await getFlag()` combined with a cheap synchronous guard (`flag && someCondition`), see [Check Cheap Conditions Before Async Flags](./async-cheap-condition-before-await.md). diff --git a/.agents/skills/ts-performance-rules/rules/async-dependencies.md b/.agents/skills/ts-performance-rules/rules/async-dependencies.md new file mode 100644 index 000000000..4508f88df --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/async-dependencies.md @@ -0,0 +1,48 @@ +--- +title: Dependency-Based Parallelization +impact: CRITICAL +impactDescription: 2-10× improvement +tags: async, parallelization, dependencies, better-all +--- + +## Dependency-Based Parallelization + +For operations with partial dependencies, use `better-all` to maximize parallelism. It automatically starts each task at the earliest possible moment. + +**Incorrect (profile waits for config unnecessarily):** + +```typescript +const [user, config] = await Promise.all([fetchUser(), fetchConfig()]); +const profile = await fetchProfile(user.id); +``` + +**Correct (config and profile run in parallel):** + +```typescript +import { all } from "better-all"; + +const { user, config, profile } = await all({ + async user() { + return fetchUser(); + }, + async config() { + return fetchConfig(); + }, + async profile() { + return fetchProfile((await this.$.user).id); + }, +}); +``` + +**Alternative without extra dependencies:** + +We can also create all the promises first, and do `Promise.all()` at the end. + +```typescript +const userPromise = fetchUser(); +const profilePromise = userPromise.then((user) => fetchProfile(user.id)); + +const [user, config, profile] = await Promise.all([userPromise, fetchConfig(), profilePromise]); +``` + +Reference: [https://github.com/shuding/better-all](https://github.com/shuding/better-all) diff --git a/.agents/skills/ts-performance-rules/rules/async-parallel.md b/.agents/skills/ts-performance-rules/rules/async-parallel.md new file mode 100644 index 000000000..f7d13a800 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/async-parallel.md @@ -0,0 +1,24 @@ +--- +title: Promise.all() for Independent Operations +impact: CRITICAL +impactDescription: 2-10× improvement +tags: async, parallelization, promises, waterfalls +--- + +## Promise.all() for Independent Operations + +When async operations have no interdependencies, execute them concurrently using `Promise.all()`. + +**Incorrect (sequential execution, 3 round trips):** + +```typescript +const user = await fetchUser(); +const posts = await fetchPosts(); +const comments = await fetchComments(); +``` + +**Correct (parallel execution, 1 round trip):** + +```typescript +const [user, posts, comments] = await Promise.all([fetchUser(), fetchPosts(), fetchComments()]); +``` diff --git a/.agents/skills/ts-performance-rules/rules/bundle-analyzable-paths.md b/.agents/skills/ts-performance-rules/rules/bundle-analyzable-paths.md new file mode 100644 index 000000000..ad78bcca3 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/bundle-analyzable-paths.md @@ -0,0 +1,64 @@ +--- +title: Prefer Statically Analyzable Paths +impact: HIGH +impactDescription: avoids accidental broad bundles and file traces +tags: bundle, nextjs, vite, webpack, rollup, esbuild, path +--- + +## Prefer Statically Analyzable Paths + +Build tools work best when import and file-system paths are obvious at build time. If you hide the real path inside a variable or compose it too dynamically, the tool either has to include a broad set of possible files, warn that it cannot analyze the import, or widen file tracing to stay safe. + +Prefer explicit maps or literal paths so the set of reachable files stays narrow and predictable. This is the same rule whether you are choosing modules with `import()` or reading files in server/build code. + +When analysis becomes too broad, the cost is real: + +- Larger server bundles +- Slower builds +- Worse cold starts +- More memory use + +### Import Paths + +**Incorrect (the bundler cannot tell what may be imported):** + +```ts +const PAGE_MODULES = { + home: "./pages/home", + settings: "./pages/settings", +} as const; + +const Page = await import(PAGE_MODULES[pageName]); +``` + +**Correct (use an explicit map of allowed modules):** + +```ts +const PAGE_MODULES = { + home: () => import("./pages/home"), + settings: () => import("./pages/settings"), +} as const; + +const Page = await PAGE_MODULES[pageName](); +``` + +### File-System Paths + +**Incorrect (a 2-value enum still hides the final path from static analysis):** + +```ts +const baseDir = path.join(process.cwd(), "content/" + contentKind); +``` + +**Correct (make each final path literal at the callsite):** + +```ts +const baseDir = + kind === ContentKind.Blog + ? path.join(process.cwd(), "content/blog") + : path.join(process.cwd(), "content/docs"); +``` + +In Next.js server code, this matters for output file tracing too. `path.join(process.cwd(), someVar)` can widen the traced file set because Next.js statically analyze `import`, `require`, and `fs` usage. + +Reference: [Next.js output](https://nextjs.org/docs/app/api-reference/config/next-config-js/output), [Next.js dynamic imports](https://nextjs.org/learn/seo/dynamic-imports), [Vite features](https://vite.dev/guide/features.html), [esbuild API](https://esbuild.github.io/api/), [Rollup dynamic import vars](https://www.npmjs.com/package/@rollup/plugin-dynamic-import-vars), [Webpack dependency management](https://webpack.js.org/guides/dependency-management/) diff --git a/.agents/skills/ts-performance-rules/rules/bundle-barrel-imports.md b/.agents/skills/ts-performance-rules/rules/bundle-barrel-imports.md new file mode 100644 index 000000000..93f7660a2 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/bundle-barrel-imports.md @@ -0,0 +1,60 @@ +--- +title: Avoid Barrel File Imports +impact: CRITICAL +impactDescription: 200-800ms import cost, slow builds +tags: bundle, imports, tree-shaking, barrel-files, performance +--- + +## Avoid Barrel File Imports + +Import directly from source files instead of barrel files to avoid loading thousands of unused modules. **Barrel files** are entry points that re-export multiple modules (e.g., `index.js` that does `export * from './module'`). + +Popular icon and component libraries can have **up to 10,000 re-exports** in their entry file. For many React packages, **it takes 200-800ms just to import them**, affecting both development speed and production cold starts. + +**Why tree-shaking doesn't help:** When a library is marked as external (not bundled), the bundler can't optimize it. If you bundle it to enable tree-shaking, builds become substantially slower analyzing the entire module graph. + +**Incorrect (imports entire library):** + +```tsx +import { Check, X, Menu } from "lucide-react"; +// Loads 1,583 modules, takes ~2.8s extra in dev +// Runtime cost: 200-800ms on every cold start + +import { Button, TextField } from "@mui/material"; +// Loads 2,225 modules, takes ~4.2s extra in dev +``` + +**Correct - Next.js 13.5+ (recommended):** + +```js +// next.config.js - automatically optimizes barrel imports at build time +module.exports = { + experimental: { + optimizePackageImports: ["lucide-react", "@mui/material"], + }, +}; +``` + +```tsx +// Keep the standard imports - Next.js transforms them to direct imports +import { Check, X, Menu } from "lucide-react"; +// Full TypeScript support, no manual path wrangling +``` + +This is the recommended approach because it preserves TypeScript type safety and editor autocompletion while still eliminating the barrel import cost. + +**Correct - Direct imports (non-Next.js projects):** + +```tsx +import Button from "@mui/material/Button"; +import TextField from "@mui/material/TextField"; +// Loads only what you use +``` + +> **TypeScript warning:** Some libraries (notably `lucide-react`) don't ship `.d.ts` files for their deep import paths. Importing from `lucide-react/dist/esm/icons/check` resolves to an implicit `any` type, causing errors under `strict` or `noImplicitAny`. Prefer `optimizePackageImports` when available, or verify the library exports types for its subpaths before using direct imports. + +These optimizations provide 15-70% faster dev boot, 28% faster builds, 40% faster cold starts, and significantly faster HMR. + +Libraries commonly affected: `lucide-react`, `@mui/material`, `@mui/icons-material`, `@tabler/icons-react`, `react-icons`, `@headlessui/react`, `@radix-ui/react-*`, `lodash`, `ramda`, `date-fns`, `rxjs`, `react-use`. + +Reference: [How we optimized package imports in Next.js](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js) diff --git a/.agents/skills/ts-performance-rules/rules/bundle-conditional.md b/.agents/skills/ts-performance-rules/rules/bundle-conditional.md new file mode 100644 index 000000000..a541a0208 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/bundle-conditional.md @@ -0,0 +1,37 @@ +--- +title: Conditional Module Loading +impact: HIGH +impactDescription: loads large data only when needed +tags: bundle, conditional-loading, lazy-loading +--- + +## Conditional Module Loading + +Load large data or modules only when a feature is activated. + +**Example (lazy-load animation frames):** + +```tsx +function AnimationPlayer({ + enabled, + setEnabled, +}: { + enabled: boolean; + setEnabled: React.Dispatch>; +}) { + const [frames, setFrames] = useState(null); + + useEffect(() => { + if (enabled && !frames && typeof window !== "undefined") { + import("./animation-frames.js") + .then((mod) => setFrames(mod.frames)) + .catch(() => setEnabled(false)); + } + }, [enabled, frames, setEnabled]); + + if (!frames) return ; + return ; +} +``` + +The `typeof window !== 'undefined'` check prevents bundling this module for SSR, optimizing server bundle size and build speed. diff --git a/.agents/skills/ts-performance-rules/rules/bundle-defer-third-party.md b/.agents/skills/ts-performance-rules/rules/bundle-defer-third-party.md new file mode 100644 index 000000000..b3da8ae77 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/bundle-defer-third-party.md @@ -0,0 +1,48 @@ +--- +title: Defer Non-Critical Third-Party Libraries +impact: MEDIUM +impactDescription: loads after hydration +tags: bundle, third-party, analytics, defer +--- + +## Defer Non-Critical Third-Party Libraries + +Analytics, logging, and error tracking don't block user interaction. Load them after hydration. + +**Incorrect (blocks initial bundle):** + +```tsx +import { Analytics } from "@vercel/analytics/react"; + +export default function RootLayout({ children }) { + return ( + + + {children} + + + + ); +} +``` + +**Correct (loads after hydration):** + +```tsx +import dynamic from "next/dynamic"; + +const Analytics = dynamic(() => import("@vercel/analytics/react").then((m) => m.Analytics), { + ssr: false, +}); + +export default function RootLayout({ children }) { + return ( + + + {children} + + + + ); +} +``` diff --git a/.agents/skills/ts-performance-rules/rules/bundle-dynamic-imports.md b/.agents/skills/ts-performance-rules/rules/bundle-dynamic-imports.md new file mode 100644 index 000000000..bb527fd4a --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/bundle-dynamic-imports.md @@ -0,0 +1,34 @@ +--- +title: Dynamic Imports for Heavy Components +impact: CRITICAL +impactDescription: directly affects TTI and LCP +tags: bundle, dynamic-import, code-splitting, next-dynamic +--- + +## Dynamic Imports for Heavy Components + +Use `next/dynamic` to lazy-load large components not needed on initial render. + +**Incorrect (Monaco bundles with main chunk ~300KB):** + +```tsx +import { MonacoEditor } from "./monaco-editor"; + +function CodePanel({ code }: { code: string }) { + return ; +} +``` + +**Correct (Monaco loads on demand):** + +```tsx +import dynamic from "next/dynamic"; + +const MonacoEditor = dynamic(() => import("./monaco-editor").then((m) => m.MonacoEditor), { + ssr: false, +}); + +function CodePanel({ code }: { code: string }) { + return ; +} +``` diff --git a/.agents/skills/ts-performance-rules/rules/bundle-preload.md b/.agents/skills/ts-performance-rules/rules/bundle-preload.md new file mode 100644 index 000000000..b5511891d --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/bundle-preload.md @@ -0,0 +1,44 @@ +--- +title: Preload Based on User Intent +impact: MEDIUM +impactDescription: reduces perceived latency +tags: bundle, preload, user-intent, hover +--- + +## Preload Based on User Intent + +Preload heavy bundles before they're needed to reduce perceived latency. + +**Example (preload on hover/focus):** + +```tsx +function EditorButton({ onClick }: { onClick: () => void }) { + const preload = () => { + if (typeof window !== "undefined") { + void import("./monaco-editor"); + } + }; + + return ( + + ); +} +``` + +**Example (preload when feature flag is enabled):** + +```tsx +function FlagsProvider({ children, flags }: Props) { + useEffect(() => { + if (flags.editorEnabled && typeof window !== "undefined") { + void import("./monaco-editor").then((mod) => mod.init()); + } + }, [flags.editorEnabled]); + + return {children}; +} +``` + +The `typeof window !== 'undefined'` check prevents bundling preloaded modules for SSR, optimizing server bundle size and build speed. diff --git a/.agents/skills/ts-performance-rules/rules/js-batch-dom-css.md b/.agents/skills/ts-performance-rules/rules/js-batch-dom-css.md new file mode 100644 index 000000000..5a7fc2b0d --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-batch-dom-css.md @@ -0,0 +1,110 @@ +--- +title: Avoid Layout Thrashing +impact: MEDIUM +impactDescription: prevents forced synchronous layouts and reduces performance bottlenecks +tags: javascript, dom, css, performance, reflow, layout-thrashing +--- + +## Avoid Layout Thrashing + +Avoid interleaving style writes with layout reads. When you read a layout property (like `offsetWidth`, `getBoundingClientRect()`, or `getComputedStyle()`) between style changes, the browser is forced to trigger a synchronous reflow. + +**This is OK (browser batches style changes):** + +```typescript +function updateElementStyles(element: HTMLElement) { + // Each line invalidates style, but browser batches the recalculation + element.style.width = "100px"; + element.style.height = "200px"; + element.style.backgroundColor = "blue"; + element.style.border = "1px solid black"; +} +``` + +**Incorrect (interleaved reads and writes force reflows):** + +```typescript +function layoutThrashing(element: HTMLElement) { + element.style.width = "100px"; + const width = element.offsetWidth; // Forces reflow + element.style.height = "200px"; + const height = element.offsetHeight; // Forces another reflow +} +``` + +**Correct (batch writes, then read once):** + +```typescript +function updateElementStyles(element: HTMLElement) { + // Batch all writes together + element.style.width = "100px"; + element.style.height = "200px"; + element.style.backgroundColor = "blue"; + element.style.border = "1px solid black"; + + // Read after all writes are done (single reflow) + const { width, height } = element.getBoundingClientRect(); +} +``` + +**Correct (batch reads, then writes):** + +```typescript +function avoidThrashing(element: HTMLElement) { + // Read phase - all layout queries first + const rect1 = element.getBoundingClientRect(); + const offsetWidth = element.offsetWidth; + const offsetHeight = element.offsetHeight; + + // Write phase - all style changes after + element.style.width = "100px"; + element.style.height = "200px"; +} +``` + +**Better: use CSS classes** + +```css +.highlighted-box { + width: 100px; + height: 200px; + background-color: blue; + border: 1px solid black; +} +``` + +```typescript +function updateElementStyles(element: HTMLElement) { + element.classList.add("highlighted-box"); + + const { width, height } = element.getBoundingClientRect(); +} +``` + +**React example:** + +```tsx +// Incorrect: interleaving style changes with layout queries +function Box({ isHighlighted }: { isHighlighted: boolean }) { + const ref = useRef(null); + + useEffect(() => { + if (ref.current && isHighlighted) { + ref.current.style.width = "100px"; + const width = ref.current.offsetWidth; // Forces layout + ref.current.style.height = "200px"; + } + }, [isHighlighted]); + + return

Content
; +} + +// Correct: toggle class +function Box({ isHighlighted }: { isHighlighted: boolean }) { + return
Content
; +} +``` + +Prefer CSS classes over inline styles when possible. CSS files are cached by the browser, and classes provide better separation of concerns and are easier to maintain. + +See [this gist](https://gist.github.com/paulirish/5d52fb081b3570c81e3a) and [CSS Triggers](https://csstriggers.com/) for more information on layout-forcing operations. diff --git a/.agents/skills/ts-performance-rules/rules/js-cache-function-results.md b/.agents/skills/ts-performance-rules/rules/js-cache-function-results.md new file mode 100644 index 000000000..91a6985be --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-cache-function-results.md @@ -0,0 +1,80 @@ +--- +title: Cache Repeated Function Calls +impact: MEDIUM +impactDescription: avoid redundant computation +tags: javascript, cache, memoization, performance +--- + +## Cache Repeated Function Calls + +Use a module-level Map to cache function results when the same function is called repeatedly with the same inputs during render. + +**Incorrect (redundant computation):** + +```typescript +function ProjectList({ projects }: { projects: Project[] }) { + return ( +
+ {projects.map(project => { + // slugify() called 100+ times for same project names + const slug = slugify(project.name) + + return + })} +
+ ) +} +``` + +**Correct (cached results):** + +```typescript +// Module-level cache +const slugifyCache = new Map() + +function cachedSlugify(text: string): string { + if (slugifyCache.has(text)) { + return slugifyCache.get(text)! + } + const result = slugify(text) + slugifyCache.set(text, result) + return result +} + +function ProjectList({ projects }: { projects: Project[] }) { + return ( +
+ {projects.map(project => { + // Computed only once per unique project name + const slug = cachedSlugify(project.name) + + return + })} +
+ ) +} +``` + +**Simpler pattern for single-value functions:** + +```typescript +let isLoggedInCache: boolean | null = null; + +function isLoggedIn(): boolean { + if (isLoggedInCache !== null) { + return isLoggedInCache; + } + + isLoggedInCache = document.cookie.includes("auth="); + return isLoggedInCache; +} + +// Clear cache when auth changes +function onAuthChange() { + isLoggedInCache = null; +} +``` + +Use a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components. + +Reference: [How we made the Vercel Dashboard twice as fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast) diff --git a/.agents/skills/ts-performance-rules/rules/js-cache-property-access.md b/.agents/skills/ts-performance-rules/rules/js-cache-property-access.md new file mode 100644 index 000000000..291f109b0 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-cache-property-access.md @@ -0,0 +1,28 @@ +--- +title: Cache Property Access in Loops +impact: LOW-MEDIUM +impactDescription: reduces lookups +tags: javascript, loops, optimization, caching +--- + +## Cache Property Access in Loops + +Cache object property lookups in hot paths. + +**Incorrect (3 lookups × N iterations):** + +```typescript +for (let i = 0; i < arr.length; i++) { + process(obj.config.settings.value); +} +``` + +**Correct (1 lookup total):** + +```typescript +const value = obj.config.settings.value; +const len = arr.length; +for (let i = 0; i < len; i++) { + process(value); +} +``` diff --git a/.agents/skills/ts-performance-rules/rules/js-cache-storage.md b/.agents/skills/ts-performance-rules/rules/js-cache-storage.md new file mode 100644 index 000000000..d0e2a1283 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-cache-storage.md @@ -0,0 +1,68 @@ +--- +title: Cache Storage API Calls +impact: LOW-MEDIUM +impactDescription: reduces expensive I/O +tags: javascript, localStorage, storage, caching, performance +--- + +## Cache Storage API Calls + +`localStorage`, `sessionStorage`, and `document.cookie` are synchronous and expensive. Cache reads in memory. + +**Incorrect (reads storage on every call):** + +```typescript +function getTheme() { + return localStorage.getItem("theme") ?? "light"; +} +// Called 10 times = 10 storage reads +``` + +**Correct (Map cache):** + +```typescript +const storageCache = new Map(); + +function getLocalStorage(key: string) { + if (!storageCache.has(key)) { + storageCache.set(key, localStorage.getItem(key)); + } + return storageCache.get(key); +} + +function setLocalStorage(key: string, value: string) { + localStorage.setItem(key, value); + storageCache.set(key, value); // keep cache in sync +} +``` + +Use a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components. + +**Cookie caching:** + +```typescript +let cookieCache: Record | null = null; + +function getCookie(name: string) { + if (!cookieCache) { + cookieCache = Object.fromEntries(document.cookie.split("; ").map((c) => c.split("="))); + } + return cookieCache[name]; +} +``` + +**Important (invalidate on external changes):** + +If storage can change externally (another tab, server-set cookies), invalidate cache: + +```typescript +window.addEventListener("storage", (e) => { + if (e.key) storageCache.delete(e.key); +}); + +document.addEventListener("visibilitychange", () => { + if (document.visibilityState === "visible") { + storageCache.clear(); + } +}); +``` diff --git a/.agents/skills/ts-performance-rules/rules/js-combine-iterations.md b/.agents/skills/ts-performance-rules/rules/js-combine-iterations.md new file mode 100644 index 000000000..f1e2518b7 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-combine-iterations.md @@ -0,0 +1,32 @@ +--- +title: Combine Multiple Array Iterations +impact: LOW-MEDIUM +impactDescription: reduces iterations +tags: javascript, arrays, loops, performance +--- + +## Combine Multiple Array Iterations + +Multiple `.filter()` or `.map()` calls iterate the array multiple times. Combine into one loop. + +**Incorrect (3 iterations):** + +```typescript +const admins = users.filter((u) => u.isAdmin); +const testers = users.filter((u) => u.isTester); +const inactive = users.filter((u) => !u.isActive); +``` + +**Correct (1 iteration):** + +```typescript +const admins: User[] = []; +const testers: User[] = []; +const inactive: User[] = []; + +for (const user of users) { + if (user.isAdmin) admins.push(user); + if (user.isTester) testers.push(user); + if (!user.isActive) inactive.push(user); +} +``` diff --git a/.agents/skills/ts-performance-rules/rules/js-early-exit.md b/.agents/skills/ts-performance-rules/rules/js-early-exit.md new file mode 100644 index 000000000..992181ac1 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-early-exit.md @@ -0,0 +1,50 @@ +--- +title: Early Return from Functions +impact: LOW-MEDIUM +impactDescription: avoids unnecessary computation +tags: javascript, functions, optimization, early-return +--- + +## Early Return from Functions + +Return early when result is determined to skip unnecessary processing. + +**Incorrect (processes all items even after finding answer):** + +```typescript +function validateUsers(users: User[]) { + let hasError = false; + let errorMessage = ""; + + for (const user of users) { + if (!user.email) { + hasError = true; + errorMessage = "Email required"; + } + if (!user.name) { + hasError = true; + errorMessage = "Name required"; + } + // Continues checking all users even after error found + } + + return hasError ? { valid: false, error: errorMessage } : { valid: true }; +} +``` + +**Correct (returns immediately on first error):** + +```typescript +function validateUsers(users: User[]) { + for (const user of users) { + if (!user.email) { + return { valid: false, error: "Email required" }; + } + if (!user.name) { + return { valid: false, error: "Name required" }; + } + } + + return { valid: true }; +} +``` diff --git a/.agents/skills/ts-performance-rules/rules/js-flatmap-filter.md b/.agents/skills/ts-performance-rules/rules/js-flatmap-filter.md new file mode 100644 index 000000000..4cd2eccb6 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-flatmap-filter.md @@ -0,0 +1,51 @@ +--- +title: Use flatMap to Map and Filter in One Pass +impact: LOW-MEDIUM +impactDescription: eliminates intermediate array +tags: javascript, arrays, flatMap, filter, performance +--- + +## Use flatMap to Map and Filter in One Pass + +**Impact: LOW-MEDIUM (eliminates intermediate array)** + +Chaining `.map().filter(Boolean)` creates an intermediate array and iterates twice. Use `.flatMap()` to transform and filter in a single pass. + +**Incorrect (2 iterations, intermediate array):** + +```typescript +const userNames = users.map((user) => (user.isActive ? user.name : null)).filter(Boolean); +``` + +**Correct (1 iteration, no intermediate array):** + +```typescript +const userNames = users.flatMap((user) => (user.isActive ? [user.name] : [])); +``` + +**More examples:** + +```typescript +// Extract valid emails from responses +// Before +const emails = responses.map((r) => (r.success ? r.data.email : null)).filter(Boolean); + +// After +const emails = responses.flatMap((r) => (r.success ? [r.data.email] : [])); + +// Parse and filter valid numbers +// Before +const numbers = strings.map((s) => parseInt(s, 10)).filter((n) => !isNaN(n)); + +// After +const numbers = strings.flatMap((s) => { + const n = parseInt(s, 10); + return isNaN(n) ? [] : [n]; +}); +``` + +**When to use:** + +- Transforming items while filtering some out +- Conditional mapping where some inputs produce no output +- Parsing/validating where invalid inputs should be skipped diff --git a/.agents/skills/ts-performance-rules/rules/js-hoist-regexp.md b/.agents/skills/ts-performance-rules/rules/js-hoist-regexp.md new file mode 100644 index 000000000..2d2256d3d --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-hoist-regexp.md @@ -0,0 +1,45 @@ +--- +title: Hoist RegExp Creation +impact: LOW-MEDIUM +impactDescription: avoids recreation +tags: javascript, regexp, optimization, memoization +--- + +## Hoist RegExp Creation + +Don't create RegExp inside render. Hoist to module scope or memoize with `useMemo()`. + +**Incorrect (new RegExp every render):** + +```tsx +function Highlighter({ text, query }: Props) { + const regex = new RegExp(`(${query})`, 'gi') + const parts = text.split(regex) + return <>{parts.map((part, i) => ...)} +} +``` + +**Correct (memoize or hoist):** + +```tsx +const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ + +function Highlighter({ text, query }: Props) { + const regex = useMemo( + () => new RegExp(`(${escapeRegex(query)})`, 'gi'), + [query] + ) + const parts = text.split(regex) + return <>{parts.map((part, i) => ...)} +} +``` + +**Warning (global regex has mutable state):** + +Global regex (`/g`) has mutable `lastIndex` state: + +```typescript +const regex = /foo/g; +regex.test("foo"); // true, lastIndex = 3 +regex.test("foo"); // false, lastIndex = 0 +``` diff --git a/.agents/skills/ts-performance-rules/rules/js-index-maps.md b/.agents/skills/ts-performance-rules/rules/js-index-maps.md new file mode 100644 index 000000000..1fbaeda70 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-index-maps.md @@ -0,0 +1,37 @@ +--- +title: Build Index Maps for Repeated Lookups +impact: LOW-MEDIUM +impactDescription: 1M ops to 2K ops +tags: javascript, map, indexing, optimization, performance +--- + +## Build Index Maps for Repeated Lookups + +Multiple `.find()` calls by the same key should use a Map. + +**Incorrect (O(n) per lookup):** + +```typescript +function processOrders(orders: Order[], users: User[]) { + return orders.map((order) => ({ + ...order, + user: users.find((u) => u.id === order.userId), + })); +} +``` + +**Correct (O(1) per lookup):** + +```typescript +function processOrders(orders: Order[], users: User[]) { + const userById = new Map(users.map((u) => [u.id, u])); + + return orders.map((order) => ({ + ...order, + user: userById.get(order.userId), + })); +} +``` + +Build map once (O(n)), then all lookups are O(1). +For 1000 orders × 1000 users: 1M ops → 2K ops. diff --git a/.agents/skills/ts-performance-rules/rules/js-length-check-first.md b/.agents/skills/ts-performance-rules/rules/js-length-check-first.md new file mode 100644 index 000000000..8bb79734d --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-length-check-first.md @@ -0,0 +1,50 @@ +--- +title: Early Length Check for Array Comparisons +impact: MEDIUM-HIGH +impactDescription: avoids expensive operations when lengths differ +tags: javascript, arrays, performance, optimization, comparison +--- + +## Early Length Check for Array Comparisons + +When comparing arrays with expensive operations (sorting, deep equality, serialization), check lengths first. If lengths differ, the arrays cannot be equal. + +In real-world applications, this optimization is especially valuable when the comparison runs in hot paths (event handlers, render loops). + +**Incorrect (always runs expensive comparison):** + +```typescript +function hasChanges(current: string[], original: string[]) { + // Always sorts and joins, even when lengths differ + return current.sort().join() !== original.sort().join(); +} +``` + +Two O(n log n) sorts run even when `current.length` is 5 and `original.length` is 100. There is also overhead of joining the arrays and comparing the strings. + +**Correct (O(1) length check first):** + +```typescript +function hasChanges(current: string[], original: string[]) { + // Early return if lengths differ + if (current.length !== original.length) { + return true; + } + // Only sort when lengths match + const currentSorted = current.toSorted(); + const originalSorted = original.toSorted(); + for (let i = 0; i < currentSorted.length; i++) { + if (currentSorted[i] !== originalSorted[i]) { + return true; + } + } + return false; +} +``` + +This new approach is more efficient because: + +- It avoids the overhead of sorting and joining the arrays when lengths differ +- It avoids consuming memory for the joined strings (especially important for large arrays) +- It avoids mutating the original arrays +- It returns early when a difference is found diff --git a/.agents/skills/ts-performance-rules/rules/js-min-max-loop.md b/.agents/skills/ts-performance-rules/rules/js-min-max-loop.md new file mode 100644 index 000000000..a83a760b7 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-min-max-loop.md @@ -0,0 +1,82 @@ +--- +title: Use Loop for Min/Max Instead of Sort +impact: LOW +impactDescription: O(n) instead of O(n log n) +tags: javascript, arrays, performance, sorting, algorithms +--- + +## Use Loop for Min/Max Instead of Sort + +Finding the smallest or largest element only requires a single pass through the array. Sorting is wasteful and slower. + +**Incorrect (O(n log n) - sort to find latest):** + +```typescript +interface Project { + id: string; + name: string; + updatedAt: number; +} + +function getLatestProject(projects: Project[]) { + const sorted = [...projects].sort((a, b) => b.updatedAt - a.updatedAt); + return sorted[0]; +} +``` + +Sorts the entire array just to find the maximum value. + +**Incorrect (O(n log n) - sort for oldest and newest):** + +```typescript +function getOldestAndNewest(projects: Project[]) { + const sorted = [...projects].sort((a, b) => a.updatedAt - b.updatedAt); + return { oldest: sorted[0], newest: sorted[sorted.length - 1] }; +} +``` + +Still sorts unnecessarily when only min/max are needed. + +**Correct (O(n) - single loop):** + +```typescript +function getLatestProject(projects: Project[]) { + if (projects.length === 0) return null; + + let latest = projects[0]; + + for (let i = 1; i < projects.length; i++) { + if (projects[i].updatedAt > latest.updatedAt) { + latest = projects[i]; + } + } + + return latest; +} + +function getOldestAndNewest(projects: Project[]) { + if (projects.length === 0) return { oldest: null, newest: null }; + + let oldest = projects[0]; + let newest = projects[0]; + + for (let i = 1; i < projects.length; i++) { + if (projects[i].updatedAt < oldest.updatedAt) oldest = projects[i]; + if (projects[i].updatedAt > newest.updatedAt) newest = projects[i]; + } + + return { oldest, newest }; +} +``` + +Single pass through the array, no copying, no sorting. + +**Alternative (Math.min/Math.max for small arrays):** + +```typescript +const numbers = [5, 2, 8, 1, 9]; +const min = Math.min(...numbers); +const max = Math.max(...numbers); +``` + +This works for small arrays, but can be slower or just throw an error for very large arrays due to spread operator limitations. Maximal array length is approximately 124000 in Chrome 143 and 638000 in Safari 18; exact numbers may vary - see [the fiddle](https://jsfiddle.net/qw1jabsx/4/). Use the loop approach for reliability. diff --git a/.agents/skills/ts-performance-rules/rules/js-request-idle-callback.md b/.agents/skills/ts-performance-rules/rules/js-request-idle-callback.md new file mode 100644 index 000000000..b9698e147 --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-request-idle-callback.md @@ -0,0 +1,104 @@ +--- +title: Defer Non-Critical Work with requestIdleCallback +impact: MEDIUM +impactDescription: keeps UI responsive during background tasks +tags: javascript, performance, idle, scheduling, analytics +--- + +## Defer Non-Critical Work with requestIdleCallback + +**Impact: MEDIUM (keeps UI responsive during background tasks)** + +Use `requestIdleCallback()` to schedule non-critical work during browser idle periods. This keeps the main thread free for user interactions and animations, reducing jank and improving perceived performance. + +**Incorrect (blocks main thread during user interaction):** + +```typescript +function handleSearch(query: string) { + const results = searchItems(query); + setResults(results); + + // These block the main thread immediately + analytics.track("search", { query }); + saveToRecentSearches(query); + prefetchTopResults(results.slice(0, 3)); +} +``` + +**Correct (defers non-critical work to idle time):** + +```typescript +function handleSearch(query: string) { + const results = searchItems(query); + setResults(results); + + // Defer non-critical work to idle periods + requestIdleCallback(() => { + analytics.track("search", { query }); + }); + + requestIdleCallback(() => { + saveToRecentSearches(query); + }); + + requestIdleCallback(() => { + prefetchTopResults(results.slice(0, 3)); + }); +} +``` + +**With timeout for required work:** + +```typescript +// Ensure analytics fires within 2 seconds even if browser stays busy +requestIdleCallback(() => analytics.track("page_view", { path: location.pathname }), { + timeout: 2000, +}); +``` + +**Chunking large tasks:** + +```typescript +function processLargeDataset(items: Item[]) { + let index = 0; + + function processChunk(deadline: IdleDeadline) { + // Process items while we have idle time (aim for <50ms chunks) + while (index < items.length && deadline.timeRemaining() > 0) { + processItem(items[index]); + index++; + } + + // Schedule next chunk if more items remain + if (index < items.length) { + requestIdleCallback(processChunk); + } + } + + requestIdleCallback(processChunk); +} +``` + +**With fallback for unsupported browsers:** + +```typescript +const scheduleIdleWork = window.requestIdleCallback ?? ((cb: () => void) => setTimeout(cb, 1)); + +scheduleIdleWork(() => { + // Non-critical work +}); +``` + +**When to use:** + +- Analytics and telemetry +- Saving state to localStorage/IndexedDB +- Prefetching resources for likely next actions +- Processing non-urgent data transformations +- Lazy initialization of non-critical features + +**When NOT to use:** + +- User-initiated actions that need immediate feedback +- Rendering updates the user is waiting for +- Time-sensitive operations diff --git a/.agents/skills/ts-performance-rules/rules/js-set-map-lookups.md b/.agents/skills/ts-performance-rules/rules/js-set-map-lookups.md new file mode 100644 index 000000000..680a4892e --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-set-map-lookups.md @@ -0,0 +1,24 @@ +--- +title: Use Set/Map for O(1) Lookups +impact: LOW-MEDIUM +impactDescription: O(n) to O(1) +tags: javascript, set, map, data-structures, performance +--- + +## Use Set/Map for O(1) Lookups + +Convert arrays to Set/Map for repeated membership checks. + +**Incorrect (O(n) per check):** + +```typescript +const allowedIds = ['a', 'b', 'c', ...] +items.filter(item => allowedIds.includes(item.id)) +``` + +**Correct (O(1) per check):** + +```typescript +const allowedIds = new Set(['a', 'b', 'c', ...]) +items.filter(item => allowedIds.has(item.id)) +``` diff --git a/.agents/skills/ts-performance-rules/rules/js-tosorted-immutable.md b/.agents/skills/ts-performance-rules/rules/js-tosorted-immutable.md new file mode 100644 index 000000000..e6d5df3af --- /dev/null +++ b/.agents/skills/ts-performance-rules/rules/js-tosorted-immutable.md @@ -0,0 +1,57 @@ +--- +title: Use toSorted() Instead of sort() for Immutability +impact: MEDIUM-HIGH +impactDescription: prevents mutation bugs in React state +tags: javascript, arrays, immutability, react, state, mutation +--- + +## Use toSorted() Instead of sort() for Immutability + +`.sort()` mutates the array in place, which can cause bugs with React state and props. Use `.toSorted()` to create a new sorted array without mutation. + +**Incorrect (mutates original array):** + +```typescript +function UserList({ users }: { users: User[] }) { + // Mutates the users prop array! + const sorted = useMemo( + () => users.sort((a, b) => a.name.localeCompare(b.name)), + [users] + ) + return
{sorted.map(renderUser)}
+} +``` + +**Correct (creates new array):** + +```typescript +function UserList({ users }: { users: User[] }) { + // Creates new sorted array, original unchanged + const sorted = useMemo( + () => users.toSorted((a, b) => a.name.localeCompare(b.name)), + [users] + ) + return
{sorted.map(renderUser)}
+} +``` + +**Why this matters in React:** + +1. Props/state mutations break React's immutability model - React expects props and state to be treated as read-only +2. Causes stale closure bugs - Mutating arrays inside closures (callbacks, effects) can lead to unexpected behavior + +**Browser support (fallback for older browsers):** + +`.toSorted()` is available in all modern browsers (Chrome 110+, Safari 16+, Firefox 115+, Node.js 20+). For older environments, use spread operator: + +```typescript +// Fallback for older browsers +const sorted = [...items].sort((a, b) => a.value - b.value); +``` + +**Other immutable array methods:** + +- `.toSorted()` - immutable sort +- `.toReversed()` - immutable reverse +- `.toSpliced()` - immutable splice +- `.with()` - immutable element replacement diff --git a/.changeset/web-design-token-alignment.md b/.changeset/web-design-token-alignment.md new file mode 100644 index 000000000..60f78149f --- /dev/null +++ b/.changeset/web-design-token-alignment.md @@ -0,0 +1,5 @@ +--- +"@pymodel/pythinker-web": minor +--- + +Align the embedded terminal palette and workflow panel motion with the shared design token system. diff --git a/.changeset/web-large-edit-diff-stats.md b/.changeset/web-large-edit-diff-stats.md new file mode 100644 index 000000000..a502d67d2 --- /dev/null +++ b/.changeset/web-large-edit-diff-stats.md @@ -0,0 +1,5 @@ +--- +"@pymodel/pythinker-web": minor +--- + +Show estimated changed-line counts for large edits in session transcripts and file summaries instead of zero. diff --git a/.changeset/web-surface-contract-alignment.md b/.changeset/web-surface-contract-alignment.md new file mode 100644 index 000000000..82f6c56a0 --- /dev/null +++ b/.changeset/web-surface-contract-alignment.md @@ -0,0 +1,5 @@ +--- +"@pymodel/pythinker-web": minor +--- + +Use the shared type scale and corner radii on application surfaces. diff --git a/CLAUDE.md b/CLAUDE.md index f562d2afe..1a6c0a32c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -44,3 +44,17 @@ This project is indexed by GitNexus as **pythinker-code** (91837 symbols, 264777 | Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | + +## Agent skills + +### Issue tracker + +GitHub Issues in this repo, driven through the `gh` CLI. See `docs/agents/issue-tracker.md`. + +### Triage labels + +The five canonical roles: `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`. See `docs/agents/triage-labels.md`. + +### Domain docs + +Single-context: root `CONTEXT.md` plus `docs/adr/`. See `docs/agents/domain.md`. diff --git a/apps/pythinker-code/dist-web/.web-bundle-manifest.json b/apps/pythinker-code/dist-web/.web-bundle-manifest.json index 53501ab8e..559e77b9f 100644 --- a/apps/pythinker-code/dist-web/.web-bundle-manifest.json +++ b/apps/pythinker-code/dist-web/.web-bundle-manifest.json @@ -1,4 +1,4 @@ { - "sourceHash": "481804070c95d33aad2e34f3e0095ca0d5275d19471df4cd88ac33ef9a1746e4", - "sourceFileCount": 496 + "sourceHash": "408e43a543203074fd783c15526e3a1aa180700aaa513c46f7704f73417acb06", + "sourceFileCount": 497 } diff --git a/apps/pythinker-code/dist-web/assets/CodeBlockNode-BscDteEG.js b/apps/pythinker-code/dist-web/assets/CodeBlockNode-Dl1x84a-.js similarity index 99% rename from apps/pythinker-code/dist-web/assets/CodeBlockNode-BscDteEG.js rename to apps/pythinker-code/dist-web/assets/CodeBlockNode-Dl1x84a-.js index d1c12b5c3..a75f56347 100644 --- a/apps/pythinker-code/dist-web/assets/CodeBlockNode-BscDteEG.js +++ b/apps/pythinker-code/dist-web/assets/CodeBlockNode-Dl1x84a-.js @@ -1,3 +1,3 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-BlrGujvY.js","assets/preload-helper-zJ_50EbN.js"])))=>i.map(i=>d[i]); -import{A as e,G as t,I as n,J as r,N as i,O as a,P as o,S as s,T as c,U as l,_ as u,b as d,c as f,d as p,f as m,g as h,h as g,j as _,lt as ee,m as v,n as te,nt as y,ot as b,q as ne,rt as re,st as ie,u as ae,ut as x,v as S,w as C,y as oe,z as se}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{t as ce}from"./preload-helper-zJ_50EbN.js";import{$ as le,A as ue,D as de,J as fe,M as pe,O as me,Q as he,T as ge,X as _e,Y as ve,Z as ye,_ as be,a as xe,d as Se,et as Ce,g as we,h as Te,j as w,n as Ee,nt as De,o as Oe,p as ke,s as Ae,tt as je,v as Me,x as Ne}from"./index-CIrZXSM-.js";var Pe=(e,t,n)=>new Promise((r,i)=>{var a=e=>{try{s(n.next(e))}catch(e){i(e)}},o=e=>{try{s(n.throw(e))}catch(e){i(e)}},s=e=>e.done?r(e.value):Promise.resolve(e.value).then(a,o);s((n=n.apply(e,t)).next())}),Fe=!1,Ie=null,Le=null,T=null;function Re(){return Pe(this,null,function*(){if(T)return T;T=Pe(null,null,function*(){if(!Le)try{if(Le=function(e){let t=e;if(typeof t?.useMonaco==`function`)return t;let n=e?.default;return typeof n?.useMonaco==`function`?n:null}(yield ce(()=>import(`./dist-BlrGujvY.js`),__vite__mapDeps([0,1]))),!Le)return null}catch{return null}try{return yield function(e){return Pe(this,null,function*(){if(!Fe)return Ie||(Ie=Pe(null,null,function*(){let t=globalThis==null?void 0:globalThis.MonacoEnvironment;t&&(typeof t.getWorker==`function`||typeof t.getWorkerUrl==`function`)||typeof e?.preloadMonacoWorkers!=`function`||(yield e.preloadMonacoWorkers()),Fe=!0}).finally(()=>{Ie=null}),Ie)})}(Le),je(),Le}catch{return null}});try{return yield T}finally{T=null}})}var E=Object.defineProperty,ze=Object.defineProperties,D=Object.getOwnPropertyDescriptors,Be=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,Ve=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?E(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,A=(e,t)=>{for(var n in t||={})O.call(t,n)&&k(e,n,t[n]);if(Be)for(var n of Be(t))Ve.call(t,n)&&k(e,n,t[n]);return e},j=(e,t)=>ze(e,D(t)),M=(e,t,n)=>new Promise((r,i)=>{var a=e=>{try{s(n.next(e))}catch(e){i(e)}},o=e=>{try{s(n.throw(e))}catch(e){i(e)}},s=e=>e.done?r(e.value):Promise.resolve(e.value).then(a,o);s((n=n.apply(e,t)).next())}),N={key:0,class:`code-block-header flex justify-between items-center border-b px-[var(--ms-inset-panel-x)] py-[var(--ms-inset-panel-y)] border-[var(--code-border)] bg-[var(--code-header-bg)] text-[var(--code-fg)]`},P={class:`flex items-center gap-0.5`},F=[`aria-label`],I={class:`code-diff-stat removed`},He={class:`code-diff-stat added`},L=[`aria-label`],Ue={key:0,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},We={key:1,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},Ge=[`aria-pressed`],Ke={key:3,class:`relative`},qe=[`aria-expanded`],Je=[`disabled`],Ye=[`disabled`],R=[`disabled`],Xe={key:0,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},Ze={key:1,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},Qe={class:`code-loading-placeholder`},$e={class:`sr-only`,"aria-live":`polite`,role:`status`},et=C({__name:`CodeBlockShell`,props:{showHeader:{type:Boolean,default:!0},showCollapseButton:{type:Boolean,default:!0},showFontSizeButtons:{type:Boolean,default:!0},enableFontSizeControl:{type:Boolean,default:!0},showCopyButton:{type:Boolean,default:!0},showExpandButton:{type:Boolean,default:!0},showPreviewButton:{type:Boolean,default:!0},showTooltips:{type:Boolean,default:!0},isDark:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},stream:{type:Boolean,default:!1},isCollapsed:{type:Boolean,default:!1},isExpanded:{type:Boolean,default:!1},copyText:{type:Boolean,default:!1},isPreviewable:{type:Boolean,default:!1},codeFontSize:{},codeFontMin:{},codeFontMax:{},defaultCodeFontSize:{},fontBaselineReady:{type:Boolean,default:!1},diffStats:{},diffStatsAriaLabel:{}},emits:[`toggleCollapse`,`decreaseFont`,`resetFont`,`increaseFont`,`copy`,`toggleExpand`,`preview`],setup(e,{emit:t}){let i=e,a=t,o=y(!1),c=y(null),l=y(null);function m(){Ee(!0),o.value=!o.value,o.value&&document.addEventListener(`click`,_,{once:!0,capture:!0})}function h(){Ee(!0),o.value=!1}function _(e){let t=e.target;c.value?.contains(t)||l.value?.contains(t)?document.addEventListener(`click`,_,{once:!0,capture:!0}):h()}let re=v(()=>i.showFontSizeButtons&&i.enableFontSizeControl||i.showExpandButton||i.isPreviewable&&i.showPreviewButton),{t:C}=xe(),oe=v(()=>!1!==i.showTooltips);function ce(e,t){oe.value&&Te(e.currentTarget,t,`top`,!1,void 0,i.isDark)}function le(){oe.value&&Ee()}function ue(e){ce(e,i.copyText?C(`common.copied`)||`Copied`:C(`common.copy`)||`Copy`)}let de=v(()=>!!Number.isFinite(i.codeFontSize)&&(i.codeFontSize??0)<=(i.codeFontMin??0)),fe=v(()=>!i.fontBaselineReady||i.codeFontSize===i.defaultCodeFontSize),pe=v(()=>!!Number.isFinite(i.codeFontSize)&&(i.codeFontSize??0)>=(i.codeFontMax??100));return(t,_)=>(n(),S(p,null,[i.showHeader?(n(),S(`div`,N,[se(t.$slots,`header-left`),se(t.$slots,`header-right`,{},()=>[g(`div`,P,[e.diffStats?(n(),S(`div`,{key:0,class:`code-diff-stats`,"aria-label":e.diffStatsAriaLabel},[g(`span`,I,`-`+x(e.diffStats.removed),1),g(`span`,He,`+`+x(e.diffStats.added),1)],8,F)):u(``,!0),i.showCopyButton?(n(),S(`button`,{key:1,type:`button`,class:`code-action-btn inline-flex items-center justify-center p-[var(--ms-action-btn-padding)] rounded leading-none shrink-0 cursor-pointer text-[var(--code-action-fg)] hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] active:scale-[0.96] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,"aria-label":e.copyText?b(C)(`common.copied`)||`Copied`:b(C)(`common.copy`)||`Copy`,onClick:_[0]||=e=>a(`copy`),onMouseenter:_[1]||=e=>ue(e),onFocus:_[2]||=e=>ue(e),onMouseleave:le,onBlur:le},[e.copyText?(n(),S(`svg`,We,[..._[14]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 6L9 17l-5-5`},null,-1)]])):(n(),S(`svg`,Ue,[..._[13]||=[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}),g(`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`})],-1)]]))],40,L)):u(``,!0),i.showCollapseButton?(n(),S(`button`,{key:2,type:`button`,class:`code-action-btn inline-flex items-center justify-center p-[var(--ms-action-btn-padding)] rounded leading-none shrink-0 cursor-pointer text-[var(--code-action-fg)] hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] active:scale-[0.96] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,"aria-pressed":e.isCollapsed,onClick:_[3]||=e=>a(`toggleCollapse`),onMouseenter:_[4]||=t=>ce(t,e.isCollapsed?b(C)(`common.expand`)||`Expand`:b(C)(`common.collapse`)||`Collapse`),onFocus:_[5]||=t=>ce(t,e.isCollapsed?b(C)(`common.expand`)||`Expand`:b(C)(`common.collapse`)||`Collapse`),onMouseleave:le,onBlur:le},[(n(),S(`svg`,{style:ee({rotate:e.isCollapsed?`0deg`:`90deg`}),xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[..._[15]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m9 18l6-6l-6-6`},null,-1)]],4))],40,Ge)):u(``,!0),re.value?(n(),S(`div`,Ke,[g(`button`,{ref_key:`moreBtnRef`,ref:l,type:`button`,class:`code-action-btn inline-flex items-center justify-center p-[var(--ms-action-btn-padding)] rounded leading-none shrink-0 cursor-pointer text-[var(--code-action-fg)] hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] active:scale-[0.96] transition-colors`,"aria-expanded":o.value,"aria-haspopup":`true`,onClick:ae(m,[`stop`]),onMouseenter:_[6]||=e=>ce(e,b(C)(`common.more`)||`More`),onFocus:_[7]||=e=>ce(e,b(C)(`common.more`)||`More`),onMouseleave:le,onBlur:le},[..._[16]||=[d(``,1)]],40,qe),s(te,{name:`code-menu`},{default:ne(()=>[o.value?(n(),S(`div`,{key:0,ref_key:`moreMenuRef`,ref:c,class:`code-more-menu min-w-[10rem] p-1 bg-[hsl(var(--ms-popover))] text-[hsl(var(--ms-popover-foreground))] border border-[var(--code-border)] shadow-[var(--ms-shadow-popover)]`,role:`menu`},[i.showFontSizeButtons&&i.enableFontSizeControl?(n(),S(p,{key:0},[g(`button`,{type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,disabled:de.value,onClick:_[8]||=e=>{b(Ee)(!0),a(`decreaseFont`)}},[_[17]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14`})],-1),g(`span`,null,x(b(C)(`common.fontSmaller`)||`Font size −`),1)],8,Je),g(`button`,{type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,disabled:fe.value,onClick:_[9]||=e=>{b(Ee)(!0),a(`resetFont`)}},[_[18]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`path`,{d:`M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8`}),g(`path`,{d:`M3 3v5h5`})])],-1),g(`span`,null,x(b(C)(`common.fontReset`)||`Font size reset`),1)],8,Ye),g(`button`,{type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,disabled:pe.value,onClick:_[10]||=e=>{b(Ee)(!0),a(`increaseFont`)}},[_[19]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-7-7v14`})],-1),g(`span`,null,x(b(C)(`common.fontLarger`)||`Font size +`),1)],8,R)],64)):u(``,!0),i.showExpandButton?(n(),S(`button`,{key:1,type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] transition-colors`,onClick:_[11]||=e=>{h(),a(`toggleExpand`)}},[e.isExpanded?(n(),S(`svg`,Xe,[..._[20]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m14 10l7-7m-1 7h-6V4M3 21l7-7m-6 0h6v6`},null,-1)]])):(n(),S(`svg`,Ze,[..._[21]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 3h6v6m0-6l-7 7M3 21l7-7m-1 7H3v-6`},null,-1)]])),g(`span`,null,x(e.isExpanded?b(C)(`common.collapse`)||`Collapse`:b(C)(`common.expand`)||`Expand`),1)])):u(``,!0),e.isPreviewable&&i.showPreviewButton?(n(),S(`button`,{key:2,type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] transition-colors`,onClick:_[12]||=e=>{h(),a(`preview`)}},[_[22]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0`}),g(`circle`,{cx:`12`,cy:`12`,r:`3`})])],-1),g(`span`,null,x(b(C)(`common.preview`)||`Preview`),1)])):u(``,!0)],512)):u(``,!0)]),_:1})])):u(``,!0)])])])):u(``,!0),r(g(`div`,{class:ie([`code-block-shell-content`,{"code-block-shell-content--collapsed":e.isCollapsed}])},[se(t.$slots,`default`)],2),[[f,!!e.stream||!e.loading]]),r(g(`div`,Qe,[se(t.$slots,`loading`,{},()=>[_[23]||=g(`div`,{class:`loading-skeleton`},[g(`div`,{class:`skeleton-line`}),g(`div`,{class:`skeleton-line`}),g(`div`,{class:`skeleton-line short`})],-1)])],512),[[f,!e.stream&&e.loading]]),g(`span`,$e,x(e.copyText?b(C)(`common.copied`)||`Copied`:``),1)],64))}}),tt={class:`html-preview-frame__header`},nt={class:`html-preview-frame__title`},rt={class:`html-preview-frame__label`},z=[`sandbox`,`srcdoc`],it=be(C({__name:`HtmlPreviewFrame`,props:{code:{},isDark:{type:Boolean},htmlPreviewAllowScripts:{type:Boolean},htmlPreviewSandbox:{},onClose:{type:Function},title:{}},setup(e){let t=e,{t:r}=xe(),a=v(()=>{let e=t.code||``,n=e.trim().toLowerCase();return n.startsWith(`\n\n \n \n \n \n \n \n ${e}\n \n`}),s=v(()=>{return e=t.htmlPreviewSandbox,n=t.htmlPreviewAllowScripts,typeof e==`string`?e:e===void 0&&!0===n?`allow-scripts`:``;var e,n});function c(e){var n;e.key!==`Escape`&&e.key!==`Esc`||(n=t.onClose)==null||n.call(t)}return i(()=>{typeof window<`u`&&window.addEventListener(`keydown`,c)}),o(()=>{typeof window<`u`&&window.removeEventListener(`keydown`,c)}),(e,i)=>(n(),h(m,{to:`body`},[g(`div`,{class:ie([`markstream-vue`,{dark:t.isDark}])},[g(`div`,{class:`html-preview-frame__backdrop`,onClick:i[2]||=e=>t.onClose?.call(t)},[g(`div`,{class:`html-preview-frame`,onClick:i[1]||=ae(()=>{},[`stop`])},[g(`div`,tt,[g(`div`,nt,[i[3]||=g(`span`,{class:`html-preview-frame__dot`},null,-1),g(`span`,rt,x(t.title||b(r)(`common.preview`)||`Preview`),1)]),g(`button`,{type:`button`,class:`html-preview-frame__close`,onClick:i[0]||=e=>t.onClose?.call(t)},` × `)]),g(`iframe`,{class:`html-preview-frame__iframe`,sandbox:s.value,referrerpolicy:`no-referrer`,srcdoc:a.value},null,8,z)])])],2)]))}}),[[`__scopeId`,`data-v-24e66176`]]),at=[`data-markstream-enhanced`,`data-markstream-enhancement-state`,`data-markstream-code-block-state`,`data-markstream-pending`,`data-markstream-viewport-pending`],ot={class:`code-header-main`},st=[`innerHTML`],ct={class:`code-header-copy`},lt={class:`code-header-title`},ut={key:0,class:`code-header-caption`},dt=[`data-markstream-host-hidden`],ft=`__markstreamMonacoPassiveTouchState__`,pt=be(C({__name:`CodeBlockNode`,props:{node:{},isDark:{type:Boolean,default:!1},loading:{type:Boolean,default:!0},stream:{type:Boolean,default:!0},theme:{},darkTheme:{default:`vitesse-dark`},lightTheme:{default:`vitesse-light`},isShowPreview:{type:Boolean,default:!0},monacoOptions:{},enableFontSizeControl:{type:Boolean,default:!0},minWidth:{default:void 0},maxWidth:{default:void 0},themes:{},showPreviewButton:{type:Boolean,default:!0},showCollapseButton:{type:Boolean,default:!0},showFontSizeButtons:{type:Boolean,default:!0},showTooltips:{type:Boolean},htmlPreviewAllowScripts:{type:Boolean},htmlPreviewSandbox:{},customId:{},showHeader:{type:Boolean,default:!0},showCopyButton:{type:Boolean,default:!0},showExpandButton:{type:Boolean,default:!0},estimatedHeightPx:{},estimatedContentHeightPx:{},estimatedDiffInline:{type:Boolean}},emits:[`previewCode`,`copy`],setup(d,{emit:p}){let m=d,te=p,ae=l(),C=a(Ce,null),ce=a(`markstreamHostScrollManaged`,null),be=a(ge,void 0),Te=v(()=>Se(m,ae)),je=new Set;function Pe(e){return M(this,null,function*(){if(typeof window>`u`)return yield e();let t=window.Element?.prototype,n=t?.addEventListener;if(!t||!n)return yield e();let r=function(){let e=window,t=e[ft];if(t)return t;let n={depth:0,original:null};return e[ft]=n,n}(),i=null;try{r.depth===0&&(r.original=n,t.addEventListener=function(e,t,i){let a=r.original??n;return e===`touchstart`&&function(e,t){if(!e)return!1;let n=e;return!(typeof n.closest!=`function`||!n.closest(`.monaco-editor, .monaco-diff-editor`)||t&&typeof t==`object`&&`passive`in t)}(this,i)?a.call(this,e,t,function(e){return e==null?{passive:!0}:typeof e==`boolean`?{capture:e,passive:!0}:typeof e==`object`?`passive`in e?e:j(A({},e),{passive:!0}):{passive:!0}}(i)):a.call(this,e,t,i)}),r.depth++;let e=!1;i=()=>{e||(e=!0,je.delete(i),r.depth=Math.max(0,r.depth-1),r.depth===0&&r.original&&t.addEventListener!==r.original&&(t.addEventListener=r.original,r.original=null))},je.add(i)}catch{return yield e()}try{return yield e()}finally{i?.()}})}let Fe=c(),Ie=v(()=>{let e=Fe?.vnode.props;return!(!e||!e.onPreviewCode&&!e[`onPreview-code`])}),{t:Le}=xe(),T=y(null),E=y(null),ze=y(!1),D=y(Xr(m.node.language,m.node.code,Jr())),Be=v(()=>ye(D.value)),O=v(()=>Be.value===`plaintext`?`text`:Be.value),Ve=v(()=>Be.value===`plaintext`),k=y(!1),N=y(!1),P=y(!1),F=y(!1),I=y(!1),He=y(!1),L=!1,Ue=null,We=null,Ge=null,Ke=0,qe=!1,Je=``,Ye=y(null),R=y(null),Xe=null,Ze=0,Qe=!1,$e=ke(),tt=Ne(),nt=Me(),rt=re(null),z=y(typeof window>`u`||!nt.value),pt=c()?.vnode.el?.textContent??``,mt=y(!(typeof window<`u`&&String(m.node.code??``).length>0&&pt.includes(String(m.node.code))));i(()=>{mt.value=!0}),typeof window<`u`&&t([()=>E.value,nt],([e,t],n,r)=>{var i;if((i=rt.value)==null||i.destroy(),rt.value=null,!t||z.value)return void(z.value=!0);if(!e)return void(z.value=!1);let a=!0,o=$e(e,{rootMargin:tt?.value.heavyBlockMargin??tt?.value.rootMargin??`0px`,allowIdle:!1});rt.value=o,z.value=z.value||o.isVisible.value,o.whenVisible.then(()=>{a&&rt.value===o&&(z.value=!0)}).catch(()=>{}),r(()=>{a=!1,o.destroy(),rt.value===o&&(rt.value=null)})},{immediate:!0}),_(()=>{var e;L=!0;for(let e of Array.from(je))e();(function(){let e=Je;C&&e&&(Je=``,C.markSettled(e))})(),(e=rt.value)==null||e.destroy(),rt.value=null});let B=null,ht=null,gt=()=>{},_t=()=>{},vt=()=>null,V=()=>({getModel:()=>({getLineCount:()=>1}),getOption:()=>14,updateOptions:()=>{}}),H=()=>({getModel:()=>({getLineCount:()=>1}),getOption:()=>14,updateOptions:()=>{}}),yt=()=>{},bt=()=>{},xt=()=>{},St=null,Ct=null,wt=null,Tt=null,Et=()=>String(m.node.language??`plaintext`),Dt=()=>M(null,null,function*(){}),Ot=!1,kt=null,At=[],jt=[],Mt=null,U=v(()=>me(m.node)),Nt=y({removed:0,added:0}),Pt=v(()=>`-${Nt.value.removed} +${Nt.value.added}`),Ft=Object.freeze(j(A({},ue),{enabled:!1,revealLineCount:0}));function It(e){var t;return Ae(e,((t=E.value)?.getBoundingClientRect)?.call(t).width||E.value?.clientWidth||(typeof window>`u`?0:window.innerWidth))}function Lt(e,t){return{original:Rt(e),updated:Rt(t)}}function Rt(e){return String(e??``).replace(/\r\n$|\n$|\r$/,``)}function zt(e){return String(e?.message??e).includes(`no diff result available`)}function Bt(){if(!Vr())try{let e=xt();e&&typeof e.catch==`function`&&e.catch(e=>{zt(e)})}catch(e){zt(e)}}let W=v(()=>{var e,t;let n=m.monacoOptions?A({},m.monacoOptions):{};if(!U.value)return A({lineDecorationsWidth:0,lineNumbersMinChars:2,glyphMargin:!1},n);let r=n.diffHideUnchangedRegions===void 0?A({},ue):we(n.diffHideUnchangedRegions),i=n.hideUnchangedRegions===void 0?void 0:we(n.hideUnchangedRegions),a=!1!==m.stream&&!1!==m.loading,o=a?A({},Ft):r,s=a?A({},Ft):i,c=function(e){return e.diffWordWrap===void 0?`off`:e.diffWordWrap}(n),l=A({},n.experimental??{}),u=n.diffUnchangedRegionStyle??`line-info`,d=function(e){return A(j(A({},e.scrollbar&&typeof e.scrollbar==`object`?e.scrollbar:{}),{verticalScrollbarSize:0,horizontalScrollbarSize:0}),It(e)?{horizontal:`hidden`}:{})}(n);return j(A(j(A(A({},{maxComputationTime:0,diffAlgorithm:`legacy`,ignoreTrimWhitespace:!1,renderIndicators:!0,diffUpdateThrottleMs:120,renderLineHighlight:`none`,renderLineHighlightOnlyWhenFocus:!0,selectionHighlight:!1,occurrencesHighlight:`off`,matchBrackets:`never`,lineDecorationsWidth:4,lineNumbersMinChars:2,glyphMargin:!1,padding:{top:0,bottom:0},minimap:{enabled:!1},renderOverviewRuler:!1,overviewRulerBorder:!1,hideCursorInOverviewRuler:!0,scrollBeyondLastLine:!1,diffWordWrap:c,renderSideBySide:(e=n.renderSideBySide)==null||e,diffHideUnchangedRegions:o,useInlineViewWhenSpaceIsLimited:(t=n.useInlineViewWhenSpaceIsLimited)!=null&&t,diffLineStyle:`background`,diffAppearance:`auto`,diffUnchangedRegionStyle:u,diffHunkActionsOnHover:!1,experimental:l}),n),{experimental:l}),s===void 0?{}:{hideUnchangedRegions:s}),{diffHideUnchangedRegions:o,diffWordWrap:c,scrollbar:d})}),Vt=v(()=>(m.theme===void 0?Ci(m.darkTheme,m.lightTheme):!xi(m.theme))?function(e){if(e&&typeof e==`object`&&e.colors?.[`editor.background`]){let t=yr(e.colors[`editor.background`]);if(t!=null)return t<128}let t=(Si(e)??``).toLowerCase();return t?[`dark`,`night`,`moon`,`black`,`dracula`,`mocha`,`frappe`,`macchiato`,`palenight`,`ocean`,`poimandres`,`monokai`,`laserwave`,`tokyo`,`slack-dark`,`rose-pine`,`github-dark`,`material-theme`,`one-dark`,`catppuccin-mocha`,`catppuccin-frappe`,`catppuccin-macchiato`].some(e=>t.includes(e))&&![`light`,`latte`,`dawn`,`lotus`].some(e=>t.includes(e)):!!m.isDark}(wi()):!!m.isDark),Ht=v(()=>{if(!U.value)return Vt.value?`dark`:`light`;let e=W.value?.diffAppearance;return e===`light`||e===`dark`?e:Vt.value?`dark`:`light`}),Ut=v(()=>U.value?Ht.value===`dark`:Vt.value),Wt=v(()=>U.value?`diff`:`single`),Gt=y(Wt.value),G=y(!1),K=y(!1),Kt=y(!1),q=y(!1),qt=y(null),Jt=y(0),Yt=y(0),Xt=y(!1),Zt=null,Qt=!1,$t=null,en=!1,tn=v(()=>{if(U.value){let e=W.value?.diffWordWrap;if(e===`inherit`){let e=m.monacoOptions?.wordWrap;return e==null||String(e)!==`off`}return e===`on`}let e=m.monacoOptions?.wordWrap;return e==null||String(e)!==`off`}),nn=v(()=>!!U.value&&It(W.value??{})),rn=v(()=>{let e=m.monacoOptions?.diffHideUnchangedRegions;return e===void 0?A({},ue):we(e)});function an(e){return!0===ce?.value||!!e&&(!!e.closest(`[data-markstream-virtual-timeline="1"], .markstream-virtual-timeline`)||!!e.closest(`.vue-recycle-scroller, [data-virtualizer], [data-virtual-scroll-root]`))}let on=v(()=>an(E.value)),sn=v(()=>!(G.value||!q.value&&K.value)),cn=v(()=>sn.value),ln=v(()=>sn.value&&!Kt.value),un=v(()=>!G.value&&!q.value&&sn.value),dn=v(()=>K.value&&!G.value?`ready`:q.value?`fallback`:`pending`),fn=y(!1),pn=v(()=>Rt(m.node.code)),mn=v(()=>U.value?!0===m.node.diff?m.node:j(A({},m.node),{diff:!0}):pn.value===m.node.code?m.node:j(A({},m.node),{code:pn.value})),J=y(typeof m.monacoOptions?.fontSize==`number`?m.monacoOptions.fontSize:NaN),Y=y(J.value),hn=y(null),gn=y(null),_n=y(null),vn=v(()=>{let e=J.value,t=Y.value;return typeof e==`number`&&Number.isFinite(e)&&e>0&&typeof t==`number`&&Number.isFinite(t)&&t>0}),yn=v(()=>{let e=hn.value;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e;let t=m.monacoOptions?.fontSize;if(typeof t==`number`&&Number.isFinite(t)&&t>0)return t;let n=Y.value;return typeof n==`number`&&Number.isFinite(n)&&n>0?n:12}),bn=v(()=>{let e=gn.value;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e;let t=m.monacoOptions?.lineHeight;return typeof t==`number`&&Number.isFinite(t)&&t>0?t:yn.value===12?18:Math.max(12,Math.round(1.5*yn.value))}),xn=v(()=>bn.value),Sn=v(()=>{let e=m.monacoOptions?.tabSize;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:4}),Cn=v(()=>{let e=m.monacoOptions?.padding,t=U.value?0:8;return{top:typeof e?.top==`number`&&Number.isFinite(e.top)&&e.top>=0?e.top:t,bottom:typeof e?.bottom==`number`&&Number.isFinite(e.bottom)&&e.bottom>=0?e.bottom:t}}),wn=v(()=>{let e=m.estimatedContentHeightPx;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:null});function Tn(e){if(e==null)return null;let t=Math.ceil(e);return!Number.isFinite(t)||t<=0?null:Math.min(t,Math.ceil(Kr()))}function En(){return!U.value&&!1!==m.stream&&!1!==m.loading}let Dn=v(()=>U.value?null:wn.value==null||En()?Math.ceil((e=>{let t=String(e??``);return t?Math.max(1,t.split(/\r\n|\n|\r/).length):1})(pn.value)*xn.value+1):null),On=v(()=>{if(U.value)return null;let e=wn.value;return e==null||En()?Tn(Dn.value):Tn(e)}),kn=v(()=>{let e=m.estimatedHeightPx;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:null}),An=y(null);function jn(){let e=An.value;return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.round(e):null}let Mn=v(()=>jn()??(!U.value&&Xt.value?null:sn.value||!K.value?On.value:null));function Nn(e){let t=e?`hsl(152 42% 60%)`:`var(--diff-added-fg)`,n=e?`hsl(0 58% 58%)`:`var(--diff-removed-fg)`,r=e?`hsl(152 42% 60% / 0.18)`:`var(--diff-added-bg)`,i=e?`hsl(0 58% 58% / 0.18)`:`var(--diff-removed-bg)`,a=e?`hsl(152 42% 60% / 0.28)`:`var(--diff-added-inline-bg)`,o=e?`hsl(0 58% 58% / 0.28)`:`var(--diff-removed-inline-bg)`,s=`linear-gradient(90deg, ${t} 0 4px, transparent 4px 100%)`,c=`linear-gradient(90deg, ${n} 0 4px, transparent 4px 100%)`,l=e?`hsl(0 0% 7% / 0.98)`:`hsl(var(--ms-muted) / 0.45)`,u=`var(--markstream-code-layout-character-width, 1ch)`,d=`calc(${u} + ${u})`,f=`calc(${u} + ${u} + ${u} + ${u} + ${u} + 2px)`,p=`calc(${f} + ${u})`;return{"--markstream-diff-line-number-bg":l,"--markstream-diff-added-fg":t,"--markstream-diff-removed-fg":n,"--markstream-diff-added-line":r,"--markstream-diff-removed-line":i,"--markstream-diff-added-line-fill":r,"--markstream-diff-removed-line-fill":i,"--markstream-diff-added-gutter":s,"--markstream-diff-removed-gutter":c,"--markstream-diff-added-inline":a,"--markstream-diff-removed-inline":o,"--stream-monaco-added-fg":t,"--stream-monaco-removed-fg":n,"--stream-monaco-added-line":r,"--stream-monaco-removed-line":i,"--stream-monaco-added-line-fill":r,"--stream-monaco-removed-line-fill":i,"--stream-monaco-added-gutter":s,"--stream-monaco-removed-gutter":c,"--stream-monaco-added-inline":a,"--stream-monaco-removed-inline":o,"--stream-monaco-gutter-marker-width":`4px`,"--stream-monaco-gutter-gap":`1ch`,"--stream-monaco-line-number-left":`0px`,"--stream-monaco-line-number-width":d,"--stream-monaco-line-number-padding-left":d,"--stream-monaco-line-number-padding-right":u,"--stream-monaco-line-number-separator-width":`2px`,"--stream-monaco-layout-character-width":u,"--stream-monaco-line-number-box-width":f,"--stream-monaco-line-number-gap-to-code":u,"--stream-monaco-line-number-bg":l,"--stream-monaco-diff-code-gap":u,"--stream-monaco-diff-code-padding":`0px`,"--stream-monaco-original-margin-width":p,"--stream-monaco-original-scrollable-left":p,"--stream-monaco-original-scrollable-width":`calc(100% - ${p})`,"--stream-monaco-modified-margin-width":p,"--stream-monaco-modified-scrollable-left":p,"--stream-monaco-modified-scrollable-width":`calc(100% - ${p})`}}let Pn=v(()=>{let e=m.monacoOptions?.fontFamily,t=Tn(wn.value),n=Tn(Dn.value),r=En(),i=A(A({fontSize:`${yn.value}px`,lineHeight:`${xn.value}px`,tabSize:Sn.value,boxSizing:`border-box`,maxHeight:`${Kr()}px`,overflow:`auto`,paddingTop:`${Cn.value.top}px`,paddingBottom:`${Cn.value.bottom}px`},U.value||t==null||r?U.value||n==null?{}:{minHeight:`${n}px`}:{height:`${t}px`,minHeight:`${t}px`}),typeof e==`string`&&e.trim()?{"--markstream-code-font-family":e.trim()}:{});return i[`--markstream-pre-line-number-top`]=`${Cn.value.top}px`,i[`--markstream-code-padding-left`]=`calc(2ch + 2ch + 1ch + 2px + 1ch)`,i[`--markstream-pre-line-number-left`]=`0px`,i[`--markstream-pre-line-number-width`]=`2ch`,i[`--markstream-pre-line-number-padding-left`]=`2ch`,i[`--markstream-pre-line-number-padding-right`]=`1ch`,i[`--markstream-pre-line-number-separator-width`]=`2px`,U.value&&(i[`--markstream-pre-diff-line-height`]=`${xn.value}px`,i[`--markstream-pre-diff-pane-bottom-padding`]=(nn.value,`0px`),Object.assign(i,Nn(Ut.value))),i}),Fn=v(()=>Mn.value!=null&&(!K.value||jn()!=null)),In=v(()=>{let e=Mn.value;if(e==null)return null;if(U.value)return Math.ceil(e);let t=kn.value,n=wn.value;if(t==null||n==null)return Math.ceil(e);let r=Math.max(0,Math.ceil(t)-Math.ceil(n));return Math.ceil(e+r)}),Ln=v(()=>{if(U.value&&sn.value)return{};let e=Mn.value;return Fn.value&&e!=null?{minHeight:`${e}px`}:{}});function Rn(){var e,t,n,r;let i=E.value?.querySelector(`pre.code-pre-fallback`),a=H(),o=i?.scrollTop??0;(t=(e=(a?.getOriginalEditor)?.call(a))?.setScrollTop)==null||t.call(e,o),(r=(n=(a?.getModifiedEditor)?.call(a))?.setScrollTop)==null||r.call(n,o)}function zn(){return M(this,null,function*(){return U.value?(Sr()??Bn(),Z(!0),Rn(),Q(),Kt.value=!0,yield e(),Z(!0),yield Un(),Z(!0),!(St&&!(yield St())||(br(),Bn(),Z(!0),K.value=!0,yield e(),Bn(),Z(!0),br(),Q(),$(),0))):!(St&&!(yield St())||(K.value=!0,yield e(),X(!1),Z(),0))})}function Bn(){let e=T.value;return e&&Lr(e)?(Q(),X({preferModelDiffHeight:!0}),Mr(),Number.parseFloat(e.style.height||``)||null):Sr()}function Vn(){if(!U.value||!I.value||!K.value||sn.value)return!1;let e=T.value;return!!e&&vr(e)}function Hn(e,t=!1,n={}){let r=Math.ceil(e),i=jn();if(i==null)return r;let a=!0===n.allowBelowEstimatedFloor||Vn();return r>=i||a?((t||a)&&I.value&&(An.value=null),r):i}function Un(){return new Promise(e=>{let t=!1,n=null,r=null,i=()=>{t||(t=!0,r!=null&&globalThis.clearTimeout(r),n!=null&&pe(n),e())};r=globalThis.setTimeout(i,50),n=w(i)})}function Wn(){try{let e=T.value;if(!e)return null;let t=e.querySelector(`.view-lines .view-line`);if(t){let e=Math.ceil(t.getBoundingClientRect().height);if(e>0)return e}}catch{}return null}function Gn(){var e;try{let t=U.value?((e=H())?.getModifiedEditor)?.call(e)??H():V(),n=vt()?.EditorOption?.fontInfo;if(t&&n!=null){let e=t.getOption?.call(t,n)?.fontSize;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e}}catch{}try{let e=T.value;if(e){let t=e.querySelector(`.view-lines .view-line`);if(t)try{if(typeof window<`u`&&typeof window.getComputedStyle==`function`){let e=window.getComputedStyle(t).fontSize,n=e&&e.match(/^(\d+(?:\.\d+)?)/);if(n)return Number.parseFloat(n[1])}}catch{}}}catch{}return null}function Kn(e){try{let t=vt()?.EditorOption?.lineHeight;if(t!=null){let n=(e?.getOption)?.call(e,t);if(typeof n==`number`&&n>0)return n}}catch{}let t=Wn();if(t&&t>0)return t;let n=Number.isFinite(Y.value)&&Y.value>0?Y.value:14;return Math.max(12,Math.round(1.35*n))}function qn(e){try{let t=vt()?.EditorOption?.padding;if(t!=null){let n=(e?.getOption)?.call(e,t);if(typeof n?.top==`number`||typeof n?.bottom==`number`)return(typeof n?.top==`number`&&Number.isFinite(n.top)?Math.max(0,n.top):0)+(typeof n?.bottom==`number`&&Number.isFinite(n.bottom)?Math.max(0,n.bottom):0)}}catch{}let t=W.value?.padding;return typeof t?.top==`number`||typeof t?.bottom==`number`?(typeof t?.top==`number`&&Number.isFinite(t.top)?Math.max(0,t.top):0)+(typeof t?.bottom==`number`&&Number.isFinite(t.bottom)?Math.max(0,t.bottom):0):U.value?24:0}function Jn(e,t){return typeof e!=`number`||typeof t!=`number`||e<1||t=i&&o>=i&&n[a]===r[o];)a--,o--;let s=Math.max(0,a-i+1),c=Math.max(0,o-i+1);if(s===0||c===0)return{removed:s,added:c};if((s+1)*(c+1)<=15e5){let e=c+1,t=new Uint32Array(e),a=new Uint32Array(e);for(let e=s-1;e>=0;e--){a[c]=0;for(let o=c-1;o>=0;o--)a[o]=n[i+e]===r[i+o]?t[o+1]+1:Math.max(t[o],a[o+1]);let o=t;t=a,a=o}let o=t[0];return{removed:s-o,added:c-o}}return{removed:s,added:c}}function Zn(e){if(!function(){return!(!U.value||!nn.value)&&(m.node.originalCode!=null||m.node.updatedCode!=null?Xn(String(m.node.originalCode??``),String(m.node.updatedCode??``)).removed>0:String(m.node.code??``).split(/\r\n|\n|\r/).some(e=>function(e){return e.startsWith(`-`)&&!e.startsWith(`---`)}(e)))}())return!0;let t=e?.querySelector(`.stream-monaco-fallback-inline-delete-line`);if((t?.textContent)?.trim()&&(t.hasAttribute(`data-stream-monaco-colorize-signature`)||t.querySelector(`[class*="mtk"]`)))return!0;let n=e?.querySelector([`.editor.modified .view-zones .view-lines.line-delete`,`.editor.modified .view-lines .view-line.line-delete`,`.editor.original .view-zones .view-lines.line-delete`,`.editor.original .view-lines .view-line.line-delete`].join(`,`));if(!n||!n.matches(`.view-line`)&&!n.querySelector(`.view-line`))return!1;let r=n.getBoundingClientRect(),i=e?.getBoundingClientRect();return i?.width===0&&i.height===0||r.width>0&&r.height>0}function Qn(e,t){if(!e)return!1;let n=t.added<=0||!!e.querySelector([`.line-insert`,`.gutter-insert`,`.stream-monaco-fallback-line-insert`,`.stream-monaco-fallback-gutter-insert`,`.stream-monaco-fallback-line-number-insert`].join(`,`)),r=t.removed<=0||!!e.querySelector([`.line-delete`,`.gutter-delete`,`.inline-deleted-margin-view-zone`,`.stream-monaco-fallback-line-delete`,`.stream-monaco-fallback-gutter-delete`,`.stream-monaco-fallback-line-number-delete`,`.stream-monaco-fallback-inline-delete-line`,`.stream-monaco-fallback-inline-delete-margin`].join(`,`));return n&&r}function $n(e,t){let n=e?.querySelector(t);return n instanceof HTMLElement?typeof window>`u`||typeof window.getComputedStyle!=`function`?n:window.getComputedStyle(n).display===`none`?null:n:null}function er(e,t){return $n(e,t)!==null}function tr(e,t){if(!e)return!1;let n=t.added<=0||[`.gutter-insert`,`.stream-monaco-fallback-gutter-insert`].some(t=>er(e,t)),r=t.removed<=0||[`.gutter-delete`,`.inline-deleted-margin-view-zone`,`.stream-monaco-fallback-gutter-delete`,`.stream-monaco-fallback-inline-delete-margin`].some(t=>er(e,t));return n&&r}function nr(e){let t=Array.from(e?.querySelectorAll(`.monaco-diff-editor .margin-view-overlays .line-numbers`)??[]);return!!t.length&&t.some(e=>{if(!e.textContent?.trim())return!1;if(typeof window>`u`||typeof window.getComputedStyle!=`function`)return!0;let t=window.getComputedStyle(e);if(t.display===`none`)return!1;let n=e.getBoundingClientRect();if(n.width<=0&&n.height<=0)return!0;let r=Number.parseFloat(t.width||``),i=Number.parseFloat(t.paddingLeft||``),a=Number.parseFloat(t.paddingRight||``);return Math.max(n.width,Number.isFinite(r)?r:0)>=8&&Number.isFinite(i)&&i>=1&&Number.isFinite(a)&&a>=1})}function rr(e){let t=$n(e,`.monaco-diff-editor .view-lines .view-line`);if(!t)return!1;if(!cr())return!0;let n=$n(e,`.monaco-diff-editor .margin-view-overlays .line-numbers`);if(!n)return!1;if(typeof window>`u`||typeof window.getComputedStyle!=`function`)return!0;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();if(r.width<=0&&r.height<=0||i.width<=0&&i.height<=0)return!0;let a=r.left-i.right;return a>=0&&a<=32}function ir(e,t){return!nn.value||!(t||e?.querySelector([`.line-insert`,`.line-delete`,`.gutter-insert`,`.gutter-delete`,`.stream-monaco-line-number-insert`,`.stream-monaco-line-number-delete`,`.stream-monaco-line-insert-fill`,`.stream-monaco-line-delete-fill`,`.stream-monaco-fallback-line-insert`,`.stream-monaco-fallback-line-delete`,`.stream-monaco-fallback-inline-delete-line`].join(`,`)))||!!(e?.classList.contains(`stream-monaco-diff-inline-native-ready`)&&!e.classList.contains(`stream-monaco-diff-native-stale`))}function ar(e,t,n,r){let i=e?.querySelector(`.monaco-diff-editor .editor.${t}`);if(!i)return!1;let a=Array.from(i.querySelectorAll(`.margin-view-overlays .line-numbers.${n}`));if(!a.length)return!0;let o=Array.from(i.querySelectorAll(`.lines-content > .view-lines:not(.line-delete) > .view-line`));return!!o.length&&a.every(e=>{let t=e.getBoundingClientRect(),n=null;for(let e of o){let r=e.getBoundingClientRect(),i=Math.abs(r.top-t.top);(!n||i1.25||n.node.classList.contains(r)})}function or(e,t){if(!e)return!1;let n=t.added<=0||ar(e,`modified`,`stream-monaco-line-number-insert`,`stream-monaco-line-insert-fill`),r=t.removed<=0||(nn.value?!!e.classList.contains(`stream-monaco-diff-inline-native-ready`):ar(e,`original`,`stream-monaco-line-number-delete`,`stream-monaco-line-delete-fill`));return n&&r}function sr(e){if(Ve.value)return!0;if(!e)return!1;let t=Array.from(e.querySelectorAll(`.monaco-diff-editor .view-lines .view-line, .monaco-editor .view-lines .view-line`)).filter(e=>{if(!e.textContent?.trim())return!1;let t=e.getBoundingClientRect();return t.width>0||t.height>0});if(!t.length)return!1;let n=t.filter(e=>{var t;return t=e.textContent??``,/['"`{}()[\]:;=<>.,]|\/\/|\/\*|\b(?:async|await|class|const|enum|export|for|function|if|import|interface|let|return|switch|type|var|while)\b/.test(t.replace(/\u00A0/g,` `).trim())});return!n.length||n.filter(e=>Array.from(e.querySelectorAll(`span`)).filter(e=>e.textContent?.trim()).some(e=>String(e.className||``).split(/\s+/).some(e=>/^mtk\d+$/.test(e)&&e!==`mtk1`))).length>0}function cr(){return W.value?.lineNumbers!==`off`}function lr(){U.value?Nt.value=Xn(String(m.node.originalCode??``),String(m.node.updatedCode??``)):Nt.value={removed:0,added:0}}function ur(){if(U.value)try{let e=H(),t=(e?.getLineChanges)?.call(e);if(!Array.isArray(t))return void lr();let n=0,r=0;for(let e of t)n+=Jn(e.originalStartLineNumber,e.originalEndLineNumber),r+=Jn(e.modifiedStartLineNumber,e.modifiedEndLineNumber);Nt.value={removed:n,added:r}}catch{lr()}else Nt.value={removed:0,added:0}}function dr(){if(Number.isFinite(Y.value)&&Y.value>0&&Number.isFinite(J.value))return Y.value;let e=Gn();return typeof m.monacoOptions?.fontSize==`number`?(J.value=m.monacoOptions.fontSize,Y.value=m.monacoOptions.fontSize,Y.value):e&&e>0?(J.value=e,Y.value=e,e):(J.value=12,Y.value=12,12)}function fr(){let e=dr();Y.value=Math.min(36,e+1)}function pr(){let e=dr();Y.value=Math.max(10,e-1)}function mr(){dr(),Number.isFinite(J.value)&&(Y.value=J.value)}function hr(){var e,t,n,r,i;try{let a=U.value?H():null,o=U.value?a:V();if(!o)return null;if(a?.getOriginalEditor&&a?.getModifiedEditor){let i=a.getOriginalEditor?.call(a),o=a.getModifiedEditor?.call(a);(e=i?.layout)==null||e.call(i),(t=o?.layout)==null||t.call(o);let s=(i?.getContentHeight)?.call(i)||0,c=(o?.getContentHeight)?.call(o)||0,l=Math.max(s,c);if(l>0)return Math.ceil(l);let u=((n=(i?.getModel)?.call(i))?.getLineCount)?.call(n)||1,d=((r=(o?.getModel)?.call(o))?.getLineCount)?.call(r)||1,f=Math.max(u,d),p=Math.max(Kn(i),Kn(o)),m=Math.max(qn(i),qn(o));return Math.ceil(f*p+m+0)}if(o?.getContentHeight){(i=o?.layout)==null||i.call(o);let e=o.getContentHeight();if(e>0)return U.value||(Xt.value=!0),Math.ceil(e)}let s=(o?.getModel)?.call(o),c=1;s&&typeof s.getLineCount==`function`&&(c=s.getLineCount());let l=Kn(o);return Math.ceil(c*(l+1.5)+0)}catch{return null}}function gr(){var e;if(U.value)return!1;try{let t=((e=V())?.getContentHeight)?.call(e),n=typeof t==`number`&&Number.isFinite(t)&&t>0;return n&&(Xt.value=!0),n}catch{return!1}}function _r(e){if(typeof window>`u`)return null;try{let t=e.getBoundingClientRect(),n=window.getComputedStyle(e);if(n.display===`none`||n.visibility===`hidden`)return null;let r=e.querySelector(`diffs-container`);if(r instanceof HTMLElement){let e=r.getBoundingClientRect();if(e.height>0&&e.bottom>t.top)return Math.ceil(e.bottom-t.top)}let i=[`.editor.original .view-lines .view-line`,`.editor.modified .view-lines .view-line`,`.editor.original .view-zones > div`,`.editor.modified .view-zones > div`,`.editor.original .margin-view-zones > div`,`.editor.modified .margin-view-zones > div`,`.editor.original .diff-hidden-lines`,`.editor.modified .diff-hidden-lines`,`.stream-monaco-diff-unchanged-bridge`],a=0;for(let n of Array.from(e.querySelectorAll(i.join(`,`)))){if(!(n instanceof HTMLElement)||(n.parentElement?.classList.contains(`view-zones`)||n.parentElement?.classList.contains(`margin-view-zones`))&&!(n.textContent?.trim()||n.matches(`.line-delete, .line-insert, .cdr`)||n.querySelector(`.diff-hidden-lines, .stream-monaco-diff-unchanged-bridge, .line-delete, .line-insert, .cdr`)))continue;let e=window.getComputedStyle(n);if(e.display===`none`||e.visibility===`hidden`||Number.parseFloat(e.opacity||`1`)<=.01)continue;let r=n.getBoundingClientRect();r.height<=0||r.bottom<=t.top||(a=Math.max(a,r.bottom-t.top))}return a>0?Math.ceil(a):null}catch{return null}}function vr(e){if(typeof window>`u`)return!1;let t=e.getBoundingClientRect();if(t.width<=0||t.height<=0)return!1;let n=e.querySelectorAll(`.editor.modified .diff-hidden-lines, .editor.original .diff-hidden-lines, .stream-monaco-diff-unchanged-bridge`);for(let e of Array.from(n)){if(!(e instanceof HTMLElement))continue;let n=window.getComputedStyle(e);if(n.display===`none`||n.visibility===`hidden`||Number.parseFloat(n.opacity||`1`)<=.01)continue;let r=e.getBoundingClientRect();if(!(r.width<=0||r.height<=0||r.bottom<=t.top||r.top>=t.bottom))return!0}return!1}function yr(e){let t=String(e??``).trim(),n=t.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i)?.[1];if(n){let e=n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n;return .2126*Number.parseInt(e.slice(0,2),16)+.7152*Number.parseInt(e.slice(2,4),16)+.0722*Number.parseInt(e.slice(4,6),16)}let r=t.match(/\d+(?:\.\d+)?/g);if(!r||r.length<3)return null;let[i,a,o]=r.slice(0,3).map(Number);return .2126*i+.7152*a+.0722*o}function br(){var e;if(xr())return;let t=Gn();t&&t>0&&(hn.value=t,Y.value=t,J.value=t);try{let t=Kn(U.value?((e=H())?.getModifiedEditor)?.call(e)??H():V());t&&t>0&&(gn.value=t)}catch{}try{let e=Wn();e&&e>0&&(gn.value=e)}catch{}}function xr(){return U.value&&cn.value}function Sr(){if(!U.value||!sn.value)return null;let e=T.value,t=E.value?.querySelector(`pre.code-pre-fallback`);if(!e||!t)return null;let n=Math.ceil(t.getBoundingClientRect().height);return!Number.isFinite(n)||n<=0?null:(e.style.height=`${n}px`,e.style.minHeight=`${n}px`,e.style.maxHeight=`${Math.ceil(Kr())}px`,e.style.overflow=`hidden`,n)}function Cr(){let e=T.value,t=E.value;if(!e||!t)return;let n=e,r=e.querySelector(`.monaco-editor`)||e,i=r.querySelector(`.monaco-editor-background`)||r,a=r.querySelector(`.view-lines`)||r,o=null,s=null,c=null;try{typeof window<`u`&&typeof window.getComputedStyle==`function`&&(o=window.getComputedStyle(r),s=i===r?o:window.getComputedStyle(i),c=a===r?o:window.getComputedStyle(a))}catch{o=null,s=null,c=null}let l=String(o?.getPropertyValue(`--vscode-editor-foreground`)??``).trim(),u=String(o?.getPropertyValue(`--vscode-editor-background`)??``).trim(),d=String(o?.getPropertyValue(`--vscode-editor-selectionBackground`)??o?.getPropertyValue(`--vscode-editor-hoverHighlightBackground`)??``).trim(),f=l||String(c?.color??o?.color??``).trim(),p=u||String(s?.backgroundColor??o?.backgroundColor??``).trim(),m=function(){var e;try{let t=U.value?((e=H())?.getModifiedEditor)?.call(e)??H():V(),n=vt()?.EditorOption?.fontInfo;if(t&&n!=null){let e=t.getOption?.call(t,n)?.typicalHalfwidthCharacterWidth;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e}}catch{}return null}();if(m!=null&&(_n.value=m),U.value){let e=(e,r)=>{r?(t.style.setProperty(e,r),n.style.setProperty(e,r)):(t.style.removeProperty(e),n.style.removeProperty(e))};for(let[n,r]of Object.entries(Nn(t.classList.contains(`is-dark`))))e(n,r);f?(t.style.setProperty(`--markstream-diff-editor-fg`,f),n.style.setProperty(`--vscode-editor-foreground`,f),n.style.setProperty(`--stream-monaco-editor-fg`,f)):(t.style.removeProperty(`--markstream-diff-editor-fg`),n.style.removeProperty(`--vscode-editor-foreground`),n.style.removeProperty(`--stream-monaco-editor-fg`)),p?(t.style.setProperty(`--markstream-diff-editor-bg`,p),t.style.setProperty(`--markstream-diff-panel-bg`,p),t.style.setProperty(`--markstream-diff-panel-bg-soft`,p),t.style.setProperty(`--markstream-diff-panel-bg-strong`,p),n.style.setProperty(`--vscode-editor-background`,p),n.style.setProperty(`--stream-monaco-editor-bg`,p),n.style.setProperty(`--stream-monaco-fixed-editor-bg`,p),n.style.setProperty(`--stream-monaco-panel-bg`,p),n.style.setProperty(`--stream-monaco-panel-bg-soft`,p),n.style.setProperty(`--stream-monaco-panel-bg-strong`,p),n.style.backgroundColor=p):(t.style.removeProperty(`--markstream-diff-editor-bg`),t.style.removeProperty(`--markstream-diff-panel-bg`),t.style.removeProperty(`--markstream-diff-panel-bg-soft`),t.style.removeProperty(`--markstream-diff-panel-bg-strong`),n.style.removeProperty(`--vscode-editor-background`),n.style.removeProperty(`--stream-monaco-editor-bg`),n.style.removeProperty(`--stream-monaco-fixed-editor-bg`),n.style.removeProperty(`--stream-monaco-panel-bg`),n.style.removeProperty(`--stream-monaco-panel-bg-soft`),n.style.removeProperty(`--stream-monaco-panel-bg-strong`),n.style.backgroundColor=``),d?n.style.setProperty(`--vscode-editor-selectionBackground`,d):n.style.removeProperty(`--vscode-editor-selectionBackground`);return}if(function(e,t,n){if(!Ve.value)return!1;let r=yr(e),i=yr(t);return n?r!=null&&r>170||i!=null&&i<110:r!=null&&r<85||i!=null&&i>190}(p,f,t.classList.contains(`is-dark`)))return n.style.removeProperty(`--vscode-editor-foreground`),n.style.removeProperty(`--vscode-editor-background`),void n.style.removeProperty(`--vscode-editor-selectionBackground`);f&&n.style.setProperty(`--vscode-editor-foreground`,f),p&&n.style.setProperty(`--vscode-editor-background`,p),d&&n.style.setProperty(`--vscode-editor-selectionBackground`,d)}let wr=0,Tr=0,Er=/auto|scroll|overlay/i;function Dr(e,t,n){if(typeof window>`u`||U.value||function(e){return on.value||an(e)}(e))return;let r=Math.ceil(n)-Math.ceil(t);if(Math.abs(r)<=1)return;let i=function(e){if(typeof window>`u`)return null;let t=e?.ownerDocument??document,n=t.scrollingElement||t.documentElement||t.body,r=e?.parentElement??null;for(;r&&r!==t.body&&r!==n;){let e=window.getComputedStyle(r),t=(e.overflowY||``).toLowerCase(),n=(e.overflow||``).toLowerCase();if(Er.test(t)||Er.test(n))return r;r=r.parentElement}return n}(e);if(!i)return;let a=e.ownerDocument??document,o=i===a.body||i===a.documentElement||i===a.scrollingElement,s=o?0:i.getBoundingClientRect().top;e.getBoundingClientRect().top-s>=0||(o&&typeof window.scrollBy==`function`?window.scrollBy(0,r):i.scrollTop+=r)}function Or(){try{let e=T.value;if(!e)return;let t=e.getBoundingClientRect().height,n=hr();if(n!=null&&n>0){let r=Hn(n,!0,{allowBelowEstimatedFloor:!U.value&&I.value&&gr()}),i=jn();e.style.minHeight=i==null?`0px`:`${i}px`,e.style.height=`${r}px`,e.style.maxHeight=`none`,e.style.overflow=`visible`,Dr(e,t,r);return}let r=jn();r!=null&&(e.style.minHeight=`${r}px`,e.style.height=`${r}px`,e.style.maxHeight=`none`,e.style.overflow=`visible`,Dr(e,t,r))}catch{}}function kr(){for(var e,t;At.length>0;)try{(t=(e=At.pop())?.dispose)==null||t.call(e)}catch{}Ue!=null&&(pe(Ue),Ue=null),We!=null&&(pe(We),We=null),Ge!=null&&(pe(Ge),Ge=null),Ke=0,qe=!1}function Ar(){for(var e;jt.length>0;)try{(e=jt.pop())==null||e()}catch{}}function X(e=!1){N.value||(k.value?Or():function(e={}){try{let t=T.value;if(!t)return;let n=t.getBoundingClientRect().height,r=Kr(),i=Math.ceil(t.getBoundingClientRect?.call(t).height||0),a=Number.parseFloat(t.style.height||``),o=i>0?i:Number.isFinite(a)&&a>0?Math.ceil(a):0,s=U.value?function(){var e,t;if(Vr())return null;try{let n=H(),r=(n?.getOriginalEditor)?.call(n),i=(n?.getModifiedEditor)?.call(n);if(!r||!i)return null;let a=((e=r.getModel?.call(r))?.getLineCount)?.call(e)||1,o=((t=i.getModel?.call(i))?.getLineCount)?.call(t)||1,s=Math.max(a,o),c=Math.max(Kn(r),Kn(i)),l=Math.max(qn(r),qn(i)),u=Math.max(r.getContentHeight?.call(r)??0,i.getContentHeight?.call(i)??0);return Math.ceil(Math.max(u,s*c+l+0))}catch{return null}}():null,c=U.value&&vr(t),l=U.value&&Lr(t),u=U.value&&t.classList.contains(`stream-monaco-diff-native-stale`),d=c&&I.value&&K.value&&!sn.value;if(c||(R.value=null),Ze>0&&(Ze--,Ye.value!=null))return void Dr(t,n,Nr(t,Ye.value,r,{allowBelowEstimatedFloor:d,preserveScrollableOverflow:Fr(t)}));if(U.value&&!l&&!c&&sn.value){let e=Sr();if(e!=null){let i=Nr(t,e,r,{allowBelowEstimatedFloor:!0});Z(!0),Dr(t,n,i);return}}let f=U.value&&!0===e.preferModelDiffHeight,p=U.value?_r(t):null,h=p,g=!U.value&&I.value&&gr(),_=U.value&&!1!==m.loading&&(h!=null||s!=null&&i>0&&s0&&s0&&s0?o:null:s;else v=hr();if(U.value&&!1===m.loading&&u&&!d&&v!=null&&s!=null&&(v=Math.min(v,s)),U.value&&v!=null&&o>0&&(!1!==m.loading||!1===m.loading&&u&&!d||!0===e.holdCurrentDiffHeight&&!d)&&(v=Math.max(v,o)),v!=null&&v>0){let e=c&&R.value!=null,a=c&&i>0&&i=r-1,o=Nr(t,e?Math.max(R.value,v):a?i:v,r,{clearEstimatedFloor:!0,allowBelowEstimatedFloor:d||g||_,preserveScrollableOverflow:Fr(t)});c&&o0?s:0);if(te>0){let e=c&&R.value!=null,a=c&&i>0&&i=r-1,o=Nr(t,e?Math.max(R.value,te):a?i:te,r,{allowBelowEstimatedFloor:d});c&&o0?Dr(t,n,Nr(t,b,r,{allowBelowEstimatedFloor:d})):U.value||Dr(t,n,Nr(t,r,r))}catch{}}(typeof e==`object`?e:{}))}function jr(){wr=0,Tr=0}function Z(e=!1){if(N.value)return;let t=T.value;if(!t)return;let n=U.value?H():V();if(n&&typeof n.layout==`function`)try{let r=t.getBoundingClientRect?.call(t),i=Math.ceil((r?.width??0)||t.clientWidth||0),a=Math.ceil((r?.height??0)||t.clientHeight||Number.parseFloat(t.style.height||``)||0);if(i>0&&a>0){if(!e&&i===wr&&a===Tr)return;wr=i,Tr=a,n.layout({width:i,height:a})}else jr(),n.layout()}catch{}}function Q(){if(!U.value)return void Ar();let e=T.value;if(!e)return void Ar();let t=e.querySelector(`.monaco-diff-editor`);if(!t||t.classList.contains(`side-by-side`))return void Ar();let n=Array.from(t.querySelectorAll(`.editor.original .diff-hidden-lines`)),r=Array.from(t.querySelectorAll(`.editor.modified .diff-hidden-lines`)),i=Math.min(n.length,r.length);for(let e=0;e div:first-child`),a=t.querySelector(`.center`);if(!n||!i||!a||a.querySelector(`.markstream-inline-fold-proxy`))continue;let o=document.createElement(`button`);o.type=`button`,o.className=`markstream-inline-fold-proxy`,o.dataset.markstreamInlineFoldProxy=`true`;let s=n.getAttribute(`title`)||`Show Unchanged Region`;o.title=s,o.setAttribute(`aria-label`,s);let c=e=>{e.preventDefault(),e.stopPropagation()},l=e=>{e.preventDefault(),e.stopPropagation(),n.click(),w(()=>$())},u=e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),e.stopPropagation(),n.click(),w(()=>$()))};o.addEventListener(`mousedown`,c),o.addEventListener(`click`,l),o.addEventListener(`keydown`,u),a.appendChild(o),jt.push(()=>{o.removeEventListener(`mousedown`,c),o.removeEventListener(`click`,l),o.removeEventListener(`keydown`,u),o.parentElement===a&&a.removeChild(o)})}}function $(e=!1){if(L||Ue!=null)return;let t=()=>{L||(Q(),X(e),Z())};Ue=w(()=>{Ue=null,t(),We=w(()=>{We=null,t()})}),Mr()}function Mr(e=!1){if(!U.value||L||!e&&!1===m.loading||(qe||=e,Ke=Math.max(Ke,e?18:6),Ge!=null))return;let t=()=>{if(Ge=null,!U.value||L||Ke<=0||!qe&&!1===m.loading)return Ke=0,void(qe=!1);Ke--,Q(),X({preferModelDiffHeight:!0,holdCurrentDiffHeight:qe}),Z(),Ke>0?Ge=w(t):qe=!1};Ge=w(t)}function Nr(e,t,n,r={}){let i=U.value&&!1!==m.loading?_r(e):null,a=i!=null&&i>t+1?i:t,o=Math.min(a,n),s=!0===r.allowBelowEstimatedFloor||Vn(),c=Hn(o,!0===r.clearEstimatedFloor,{allowBelowEstimatedFloor:s}),l=jn();if(e.style.minHeight=l==null||s?`0px`:`${Math.min(l,Math.ceil(n))}px`,e.style.height=`${c}px`,e.style.maxHeight=`${Math.ceil(n)}px`,U.value)e.style.overflow=`hidden`;else{let i=!0===r.preserveScrollableOverflow||t>n+1;e.style.overflow=i?`auto`:`hidden`}return c}function Pr(e,t=0){let n=Math.ceil(e.getBoundingClientRect?.call(e).height||0),r=Math.max(t,e.clientHeight||0,n);return r>0&&e.scrollHeight>r+1}function Fr(e){return!U.value&&(Qe||Pr(e,Ye.value??0))}function Ir(e){var t,n,r,i;if(!U.value)return;let a=k.value||!vr(e)||e.getBoundingClientRect().height>=Kr()-1;if(Xe===a)return;Xe=a;let o=j(A({},m.monacoOptions?.scrollbar??{}),{handleMouseWheel:a}),s=H();try{(n=(t=(s?.getOriginalEditor)?.call(s))?.updateOptions)==null||n.call(t,{scrollbar:o}),(i=(r=(s?.getModifiedEditor)?.call(s))?.updateOptions)==null||i.call(r,{scrollbar:o})}catch{}}function Lr(e=T.value){return!!Vr(e)||!!e?.querySelector(`.monaco-diff-editor .view-lines .view-line`)}function Rr(e=T.value){return!!Vr(e)||!!e?.querySelector(`.monaco-editor .view-lines .view-line`)}function zr(){var e;if(Vr())return!0;let t=((e=V())?.getModel)?.call(e);return typeof t?.getValue==`function`&&t.getValue()===pn.value}function Br(e=T.value){return!!Vr(e)||!!e?.classList.contains(`stream-monaco-diff-root`)&&!(nn.value&&!e.classList.contains(`stream-monaco-diff-inline`))}function Vr(e=T.value){return!!e?.querySelector(`diffs-container`)}function Hr(e){return!1!==m.loading||K.value||e.classList.contains(`stream-monaco-diff-native-stale`)||vr(e)}function Ur(){let e=H();return typeof e?.getOriginalEditor==`function`||typeof e?.getModifiedEditor==`function`||typeof e?.getLineChanges==`function`}function Wr(){return M(this,arguments,function*(t={}){if(!U.value)return!0;if(Vr())return yield e(),yield Un(),Vr();let n=!1!==t.requireHighlight,r=0,i=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``)),a=Xn(i.original,i.updated),o=a.added>0||a.removed>0,s=()=>{let e=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``));e.original===i.original&&e.updated===i.updated||(i=e,a=Xn(i.original,i.updated),o=a.added>0||a.removed>0)};for(let t=0;t<30;t++){if(L)return!1;s();let t=T.value,i=H(),c=cr(),l=!1;try{let e=(i?.getLineChanges)?.call(i);l=Array.isArray(e)&&(!o||e.length>0)}catch{l=!1}let u=!!t?.querySelector(`.monaco-diff-editor`),d=Lr(t),f=!o||Qn(t,a),p=!o||tr(t,a),m=!c||nr(t);if(u&&d&&l&&f&&p&&m&&Zn(t)){try{Bt(),Q(),ur(),$()}catch{}if(yield e(),yield Un(),L)return!1;let t=T.value,i=!cr()||nr(t),s=!o||Qn(t,a),c=!o||tr(t,a),l=ir(t,o),u=or(t,a),d=!n||sr(t),f=Br(t)&&i&&rr(t)&&s&&c&&l&&u&&d,p=Br(t)&&i&&rr(t)&&s&&c&&Zn(t)&&d;if(f||p){if(r++,r>=2)return!0}else r=0}yield e(),yield Un()}return L||(Bt(),Q(),ur(),$(),s()),!1})}function Gr(t,n,r){return M(this,null,function*(){try{yield _t(t,n,r);return}catch(e){if(!zt(e))throw e}if(yield e(),yield Un(),!L&&U.value)try{yield _t(t,n,r)}catch(e){if(!zt(e))throw e}})}function Kr(){let e=m.monacoOptions?.MAX_HEIGHT??500;if(typeof e==`number`)return e;let t=String(e).match(/^(\d+(?:\.\d+)?)/);return t?Number.parseFloat(t[1]):500}let qr=v(()=>m.isShowPreview&&(D.value===`html`||D.value===`svg`));function Jr(){return typeof m.node.loading==`boolean`?m.node.loading:!0===m.loading}function Yr(){if(!Jr())return!0;let e=String(m.node.raw??``),t=e.split(/\r\n|\n|\r/,1)[0]?.trimStart()??``;return!/^(?:`{3,}|~{3,})/.test(t)||/\r\n|\n|\r/.test(e)}function Xr(e,t,n){return!n||Yr()&&String(t??``)?ve(String(e??``)):`plain`}function Zr(){return Jr()}let Qr=null,$r=!1,ei=0;function ti(){Qr=null,ei++}function ni(){return M(this,arguments,function*(t=ei){if(!$r){$r=!0;try{for(;Qr&&!L&&!U.value&&t===ei;){let t=Qr;Qr=null;try{yield Promise.resolve(gt(t.code,t.language)),yield e(),L||U.value||(X(!1),Z())}catch{}}}finally{$r=!1,!Qr||L||U.value||ni()}}})}function ri(e,t){Qr={code:e,language:t},ni(ei)}t(()=>[m.node.language,m.node.code,m.node.raw,m.node.loading,m.loading],([e,t,n,r,i])=>{D.value=Xr(e,t,typeof r==`boolean`?r:!0===i)}),t(()=>[m.node.originalCode,m.node.updatedCode,U.value],()=>{R.value=null,lr(),w(()=>ur())},{immediate:!0});let ii=0;t(()=>[m.node.originalCode,m.node.updatedCode,O.value,U.value,m.stream],t=>M(null,[t],function*([,,,t,n]){let r=++ii;if(!t||Jr()||!1===n&&!P.value)return;if(!1!==n&&B&&!P.value&&T.value)try{yield vi(T.value)}catch{}let i=wt;if(i&&!F.value){try{yield i}catch{}if(L||!U.value||r!==ii)return}if(r!==ii)return;let a=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``)),o=!1===m.loading;o&&ki();try{if(yield Gr(a.original,a.updated,O.value),L||!U.value||r!==ii)return;yield e(),Z(!0),Q(),X(!1===m.loading||{preferModelDiffHeight:!0}),Z(!0),$(!0)}catch{return}if(o){if(L||!U.value)return;Bt(),Q(),ur(),$(),Mr(!0)}k.value&&w(()=>Or())})),t(()=>m.node.code,e=>M(null,null,function*(){if(Jr()||!1===m.stream||(D.value||=ve(Et(e)),U.value))return;let t=wt;if(t&&!F.value){try{yield t}catch{}if(L||U.value)return}if(B&&!P.value&&T.value)try{yield vi(T.value)}catch{}ri(Rt(m.node.code),O.value),k.value&&w(()=>Or())}));let ai=v(()=>{let e=D.value;return e?_e[e]||e.charAt(0).toUpperCase()+e.slice(1):_e[``]||`Plain Text`}),oi=v(()=>de(String(m.node.raw??``),ai.value,U.value)),si=v(()=>oi.value.title),ci=v(()=>oi.value.caption),li=v(()=>(fe.value,function(e,t){if(t===void 0)return De(e);if(t){let n=t(e);if(n!=null&&n!==``)return n}return he(ve(e))||le()}(D.value||``,be))),ui=v(()=>{let e={};e[`--markstream-code-layout-character-width`]=_n.value==null?`1ch`:`${_n.value}px`;let t=e=>{if(e!=null)return typeof e==`number`?`${e}px`:String(e)},n=t(m.minWidth),r=t(m.maxWidth);if(n&&(e.minWidth=n),r&&(e.maxWidth=r),Fn.value&&!U.value&&!N.value){let t=In.value;t!=null&&(e.minHeight=`${t}px`)}return U.value||(e.color=`var(--vscode-editor-foreground, var(--markstream-code-fallback-fg))`,e.backgroundColor=`var(--vscode-editor-background, var(--markstream-code-fallback-bg))`,e.borderColor=`var(--markstream-code-border-color)`),e}),di=v(()=>!1!==m.showTooltips);function fi(){return M(this,null,function*(){try{typeof navigator<`u`&&navigator.clipboard&&typeof navigator.clipboard.writeText==`function`&&(yield navigator.clipboard.writeText(m.node.code)),ze.value=!0,te(`copy`,m.node.code),setTimeout(()=>{ze.value=!1},1e3)}catch(e){console.error(`复制失败:`,e)}})}function pi(){k.value=!k.value;let e=U.value?H():V(),t=T.value;e&&t&&(k.value?(gi(!0),t.style.maxHeight=`none`,t.style.overflow=`visible`,X(!0)):(gi(!1),t.style.overflow=U.value?`hidden`:`auto`,X(!0)),Ir(t))}function mi(){var t;if(N.value=!N.value,N.value){if(Qe=!1,T.value){let e=Math.ceil((t=T.value).getBoundingClientRect?.call(t).height||0);Qe=!U.value&&(Pr(T.value,e)||T.value.style.overflow===`auto`||T.value.style.overflowY===`auto`),e>0&&(Ye.value=e)}gi(!1)}else k.value&&gi(!0),T.value&&Ye.value!=null&&(T.value.style.height=`${Ye.value}px`),Ze=2,e(()=>{N.value||L||(X(!0),Z(!0))})}function hi(){if(!qr.value)return;let e=D.value;if(Ie.value){let t=e===`html`?`text/html`:`image/svg+xml`,n=e===`html`?Le(`artifacts.htmlPreviewTitle`)||`HTML Preview`:Le(`artifacts.svgPreviewTitle`)||`SVG Preview`;te(`previewCode`,{node:m.node,artifactType:t,artifactTitle:n,id:`temp-${e}-${Date.now()}`});return}e===`html`&&(fn.value=!fn.value)}function gi(e){var t,n;try{if(U.value){let n=H();(t=n?.updateOptions)==null||t.call(n,{automaticLayout:e})}else{let t=V();(n=t?.updateOptions)==null||n.call(t,{automaticLayout:e})}}catch{}}function _i(t){return M(this,null,function*(){if(!B||L)return;let n=Wt.value;if(en=!1,q.value=!1,qt.value=null,F.value=!1,K.value=!1,Kt.value=!1,Xe=null,hn.value=null,gn.value=null,_n.value=null,function(){let e=function(){let e=T.value?.parentElement;return e instanceof HTMLElement?e:null}();e&&(e.style.removeProperty(`--stream-monaco-line-number-left`),e.style.removeProperty(`--stream-monaco-line-number-width`),e.style.removeProperty(`--stream-monaco-line-number-gap-to-code`),e.style.removeProperty(`--stream-monaco-original-line-number-gap-to-code`),e.style.removeProperty(`--stream-monaco-modified-line-number-gap-to-code`),e.style.removeProperty(`--stream-monaco-original-scrollable-left`),e.style.removeProperty(`--stream-monaco-modified-scrollable-left`))}(),jr(),function(){Xt.value=!1;let e=On.value;An.value=I.value||e==null?null:e}(),kr(),Ar(),function(e){e.replaceChildren()}(t),ki(),L)return;let r=M(null,null,function*(){if(n===`diff`){(function(){if(Ot||typeof window>`u`)return;Ot=!0;let e=e=>{zt(`reason`in e?e.reason:e.error??e.message)&&(e.preventDefault(),e.stopImmediatePropagation())};window.addEventListener(`error`,e,!0),window.addEventListener(`unhandledrejection`,e,!0),kt=()=>{window.removeEventListener(`error`,e,!0),window.removeEventListener(`unhandledrejection`,e,!0),Ot=!1,kt=null}})(),bt();let e=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``));ht?yield Pe(()=>ht(t,e.original,e.updated,O.value)):yield Pe(()=>B(t,m.node.code,O.value))}else yield Pe(()=>B(t,pn.value,O.value));F.value=!0}).finally(()=>{wt===r&&(wt=null)});if(wt=r,yield function(t){return M(this,null,function*(){if(!U.value)return void(yield t);let n,r=!1;for(t.then(()=>{r=!0},e=>{r=!0,n=e});;){if(L)return;if(r){if(n)throw n;return}if(Lr()&&Ur())return;yield e(),yield Un()}})}(r),L||Wt.value!==n)return;F.value=!0;let i=n===`diff`?H():V();if(typeof m.monacoOptions?.fontSize==`number`)i?.updateOptions({fontSize:m.monacoOptions.fontSize,automaticLayout:!1}),J.value=m.monacoOptions.fontSize,Y.value=m.monacoOptions.fontSize;else if(!xr()){let e=Gn();e&&e>0?(J.value=e,Y.value=e):(J.value=12,Y.value=12)}br(),yield Ti(),k.value||N.value||X(!1),I.value=!0,Gt.value=n,function(){if(kr(),U.value){let e=H(),t=(e?.getOriginalEditor)?.call(e),n=(e?.getModifiedEditor)?.call(e),r=(e,t)=>{try{let n=e?.[t];if(typeof n!=`function`)return;let r=n.call(e,()=>$());r&&At.push(r)}catch{}};try{let t=(e?.onDidUpdateDiff)?.call(e,()=>{$(),w(()=>ur())});t&&At.push(t)}catch{}r(t,`onDidContentSizeChange`),r(n,`onDidContentSizeChange`);let i=T.value;if(i&&typeof MutationObserver<`u`){let e=[`.view-line`,`.view-lines`,`.view-zones`,`.margin-view-zones`,`.diff-hidden-lines`,`.stream-monaco-diff-unchanged-bridge`,`.stream-monaco-fallback-inline-delete-zone`,`.stream-monaco-fallback-inline-delete-margin`].join(`,`),t=t=>{let n=t instanceof HTMLElement?t:t.parentElement;return!!(n?.closest)?.call(n,e)},n=t=>{let n=t instanceof HTMLElement?t:t.parentElement;return!!((n?.closest)?.call(n,e)||(n?.querySelector)?.call(n,e))},r=new MutationObserver(e=>{U.value&&Hr(i)&&e.some(e=>t(e.target)||Array.from(e.addedNodes).some(n)||Array.from(e.removedNodes).some(t))&&(Q(),X({preferModelDiffHeight:!0}),Z(),Mr())});r.observe(i,{attributeFilter:[`class`],attributes:!0,childList:!0,characterData:!0,subtree:!0}),At.push({dispose:()=>r.disconnect()})}if(i){let e=e=>{if(!(e.target instanceof Element?e.target:null)?.closest([`.stream-monaco-unchanged-summary`,`.stream-monaco-unchanged-reveal`,`.stream-monaco-unchanged-expand`,`.markstream-inline-fold-proxy`,`.diff-hidden-lines .center`].join(`,`)))return;let t=Math.ceil(i.getBoundingClientRect().height||0);t>0&&(R.value=t)};i.addEventListener(`click`,e,!0),At.push({dispose:()=>i.removeEventListener(`click`,e,!0)})}if(i&&typeof ResizeObserver<`u`){let e=new ResizeObserver(()=>{if(!U.value||(Z(),!Hr(i)))return;let e=_r(i);if(e==null)return;let t=Math.ceil(i.getBoundingClientRect().height||0),n=R.value;if(vr(i)&&n!=null){if(t>n+1)R.value=t;else if(te.disconnect()})}return}let e=V();try{let t=(e?.onDidContentSizeChange)?.call(e,()=>$());t&&At.push(t)}catch{}try{let t=(e?.onDidLayoutChange)?.call(e,()=>$());t&&At.push(t)}catch{}}(),Cr(),br(),Q(),ur(),$(),yield e();let a=null;St&&(a=yield St(),a&&(yield e(),yield Un()));let o=a??(n===`diff`?yield Wr({requireHighlight:!0}):yield function(){return M(this,null,function*(){if(Vr())return yield e(),yield Un(),Vr();for(let t=0;t<30;t++){if(L||U.value)return!1;let t=T.value,n=zr(),r=Rr(t),i=!pn.value.trim()||sr(t);if(n&&r&&i&&(yield e(),yield Un(),!L&&!U.value&&zr()&&Rr(T.value)&&(!pn.value.trim()||sr(T.value))))return!0;yield e(),yield Un()}return!1})}());L||(o?(br(),Bn(),(yield zn())||Ii()):Ii())})}function vi(t,n={}){if(!B||L||!1===m.stream&&!1!==m.loading||(Pi(),Fi())||G.value||T.value!==t||Zr())return null;if(Ct)return Ct;if(P.value&&I.value)return Promise.resolve();let r=Mi(),i=Jt.value,a=!1;P.value=!0,function(){let e=Te.value;C&&e&&Je!==e&&(Je&&C.markSettled(Je),Je=e,C.markPending(e))}();let o=M(null,null,function*(){try{yield _i(t),Zt=null}catch(e){let t=Mi(),o=i!==Jt.value,s=!1!==n.allowStaleContentRetry&&o&&Zt!==t;if(r!==t||s)return s&&(Zt=t),a=!0,P.value=!1,I.value=!1,F.value=!1,void(K.value=!1);throw Ii(r),e}}).finally(()=>{Ct===o&&(Ct=null),function(){let t=Je;C&&t&&(Je=``,e(()=>{if(!L){let e=E.value?.offsetHeight??0;e>0&&C.reportHeight(t,e)}C.markSettled(t)}))}(),a&&!L&&queueMicrotask(()=>{var e;let t=T.value;t&&!L&&((e=vi(t))==null||e.catch(e=>{I.value=!1,K.value=!1,Ii()}))})});return Ct=o,o}t(di,e=>{e||Ee()}),t(()=>Y.value,(e,t)=>{let n=U.value?H():V();n&&typeof e==`number`&&Number.isFinite(e)&&e>0&&(n.updateOptions({fontSize:e}),N.value||X(!0))},{flush:`post`,immediate:!1});let yi=0,bi=t(()=>[T.value,U.value,m.stream,m.loading,He.value,z.value,m.node.language,m.node.raw,m.node.code,m.node.loading],e=>M(null,[e],function*([e,t,n,r,i,a]){let o=++yi;if(!e||!a||Jr()||Qt||!1===n&&!1!==r||!B&&(yield function(){return M(this,null,function*(){if(typeof window>`u`||L||He.value||G.value)return;if(Tt)return Tt;let e=M(null,null,function*(){try{let e=yield Re();if(L)return;if(!e)return void(G.value=!0);let t=e.useMonaco,n=e.detectLanguage;if(typeof n==`function`&&(Et=n),typeof t!=`function`)return;Mt=Oi();let r=t(Mt);B=r.createEditor||B,ht=r.createDiffEditor||ht,gt=r.updateCode||gt,_t=r.updateDiff||_t,vt=r.getEditor||vt,V=r.getEditorView||V,H=r.getDiffEditorView||H,yt=r.cleanupEditor||yt,bt=r.safeClean||r.cleanupEditor||bt,xt=r.refreshDiffPresentation||xt,Dt=r.setTheme||Dt,St=r.whenVisualReady||null,He.value=!0}catch{if(L)return;G.value=!0}}).finally(()=>{Tt===e&&(Tt=null)});return Tt=e,e})}(),o!==yi||!1===m.stream&&!1!==m.loading||Zr()||!z.value||!B||G.value||P.value||Fi()||L||T.value!==e)||Zr())return;let s=vi(e);if(s){try{yield s}catch{I.value=!1,K.value=!1,Ii()}I.value&&K.value&&bi()}}));function xi(e){return!!e&&typeof e==`object`&&`light`in e&&`dark`in e}function Si(e){return typeof e==`string`?e:e&&typeof e==`object`&&`name`in e?String(e.name):null}function Ci(e,t){if(e===t)return!0;let n=Si(e),r=Si(t);return!!n&&n===r}function wi(){let e=function(){if(m.theme!==void 0){let e=m.theme;return xi(e)?m.isDark?e.dark:e.light:e}return m.isDark?m.darkTheme:m.lightTheme}(),t=W.value?.theme,n=e??t;if(typeof n==`object`&&n)return n;let r=Array.isArray(m.themes)?m.themes:[];if(!r.length||n==null)return n;let i=Si(n),a=r.map(e=>Si(e)).filter(e=>!!e);if(!i||a.includes(i))return n;let o=Si(t);return t!=null&&o&&a.includes(o)?t:r[0]}function Ti(){return M(this,arguments,function*(e={}){ki();let t=()=>{U.value&&Bt(),w(()=>{Cr(),$()})};if(e.appearanceOnly)return void t();let n=wi();if(n)try{yield Dt(n),t()}catch{}else t()})}function Ei(e,t){if(typeof t!=`string`)return;let n=ve(t),r=ye(n),i=[`plain`,`objectivec`,`objectivecpp`].includes(n)?r:n;for(let t of[i,r])t&&!e.includes(t)&&e.push(t)}t(Wt,(t,n)=>M(null,null,function*(){if(t===n||q.value||Qt||(ti(),!B||!T.value)||!P.value||!1===m.stream&&!1!==m.loading||!z.value)return;let r=Ct;if(r){try{yield r}catch{}if(L||!T.value)return}if(Gt.value!==t||!P.value||!I.value)try{I.value=!1,K.value=!1,P.value=!1,F.value=!1,kr(),Ar(),bt(),yield e(),yield vi(T.value)}catch{I.value=!1,K.value=!1,Ii()}}));let Di=v(()=>{let e=[],t=W.value?.languages;if(Array.isArray(t))for(let n of t)Ei(e,n);return Yr()&&Ei(e,m.node.language),Ei(e,D.value),Ei(e,O.value),Ei(e,`plaintext`),e});function Oi(){let e=j(A(j(A({wordWrap:`on`,wrappingIndent:`same`,themes:m.themes},W.value||{}),{languages:Di.value,stream:!1,fontSize:yn.value,lineHeight:xn.value,theme:wi(),disableFileHeader:!0}),U.value?{diffAppearance:Ht.value}:{}),{onThemeChange(){Cr()}}),t=function(){let e=W.value?.fontFamily;return typeof e==`string`&&e.trim()?e.trim():U.value?function(){if(typeof window>`u`)return;let e=E.value?.querySelector(`pre.code-pre-fallback`);if(e)return window.getComputedStyle(e).fontFamily.trim()||void 0}():void 0}();if(t&&(e.fontFamily??=t),U.value){e.wordWrap=tn.value?`on`:`off`;let t=typeof e.unsafeCSS==`string`?`${e.unsafeCSS}\n`:``,n=function(){let e=rn.value;if(!1===e||typeof e==`object`&&!1===e.enabled)return null;let t=typeof e==`object`?e:ue,n=Math.max(0,Math.floor(t.contextLineCount??2));return{contextLineCount:n,collapsedContextThreshold:n+Math.max(1,Math.floor(t.minimumLineCount??4))-1}}();e.unsafeCSS=`${t}\npre { column-gap: 0; }\npre > code { column-gap: 0; padding-block: 0; }\n[data-separator="line-info"] { margin-top: 0; }\n`,n?(e.parseDiffOptions=j(A({},e.parseDiffOptions),{context:n.contextLineCount}),e.collapsedContextThreshold=n.collapsedContextThreshold,e.expandUnchanged=!1,e.hunkSeparators=`line-info`,e.unsafeCSS+=`[data-separator="line-info"][data-separator-last] { height: 28px; } +import{A as e,G as t,I as n,J as r,N as i,O as a,P as o,S as s,T as c,U as l,_ as u,b as d,c as f,d as p,f as m,g as h,h as g,j as _,lt as ee,m as v,n as te,nt as y,ot as b,q as ne,rt as re,st as ie,u as ae,ut as x,v as S,w as C,y as oe,z as se}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{t as ce}from"./preload-helper-zJ_50EbN.js";import{$ as le,A as ue,D as de,J as fe,M as pe,O as me,Q as he,T as ge,X as _e,Y as ve,Z as ye,_ as be,a as xe,d as Se,et as Ce,g as we,h as Te,j as w,n as Ee,nt as De,o as Oe,p as ke,s as Ae,tt as je,v as Me,x as Ne}from"./index-2zSxMdPb.js";var Pe=(e,t,n)=>new Promise((r,i)=>{var a=e=>{try{s(n.next(e))}catch(e){i(e)}},o=e=>{try{s(n.throw(e))}catch(e){i(e)}},s=e=>e.done?r(e.value):Promise.resolve(e.value).then(a,o);s((n=n.apply(e,t)).next())}),Fe=!1,Ie=null,Le=null,T=null;function Re(){return Pe(this,null,function*(){if(T)return T;T=Pe(null,null,function*(){if(!Le)try{if(Le=function(e){let t=e;if(typeof t?.useMonaco==`function`)return t;let n=e?.default;return typeof n?.useMonaco==`function`?n:null}(yield ce(()=>import(`./dist-BlrGujvY.js`),__vite__mapDeps([0,1]))),!Le)return null}catch{return null}try{return yield function(e){return Pe(this,null,function*(){if(!Fe)return Ie||(Ie=Pe(null,null,function*(){let t=globalThis==null?void 0:globalThis.MonacoEnvironment;t&&(typeof t.getWorker==`function`||typeof t.getWorkerUrl==`function`)||typeof e?.preloadMonacoWorkers!=`function`||(yield e.preloadMonacoWorkers()),Fe=!0}).finally(()=>{Ie=null}),Ie)})}(Le),je(),Le}catch{return null}});try{return yield T}finally{T=null}})}var E=Object.defineProperty,ze=Object.defineProperties,D=Object.getOwnPropertyDescriptors,Be=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,Ve=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?E(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,A=(e,t)=>{for(var n in t||={})O.call(t,n)&&k(e,n,t[n]);if(Be)for(var n of Be(t))Ve.call(t,n)&&k(e,n,t[n]);return e},j=(e,t)=>ze(e,D(t)),M=(e,t,n)=>new Promise((r,i)=>{var a=e=>{try{s(n.next(e))}catch(e){i(e)}},o=e=>{try{s(n.throw(e))}catch(e){i(e)}},s=e=>e.done?r(e.value):Promise.resolve(e.value).then(a,o);s((n=n.apply(e,t)).next())}),N={key:0,class:`code-block-header flex justify-between items-center border-b px-[var(--ms-inset-panel-x)] py-[var(--ms-inset-panel-y)] border-[var(--code-border)] bg-[var(--code-header-bg)] text-[var(--code-fg)]`},P={class:`flex items-center gap-0.5`},F=[`aria-label`],I={class:`code-diff-stat removed`},He={class:`code-diff-stat added`},L=[`aria-label`],Ue={key:0,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},We={key:1,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},Ge=[`aria-pressed`],Ke={key:3,class:`relative`},qe=[`aria-expanded`],Je=[`disabled`],Ye=[`disabled`],R=[`disabled`],Xe={key:0,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},Ze={key:1,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},Qe={class:`code-loading-placeholder`},$e={class:`sr-only`,"aria-live":`polite`,role:`status`},et=C({__name:`CodeBlockShell`,props:{showHeader:{type:Boolean,default:!0},showCollapseButton:{type:Boolean,default:!0},showFontSizeButtons:{type:Boolean,default:!0},enableFontSizeControl:{type:Boolean,default:!0},showCopyButton:{type:Boolean,default:!0},showExpandButton:{type:Boolean,default:!0},showPreviewButton:{type:Boolean,default:!0},showTooltips:{type:Boolean,default:!0},isDark:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},stream:{type:Boolean,default:!1},isCollapsed:{type:Boolean,default:!1},isExpanded:{type:Boolean,default:!1},copyText:{type:Boolean,default:!1},isPreviewable:{type:Boolean,default:!1},codeFontSize:{},codeFontMin:{},codeFontMax:{},defaultCodeFontSize:{},fontBaselineReady:{type:Boolean,default:!1},diffStats:{},diffStatsAriaLabel:{}},emits:[`toggleCollapse`,`decreaseFont`,`resetFont`,`increaseFont`,`copy`,`toggleExpand`,`preview`],setup(e,{emit:t}){let i=e,a=t,o=y(!1),c=y(null),l=y(null);function m(){Ee(!0),o.value=!o.value,o.value&&document.addEventListener(`click`,_,{once:!0,capture:!0})}function h(){Ee(!0),o.value=!1}function _(e){let t=e.target;c.value?.contains(t)||l.value?.contains(t)?document.addEventListener(`click`,_,{once:!0,capture:!0}):h()}let re=v(()=>i.showFontSizeButtons&&i.enableFontSizeControl||i.showExpandButton||i.isPreviewable&&i.showPreviewButton),{t:C}=xe(),oe=v(()=>!1!==i.showTooltips);function ce(e,t){oe.value&&Te(e.currentTarget,t,`top`,!1,void 0,i.isDark)}function le(){oe.value&&Ee()}function ue(e){ce(e,i.copyText?C(`common.copied`)||`Copied`:C(`common.copy`)||`Copy`)}let de=v(()=>!!Number.isFinite(i.codeFontSize)&&(i.codeFontSize??0)<=(i.codeFontMin??0)),fe=v(()=>!i.fontBaselineReady||i.codeFontSize===i.defaultCodeFontSize),pe=v(()=>!!Number.isFinite(i.codeFontSize)&&(i.codeFontSize??0)>=(i.codeFontMax??100));return(t,_)=>(n(),S(p,null,[i.showHeader?(n(),S(`div`,N,[se(t.$slots,`header-left`),se(t.$slots,`header-right`,{},()=>[g(`div`,P,[e.diffStats?(n(),S(`div`,{key:0,class:`code-diff-stats`,"aria-label":e.diffStatsAriaLabel},[g(`span`,I,`-`+x(e.diffStats.removed),1),g(`span`,He,`+`+x(e.diffStats.added),1)],8,F)):u(``,!0),i.showCopyButton?(n(),S(`button`,{key:1,type:`button`,class:`code-action-btn inline-flex items-center justify-center p-[var(--ms-action-btn-padding)] rounded leading-none shrink-0 cursor-pointer text-[var(--code-action-fg)] hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] active:scale-[0.96] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,"aria-label":e.copyText?b(C)(`common.copied`)||`Copied`:b(C)(`common.copy`)||`Copy`,onClick:_[0]||=e=>a(`copy`),onMouseenter:_[1]||=e=>ue(e),onFocus:_[2]||=e=>ue(e),onMouseleave:le,onBlur:le},[e.copyText?(n(),S(`svg`,We,[..._[14]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 6L9 17l-5-5`},null,-1)]])):(n(),S(`svg`,Ue,[..._[13]||=[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}),g(`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`})],-1)]]))],40,L)):u(``,!0),i.showCollapseButton?(n(),S(`button`,{key:2,type:`button`,class:`code-action-btn inline-flex items-center justify-center p-[var(--ms-action-btn-padding)] rounded leading-none shrink-0 cursor-pointer text-[var(--code-action-fg)] hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] active:scale-[0.96] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,"aria-pressed":e.isCollapsed,onClick:_[3]||=e=>a(`toggleCollapse`),onMouseenter:_[4]||=t=>ce(t,e.isCollapsed?b(C)(`common.expand`)||`Expand`:b(C)(`common.collapse`)||`Collapse`),onFocus:_[5]||=t=>ce(t,e.isCollapsed?b(C)(`common.expand`)||`Expand`:b(C)(`common.collapse`)||`Collapse`),onMouseleave:le,onBlur:le},[(n(),S(`svg`,{style:ee({rotate:e.isCollapsed?`0deg`:`90deg`}),xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[..._[15]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m9 18l6-6l-6-6`},null,-1)]],4))],40,Ge)):u(``,!0),re.value?(n(),S(`div`,Ke,[g(`button`,{ref_key:`moreBtnRef`,ref:l,type:`button`,class:`code-action-btn inline-flex items-center justify-center p-[var(--ms-action-btn-padding)] rounded leading-none shrink-0 cursor-pointer text-[var(--code-action-fg)] hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] active:scale-[0.96] transition-colors`,"aria-expanded":o.value,"aria-haspopup":`true`,onClick:ae(m,[`stop`]),onMouseenter:_[6]||=e=>ce(e,b(C)(`common.more`)||`More`),onFocus:_[7]||=e=>ce(e,b(C)(`common.more`)||`More`),onMouseleave:le,onBlur:le},[..._[16]||=[d(``,1)]],40,qe),s(te,{name:`code-menu`},{default:ne(()=>[o.value?(n(),S(`div`,{key:0,ref_key:`moreMenuRef`,ref:c,class:`code-more-menu min-w-[10rem] p-1 bg-[hsl(var(--ms-popover))] text-[hsl(var(--ms-popover-foreground))] border border-[var(--code-border)] shadow-[var(--ms-shadow-popover)]`,role:`menu`},[i.showFontSizeButtons&&i.enableFontSizeControl?(n(),S(p,{key:0},[g(`button`,{type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,disabled:de.value,onClick:_[8]||=e=>{b(Ee)(!0),a(`decreaseFont`)}},[_[17]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14`})],-1),g(`span`,null,x(b(C)(`common.fontSmaller`)||`Font size −`),1)],8,Je),g(`button`,{type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,disabled:fe.value,onClick:_[9]||=e=>{b(Ee)(!0),a(`resetFont`)}},[_[18]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`path`,{d:`M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8`}),g(`path`,{d:`M3 3v5h5`})])],-1),g(`span`,null,x(b(C)(`common.fontReset`)||`Font size reset`),1)],8,Ye),g(`button`,{type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,disabled:pe.value,onClick:_[10]||=e=>{b(Ee)(!0),a(`increaseFont`)}},[_[19]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-7-7v14`})],-1),g(`span`,null,x(b(C)(`common.fontLarger`)||`Font size +`),1)],8,R)],64)):u(``,!0),i.showExpandButton?(n(),S(`button`,{key:1,type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] transition-colors`,onClick:_[11]||=e=>{h(),a(`toggleExpand`)}},[e.isExpanded?(n(),S(`svg`,Xe,[..._[20]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m14 10l7-7m-1 7h-6V4M3 21l7-7m-6 0h6v6`},null,-1)]])):(n(),S(`svg`,Ze,[..._[21]||=[g(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 3h6v6m0-6l-7 7M3 21l7-7m-1 7H3v-6`},null,-1)]])),g(`span`,null,x(e.isExpanded?b(C)(`common.collapse`)||`Collapse`:b(C)(`common.expand`)||`Expand`),1)])):u(``,!0),e.isPreviewable&&i.showPreviewButton?(n(),S(`button`,{key:2,type:`button`,role:`menuitem`,class:`flex items-center gap-2 w-full py-1.5 px-2 rounded text-xs text-[var(--code-action-fg)] cursor-pointer whitespace-nowrap hover:bg-[var(--code-action-hover-bg)] hover:text-[var(--code-action-hover-fg)] transition-colors`,onClick:_[12]||=e=>{h(),a(`preview`)}},[_[22]||=g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,class:`action-icon`},[g(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[g(`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0`}),g(`circle`,{cx:`12`,cy:`12`,r:`3`})])],-1),g(`span`,null,x(b(C)(`common.preview`)||`Preview`),1)])):u(``,!0)],512)):u(``,!0)]),_:1})])):u(``,!0)])])])):u(``,!0),r(g(`div`,{class:ie([`code-block-shell-content`,{"code-block-shell-content--collapsed":e.isCollapsed}])},[se(t.$slots,`default`)],2),[[f,!!e.stream||!e.loading]]),r(g(`div`,Qe,[se(t.$slots,`loading`,{},()=>[_[23]||=g(`div`,{class:`loading-skeleton`},[g(`div`,{class:`skeleton-line`}),g(`div`,{class:`skeleton-line`}),g(`div`,{class:`skeleton-line short`})],-1)])],512),[[f,!e.stream&&e.loading]]),g(`span`,$e,x(e.copyText?b(C)(`common.copied`)||`Copied`:``),1)],64))}}),tt={class:`html-preview-frame__header`},nt={class:`html-preview-frame__title`},rt={class:`html-preview-frame__label`},z=[`sandbox`,`srcdoc`],it=be(C({__name:`HtmlPreviewFrame`,props:{code:{},isDark:{type:Boolean},htmlPreviewAllowScripts:{type:Boolean},htmlPreviewSandbox:{},onClose:{type:Function},title:{}},setup(e){let t=e,{t:r}=xe(),a=v(()=>{let e=t.code||``,n=e.trim().toLowerCase();return n.startsWith(`\n\n \n \n \n \n \n \n ${e}\n \n`}),s=v(()=>{return e=t.htmlPreviewSandbox,n=t.htmlPreviewAllowScripts,typeof e==`string`?e:e===void 0&&!0===n?`allow-scripts`:``;var e,n});function c(e){var n;e.key!==`Escape`&&e.key!==`Esc`||(n=t.onClose)==null||n.call(t)}return i(()=>{typeof window<`u`&&window.addEventListener(`keydown`,c)}),o(()=>{typeof window<`u`&&window.removeEventListener(`keydown`,c)}),(e,i)=>(n(),h(m,{to:`body`},[g(`div`,{class:ie([`markstream-vue`,{dark:t.isDark}])},[g(`div`,{class:`html-preview-frame__backdrop`,onClick:i[2]||=e=>t.onClose?.call(t)},[g(`div`,{class:`html-preview-frame`,onClick:i[1]||=ae(()=>{},[`stop`])},[g(`div`,tt,[g(`div`,nt,[i[3]||=g(`span`,{class:`html-preview-frame__dot`},null,-1),g(`span`,rt,x(t.title||b(r)(`common.preview`)||`Preview`),1)]),g(`button`,{type:`button`,class:`html-preview-frame__close`,onClick:i[0]||=e=>t.onClose?.call(t)},` × `)]),g(`iframe`,{class:`html-preview-frame__iframe`,sandbox:s.value,referrerpolicy:`no-referrer`,srcdoc:a.value},null,8,z)])])],2)]))}}),[[`__scopeId`,`data-v-24e66176`]]),at=[`data-markstream-enhanced`,`data-markstream-enhancement-state`,`data-markstream-code-block-state`,`data-markstream-pending`,`data-markstream-viewport-pending`],ot={class:`code-header-main`},st=[`innerHTML`],ct={class:`code-header-copy`},lt={class:`code-header-title`},ut={key:0,class:`code-header-caption`},dt=[`data-markstream-host-hidden`],ft=`__markstreamMonacoPassiveTouchState__`,pt=be(C({__name:`CodeBlockNode`,props:{node:{},isDark:{type:Boolean,default:!1},loading:{type:Boolean,default:!0},stream:{type:Boolean,default:!0},theme:{},darkTheme:{default:`vitesse-dark`},lightTheme:{default:`vitesse-light`},isShowPreview:{type:Boolean,default:!0},monacoOptions:{},enableFontSizeControl:{type:Boolean,default:!0},minWidth:{default:void 0},maxWidth:{default:void 0},themes:{},showPreviewButton:{type:Boolean,default:!0},showCollapseButton:{type:Boolean,default:!0},showFontSizeButtons:{type:Boolean,default:!0},showTooltips:{type:Boolean},htmlPreviewAllowScripts:{type:Boolean},htmlPreviewSandbox:{},customId:{},showHeader:{type:Boolean,default:!0},showCopyButton:{type:Boolean,default:!0},showExpandButton:{type:Boolean,default:!0},estimatedHeightPx:{},estimatedContentHeightPx:{},estimatedDiffInline:{type:Boolean}},emits:[`previewCode`,`copy`],setup(d,{emit:p}){let m=d,te=p,ae=l(),C=a(Ce,null),ce=a(`markstreamHostScrollManaged`,null),be=a(ge,void 0),Te=v(()=>Se(m,ae)),je=new Set;function Pe(e){return M(this,null,function*(){if(typeof window>`u`)return yield e();let t=window.Element?.prototype,n=t?.addEventListener;if(!t||!n)return yield e();let r=function(){let e=window,t=e[ft];if(t)return t;let n={depth:0,original:null};return e[ft]=n,n}(),i=null;try{r.depth===0&&(r.original=n,t.addEventListener=function(e,t,i){let a=r.original??n;return e===`touchstart`&&function(e,t){if(!e)return!1;let n=e;return!(typeof n.closest!=`function`||!n.closest(`.monaco-editor, .monaco-diff-editor`)||t&&typeof t==`object`&&`passive`in t)}(this,i)?a.call(this,e,t,function(e){return e==null?{passive:!0}:typeof e==`boolean`?{capture:e,passive:!0}:typeof e==`object`?`passive`in e?e:j(A({},e),{passive:!0}):{passive:!0}}(i)):a.call(this,e,t,i)}),r.depth++;let e=!1;i=()=>{e||(e=!0,je.delete(i),r.depth=Math.max(0,r.depth-1),r.depth===0&&r.original&&t.addEventListener!==r.original&&(t.addEventListener=r.original,r.original=null))},je.add(i)}catch{return yield e()}try{return yield e()}finally{i?.()}})}let Fe=c(),Ie=v(()=>{let e=Fe?.vnode.props;return!(!e||!e.onPreviewCode&&!e[`onPreview-code`])}),{t:Le}=xe(),T=y(null),E=y(null),ze=y(!1),D=y(Xr(m.node.language,m.node.code,Jr())),Be=v(()=>ye(D.value)),O=v(()=>Be.value===`plaintext`?`text`:Be.value),Ve=v(()=>Be.value===`plaintext`),k=y(!1),N=y(!1),P=y(!1),F=y(!1),I=y(!1),He=y(!1),L=!1,Ue=null,We=null,Ge=null,Ke=0,qe=!1,Je=``,Ye=y(null),R=y(null),Xe=null,Ze=0,Qe=!1,$e=ke(),tt=Ne(),nt=Me(),rt=re(null),z=y(typeof window>`u`||!nt.value),pt=c()?.vnode.el?.textContent??``,mt=y(!(typeof window<`u`&&String(m.node.code??``).length>0&&pt.includes(String(m.node.code))));i(()=>{mt.value=!0}),typeof window<`u`&&t([()=>E.value,nt],([e,t],n,r)=>{var i;if((i=rt.value)==null||i.destroy(),rt.value=null,!t||z.value)return void(z.value=!0);if(!e)return void(z.value=!1);let a=!0,o=$e(e,{rootMargin:tt?.value.heavyBlockMargin??tt?.value.rootMargin??`0px`,allowIdle:!1});rt.value=o,z.value=z.value||o.isVisible.value,o.whenVisible.then(()=>{a&&rt.value===o&&(z.value=!0)}).catch(()=>{}),r(()=>{a=!1,o.destroy(),rt.value===o&&(rt.value=null)})},{immediate:!0}),_(()=>{var e;L=!0;for(let e of Array.from(je))e();(function(){let e=Je;C&&e&&(Je=``,C.markSettled(e))})(),(e=rt.value)==null||e.destroy(),rt.value=null});let B=null,ht=null,gt=()=>{},_t=()=>{},vt=()=>null,V=()=>({getModel:()=>({getLineCount:()=>1}),getOption:()=>14,updateOptions:()=>{}}),H=()=>({getModel:()=>({getLineCount:()=>1}),getOption:()=>14,updateOptions:()=>{}}),yt=()=>{},bt=()=>{},xt=()=>{},St=null,Ct=null,wt=null,Tt=null,Et=()=>String(m.node.language??`plaintext`),Dt=()=>M(null,null,function*(){}),Ot=!1,kt=null,At=[],jt=[],Mt=null,U=v(()=>me(m.node)),Nt=y({removed:0,added:0}),Pt=v(()=>`-${Nt.value.removed} +${Nt.value.added}`),Ft=Object.freeze(j(A({},ue),{enabled:!1,revealLineCount:0}));function It(e){var t;return Ae(e,((t=E.value)?.getBoundingClientRect)?.call(t).width||E.value?.clientWidth||(typeof window>`u`?0:window.innerWidth))}function Lt(e,t){return{original:Rt(e),updated:Rt(t)}}function Rt(e){return String(e??``).replace(/\r\n$|\n$|\r$/,``)}function zt(e){return String(e?.message??e).includes(`no diff result available`)}function Bt(){if(!Vr())try{let e=xt();e&&typeof e.catch==`function`&&e.catch(e=>{zt(e)})}catch(e){zt(e)}}let W=v(()=>{var e,t;let n=m.monacoOptions?A({},m.monacoOptions):{};if(!U.value)return A({lineDecorationsWidth:0,lineNumbersMinChars:2,glyphMargin:!1},n);let r=n.diffHideUnchangedRegions===void 0?A({},ue):we(n.diffHideUnchangedRegions),i=n.hideUnchangedRegions===void 0?void 0:we(n.hideUnchangedRegions),a=!1!==m.stream&&!1!==m.loading,o=a?A({},Ft):r,s=a?A({},Ft):i,c=function(e){return e.diffWordWrap===void 0?`off`:e.diffWordWrap}(n),l=A({},n.experimental??{}),u=n.diffUnchangedRegionStyle??`line-info`,d=function(e){return A(j(A({},e.scrollbar&&typeof e.scrollbar==`object`?e.scrollbar:{}),{verticalScrollbarSize:0,horizontalScrollbarSize:0}),It(e)?{horizontal:`hidden`}:{})}(n);return j(A(j(A(A({},{maxComputationTime:0,diffAlgorithm:`legacy`,ignoreTrimWhitespace:!1,renderIndicators:!0,diffUpdateThrottleMs:120,renderLineHighlight:`none`,renderLineHighlightOnlyWhenFocus:!0,selectionHighlight:!1,occurrencesHighlight:`off`,matchBrackets:`never`,lineDecorationsWidth:4,lineNumbersMinChars:2,glyphMargin:!1,padding:{top:0,bottom:0},minimap:{enabled:!1},renderOverviewRuler:!1,overviewRulerBorder:!1,hideCursorInOverviewRuler:!0,scrollBeyondLastLine:!1,diffWordWrap:c,renderSideBySide:(e=n.renderSideBySide)==null||e,diffHideUnchangedRegions:o,useInlineViewWhenSpaceIsLimited:(t=n.useInlineViewWhenSpaceIsLimited)!=null&&t,diffLineStyle:`background`,diffAppearance:`auto`,diffUnchangedRegionStyle:u,diffHunkActionsOnHover:!1,experimental:l}),n),{experimental:l}),s===void 0?{}:{hideUnchangedRegions:s}),{diffHideUnchangedRegions:o,diffWordWrap:c,scrollbar:d})}),Vt=v(()=>(m.theme===void 0?Ci(m.darkTheme,m.lightTheme):!xi(m.theme))?function(e){if(e&&typeof e==`object`&&e.colors?.[`editor.background`]){let t=yr(e.colors[`editor.background`]);if(t!=null)return t<128}let t=(Si(e)??``).toLowerCase();return t?[`dark`,`night`,`moon`,`black`,`dracula`,`mocha`,`frappe`,`macchiato`,`palenight`,`ocean`,`poimandres`,`monokai`,`laserwave`,`tokyo`,`slack-dark`,`rose-pine`,`github-dark`,`material-theme`,`one-dark`,`catppuccin-mocha`,`catppuccin-frappe`,`catppuccin-macchiato`].some(e=>t.includes(e))&&![`light`,`latte`,`dawn`,`lotus`].some(e=>t.includes(e)):!!m.isDark}(wi()):!!m.isDark),Ht=v(()=>{if(!U.value)return Vt.value?`dark`:`light`;let e=W.value?.diffAppearance;return e===`light`||e===`dark`?e:Vt.value?`dark`:`light`}),Ut=v(()=>U.value?Ht.value===`dark`:Vt.value),Wt=v(()=>U.value?`diff`:`single`),Gt=y(Wt.value),G=y(!1),K=y(!1),Kt=y(!1),q=y(!1),qt=y(null),Jt=y(0),Yt=y(0),Xt=y(!1),Zt=null,Qt=!1,$t=null,en=!1,tn=v(()=>{if(U.value){let e=W.value?.diffWordWrap;if(e===`inherit`){let e=m.monacoOptions?.wordWrap;return e==null||String(e)!==`off`}return e===`on`}let e=m.monacoOptions?.wordWrap;return e==null||String(e)!==`off`}),nn=v(()=>!!U.value&&It(W.value??{})),rn=v(()=>{let e=m.monacoOptions?.diffHideUnchangedRegions;return e===void 0?A({},ue):we(e)});function an(e){return!0===ce?.value||!!e&&(!!e.closest(`[data-markstream-virtual-timeline="1"], .markstream-virtual-timeline`)||!!e.closest(`.vue-recycle-scroller, [data-virtualizer], [data-virtual-scroll-root]`))}let on=v(()=>an(E.value)),sn=v(()=>!(G.value||!q.value&&K.value)),cn=v(()=>sn.value),ln=v(()=>sn.value&&!Kt.value),un=v(()=>!G.value&&!q.value&&sn.value),dn=v(()=>K.value&&!G.value?`ready`:q.value?`fallback`:`pending`),fn=y(!1),pn=v(()=>Rt(m.node.code)),mn=v(()=>U.value?!0===m.node.diff?m.node:j(A({},m.node),{diff:!0}):pn.value===m.node.code?m.node:j(A({},m.node),{code:pn.value})),J=y(typeof m.monacoOptions?.fontSize==`number`?m.monacoOptions.fontSize:NaN),Y=y(J.value),hn=y(null),gn=y(null),_n=y(null),vn=v(()=>{let e=J.value,t=Y.value;return typeof e==`number`&&Number.isFinite(e)&&e>0&&typeof t==`number`&&Number.isFinite(t)&&t>0}),yn=v(()=>{let e=hn.value;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e;let t=m.monacoOptions?.fontSize;if(typeof t==`number`&&Number.isFinite(t)&&t>0)return t;let n=Y.value;return typeof n==`number`&&Number.isFinite(n)&&n>0?n:12}),bn=v(()=>{let e=gn.value;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e;let t=m.monacoOptions?.lineHeight;return typeof t==`number`&&Number.isFinite(t)&&t>0?t:yn.value===12?18:Math.max(12,Math.round(1.5*yn.value))}),xn=v(()=>bn.value),Sn=v(()=>{let e=m.monacoOptions?.tabSize;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:4}),Cn=v(()=>{let e=m.monacoOptions?.padding,t=U.value?0:8;return{top:typeof e?.top==`number`&&Number.isFinite(e.top)&&e.top>=0?e.top:t,bottom:typeof e?.bottom==`number`&&Number.isFinite(e.bottom)&&e.bottom>=0?e.bottom:t}}),wn=v(()=>{let e=m.estimatedContentHeightPx;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:null});function Tn(e){if(e==null)return null;let t=Math.ceil(e);return!Number.isFinite(t)||t<=0?null:Math.min(t,Math.ceil(Kr()))}function En(){return!U.value&&!1!==m.stream&&!1!==m.loading}let Dn=v(()=>U.value?null:wn.value==null||En()?Math.ceil((e=>{let t=String(e??``);return t?Math.max(1,t.split(/\r\n|\n|\r/).length):1})(pn.value)*xn.value+1):null),On=v(()=>{if(U.value)return null;let e=wn.value;return e==null||En()?Tn(Dn.value):Tn(e)}),kn=v(()=>{let e=m.estimatedHeightPx;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:null}),An=y(null);function jn(){let e=An.value;return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.round(e):null}let Mn=v(()=>jn()??(!U.value&&Xt.value?null:sn.value||!K.value?On.value:null));function Nn(e){let t=e?`hsl(152 42% 60%)`:`var(--diff-added-fg)`,n=e?`hsl(0 58% 58%)`:`var(--diff-removed-fg)`,r=e?`hsl(152 42% 60% / 0.18)`:`var(--diff-added-bg)`,i=e?`hsl(0 58% 58% / 0.18)`:`var(--diff-removed-bg)`,a=e?`hsl(152 42% 60% / 0.28)`:`var(--diff-added-inline-bg)`,o=e?`hsl(0 58% 58% / 0.28)`:`var(--diff-removed-inline-bg)`,s=`linear-gradient(90deg, ${t} 0 4px, transparent 4px 100%)`,c=`linear-gradient(90deg, ${n} 0 4px, transparent 4px 100%)`,l=e?`hsl(0 0% 7% / 0.98)`:`hsl(var(--ms-muted) / 0.45)`,u=`var(--markstream-code-layout-character-width, 1ch)`,d=`calc(${u} + ${u})`,f=`calc(${u} + ${u} + ${u} + ${u} + ${u} + 2px)`,p=`calc(${f} + ${u})`;return{"--markstream-diff-line-number-bg":l,"--markstream-diff-added-fg":t,"--markstream-diff-removed-fg":n,"--markstream-diff-added-line":r,"--markstream-diff-removed-line":i,"--markstream-diff-added-line-fill":r,"--markstream-diff-removed-line-fill":i,"--markstream-diff-added-gutter":s,"--markstream-diff-removed-gutter":c,"--markstream-diff-added-inline":a,"--markstream-diff-removed-inline":o,"--stream-monaco-added-fg":t,"--stream-monaco-removed-fg":n,"--stream-monaco-added-line":r,"--stream-monaco-removed-line":i,"--stream-monaco-added-line-fill":r,"--stream-monaco-removed-line-fill":i,"--stream-monaco-added-gutter":s,"--stream-monaco-removed-gutter":c,"--stream-monaco-added-inline":a,"--stream-monaco-removed-inline":o,"--stream-monaco-gutter-marker-width":`4px`,"--stream-monaco-gutter-gap":`1ch`,"--stream-monaco-line-number-left":`0px`,"--stream-monaco-line-number-width":d,"--stream-monaco-line-number-padding-left":d,"--stream-monaco-line-number-padding-right":u,"--stream-monaco-line-number-separator-width":`2px`,"--stream-monaco-layout-character-width":u,"--stream-monaco-line-number-box-width":f,"--stream-monaco-line-number-gap-to-code":u,"--stream-monaco-line-number-bg":l,"--stream-monaco-diff-code-gap":u,"--stream-monaco-diff-code-padding":`0px`,"--stream-monaco-original-margin-width":p,"--stream-monaco-original-scrollable-left":p,"--stream-monaco-original-scrollable-width":`calc(100% - ${p})`,"--stream-monaco-modified-margin-width":p,"--stream-monaco-modified-scrollable-left":p,"--stream-monaco-modified-scrollable-width":`calc(100% - ${p})`}}let Pn=v(()=>{let e=m.monacoOptions?.fontFamily,t=Tn(wn.value),n=Tn(Dn.value),r=En(),i=A(A({fontSize:`${yn.value}px`,lineHeight:`${xn.value}px`,tabSize:Sn.value,boxSizing:`border-box`,maxHeight:`${Kr()}px`,overflow:`auto`,paddingTop:`${Cn.value.top}px`,paddingBottom:`${Cn.value.bottom}px`},U.value||t==null||r?U.value||n==null?{}:{minHeight:`${n}px`}:{height:`${t}px`,minHeight:`${t}px`}),typeof e==`string`&&e.trim()?{"--markstream-code-font-family":e.trim()}:{});return i[`--markstream-pre-line-number-top`]=`${Cn.value.top}px`,i[`--markstream-code-padding-left`]=`calc(2ch + 2ch + 1ch + 2px + 1ch)`,i[`--markstream-pre-line-number-left`]=`0px`,i[`--markstream-pre-line-number-width`]=`2ch`,i[`--markstream-pre-line-number-padding-left`]=`2ch`,i[`--markstream-pre-line-number-padding-right`]=`1ch`,i[`--markstream-pre-line-number-separator-width`]=`2px`,U.value&&(i[`--markstream-pre-diff-line-height`]=`${xn.value}px`,i[`--markstream-pre-diff-pane-bottom-padding`]=(nn.value,`0px`),Object.assign(i,Nn(Ut.value))),i}),Fn=v(()=>Mn.value!=null&&(!K.value||jn()!=null)),In=v(()=>{let e=Mn.value;if(e==null)return null;if(U.value)return Math.ceil(e);let t=kn.value,n=wn.value;if(t==null||n==null)return Math.ceil(e);let r=Math.max(0,Math.ceil(t)-Math.ceil(n));return Math.ceil(e+r)}),Ln=v(()=>{if(U.value&&sn.value)return{};let e=Mn.value;return Fn.value&&e!=null?{minHeight:`${e}px`}:{}});function Rn(){var e,t,n,r;let i=E.value?.querySelector(`pre.code-pre-fallback`),a=H(),o=i?.scrollTop??0;(t=(e=(a?.getOriginalEditor)?.call(a))?.setScrollTop)==null||t.call(e,o),(r=(n=(a?.getModifiedEditor)?.call(a))?.setScrollTop)==null||r.call(n,o)}function zn(){return M(this,null,function*(){return U.value?(Sr()??Bn(),Z(!0),Rn(),Q(),Kt.value=!0,yield e(),Z(!0),yield Un(),Z(!0),!(St&&!(yield St())||(br(),Bn(),Z(!0),K.value=!0,yield e(),Bn(),Z(!0),br(),Q(),$(),0))):!(St&&!(yield St())||(K.value=!0,yield e(),X(!1),Z(),0))})}function Bn(){let e=T.value;return e&&Lr(e)?(Q(),X({preferModelDiffHeight:!0}),Mr(),Number.parseFloat(e.style.height||``)||null):Sr()}function Vn(){if(!U.value||!I.value||!K.value||sn.value)return!1;let e=T.value;return!!e&&vr(e)}function Hn(e,t=!1,n={}){let r=Math.ceil(e),i=jn();if(i==null)return r;let a=!0===n.allowBelowEstimatedFloor||Vn();return r>=i||a?((t||a)&&I.value&&(An.value=null),r):i}function Un(){return new Promise(e=>{let t=!1,n=null,r=null,i=()=>{t||(t=!0,r!=null&&globalThis.clearTimeout(r),n!=null&&pe(n),e())};r=globalThis.setTimeout(i,50),n=w(i)})}function Wn(){try{let e=T.value;if(!e)return null;let t=e.querySelector(`.view-lines .view-line`);if(t){let e=Math.ceil(t.getBoundingClientRect().height);if(e>0)return e}}catch{}return null}function Gn(){var e;try{let t=U.value?((e=H())?.getModifiedEditor)?.call(e)??H():V(),n=vt()?.EditorOption?.fontInfo;if(t&&n!=null){let e=t.getOption?.call(t,n)?.fontSize;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e}}catch{}try{let e=T.value;if(e){let t=e.querySelector(`.view-lines .view-line`);if(t)try{if(typeof window<`u`&&typeof window.getComputedStyle==`function`){let e=window.getComputedStyle(t).fontSize,n=e&&e.match(/^(\d+(?:\.\d+)?)/);if(n)return Number.parseFloat(n[1])}}catch{}}}catch{}return null}function Kn(e){try{let t=vt()?.EditorOption?.lineHeight;if(t!=null){let n=(e?.getOption)?.call(e,t);if(typeof n==`number`&&n>0)return n}}catch{}let t=Wn();if(t&&t>0)return t;let n=Number.isFinite(Y.value)&&Y.value>0?Y.value:14;return Math.max(12,Math.round(1.35*n))}function qn(e){try{let t=vt()?.EditorOption?.padding;if(t!=null){let n=(e?.getOption)?.call(e,t);if(typeof n?.top==`number`||typeof n?.bottom==`number`)return(typeof n?.top==`number`&&Number.isFinite(n.top)?Math.max(0,n.top):0)+(typeof n?.bottom==`number`&&Number.isFinite(n.bottom)?Math.max(0,n.bottom):0)}}catch{}let t=W.value?.padding;return typeof t?.top==`number`||typeof t?.bottom==`number`?(typeof t?.top==`number`&&Number.isFinite(t.top)?Math.max(0,t.top):0)+(typeof t?.bottom==`number`&&Number.isFinite(t.bottom)?Math.max(0,t.bottom):0):U.value?24:0}function Jn(e,t){return typeof e!=`number`||typeof t!=`number`||e<1||t=i&&o>=i&&n[a]===r[o];)a--,o--;let s=Math.max(0,a-i+1),c=Math.max(0,o-i+1);if(s===0||c===0)return{removed:s,added:c};if((s+1)*(c+1)<=15e5){let e=c+1,t=new Uint32Array(e),a=new Uint32Array(e);for(let e=s-1;e>=0;e--){a[c]=0;for(let o=c-1;o>=0;o--)a[o]=n[i+e]===r[i+o]?t[o+1]+1:Math.max(t[o],a[o+1]);let o=t;t=a,a=o}let o=t[0];return{removed:s-o,added:c-o}}return{removed:s,added:c}}function Zn(e){if(!function(){return!(!U.value||!nn.value)&&(m.node.originalCode!=null||m.node.updatedCode!=null?Xn(String(m.node.originalCode??``),String(m.node.updatedCode??``)).removed>0:String(m.node.code??``).split(/\r\n|\n|\r/).some(e=>function(e){return e.startsWith(`-`)&&!e.startsWith(`---`)}(e)))}())return!0;let t=e?.querySelector(`.stream-monaco-fallback-inline-delete-line`);if((t?.textContent)?.trim()&&(t.hasAttribute(`data-stream-monaco-colorize-signature`)||t.querySelector(`[class*="mtk"]`)))return!0;let n=e?.querySelector([`.editor.modified .view-zones .view-lines.line-delete`,`.editor.modified .view-lines .view-line.line-delete`,`.editor.original .view-zones .view-lines.line-delete`,`.editor.original .view-lines .view-line.line-delete`].join(`,`));if(!n||!n.matches(`.view-line`)&&!n.querySelector(`.view-line`))return!1;let r=n.getBoundingClientRect(),i=e?.getBoundingClientRect();return i?.width===0&&i.height===0||r.width>0&&r.height>0}function Qn(e,t){if(!e)return!1;let n=t.added<=0||!!e.querySelector([`.line-insert`,`.gutter-insert`,`.stream-monaco-fallback-line-insert`,`.stream-monaco-fallback-gutter-insert`,`.stream-monaco-fallback-line-number-insert`].join(`,`)),r=t.removed<=0||!!e.querySelector([`.line-delete`,`.gutter-delete`,`.inline-deleted-margin-view-zone`,`.stream-monaco-fallback-line-delete`,`.stream-monaco-fallback-gutter-delete`,`.stream-monaco-fallback-line-number-delete`,`.stream-monaco-fallback-inline-delete-line`,`.stream-monaco-fallback-inline-delete-margin`].join(`,`));return n&&r}function $n(e,t){let n=e?.querySelector(t);return n instanceof HTMLElement?typeof window>`u`||typeof window.getComputedStyle!=`function`?n:window.getComputedStyle(n).display===`none`?null:n:null}function er(e,t){return $n(e,t)!==null}function tr(e,t){if(!e)return!1;let n=t.added<=0||[`.gutter-insert`,`.stream-monaco-fallback-gutter-insert`].some(t=>er(e,t)),r=t.removed<=0||[`.gutter-delete`,`.inline-deleted-margin-view-zone`,`.stream-monaco-fallback-gutter-delete`,`.stream-monaco-fallback-inline-delete-margin`].some(t=>er(e,t));return n&&r}function nr(e){let t=Array.from(e?.querySelectorAll(`.monaco-diff-editor .margin-view-overlays .line-numbers`)??[]);return!!t.length&&t.some(e=>{if(!e.textContent?.trim())return!1;if(typeof window>`u`||typeof window.getComputedStyle!=`function`)return!0;let t=window.getComputedStyle(e);if(t.display===`none`)return!1;let n=e.getBoundingClientRect();if(n.width<=0&&n.height<=0)return!0;let r=Number.parseFloat(t.width||``),i=Number.parseFloat(t.paddingLeft||``),a=Number.parseFloat(t.paddingRight||``);return Math.max(n.width,Number.isFinite(r)?r:0)>=8&&Number.isFinite(i)&&i>=1&&Number.isFinite(a)&&a>=1})}function rr(e){let t=$n(e,`.monaco-diff-editor .view-lines .view-line`);if(!t)return!1;if(!cr())return!0;let n=$n(e,`.monaco-diff-editor .margin-view-overlays .line-numbers`);if(!n)return!1;if(typeof window>`u`||typeof window.getComputedStyle!=`function`)return!0;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect();if(r.width<=0&&r.height<=0||i.width<=0&&i.height<=0)return!0;let a=r.left-i.right;return a>=0&&a<=32}function ir(e,t){return!nn.value||!(t||e?.querySelector([`.line-insert`,`.line-delete`,`.gutter-insert`,`.gutter-delete`,`.stream-monaco-line-number-insert`,`.stream-monaco-line-number-delete`,`.stream-monaco-line-insert-fill`,`.stream-monaco-line-delete-fill`,`.stream-monaco-fallback-line-insert`,`.stream-monaco-fallback-line-delete`,`.stream-monaco-fallback-inline-delete-line`].join(`,`)))||!!(e?.classList.contains(`stream-monaco-diff-inline-native-ready`)&&!e.classList.contains(`stream-monaco-diff-native-stale`))}function ar(e,t,n,r){let i=e?.querySelector(`.monaco-diff-editor .editor.${t}`);if(!i)return!1;let a=Array.from(i.querySelectorAll(`.margin-view-overlays .line-numbers.${n}`));if(!a.length)return!0;let o=Array.from(i.querySelectorAll(`.lines-content > .view-lines:not(.line-delete) > .view-line`));return!!o.length&&a.every(e=>{let t=e.getBoundingClientRect(),n=null;for(let e of o){let r=e.getBoundingClientRect(),i=Math.abs(r.top-t.top);(!n||i1.25||n.node.classList.contains(r)})}function or(e,t){if(!e)return!1;let n=t.added<=0||ar(e,`modified`,`stream-monaco-line-number-insert`,`stream-monaco-line-insert-fill`),r=t.removed<=0||(nn.value?!!e.classList.contains(`stream-monaco-diff-inline-native-ready`):ar(e,`original`,`stream-monaco-line-number-delete`,`stream-monaco-line-delete-fill`));return n&&r}function sr(e){if(Ve.value)return!0;if(!e)return!1;let t=Array.from(e.querySelectorAll(`.monaco-diff-editor .view-lines .view-line, .monaco-editor .view-lines .view-line`)).filter(e=>{if(!e.textContent?.trim())return!1;let t=e.getBoundingClientRect();return t.width>0||t.height>0});if(!t.length)return!1;let n=t.filter(e=>{var t;return t=e.textContent??``,/['"`{}()[\]:;=<>.,]|\/\/|\/\*|\b(?:async|await|class|const|enum|export|for|function|if|import|interface|let|return|switch|type|var|while)\b/.test(t.replace(/\u00A0/g,` `).trim())});return!n.length||n.filter(e=>Array.from(e.querySelectorAll(`span`)).filter(e=>e.textContent?.trim()).some(e=>String(e.className||``).split(/\s+/).some(e=>/^mtk\d+$/.test(e)&&e!==`mtk1`))).length>0}function cr(){return W.value?.lineNumbers!==`off`}function lr(){U.value?Nt.value=Xn(String(m.node.originalCode??``),String(m.node.updatedCode??``)):Nt.value={removed:0,added:0}}function ur(){if(U.value)try{let e=H(),t=(e?.getLineChanges)?.call(e);if(!Array.isArray(t))return void lr();let n=0,r=0;for(let e of t)n+=Jn(e.originalStartLineNumber,e.originalEndLineNumber),r+=Jn(e.modifiedStartLineNumber,e.modifiedEndLineNumber);Nt.value={removed:n,added:r}}catch{lr()}else Nt.value={removed:0,added:0}}function dr(){if(Number.isFinite(Y.value)&&Y.value>0&&Number.isFinite(J.value))return Y.value;let e=Gn();return typeof m.monacoOptions?.fontSize==`number`?(J.value=m.monacoOptions.fontSize,Y.value=m.monacoOptions.fontSize,Y.value):e&&e>0?(J.value=e,Y.value=e,e):(J.value=12,Y.value=12,12)}function fr(){let e=dr();Y.value=Math.min(36,e+1)}function pr(){let e=dr();Y.value=Math.max(10,e-1)}function mr(){dr(),Number.isFinite(J.value)&&(Y.value=J.value)}function hr(){var e,t,n,r,i;try{let a=U.value?H():null,o=U.value?a:V();if(!o)return null;if(a?.getOriginalEditor&&a?.getModifiedEditor){let i=a.getOriginalEditor?.call(a),o=a.getModifiedEditor?.call(a);(e=i?.layout)==null||e.call(i),(t=o?.layout)==null||t.call(o);let s=(i?.getContentHeight)?.call(i)||0,c=(o?.getContentHeight)?.call(o)||0,l=Math.max(s,c);if(l>0)return Math.ceil(l);let u=((n=(i?.getModel)?.call(i))?.getLineCount)?.call(n)||1,d=((r=(o?.getModel)?.call(o))?.getLineCount)?.call(r)||1,f=Math.max(u,d),p=Math.max(Kn(i),Kn(o)),m=Math.max(qn(i),qn(o));return Math.ceil(f*p+m+0)}if(o?.getContentHeight){(i=o?.layout)==null||i.call(o);let e=o.getContentHeight();if(e>0)return U.value||(Xt.value=!0),Math.ceil(e)}let s=(o?.getModel)?.call(o),c=1;s&&typeof s.getLineCount==`function`&&(c=s.getLineCount());let l=Kn(o);return Math.ceil(c*(l+1.5)+0)}catch{return null}}function gr(){var e;if(U.value)return!1;try{let t=((e=V())?.getContentHeight)?.call(e),n=typeof t==`number`&&Number.isFinite(t)&&t>0;return n&&(Xt.value=!0),n}catch{return!1}}function _r(e){if(typeof window>`u`)return null;try{let t=e.getBoundingClientRect(),n=window.getComputedStyle(e);if(n.display===`none`||n.visibility===`hidden`)return null;let r=e.querySelector(`diffs-container`);if(r instanceof HTMLElement){let e=r.getBoundingClientRect();if(e.height>0&&e.bottom>t.top)return Math.ceil(e.bottom-t.top)}let i=[`.editor.original .view-lines .view-line`,`.editor.modified .view-lines .view-line`,`.editor.original .view-zones > div`,`.editor.modified .view-zones > div`,`.editor.original .margin-view-zones > div`,`.editor.modified .margin-view-zones > div`,`.editor.original .diff-hidden-lines`,`.editor.modified .diff-hidden-lines`,`.stream-monaco-diff-unchanged-bridge`],a=0;for(let n of Array.from(e.querySelectorAll(i.join(`,`)))){if(!(n instanceof HTMLElement)||(n.parentElement?.classList.contains(`view-zones`)||n.parentElement?.classList.contains(`margin-view-zones`))&&!(n.textContent?.trim()||n.matches(`.line-delete, .line-insert, .cdr`)||n.querySelector(`.diff-hidden-lines, .stream-monaco-diff-unchanged-bridge, .line-delete, .line-insert, .cdr`)))continue;let e=window.getComputedStyle(n);if(e.display===`none`||e.visibility===`hidden`||Number.parseFloat(e.opacity||`1`)<=.01)continue;let r=n.getBoundingClientRect();r.height<=0||r.bottom<=t.top||(a=Math.max(a,r.bottom-t.top))}return a>0?Math.ceil(a):null}catch{return null}}function vr(e){if(typeof window>`u`)return!1;let t=e.getBoundingClientRect();if(t.width<=0||t.height<=0)return!1;let n=e.querySelectorAll(`.editor.modified .diff-hidden-lines, .editor.original .diff-hidden-lines, .stream-monaco-diff-unchanged-bridge`);for(let e of Array.from(n)){if(!(e instanceof HTMLElement))continue;let n=window.getComputedStyle(e);if(n.display===`none`||n.visibility===`hidden`||Number.parseFloat(n.opacity||`1`)<=.01)continue;let r=e.getBoundingClientRect();if(!(r.width<=0||r.height<=0||r.bottom<=t.top||r.top>=t.bottom))return!0}return!1}function yr(e){let t=String(e??``).trim(),n=t.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i)?.[1];if(n){let e=n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n;return .2126*Number.parseInt(e.slice(0,2),16)+.7152*Number.parseInt(e.slice(2,4),16)+.0722*Number.parseInt(e.slice(4,6),16)}let r=t.match(/\d+(?:\.\d+)?/g);if(!r||r.length<3)return null;let[i,a,o]=r.slice(0,3).map(Number);return .2126*i+.7152*a+.0722*o}function br(){var e;if(xr())return;let t=Gn();t&&t>0&&(hn.value=t,Y.value=t,J.value=t);try{let t=Kn(U.value?((e=H())?.getModifiedEditor)?.call(e)??H():V());t&&t>0&&(gn.value=t)}catch{}try{let e=Wn();e&&e>0&&(gn.value=e)}catch{}}function xr(){return U.value&&cn.value}function Sr(){if(!U.value||!sn.value)return null;let e=T.value,t=E.value?.querySelector(`pre.code-pre-fallback`);if(!e||!t)return null;let n=Math.ceil(t.getBoundingClientRect().height);return!Number.isFinite(n)||n<=0?null:(e.style.height=`${n}px`,e.style.minHeight=`${n}px`,e.style.maxHeight=`${Math.ceil(Kr())}px`,e.style.overflow=`hidden`,n)}function Cr(){let e=T.value,t=E.value;if(!e||!t)return;let n=e,r=e.querySelector(`.monaco-editor`)||e,i=r.querySelector(`.monaco-editor-background`)||r,a=r.querySelector(`.view-lines`)||r,o=null,s=null,c=null;try{typeof window<`u`&&typeof window.getComputedStyle==`function`&&(o=window.getComputedStyle(r),s=i===r?o:window.getComputedStyle(i),c=a===r?o:window.getComputedStyle(a))}catch{o=null,s=null,c=null}let l=String(o?.getPropertyValue(`--vscode-editor-foreground`)??``).trim(),u=String(o?.getPropertyValue(`--vscode-editor-background`)??``).trim(),d=String(o?.getPropertyValue(`--vscode-editor-selectionBackground`)??o?.getPropertyValue(`--vscode-editor-hoverHighlightBackground`)??``).trim(),f=l||String(c?.color??o?.color??``).trim(),p=u||String(s?.backgroundColor??o?.backgroundColor??``).trim(),m=function(){var e;try{let t=U.value?((e=H())?.getModifiedEditor)?.call(e)??H():V(),n=vt()?.EditorOption?.fontInfo;if(t&&n!=null){let e=t.getOption?.call(t,n)?.typicalHalfwidthCharacterWidth;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return e}}catch{}return null}();if(m!=null&&(_n.value=m),U.value){let e=(e,r)=>{r?(t.style.setProperty(e,r),n.style.setProperty(e,r)):(t.style.removeProperty(e),n.style.removeProperty(e))};for(let[n,r]of Object.entries(Nn(t.classList.contains(`is-dark`))))e(n,r);f?(t.style.setProperty(`--markstream-diff-editor-fg`,f),n.style.setProperty(`--vscode-editor-foreground`,f),n.style.setProperty(`--stream-monaco-editor-fg`,f)):(t.style.removeProperty(`--markstream-diff-editor-fg`),n.style.removeProperty(`--vscode-editor-foreground`),n.style.removeProperty(`--stream-monaco-editor-fg`)),p?(t.style.setProperty(`--markstream-diff-editor-bg`,p),t.style.setProperty(`--markstream-diff-panel-bg`,p),t.style.setProperty(`--markstream-diff-panel-bg-soft`,p),t.style.setProperty(`--markstream-diff-panel-bg-strong`,p),n.style.setProperty(`--vscode-editor-background`,p),n.style.setProperty(`--stream-monaco-editor-bg`,p),n.style.setProperty(`--stream-monaco-fixed-editor-bg`,p),n.style.setProperty(`--stream-monaco-panel-bg`,p),n.style.setProperty(`--stream-monaco-panel-bg-soft`,p),n.style.setProperty(`--stream-monaco-panel-bg-strong`,p),n.style.backgroundColor=p):(t.style.removeProperty(`--markstream-diff-editor-bg`),t.style.removeProperty(`--markstream-diff-panel-bg`),t.style.removeProperty(`--markstream-diff-panel-bg-soft`),t.style.removeProperty(`--markstream-diff-panel-bg-strong`),n.style.removeProperty(`--vscode-editor-background`),n.style.removeProperty(`--stream-monaco-editor-bg`),n.style.removeProperty(`--stream-monaco-fixed-editor-bg`),n.style.removeProperty(`--stream-monaco-panel-bg`),n.style.removeProperty(`--stream-monaco-panel-bg-soft`),n.style.removeProperty(`--stream-monaco-panel-bg-strong`),n.style.backgroundColor=``),d?n.style.setProperty(`--vscode-editor-selectionBackground`,d):n.style.removeProperty(`--vscode-editor-selectionBackground`);return}if(function(e,t,n){if(!Ve.value)return!1;let r=yr(e),i=yr(t);return n?r!=null&&r>170||i!=null&&i<110:r!=null&&r<85||i!=null&&i>190}(p,f,t.classList.contains(`is-dark`)))return n.style.removeProperty(`--vscode-editor-foreground`),n.style.removeProperty(`--vscode-editor-background`),void n.style.removeProperty(`--vscode-editor-selectionBackground`);f&&n.style.setProperty(`--vscode-editor-foreground`,f),p&&n.style.setProperty(`--vscode-editor-background`,p),d&&n.style.setProperty(`--vscode-editor-selectionBackground`,d)}let wr=0,Tr=0,Er=/auto|scroll|overlay/i;function Dr(e,t,n){if(typeof window>`u`||U.value||function(e){return on.value||an(e)}(e))return;let r=Math.ceil(n)-Math.ceil(t);if(Math.abs(r)<=1)return;let i=function(e){if(typeof window>`u`)return null;let t=e?.ownerDocument??document,n=t.scrollingElement||t.documentElement||t.body,r=e?.parentElement??null;for(;r&&r!==t.body&&r!==n;){let e=window.getComputedStyle(r),t=(e.overflowY||``).toLowerCase(),n=(e.overflow||``).toLowerCase();if(Er.test(t)||Er.test(n))return r;r=r.parentElement}return n}(e);if(!i)return;let a=e.ownerDocument??document,o=i===a.body||i===a.documentElement||i===a.scrollingElement,s=o?0:i.getBoundingClientRect().top;e.getBoundingClientRect().top-s>=0||(o&&typeof window.scrollBy==`function`?window.scrollBy(0,r):i.scrollTop+=r)}function Or(){try{let e=T.value;if(!e)return;let t=e.getBoundingClientRect().height,n=hr();if(n!=null&&n>0){let r=Hn(n,!0,{allowBelowEstimatedFloor:!U.value&&I.value&&gr()}),i=jn();e.style.minHeight=i==null?`0px`:`${i}px`,e.style.height=`${r}px`,e.style.maxHeight=`none`,e.style.overflow=`visible`,Dr(e,t,r);return}let r=jn();r!=null&&(e.style.minHeight=`${r}px`,e.style.height=`${r}px`,e.style.maxHeight=`none`,e.style.overflow=`visible`,Dr(e,t,r))}catch{}}function kr(){for(var e,t;At.length>0;)try{(t=(e=At.pop())?.dispose)==null||t.call(e)}catch{}Ue!=null&&(pe(Ue),Ue=null),We!=null&&(pe(We),We=null),Ge!=null&&(pe(Ge),Ge=null),Ke=0,qe=!1}function Ar(){for(var e;jt.length>0;)try{(e=jt.pop())==null||e()}catch{}}function X(e=!1){N.value||(k.value?Or():function(e={}){try{let t=T.value;if(!t)return;let n=t.getBoundingClientRect().height,r=Kr(),i=Math.ceil(t.getBoundingClientRect?.call(t).height||0),a=Number.parseFloat(t.style.height||``),o=i>0?i:Number.isFinite(a)&&a>0?Math.ceil(a):0,s=U.value?function(){var e,t;if(Vr())return null;try{let n=H(),r=(n?.getOriginalEditor)?.call(n),i=(n?.getModifiedEditor)?.call(n);if(!r||!i)return null;let a=((e=r.getModel?.call(r))?.getLineCount)?.call(e)||1,o=((t=i.getModel?.call(i))?.getLineCount)?.call(t)||1,s=Math.max(a,o),c=Math.max(Kn(r),Kn(i)),l=Math.max(qn(r),qn(i)),u=Math.max(r.getContentHeight?.call(r)??0,i.getContentHeight?.call(i)??0);return Math.ceil(Math.max(u,s*c+l+0))}catch{return null}}():null,c=U.value&&vr(t),l=U.value&&Lr(t),u=U.value&&t.classList.contains(`stream-monaco-diff-native-stale`),d=c&&I.value&&K.value&&!sn.value;if(c||(R.value=null),Ze>0&&(Ze--,Ye.value!=null))return void Dr(t,n,Nr(t,Ye.value,r,{allowBelowEstimatedFloor:d,preserveScrollableOverflow:Fr(t)}));if(U.value&&!l&&!c&&sn.value){let e=Sr();if(e!=null){let i=Nr(t,e,r,{allowBelowEstimatedFloor:!0});Z(!0),Dr(t,n,i);return}}let f=U.value&&!0===e.preferModelDiffHeight,p=U.value?_r(t):null,h=p,g=!U.value&&I.value&&gr(),_=U.value&&!1!==m.loading&&(h!=null||s!=null&&i>0&&s0&&s0&&s0?o:null:s;else v=hr();if(U.value&&!1===m.loading&&u&&!d&&v!=null&&s!=null&&(v=Math.min(v,s)),U.value&&v!=null&&o>0&&(!1!==m.loading||!1===m.loading&&u&&!d||!0===e.holdCurrentDiffHeight&&!d)&&(v=Math.max(v,o)),v!=null&&v>0){let e=c&&R.value!=null,a=c&&i>0&&i=r-1,o=Nr(t,e?Math.max(R.value,v):a?i:v,r,{clearEstimatedFloor:!0,allowBelowEstimatedFloor:d||g||_,preserveScrollableOverflow:Fr(t)});c&&o0?s:0);if(te>0){let e=c&&R.value!=null,a=c&&i>0&&i=r-1,o=Nr(t,e?Math.max(R.value,te):a?i:te,r,{allowBelowEstimatedFloor:d});c&&o0?Dr(t,n,Nr(t,b,r,{allowBelowEstimatedFloor:d})):U.value||Dr(t,n,Nr(t,r,r))}catch{}}(typeof e==`object`?e:{}))}function jr(){wr=0,Tr=0}function Z(e=!1){if(N.value)return;let t=T.value;if(!t)return;let n=U.value?H():V();if(n&&typeof n.layout==`function`)try{let r=t.getBoundingClientRect?.call(t),i=Math.ceil((r?.width??0)||t.clientWidth||0),a=Math.ceil((r?.height??0)||t.clientHeight||Number.parseFloat(t.style.height||``)||0);if(i>0&&a>0){if(!e&&i===wr&&a===Tr)return;wr=i,Tr=a,n.layout({width:i,height:a})}else jr(),n.layout()}catch{}}function Q(){if(!U.value)return void Ar();let e=T.value;if(!e)return void Ar();let t=e.querySelector(`.monaco-diff-editor`);if(!t||t.classList.contains(`side-by-side`))return void Ar();let n=Array.from(t.querySelectorAll(`.editor.original .diff-hidden-lines`)),r=Array.from(t.querySelectorAll(`.editor.modified .diff-hidden-lines`)),i=Math.min(n.length,r.length);for(let e=0;e div:first-child`),a=t.querySelector(`.center`);if(!n||!i||!a||a.querySelector(`.markstream-inline-fold-proxy`))continue;let o=document.createElement(`button`);o.type=`button`,o.className=`markstream-inline-fold-proxy`,o.dataset.markstreamInlineFoldProxy=`true`;let s=n.getAttribute(`title`)||`Show Unchanged Region`;o.title=s,o.setAttribute(`aria-label`,s);let c=e=>{e.preventDefault(),e.stopPropagation()},l=e=>{e.preventDefault(),e.stopPropagation(),n.click(),w(()=>$())},u=e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),e.stopPropagation(),n.click(),w(()=>$()))};o.addEventListener(`mousedown`,c),o.addEventListener(`click`,l),o.addEventListener(`keydown`,u),a.appendChild(o),jt.push(()=>{o.removeEventListener(`mousedown`,c),o.removeEventListener(`click`,l),o.removeEventListener(`keydown`,u),o.parentElement===a&&a.removeChild(o)})}}function $(e=!1){if(L||Ue!=null)return;let t=()=>{L||(Q(),X(e),Z())};Ue=w(()=>{Ue=null,t(),We=w(()=>{We=null,t()})}),Mr()}function Mr(e=!1){if(!U.value||L||!e&&!1===m.loading||(qe||=e,Ke=Math.max(Ke,e?18:6),Ge!=null))return;let t=()=>{if(Ge=null,!U.value||L||Ke<=0||!qe&&!1===m.loading)return Ke=0,void(qe=!1);Ke--,Q(),X({preferModelDiffHeight:!0,holdCurrentDiffHeight:qe}),Z(),Ke>0?Ge=w(t):qe=!1};Ge=w(t)}function Nr(e,t,n,r={}){let i=U.value&&!1!==m.loading?_r(e):null,a=i!=null&&i>t+1?i:t,o=Math.min(a,n),s=!0===r.allowBelowEstimatedFloor||Vn(),c=Hn(o,!0===r.clearEstimatedFloor,{allowBelowEstimatedFloor:s}),l=jn();if(e.style.minHeight=l==null||s?`0px`:`${Math.min(l,Math.ceil(n))}px`,e.style.height=`${c}px`,e.style.maxHeight=`${Math.ceil(n)}px`,U.value)e.style.overflow=`hidden`;else{let i=!0===r.preserveScrollableOverflow||t>n+1;e.style.overflow=i?`auto`:`hidden`}return c}function Pr(e,t=0){let n=Math.ceil(e.getBoundingClientRect?.call(e).height||0),r=Math.max(t,e.clientHeight||0,n);return r>0&&e.scrollHeight>r+1}function Fr(e){return!U.value&&(Qe||Pr(e,Ye.value??0))}function Ir(e){var t,n,r,i;if(!U.value)return;let a=k.value||!vr(e)||e.getBoundingClientRect().height>=Kr()-1;if(Xe===a)return;Xe=a;let o=j(A({},m.monacoOptions?.scrollbar??{}),{handleMouseWheel:a}),s=H();try{(n=(t=(s?.getOriginalEditor)?.call(s))?.updateOptions)==null||n.call(t,{scrollbar:o}),(i=(r=(s?.getModifiedEditor)?.call(s))?.updateOptions)==null||i.call(r,{scrollbar:o})}catch{}}function Lr(e=T.value){return!!Vr(e)||!!e?.querySelector(`.monaco-diff-editor .view-lines .view-line`)}function Rr(e=T.value){return!!Vr(e)||!!e?.querySelector(`.monaco-editor .view-lines .view-line`)}function zr(){var e;if(Vr())return!0;let t=((e=V())?.getModel)?.call(e);return typeof t?.getValue==`function`&&t.getValue()===pn.value}function Br(e=T.value){return!!Vr(e)||!!e?.classList.contains(`stream-monaco-diff-root`)&&!(nn.value&&!e.classList.contains(`stream-monaco-diff-inline`))}function Vr(e=T.value){return!!e?.querySelector(`diffs-container`)}function Hr(e){return!1!==m.loading||K.value||e.classList.contains(`stream-monaco-diff-native-stale`)||vr(e)}function Ur(){let e=H();return typeof e?.getOriginalEditor==`function`||typeof e?.getModifiedEditor==`function`||typeof e?.getLineChanges==`function`}function Wr(){return M(this,arguments,function*(t={}){if(!U.value)return!0;if(Vr())return yield e(),yield Un(),Vr();let n=!1!==t.requireHighlight,r=0,i=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``)),a=Xn(i.original,i.updated),o=a.added>0||a.removed>0,s=()=>{let e=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``));e.original===i.original&&e.updated===i.updated||(i=e,a=Xn(i.original,i.updated),o=a.added>0||a.removed>0)};for(let t=0;t<30;t++){if(L)return!1;s();let t=T.value,i=H(),c=cr(),l=!1;try{let e=(i?.getLineChanges)?.call(i);l=Array.isArray(e)&&(!o||e.length>0)}catch{l=!1}let u=!!t?.querySelector(`.monaco-diff-editor`),d=Lr(t),f=!o||Qn(t,a),p=!o||tr(t,a),m=!c||nr(t);if(u&&d&&l&&f&&p&&m&&Zn(t)){try{Bt(),Q(),ur(),$()}catch{}if(yield e(),yield Un(),L)return!1;let t=T.value,i=!cr()||nr(t),s=!o||Qn(t,a),c=!o||tr(t,a),l=ir(t,o),u=or(t,a),d=!n||sr(t),f=Br(t)&&i&&rr(t)&&s&&c&&l&&u&&d,p=Br(t)&&i&&rr(t)&&s&&c&&Zn(t)&&d;if(f||p){if(r++,r>=2)return!0}else r=0}yield e(),yield Un()}return L||(Bt(),Q(),ur(),$(),s()),!1})}function Gr(t,n,r){return M(this,null,function*(){try{yield _t(t,n,r);return}catch(e){if(!zt(e))throw e}if(yield e(),yield Un(),!L&&U.value)try{yield _t(t,n,r)}catch(e){if(!zt(e))throw e}})}function Kr(){let e=m.monacoOptions?.MAX_HEIGHT??500;if(typeof e==`number`)return e;let t=String(e).match(/^(\d+(?:\.\d+)?)/);return t?Number.parseFloat(t[1]):500}let qr=v(()=>m.isShowPreview&&(D.value===`html`||D.value===`svg`));function Jr(){return typeof m.node.loading==`boolean`?m.node.loading:!0===m.loading}function Yr(){if(!Jr())return!0;let e=String(m.node.raw??``),t=e.split(/\r\n|\n|\r/,1)[0]?.trimStart()??``;return!/^(?:`{3,}|~{3,})/.test(t)||/\r\n|\n|\r/.test(e)}function Xr(e,t,n){return!n||Yr()&&String(t??``)?ve(String(e??``)):`plain`}function Zr(){return Jr()}let Qr=null,$r=!1,ei=0;function ti(){Qr=null,ei++}function ni(){return M(this,arguments,function*(t=ei){if(!$r){$r=!0;try{for(;Qr&&!L&&!U.value&&t===ei;){let t=Qr;Qr=null;try{yield Promise.resolve(gt(t.code,t.language)),yield e(),L||U.value||(X(!1),Z())}catch{}}}finally{$r=!1,!Qr||L||U.value||ni()}}})}function ri(e,t){Qr={code:e,language:t},ni(ei)}t(()=>[m.node.language,m.node.code,m.node.raw,m.node.loading,m.loading],([e,t,n,r,i])=>{D.value=Xr(e,t,typeof r==`boolean`?r:!0===i)}),t(()=>[m.node.originalCode,m.node.updatedCode,U.value],()=>{R.value=null,lr(),w(()=>ur())},{immediate:!0});let ii=0;t(()=>[m.node.originalCode,m.node.updatedCode,O.value,U.value,m.stream],t=>M(null,[t],function*([,,,t,n]){let r=++ii;if(!t||Jr()||!1===n&&!P.value)return;if(!1!==n&&B&&!P.value&&T.value)try{yield vi(T.value)}catch{}let i=wt;if(i&&!F.value){try{yield i}catch{}if(L||!U.value||r!==ii)return}if(r!==ii)return;let a=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``)),o=!1===m.loading;o&&ki();try{if(yield Gr(a.original,a.updated,O.value),L||!U.value||r!==ii)return;yield e(),Z(!0),Q(),X(!1===m.loading||{preferModelDiffHeight:!0}),Z(!0),$(!0)}catch{return}if(o){if(L||!U.value)return;Bt(),Q(),ur(),$(),Mr(!0)}k.value&&w(()=>Or())})),t(()=>m.node.code,e=>M(null,null,function*(){if(Jr()||!1===m.stream||(D.value||=ve(Et(e)),U.value))return;let t=wt;if(t&&!F.value){try{yield t}catch{}if(L||U.value)return}if(B&&!P.value&&T.value)try{yield vi(T.value)}catch{}ri(Rt(m.node.code),O.value),k.value&&w(()=>Or())}));let ai=v(()=>{let e=D.value;return e?_e[e]||e.charAt(0).toUpperCase()+e.slice(1):_e[``]||`Plain Text`}),oi=v(()=>de(String(m.node.raw??``),ai.value,U.value)),si=v(()=>oi.value.title),ci=v(()=>oi.value.caption),li=v(()=>(fe.value,function(e,t){if(t===void 0)return De(e);if(t){let n=t(e);if(n!=null&&n!==``)return n}return he(ve(e))||le()}(D.value||``,be))),ui=v(()=>{let e={};e[`--markstream-code-layout-character-width`]=_n.value==null?`1ch`:`${_n.value}px`;let t=e=>{if(e!=null)return typeof e==`number`?`${e}px`:String(e)},n=t(m.minWidth),r=t(m.maxWidth);if(n&&(e.minWidth=n),r&&(e.maxWidth=r),Fn.value&&!U.value&&!N.value){let t=In.value;t!=null&&(e.minHeight=`${t}px`)}return U.value||(e.color=`var(--vscode-editor-foreground, var(--markstream-code-fallback-fg))`,e.backgroundColor=`var(--vscode-editor-background, var(--markstream-code-fallback-bg))`,e.borderColor=`var(--markstream-code-border-color)`),e}),di=v(()=>!1!==m.showTooltips);function fi(){return M(this,null,function*(){try{typeof navigator<`u`&&navigator.clipboard&&typeof navigator.clipboard.writeText==`function`&&(yield navigator.clipboard.writeText(m.node.code)),ze.value=!0,te(`copy`,m.node.code),setTimeout(()=>{ze.value=!1},1e3)}catch(e){console.error(`复制失败:`,e)}})}function pi(){k.value=!k.value;let e=U.value?H():V(),t=T.value;e&&t&&(k.value?(gi(!0),t.style.maxHeight=`none`,t.style.overflow=`visible`,X(!0)):(gi(!1),t.style.overflow=U.value?`hidden`:`auto`,X(!0)),Ir(t))}function mi(){var t;if(N.value=!N.value,N.value){if(Qe=!1,T.value){let e=Math.ceil((t=T.value).getBoundingClientRect?.call(t).height||0);Qe=!U.value&&(Pr(T.value,e)||T.value.style.overflow===`auto`||T.value.style.overflowY===`auto`),e>0&&(Ye.value=e)}gi(!1)}else k.value&&gi(!0),T.value&&Ye.value!=null&&(T.value.style.height=`${Ye.value}px`),Ze=2,e(()=>{N.value||L||(X(!0),Z(!0))})}function hi(){if(!qr.value)return;let e=D.value;if(Ie.value){let t=e===`html`?`text/html`:`image/svg+xml`,n=e===`html`?Le(`artifacts.htmlPreviewTitle`)||`HTML Preview`:Le(`artifacts.svgPreviewTitle`)||`SVG Preview`;te(`previewCode`,{node:m.node,artifactType:t,artifactTitle:n,id:`temp-${e}-${Date.now()}`});return}e===`html`&&(fn.value=!fn.value)}function gi(e){var t,n;try{if(U.value){let n=H();(t=n?.updateOptions)==null||t.call(n,{automaticLayout:e})}else{let t=V();(n=t?.updateOptions)==null||n.call(t,{automaticLayout:e})}}catch{}}function _i(t){return M(this,null,function*(){if(!B||L)return;let n=Wt.value;if(en=!1,q.value=!1,qt.value=null,F.value=!1,K.value=!1,Kt.value=!1,Xe=null,hn.value=null,gn.value=null,_n.value=null,function(){let e=function(){let e=T.value?.parentElement;return e instanceof HTMLElement?e:null}();e&&(e.style.removeProperty(`--stream-monaco-line-number-left`),e.style.removeProperty(`--stream-monaco-line-number-width`),e.style.removeProperty(`--stream-monaco-line-number-gap-to-code`),e.style.removeProperty(`--stream-monaco-original-line-number-gap-to-code`),e.style.removeProperty(`--stream-monaco-modified-line-number-gap-to-code`),e.style.removeProperty(`--stream-monaco-original-scrollable-left`),e.style.removeProperty(`--stream-monaco-modified-scrollable-left`))}(),jr(),function(){Xt.value=!1;let e=On.value;An.value=I.value||e==null?null:e}(),kr(),Ar(),function(e){e.replaceChildren()}(t),ki(),L)return;let r=M(null,null,function*(){if(n===`diff`){(function(){if(Ot||typeof window>`u`)return;Ot=!0;let e=e=>{zt(`reason`in e?e.reason:e.error??e.message)&&(e.preventDefault(),e.stopImmediatePropagation())};window.addEventListener(`error`,e,!0),window.addEventListener(`unhandledrejection`,e,!0),kt=()=>{window.removeEventListener(`error`,e,!0),window.removeEventListener(`unhandledrejection`,e,!0),Ot=!1,kt=null}})(),bt();let e=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``));ht?yield Pe(()=>ht(t,e.original,e.updated,O.value)):yield Pe(()=>B(t,m.node.code,O.value))}else yield Pe(()=>B(t,pn.value,O.value));F.value=!0}).finally(()=>{wt===r&&(wt=null)});if(wt=r,yield function(t){return M(this,null,function*(){if(!U.value)return void(yield t);let n,r=!1;for(t.then(()=>{r=!0},e=>{r=!0,n=e});;){if(L)return;if(r){if(n)throw n;return}if(Lr()&&Ur())return;yield e(),yield Un()}})}(r),L||Wt.value!==n)return;F.value=!0;let i=n===`diff`?H():V();if(typeof m.monacoOptions?.fontSize==`number`)i?.updateOptions({fontSize:m.monacoOptions.fontSize,automaticLayout:!1}),J.value=m.monacoOptions.fontSize,Y.value=m.monacoOptions.fontSize;else if(!xr()){let e=Gn();e&&e>0?(J.value=e,Y.value=e):(J.value=12,Y.value=12)}br(),yield Ti(),k.value||N.value||X(!1),I.value=!0,Gt.value=n,function(){if(kr(),U.value){let e=H(),t=(e?.getOriginalEditor)?.call(e),n=(e?.getModifiedEditor)?.call(e),r=(e,t)=>{try{let n=e?.[t];if(typeof n!=`function`)return;let r=n.call(e,()=>$());r&&At.push(r)}catch{}};try{let t=(e?.onDidUpdateDiff)?.call(e,()=>{$(),w(()=>ur())});t&&At.push(t)}catch{}r(t,`onDidContentSizeChange`),r(n,`onDidContentSizeChange`);let i=T.value;if(i&&typeof MutationObserver<`u`){let e=[`.view-line`,`.view-lines`,`.view-zones`,`.margin-view-zones`,`.diff-hidden-lines`,`.stream-monaco-diff-unchanged-bridge`,`.stream-monaco-fallback-inline-delete-zone`,`.stream-monaco-fallback-inline-delete-margin`].join(`,`),t=t=>{let n=t instanceof HTMLElement?t:t.parentElement;return!!(n?.closest)?.call(n,e)},n=t=>{let n=t instanceof HTMLElement?t:t.parentElement;return!!((n?.closest)?.call(n,e)||(n?.querySelector)?.call(n,e))},r=new MutationObserver(e=>{U.value&&Hr(i)&&e.some(e=>t(e.target)||Array.from(e.addedNodes).some(n)||Array.from(e.removedNodes).some(t))&&(Q(),X({preferModelDiffHeight:!0}),Z(),Mr())});r.observe(i,{attributeFilter:[`class`],attributes:!0,childList:!0,characterData:!0,subtree:!0}),At.push({dispose:()=>r.disconnect()})}if(i){let e=e=>{if(!(e.target instanceof Element?e.target:null)?.closest([`.stream-monaco-unchanged-summary`,`.stream-monaco-unchanged-reveal`,`.stream-monaco-unchanged-expand`,`.markstream-inline-fold-proxy`,`.diff-hidden-lines .center`].join(`,`)))return;let t=Math.ceil(i.getBoundingClientRect().height||0);t>0&&(R.value=t)};i.addEventListener(`click`,e,!0),At.push({dispose:()=>i.removeEventListener(`click`,e,!0)})}if(i&&typeof ResizeObserver<`u`){let e=new ResizeObserver(()=>{if(!U.value||(Z(),!Hr(i)))return;let e=_r(i);if(e==null)return;let t=Math.ceil(i.getBoundingClientRect().height||0),n=R.value;if(vr(i)&&n!=null){if(t>n+1)R.value=t;else if(te.disconnect()})}return}let e=V();try{let t=(e?.onDidContentSizeChange)?.call(e,()=>$());t&&At.push(t)}catch{}try{let t=(e?.onDidLayoutChange)?.call(e,()=>$());t&&At.push(t)}catch{}}(),Cr(),br(),Q(),ur(),$(),yield e();let a=null;St&&(a=yield St(),a&&(yield e(),yield Un()));let o=a??(n===`diff`?yield Wr({requireHighlight:!0}):yield function(){return M(this,null,function*(){if(Vr())return yield e(),yield Un(),Vr();for(let t=0;t<30;t++){if(L||U.value)return!1;let t=T.value,n=zr(),r=Rr(t),i=!pn.value.trim()||sr(t);if(n&&r&&i&&(yield e(),yield Un(),!L&&!U.value&&zr()&&Rr(T.value)&&(!pn.value.trim()||sr(T.value))))return!0;yield e(),yield Un()}return!1})}());L||(o?(br(),Bn(),(yield zn())||Ii()):Ii())})}function vi(t,n={}){if(!B||L||!1===m.stream&&!1!==m.loading||(Pi(),Fi())||G.value||T.value!==t||Zr())return null;if(Ct)return Ct;if(P.value&&I.value)return Promise.resolve();let r=Mi(),i=Jt.value,a=!1;P.value=!0,function(){let e=Te.value;C&&e&&Je!==e&&(Je&&C.markSettled(Je),Je=e,C.markPending(e))}();let o=M(null,null,function*(){try{yield _i(t),Zt=null}catch(e){let t=Mi(),o=i!==Jt.value,s=!1!==n.allowStaleContentRetry&&o&&Zt!==t;if(r!==t||s)return s&&(Zt=t),a=!0,P.value=!1,I.value=!1,F.value=!1,void(K.value=!1);throw Ii(r),e}}).finally(()=>{Ct===o&&(Ct=null),function(){let t=Je;C&&t&&(Je=``,e(()=>{if(!L){let e=E.value?.offsetHeight??0;e>0&&C.reportHeight(t,e)}C.markSettled(t)}))}(),a&&!L&&queueMicrotask(()=>{var e;let t=T.value;t&&!L&&((e=vi(t))==null||e.catch(e=>{I.value=!1,K.value=!1,Ii()}))})});return Ct=o,o}t(di,e=>{e||Ee()}),t(()=>Y.value,(e,t)=>{let n=U.value?H():V();n&&typeof e==`number`&&Number.isFinite(e)&&e>0&&(n.updateOptions({fontSize:e}),N.value||X(!0))},{flush:`post`,immediate:!1});let yi=0,bi=t(()=>[T.value,U.value,m.stream,m.loading,He.value,z.value,m.node.language,m.node.raw,m.node.code,m.node.loading],e=>M(null,[e],function*([e,t,n,r,i,a]){let o=++yi;if(!e||!a||Jr()||Qt||!1===n&&!1!==r||!B&&(yield function(){return M(this,null,function*(){if(typeof window>`u`||L||He.value||G.value)return;if(Tt)return Tt;let e=M(null,null,function*(){try{let e=yield Re();if(L)return;if(!e)return void(G.value=!0);let t=e.useMonaco,n=e.detectLanguage;if(typeof n==`function`&&(Et=n),typeof t!=`function`)return;Mt=Oi();let r=t(Mt);B=r.createEditor||B,ht=r.createDiffEditor||ht,gt=r.updateCode||gt,_t=r.updateDiff||_t,vt=r.getEditor||vt,V=r.getEditorView||V,H=r.getDiffEditorView||H,yt=r.cleanupEditor||yt,bt=r.safeClean||r.cleanupEditor||bt,xt=r.refreshDiffPresentation||xt,Dt=r.setTheme||Dt,St=r.whenVisualReady||null,He.value=!0}catch{if(L)return;G.value=!0}}).finally(()=>{Tt===e&&(Tt=null)});return Tt=e,e})}(),o!==yi||!1===m.stream&&!1!==m.loading||Zr()||!z.value||!B||G.value||P.value||Fi()||L||T.value!==e)||Zr())return;let s=vi(e);if(s){try{yield s}catch{I.value=!1,K.value=!1,Ii()}I.value&&K.value&&bi()}}));function xi(e){return!!e&&typeof e==`object`&&`light`in e&&`dark`in e}function Si(e){return typeof e==`string`?e:e&&typeof e==`object`&&`name`in e?String(e.name):null}function Ci(e,t){if(e===t)return!0;let n=Si(e),r=Si(t);return!!n&&n===r}function wi(){let e=function(){if(m.theme!==void 0){let e=m.theme;return xi(e)?m.isDark?e.dark:e.light:e}return m.isDark?m.darkTheme:m.lightTheme}(),t=W.value?.theme,n=e??t;if(typeof n==`object`&&n)return n;let r=Array.isArray(m.themes)?m.themes:[];if(!r.length||n==null)return n;let i=Si(n),a=r.map(e=>Si(e)).filter(e=>!!e);if(!i||a.includes(i))return n;let o=Si(t);return t!=null&&o&&a.includes(o)?t:r[0]}function Ti(){return M(this,arguments,function*(e={}){ki();let t=()=>{U.value&&Bt(),w(()=>{Cr(),$()})};if(e.appearanceOnly)return void t();let n=wi();if(n)try{yield Dt(n),t()}catch{}else t()})}function Ei(e,t){if(typeof t!=`string`)return;let n=ve(t),r=ye(n),i=[`plain`,`objectivec`,`objectivecpp`].includes(n)?r:n;for(let t of[i,r])t&&!e.includes(t)&&e.push(t)}t(Wt,(t,n)=>M(null,null,function*(){if(t===n||q.value||Qt||(ti(),!B||!T.value)||!P.value||!1===m.stream&&!1!==m.loading||!z.value)return;let r=Ct;if(r){try{yield r}catch{}if(L||!T.value)return}if(Gt.value!==t||!P.value||!I.value)try{I.value=!1,K.value=!1,P.value=!1,F.value=!1,kr(),Ar(),bt(),yield e(),yield vi(T.value)}catch{I.value=!1,K.value=!1,Ii()}}));let Di=v(()=>{let e=[],t=W.value?.languages;if(Array.isArray(t))for(let n of t)Ei(e,n);return Yr()&&Ei(e,m.node.language),Ei(e,D.value),Ei(e,O.value),Ei(e,`plaintext`),e});function Oi(){let e=j(A(j(A({wordWrap:`on`,wrappingIndent:`same`,themes:m.themes},W.value||{}),{languages:Di.value,stream:!1,fontSize:yn.value,lineHeight:xn.value,theme:wi(),disableFileHeader:!0}),U.value?{diffAppearance:Ht.value}:{}),{onThemeChange(){Cr()}}),t=function(){let e=W.value?.fontFamily;return typeof e==`string`&&e.trim()?e.trim():U.value?function(){if(typeof window>`u`)return;let e=E.value?.querySelector(`pre.code-pre-fallback`);if(e)return window.getComputedStyle(e).fontFamily.trim()||void 0}():void 0}();if(t&&(e.fontFamily??=t),U.value){e.wordWrap=tn.value?`on`:`off`;let t=typeof e.unsafeCSS==`string`?`${e.unsafeCSS}\n`:``,n=function(){let e=rn.value;if(!1===e||typeof e==`object`&&!1===e.enabled)return null;let t=typeof e==`object`?e:ue,n=Math.max(0,Math.floor(t.contextLineCount??2));return{contextLineCount:n,collapsedContextThreshold:n+Math.max(1,Math.floor(t.minimumLineCount??4))-1}}();e.unsafeCSS=`${t}\npre { column-gap: 0; }\npre > code { column-gap: 0; padding-block: 0; }\n[data-separator="line-info"] { margin-top: 0; }\n`,n?(e.parseDiffOptions=j(A({},e.parseDiffOptions),{context:n.contextLineCount}),e.collapsedContextThreshold=n.collapsedContextThreshold,e.expandUnchanged=!1,e.hunkSeparators=`line-info`,e.unsafeCSS+=`[data-separator="line-info"][data-separator-last] { height: 28px; } `):(e.expandUnchanged=!0,e.hunkSeparators=`simple`)}return e}function ki(){let e=Oi();if(!Mt)return Mt=e,Mt;for(let t of Object.keys(Mt))t in e||delete Mt[t];return Object.assign(Mt,e),Mt}let Ai=v(()=>{var e,t,n,r,i;return JSON.stringify({diffLineStyle:W.value?.diffLineStyle??`background`,diffUnchangedRegionStyle:W.value?.diffUnchangedRegionStyle??`line-info`,diffHideUnchangedRegions:m.monacoOptions?.diffHideUnchangedRegions===void 0?A({},ue):we(m.monacoOptions.diffHideUnchangedRegions),renderSideBySide:(e=W.value?.renderSideBySide)==null||e,useInlineViewWhenSpaceIsLimited:(t=W.value?.useInlineViewWhenSpaceIsLimited)!=null&&t,enableSplitViewResizing:(n=W.value?.enableSplitViewResizing)==null||n,ignoreTrimWhitespace:(r=W.value?.ignoreTrimWhitespace)==null||r,originalEditable:(i=W.value?.originalEditable)!=null&&i})}),ji=y(0);function Mi(){let e=wi();return JSON.stringify({kind:Wt.value,language:O.value,structural:Ai.value,optionsRevision:ji.value,settledContentGeneration:Yt.value,theme:Si(e)??(e==null?null:`custom`),isDark:m.isDark})}t(()=>[m.monacoOptions,m.theme,m.themes,m.lightTheme,m.darkTheme],()=>{ji.value+=1},{deep:!0}),t(()=>[pn.value,m.node.originalCode,m.node.updatedCode],()=>{Jt.value+=1,Jr()||(Yt.value+=1)});let Ni=v(()=>Mi());function Pi(){q.value&&qt.value!==Ni.value&&(q.value=!1,qt.value=null,Zt=null,$t=null,P.value=!1,I.value=!1,F.value=!1,K.value=!1,Kt.value=!1)}function Fi(){return Pi(),q.value&&qt.value===Ni.value}function Ii(e=Ni.value){qt.value=e,q.value=!0,Kt.value=!1}return t(Ni,()=>M(null,null,function*(){if(Qt||!q.value||qt.value===Ni.value||!B||!T.value||G.value||L||!z.value||!1===m.stream&&!1!==m.loading||Zr())return;let t=Ni.value;Qt=!0;try{if(Pi(),q.value)return;yield vi(T.value)}catch{I.value=!1,K.value=!1,Ii()}finally{$t=t,yield e(),Qt=!1}})),t(()=>[m.monacoOptions,z.value],()=>{var e;if(ki(),!B||!z.value)return;let t=U.value?H():V(),n=typeof m.monacoOptions?.fontSize==`number`?m.monacoOptions.fontSize:Number.isFinite(Y.value)?Y.value:void 0;typeof n==`number`&&Number.isFinite(n)&&n>0&&((e=t?.updateOptions)==null||e.call(t,{fontSize:n})),X(!1)},{deep:!0}),t(()=>[wi(),Ht.value,He.value,P.value,z.value],([e],t)=>{He.value&&I.value&&z.value&&Ti({appearanceOnly:t!=null&&Ci(e,t[0])})},{flush:`post`}),t(()=>[Ai.value,He.value,z.value],(t,n)=>M(null,[t,n],function*([t,n,r],[i]){if(ki(),!n||!r||!B||!T.value||!P.value||t===i||!1===m.stream&&!1!==m.loading)return;let a=Ct;if(a){try{yield a}catch{}if(L||!T.value)return}try{I.value=!1,K.value=!1,P.value=!1,F.value=!1,kr(),Ar(),bt(),yield e(),yield vi(T.value,{allowStaleContentRetry:!1})}catch{I.value=!1,K.value=!1,Ii()}}),{flush:`post`}),t(()=>[m.loading,z.value],(t,n)=>M(null,[t,n],function*([t,n],r){if(!n)return;let i=r?.[0];if(!1===i&&!1!==t&&U.value&&P.value&&(yield e(),w(()=>{M(null,null,function*(){let e=Ct;if(e)try{yield e}catch{}!L&&U.value&&!1!==m.loading&&(ki(),Bt(),$())})})),t)return;let a=i!==void 0&&!1!==i;yield e(),w(()=>{M(null,null,function*(){try{if(a&&(yield function(){return M(this,null,function*(){if(!q.value||!B||!T.value||G.value||L||!z.value)return!1;if($t===Ni.value)return!0;Qt=!0;try{q.value=!1,qt.value=null,Zt=null,P.value=!1,I.value=!1,F.value=!1,K.value=!1,kr(),Ar(),bt(),yield e();try{yield vi(T.value)}catch{I.value=!1,K.value=!1,Ii()}}finally{yield e(),Qt=!1}return!0})}()))return void X(!1);if(a&&U.value&&P.value&&en&&T.value)return en=!1,I.value=!1,K.value=!1,P.value=!1,F.value=!1,kr(),Ar(),bt(),yield e(),yield vi(T.value,{allowStaleContentRetry:!1}),void Mr(!0);if(a&&P.value)if(U.value&&T.value){let e=Ct;if(e)try{yield e}catch{}ki();let t=Lt(String(m.node.originalCode??``),String(m.node.updatedCode??``));if(yield Gr(t.original,t.updated,O.value),L||!U.value)return;Bt(),Z(!0),Rn(),Q(),ur();let n=yield Wr({requireHighlight:!0});L||!n||K.value||(yield zn()),$(),Mr(!0)}else ti(),ri(pn.value,O.value);a&&U.value?(X({preferModelDiffHeight:!0,holdCurrentDiffHeight:!0}),Mr(!0)):X(!1)}catch{}})})}),{immediate:!0,flush:`post`}),o(()=>{kr(),Ar(),yt(),kt?.()}),(e,t)=>G.value?(n(),h(b(Oe),{key:0,class:ie([`code-pre-fallback`,{"is-wrap":tn.value}]),style:ee(Pn.value),node:mn.value,loading:m.loading,"show-line-numbers":!0,"diff-inline":nn.value,"diff-hide-unchanged-regions":rn.value},null,8,[`class`,`style`,`node`,`loading`,`diff-inline`,`diff-hide-unchanged-regions`])):(n(),S(`div`,{key:1,ref_key:`container`,ref:E,style:ee(ui.value),class:ie([`code-block-container rounded-lg border`,[{dark:m.isDark,"is-rendering":m.loading,"is-dark":Ut.value,"is-diff":U.value,"is-plain-text":Ve.value}]]),"data-markstream-code-block":`1`,"data-markstream-enhanced":K.value&&!G.value?`true`:`false`,"data-markstream-enhancement-state":dn.value,"data-markstream-code-block-state":Jr()?`streaming`:`settled`,"data-markstream-pending":un.value?`true`:void 0,"data-markstream-viewport-pending":mt.value&&b(nt)&&!z.value?`true`:void 0},[s(et,{"show-header":m.showHeader,"show-collapse-button":m.showCollapseButton,"show-font-size-buttons":m.showFontSizeButtons,"enable-font-size-control":m.enableFontSizeControl,"show-copy-button":m.showCopyButton,"show-expand-button":m.showExpandButton,"show-preview-button":m.showPreviewButton,"show-tooltips":m.showTooltips,"is-dark":m.isDark,loading:m.loading,stream:d.stream,"is-collapsed":N.value,"is-expanded":k.value,"copy-text":ze.value,"is-previewable":qr.value,"code-font-size":Y.value,"code-font-min":10,"code-font-max":36,"default-code-font-size":J.value,"font-baseline-ready":vn.value,"diff-stats":U.value?Nt.value:null,"diff-stats-aria-label":Pt.value,onToggleCollapse:mi,onDecreaseFont:pr,onResetFont:mr,onIncreaseFont:fr,onCopy:fi,onToggleExpand:pi,onPreview:hi},oe({"header-left":ne(()=>[se(e.$slots,`header-left`,{},()=>[g(`div`,ot,[g(`span`,{class:`icon-slot h-4 w-4 flex-shrink-0`,innerHTML:li.value},null,8,st),g(`div`,ct,[g(`div`,lt,x(si.value),1),ci.value?(n(),S(`div`,ut,x(ci.value),1)):u(``,!0)])])],!0)]),loading:ne(()=>[se(e.$slots,`loading`,{loading:d.loading,stream:d.stream},()=>[t[0]||=g(`div`,{class:`loading-skeleton`},[g(`div`,{class:`skeleton-line`}),g(`div`,{class:`skeleton-line`}),g(`div`,{class:`skeleton-line short`})],-1)],!0)]),default:ne(()=>[r(g(`div`,{class:ie([`code-editor-layer`,{"code-editor-layer--collapsed":N.value}])},[g(`div`,{ref_key:`codeEditor`,ref:T,class:ie([`code-editor-container`,d.stream?``:`code-height-placeholder`]),"data-markstream-host-hidden":ln.value?`true`:void 0,style:ee(Ln.value)},null,14,dt),cn.value?(n(),h(b(Oe),{key:0,class:ie([`code-pre-fallback`,{"is-wrap":tn.value}]),style:ee(Pn.value),node:mn.value,"show-line-numbers":!0,"diff-inline":nn.value,"diff-hide-unchanged-regions":rn.value},null,8,[`class`,`style`,`node`,`diff-inline`,`diff-hide-unchanged-regions`])):u(``,!0)],2),[[f,!!d.stream||!d.loading]]),fn.value&&!Ie.value&&qr.value&&D.value===`html`?(n(),h(it,{key:0,code:m.node.code,"html-preview-allow-scripts":m.htmlPreviewAllowScripts,"html-preview-sandbox":m.htmlPreviewSandbox,"is-dark":m.isDark,"on-close":()=>fn.value=!1},null,8,[`code`,`html-preview-allow-scripts`,`html-preview-sandbox`,`is-dark`,`on-close`])):u(``,!0)]),_:2},[e.$slots[`header-right`]?{name:`header-right`,fn:ne(()=>[se(e.$slots,`header-right`,{},void 0,!0)]),key:`0`}:void 0]),1032,[`show-header`,`show-collapse-button`,`show-font-size-buttons`,`enable-font-size-control`,`show-copy-button`,`show-expand-button`,`show-preview-button`,`show-tooltips`,`is-dark`,`loading`,`stream`,`is-collapsed`,`is-expanded`,`copy-text`,`is-previewable`,`code-font-size`,`default-code-font-size`,`font-baseline-ready`,`diff-stats`,`diff-stats-aria-label`])],14,at))}}),[[`__scopeId`,`data-v-72200115`]]);export{pt as default}; \ No newline at end of file diff --git a/apps/pythinker-code/dist-web/assets/DesignSystemView-CaJPKGCg.js b/apps/pythinker-code/dist-web/assets/DesignSystemView-wQIG8pdq.js similarity index 99% rename from apps/pythinker-code/dist-web/assets/DesignSystemView-CaJPKGCg.js rename to apps/pythinker-code/dist-web/assets/DesignSystemView-wQIG8pdq.js index 2232c1d39..5a0c4adfc 100644 --- a/apps/pythinker-code/dist-web/assets/DesignSystemView-CaJPKGCg.js +++ b/apps/pythinker-code/dist-web/assets/DesignSystemView-wQIG8pdq.js @@ -1,4 +1,4 @@ -import{I as e,N as t,P as n,R as r,S as i,b as a,d as o,h as s,ot as ee,ut as c,v as l,w as te,x as u}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{at as ne,it as d,ot as re,st as f,t as p}from"./index-CIrZXSM-.js";var ie={class:`ds-page`},m={class:`layout`},h={class:`content`},g={class:`content-inner`},_={id:`tokens`},v={class:`icon-sizes`},y={class:`sz`},b={class:`p-ic`,style:{width:`14px`,height:`14px`},viewBox:`0 0 24 24`,fill:`currentColor`},x={class:`sz`},S={class:`p-ic`,style:{width:`16px`,height:`16px`},viewBox:`0 0 24 24`,fill:`currentColor`},C={class:`sz`},w={class:`p-ic`,style:{width:`20px`,height:`20px`},viewBox:`0 0 24 24`,fill:`currentColor`},T={class:`icon-grid`},E={class:`icon-group-label`},D={class:`ic-name`},O={id:`primitives`},k={class:`stage-wrap`},A={class:`stage p col`},j={class:`demo-row`},M={class:`p-btn primary disabled`},N={class:`p-spinner sm`,viewBox:`0 0 24 24`,style:{"--p-accent":`#fff`,"--p-line":`rgba(255,255,255,.35)`}},P={class:`stage-wrap`},F={class:`stage p col`},I={class:`demo-row`,style:{"font-size":`22px`,"line-height":`1`}},L={class:`demo-row`},ae={class:`p-thinking`},R={class:`p-thinking`},z={class:`stage-wrap`},B={class:`stage p col`},V={class:`demo-row`,style:{gap:`24px`,"flex-wrap":`wrap`}},H={class:`demo-row`,style:{gap:`24px`,"align-items":`center`}},U={class:`stage-wrap`},W={class:`stage p col`,style:{gap:`0`,background:`var(--p-surface)`,padding:`0`,"max-width":`300px`,"align-items":`stretch`}},G={style:{display:`flex`,"align-items":`center`,gap:`8px`,padding:`7px 10px`,margin:`1px 6px`,"border-radius":`8px`,color:`var(--p-text)`,"font-size":`13px`}},K={style:{color:`var(--d-fg-faint)`,flex:`none`},width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`currentColor`},q={style:{display:`flex`,"align-items":`center`,gap:`8px`,padding:`7px 10px`,margin:`1px 6px`,"border-radius":`8px`,color:`var(--p-text)`,"font-size":`13px`}},J={style:{color:`var(--d-fg-faint)`,flex:`none`},width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`currentColor`},oe={id:`chat`},se={class:`stage-wrap`},ce={class:`stage p col`,style:{"align-items":`center`,background:`#fff`}},le={class:`demo-chat`},ue={class:`p-thinking`},Y={class:`p-action`},de={class:`p-action-head`},fe={class:`p-ic`,style:{color:`var(--p-accent)`},viewBox:`0 0 24 24`,fill:`currentColor`},pe={class:`p-action warn`},me={class:`p-action-head`},he={class:`p-ic`,style:{color:`var(--p-warning)`},viewBox:`0 0 24 24`,fill:`currentColor`},X=f(te({__name:`DesignSystemView`,emits:[`close`],setup(te,{emit:f}){let X=f;function Z(){X(`close`)}let Q=null;function $(e){e.key===`Escape`&&Z()}return t(()=>{document.addEventListener(`keydown`,$);let e=Array.prototype.slice.call(document.querySelectorAll(`#nav a[href^="#"]`)),t=new Map;e.forEach(e=>{let n=e.getAttribute(`href`);if(!n)return;let r=document.getElementById(n.slice(1));r&&t.set(r,e)});let n=null;Q=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(n&&n.classList.remove(`active`),n=t.get(e.target)??null,n&&n.classList.add(`active`))})},{rootMargin:`-20% 0px -70% 0px`,threshold:0}),t.forEach((e,t)=>Q.observe(t)),e.length&&e[0].classList.add(`active`)}),n(()=>{document.removeEventListener(`keydown`,$),Q&&=(Q.disconnect(),null)}),(t,n)=>(e(),l(`div`,ie,[s(`div`,{class:`ds-topbar`},[s(`button`,{class:`ds-back`,type:`button`,onClick:Z},`← Back`),n[0]||=s(`span`,{class:`ds-topbar-title`},`Design system`,-1)]),s(`div`,m,[n[51]||=a(``,1),s(`main`,h,[s(`div`,g,[n[49]||=a(`
● Design System · v1.0

Pythinker Web Design System

This document defines the visual language and component specification for Pythinker Web — design tokens, component primitives, the chat interface, theming, and style rules. All UI work is grounded in it: unified, restrained, token-driven, and themeable.

Scope apps/pythinker-webComponent primitivesTheme 1 set · 4 customizable colorsLight / dark mode
i
This spec is the single reference when changing the web UI. Before adding or modifying a component, style, layout, or theme, read this document first; color, font, radius, spacing, shadow, z-index, and motion always use the §02 tokens, components reuse the §03 primitives, and the §06 style rules are followed.
01

Design Principles

Every UI decision traces back to the following principles. Pythinker Web is a local Agent tool for developers: quick scanning, long stretches of staring, often in the dark — the design serves the task, and is restrained, clinical, and density-first.

  • Consistency —— The same semantics use the same component. The primary button, dialog, input, and badge should each have exactly "one" correct way to be written across the entire site.
  • Hierarchy —— Build a clear hierarchy through size, weight, color, and whitespace; emphasize through "restraint" rather than "bolder and bigger".
  • Proximity —— Group related elements, leave whitespace between unrelated ones. A card's padding, line spacing, and group spacing all come from the same spacing scale.
  • Feedback —— hover / active / focus / loading / success / error all have visible states, and the state language is unified.
  • Breathing room —— Control density with the spacing scale rather than arbitrary pixels; prefer restrained whitespace over cramming controls together.
  • Accessibility (A11y) —— Text contrast ≥ 4.5:1, visible focus rings, touch targets ≥ 32px, and states that don't rely on color alone.
  • Reduction —— The number of colors, radii, shadow levels, and type sizes all converge to a finite set of tokens; delete stray values.
✓
Brand tone (the do-not list): calm, clinical, never exaggerated. Reject purple gradients, glassmorphism, glowing shadows, AI purple / blue glows, endlessly looping fussy micro-animations, "Boost your productivity"-style marketing copy, and using emoji as icons. These are all common tells of AI-generated interfaces (an "AI tell"), deliberately avoided.
i
Declare design intent first (Design Read): before adding a component / page, write one sentence describing its scenario, audience, and tone (for example, "a lightweight tool card embedded in a conversation, for developers, calm and restrained"), then build. If the intent isn't clear, ask one question first rather than defaulting to the nearest existing style.
`,2),s(`section`,_,[n[7]||=a(`
02

Design Tokens

Collapse every visual decision into tokens. Color tokens keep the existing short names and fill out the semantics (lowering migration cost), while spacing, z-index, motion, and font-weight fill in the scales that are currently missing. Every token has: name, light value, dark value, and usage.

i
Naming convention: --<category>-<role>-<state>. For example --color-text-muted, --radius-md, --space-4. To reduce churn, the existing short names (--bg / --ink / --line / --blue …) are kept as compatibility aliases for one release cycle.

Color

Semantic-first, in three layers: background / text / border + accent + status colors. All colors are defined in light / dark pairs, with contrast ≥ 4.5:1.

i
The table below shows the derived semantic tokens. The neutrals and the accent are derived from the 4 color seeds in §05 — for example --color-accent comes from --accent-primary, and --color-bg comes from the current light / dark surface. The semantic status colors (success / warning / danger / info) are independent palettes paired with the seeds, one set each for light / dark; they are not auto-derived from the seeds. Day-to-day reskinning usually only needs the 4 seeds, with the status colors fine-tuned as needed.
bg
#ffffff / #121212
surface
#fafbfc / #1f1f1f
surface-sunken
#f3f5f8 / #121212
selected
#eceff3 / #2d333b
fg
#14171c / #e8eaed
fg-muted
#6b7280 / #9aa0a8
line
#e7eaee / #2d333b
accent (KMBlue)
#1783ff / #58a6ff
accent-soft
#e8f3ff / rgba(88,166,255,.14)
TokenLightDarkUsage
--color-bg#ffffff#121212Page background
--color-surface#fafbfc#1f1f1fPanel / sidebar / card head
--color-surface-raised#ffffff#292929Raised card / dialog / input
--color-text#14171c#e8eaedBody text / headings
--color-text-muted#6b7280#9aa0a8Secondary text / placeholder
--color-line#e7eaee#2d333bDivider / card border
--color-selected#00000014#ffffff14Neutral selected fill (sidebar rows, list pickers) — translucent, never accent-tinted
--color-hover#0000000d#ffffff0dRow hover wash — lighter than the selected fill (hover < selected); translucent, sits on any surface
--color-media-alpha-bg-1≈#858585≈#676b72Checkerboard square A of the <img> alpha canvas — color-mix of --color-bg/--color-text (52/48); applied via --media-alpha-canvas (16px period)
--color-media-alpha-bg-2≈#6b6b6b≈#7a7e85Checkerboard square B (42/58) — both squares stay ≥3:1 against white and black; opaque images cover the canvas
--color-sidebar-bg#e9eaf2#2c343aSidebar solid composite (row masks / overlays). The visible sidebar surface is the frost pair --color-sidebar-glass + --sidebar-wash blurred by --p-sidebar-backdrop
--color-accent#1783ff#58a6ffPrimary action / link / focus
--color-success#0e7a38#3fb950Success / pass
--color-warning#a9610a#d29922Warning / pending
--color-danger#c0392b#f85149Danger / error / abort

Surface usage

The four surface layers each have a role — choose by "raised layer / default flat layer / sunken layer / page background", and avoid treating --p-surface-raised as a universal background.

TokenLightDarkUsage
--p-surface-raised#ffffff#292929Raised card / dialog / input (raised layer)
--p-surface#fafbfc#1f1f1fPanel / sidebar / card head (default flat layer)
--p-surface-sunken#f3f5f8#121212Code block / inline input / recessed area (sunken layer)
--p-bg#ffffff#121212Page background

Focus ring

All focusable controls (button, input, link, menu item, switch, checkbox) use the focus-ring token uniformly; do not hand-write a box-shadow focus ring.

TokenValueUsage
--p-focus-ring0 0 0 3px var(--p-accent-soft)Default focus ring (link, menu item, switch, checkbox)
--p-focus-ring-strong0 0 0 3px var(--p-accent-soft), 0 0 0 1px var(--p-accent)Strong focus ring (button, primary action)

Text selection

The text-selection color uses --p-selection uniformly (light rgba(23,131,255,.18) / dark rgba(88,166,255,.32)), applied by the global ::selection rule; do not set a separate highlight background.

Disabled state

All disabled controls use opacity:.5 + cursor:not-allowed uniformly; do not separately grey out or recolor.

Font families

Pythinker Web uses two font families: --font-ui (UI and body, Inter first) and --font-mono (code and monospace). Components always reference the variables; do not hard-code font names.

--font-ui · UI & body (Inter first)

Body and UI use self-hosted Inter as the primary face. CJK and platform system UI fonts sit late in the fallback chain so Latin glyphs resolve to Inter while Chinese text can fall through to native CJK fonts:

--font-ui
--font-ui: "Inter Variable", "Inter", "Helvetica Neue", Arial,
+import{I as e,N as t,P as n,R as r,S as i,b as a,d as o,h as s,ot as ee,ut as c,v as l,w as te,x as u}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{at as ne,it as d,ot as re,st as f,t as p}from"./index-2zSxMdPb.js";var ie={class:`ds-page`},m={class:`layout`},h={class:`content`},g={class:`content-inner`},_={id:`tokens`},v={class:`icon-sizes`},y={class:`sz`},b={class:`p-ic`,style:{width:`14px`,height:`14px`},viewBox:`0 0 24 24`,fill:`currentColor`},x={class:`sz`},S={class:`p-ic`,style:{width:`16px`,height:`16px`},viewBox:`0 0 24 24`,fill:`currentColor`},C={class:`sz`},w={class:`p-ic`,style:{width:`20px`,height:`20px`},viewBox:`0 0 24 24`,fill:`currentColor`},T={class:`icon-grid`},E={class:`icon-group-label`},D={class:`ic-name`},O={id:`primitives`},k={class:`stage-wrap`},A={class:`stage p col`},j={class:`demo-row`},M={class:`p-btn primary disabled`},N={class:`p-spinner sm`,viewBox:`0 0 24 24`,style:{"--p-accent":`#fff`,"--p-line":`rgba(255,255,255,.35)`}},P={class:`stage-wrap`},F={class:`stage p col`},I={class:`demo-row`,style:{"font-size":`22px`,"line-height":`1`}},L={class:`demo-row`},ae={class:`p-thinking`},R={class:`p-thinking`},z={class:`stage-wrap`},B={class:`stage p col`},V={class:`demo-row`,style:{gap:`24px`,"flex-wrap":`wrap`}},H={class:`demo-row`,style:{gap:`24px`,"align-items":`center`}},U={class:`stage-wrap`},W={class:`stage p col`,style:{gap:`0`,background:`var(--p-surface)`,padding:`0`,"max-width":`300px`,"align-items":`stretch`}},G={style:{display:`flex`,"align-items":`center`,gap:`8px`,padding:`7px 10px`,margin:`1px 6px`,"border-radius":`8px`,color:`var(--p-text)`,"font-size":`13px`}},K={style:{color:`var(--d-fg-faint)`,flex:`none`},width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`currentColor`},q={style:{display:`flex`,"align-items":`center`,gap:`8px`,padding:`7px 10px`,margin:`1px 6px`,"border-radius":`8px`,color:`var(--p-text)`,"font-size":`13px`}},J={style:{color:`var(--d-fg-faint)`,flex:`none`},width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`currentColor`},oe={id:`chat`},se={class:`stage-wrap`},ce={class:`stage p col`,style:{"align-items":`center`,background:`#fff`}},le={class:`demo-chat`},ue={class:`p-thinking`},Y={class:`p-action`},de={class:`p-action-head`},fe={class:`p-ic`,style:{color:`var(--p-accent)`},viewBox:`0 0 24 24`,fill:`currentColor`},pe={class:`p-action warn`},me={class:`p-action-head`},he={class:`p-ic`,style:{color:`var(--p-warning)`},viewBox:`0 0 24 24`,fill:`currentColor`},X=f(te({__name:`DesignSystemView`,emits:[`close`],setup(te,{emit:f}){let X=f;function Z(){X(`close`)}let Q=null;function $(e){e.key===`Escape`&&Z()}return t(()=>{document.addEventListener(`keydown`,$);let e=Array.prototype.slice.call(document.querySelectorAll(`#nav a[href^="#"]`)),t=new Map;e.forEach(e=>{let n=e.getAttribute(`href`);if(!n)return;let r=document.getElementById(n.slice(1));r&&t.set(r,e)});let n=null;Q=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(n&&n.classList.remove(`active`),n=t.get(e.target)??null,n&&n.classList.add(`active`))})},{rootMargin:`-20% 0px -70% 0px`,threshold:0}),t.forEach((e,t)=>Q.observe(t)),e.length&&e[0].classList.add(`active`)}),n(()=>{document.removeEventListener(`keydown`,$),Q&&=(Q.disconnect(),null)}),(t,n)=>(e(),l(`div`,ie,[s(`div`,{class:`ds-topbar`},[s(`button`,{class:`ds-back`,type:`button`,onClick:Z},`← Back`),n[0]||=s(`span`,{class:`ds-topbar-title`},`Design system`,-1)]),s(`div`,m,[n[51]||=a(``,1),s(`main`,h,[s(`div`,g,[n[49]||=a(`
● Design System · v1.0

Pythinker Web Design System

This document defines the visual language and component specification for Pythinker Web — design tokens, component primitives, the chat interface, theming, and style rules. All UI work is grounded in it: unified, restrained, token-driven, and themeable.

Scope apps/pythinker-webComponent primitivesTheme 1 set · 4 customizable colorsLight / dark mode
i
This spec is the single reference when changing the web UI. Before adding or modifying a component, style, layout, or theme, read this document first; color, font, radius, spacing, shadow, z-index, and motion always use the §02 tokens, components reuse the §03 primitives, and the §06 style rules are followed.
01

Design Principles

Every UI decision traces back to the following principles. Pythinker Web is a local Agent tool for developers: quick scanning, long stretches of staring, often in the dark — the design serves the task, and is restrained, clinical, and density-first.

  • Consistency —— The same semantics use the same component. The primary button, dialog, input, and badge should each have exactly "one" correct way to be written across the entire site.
  • Hierarchy —— Build a clear hierarchy through size, weight, color, and whitespace; emphasize through "restraint" rather than "bolder and bigger".
  • Proximity —— Group related elements, leave whitespace between unrelated ones. A card's padding, line spacing, and group spacing all come from the same spacing scale.
  • Feedback —— hover / active / focus / loading / success / error all have visible states, and the state language is unified.
  • Breathing room —— Control density with the spacing scale rather than arbitrary pixels; prefer restrained whitespace over cramming controls together.
  • Accessibility (A11y) —— Text contrast ≥ 4.5:1, visible focus rings, touch targets ≥ 32px, and states that don't rely on color alone.
  • Reduction —— The number of colors, radii, shadow levels, and type sizes all converge to a finite set of tokens; delete stray values.
✓
Brand tone (the do-not list): calm, clinical, never exaggerated. Reject purple gradients, glassmorphism, glowing shadows, AI purple / blue glows, endlessly looping fussy micro-animations, "Boost your productivity"-style marketing copy, and using emoji as icons. These are all common tells of AI-generated interfaces (an "AI tell"), deliberately avoided.
i
Declare design intent first (Design Read): before adding a component / page, write one sentence describing its scenario, audience, and tone (for example, "a lightweight tool card embedded in a conversation, for developers, calm and restrained"), then build. If the intent isn't clear, ask one question first rather than defaulting to the nearest existing style.
`,2),s(`section`,_,[n[7]||=a(`
02

Design Tokens

Collapse every visual decision into tokens. Color tokens keep the existing short names and fill out the semantics (lowering migration cost), while spacing, z-index, motion, and font-weight fill in the scales that are currently missing. Every token has: name, light value, dark value, and usage.

i
Naming convention: --<category>-<role>-<state>. For example --color-text-muted, --radius-md, --space-4. To reduce churn, the existing short names (--bg / --ink / --line / --blue …) are kept as compatibility aliases for one release cycle.

Color

Semantic-first, in three layers: background / text / border + accent + status colors. All colors are defined in light / dark pairs, with contrast ≥ 4.5:1.

i
The table below shows the derived semantic tokens. The neutrals and the accent are derived from the 4 color seeds in §05 — for example --color-accent comes from --accent-primary, and --color-bg comes from the current light / dark surface. The semantic status colors (success / warning / danger / info) are independent palettes paired with the seeds, one set each for light / dark; they are not auto-derived from the seeds. Day-to-day reskinning usually only needs the 4 seeds, with the status colors fine-tuned as needed.
bg
#ffffff / #121212
surface
#fafbfc / #1f1f1f
surface-sunken
#f3f5f8 / #121212
selected
#eceff3 / #2d333b
fg
#14171c / #e8eaed
fg-muted
#6b7280 / #9aa0a8
line
#e7eaee / #2d333b
accent (KMBlue)
#1783ff / #58a6ff
accent-soft
#e8f3ff / rgba(88,166,255,.14)
TokenLightDarkUsage
--color-bg#ffffff#121212Page background
--color-surface#fafbfc#1f1f1fPanel / sidebar / card head
--color-surface-raised#ffffff#292929Raised card / dialog / input
--color-text#14171c#e8eaedBody text / headings
--color-text-muted#6b7280#9aa0a8Secondary text / placeholder
--color-line#e7eaee#2d333bDivider / card border
--color-selected#00000014#ffffff14Neutral selected fill (sidebar rows, list pickers) — translucent, never accent-tinted
--color-hover#0000000d#ffffff0dRow hover wash — lighter than the selected fill (hover < selected); translucent, sits on any surface
--color-media-alpha-bg-1≈#858585≈#676b72Checkerboard square A of the <img> alpha canvas — color-mix of --color-bg/--color-text (52/48); applied via --media-alpha-canvas (16px period)
--color-media-alpha-bg-2≈#6b6b6b≈#7a7e85Checkerboard square B (42/58) — both squares stay ≥3:1 against white and black; opaque images cover the canvas
--color-sidebar-bg#e9eaf2#2c343aSidebar solid composite (row masks / overlays). The visible sidebar surface is the frost pair --color-sidebar-glass + --sidebar-wash blurred by --p-sidebar-backdrop
--color-accent#1783ff#58a6ffPrimary action / link / focus
--color-success#0e7a38#3fb950Success / pass
--color-warning#a9610a#d29922Warning / pending
--color-danger#c0392b#f85149Danger / error / abort

Surface usage

The four surface layers each have a role — choose by "raised layer / default flat layer / sunken layer / page background", and avoid treating --p-surface-raised as a universal background.

TokenLightDarkUsage
--p-surface-raised#ffffff#292929Raised card / dialog / input (raised layer)
--p-surface#fafbfc#1f1f1fPanel / sidebar / card head (default flat layer)
--p-surface-sunken#f3f5f8#121212Code block / inline input / recessed area (sunken layer)
--p-bg#ffffff#121212Page background

Focus ring

All focusable controls (button, input, link, menu item, switch, checkbox) use the focus-ring token uniformly; do not hand-write a box-shadow focus ring.

TokenValueUsage
--p-focus-ring0 0 0 3px var(--p-accent-soft)Default focus ring (link, menu item, switch, checkbox)
--p-focus-ring-strong0 0 0 3px var(--p-accent-soft), 0 0 0 1px var(--p-accent)Strong focus ring (button, primary action)

Text selection

The text-selection color uses --p-selection uniformly (light rgba(23,131,255,.18) / dark rgba(88,166,255,.32)), applied by the global ::selection rule; do not set a separate highlight background.

Disabled state

All disabled controls use opacity:.5 + cursor:not-allowed uniformly; do not separately grey out or recolor.

Font families

Pythinker Web uses two font families: --font-ui (UI and body, Inter first) and --font-mono (code and monospace). Components always reference the variables; do not hard-code font names.

--font-ui · UI & body (Inter first)

Body and UI use self-hosted Inter as the primary face. CJK and platform system UI fonts sit late in the fallback chain so Latin glyphs resolve to Inter while Chinese text can fall through to native CJK fonts:

--font-ui
--font-ui: "Inter Variable", "Inter", "Helvetica Neue", Arial,
       "PingFang SC", "Microsoft YaHei", "Noto Sans SC",
       -apple-system, BlinkMacSystemFont, "Segoe UI",
       Roboto, Ubuntu, sans-serif,
diff --git a/apps/pythinker-code/dist-web/assets/Tooltip-DbjeYWS5.js b/apps/pythinker-code/dist-web/assets/Tooltip-BTEezncw.js
similarity index 98%
rename from apps/pythinker-code/dist-web/assets/Tooltip-DbjeYWS5.js
rename to apps/pythinker-code/dist-web/assets/Tooltip-BTEezncw.js
index 9c714ae32..92fd1fe76 100644
--- a/apps/pythinker-code/dist-web/assets/Tooltip-DbjeYWS5.js
+++ b/apps/pythinker-code/dist-web/assets/Tooltip-BTEezncw.js
@@ -1 +1 @@
-import{A as e,G as t,I as n,J as r,S as i,c as a,f as o,g as s,h as c,j as l,lt as u,n as d,nt as f,q as p,st as m,ut as h,w as g,x as _}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{t as v}from"./preload-helper-zJ_50EbN.js";import{_ as y}from"./index-CIrZXSM-.js";var b=(e,t,n)=>new Promise((r,i)=>{var a=e=>{try{s(n.next(e))}catch(e){i(e)}},o=e=>{try{s(n.throw(e))}catch(e){i(e)}},s=e=>e.done?r(e.value):Promise.resolve(e.value).then(a,o);s((n=n.apply(e,t)).next())}),x=[`id`],S=[`data-placement`],C=y(g({__name:`Tooltip`,props:{visible:{type:Boolean},anchorEl:{},content:{},placement:{},offset:{},originX:{},originY:{},id:{},isDark:{type:[Boolean,null]}},setup(g){let y=g,C=f(null),w=f(null),T=f({transform:`translate3d(0px, 0px, 0px)`,left:`0px`,top:`0px`}),E=f({}),D=f(y.placement??`top`),O=f(!1),k=null,A=null,j=null,M=null,N=null,P=0;function F(){return M?Promise.resolve(M):(N||=v(()=>import(`./floating-ui.dom-DpWEmocp.js`).then(e=>(M=e,e)),[]).catch(e=>{throw N=null,e}),N)}function I(){k&&=(k(),null),A=null,j=null}function L(e){return b(this,null,function*(){let t=y.anchorEl,n=C.value;if(!y.visible||!t||!n||A===t&&j===n)return;let{autoUpdate:r}=yield F();e()&&y.visible&&y.anchorEl===t&&C.value===n&&(I(),A=t,j=n,k=r(t,n,()=>{R().catch(()=>{z()})}))})}function R(){return b(this,null,function*(){let e=y.anchorEl,t=C.value;if(!y.visible||!e||!t)return!1;let{arrow:n,computePosition:r,flip:i,offset:a,shift:o}=yield F();if(!y.visible||y.anchorEl!==e||C.value!==t)return!1;let s=[a(y.offset??6),i(),o({padding:6}),...w.value?[n({element:w.value,padding:4})]:[]],{x:c,y:l,placement:u,middlewareData:d}=yield r(e,t,{placement:y.placement??`top`,middleware:s,strategy:`fixed`});if(!y.visible||y.anchorEl!==e||C.value!==t)return!1;if(T.value.transform=`translate3d(${Math.round(c)}px, ${Math.round(l)}px, 0)`,T.value.left=`0px`,T.value.top=`0px`,D.value=u,d.arrow&&w.value){let{x:e,y:t}=d.arrow,n={top:`bottom`,bottom:`top`,left:`right`,right:`left`}[u.split(`-`)[0]];E.value={left:e==null?``:`${e}px`,top:t==null?``:`${t}px`,[n]:`-3px`}}return!0})}function z(){let e=y.anchorEl,t=C.value;if(!e||!t)return!1;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=y.offset??6,a=y.placement??`top`,o=n.left,s=n.top;return a===`bottom`?s=n.bottom+i:a===`left`?o=n.left-r.width-i:a===`right`?o=n.right+i:s=n.top-r.height-i,T.value.transform=`translate3d(${Math.round(Math.max(0,o))}px, ${Math.round(Math.max(0,s))}px, 0)`,T.value.left=`0px`,T.value.top=`0px`,D.value=a,E.value={},!0}t(()=>y.visible,t=>b(null,null,function*(){let n=++P;if(t){if(O.value=!1,yield e(),n!==P||!y.visible)return;if(y.anchorEl&&C.value)try{let t=y.anchorEl,r=C.value,i=t.getBoundingClientRect();if(!(yield R())||n!==P||!y.visible||y.anchorEl!==t||C.value!==r)return;let a=T.value.transform;if(y.originX!=null&&y.originY!=null){let t=Math.abs(Number(y.originX)-i.left),r=Math.abs(Number(y.originY)-i.top);if(Math.hypot(t,r)>120){if(T.value.transform=`translate3d(${Math.round(y.originX)}px, ${Math.round(y.originY)}px, 0)`,yield e(),n!==P||!y.visible||(O.value=!0,yield e(),n!==P||!y.visible))return;T.value.transform=a}else O.value=!0}else O.value=!0;yield L(()=>n===P)}catch{if(n!==P||!y.visible)return;if(O.value=z(),y.anchorEl&&C.value)try{yield L(()=>n===P)}catch{}}else O.value=!0}else O.value=!1,I()}));let B=0;return t([()=>y.anchorEl,()=>y.placement,()=>y.content],()=>b(null,null,function*(){let t=++B;if(y.visible&&y.anchorEl&&C.value){if(yield e(),t!==B||!y.visible||!y.anchorEl||!C.value)return;try{let e=yield R();if(t!==B||!y.visible||!y.anchorEl||!C.value)return;e||z()}catch{z()}yield L(()=>t===B)}})),l(()=>{P+=1,I()}),(e,t)=>(n(),s(o,{to:`body`},[c(`div`,{class:m([`markstream-vue`,{dark:g.isDark}])},[i(d,{name:`tooltip`,appear:``},{default:p(()=>[r(c(`div`,{id:y.id,ref_key:`tooltip`,ref:C,style:u({position:`fixed`,left:T.value.left,top:T.value.top,transform:T.value.transform,visibility:O.value?`visible`:`hidden`,pointerEvents:O.value?void 0:`none`}),class:`tooltip-element`,role:`tooltip`},[_(h(g.content)+` `,1),c(`div`,{ref_key:`arrowEl`,ref:w,class:`tooltip-arrow`,"data-placement":D.value,style:u(E.value)},null,12,S)],12,x),[[a,g.visible]])]),_:1})],2)]))}}),[[`__scopeId`,`data-v-c606ee4c`]]);export{C as default};
\ No newline at end of file
+import{A as e,G as t,I as n,J as r,S as i,c as a,f as o,g as s,h as c,j as l,lt as u,n as d,nt as f,q as p,st as m,ut as h,w as g,x as _}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{t as v}from"./preload-helper-zJ_50EbN.js";import{_ as y}from"./index-2zSxMdPb.js";var b=(e,t,n)=>new Promise((r,i)=>{var a=e=>{try{s(n.next(e))}catch(e){i(e)}},o=e=>{try{s(n.throw(e))}catch(e){i(e)}},s=e=>e.done?r(e.value):Promise.resolve(e.value).then(a,o);s((n=n.apply(e,t)).next())}),x=[`id`],S=[`data-placement`],C=y(g({__name:`Tooltip`,props:{visible:{type:Boolean},anchorEl:{},content:{},placement:{},offset:{},originX:{},originY:{},id:{},isDark:{type:[Boolean,null]}},setup(g){let y=g,C=f(null),w=f(null),T=f({transform:`translate3d(0px, 0px, 0px)`,left:`0px`,top:`0px`}),E=f({}),D=f(y.placement??`top`),O=f(!1),k=null,A=null,j=null,M=null,N=null,P=0;function F(){return M?Promise.resolve(M):(N||=v(()=>import(`./floating-ui.dom-DpWEmocp.js`).then(e=>(M=e,e)),[]).catch(e=>{throw N=null,e}),N)}function I(){k&&=(k(),null),A=null,j=null}function L(e){return b(this,null,function*(){let t=y.anchorEl,n=C.value;if(!y.visible||!t||!n||A===t&&j===n)return;let{autoUpdate:r}=yield F();e()&&y.visible&&y.anchorEl===t&&C.value===n&&(I(),A=t,j=n,k=r(t,n,()=>{R().catch(()=>{z()})}))})}function R(){return b(this,null,function*(){let e=y.anchorEl,t=C.value;if(!y.visible||!e||!t)return!1;let{arrow:n,computePosition:r,flip:i,offset:a,shift:o}=yield F();if(!y.visible||y.anchorEl!==e||C.value!==t)return!1;let s=[a(y.offset??6),i(),o({padding:6}),...w.value?[n({element:w.value,padding:4})]:[]],{x:c,y:l,placement:u,middlewareData:d}=yield r(e,t,{placement:y.placement??`top`,middleware:s,strategy:`fixed`});if(!y.visible||y.anchorEl!==e||C.value!==t)return!1;if(T.value.transform=`translate3d(${Math.round(c)}px, ${Math.round(l)}px, 0)`,T.value.left=`0px`,T.value.top=`0px`,D.value=u,d.arrow&&w.value){let{x:e,y:t}=d.arrow,n={top:`bottom`,bottom:`top`,left:`right`,right:`left`}[u.split(`-`)[0]];E.value={left:e==null?``:`${e}px`,top:t==null?``:`${t}px`,[n]:`-3px`}}return!0})}function z(){let e=y.anchorEl,t=C.value;if(!e||!t)return!1;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=y.offset??6,a=y.placement??`top`,o=n.left,s=n.top;return a===`bottom`?s=n.bottom+i:a===`left`?o=n.left-r.width-i:a===`right`?o=n.right+i:s=n.top-r.height-i,T.value.transform=`translate3d(${Math.round(Math.max(0,o))}px, ${Math.round(Math.max(0,s))}px, 0)`,T.value.left=`0px`,T.value.top=`0px`,D.value=a,E.value={},!0}t(()=>y.visible,t=>b(null,null,function*(){let n=++P;if(t){if(O.value=!1,yield e(),n!==P||!y.visible)return;if(y.anchorEl&&C.value)try{let t=y.anchorEl,r=C.value,i=t.getBoundingClientRect();if(!(yield R())||n!==P||!y.visible||y.anchorEl!==t||C.value!==r)return;let a=T.value.transform;if(y.originX!=null&&y.originY!=null){let t=Math.abs(Number(y.originX)-i.left),r=Math.abs(Number(y.originY)-i.top);if(Math.hypot(t,r)>120){if(T.value.transform=`translate3d(${Math.round(y.originX)}px, ${Math.round(y.originY)}px, 0)`,yield e(),n!==P||!y.visible||(O.value=!0,yield e(),n!==P||!y.visible))return;T.value.transform=a}else O.value=!0}else O.value=!0;yield L(()=>n===P)}catch{if(n!==P||!y.visible)return;if(O.value=z(),y.anchorEl&&C.value)try{yield L(()=>n===P)}catch{}}else O.value=!0}else O.value=!1,I()}));let B=0;return t([()=>y.anchorEl,()=>y.placement,()=>y.content],()=>b(null,null,function*(){let t=++B;if(y.visible&&y.anchorEl&&C.value){if(yield e(),t!==B||!y.visible||!y.anchorEl||!C.value)return;try{let e=yield R();if(t!==B||!y.visible||!y.anchorEl||!C.value)return;e||z()}catch{z()}yield L(()=>t===B)}})),l(()=>{P+=1,I()}),(e,t)=>(n(),s(o,{to:`body`},[c(`div`,{class:m([`markstream-vue`,{dark:g.isDark}])},[i(d,{name:`tooltip`,appear:``},{default:p(()=>[r(c(`div`,{id:y.id,ref_key:`tooltip`,ref:C,style:u({position:`fixed`,left:T.value.left,top:T.value.top,transform:T.value.transform,visibility:O.value?`visible`:`hidden`,pointerEvents:O.value?void 0:`none`}),class:`tooltip-element`,role:`tooltip`},[_(h(g.content)+` `,1),c(`div`,{ref_key:`arrowEl`,ref:w,class:`tooltip-arrow`,"data-placement":D.value,style:u(E.value)},null,12,S)],12,x),[[a,g.visible]])]),_:1})],2)]))}}),[[`__scopeId`,`data-v-c606ee4c`]]);export{C as default};
\ No newline at end of file
diff --git a/apps/pythinker-code/dist-web/assets/index-CIrZXSM-.js b/apps/pythinker-code/dist-web/assets/index-2zSxMdPb.js
similarity index 82%
rename from apps/pythinker-code/dist-web/assets/index-CIrZXSM-.js
rename to apps/pythinker-code/dist-web/assets/index-2zSxMdPb.js
index ecdd6233b..02833d06d 100644
--- a/apps/pythinker-code/dist-web/assets/index-CIrZXSM-.js
+++ b/apps/pythinker-code/dist-web/assets/index-2zSxMdPb.js
@@ -1,4 +1,4 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DesignSystemView-CaJPKGCg.js","assets/vue.runtime.esm-bundler-Cwbj1t-C.js","assets/chunk-QTnfLwEv.js","assets/DesignSystemView-BKLoAAV8.css","assets/mhchem-CCsrOXlE.js","assets/katex-BMCG0xok.js","assets/mermaid.core-D-hNgJPv.js","assets/preload-helper-zJ_50EbN.js","assets/chunk-PWAF6VOD-D9eOryqj.js","assets/src-Cn6kALDM.js","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/chunk-DU6HZSFF-B78kfBb6.js","assets/purify.es-F_7NWVtX.js","assets/chunk-75Z2AOVW-CAoob5DH.js","assets/dist-lRkD-JPF.js","assets/chunk-GMAD6QVW-dCDLGP3F.js","assets/chunk-2E4U76K2-DSYv76d-.js","assets/graphlib-B8gBHxth.js","assets/chunk-4HAMMTFA-Dlc4jvjp.js","assets/chunk-P2QGCYS3-BTLpY7ks.js","assets/rough.esm-CSKSodPl.js","assets/chunk-GVQU2GXP-Ddvf-Y11.js","assets/chunk-L3NEJ4N5-BKsN7TKH.js","assets/chunk-OSK3NFVY-ZXiPE9OQ.js","assets/line-BbuATs2H.js","assets/path-BWPyau1x.js","assets/array-BifhSqXX.js","assets/chunk-CLGD4ZFX-BVZ8CvLY.js","assets/chunk-LNGE3PJU-OosUmKKA.js","assets/chunk-TLUHSLCS-B1Sp0tTt.js","assets/Tooltip-DbjeYWS5.js","assets/CodeBlockNode-BscDteEG.js","assets/index7-pWd8I70s.js","assets/index6-CmbcA3ap.js","assets/index5-DnCMqCxw.js","assets/index11-CUNXwyvL.js","assets/index10-GMiYl4V4.js","assets/index8-wWmUQ9CO.js","assets/index3-CeHHGRW3.js","assets/index4-Gxd-bmd4.js","assets/index9-C8yZCmv2.js","assets/editor.main-nZY5Vq00.js","assets/editor.api2-DVs509bq.js","assets/editor-D_FpifaX.css","assets/workers-CzVdMsP_.js","assets/monaco.contribution-C71ieqbT.js","assets/dist-1YXee3Wk.js","assets/dist-3s__bTmB.js"])))=>i.map(i=>d[i]);
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DesignSystemView-wQIG8pdq.js","assets/vue.runtime.esm-bundler-Cwbj1t-C.js","assets/chunk-QTnfLwEv.js","assets/DesignSystemView-BKLoAAV8.css","assets/mhchem-CCsrOXlE.js","assets/katex-BMCG0xok.js","assets/mermaid.core-D-hNgJPv.js","assets/preload-helper-zJ_50EbN.js","assets/chunk-PWAF6VOD-D9eOryqj.js","assets/src-Cn6kALDM.js","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/chunk-DU6HZSFF-B78kfBb6.js","assets/purify.es-F_7NWVtX.js","assets/chunk-75Z2AOVW-CAoob5DH.js","assets/dist-lRkD-JPF.js","assets/chunk-GMAD6QVW-dCDLGP3F.js","assets/chunk-2E4U76K2-DSYv76d-.js","assets/graphlib-B8gBHxth.js","assets/chunk-4HAMMTFA-Dlc4jvjp.js","assets/chunk-P2QGCYS3-BTLpY7ks.js","assets/rough.esm-CSKSodPl.js","assets/chunk-GVQU2GXP-Ddvf-Y11.js","assets/chunk-L3NEJ4N5-BKsN7TKH.js","assets/chunk-OSK3NFVY-ZXiPE9OQ.js","assets/line-BbuATs2H.js","assets/path-BWPyau1x.js","assets/array-BifhSqXX.js","assets/chunk-CLGD4ZFX-BVZ8CvLY.js","assets/chunk-LNGE3PJU-OosUmKKA.js","assets/chunk-TLUHSLCS-B1Sp0tTt.js","assets/Tooltip-BTEezncw.js","assets/CodeBlockNode-Dl1x84a-.js","assets/index7-Dix_Wqfv.js","assets/index6-DAHS9kLT.js","assets/index5-DvRmF6YX.js","assets/index11-ERJjbBp8.js","assets/index10-DTgTZuhL.js","assets/index8-BRlIM-qm.js","assets/index3-_hquim6-.js","assets/index4-CG0YzEMP.js","assets/index9-BuL_us6D.js","assets/editor.main-nZY5Vq00.js","assets/editor.api2-DVs509bq.js","assets/editor-D_FpifaX.css","assets/workers-CzVdMsP_.js","assets/monaco.contribution-C71ieqbT.js","assets/dist-1YXee3Wk.js","assets/dist-3s__bTmB.js"])))=>i.map(i=>d[i]);
 import{n as e}from"./chunk-QTnfLwEv.js";import{$ as t,A as n,B as r,C as i,D as a,E as o,G as s,I as c,J as l,K as u,L as d,M as f,N as p,O as m,P as h,Q as g,R as _,S as v,T as y,U as b,V as x,W as S,X as C,Y as w,Z as T,_ as E,a as D,at as O,b as k,c as A,ct as j,d as M,et as N,f as ee,g as P,h as F,i as I,it as te,j as ne,k as re,l as ie,lt as ae,m as L,n as oe,nt as R,o as se,ot as z,p as ce,q as B,r as le,rt as ue,s as de,st as V,tt as fe,u as H,ut as U,v as W,w as G,x as K,y as pe,z as me}from"./vue.runtime.esm-bundler-Cwbj1t-C.js";import{t as he}from"./preload-helper-zJ_50EbN.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var ge=typeof window<`u`,_e=(e,t=!1)=>t?Symbol.for(e):Symbol(e),ve=(e,t,n)=>ye({l:e,k:t,s:n}),ye=e=>JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`).replace(/\u0027/g,`\\u0027`),be=e=>typeof e==`number`&&isFinite(e),xe=e=>Le(e)===`[object Date]`,Se=e=>Le(e)===`[object RegExp]`,Ce=e=>Re(e)&&Object.keys(e).length===0,we=Object.assign,Te=Object.create,Ee=(e=null)=>Te(e),De,Oe=()=>De||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:Ee(),ke=Object.prototype.hasOwnProperty;function Ae(e,t){return ke.call(e,t)}var je=Array.isArray,Me=e=>typeof e==`function`,q=e=>typeof e==`string`,Ne=e=>typeof e==`boolean`,Pe=e=>typeof e==`object`&&!!e,Fe=e=>Pe(e)&&Me(e.then)&&Me(e.catch),Ie=Object.prototype.toString,Le=e=>Ie.call(e),Re=e=>Le(e)===`[object Object]`,ze=e=>e==null?``:je(e)||Re(e)&&e.toString===Ie?JSON.stringify(e,null,2):String(e);function Be(e,t=``){return e.reduce((e,n,r)=>r===0?e+n:e+t+n,``)}function Ve(e,t){typeof console<`u`&&(console.warn(`[intlify] `+e),t&&console.warn(t.stack))}function He(e){return e.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/\//g,`/`).replace(/=/g,`=`)}function Ue(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(//g,`>`)}var We=/^javascript:/i,Ge=/^(?:href|src|action|formaction)$/i,Ke=/&#(?:x([0-9a-f]+)|(\d+));?/gi,qe=/&(?:Tab|NewLine);/g,Je=/:?/gi,Ye=/[\u0000-\u0020\u007f-\u009f]/g,Xe=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Ze=/(^|[\s"'<>/])on(\w+\s*=)/gi,Qe=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function $e(e,t,n){let r=t||n;if(!r)return e;let i=Number.parseInt(r,t?16:10);return i<=127?String.fromCharCode(i):e}function et(e){let t=e.replace(Ke,$e).replace(qe,``).replace(Je,`:`).replace(Ye,``);return We.test(t)}function tt(e){let t=/url\s*\(/gi,n=``,r=0,i;for(;(i=t.exec(e))!==null;){let a=i.index,o=t.lastIndex-1,s=o+1,c=1,l=null;for(;s`${t}="${nt(t,n)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(e,t,n)=>`${t}='${nt(t,n)}'`),Xe.test(e)&&(e=e.replace(Ze,`$1on$2`)),e=e.replace(Qe,(e,t,n,r)=>et(r)?`${t}${n}about:blank`:e),e}var it=e=>!Pe(e)||je(e);function at(e,t){if(it(e)||it(t))throw Error(`Invalid value`);let n=[{src:e,des:t}];for(;n.length;){let{src:e,des:t}=n.pop();Object.keys(e).forEach(r=>{if(r===`__proto__`)return;let i=e[r];if(je(i)){let e=[];e.length=i.length,t[r]=e,n.push({src:i,des:e})}else Pe(i)?((!Pe(t[r])||je(t[r]))&&(t[r]=Ee()),n.push({src:i,des:t[r]})):t[r]=i})}}function ot(e,t,n){return{line:e,column:t,offset:n}}function st(e,t,n){let r={start:e,end:t};return n!=null&&(r.source=n),r}var ct={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16};ct.EXPECTED_TOKEN,ct.INVALID_TOKEN_IN_PLACEHOLDER,ct.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,ct.UNKNOWN_ESCAPE_SEQUENCE,ct.INVALID_UNICODE_ESCAPE_SEQUENCE,ct.UNBALANCED_CLOSING_BRACE,ct.UNTERMINATED_CLOSING_BRACE,ct.EMPTY_PLACEHOLDER,ct.NOT_ALLOW_NEST_PLACEHOLDER,ct.INVALID_LINKED_FORMAT,ct.MUST_HAVE_MESSAGES_IN_PLURAL,ct.UNEXPECTED_EMPTY_LINKED_MODIFIER,ct.UNEXPECTED_EMPTY_LINKED_KEY,ct.UNEXPECTED_LEXICAL_ANALYSIS,ct.UNHANDLED_CODEGEN_NODE_TYPE,ct.UNHANDLED_MINIFIER_NODE_TYPE;function lt(e,t,n={}){let{domain:r,messages:i,args:a}=n,o=SyntaxError(String(e));return o.code=e,t&&(o.location=t),o.domain=r,o}function ut(e){throw e}var dt=` `,ft=`\r`,pt=`
 `,mt=`\u2028`,ht=`\u2029`;function gt(e){let t=e,n=0,r=1,i=1,a=0,o=e=>t[e]===ft&&t[e+1]===pt,s=e=>t[e]===pt,c=e=>t[e]===ht,l=e=>t[e]===mt,u=e=>o(e)||s(e)||c(e)||l(e),d=()=>n,f=()=>r,p=()=>i,m=()=>a,h=e=>o(e)||c(e)||l(e)?pt:t[e],g=()=>h(n),_=()=>h(n+a);function v(){return a=0,u(n)&&(r++,i=0),o(n)&&n++,n++,i++,t[n]}function y(){return o(n+a)&&a++,a++,t[n+a]}function b(){n=0,r=1,i=1,a=0}function x(e=0){a=e}function S(){let e=n+a;for(;e!==n;)v();a=0}return{index:d,line:f,column:p,peekOffset:m,charAt:h,currentChar:g,currentPeek:_,next:v,peek:y,reset:b,resetPeek:x,skipToPeek:S}}var _t=void 0,vt=`'`,yt=`tokenizer`;function bt(e,t={}){let n=t.location!==!1,r=gt(e),i=()=>r.index(),a=()=>ot(r.line(),r.column(),r.index()),o=a(),s=i(),c={currentType:13,offset:s,startLoc:o,endLoc:o,lastType:13,lastOffset:s,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:``},l=()=>c,{onError:u}=t;function d(e,t,r,...i){let a=l();t.column+=r,t.offset+=r,u&&u(lt(e,n?st(a.startLoc,t):null,{domain:yt,args:i}))}function f(e,t,r){e.endLoc=a(),e.currentType=t;let i={type:t};return n&&(i.loc=st(e.startLoc,e.endLoc)),r!=null&&(i.value=r),i}let p=e=>f(e,13);function m(e,t){return e.currentChar()===t?(e.next(),t):(d(ct.EXPECTED_TOKEN,a(),0,t),``)}function h(e){let t=``;for(;e.currentPeek()===dt||e.currentPeek()===pt;)t+=e.currentPeek(),e.peek();return t}function g(e){let t=h(e);return e.skipToPeek(),t}function _(e){if(e===_t)return!1;let t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t===95}function v(e){if(e===_t)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57}function y(e,t){let{currentType:n}=t;if(n!==2)return!1;h(e);let r=_(e.currentPeek());return e.resetPeek(),r}function b(e,t){let{currentType:n}=t;if(n!==2)return!1;h(e);let r=v(e.currentPeek()===`-`?e.peek():e.currentPeek());return e.resetPeek(),r}function x(e,t){let{currentType:n}=t;if(n!==2)return!1;h(e);let r=e.currentPeek()===vt;return e.resetPeek(),r}function S(e,t){let{currentType:n}=t;if(n!==7)return!1;h(e);let r=e.currentPeek()===`.`;return e.resetPeek(),r}function C(e,t){let{currentType:n}=t;if(n!==8)return!1;h(e);let r=_(e.currentPeek());return e.resetPeek(),r}function w(e,t){let{currentType:n}=t;if(!(n===7||n===11))return!1;h(e);let r=e.currentPeek()===`:`;return e.resetPeek(),r}function T(e,t){let{currentType:n}=t;if(n!==9)return!1;let r=()=>{let t=e.currentPeek();return t===`{`?_(e.peek()):t===`@`||t===`|`||t===`:`||t===`.`||t===dt||!t?!1:t===pt?(e.peek(),r()):D(e,!1)},i=r();return e.resetPeek(),i}function E(e){h(e);let t=e.currentPeek()===`|`;return e.resetPeek(),t}function D(e,t=!0){let n=(t=!1,r=``)=>{let i=e.currentPeek();return i===`{`||i===`@`||!i?t:i===`|`?!(r===dt||r===pt):i===dt?(e.peek(),n(!0,dt)):i===pt?(e.peek(),n(!0,pt)):!0},r=n();return t&&e.resetPeek(),r}function O(e,t){let n=e.currentChar();if(n!==_t)return t(n)?(e.next(),n):null}function k(e){let t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||t===95||t===36}function A(e){return O(e,k)}function j(e){let t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||t===95||t===36||t===45}function M(e){return O(e,j)}function N(e){let t=e.charCodeAt(0);return t>=48&&t<=57}function ee(e){return O(e,N)}function P(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function F(e){return O(e,P)}function I(e){let t=``,n=``;for(;t=ee(e);)n+=t;return n}function te(e){let t=``;for(;;){let n=e.currentChar();if(n===`\\`){let r=e.peek();r===`{`||r===`}`||r===`@`||r===`|`||r===`\\`?(t+=n+r,e.next(),e.next()):(e.resetPeek(),t+=n,e.next())}else if(n===`{`||n===`}`||n===`@`||n===`|`||!n)break;else if(n===dt||n===pt)if(D(e))t+=n,e.next();else if(E(e))break;else t+=n,e.next();else t+=n,e.next()}return t}function ne(e){g(e);let t=``,n=``;for(;t=M(e);)n+=t;let r=e.currentChar();if(r&&r!==`}`&&r!==_t&&r!==dt&&r!==pt&&r!==` `){let t=se(e);return d(ct.INVALID_TOKEN_IN_PLACEHOLDER,a(),0,n+t),n+t}return e.currentChar()===_t&&d(ct.UNTERMINATED_CLOSING_BRACE,a(),0),n}function re(e){g(e);let t=``;return e.currentChar()===`-`?(e.next(),t+=`-${I(e)}`):t+=I(e),e.currentChar()===_t&&d(ct.UNTERMINATED_CLOSING_BRACE,a(),0),t}function ie(e){return e!==vt&&e!==pt}function ae(e){g(e),m(e,`'`);let t=``,n=``;for(;t=O(e,ie);)t===`\\`?n+=L(e):n+=t;let r=e.currentChar();return r===pt||r===_t?(d(ct.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,a(),0),r===pt&&(e.next(),m(e,`'`)),n):(m(e,`'`),n)}function L(e){let t=e.currentChar();switch(t){case`\\`:case`'`:return e.next(),`\\${t}`;case`u`:return oe(e,t,4);case`U`:return oe(e,t,6);default:return d(ct.UNKNOWN_ESCAPE_SEQUENCE,a(),0,t),``}}function oe(e,t,n){m(e,t);let r=``;for(let i=0;i{let r=e.currentChar();return r===`{`||r===`@`||r===`|`||r===`(`||r===`)`||!r||r===dt?n:(n+=r,e.next(),t(n))};return t(``)}function B(e){g(e);let t=m(e,`|`);return g(e),t}function le(e,t){let n=null;switch(e.currentChar()){case`{`:return t.braceNest>=1&&d(ct.NOT_ALLOW_NEST_PLACEHOLDER,a(),0),e.next(),n=f(t,2,`{`),g(e),t.braceNest++,n;case`}`:return t.braceNest>0&&t.currentType===2&&d(ct.EMPTY_PLACEHOLDER,a(),0),e.next(),n=f(t,3,`}`),t.braceNest--,t.braceNest>0&&g(e),t.inLinked&&t.braceNest===0&&(t.inLinked=!1),n;case`@`:return t.braceNest>0&&d(ct.UNTERMINATED_CLOSING_BRACE,a(),0),n=ue(e,t)||p(t),t.braceNest=0,n;default:{let r=!0,i=!0,o=!0;if(E(e))return t.braceNest>0&&d(ct.UNTERMINATED_CLOSING_BRACE,a(),0),n=f(t,1,B(e)),t.braceNest=0,t.inLinked=!1,n;if(t.braceNest>0&&(t.currentType===4||t.currentType===5||t.currentType===6))return d(ct.UNTERMINATED_CLOSING_BRACE,a(),0),t.braceNest=0,de(e,t);if(r=y(e,t))return n=f(t,4,ne(e)),g(e),n;if(i=b(e,t))return n=f(t,5,re(e)),g(e),n;if(o=x(e,t))return n=f(t,6,ae(e)),g(e),n;if(!r&&!i&&!o)return n=f(t,12,se(e)),d(ct.INVALID_TOKEN_IN_PLACEHOLDER,a(),0,n.value),g(e),n;break}}return n}function ue(e,t){let{currentType:n}=t,r=null,i=e.currentChar();switch((n===7||n===8||n===11||n===9)&&(i===pt||i===dt)&&d(ct.INVALID_LINKED_FORMAT,a(),0),i){case`@`:return e.next(),r=f(t,7,`@`),t.inLinked=!0,r;case`.`:return g(e),e.next(),f(t,8,`.`);case`:`:return g(e),e.next(),f(t,9,`:`);default:return E(e)?(r=f(t,1,B(e)),t.braceNest=0,t.inLinked=!1,r):S(e,t)||w(e,t)?(g(e),ue(e,t)):C(e,t)?(g(e),f(t,11,z(e))):T(e,t)?(g(e),i===`{`?le(e,t)||r:f(t,10,ce(e))):(n===7&&d(ct.INVALID_LINKED_FORMAT,a(),0),t.braceNest=0,t.inLinked=!1,de(e,t))}}function de(e,t){let n={type:13};if(t.braceNest>0)return le(e,t)||p(t);if(t.inLinked)return ue(e,t)||p(t);switch(e.currentChar()){case`{`:return le(e,t)||p(t);case`}`:return d(ct.UNBALANCED_CLOSING_BRACE,a(),0),e.next(),f(t,3,`}`);case`@`:return ue(e,t)||p(t);default:if(E(e))return n=f(t,1,B(e)),t.braceNest=0,t.inLinked=!1,n;if(D(e))return f(t,0,te(e));break}return n}function V(){let{currentType:e,offset:t,startLoc:n,endLoc:o}=c;return c.lastType=e,c.lastOffset=t,c.lastStartLoc=n,c.lastEndLoc=o,c.offset=i(),c.startLoc=a(),r.currentChar()===_t?f(c,13):de(r,c)}return{nextToken:V,currentOffset:i,currentPosition:a,context:l}}var xt=`parser`,St=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g,Ct=/\\([\\@{}|])/g;function wt(e,t){return t}function Tt(e,t,n){switch(e){case`\\\\`:return`\\`;case`\\'`:return`'`;default:{let e=parseInt(t||n,16);return e<=55295||e>=57344?String.fromCodePoint(e):`�`}}}function Et(e={}){let t=e.location!==!1,{onError:n}=e;function r(e,r,i,a,...o){let s=e.currentPosition();s.offset+=a,s.column+=a,n&&n(lt(r,t?st(i,s):null,{domain:xt,args:o}))}function i(e,n,r){let i={type:e};return t&&(i.start=n,i.end=n,i.loc={start:r,end:r}),i}function a(e,n,r,i){t&&(e.end=n,e.loc&&(e.loc.end=r))}function o(e,t){let n=e.context(),r=i(3,n.offset,n.startLoc);return r.value=t.replace(Ct,wt),a(r,e.currentOffset(),e.currentPosition()),r}function s(e,t){let{lastOffset:n,lastStartLoc:r}=e.context(),o=i(5,n,r);return o.index=parseInt(t,10),e.nextToken(),a(o,e.currentOffset(),e.currentPosition()),o}function c(e,t){let{lastOffset:n,lastStartLoc:r}=e.context(),o=i(4,n,r);return o.key=t,e.nextToken(),a(o,e.currentOffset(),e.currentPosition()),o}function l(e,t){let{lastOffset:n,lastStartLoc:r}=e.context(),o=i(9,n,r);return o.value=t.replace(St,Tt),e.nextToken(),a(o,e.currentOffset(),e.currentPosition()),o}function u(e){let t=e.nextToken(),n=e.context(),{lastOffset:o,lastStartLoc:s}=n,c=i(8,o,s);return t.type===11?(t.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,n.lastStartLoc,0,Dt(t)),c.value=t.value||``,a(c,e.currentOffset(),e.currentPosition()),{node:c}):(r(e,ct.UNEXPECTED_EMPTY_LINKED_MODIFIER,n.lastStartLoc,0),c.value=``,a(c,o,s),{nextConsumeToken:t,node:c})}function d(e,t){let n=e.context(),r=i(7,n.offset,n.startLoc);return r.value=t,a(r,e.currentOffset(),e.currentPosition()),r}function f(e){let t=e.context(),n=i(6,t.offset,t.startLoc),o=e.nextToken();if(o.type===8){let t=u(e);n.modifier=t.node,o=t.nextConsumeToken||e.nextToken()}switch(o.type!==9&&r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(o)),o=e.nextToken(),o.type===2&&(o=e.nextToken()),o.type){case 10:o.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(o)),n.key=d(e,o.value||``);break;case 4:o.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(o)),n.key=c(e,o.value||``);break;case 5:o.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(o)),n.key=s(e,o.value||``);break;case 6:o.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(o)),n.key=l(e,o.value||``);break;default:{r(e,ct.UNEXPECTED_EMPTY_LINKED_KEY,t.lastStartLoc,0);let s=e.context(),c=i(7,s.offset,s.startLoc);return c.value=``,a(c,s.offset,s.startLoc),n.key=c,a(n,s.offset,s.startLoc),{nextConsumeToken:o,node:n}}}return a(n,e.currentOffset(),e.currentPosition()),{node:n}}function p(e){let t=e.context(),n=i(2,t.currentType===1?e.currentOffset():t.offset,t.currentType===1?t.endLoc:t.startLoc);n.items=[];let u=null;do{let i=u||e.nextToken();switch(u=null,i.type){case 0:i.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(i)),n.items.push(o(e,i.value||``));break;case 5:i.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(i)),n.items.push(s(e,i.value||``));break;case 4:i.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(i)),n.items.push(c(e,i.value||``));break;case 6:i.value??r(e,ct.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Dt(i)),n.items.push(l(e,i.value||``));break;case 7:{let t=f(e);n.items.push(t.node),u=t.nextConsumeToken||null;break}}}while(t.currentType!==13&&t.currentType!==1);return a(n,t.currentType===1?t.lastOffset:e.currentOffset(),t.currentType===1?t.lastEndLoc:e.currentPosition()),n}function m(e,t,n,o){let s=e.context(),c=o.items.length===0,l=i(1,t,n);l.cases=[],l.cases.push(o);do{let t=p(e);c||=t.items.length===0,l.cases.push(t)}while(s.currentType!==13);return c&&r(e,ct.MUST_HAVE_MESSAGES_IN_PLURAL,n,0),a(l,e.currentOffset(),e.currentPosition()),l}function h(e){let t=e.context(),{offset:n,startLoc:r}=t,i=p(e);return t.currentType===13?i:m(e,n,r,i)}function g(n){let o=bt(n,we({},e)),s=o.context(),c=i(0,s.offset,s.startLoc);return t&&c.loc&&(c.loc.source=n),c.body=h(o),e.onCacheKey&&(c.cacheKey=e.onCacheKey(n)),s.currentType!==13&&r(o,ct.UNEXPECTED_LEXICAL_ANALYSIS,s.lastStartLoc,0,n[s.offset]||``),a(c,o.currentOffset(),o.currentPosition()),c}return{parse:g}}function Dt(e){if(e.type===13)return`EOF`;let t=(e.value||``).replace(/\r?\n/gu,`\\n`);return t.length>10?t.slice(0,9)+`…`:t}function Ot(e,t={}){let n={ast:e,helpers:new Set};return{context:()=>n,helper:e=>(n.helpers.add(e),e)}}function kt(e,t){for(let n=0;nNt(e)),e}function Nt(e){if(e.items.length===1){let t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{let t=[];for(let n=0;no;function c(e,t){o.code+=e}function l(e,t=!0){let n=t?r:``;c(i?n+`  `.repeat(e):n)}function u(e=!0){let t=++o.indentLevel;e&&l(t)}function d(e=!0){let t=--o.indentLevel;e&&l(t)}function f(){l(o.indentLevel)}return{context:s,push:c,indent:u,deindent:d,newline:f,helper:e=>`_${e}`,needIndent:()=>o.needIndent}}function It(e,t){let{helper:n}=e;e.push(`${n(`linked`)}(`),Bt(e,t.key),t.modifier?(e.push(`, `),Bt(e,t.modifier),e.push(`, _type`)):e.push(`, undefined, _type`),e.push(`)`)}function Lt(e,t){let{helper:n,needIndent:r}=e;e.push(`${n(`normalize`)}([`),e.indent(r());let i=t.items.length;for(let n=0;n1){e.push(`${n(`plural`)}([`),e.indent(r());let i=t.cases.length;for(let n=0;n{let n=q(t.mode)?t.mode:`normal`,r=q(t.filename)?t.filename:`message.intl`;t.sourceMap;let i=t.breakLineCode==null?n===`arrow`?`;`:`
 `:t.breakLineCode,a=t.needIndent?t.needIndent:n!==`arrow`,o=e.helpers||[],s=Ft(e,{filename:r,breakLineCode:i,needIndent:a});s.push(n===`normal`?`function __msg__ (ctx) {`:`(ctx) => {`),s.indent(a),o.length>0&&(s.push(`const { ${Be(o.map(e=>`${e}: _${e}`),`, `)} } = ctx`),s.newline()),s.push(`return `),Bt(s,e),s.deindent(a),s.push(`}`),delete e.helpers;let{code:c,map:l}=s.context();return{ast:e,code:c,map:l?l.toJSON():void 0}};function Ht(e,t={}){let n=we({},t),r=!!n.jit,i=!!n.minify,a=n.optimize==null?!0:n.optimize,o=Et(n).parse(e);return r?(a&&Mt(o),i&&Pt(o),{ast:o,code:``}):(jt(o,n),Vt(o,n))}function Ut(){typeof __INTLIFY_PROD_DEVTOOLS__!=`boolean`&&(Oe().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=`boolean`&&(Oe().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Wt(e){return Pe(e)&&en(e)===0&&(Ae(e,`b`)||Ae(e,`body`))}var Gt=[`b`,`body`];function Kt(e){return cn(e,Gt)}var qt=[`c`,`cases`];function Jt(e){return cn(e,qt,[])}var Yt=[`s`,`static`];function Xt(e){return cn(e,Yt)}var Zt=[`i`,`items`];function Qt(e){return cn(e,Zt,[])}var $t=[`t`,`type`];function en(e){return cn(e,$t)}var tn=[`v`,`value`];function nn(e,t){let n=cn(e,tn);if(n!=null)return n;throw un(t)}var rn=[`m`,`modifier`];function an(e){return cn(e,rn)}var on=[`k`,`key`];function sn(e){let t=cn(e,on);if(t)return t;throw un(6)}function cn(e,t,n){for(let n=0;nfn(t,e)}function fn(e,t){let n=Kt(t);if(n==null)throw un(0);if(en(n)===1){let t=Jt(n);return e.plural(t.reduce((t,n)=>[...t,pn(e,n)],[]))}else return pn(e,n)}function pn(e,t){let n=Xt(t);if(n!=null)return e.type===`text`?n:e.normalize([n]);{let n=Qt(t).reduce((t,n)=>[...t,mn(e,n)],[]);return e.normalize(n)}}function mn(e,t){let n=en(t);switch(n){case 3:return nn(t,n);case 9:return nn(t,n);case 4:{let r=t;if(Ae(r,`k`)&&r.k)return e.interpolate(e.named(r.k));if(Ae(r,`key`)&&r.key)return e.interpolate(e.named(r.key));throw un(n)}case 5:{let r=t;if(Ae(r,`i`)&&be(r.i))return e.interpolate(e.list(r.i));if(Ae(r,`index`)&&be(r.index))return e.interpolate(e.list(r.index));throw un(n)}case 6:{let n=t,r=an(n),i=sn(n);return e.linked(mn(e,i),r?mn(e,r):void 0,e.type)}case 7:return nn(t,n);case 8:return nn(t,n);default:throw Error(`unhandled node on format message part: ${n}`)}}var hn=e=>e,gn=Ee();function _n(e,t={}){let n=!1,r=t.onError||ut;return t.onError=e=>{n=!0,r(e)},{...Ht(e,t),detectError:n}}function vn(e,t){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&q(e)){Ne(t.warnHtmlMessage)&&t.warnHtmlMessage;let n=(t.onCacheKey||hn)(e),r=gn[n];if(r)return r;let{ast:i,detectError:a}=_n(e,{...t,location:!1,jit:!0}),o=dn(i);return a?o:gn[n]=o}else{let t=e.cacheKey;return t?gn[t]||(gn[t]=dn(e)):dn(e)}}var yn=null;function bn(e){yn=e}function xn(e,t,n){yn&&yn.emit(`i18n:init`,{timestamp:Date.now(),i18n:e,version:t,meta:n})}var Sn=Cn(`function:translate`);function Cn(e){return t=>yn&&yn.emit(e,t)}var wn={INVALID_ARGUMENT:17,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_NON_STRING_MESSAGE:20,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23};function Tn(e){return lt(e,null,void 0)}wn.INVALID_ARGUMENT,wn.INVALID_DATE_ARGUMENT,wn.INVALID_ISO_DATE_ARGUMENT,wn.NOT_SUPPORT_NON_STRING_MESSAGE,wn.NOT_SUPPORT_LOCALE_PROMISE_VALUE,wn.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION,wn.NOT_SUPPORT_LOCALE_TYPE;function En(e,t){return t.locale==null?On(e.locale):On(t.locale)}var Dn;function On(e){if(q(e))return e;if(Me(e)){if(e.resolvedOnce&&Dn!=null)return Dn;if(e.constructor.name===`Function`){let t=e();if(Fe(t))throw Tn(wn.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return Dn=t}else throw Tn(wn.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw Tn(wn.NOT_SUPPORT_LOCALE_TYPE)}function kn(e,t,n){return[...new Set([n,...je(t)?t:Pe(t)?Object.keys(t).filter(e=>e!=="default"):q(t)?[t]:[n]])]}function An(e,t,n){let r=q(n)?n:Kn,i=e,a;Pe(t)?(i.__localeChainObjectCache||=new WeakMap,a=i.__localeChainObjectCache.get(t),a||(a=new Map,i.__localeChainObjectCache.set(t,a))):(i.__localeChainCache||=new Map,a=i.__localeChainCache.get(t),a||(a=new Map,i.__localeChainCache.set(t,a)));let o=a.get(r);if(o)return o;let s=[],c=[n];for(;je(c);)c=jn(s,c,t);let l=je(t)||!Re(t)?t:t.default?t.default:null;return c=q(l)?[l]:l,je(c)&&jn(s,c,!1),a.set(r,s),s}function jn(e,t,n){let r=!0;for(let i=0;i{o===void 0?o=s:o+=s},f[1]=()=>{o!==void 0&&(t.push(o),o=void 0)},f[2]=()=>{f[0](),i++},f[3]=()=>{if(i>0)i--,r=4,f[0]();else{if(i=0,o===void 0||(o=zn(o),o===!1))return!1;f[1]()}};function p(){let t=e[n+1];if(r===5&&t===`'`||r===6&&t===`"`)return n++,s=`\\`+t,f[0](),!0}for(;r!==null;)if(n++,a=e[n],!(a===`\\`&&p())){if(c=Rn(a),d=Pn[r],l=d[c]||d.l||8,l===8||(r=l[0],l[1]!==void 0&&(u=f[l[1]],u&&(s=a,u()===!1))))return;if(r===7)return t}}var Vn=new Map;function Hn(e,t){return Pe(e)?e[t]:null}function Un(e,t){if(!Pe(e))return null;let n=Vn.get(t);if(n||(n=Bn(t),n&&Vn.set(t,n)),!n)return null;let r=n.length,i=e,a=0;for(;a`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function Jn(){return{upper:(e,t)=>t===`text`&&q(e)?e.toUpperCase():t===`vnode`&&Pe(e)&&`__v_isVNode`in e?e.children.toUpperCase():e,lower:(e,t)=>t===`text`&&q(e)?e.toLowerCase():t===`vnode`&&Pe(e)&&`__v_isVNode`in e?e.children.toLowerCase():e,capitalize:(e,t)=>t===`text`&&q(e)?qn(e):t===`vnode`&&Pe(e)&&`__v_isVNode`in e?qn(e.children):e}}var Yn;function Xn(e){Yn=e}var Zn;function Qn(e){Zn=e}var $n;function er(e){$n=e}var tr=null,nr=()=>tr,rr=null,ir=e=>{rr=e},ar=()=>rr,or=0;function sr(e={}){let t=Me(e.onWarn)?e.onWarn:Ve,n=q(e.version)?e.version:Gn,r=q(e.locale)||Me(e.locale)?e.locale:Kn,i=Me(r)?Kn:r,a=je(e.fallbackLocale)||Re(e.fallbackLocale)||q(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,o=Re(e.messages)?e.messages:cr(i),s=Re(e.datetimeFormats)?e.datetimeFormats:cr(i),c=Re(e.numberFormats)?e.numberFormats:cr(i),l=we(Ee(),e.modifiers,Jn()),u=e.pluralRules||Ee(),d=Me(e.missing)?e.missing:null,f=Ne(e.missingWarn)||Se(e.missingWarn)?e.missingWarn:!0,p=Ne(e.fallbackWarn)||Se(e.fallbackWarn)?e.fallbackWarn:!0,m=!!e.fallbackFormat,h=!!e.unresolving,g=Me(e.postTranslation)?e.postTranslation:null,_=Re(e.processor)?e.processor:null,v=Ne(e.warnHtmlMessage)?e.warnHtmlMessage:!0,y=!!e.escapeParameter,b=Me(e.messageCompiler)?e.messageCompiler:Yn,x=Me(e.messageResolver)?e.messageResolver:Zn||Hn,S=Me(e.localeFallbacker)?e.localeFallbacker:$n||kn,C=Pe(e.fallbackContext)?e.fallbackContext:void 0,w=e,T=Pe(w.__datetimeFormatters)?w.__datetimeFormatters:new Map,E=Pe(w.__numberFormatters)?w.__numberFormatters:new Map,D=Pe(w.__meta)?w.__meta:{};or++;let O={version:n,cid:or,locale:r,fallbackLocale:a,messages:o,modifiers:l,pluralRules:u,missing:d,missingWarn:f,fallbackWarn:p,fallbackFormat:m,unresolving:h,postTranslation:g,processor:_,warnHtmlMessage:v,escapeParameter:y,messageCompiler:b,messageResolver:x,localeFallbacker:S,fallbackContext:C,onWarn:t,__meta:D};return O.datetimeFormats=s,O.numberFormats=c,O.__datetimeFormatters=T,O.__numberFormatters=E,__INTLIFY_PROD_DEVTOOLS__&&xn(O,n,D),O}var cr=e=>({[e]:Ee()});function lr(e,t,n,r,i){let{missing:a,onWarn:o}=e;if(a!==null){let r=a(e,n,t,i);return q(r)?r:t}else return t}function ur(e,t){let n=e;Pe(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function dr(e,t,n){ur(e,n),e.fallbackContext&&ur(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function fr(e,t){return e===t?!1:e.split(`-`)[0]===t.split(`-`)[0]}function pr(e,t){let n=t.indexOf(e);if(n===-1)return!1;for(let r=n+1;r{r.includes(e)?s[e]=i[e]:t[e]=i[e]}),q(a)?t.locale=a:Re(a)&&(s=a),Re(o)&&(s=o),s}var vr=typeof Intl<`u`;vr&&Intl.DateTimeFormat,vr&&Intl.NumberFormat;function yr(e,...t){let{datetimeFormats:n,unresolving:r,onWarn:i}=e,{__datetimeFormatters:a}=e;if(!q(t[0])&&!xe(t[0])&&!be(t[0]))return``;let[o,s,c,l]=xr(...t),u=Ne(c.missingWarn)?c.missingWarn:e.missingWarn,d=Ne(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,f=!!c.part,p=En(e,c);if(!q(o)||o===``){let e=new Intl.DateTimeFormat(p.replace(/!/g,``),l);return f?e.formatToParts(s):e.format(s)}let m=mr(e,o,p,n,u,d,`datetime format`);if(!q(m))return r?-1:o;let h=n[m][o],g=hr(m,o,l),_=a.get(g);return _||(_=new Intl.DateTimeFormat(m,we({},h,l)),a.set(g,_)),f?_.formatToParts(s):_.format(s)}var br=[`localeMatcher`,`weekday`,`era`,`year`,`month`,`day`,`hour`,`minute`,`second`,`timeZoneName`,`formatMatcher`,`hour12`,`timeZone`,`dateStyle`,`timeStyle`,`calendar`,`dayPeriod`,`numberingSystem`,`hourCycle`,`fractionalSecondDigits`];function xr(...e){let[t]=e,n=Ee(),r=Ee(),i;if(q(t)){let e=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!e)throw Tn(wn.INVALID_ISO_DATE_ARGUMENT);let n=e[3]?e[3].trim().startsWith(`T`)?`${e[1].trim()}${e[3].trim()}`:`${e[1].trim()}T${e[3].trim()}`:e[1].trim();i=new Date(n);try{i.toISOString()}catch{throw Tn(wn.INVALID_ISO_DATE_ARGUMENT)}}else if(xe(t)){if(isNaN(t.getTime()))throw Tn(wn.INVALID_DATE_ARGUMENT);i=t}else if(be(t))i=t;else throw Tn(wn.INVALID_ARGUMENT);let a=_r(e,n,r,br);return[n.key||``,i,n,a]}function Sr(e,t,n){gr(e.__datetimeFormatters,t,n)}function Cr(e,...t){let{numberFormats:n,unresolving:r,onWarn:i}=e,{__numberFormatters:a}=e;if(!be(t[0]))return``;let[o,s,c,l]=Tr(...t),u=Ne(c.missingWarn)?c.missingWarn:e.missingWarn,d=Ne(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,f=!!c.part,p=En(e,c);if(!q(o)||o===``){let e=new Intl.NumberFormat(p.replace(/!/g,``),l);return f?e.formatToParts(s):e.format(s)}let m=mr(e,o,p,n,u,d,`number format`);if(!q(m))return r?-1:o;let h=n[m][o],g=hr(m,o,l),_=a.get(g);return _||(_=new Intl.NumberFormat(m,we({},h,l)),a.set(g,_)),f?_.formatToParts(s):_.format(s)}var wr=[`localeMatcher`,`style`,`currency`,`currencyDisplay`,`currencySign`,`useGrouping`,`minimumIntegerDigits`,`minimumFractionDigits`,`maximumFractionDigits`,`minimumSignificantDigits`,`maximumSignificantDigits`,`compactDisplay`,`notation`,`signDisplay`,`unit`,`unitDisplay`,`roundingMode`,`roundingPriority`,`roundingIncrement`,`trailingZeroDisplay`];function Tr(...e){let[t]=e,n=Ee(),r=Ee();if(!be(t))throw Tn(wn.INVALID_ARGUMENT);let i=t,a=_r(e,n,r,wr);return[n.key||``,i,n,a]}function Er(e,t,n){gr(e.__numberFormatters,t,n)}var Dr=e=>e,Or=e=>``,kr=`text`,Ar=e=>e.length===0?``:Be(e),jr=ze;function Mr(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function Nr(e){let t=be(e.pluralIndex)?e.pluralIndex:-1;return be(e.named?.count)?e.named.count:be(e.named?.n)?e.named.n:t}function Pr(e={}){let t=e.locale,n=Nr(e),r=q(t)&&Me(e.pluralRules?.[t])?e.pluralRules[t]:Mr,i=r===Mr?void 0:Mr,a=e=>e[r(n,e.length,i)],o=e.list||[],s=e=>o[e],c=e.named||Ee();be(e.pluralIndex)&&(c.count||=e.pluralIndex,c.n||=e.pluralIndex);let l=e=>c[e];function u(t,n){return(Me(e.messages)?e.messages(t,!!n):Pe(e.messages)?e.messages[t]:!1)||(e.parent?e.parent.message(t):Or)}let d=t=>e.modifiers?e.modifiers[t]:Dr,f=Me(e.processor?.normalize)?e.processor.normalize:Ar,p=Me(e.processor?.interpolate)?e.processor.interpolate:jr,m={list:s,named:l,plural:a,linked:(e,...t)=>{let[n,r]=t,i=`text`,a=``;t.length===1?Pe(n)?(a=n.modifier||a,i=n.type||i):q(n)&&(a=n||a):t.length===2&&(q(n)&&(a=n||a),q(r)&&(i=r||i));let o=u(e,!0)(m),s=o===``||o===void 0?e:o,c=i===`vnode`&&je(s)&&a?s[0]:s;return a?d(a)(c,i):c},message:u,type:q(e.processor?.type)?e.processor.type:kr,interpolate:p,normalize:f,values:we(Ee(),o,c)};return m}var Fr=()=>``,Ir=e=>Me(e);function Lr(e,...t){let{fallbackFormat:n,postTranslation:r,unresolving:i,messageCompiler:a,fallbackLocale:o,messages:s}=e,[c,l]=Hr(...t),u=Ne(l.missingWarn)?l.missingWarn:e.missingWarn,d=Ne(l.fallbackWarn)?l.fallbackWarn:e.fallbackWarn,f=Ne(l.escapeParameter)?l.escapeParameter:e.escapeParameter,p=!!l.resolvedMessage,m=q(l.default)||Ne(l.default)?Ne(l.default)?a?c:()=>c:l.default:n?a?c:()=>c:null,h=n||m!=null&&(q(m)||Me(m)),g=En(e,l);f&&Rr(l);let[_,v,y]=p?[c,g,s[g]||Ee()]:zr(e,c,g,o,d,u),b=_,x=c;if(!p&&!(q(b)||Wt(b)||Ir(b))&&h&&(b=m,x=b),!p&&(!(q(b)||Wt(b)||Ir(b))||!q(v)))return i?-1:c;let S=!1,C=Ir(b)?b:Br(e,c,v,b,x,()=>{S=!0});if(S)return b;let w=Vr(e,C,Pr(Wr(e,v,y,l))),T=r?r(w,c):w;if(f&&q(T)&&(T=rt(T)),__INTLIFY_PROD_DEVTOOLS__){let t={timestamp:Date.now(),key:q(c)?c:Ir(b)?b.key:``,locale:v||(Ir(b)?b.locale:``),format:q(b)?b:Ir(b)?b.source:``,message:T};t.meta=we({},e.__meta,nr()||{}),Sn(t)}return T}function Rr(e){je(e.list)?e.list=e.list.map(e=>q(e)?He(e):e):Pe(e.named)&&Object.keys(e.named).forEach(t=>{q(e.named[t])&&(e.named[t]=He(e.named[t]))})}function zr(e,t,n,r,i,a){let{messages:o,onWarn:s,messageResolver:c,localeFallbacker:l}=e,u=l(e,r,n),d=Ee(),f,p=null;for(let n=0;nr);return e.locale=n,e.key=t,e}let c=o(r,Ur(e,n,i,r,s,a));return c.locale=n,c.key=t,c.source=r,c}function Vr(e,t,n){return t(n)}function Hr(...e){let[t,n,r]=e,i=Ee();if(!q(t)&&!be(t)&&!Ir(t)&&!Wt(t))throw Tn(wn.INVALID_ARGUMENT);let a=be(t)?String(t):(Ir(t),t);return be(n)?i.plural=n:q(n)?i.default=n:Re(n)&&!Ce(n)?i.named=n:je(n)&&(i.list=n),be(r)?i.plural=r:q(r)?i.default=r:Re(r)&&we(i,r),[a,i]}function Ur(e,t,n,r,i,a){return{locale:t,key:n,warnHtmlMessage:i,onError:e=>{throw a&&a(e),e},onCacheKey:e=>ve(t,n,e)}}function Wr(e,t,n,r){let{modifiers:i,pluralRules:a,messageResolver:o,fallbackLocale:s,fallbackWarn:c,missingWarn:l,fallbackContext:u}=e,d={locale:t,modifiers:i,pluralRules:a,messages:(r,i)=>{let a=o(n,r);if(a==null&&(u||i)){let[n,,i]=zr(u||e,r,t,s,c,l);a=n??o(i,r)}if(q(a)||Wt(a)){let n=!1,i=Br(e,r,t,a,r,()=>{n=!0});return n?Fr:i}else if(Ir(a))return a;else return Fr}};return e.processor&&(d.processor=e.processor),r.list&&(d.list=r.list),r.named&&(d.named=r.named),be(r.plural)&&(d.pluralIndex=r.plural),d}Ut();var Gr=`11.4.12`;function Kr(){typeof __VUE_I18N_FULL_INSTALL__!=`boolean`&&(Oe().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!=`boolean`&&(Oe().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=`boolean`&&(Oe().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!=`boolean`&&(Oe().__INTLIFY_PROD_DEVTOOLS__=!1)}var qr={UNEXPECTED_RETURN_TYPE:24,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:30,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_COMPATIBLE_LEGACY_VUE_I18N:33,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Jr(e,...t){return lt(e,null,void 0)}qr.UNEXPECTED_RETURN_TYPE,qr.INVALID_ARGUMENT,qr.MUST_BE_CALL_SETUP_TOP,qr.NOT_INSTALLED,qr.UNEXPECTED_ERROR,qr.REQUIRED_VALUE,qr.INVALID_VALUE,qr.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN,qr.NOT_INSTALLED_WITH_PROVIDE,qr.NOT_COMPATIBLE_LEGACY_VUE_I18N,qr.NOT_AVAILABLE_COMPOSITION_IN_LEGACY;var Yr=_e(`__translateVNode`),Xr=_e(`__datetimeParts`),Zr=_e(`__numberParts`),Qr=_e(`__setPluralRules`);_e(`__intlifyMeta`);var $r=_e(`__injectWithOption`),ei=_e(`__dispose`),ti={FALLBACK_TO_ROOT:10,NOT_FOUND_PARENT_SCOPE:11,IGNORE_OBJ_FLATTEN:12,DEPRECATE_LEGACY_MODE:13,DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE:14,DUPLICATE_USE_I18N_CALLING:15};ti.FALLBACK_TO_ROOT,ti.NOT_FOUND_PARENT_SCOPE,ti.IGNORE_OBJ_FLATTEN,ti.DEPRECATE_LEGACY_MODE,ti.DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE,ti.DUPLICATE_USE_I18N_CALLING;var ni=null;{let e=Oe().__VUE_INSTANCE_SETTERS__;je(e)&&e.push(e=>{ni=e})}function ri(e){if(!Pe(e)||Wt(e))return e;for(let t in e)if(Ae(e,t))if(!t.includes(`.`))Pe(e[t])&&ri(e[t]);else{let n=t.split(`.`),r=n.length-1,i=e,a=!1;for(let e=0;e{if(`locale`in e&&`resource`in e){let{locale:t,resource:n}=e;t?(o[t]=o[t]||Ee(),at(n,o[t])):at(n,o)}else q(e)&&at(JSON.parse(e),o)}),i==null&&a)for(let e in o)Ae(o,e)&&ri(o[e]);return o}function ai(e){return e.type}function oi(e,t,n){let r=Pe(t.messages)?t.messages:Ee();`__i18nGlobal`in n&&(r=ii(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));let i=Object.keys(r);if(i.length&&i.forEach(t=>{e.mergeLocaleMessage(t,r[t])}),Pe(t.datetimeFormats)){let n=Object.keys(t.datetimeFormats);n.length&&n.forEach(n=>{e.mergeDateTimeFormat(n,t.datetimeFormats[n])})}if(Pe(t.numberFormats)){let n=Object.keys(t.numberFormats);n.length&&n.forEach(n=>{e.mergeNumberFormat(n,t.numberFormats[n])})}}function si(e){return v(ce,null,e,0)}function ci(){return ni??y()}var li=()=>[],ui=()=>!1,di=0;function fi(e){return((t,n,r,i)=>e(n,r,ci()||void 0,i))}function pi(e={}){let{__root:t,__injectWithOption:n}=e,r=t===void 0,i=e.flatJson,a=ge?R:ue,o=Ne(e.inheritLocale)?e.inheritLocale:!0,c=a(t&&o?t.locale.value:q(e.locale)?e.locale:Kn),l=a(t&&o?t.fallbackLocale.value:q(e.fallbackLocale)||je(e.fallbackLocale)||Re(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:c.value),u=a(ii(c.value,e)),d=a(Re(e.datetimeFormats)?e.datetimeFormats:{[c.value]:{}}),f=a(Re(e.numberFormats)?e.numberFormats:{[c.value]:{}}),p=t?t.missingWarn:Ne(e.missingWarn)||Se(e.missingWarn)?e.missingWarn:!0,m=t?t.fallbackWarn:Ne(e.fallbackWarn)||Se(e.fallbackWarn)?e.fallbackWarn:!0,h=t?t.fallbackRoot:Ne(e.fallbackRoot)?e.fallbackRoot:!0,g=!!e.fallbackFormat,_=Me(e.missing)?e.missing:null,v=Me(e.missing)?fi(e.missing):null,y=Me(e.postTranslation)?e.postTranslation:null,b=t?t.warnHtmlMessage:Ne(e.warnHtmlMessage)?e.warnHtmlMessage:!0,x=!!e.escapeParameter,S=t?t.modifiers:Re(e.modifiers)?e.modifiers:{},C=e.pluralRules||t&&t.pluralRules,w;w=(()=>{r&&ir(null);let t={version:Gr,locale:c.value,fallbackLocale:l.value,messages:u.value,modifiers:S,pluralRules:C,missing:v===null?void 0:v,missingWarn:p,fallbackWarn:m,fallbackFormat:g,unresolving:!0,postTranslation:y===null?void 0:y,warnHtmlMessage:b,escapeParameter:x,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:`vue`}};t.datetimeFormats=d.value,t.numberFormats=f.value,t.__datetimeFormatters=Re(w)?w.__datetimeFormatters:void 0,t.__numberFormatters=Re(w)?w.__numberFormatters:void 0;let n=sr(t);return r&&ir(n),n})(),dr(w,c.value,l.value);function T(){return[c.value,l.value,u.value,d.value,f.value]}let E=L({get:()=>c.value,set:e=>{w.locale=e,c.value=e}});function D(e){r||(w.fallbackContext=t?ar():void 0);try{dr(w,c.value,e)}finally{r||(w.fallbackContext=void 0)}}let O=L({get:()=>l.value,set:e=>{l.value=e,w.fallbackLocale=l.value,D(l.value)}}),k=L(()=>u.value),A=L(()=>d.value),j=L(()=>f.value);function M(){return Me(y)?y:null}function N(e){y=e,w.postTranslation=e}function ee(){return _}function P(e){e!==null&&(v=fi(e)),_=e,w.missing=v}let F=(e,n,i,a,o,s)=>{T();let c;try{__INTLIFY_PROD_DEVTOOLS__,r||(w.fallbackContext=t?ar():void 0),c=e(w)}finally{__INTLIFY_PROD_DEVTOOLS__,r||(w.fallbackContext=void 0)}if(i!==`translate exists`&&be(c)&&c===-1||i===`translate exists`&&!c){let[e,r]=n();return t&&h?a(t):o(e)}else if(s(c))return c;else throw Jr(qr.UNEXPECTED_RETURN_TYPE)};function I(...e){return F(t=>Reflect.apply(Lr,null,[t,...e]),()=>Hr(...e),`translate`,t=>Reflect.apply(t.t,t,[...e]),e=>e,e=>q(e))}function te(...e){let[t,n,r]=e;if(r&&!Pe(r))throw Jr(qr.INVALID_ARGUMENT);return I(t,n,we({resolvedMessage:!0},r||{}))}function ne(...e){return F(t=>Reflect.apply(yr,null,[t,...e]),()=>xr(...e),`datetime format`,t=>Reflect.apply(t.d,t,[...e]),()=>``,e=>q(e)||je(e))}function re(...e){return F(t=>Reflect.apply(Cr,null,[t,...e]),()=>Tr(...e),`number format`,t=>Reflect.apply(t.n,t,[...e]),()=>``,e=>q(e)||je(e))}function ie(e){return e.map(e=>q(e)||be(e)||Ne(e)?si(String(e)):e)}let ae={normalize:ie,interpolate:e=>e,type:`vnode`};function oe(...e){return F(t=>{let n,r=t;try{r.processor=ae,n=Reflect.apply(Lr,null,[r,...e])}finally{r.processor=null}return n},()=>Hr(...e),`translate`,t=>t[Yr](...e),e=>[si(e)],e=>je(e))}function se(...e){return F(t=>Reflect.apply(Cr,null,[t,...e]),()=>Tr(...e),`number format`,t=>t[Zr](...e),li,e=>q(e)||je(e))}function z(...e){return F(t=>Reflect.apply(yr,null,[t,...e]),()=>xr(...e),`datetime format`,t=>t[Xr](...e),li,e=>q(e)||je(e))}function ce(e){C=e,w.pluralRules=C}function B(e,t){return F(()=>{if(!e)return!1;let n=q(t)?t:c.value,r=q(t)?[n]:An(w,l.value,n);for(let t=0;t[e],`translate exists`,n=>Reflect.apply(n.te,n,[e,t]),ui,e=>Ne(e))}function le(e){let t=null,n=An(w,l.value,c.value);for(let r=0;rD(l.value),{deep:!0,flush:`sync`}),t&&ge&&(s(t.locale,e=>{o&&(c.value=e,w.locale=e,dr(w,c.value,l.value))}),s(t.fallbackLocale,e=>{o&&(l.value=e,w.fallbackLocale=l.value,dr(w,c.value,l.value))}));let he={id:di,locale:E,fallbackLocale:O,get inheritLocale(){return o},set inheritLocale(e){o=e,e&&t&&(E.value=t.locale.value,O.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(u.value).sort()},messages:k,get modifiers(){return S},get pluralRules(){return C||{}},get isGlobal(){return r},get missingWarn(){return p},set missingWarn(e){p=e,w.missingWarn=p},get fallbackWarn(){return m},set fallbackWarn(e){m=e,w.fallbackWarn=m},get fallbackRoot(){return h},set fallbackRoot(e){h=e},get fallbackFormat(){return g},set fallbackFormat(e){g=e,w.fallbackFormat=g},get warnHtmlMessage(){return b},set warnHtmlMessage(e){b=e,w.warnHtmlMessage=e},get escapeParameter(){return x},set escapeParameter(e){x=e,w.escapeParameter=e},t:I,getLocaleMessage:V,setLocaleMessage:fe,mergeLocaleMessage:H,getPostTranslationHandler:M,setPostTranslationHandler:N,getMissingHandler:ee,setMissingHandler:P,[Qr]:ce};return he.datetimeFormats=A,he.numberFormats=j,he.rt=te,he.te=B,he.tm=de,he.d=ne,he.n=re,he.getDateTimeFormat=U,he.setDateTimeFormat=W,he.mergeDateTimeFormat=G,he.getNumberFormat=K,he.setNumberFormat=pe,he.mergeNumberFormat=me,he[$r]=n,he[Yr]=oe,he[Xr]=z,he[Zr]=se,he}function mi(e){let t=q(e.locale)?e.locale:Kn,n=q(e.fallbackLocale)||je(e.fallbackLocale)||Re(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,r=Me(e.missing)?e.missing:void 0,i=Ne(e.silentTranslationWarn)||Se(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,a=Ne(e.silentFallbackWarn)||Se(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,o=Ne(e.fallbackRoot)?e.fallbackRoot:!0,s=!!e.formatFallbackMessages,c=Re(e.modifiers)?e.modifiers:{},l=e.pluralizationRules,u=Me(e.postTranslation)?e.postTranslation:void 0,d=q(e.warnHtmlInMessage)?e.warnHtmlInMessage!==`off`:!0,f=!!e.escapeParameterHtml,p=Ne(e.sync)?e.sync:!0,m=e.messages;if(Re(e.sharedMessages)){let t=e.sharedMessages;m=Object.keys(t).reduce((e,n)=>(we(e[n]||(e[n]={}),t[n]),e),m||{})}let{__i18n:h,__root:g,__injectWithOption:_}=e,v=e.datetimeFormats,y=e.numberFormats,b=e.flatJson;return{locale:t,fallbackLocale:n,messages:m,flatJson:b,datetimeFormats:v,numberFormats:y,missing:r,missingWarn:i,fallbackWarn:a,fallbackRoot:o,fallbackFormat:s,modifiers:c,pluralRules:l,postTranslation:u,warnHtmlMessage:d,escapeParameter:f,messageResolver:e.messageResolver,inheritLocale:p,__i18n:h,__root:g,__injectWithOption:_}}function hi(e={}){let t=pi(mi(e)),{__extender:n}=e,r={id:t.id,get locale(){return t.locale.value},set locale(e){t.locale.value=e},get fallbackLocale(){return t.fallbackLocale.value},set fallbackLocale(e){t.fallbackLocale.value=e},get messages(){return t.messages.value},get datetimeFormats(){return t.datetimeFormats.value},get numberFormats(){return t.numberFormats.value},get availableLocales(){return t.availableLocales},get missing(){return t.getMissingHandler()},set missing(e){t.setMissingHandler(e)},get silentTranslationWarn(){return Ne(t.missingWarn)?!t.missingWarn:t.missingWarn},set silentTranslationWarn(e){t.missingWarn=Ne(e)?!e:e},get silentFallbackWarn(){return Ne(t.fallbackWarn)?!t.fallbackWarn:t.fallbackWarn},set silentFallbackWarn(e){t.fallbackWarn=Ne(e)?!e:e},get modifiers(){return t.modifiers},get formatFallbackMessages(){return t.fallbackFormat},set formatFallbackMessages(e){t.fallbackFormat=e},get postTranslation(){return t.getPostTranslationHandler()},set postTranslation(e){t.setPostTranslationHandler(e)},get sync(){return t.inheritLocale},set sync(e){t.inheritLocale=e},get warnHtmlInMessage(){return t.warnHtmlMessage?`warn`:`off`},set warnHtmlInMessage(e){t.warnHtmlMessage=e!==`off`},get escapeParameterHtml(){return t.escapeParameter},set escapeParameterHtml(e){t.escapeParameter=e},get pluralizationRules(){return t.pluralRules||{}},__composer:t,t(...e){return Reflect.apply(t.t,t,[...e])},rt(...e){return Reflect.apply(t.rt,t,[...e])},te(e,n){return t.te(e,n)},tm(e){return t.tm(e)},getLocaleMessage(e){return t.getLocaleMessage(e)},setLocaleMessage(e,n){t.setLocaleMessage(e,n)},mergeLocaleMessage(e,n){t.mergeLocaleMessage(e,n)},d(...e){return Reflect.apply(t.d,t,[...e])},getDateTimeFormat(e){return t.getDateTimeFormat(e)},setDateTimeFormat(e,n){t.setDateTimeFormat(e,n)},mergeDateTimeFormat(e,n){t.mergeDateTimeFormat(e,n)},n(...e){return Reflect.apply(t.n,t,[...e])},getNumberFormat(e){return t.getNumberFormat(e)},setNumberFormat(e,n){t.setNumberFormat(e,n)},mergeNumberFormat(e,n){t.mergeNumberFormat(e,n)}};return r.__extender=n,r}function gi(e,t,n){return{beforeCreate(){let r=ci();if(!r)throw Jr(qr.UNEXPECTED_ERROR);let i=this.$options;if(i.i18n){let r=i.i18n;if(i.__i18n&&(r.__i18n=i.__i18n),r.__root=t,this===this.$root)this.$i18n=_i(e,r);else{r.__injectWithOption=!0,r.__extender=n.__vueI18nExtend,this.$i18n=hi(r);let e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}}else if(i.__i18n)if(this===this.$root)this.$i18n=_i(e,i);else{this.$i18n=hi({__i18n:i.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});let e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}else this.$i18n=e;i.__i18nGlobal&&oi(t,i,i),this.$t=(...e)=>this.$i18n.t(...e),this.$rt=(...e)=>this.$i18n.rt(...e),this.$te=(e,t)=>this.$i18n.te(e,t),this.$d=(...e)=>this.$i18n.d(...e),this.$n=(...e)=>this.$i18n.n(...e),this.$tm=e=>this.$i18n.tm(e),n.__setInstance(r,this.$i18n)},mounted(){},unmounted(){let e=ci();if(!e)throw Jr(qr.UNEXPECTED_ERROR);let t=this.$i18n;t&&(delete this.$t,delete this.$rt,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,t?.__disposer&&(t.__disposer(),delete t.__disposer,delete t.__extender),n.__deleteInstance(e),delete this.$i18n)}}}function _i(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[Qr](t.pluralizationRules||e.pluralizationRules);let n=ii(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(t=>e.mergeLocaleMessage(t,n[t])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(n=>e.mergeDateTimeFormat(n,t.datetimeFormats[n])),t.numberFormats&&Object.keys(t.numberFormats).forEach(n=>e.mergeNumberFormat(n,t.numberFormats[n])),e}var vi={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e===`parent`||e===`global`,default:`parent`},i18n:{type:Object}};function yi({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((e,t)=>[...e,...t.type===M?t.children:[t]],[]):t.reduce((t,n)=>{let r=e[n];return r&&(t[n]=r()),t},Ee())}function bi(){return M}var xi=G({name:`i18n-t`,props:we({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>be(e)||!isNaN(e)}},vi),setup(e,t){let{slots:n,attrs:r}=t,i=e.i18n||J({useScope:e.scope,__useComponent:!0});return()=>{let o=()=>{let r=Object.keys(n).filter(e=>e[0]!==`_`),a=Ee();e.locale&&(a.locale=e.locale),e.plural!==void 0&&(a.plural=q(e.plural)?+e.plural:e.plural);let o=yi(t,r);return i[Yr](e.keypath,o,a)},s=we(Ee(),r),c=q(e.tag)||Pe(e.tag)?e.tag:bi();return Pe(c)?a(c,s,{default:o}):a(c,s,o())}}});function Si(e){return je(e)&&!q(e[0])}function Ci(e,t,n,r){let{slots:i,attrs:o}=t;return()=>{let t=()=>{let t={part:!0},a=Ee();e.locale&&(t.locale=e.locale),q(e.format)?t.key=e.format:Pe(e.format)&&(q(e.format.key)&&(t.key=e.format.key),a=Object.keys(e.format).reduce((t,r)=>n.includes(r)?we(Ee(),t,{[r]:e.format[r]}):t,Ee()));let o=r(e.value,t,a),s=[t.key];return je(o)?s=o.map((e,t)=>{let n=i[e.type],r=n?n({[e.type]:e.value,index:t,parts:o}):[e.value];return Si(r)&&(r[0].key=`${e.type}-${t}`),r}):q(o)&&(s=[o]),s},s=we(Ee(),o),c=q(e.tag)||Pe(e.tag)?e.tag:bi();return Pe(c)?a(c,s,{default:t}):a(c,s,t())}}var wi=G({name:`i18n-n`,props:we({value:{type:Number,required:!0},format:{type:[String,Object]}},vi),setup(e,t){let n=e.i18n||J({useScope:e.scope,__useComponent:!0});return Ci(e,t,wr,(...e)=>n[Zr](...e))}});function Ti(e,t){let n=e;if(e.mode===`composition`)return n.__getInstance(t)||e.global;{let r=n.__getInstance(t);return r==null?e.global.__composer:r.__composer}}function Ei(e){let t=t=>{let{instance:n,value:r}=t;if(!n||!n.$)throw Jr(qr.UNEXPECTED_ERROR);let i=Ti(e,n.$),a=Di(r);return[Reflect.apply(i.t,i,[...Oi(a)]),i]};return{created:(e,n)=>{let[r,i]=t(n);ge&&(e.__i18nWatcher=s(i.locale,()=>{n.instance&&n.instance.$forceUpdate()})),e.__composer=i,e.textContent=r},unmounted:e=>{ge&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:t})=>{if(e.__composer){let n=e.__composer,r=Di(t);e.textContent=Reflect.apply(n.t,n,[...Oi(r)])}},getSSRProps:e=>{let[n]=t(e);return{textContent:n}}}}function Di(e){if(q(e))return{path:e};if(Re(e)){if(!(`path`in e))throw Jr(qr.REQUIRED_VALUE,`path`);return e}else throw Jr(qr.INVALID_VALUE)}function Oi(e){let{path:t,locale:n,args:r,choice:i,plural:a}=e,o={},s=r||{};return q(n)&&(o.locale=n),be(i)&&(o.plural=i),be(a)&&(o.plural=a),[t,s,o]}function ki(e,t,...n){let r=Re(n[0])?n[0]:{};(!Ne(r.globalInstall)||r.globalInstall)&&([xi.name,`I18nT`].forEach(t=>e.component(t,xi)),[wi.name,`I18nN`].forEach(t=>e.component(t,wi)),[Hi.name,`I18nD`].forEach(t=>e.component(t,Hi))),e.directive(`t`,Ei(t))}var Ai=_e(`global-vue-i18n`);function ji(e={}){let t=__VUE_I18N_LEGACY_API__&&Ne(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,n=Ne(e.globalInjection)?e.globalInjection:!0,r=new Map,[i,a]=Mi(e,t),o=_e(``);function s(e){return r.get(e)||null}function c(e,t){r.set(e,t)}function l(e){r.delete(e)}let u={get mode(){return __VUE_I18N_LEGACY_API__&&t?`legacy`:`composition`},async install(e,...r){if(e.__VUE_I18N_SYMBOL__=o,e.provide(e.__VUE_I18N_SYMBOL__,u),Re(r[0])){let e=r[0];u.__composerExtend=e.__composerExtend,u.__vueI18nExtend=e.__vueI18nExtend}let i=null;!t&&n&&(i=Vi(e,u.global)),__VUE_I18N_FULL_INSTALL__&&ki(e,u,...r),__VUE_I18N_LEGACY_API__&&t&&e.mixin(gi(a,a.__composer,u));let s=e.unmount;e.unmount=()=>{i&&i(),u.dispose(),s()}},get global(){return a},dispose(){i.stop()},__instances:r,__getInstance:s,__setInstance:c,__deleteInstance:l};return u}function J(e={}){let n=ci();if(n==null)throw Jr(qr.MUST_BE_CALL_SETUP_TOP);if(!n.isCE&&n.appContext.app!=null&&!n.appContext.app.__VUE_I18N_SYMBOL__)throw Jr(qr.NOT_INSTALLED);let r=Ni(n),i=Fi(r),a=ai(n),o=Pi(e,a);if(o===`global`)return oi(i,e,a),i;if(o===`parent`){let t=Ii(r,n,e.__useComponent);return t??=i,t}if(o===`isolated`){if(r.mode!==`composition`)throw Jr(qr.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);let a=r,o=we({},e);o.__root=Ii(r,n)||i;let s=pi(o);return a.__composerExtend&&(s[ei]=a.__composerExtend(s)),C()&&t(()=>{let e=s[ei];e&&(e(),delete s[ei])}),s}let s=r,c=s.__getInstance(n);if(c==null){let t=we({},e);`__i18n`in a&&(t.__i18n=a.__i18n),i&&(t.__root=i),c=pi(t),s.__composerExtend&&(c[ei]=s.__composerExtend(c)),Ri(s,n,c),s.__setInstance(n,c)}return c}function Mi(e,t){let n=w(),r=__VUE_I18N_LEGACY_API__&&t?n.run(()=>hi(e)):n.run(()=>pi(e));if(r==null)throw Jr(qr.UNEXPECTED_ERROR);return[n,r]}function Ni(e){let t=m(e.isCE?Ai:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Jr(e.isCE?qr.NOT_INSTALLED_WITH_PROVIDE:qr.UNEXPECTED_ERROR);return t}function Pi(e,t){return Ce(e)?`__i18n`in t?`local`:`global`:e.useScope?e.useScope:`local`}function Fi(e){return e.mode===`composition`?e.global:e.global.__composer}function Ii(e,t,n=!1){let r=null,i=t.root,a=Li(t,n);for(;a!=null;){let t=e;if(e.mode===`composition`)r=t.__getInstance(a);else if(__VUE_I18N_LEGACY_API__){let e=t.__getInstance(a);e!=null&&(r=e.__composer,n&&r&&!r[$r]&&(r=null))}if(r!=null||i===a)break;a=a.parent}return r}function Li(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Ri(e,t,n){p(()=>{},t),h(()=>{let r=n;e.__deleteInstance(t);let i=r[ei];i&&(i(),delete r[ei])},t)}var zi=[`locale`,`fallbackLocale`,`availableLocales`],Bi=[`t`,`rt`,`d`,`n`,`tm`,`te`];function Vi(e,t){let n=Object.create(null);return zi.forEach(e=>{let r=Object.getOwnPropertyDescriptor(t,e);if(!r)throw Jr(qr.UNEXPECTED_ERROR);let i=T(r.value)?{get(){return r.value.value},set(e){r.value.value=e}}:{get(){return r.get&&r.get()}};Object.defineProperty(n,e,i)}),e.config.globalProperties.$i18n=n,Bi.forEach(n=>{let r=Object.getOwnPropertyDescriptor(t,n);if(!r||!r.value)throw Jr(qr.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${n}`,r)}),()=>{delete e.config.globalProperties.$i18n,Bi.forEach(t=>{delete e.config.globalProperties[`$${t}`]})}}var Hi=G({name:`i18n-d`,props:we({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vi),setup(e,t){let n=e.i18n||J({useScope:e.scope,__useComponent:!0});return Ci(e,t,br,(...e)=>n[Xr](...e))}});if(Kr(),Xn(vn),Qn(Un),er(An),__INTLIFY_PROD_DEVTOOLS__){let e=Oe();e.__INTLIFY__=!0,bn(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}var Ui=`/brand/pythinker_banner_dark.svg`;async function Wi(e){let t=typeof navigator<`u`?navigator.clipboard:void 0;if(t&&typeof t.writeText==`function`)try{return await t.writeText(e),!0}catch{}return Ki(e)}function Gi(e){if(typeof e!=`string`)return;let t=typeof navigator<`u`?navigator.clipboard:void 0;t&&typeof t.writeText==`function`||Wi(e)}function Ki(e){if(typeof document>`u`||typeof document.execCommand!=`function`)return!1;let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.top=`-9999px`,t.style.left=`-9999px`,t.style.opacity=`0`,document.body.appendChild(t);let n=!1;try{t.focus(),t.select(),n=document.execCommand(`copy`)}catch{n=!1}finally{document.body.removeChild(t)}return n}var qi={permission:`pythinker-web.permission`,activeWorkspace:`pythinker-active-workspace`,planMode:`pythinker-web.plan-mode`,planArmed:`pythinker-web.plan-armed`,dynamicWorkflowMode:`pythinker-web.dynamic-workflow-mode`,goalMode:`pythinker-web.goal-mode`,discussionPair:`pythinker-web.discussion-pair`,discussionReasoning:`pythinker-web.discussion-reasoning`,uiFontSize:`pythinker-web.ui-font-size`,starredModels:`pythinker-web.starred-models`,unread:`pythinker-web.unread`,onboarded:`pythinker-web.onboarded`,accent:`pythinker-web.accent`,colorScheme:`pythinker-web.color-scheme`,hiddenWorkspaces:`pythinker-web.hidden-workspaces`,collapsedWorkspaces:`pythinker-web.collapsed-workspaces`,workspaceOrder:`pythinker-web.workspace-order`,workspaceNameOverrides:`pythinker-web.workspace-name-overrides`,workspaceSort:`pythinker-web.workspace-sort`,pinnedSessions:`pythinker-web.pinned-sessions`,pinnedCollapsed:`pythinker-web.pinned-collapsed`,recentEmojis:`pythinker-web.recent-emojis`,conversationToc:`pythinker-web.beta-toc`,turnFolding:`pythinker-web.turn-folding`,activityRunFolding:`pythinker-web.activity-run-folding`,notifyOnComplete:`pythinker-web.notify-on-complete`,notifyOnQuestion:`pythinker-web.notify-on-question`,notifyOnApproval:`pythinker-web.notify-on-approval`,soundOnComplete:`pythinker-web.sound-on-complete`,inputHistory:`pythinker-web.input-history`,clientId:`pythinker-web.client-id`,debug:`pythinker-web.debug`,openInLastTarget:`pythinker-web.open-in.last-target`,sidebarCollapsed:`pythinker-web.sidebar-collapsed`,sidebarPinnedHeight:`pythinker-web.sidebar-pinned-height`,sidebarWidth:`pythinker-web.sidebar-width`,codeFont:`pythinker-web.code-font`,contentAlign:`pythinker-web.content-align`,theme:`pythinker-web.theme`,thinking:`pythinker-web.thinking`};function Ji(e){return`pythinker-web.draft.${e&&e.length>0?e:`__new__`}`}function Yi(e){try{return globalThis.localStorage.getItem(e)}catch{return null}}function Xi(e,t){try{globalThis.localStorage.setItem(e,t)}catch{}}function Zi(e){try{globalThis.localStorage.removeItem(e)}catch{}}function Qi(e){let t=Yi(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function $i(e,t){try{globalThis.localStorage.setItem(e,JSON.stringify(t))}catch{}}function ea(){let e=Yi(qi.unread);if(!e)return{};try{let t=JSON.parse(e);if(!t||typeof t!=`object`)return{};let n={};for(let[e,r]of Object.entries(t))r===!0&&(n[e]=!0);return n}catch{return{}}}function ta(e){let t={...ea()};for(let[n,r]of Object.entries(e))r?t[n]=!0:delete t[n];Xi(qi.unread,JSON.stringify(t))}function na(){let e=Qi(qi.collapsedWorkspaces);return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ra(e){$i(qi.collapsedWorkspaces,Array.from(e))}function ia(){let e=Qi(qi.workspaceOrder);return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function aa(e){$i(qi.workspaceOrder,Array.from(e))}function oa(){let e=Qi(qi.workspaceNameOverrides);if(!e||typeof e!=`object`)return{};let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function sa(e){$i(qi.workspaceNameOverrides,e)}function ca(){return Yi(qi.workspaceSort)}function la(e){Xi(qi.workspaceSort,e)}function ua(e,t){if(e.length===0)return null;let n=new Set(e),r=t.filter(e=>n.has(e)),i=e.filter(e=>!t.includes(e));return i.length===0&&r.length===t.length?null:[...i,...r]}function da(e,t){let n=new Map(t.map((e,t)=>[e,t]));return e.toSorted((e,t)=>(n.get(e.id)??-1)-(n.get(t.id)??-1))}function fa(e,t,n,r=`before`){let i=e.indexOf(t),a=e.indexOf(n);if(i===-1||a===-1||i===a)return e;let o=[...e];o.splice(i,1);let s=i(t.get(n.id)??-1/0)-(t.get(e.id)??-1/0))}var ma={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`};function ha(e){return e.replace(/[&<>"']/g,e=>ma[e]??e)}function ga(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function _a(e,t,n=40){let r=e.replace(/\s+/g,` `).trim();if(r.length===0)return``;let i=t.trim();if(i.length===0)return va(r,n*2);let a=r.toLowerCase().indexOf(i.toLowerCase());if(a<0)return va(r,n*2);let o=Math.max(0,a-n),s=Math.min(r.length,a+i.length+n),c=o>0,l=s`${e}`)}var ba=R(0),xa=[`type`,`disabled`,`aria-label`],Sa=G({__name:`IconButton`,props:{size:{default:`md`},disabled:{type:Boolean},label:{},type:{default:`button`}},setup(e,{expose:t}){let n=R();return t({el:n}),(t,r)=>(c(),W(`button`,{ref_key:`el`,ref:n,class:V([`ui-icon-button`,`ui-icon-button--${e.size}`]),type:e.type,disabled:e.disabled,"aria-label":e.label},[me(t.$slots,`default`,{},void 0,!0)],10,xa))}}),Y=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Ca=Y(Sa,[[`__scopeId`,`data-v-4b23513f`]]),wa=R(!1),Ta=!1;function Ea(){let e=document.documentElement.dataset.colorScheme;return e===`dark`?!0:e===`light`||typeof window.matchMedia!=`function`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}function Da(){return!Ta&&typeof window<`u`&&typeof document<`u`&&(Ta=!0,wa.value=Ea(),new MutationObserver(()=>{wa.value=Ea()}).observe(document.documentElement,{attributes:!0,attributeFilter:[`data-color-scheme`]}),window.matchMedia?.(`(prefers-color-scheme: dark)`)?.addEventListener(`change`,()=>{wa.value=Ea()})),wa}var Oa={"._sc_":`godot-assets`,".adonisrc.json":`adonis`,".aiexclude":`gemini-ai`,".angular-cli.json":`angular`,".appveyor.yml":`appveyor`,".astylerc":`astyle`,".autorc":`auto`,".babel-plugin-macrosrc":`babel`,".babel-plugin-macrosrc.cjs":`babel`,".babel-plugin-macrosrc.cts":`babel`,".babel-plugin-macrosrc.js":`babel`,".babel-plugin-macrosrc.json":`babel`,".babel-plugin-macrosrc.json5":`babel`,".babel-plugin-macrosrc.jsonc":`babel`,".babel-plugin-macrosrc.mjs":`babel`,".babel-plugin-macrosrc.mts":`babel`,".babel-plugin-macrosrc.toml":`babel`,".babel-plugin-macrosrc.ts":`babel`,".babel-plugin-macrosrc.yaml":`babel`,".babel-plugin-macrosrc.yml":`babel`,".babelrc":`babel`,".babelrc.cjs":`babel`,".babelrc.cts":`babel`,".babelrc.js":`babel`,".babelrc.json":`babel`,".babelrc.json5":`babel`,".babelrc.jsonc":`babel`,".babelrc.mjs":`babel`,".babelrc.mts":`babel`,".babelrc.toml":`babel`,".babelrc.ts":`babel`,".babelrc.yaml":`babel`,".babelrc.yml":`babel`,".bazelignore":`bazel`,".bazelrc":`bazel`,".bazelversion":`bazel`,".biome.json":`biome`,".biome.jsonc":`biome`,".bithoundrc":`bithound`,".blitz.config.compiled.js":`blitz`,".bowerrc":`bower`,".browserslistrc":`browserlist`,".buckconfig":`buck`,".buildignore":`settings`,".bun-version":`bun`,".cfignore":`cloudfoundry`,".clang-format":`settings`,".clang-format-ignore":`settings`,".clang-tidy":`settings`,".clangd":`clangd`,".clinerules":`cline`,".codeclimate.yml":`code-climate`,".codecov.yaml":`codecov`,".codecov.yml":`codecov`,".coderabbit.yaml":`coderabbit-ai`,".coderabbit.yml":`coderabbit-ai`,".commitlint.yaml":`commitlint`,".commitlint.yml":`commitlint`,".commitlintrc":`commitlint`,".commitlintrc.cjs":`commitlint`,".commitlintrc.cts":`commitlint`,".commitlintrc.js":`commitlint`,".commitlintrc.json":`commitlint`,".commitlintrc.json5":`commitlint`,".commitlintrc.jsonc":`commitlint`,".commitlintrc.mjs":`commitlint`,".commitlintrc.mts":`commitlint`,".commitlintrc.toml":`commitlint`,".commitlintrc.ts":`commitlint`,".commitlintrc.yaml":`commitlint`,".commitlintrc.yml":`commitlint`,".conf":`settings`,".config/babel-plugin-macrosrc":`babel`,".config/babel-plugin-macrosrc.cjs":`babel`,".config/babel-plugin-macrosrc.cts":`babel`,".config/babel-plugin-macrosrc.js":`babel`,".config/babel-plugin-macrosrc.json":`babel`,".config/babel-plugin-macrosrc.json5":`babel`,".config/babel-plugin-macrosrc.jsonc":`babel`,".config/babel-plugin-macrosrc.mjs":`babel`,".config/babel-plugin-macrosrc.mts":`babel`,".config/babel-plugin-macrosrc.toml":`babel`,".config/babel-plugin-macrosrc.ts":`babel`,".config/babel-plugin-macrosrc.yaml":`babel`,".config/babel-plugin-macrosrc.yml":`babel`,".config/babelrc":`babel`,".config/babelrc.cjs":`babel`,".config/babelrc.cts":`babel`,".config/babelrc.js":`babel`,".config/babelrc.json":`babel`,".config/babelrc.json5":`babel`,".config/babelrc.jsonc":`babel`,".config/babelrc.mjs":`babel`,".config/babelrc.mts":`babel`,".config/babelrc.toml":`babel`,".config/babelrc.ts":`babel`,".config/babelrc.yaml":`babel`,".config/babelrc.yml":`babel`,".config/commitlintrc":`commitlint`,".config/commitlintrc.cjs":`commitlint`,".config/commitlintrc.cts":`commitlint`,".config/commitlintrc.js":`commitlint`,".config/commitlintrc.json":`commitlint`,".config/commitlintrc.json5":`commitlint`,".config/commitlintrc.jsonc":`commitlint`,".config/commitlintrc.mjs":`commitlint`,".config/commitlintrc.mts":`commitlint`,".config/commitlintrc.toml":`commitlint`,".config/commitlintrc.ts":`commitlint`,".config/commitlintrc.yaml":`commitlint`,".config/commitlintrc.yml":`commitlint`,".config/cracorc":`craco`,".config/cracorc.cjs":`craco`,".config/cracorc.cts":`craco`,".config/cracorc.js":`craco`,".config/cracorc.json":`craco`,".config/cracorc.json5":`craco`,".config/cracorc.jsonc":`craco`,".config/cracorc.mjs":`craco`,".config/cracorc.mts":`craco`,".config/cracorc.toml":`craco`,".config/cracorc.ts":`craco`,".config/cracorc.yaml":`craco`,".config/cracorc.yml":`craco`,".config/eslintrc":`eslint`,".config/eslintrc.cjs":`eslint`,".config/eslintrc.cts":`eslint`,".config/eslintrc.js":`eslint`,".config/eslintrc.json":`eslint`,".config/eslintrc.json5":`eslint`,".config/eslintrc.jsonc":`eslint`,".config/eslintrc.mjs":`eslint`,".config/eslintrc.mts":`eslint`,".config/eslintrc.toml":`eslint`,".config/eslintrc.ts":`eslint`,".config/eslintrc.yaml":`eslint`,".config/eslintrc.yml":`eslint`,".config/graphqlrc":`graphql`,".config/graphqlrc.cjs":`graphql`,".config/graphqlrc.cts":`graphql`,".config/graphqlrc.js":`graphql`,".config/graphqlrc.json":`graphql`,".config/graphqlrc.json5":`graphql`,".config/graphqlrc.jsonc":`graphql`,".config/graphqlrc.mjs":`graphql`,".config/graphqlrc.mts":`graphql`,".config/graphqlrc.toml":`graphql`,".config/graphqlrc.ts":`graphql`,".config/graphqlrc.yaml":`graphql`,".config/graphqlrc.yml":`graphql`,".config/huskyrc":`husky`,".config/huskyrc.cjs":`husky`,".config/huskyrc.cts":`husky`,".config/huskyrc.js":`husky`,".config/huskyrc.json":`husky`,".config/huskyrc.json5":`husky`,".config/huskyrc.jsonc":`husky`,".config/huskyrc.mjs":`husky`,".config/huskyrc.mts":`husky`,".config/huskyrc.toml":`husky`,".config/huskyrc.ts":`husky`,".config/huskyrc.yaml":`husky`,".config/huskyrc.yml":`husky`,".config/postcssrc":`postcss`,".config/postcssrc.cjs":`postcss`,".config/postcssrc.cts":`postcss`,".config/postcssrc.js":`postcss`,".config/postcssrc.json":`postcss`,".config/postcssrc.json5":`postcss`,".config/postcssrc.jsonc":`postcss`,".config/postcssrc.mjs":`postcss`,".config/postcssrc.mts":`postcss`,".config/postcssrc.toml":`postcss`,".config/postcssrc.ts":`postcss`,".config/postcssrc.yaml":`postcss`,".config/postcssrc.yml":`postcss`,".config/posthtmlrc":`posthtml`,".config/posthtmlrc.cjs":`posthtml`,".config/posthtmlrc.cts":`posthtml`,".config/posthtmlrc.js":`posthtml`,".config/posthtmlrc.json":`posthtml`,".config/posthtmlrc.json5":`posthtml`,".config/posthtmlrc.jsonc":`posthtml`,".config/posthtmlrc.mjs":`posthtml`,".config/posthtmlrc.mts":`posthtml`,".config/posthtmlrc.toml":`posthtml`,".config/posthtmlrc.ts":`posthtml`,".config/posthtmlrc.yaml":`posthtml`,".config/posthtmlrc.yml":`posthtml`,".config/prettierrc":`prettier`,".config/prettierrc.cjs":`prettier`,".config/prettierrc.cts":`prettier`,".config/prettierrc.js":`prettier`,".config/prettierrc.json":`prettier`,".config/prettierrc.json5":`prettier`,".config/prettierrc.jsonc":`prettier`,".config/prettierrc.mjs":`prettier`,".config/prettierrc.mts":`prettier`,".config/prettierrc.toml":`prettier`,".config/prettierrc.ts":`prettier`,".config/prettierrc.yaml":`prettier`,".config/prettierrc.yml":`prettier`,".config/puppeteerrc":`puppeteer`,".config/puppeteerrc.cjs":`puppeteer`,".config/puppeteerrc.cts":`puppeteer`,".config/puppeteerrc.js":`puppeteer`,".config/puppeteerrc.json":`puppeteer`,".config/puppeteerrc.json5":`puppeteer`,".config/puppeteerrc.jsonc":`puppeteer`,".config/puppeteerrc.mjs":`puppeteer`,".config/puppeteerrc.mts":`puppeteer`,".config/puppeteerrc.toml":`puppeteer`,".config/puppeteerrc.ts":`puppeteer`,".config/puppeteerrc.yaml":`puppeteer`,".config/puppeteerrc.yml":`puppeteer`,".config/releaserc":`semantic-release`,".config/releaserc.cjs":`semantic-release`,".config/releaserc.cts":`semantic-release`,".config/releaserc.js":`semantic-release`,".config/releaserc.json":`semantic-release`,".config/releaserc.json5":`semantic-release`,".config/releaserc.jsonc":`semantic-release`,".config/releaserc.mjs":`semantic-release`,".config/releaserc.mts":`semantic-release`,".config/releaserc.toml":`semantic-release`,".config/releaserc.ts":`semantic-release`,".config/releaserc.yaml":`semantic-release`,".config/releaserc.yml":`semantic-release`,".config/stylelintrc":`stylelint`,".config/stylelintrc.cjs":`stylelint`,".config/stylelintrc.cts":`stylelint`,".config/stylelintrc.js":`stylelint`,".config/stylelintrc.json":`stylelint`,".config/stylelintrc.json5":`stylelint`,".config/stylelintrc.jsonc":`stylelint`,".config/stylelintrc.mjs":`stylelint`,".config/stylelintrc.mts":`stylelint`,".config/stylelintrc.toml":`stylelint`,".config/stylelintrc.ts":`stylelint`,".config/stylelintrc.yaml":`stylelint`,".config/stylelintrc.yml":`stylelint`,".config/svgrrc":`svgr`,".config/svgrrc.cjs":`svgr`,".config/svgrrc.cts":`svgr`,".config/svgrrc.js":`svgr`,".config/svgrrc.json":`svgr`,".config/svgrrc.json5":`svgr`,".config/svgrrc.jsonc":`svgr`,".config/svgrrc.mjs":`svgr`,".config/svgrrc.mts":`svgr`,".config/svgrrc.toml":`svgr`,".config/svgrrc.ts":`svgr`,".config/svgrrc.yaml":`svgr`,".config/svgrrc.yml":`svgr`,".config/syncpackrc":`syncpack`,".config/syncpackrc.cjs":`syncpack`,".config/syncpackrc.cts":`syncpack`,".config/syncpackrc.js":`syncpack`,".config/syncpackrc.json":`syncpack`,".config/syncpackrc.json5":`syncpack`,".config/syncpackrc.jsonc":`syncpack`,".config/syncpackrc.mjs":`syncpack`,".config/syncpackrc.mts":`syncpack`,".config/syncpackrc.toml":`syncpack`,".config/syncpackrc.ts":`syncpack`,".config/syncpackrc.yaml":`syncpack`,".config/syncpackrc.yml":`syncpack`,".copilotignore":`copilot`,".coverage":`python-misc`,".coveragerc":`python-misc`,".cracorc":`craco`,".cracorc.cjs":`craco`,".cracorc.cts":`craco`,".cracorc.js":`craco`,".cracorc.json":`craco`,".cracorc.json5":`craco`,".cracorc.jsonc":`craco`,".cracorc.mjs":`craco`,".cracorc.mts":`craco`,".cracorc.toml":`craco`,".cracorc.ts":`craco`,".cracorc.yaml":`craco`,".cracorc.yml":`craco`,".cursor":`cursor`,".cursor.json":`cursor`,".cursorignore":`cursor`,".cursorindexingignore":`cursor`,".cursorrc":`cursor`,".cursorrules":`cursor`,".cz.json":`commitizen`,".cz.toml":`commitizen`,".cz.yaml":`commitizen`,".cz.yml":`commitizen`,".czrc":`commitizen`,".deepsource.toml":`deepsource`,".dev.vars":`tune`,".drone.yml":`drone`,".easignore":`expo`,".ecrc":`editorconfig`,".editorconfig":`editorconfig`,".editorconfig-checker.json":`editorconfig`,".ember-cli":`ember`,".ember-cli.js":`ember`,".env.alpha":`tune`,".env.defaults":`tune`,".env.dev":`tune`,".env.dev.local":`tune`,".env.development":`tune`,".env.development.local":`tune`,".env.dist":`tune`,".env.e2e":`tune`,".env.example":`tune`,".env.local":`tune`,".env.preview":`tune`,".env.prod":`tune`,".env.prod.example":`tune`,".env.prod.local":`tune`,".env.production":`tune`,".env.production.example":`tune`,".env.production.local":`tune`,".env.qa":`tune`,".env.qa.local":`tune`,".env.sample":`tune`,".env.schema":`tune`,".env.sentry-build-plugin":`sentry`,".env.stage":`tune`,".env.staging":`tune`,".env.staging.local":`tune`,".env.stg":`tune`,".env.stg.local":`tune`,".env.template":`tune`,".env.test":`tune`,".env.test.local":`tune`,".env.testing":`tune`,".env.uat":`tune`,".envrc":`console`,".esformatter":`json`,".eslintcache":`eslint`,".eslintignore":`eslint`,".eslintrc":`eslint`,".eslintrc-jsdoc.js":`eslint`,".eslintrc-md.js":`eslint`,".eslintrc.base.json":`eslint`,".eslintrc.cjs":`eslint`,".eslintrc.cts":`eslint`,".eslintrc.js":`eslint`,".eslintrc.json":`eslint`,".eslintrc.json5":`eslint`,".eslintrc.jsonc":`eslint`,".eslintrc.mjs":`eslint`,".eslintrc.mts":`eslint`,".eslintrc.toml":`eslint`,".eslintrc.ts":`eslint`,".eslintrc.yaml":`eslint`,".eslintrc.yml":`eslint`,".esmrc":`nodejs`,".firebaserc":`firebase`,".flowconfig":`flow`,".gardenignore":`garden`,".gcloudignore":`gcp`,".gdignore":`godot-assets`,".git":`git`,".git-blame-ignore":`git`,".git-blame-ignore-revs":`git`,".git-for-windows-updater":`git`,".gitattributes":`git`,".gitattributes-global":`git`,".gitattributes_global":`git`,".gitconfig":`git`,".github/funding.yml":`github-sponsors`,".github/labeler.yaml":`label`,".github/labeler.yml":`label`,".gitignore":`git`,".gitignore-global":`git`,".gitignore_global":`git`,".gitinclude":`git`,".gitkeep":`git`,".gitmessage":`git`,".gitmodules":`git`,".gitpod.yml":`gitpod`,".gitpreserve":`git`,".graphqlconfig":`graphql`,".graphqlrc":`graphql`,".graphqlrc.cjs":`graphql`,".graphqlrc.cts":`graphql`,".graphqlrc.js":`graphql`,".graphqlrc.json":`graphql`,".graphqlrc.json5":`graphql`,".graphqlrc.jsonc":`graphql`,".graphqlrc.mjs":`graphql`,".graphqlrc.mts":`graphql`,".graphqlrc.toml":`graphql`,".graphqlrc.ts":`graphql`,".graphqlrc.yaml":`graphql`,".graphqlrc.yml":`graphql`,".hadolint.yaml":`hadolint`,".hadolint.yml":`hadolint`,".happo.cjs":`happo`,".happo.js":`happo`,".happo.mjs":`happo`,".helmignore":`helm`,".hg":`mercurial`,".hgflow":`mercurial`,".hgignore":`mercurial`,".hgrc":`mercurial`,".hgtags":`mercurial`,".hhconfig":`hack`,".hintrc":`webhint`,".histoire.cjs":`histoire`,".histoire.cts":`histoire`,".histoire.js":`histoire`,".histoire.mjs":`histoire`,".histoire.mts":`histoire`,".histoire.ts":`histoire`,".htaccess":`xml`,".htpasswd":`key`,".hushlogin":`console`,".huskyrc":`husky`,".huskyrc.cjs":`husky`,".huskyrc.cts":`husky`,".huskyrc.js":`husky`,".huskyrc.json":`husky`,".huskyrc.json5":`husky`,".huskyrc.jsonc":`husky`,".huskyrc.mjs":`husky`,".huskyrc.mts":`husky`,".huskyrc.toml":`husky`,".huskyrc.ts":`husky`,".huskyrc.yaml":`husky`,".huskyrc.yml":`husky`,".io-config.json":`ionic`,".istanbul.yml":`istanbul`,".jestrc":`jest`,".jestrc.js":`jest`,".jestrc.json":`jest`,".jsbeautifyrc":`json`,".jscsrc":`json`,".jshintignore":`settings`,".jshintrc":`json`,".justfile":`just`,".k8s.yaml":`kubernetes`,".k8s.yml":`kubernetes`,".keep":`git`,".kl":`kl`,".knip.json":`knip`,".knip.jsonc":`knip`,".latexmkrc":`latexmk`,".lefthook-local.json":`lefthook`,".lefthook-local.toml":`lefthook`,".lefthook-local.yaml":`lefthook`,".lefthook-local.yml":`lefthook`,".lefthook.json":`lefthook`,".lefthook.toml":`lefthook`,".lefthook.yaml":`lefthook`,".lefthook.yml":`lefthook`,".lefthookrc":`lefthook`,".liaraignore":`liara`,".lighthouserc.cjs":`lighthouse`,".lighthouserc.js":`lighthouse`,".lighthouserc.json":`lighthouse`,".lighthouserc.yaml":`lighthouse`,".lighthouserc.yml":`lighthouse`,".lintstagedrc":`lintstaged`,".lintstagedrc.cjs":`lintstaged`,".lintstagedrc.js":`lintstaged`,".lintstagedrc.json":`lintstaged`,".lintstagedrc.mjs":`lintstaged`,".lintstagedrc.yaml":`lintstaged`,".lintstagedrc.yml":`lintstaged`,".luacheckrc":`lua`,".luaurc":`luau`,".mailmap":`email`,".markdownlint-cli2.cjs":`markdownlint`,".markdownlint-cli2.jsonc":`markdownlint`,".markdownlint-cli2.mjs":`markdownlint`,".markdownlint-cli2.yaml":`markdownlint`,".markdownlint.json":`markdownlint`,".markdownlint.jsonc":`markdownlint`,".markdownlint.yaml":`markdownlint`,".markdownlint.yml":`markdownlint`,".markdownlintignore":`markdownlint`,".mcattributes":`minecraft`,".mcdefinitions":`minecraft`,".mcignore":`minecraft`,".mincloudrc":`ifanr-cloud`,".mjmlconfig":`mjml`,".mocharc.cjs":`mocha`,".mocharc.js":`mocha`,".mocharc.json":`mocha`,".mocharc.jsonc":`mocha`,".mocharc.yaml":`mocha`,".mocharc.yml":`mocha`,".modernizrrc":`modernizr`,".modernizrrc.js":`modernizr`,".modernizrrc.json":`modernizr`,".mrconfig":`settings`,".nano-staged.cjs":`nano-staged`,".nano-staged.js":`nano-staged`,".nano-staged.json":`nano-staged`,".nano-staged.mjs":`nano-staged`,".nanostagedrc":`nano-staged`,".nest-cli.json":`nest`,".nestconfig.json":`nest`,".node-version":`nodejs`,".nowignore":`vercel`,".npmignore":`npm`,".npmrc":`npm`,".nuspec":`nuget`,".nuxtignore":`nuxt`,".nuxtrc":`nuxt`,".nvmrc":`nodejs`,".nxignore":`nx`,".nycrc":`istanbul`,".nycrc.json":`istanbul`,".nycrc.yaml":`istanbul`,".nycrc.yml":`istanbul`,".oxfmtrc.json":`oxc`,".oxfmtrc.jsonc":`oxc`,".oxlintrc.json":`oxc`,".oxlintrc.jsonc":`oxc`,".packshiprc":`packship`,".packshiprc.js":`packship`,".packshiprc.json":`packship`,".packshiprc.ts":`packship`,".parcelrc":`parcel`,".pdm-python":`pdm`,".percy.yml":`percy`,".php-cs-fixer.dist.php":`php-cs-fixer`,".php-cs-fixer.php":`php-cs-fixer`,".php_cs":`php-cs-fixer`,".php_cs.dist":`php-cs-fixer`,".php_cs.dist.php":`php-cs-fixer`,".php_cs.php":`php-cs-fixer`,".phpunit-watcher.yml":`phpunit`,".phpunit.result.cache":`phpunit`,".pnpmfile.cjs":`pnpm`,".postcssrc":`postcss`,".postcssrc.cjs":`postcss`,".postcssrc.cts":`postcss`,".postcssrc.js":`postcss`,".postcssrc.json":`postcss`,".postcssrc.json5":`postcss`,".postcssrc.jsonc":`postcss`,".postcssrc.mjs":`postcss`,".postcssrc.mts":`postcss`,".postcssrc.toml":`postcss`,".postcssrc.ts":`postcss`,".postcssrc.yaml":`postcss`,".postcssrc.yml":`postcss`,".posthtmlrc":`posthtml`,".posthtmlrc.cjs":`posthtml`,".posthtmlrc.cts":`posthtml`,".posthtmlrc.js":`posthtml`,".posthtmlrc.json":`posthtml`,".posthtmlrc.json5":`posthtml`,".posthtmlrc.jsonc":`posthtml`,".posthtmlrc.mjs":`posthtml`,".posthtmlrc.mts":`posthtml`,".posthtmlrc.toml":`posthtml`,".posthtmlrc.ts":`posthtml`,".posthtmlrc.yaml":`posthtml`,".posthtmlrc.yml":`posthtml`,".pre-commit-config.yaml":`pre-commit`,".pre-commit-hooks.yaml":`pre-commit`,".prettierignore":`prettier`,".prettierrc":`prettier`,".prettierrc.cjs":`prettier`,".prettierrc.cts":`prettier`,".prettierrc.js":`prettier`,".prettierrc.json":`prettier`,".prettierrc.json5":`prettier`,".prettierrc.jsonc":`prettier`,".prettierrc.mjs":`prettier`,".prettierrc.mts":`prettier`,".prettierrc.toml":`prettier`,".prettierrc.ts":`prettier`,".prettierrc.yaml":`prettier`,".prettierrc.yml":`prettier`,".pubignore":`dart`,".pug-lintrc":`pug`,".pug-lintrc.js":`pug`,".pug-lintrc.json":`pug`,".puppeteerrc":`puppeteer`,".puppeteerrc.cjs":`puppeteer`,".puppeteerrc.cts":`puppeteer`,".puppeteerrc.js":`puppeteer`,".puppeteerrc.json":`puppeteer`,".puppeteerrc.json5":`puppeteer`,".puppeteerrc.jsonc":`puppeteer`,".puppeteerrc.mjs":`puppeteer`,".puppeteerrc.mts":`puppeteer`,".puppeteerrc.toml":`puppeteer`,".puppeteerrc.ts":`puppeteer`,".puppeteerrc.yaml":`puppeteer`,".puppeteerrc.yml":`puppeteer`,".pylintrc":`python-misc`,".python-version":`python-misc`,".qa-mincloudrc":`ifanr-cloud`,".release-it.cjs":`rocket`,".release-it.js":`rocket`,".release-it.json":`rocket`,".release-it.toml":`rocket`,".release-it.ts":`rocket`,".release-it.yaml":`rocket`,".release-it.yml":`rocket`,".release-plz.toml":`rocket`,".releaserc":`semantic-release`,".releaserc.cjs":`semantic-release`,".releaserc.cts":`semantic-release`,".releaserc.js":`semantic-release`,".releaserc.json":`semantic-release`,".releaserc.json5":`semantic-release`,".releaserc.jsonc":`semantic-release`,".releaserc.mjs":`semantic-release`,".releaserc.mts":`semantic-release`,".releaserc.toml":`semantic-release`,".releaserc.ts":`semantic-release`,".releaserc.yaml":`semantic-release`,".releaserc.yml":`semantic-release`,".remarkignore":`remark`,".remarkrc":`remark`,".remarkrc.cjs":`remark`,".remarkrc.js":`remark`,".remarkrc.json":`remark`,".remarkrc.mjs":`remark`,".remarkrc.yaml":`remark`,".remarkrc.yml":`remark`,".renovaterc":`renovate`,".renovaterc.json":`renovate`,".replit":`replit`,".rhistory":`r`,".rspec":`rspec`,".rubocop-todo.yml":`rubocop`,".rubocop.yml":`rubocop`,".rubocop_todo.yml":`rubocop`,".ruby-version":`ruby`,".ruff.toml":`ruff`,".scrapy":`python-misc`,".secrets":`key`,".semgrepignore":`semgrep`,".sentryclirc":`sentry`,".sequelizerc":`sequelize`,".shellcheckrc":`shellcheck`,".slugignore":`slug`,".snyk":`snyk`,".sonarcloud.properties":`sonarcloud`,".stackblitzrc":`stackblitz`,".steadybit.yaml":`steadybit`,".steadybit.yml":`steadybit`,".stryker.conf.cjs":`stryker`,".stryker.conf.js":`stryker`,".stryker.conf.json":`stryker`,".stryker.conf.mjs":`stryker`,".stryker.config.cjs":`stryker`,".stryker.config.js":`stryker`,".stryker.config.json":`stryker`,".stryker.config.mjs":`stryker`,".stylelintcache":`stylelint`,".stylelintignore":`stylelint`,".stylelintrc":`stylelint`,".stylelintrc.cjs":`stylelint`,".stylelintrc.cts":`stylelint`,".stylelintrc.js":`stylelint`,".stylelintrc.json":`stylelint`,".stylelintrc.json5":`stylelint`,".stylelintrc.jsonc":`stylelint`,".stylelintrc.mjs":`stylelint`,".stylelintrc.mts":`stylelint`,".stylelintrc.toml":`stylelint`,".stylelintrc.ts":`stylelint`,".stylelintrc.yaml":`stylelint`,".stylelintrc.yml":`stylelint`,".svgrrc":`svgr`,".svgrrc.cjs":`svgr`,".svgrrc.cts":`svgr`,".svgrrc.js":`svgr`,".svgrrc.json":`svgr`,".svgrrc.json5":`svgr`,".svgrrc.jsonc":`svgr`,".svgrrc.mjs":`svgr`,".svgrrc.mts":`svgr`,".svgrrc.toml":`svgr`,".svgrrc.ts":`svgr`,".svgrrc.yaml":`svgr`,".svgrrc.yml":`svgr`,".swift-format":`swift`,".swift-version":`swift`,".swiftformat":`swift`,".syncpackrc":`syncpack`,".syncpackrc.cjs":`syncpack`,".syncpackrc.cts":`syncpack`,".syncpackrc.js":`syncpack`,".syncpackrc.json":`syncpack`,".syncpackrc.json5":`syncpack`,".syncpackrc.jsonc":`syncpack`,".syncpackrc.mjs":`syncpack`,".syncpackrc.mts":`syncpack`,".syncpackrc.toml":`syncpack`,".syncpackrc.ts":`syncpack`,".syncpackrc.yaml":`syncpack`,".syncpackrc.yml":`syncpack`,".taskrc.yaml":`taskfile`,".taskrc.yml":`taskfile`,".taurignore":`tauri`,".tazerc":`taze`,".tazerc.json":`taze`,".textlintignore":`textlint`,".textlintrc":`textlint`,".textlintrc.cjs":`textlint`,".textlintrc.js":`textlint`,".textlintrc.json":`textlint`,".textlintrc.yaml":`textlint`,".textlintrc.yml":`textlint`,".tobimake":`tobimake`,".travis.yml":`travis`,".umirc.cjs":`umi`,".umirc.cts":`umi`,".umirc.js":`umi`,".umirc.mjs":`umi`,".umirc.mts":`umi`,".umirc.ts":`umi`,".uv.toml":`uv`,".vars":`tune`,".vercelignore":`vercel`,".vfl":`vfl`,".vsconfig":`visualstudio`,".vuerc":`vue-config`,".wakatime-project":`wakatime`,".watchmanconfig":`watchman`,".whitesource":`json`,".yardopts":`settings`,".yarn-integrity":`yarn`,".yarnclean":`yarn`,".yarnrc":`yarn`,".yarnrc.yaml":`yarn`,".yarnrc.yml":`yarn`,_sc_:`godot-assets`,ace:`adonis`,"amplify.yml":`amplify`,"androidmanifest.xml":`android`,"angular-cli.json":`angular`,"angular.json":`angular`,apkbuild:`console`,"apollo.config.js":`apollo`,appfile:`fastlane`,appraisals:`ruby`,"appveyor.yml":`appveyor`,"appwrite.js":`appwrite`,"appwrite.json":`appwrite`,"appwrite.ts":`appwrite`,architecture:`architecture`,"architecture.md":`architecture`,"architecture.rst":`architecture`,"architecture.txt":`architecture`,artisan:`laravel`,"astro.config.cjs":`astro-config`,"astro.config.cts":`astro-config`,"astro.config.js":`astro-config`,"astro.config.mjs":`astro-config`,"astro.config.mts":`astro-config`,"astro.config.ts":`astro-config`,"aurelia.json":`aurelia`,authors:`authors`,"authors.md":`authors`,"authors.rst":`authors`,"authors.txt":`authors`,"auto-config.js":`auto`,"auto-config.json":`auto`,"auto-config.ts":`auto`,"auto-config.yaml":`auto`,"auto-config.yml":`auto`,"auto.config.js":`auto`,"auto.config.ts":`auto`,"azure-pipelines-main.yaml":`azure-pipelines`,"azure-pipelines-main.yml":`azure-pipelines`,"azure-pipelines.yaml":`azure-pipelines`,"azure-pipelines.yml":`azure-pipelines`,"babel-plugin-macros.config.cjs":`babel`,"babel-plugin-macros.config.cts":`babel`,"babel-plugin-macros.config.js":`babel`,"babel-plugin-macros.config.json":`babel`,"babel-plugin-macros.config.json5":`babel`,"babel-plugin-macros.config.jsonc":`babel`,"babel-plugin-macros.config.mjs":`babel`,"babel-plugin-macros.config.mts":`babel`,"babel-plugin-macros.config.toml":`babel`,"babel-plugin-macros.config.ts":`babel`,"babel-plugin-macros.config.yaml":`babel`,"babel-plugin-macros.config.yml":`babel`,"babel-transform.js":`babel`,"babel.config.cjs":`babel`,"babel.config.cts":`babel`,"babel.config.js":`babel`,"babel.config.json":`babel`,"babel.config.json5":`babel`,"babel.config.jsonc":`babel`,"babel.config.mjs":`babel`,"babel.config.mts":`babel`,"babel.config.toml":`babel`,"babel.config.ts":`babel`,"babel.config.yaml":`babel`,"babel.config.yml":`babel`,bashrc_apple_terminal:`console`,berksfile:`ruby`,"berksfile.lock":`ruby`,"biome.json":`biome`,"biome.jsonc":`biome`,"bitbucket-pipelines.yaml":`bitbucket`,"bitbucket-pipelines.yml":`bitbucket`,"blitz.config.js":`blitz`,"blitz.config.ts":`blitz`,"bower.json":`bower`,brewfile:`ruby`,browserslist:`browserlist`,"buildkite.yaml":`buildkite`,"buildkite.yml":`buildkite`,"bun.lock":`bun`,"bun.lockb":`bun`,"bunfig.toml":`bun`,"cabal.project":`cabal`,"cabal.project.freeze":`cabal`,"cabal.project.local":`cabal`,caddyfile:`caddy`,"capacitor.config.json":`capacitor`,"capacitor.config.ts":`capacitor`,capfile:`ruby`,"cdp.pid":`json`,"celerybeat-schedule":`python-misc`,"celerybeat.pid":`python-misc`,changelog:`changelog`,"changelog.md":`changelog`,"changelog.rst":`changelog`,"changelog.txt":`changelog`,changes:`changelog`,"changes.md":`changelog`,"changes.rst":`changelog`,"changes.txt":`changelog`,cheffile:`ruby`,"chromatic.config.json":`chromatic`,"circle.yml":`circleci`,"citation.cff":`citation`,"claude.local.md":`claude`,"claude.md":`claude`,"cmakecache.txt":`cmake`,"cmakelists.txt":`cmake`,"cmakepresets.json":`cmake`,cname:`http`,code_of_conduct:`conduct`,"code_of_conduct.md":`conduct`,"code_of_conduct.txt":`conduct`,"codecov.yaml":`codecov`,"codecov.yml":`codecov`,codeowners:`codeowners`,"commit-msg":`console`,commit_editmsg:`git`,"commitlint.config.cjs":`commitlint`,"commitlint.config.cts":`commitlint`,"commitlint.config.js":`commitlint`,"commitlint.config.json":`commitlint`,"commitlint.config.json5":`commitlint`,"commitlint.config.jsonc":`commitlint`,"commitlint.config.mjs":`commitlint`,"commitlint.config.mts":`commitlint`,"commitlint.config.toml":`commitlint`,"commitlint.config.ts":`commitlint`,"commitlint.config.yaml":`commitlint`,"commitlint.config.yml":`commitlint`,"compile_flags.txt":`settings`,"compose.alpha.yaml":`docker`,"compose.alpha.yml":`docker`,"compose.beta.yaml":`docker`,"compose.beta.yml":`docker`,"compose.ci.yaml":`docker`,"compose.ci.yml":`docker`,"compose.dev.yaml":`docker`,"compose.dev.yml":`docker`,"compose.development.yaml":`docker`,"compose.development.yml":`docker`,"compose.local.yaml":`docker`,"compose.local.yml":`docker`,"compose.override.yaml":`docker`,"compose.override.yml":`docker`,"compose.prod.yaml":`docker`,"compose.prod.yml":`docker`,"compose.production.yaml":`docker`,"compose.production.yml":`docker`,"compose.stage.yaml":`docker`,"compose.stage.yml":`docker`,"compose.staging.yaml":`docker`,"compose.staging.yml":`docker`,"compose.test.yaml":`docker`,"compose.test.yml":`docker`,"compose.testing.yaml":`docker`,"compose.testing.yml":`docker`,"compose.web.yaml":`docker`,"compose.web.yml":`docker`,"compose.worker.yaml":`docker`,"compose.worker.yml":`docker`,"compose.yaml":`docker`,"compose.yml":`docker`,"composer.lock":`json`,"concourse.yml":`concourse`,containerfile:`docker`,"containerfile.alpha":`docker`,"containerfile.beta":`docker`,"containerfile.ci":`docker`,"containerfile.dev":`docker`,"containerfile.development":`docker`,"containerfile.local":`docker`,"containerfile.prod":`docker`,"containerfile.production":`docker`,"containerfile.stage":`docker`,"containerfile.staging":`docker`,"containerfile.test":`docker`,"containerfile.testing":`docker`,"containerfile.web":`docker`,"containerfile.worker":`docker`,"contentlayer.config.cjs":`contentlayer`,"contentlayer.config.cts":`contentlayer`,"contentlayer.config.js":`contentlayer`,"contentlayer.config.mjs":`contentlayer`,"contentlayer.config.mts":`contentlayer`,"contentlayer.config.ts":`contentlayer`,contributing:`contributing`,"contributing.md":`contributing`,"contributing.rst":`contributing`,"contributing.txt":`contributing`,contributors:`authors`,"contributors.md":`authors`,"contributors.rst":`authors`,"contributors.txt":`authors`,"copilot-instructions.md":`copilot`,copying:`license`,"copying.md":`license`,"copying.rst":`license`,"copying.txt":`license`,copyright:`license`,"copyright.md":`license`,"copyright.rst":`license`,"copyright.txt":`license`,"craco.config.cjs":`craco`,"craco.config.cts":`craco`,"craco.config.js":`craco`,"craco.config.json":`craco`,"craco.config.json5":`craco`,"craco.config.jsonc":`craco`,"craco.config.mjs":`craco`,"craco.config.mts":`craco`,"craco.config.toml":`craco`,"craco.config.ts":`craco`,"craco.config.yaml":`craco`,"craco.config.yml":`craco`,credits:`credits`,"credits.md":`credits`,"credits.rst":`credits`,"credits.txt":`credits`,"cypress.config.cjs":`cypress`,"cypress.config.cts":`cypress`,"cypress.config.js":`cypress`,"cypress.config.mjs":`cypress`,"cypress.config.mts":`cypress`,"cypress.config.ts":`cypress`,"cypress.env.json":`cypress`,"cypress.json":`cypress`,"cz.json":`commitizen`,"cz.toml":`commitizen`,"cz.yaml":`commitizen`,"cz.yml":`commitizen`,dangerfile:`ruby`,deliverfile:`ruby`,"deno.json":`deno`,"deno.jsonc":`deno`,"deno.lock":`deno`,"dependabot.yaml":`dependabot`,"dependabot.yml":`dependabot`,"docker-compose.alpha.yaml":`docker`,"docker-compose.alpha.yml":`docker`,"docker-compose.beta.yaml":`docker`,"docker-compose.beta.yml":`docker`,"docker-compose.ci.yaml":`docker`,"docker-compose.ci.yml":`docker`,"docker-compose.dev.yaml":`docker`,"docker-compose.dev.yml":`docker`,"docker-compose.development.yaml":`docker`,"docker-compose.development.yml":`docker`,"docker-compose.local.yaml":`docker`,"docker-compose.local.yml":`docker`,"docker-compose.override.yaml":`docker`,"docker-compose.override.yml":`docker`,"docker-compose.prod.yaml":`docker`,"docker-compose.prod.yml":`docker`,"docker-compose.production.yaml":`docker`,"docker-compose.production.yml":`docker`,"docker-compose.stage.yaml":`docker`,"docker-compose.stage.yml":`docker`,"docker-compose.staging.yaml":`docker`,"docker-compose.staging.yml":`docker`,"docker-compose.test.yaml":`docker`,"docker-compose.test.yml":`docker`,"docker-compose.testing.yaml":`docker`,"docker-compose.testing.yml":`docker`,"docker-compose.web.yaml":`docker`,"docker-compose.web.yml":`docker`,"docker-compose.worker.yaml":`docker`,"docker-compose.worker.yml":`docker`,"docker-compose.yaml":`docker`,"docker-compose.yml":`docker`,dockerfile:`docker`,"dockerfile.alpha":`docker`,"dockerfile.beta":`docker`,"dockerfile.ci":`docker`,"dockerfile.dev":`docker`,"dockerfile.development":`docker`,"dockerfile.local":`docker`,"dockerfile.prod":`docker`,"dockerfile.production":`docker`,"dockerfile.stage":`docker`,"dockerfile.staging":`docker`,"dockerfile.test":`docker`,"dockerfile.testing":`docker`,"dockerfile.web":`docker`,"dockerfile.windows":`docker`,"dockerfile.worker":`docker`,"drizzle.config.dev.js":`drizzle`,"drizzle.config.dev.json":`drizzle`,"drizzle.config.dev.ts":`drizzle`,"drizzle.config.js":`drizzle`,"drizzle.config.json":`drizzle`,"drizzle.config.prod.js":`drizzle`,"drizzle.config.prod.json":`drizzle`,"drizzle.config.prod.ts":`drizzle`,"drizzle.config.ts":`drizzle`,"duc.fbs":`duc`,dune:`dune`,"dune-project":`dune`,"dune-workspace":`dune`,"dune-workspace.dev":`dune`,"eas.json":`expo`,"ecosystem.config.cjs":`pm2-ecosystem`,"ecosystem.config.cts":`pm2-ecosystem`,"ecosystem.config.js":`pm2-ecosystem`,"ecosystem.config.mjs":`pm2-ecosystem`,"ecosystem.config.mts":`pm2-ecosystem`,"ecosystem.config.ts":`pm2-ecosystem`,"ember-cli-builds.js":`ember`,"esbuild.cjs":`esbuild`,"esbuild.config.cjs":`esbuild`,"esbuild.config.cts":`esbuild`,"esbuild.config.js":`esbuild`,"esbuild.config.mjs":`esbuild`,"esbuild.config.mts":`esbuild`,"esbuild.config.ts":`esbuild`,"esbuild.cts":`esbuild`,"esbuild.dev.cjs":`esbuild`,"esbuild.dev.cts":`esbuild`,"esbuild.dev.js":`esbuild`,"esbuild.dev.mjs":`esbuild`,"esbuild.dev.mts":`esbuild`,"esbuild.dev.ts":`esbuild`,"esbuild.js":`esbuild`,"esbuild.mjs":`esbuild`,"esbuild.mts":`esbuild`,"esbuild.prod.cjs":`esbuild`,"esbuild.prod.cts":`esbuild`,"esbuild.prod.js":`esbuild`,"esbuild.prod.mjs":`esbuild`,"esbuild.prod.mts":`esbuild`,"esbuild.prod.ts":`esbuild`,"esbuild.stage.cjs":`esbuild`,"esbuild.stage.cts":`esbuild`,"esbuild.stage.js":`esbuild`,"esbuild.stage.mjs":`esbuild`,"esbuild.stage.mts":`esbuild`,"esbuild.stage.ts":`esbuild`,"esbuild.test.cjs":`esbuild`,"esbuild.test.cts":`esbuild`,"esbuild.test.js":`esbuild`,"esbuild.test.mjs":`esbuild`,"esbuild.test.mts":`esbuild`,"esbuild.test.ts":`esbuild`,"esbuild.ts":`esbuild`,"eslint-options.js":`eslint`,"eslint.config.cjs":`eslint`,"eslint.config.cts":`eslint`,"eslint.config.js":`eslint`,"eslint.config.json":`eslint`,"eslint.config.json5":`eslint`,"eslint.config.jsonc":`eslint`,"eslint.config.mjs":`eslint`,"eslint.config.mts":`eslint`,"eslint.config.toml":`eslint`,"eslint.config.ts":`eslint`,"eslint.config.yaml":`eslint`,"eslint.config.yml":`eslint`,excalidraw:`excalidraw`,"excalidraw.json":`excalidraw`,"excalidraw.png":`excalidraw`,"excalidraw.svg":`excalidraw`,"fabric.mod.json":`minecraft-fabric`,fastfile:`fastlane`,"favicon.ico":`favicon`,"firebase.config.js":`firebase`,"firebase.json":`firebase`,"firestore.indexes.json":`firebase`,"firestore.rules":`firebase`,"fuse.js":`fusebox`,"garden.yaml":`garden`,"garden.yml":`garden`,"gatsby-browser.js":`gatsby`,"gatsby-browser.tsx":`gatsby`,"gatsby-config.js":`gatsby`,"gatsby-config.mjs":`gatsby`,"gatsby-config.ts":`gatsby`,"gatsby-node.js":`gatsby`,"gatsby-node.mjs":`gatsby`,"gatsby-node.ts":`gatsby`,"gatsby-ssr.js":`gatsby`,"gatsby-ssr.tsx":`gatsby`,gemfile:`gemfile`,"gemini.md":`gemini-ai`,"git-history":`git`,"git-rebase-todo":`git`,"gleam.toml":`gleam`,gnumakefile:`makefile`,"go.mod":`go-mod`,"go.sum":`go-mod`,"go.work":`go-mod`,"go.work.sum":`go-mod`,"google-services.json":`google`,"googleservice-info.plist":`google`,"gradle-wrapper.properties":`gradle`,"gradle.properties":`gradle`,gradlew:`gradle`,"gradlew.bat":`gradle`,"graphql.config.cjs":`graphql`,"graphql.config.cts":`graphql`,"graphql.config.js":`graphql`,"graphql.config.json":`graphql`,"graphql.config.json5":`graphql`,"graphql.config.jsonc":`graphql`,"graphql.config.mjs":`graphql`,"graphql.config.mts":`graphql`,"graphql.config.toml":`graphql`,"graphql.config.ts":`graphql`,"graphql.config.yaml":`graphql`,"graphql.config.yml":`graphql`,"gridsome.config.js":`gridsome`,"gridsome.server.js":`gridsome`,"gruntfile.babel.coffee":`grunt`,"gruntfile.babel.js":`grunt`,"gruntfile.babel.ts":`grunt`,"gruntfile.cjs":`grunt`,"gruntfile.coffee":`grunt`,"gruntfile.cts":`grunt`,"gruntfile.js":`grunt`,"gruntfile.ts":`grunt`,guardfile:`ruby`,"gulpfile.babel.js":`gulp`,"gulpfile.cjs":`gulp`,"gulpfile.cts":`gulp`,"gulpfile.js":`gulp`,"gulpfile.mjs":`gulp`,"gulpfile.mts":`gulp`,"gulpfile.ts":`gulp`,gymfile:`ruby`,"hadolint.yaml":`hadolint`,"hadolint.yml":`hadolint`,"hardhat.config.js":`hardhat`,"hardhat.config.ts":`hardhat`,"harmonix.config.js":`harmonix`,"harmonix.config.ts":`harmonix`,hgrc:`mercurial`,"histoire.config.cjs":`histoire`,"histoire.config.cts":`histoire`,"histoire.config.js":`histoire`,"histoire.config.mjs":`histoire`,"histoire.config.mts":`histoire`,"histoire.config.ts":`histoire`,hobofile:`ruby`,"horusec-config.json":`horusec`,hosts:`hosts`,"husky.config.cjs":`husky`,"husky.config.cts":`husky`,"husky.config.js":`husky`,"husky.config.json":`husky`,"husky.config.json5":`husky`,"husky.config.jsonc":`husky`,"husky.config.mjs":`husky`,"husky.config.mts":`husky`,"husky.config.toml":`husky`,"husky.config.ts":`husky`,"husky.config.yaml":`husky`,"husky.config.yml":`husky`,install:`installation`,installation:`installation`,"ionic.config.json":`ionic`,jakefile:`javascript`,jenkinsfile:`jenkins`,"jest-e2e.config.cjs":`jest`,"jest-e2e.config.cts":`jest`,"jest-e2e.config.js":`jest`,"jest-e2e.config.json":`jest`,"jest-e2e.config.mjs":`jest`,"jest-e2e.config.mts":`jest`,"jest-e2e.config.ts":`jest`,"jest-e2e.json":`jest`,"jest-github-actions-reporter.js":`jest`,"jest-preset.cjs":`jest`,"jest-preset.js":`jest`,"jest-preset.json":`jest`,"jest-preset.mjs":`jest`,"jest-unit.config.js":`jest`,"jest.config.cjs":`jest`,"jest.config.cts":`jest`,"jest.config.js":`jest`,"jest.config.json":`jest`,"jest.config.mjs":`jest`,"jest.config.mts":`jest`,"jest.config.ts":`jest`,"jest.e2e.config.cjs":`jest`,"jest.e2e.config.cts":`jest`,"jest.e2e.config.js":`jest`,"jest.e2e.config.json":`jest`,"jest.e2e.config.mjs":`jest`,"jest.e2e.config.mts":`jest`,"jest.e2e.config.ts":`jest`,"jest.e2e.json":`jest`,"jest.json":`jest`,"jest.preset.cjs":`jest`,"jest.preset.js":`jest`,"jest.preset.json":`jest`,"jest.preset.mjs":`jest`,"jest.setup.js":`jest`,"jest.setup.ts":`jest`,"jest.teardown.js":`jest`,"jsconfig.json":`jsconfig`,"jsr.json":`jsr`,"jsr.jsonc":`jsr`,justfile:`just`,"jvm.config":`maven`,"k8s.yaml":`kubernetes`,"k8s.yml":`kubernetes`,"karma-main.js":`karma`,"karma-main.ts":`karma`,"karma.conf.coffee":`karma`,"karma.conf.js":`karma`,"karma.conf.ts":`karma`,"karma.config.js":`karma`,"karma.config.ts":`karma`,kbuild:`makefile`,"kcl.mod":`kcl`,"kcl.yaml":`kcl`,"kcl.yml":`kcl`,"keystatic.config.js":`keystatic`,"keystatic.config.jsx":`keystatic`,"keystatic.config.ts":`keystatic`,"keystatic.config.tsx":`keystatic`,"knip.config.js":`knip`,"knip.config.ts":`knip`,"knip.js":`knip`,"knip.json":`knip`,"knip.jsonc":`knip`,"knip.ts":`knip`,"kubernetes.yaml":`kubernetes`,"kubernetes.yml":`kubernetes`,latexmkrc:`latexmk`,"lefthook-local.json":`lefthook`,"lefthook-local.toml":`lefthook`,"lefthook-local.yaml":`lefthook`,"lefthook-local.yml":`lefthook`,"lefthook.json":`lefthook`,"lefthook.toml":`lefthook`,"lefthook.yaml":`lefthook`,"lefthook.yml":`lefthook`,lefthookrc:`lefthook`,"lerna.json":`lerna`,"liara.json":`liara`,licence:`license`,"licence-agpl":`license`,"licence-apache":`license`,"licence-bsd":`license`,"licence-gpl":`license`,"licence-lgpl":`license`,"licence-mit":`license`,"licence.md":`license`,"licence.rst":`license`,"licence.txt":`license`,license:`license`,"license-agpl":`license`,"license-apache":`license`,"license-bsd":`license`,"license-gpl":`license`,"license-lgpl":`license`,"license-mit":`license`,"license.md":`license`,"license.rst":`license`,"license.txt":`license`,"lighthouserc.cjs":`lighthouse`,"lighthouserc.js":`lighthouse`,"lighthouserc.json":`lighthouse`,"lighthouserc.yaml":`lighthouse`,"lighthouserc.yml":`lighthouse`,"lint-staged.config.cjs":`lintstaged`,"lint-staged.config.js":`lintstaged`,"lint-staged.config.mjs":`lintstaged`,"lynx.config.cjs":`lynx`,"lynx.config.cts":`lynx`,"lynx.config.js":`lynx`,"lynx.config.mjs":`lynx`,"lynx.config.mts":`lynx`,"lynx.config.ts":`lynx`,makefile:`makefile`,"manifest.in":`python-misc`,"manifest.mf":`settings`,"markdoc.config.cjs":`markdoc-config`,"markdoc.config.cts":`markdoc-config`,"markdoc.config.js":`markdoc-config`,"markdoc.config.mjs":`markdoc-config`,"markdoc.config.mts":`markdoc-config`,"markdoc.config.ts":`markdoc-config`,matchfile:`ruby`,"maven.config":`maven`,"mercurial.ini":`mercurial`,merge_msg:`git`,"meson.build":`meson`,"meson.options":`meson`,"meson_options.txt":`meson`,"metro.config.cjs":`metro`,"metro.config.cts":`metro`,"metro.config.js":`metro`,"metro.config.json":`metro`,"metro.config.mjs":`metro`,"metro.config.mts":`metro`,"metro.config.ts":`metro`,"milestones.md":`roadmap`,"milestones.txt":`roadmap`,"mocha.opts":`mocha`,"moon.yml":`moon`,"nano-staged.cjs":`nano-staged`,"nano-staged.js":`nano-staged`,"nano-staged.json":`nano-staged`,"nano-staged.mjs":`nano-staged`,"nest-cli.json":`nest`,"nestconfig.json":`nest`,"netlify.json":`netlify`,"netlify.toml":`netlify`,"netlify.yaml":`netlify`,"netlify.yml":`netlify`,"next.config.js":`next`,"next.config.mjs":`next`,"next.config.mts":`next`,"next.config.ts":`next`,"ng-package.json":`angular`,"nginx.conf":`nginx`,"nodemon-debug.json":`nodemon`,"nodemon.json":`nodemon`,"now.json":`vercel`,"nuget.config":`nuget`,"nuget.exe":`nuget`,"nuxt.config.js":`nuxt`,"nuxt.config.ts":`nuxt`,"nx.json":`nx`,"nyc.config.cjs":`istanbul`,"nyc.config.js":`istanbul`,"openapi.json":`openapi`,"openapi.yaml":`openapi`,"openapi.yml":`openapi`,"opencode.json":`opencode`,"opencode.jsonc":`opencode`,owners:`codeowners`,"oxfmt.config.ts":`oxc`,"oxlint.config.ts":`oxc`,"package-lock.json":`nodejs`,"package.json":`nodejs`,"packship.config.js":`packship`,"packship.config.json":`packship`,"packship.config.mjs":`packship`,"packship.config.mts":`packship`,"packship.config.ts":`packship`,"panda.config.cjs":`panda`,"panda.config.cts":`panda`,"panda.config.js":`panda`,"panda.config.mjs":`panda`,"panda.config.mts":`panda`,"panda.config.ts":`panda`,"payload.config.js":`payload`,"payload.config.mjs":`payload`,"payload.config.mts":`payload`,"payload.config.ts":`payload`,"pdm.lock":`pdm`,"pdm.toml":`pdm`,"phpstan.dist.neon":`phpstan`,"phpstan.neon":`phpstan`,"phpstan.neon.dist":`phpstan`,"phpunit-watcher.yml":`phpunit`,"phpunit-watcher.yml.dist":`phpunit`,"phpunit.xml":`phpunit`,"phpunit.xml.dist":`phpunit`,pipfile:`python-misc`,pkgbuild:`console`,pklproject:`pkl`,"pklproject.deps.json":`pkl`,"plastic.branchexplorer":`plastic`,"plastic.selector":`plastic`,"plastic.wktree":`plastic`,"plastic.workspace":`plastic`,"plastic.workspaces":`plastic`,"playwright-ct.config.cjs":`playwright`,"playwright-ct.config.cts":`playwright`,"playwright-ct.config.js":`playwright`,"playwright-ct.config.mjs":`playwright`,"playwright-ct.config.mts":`playwright`,"playwright-ct.config.ts":`playwright`,"playwright.config.base.cjs":`playwright`,"playwright.config.base.cts":`playwright`,"playwright.config.base.js":`playwright`,"playwright.config.base.mjs":`playwright`,"playwright.config.base.mts":`playwright`,"playwright.config.base.ts":`playwright`,"playwright.config.cjs":`playwright`,"playwright.config.cts":`playwright`,"playwright.config.js":`playwright`,"playwright.config.mjs":`playwright`,"playwright.config.mts":`playwright`,"playwright.config.ts":`playwright`,"plopfile.cjs":`plop`,"plopfile.js":`plop`,"plopfile.mjs":`plop`,"plopfile.ts":`plop`,"pnpm-lock.yaml":`pnpm`,"pnpm-workspace.yaml":`pnpm`,podfile:`ruby`,"poetry.lock":`poetry`,"pom.xml":`maven`,"post-merge":`console`,"postcss.config.cjs":`postcss`,"postcss.config.cts":`postcss`,"postcss.config.js":`postcss`,"postcss.config.json":`postcss`,"postcss.config.json5":`postcss`,"postcss.config.jsonc":`postcss`,"postcss.config.mjs":`postcss`,"postcss.config.mts":`postcss`,"postcss.config.toml":`postcss`,"postcss.config.ts":`postcss`,"postcss.config.yaml":`postcss`,"postcss.config.yml":`postcss`,"posthtml.config.cjs":`posthtml`,"posthtml.config.cts":`posthtml`,"posthtml.config.js":`posthtml`,"posthtml.config.json":`posthtml`,"posthtml.config.json5":`posthtml`,"posthtml.config.jsonc":`posthtml`,"posthtml.config.mjs":`posthtml`,"posthtml.config.mts":`posthtml`,"posthtml.config.toml":`posthtml`,"posthtml.config.ts":`posthtml`,"posthtml.config.yaml":`posthtml`,"posthtml.config.yml":`posthtml`,"pre-commit":`console`,"pre-push":`console`,"prettier.config.cjs":`prettier`,"prettier.config.cts":`prettier`,"prettier.config.js":`prettier`,"prettier.config.json":`prettier`,"prettier.config.json5":`prettier`,"prettier.config.jsonc":`prettier`,"prettier.config.mjs":`prettier`,"prettier.config.mts":`prettier`,"prettier.config.toml":`prettier`,"prettier.config.ts":`prettier`,"prettier.config.yaml":`prettier`,"prettier.config.yml":`prettier`,"prisma.config.ts":`prisma`,"prisma.yml":`prisma`,procfile:`heroku`,"procfile.windows":`heroku`,"project.garden.yaml":`garden`,"project.garden.yml":`garden`,"project.graphcool":`graphcool`,"protractor.conf.coffee":`protractor`,"protractor.conf.js":`protractor`,"protractor.conf.ts":`protractor`,"protractor.config.js":`protractor`,"protractor.config.ts":`protractor`,"puppeteer.config.cjs":`puppeteer`,"puppeteer.config.cts":`puppeteer`,"puppeteer.config.js":`puppeteer`,"puppeteer.config.json":`puppeteer`,"puppeteer.config.json5":`puppeteer`,"puppeteer.config.jsonc":`puppeteer`,"puppeteer.config.mjs":`puppeteer`,"puppeteer.config.mts":`puppeteer`,"puppeteer.config.toml":`puppeteer`,"puppeteer.config.ts":`puppeteer`,"puppeteer.config.yaml":`puppeteer`,"puppeteer.config.yml":`puppeteer`,puppetfile:`ruby`,"py.typed":`python-misc`,pylintrc:`python-misc`,"pyproject.toml":`python-misc`,"quasar.conf.js":`quasar`,"quasar.conf.ts":`quasar`,"quasar.config.cjs":`quasar`,"quasar.config.js":`quasar`,"quasar.config.ts":`quasar`,rakefile:`ruby`,rantfile:`ruby`,readme:`readme`,"readme.md":`readme`,"readme.rst":`readme`,"readme.txt":`readme`,"release-plz.toml":`rocket`,"release.config.cjs":`semantic-release`,"release.config.cts":`semantic-release`,"release.config.js":`semantic-release`,"release.config.json":`semantic-release`,"release.config.json5":`semantic-release`,"release.config.jsonc":`semantic-release`,"release.config.mjs":`semantic-release`,"release.config.mts":`semantic-release`,"release.config.toml":`semantic-release`,"release.config.ts":`semantic-release`,"release.config.yaml":`semantic-release`,"release.config.yml":`semantic-release`,"release.toml":`rocket`,"remix.config.js":`remix`,"remix.config.ts":`remix`,"renovate-config.json":`renovate`,"renovate.json":`renovate`,"renovate.json5":`renovate`,"requirements.txt":`python-misc`,"roadmap.md":`roadmap`,"roadmap.txt":`roadmap`,"robots.txt":`robots`,"rolldown.config.cjs":`rolldown`,"rolldown.config.cts":`rolldown`,"rolldown.config.js":`rolldown`,"rolldown.config.mjs":`rolldown`,"rolldown.config.mts":`rolldown`,"rolldown.config.ts":`rolldown`,"rollup-config.js":`rollup`,"rollup-config.mjs":`rollup`,"rollup-config.ts":`rollup`,"rollup.config.base.js":`rollup`,"rollup.config.base.mjs":`rollup`,"rollup.config.base.ts":`rollup`,"rollup.config.common.js":`rollup`,"rollup.config.common.mjs":`rollup`,"rollup.config.common.ts":`rollup`,"rollup.config.dev.js":`rollup`,"rollup.config.dev.mjs":`rollup`,"rollup.config.dev.ts":`rollup`,"rollup.config.js":`rollup`,"rollup.config.mjs":`rollup`,"rollup.config.prod.js":`rollup`,"rollup.config.prod.mjs":`rollup`,"rollup.config.prod.ts":`rollup`,"rollup.config.prod.vendor.js":`rollup`,"rollup.config.prod.vendor.mjs":`rollup`,"rollup.config.prod.vendor.ts":`rollup`,"rollup.config.ts":`rollup`,"rome.json":`rome`,"route.js":`routing`,"route.jsx":`routing`,"route.ts":`routing`,"route.tsx":`routing`,"router.js":`routing`,"router.jsx":`routing`,"router.ts":`routing`,"router.tsx":`routing`,"routes.js":`routing`,"routes.jsx":`routing`,"routes.ts":`routing`,"routes.tsx":`routing`,"rsbuild.config.cjs":`rstack`,"rsbuild.config.cts":`rstack`,"rsbuild.config.js":`rstack`,"rsbuild.config.mjs":`rstack`,"rsbuild.config.mts":`rstack`,"rsbuild.config.ts":`rstack`,"rslib.config.cjs":`rstack`,"rslib.config.cts":`rstack`,"rslib.config.js":`rstack`,"rslib.config.mjs":`rstack`,"rslib.config.mts":`rstack`,"rslib.config.ts":`rstack`,"rslint.config.cjs":`rstack`,"rslint.config.cts":`rstack`,"rslint.config.js":`rstack`,"rslint.config.mjs":`rstack`,"rslint.config.mts":`rstack`,"rslint.config.ts":`rstack`,"rslint.json":`rstack`,"rslint.jsonc":`rstack`,"rspack.config.cjs":`rstack`,"rspack.config.cts":`rstack`,"rspack.config.js":`rstack`,"rspack.config.mjs":`rstack`,"rspack.config.mts":`rstack`,"rspack.config.ts":`rstack`,"rspress.config.cjs":`rstack`,"rspress.config.cts":`rstack`,"rspress.config.js":`rstack`,"rspress.config.mjs":`rstack`,"rspress.config.mts":`rstack`,"rspress.config.ts":`rstack`,"rstest.config.cjs":`rstack`,"rstest.config.cts":`rstack`,"rstest.config.js":`rstack`,"rstest.config.mjs":`rstack`,"rstest.config.mts":`rstack`,"rstest.config.ts":`rstack`,"ruff.toml":`ruff`,scanfile:`ruby`,sconscript:`scons`,sconstruct:`scons`,"screwdriver.yaml":`screwdriver`,"screwdriver.yml":`screwdriver`,scsub:`scons`,security:`lock`,"security.md":`lock`,"security.txt":`lock`,"semgrep.yml":`semgrep`,"sentry.client.config.cjs":`sentry`,"sentry.client.config.cts":`sentry`,"sentry.client.config.js":`sentry`,"sentry.client.config.mjs":`sentry`,"sentry.client.config.mts":`sentry`,"sentry.client.config.ts":`sentry`,"sentry.edge.config.cjs":`sentry`,"sentry.edge.config.cts":`sentry`,"sentry.edge.config.js":`sentry`,"sentry.edge.config.mjs":`sentry`,"sentry.edge.config.mts":`sentry`,"sentry.edge.config.ts":`sentry`,"sentry.server.config.cjs":`sentry`,"sentry.server.config.cts":`sentry`,"sentry.server.config.js":`sentry`,"sentry.server.config.mjs":`sentry`,"sentry.server.config.mts":`sentry`,"sentry.server.config.ts":`sentry`,"serverless.js":`serverless`,"serverless.json":`serverless`,"serverless.ts":`serverless`,"serverless.yaml":`serverless`,"serverless.yml":`serverless`,sha256sums:`key`,shellcheckrc:`shellcheck`,"skill.md":`skill`,snakefile:`snakemake`,"snapcraft.yaml":`snapcraft`,"snapcraft.yml":`snapcraft`,snapfile:`ruby`,"snowpack.config.cjs":`snowpack`,"snowpack.config.cts":`snowpack`,"snowpack.config.js":`snowpack`,"snowpack.config.json":`snowpack`,"snowpack.config.mjs":`snowpack`,"snowpack.config.mts":`snowpack`,"snowpack.config.ts":`snowpack`,"snowpack.deps.json":`snowpack`,"sonar-project.properties":`sonarcloud`,"sonarcloud.yaml":`sonarcloud`,"sonarqube.analysis.xml":`sonarcloud`,"src/bashly.yaml":`bashly`,"src/bashly.yml":`bashly`,"steadybit.yaml":`steadybit`,"steadybit.yml":`steadybit`,"stencil.config.js":`stencil`,"stencil.config.ts":`stencil`,"stitches.config.js":`stitches`,"stitches.config.ts":`stitches`,"stryker.conf.cjs":`stryker`,"stryker.conf.js":`stryker`,"stryker.conf.json":`stryker`,"stryker.conf.mjs":`stryker`,"stryker.config.cjs":`stryker`,"stryker.config.js":`stryker`,"stryker.config.json":`stryker`,"stryker.config.mjs":`stryker`,"stylelint.config.cjs":`stylelint`,"stylelint.config.cts":`stylelint`,"stylelint.config.js":`stylelint`,"stylelint.config.json":`stylelint`,"stylelint.config.json5":`stylelint`,"stylelint.config.jsonc":`stylelint`,"stylelint.config.mjs":`stylelint`,"stylelint.config.mts":`stylelint`,"stylelint.config.toml":`stylelint`,"stylelint.config.ts":`stylelint`,"stylelint.config.yaml":`stylelint`,"stylelint.config.yml":`stylelint`,"supabase.js":`supabase`,"supabase.py":`supabase`,"supabase.ts":`supabase`,"svelte.config.cjs":`svelte`,"svelte.config.cts":`svelte`,"svelte.config.js":`svelte`,"svelte.config.mjs":`svelte`,"svelte.config.mts":`svelte`,"svelte.config.ts":`svelte`,"svgo.config.cjs":`svgo`,"svgo.config.js":`svgo`,"svgo.config.mjs":`svgo`,"svgr.config.cjs":`svgr`,"svgr.config.cts":`svgr`,"svgr.config.js":`svgr`,"svgr.config.json":`svgr`,"svgr.config.json5":`svgr`,"svgr.config.jsonc":`svgr`,"svgr.config.mjs":`svgr`,"svgr.config.mts":`svgr`,"svgr.config.toml":`svgr`,"svgr.config.ts":`svgr`,"svgr.config.yaml":`svgr`,"svgr.config.yml":`svgr`,"swagger.json":`swagger`,"swagger.yaml":`swagger`,"swagger.yml":`swagger`,"syncpack.config.cjs":`syncpack`,"syncpack.config.cts":`syncpack`,"syncpack.config.js":`syncpack`,"syncpack.config.json":`syncpack`,"syncpack.config.json5":`syncpack`,"syncpack.config.jsonc":`syncpack`,"syncpack.config.mjs":`syncpack`,"syncpack.config.mts":`syncpack`,"syncpack.config.toml":`syncpack`,"syncpack.config.ts":`syncpack`,"syncpack.config.yaml":`syncpack`,"syncpack.config.yml":`syncpack`,tags:`label`,"tailwind.config.cjs":`tailwindcss`,"tailwind.config.cts":`tailwindcss`,"tailwind.config.js":`tailwindcss`,"tailwind.config.mjs":`tailwindcss`,"tailwind.config.mts":`tailwindcss`,"tailwind.config.ts":`tailwindcss`,"tailwind.js":`tailwindcss`,"tailwind.ts":`tailwindcss`,"taskfile.dist.yaml":`taskfile`,"taskfile.dist.yml":`taskfile`,"taskfile.yaml":`taskfile`,"taskfile.yml":`taskfile`,"tauri.conf.json":`tauri`,"tauri.config.json":`tauri`,"tauri.linux.conf.json":`tauri`,"tauri.macos.conf.json":`tauri`,"tauri.windows.conf.json":`tauri`,"taze.config.cjs":`taze`,"taze.config.cts":`taze`,"taze.config.js":`taze`,"taze.config.mjs":`taze`,"taze.config.mts":`taze`,"taze.config.ts":`taze`,thorfile:`ruby`,tiltfile:`tilt`,"timeline.md":`roadmap`,"timeline.txt":`roadmap`,"todo.md":`todo`,"todos.md":`todo`,"trigger.config.cjs":`trigger`,"trigger.config.cts":`trigger`,"trigger.config.js":`trigger`,"trigger.config.mjs":`trigger`,"trigger.config.mts":`trigger`,"trigger.config.ts":`trigger`,"tsconfig.app.json":`tsconfig`,"tsconfig.base.json":`tsconfig`,"tsconfig.build.json":`tsconfig`,"tsconfig.cjs.json":`tsconfig`,"tsconfig.client.json":`tsconfig`,"tsconfig.config.json":`tsconfig`,"tsconfig.declaration.json":`tsconfig`,"tsconfig.doc.json":`tsconfig`,"tsconfig.e2e.json":`tsconfig`,"tsconfig.editor.json":`tsconfig`,"tsconfig.eslint.json":`tsconfig`,"tsconfig.esm.json":`tsconfig`,"tsconfig.json":`tsconfig`,"tsconfig.lib.json":`tsconfig`,"tsconfig.lib.prod.json":`tsconfig`,"tsconfig.main.json":`tsconfig`,"tsconfig.mjs.json":`tsconfig`,"tsconfig.node.json":`tsconfig`,"tsconfig.paths.json":`tsconfig`,"tsconfig.renderer.json":`tsconfig`,"tsconfig.server.json":`tsconfig`,"tsconfig.spec.json":`tsconfig`,"tsconfig.test.json":`tsconfig`,"tsconfig.vitest.json":`tsconfig`,"tsconfig.web.json":`tsconfig`,"tsconfig.webworker.json":`tsconfig`,"tsconfig.worker.json":`tsconfig`,"tsdoc.json":`tsdoc`,"tsdown.config":`tsdown`,"tsdown.config.cjs":`tsdown`,"tsdown.config.cts":`tsdown`,"tsdown.config.js":`tsdown`,"tsdown.config.json":`tsdown`,"tsdown.config.mjs":`tsdown`,"tsdown.config.mts":`tsdown`,"tsdown.config.ts":`tsdown`,"turbo.json":`turborepo`,"turbo.jsonc":`turborepo`,"typedoc.js":`typedoc`,"typedoc.json":`typedoc`,"typst.toml":`typst`,unlicense:`unlicense`,"unlicense.txt":`unlicense`,"uno.config.js":`unocss`,"uno.config.mjs":`unocss`,"uno.config.mts":`unocss`,"uno.config.ts":`unocss`,"unocss.config.js":`unocss`,"unocss.config.mjs":`unocss`,"unocss.config.mts":`unocss`,"unocss.config.ts":`unocss`,"uv.lock":`uv`,"uv.toml":`uv`,"v.mod":`vlang`,vagrantfile:`vagrant`,"velite.config.cjs":`velite`,"velite.config.cts":`velite`,"velite.config.js":`velite`,"velite.config.mjs":`velite`,"velite.config.mts":`velite`,"velite.config.ts":`velite`,"vercel.json":`vercel`,"vercel.ts":`vercel`,"verdaccio.yml":`verdaccio`,"vetur.config.js":`vue-config`,"vetur.config.ts":`vue-config`,"vite.config.cjs":`vite`,"vite.config.cts":`vite`,"vite.config.js":`vite`,"vite.config.mjs":`vite`,"vite.config.mts":`vite`,"vite.config.ts":`vite`,"vitest.config.cjs":`vitest`,"vitest.config.cts":`vitest`,"vitest.config.js":`vitest`,"vitest.config.mjs":`vitest`,"vitest.config.mts":`vitest`,"vitest.config.ts":`vitest`,"vitest.e2e.config.cjs":`vitest`,"vitest.e2e.config.cts":`vitest`,"vitest.e2e.config.js":`vitest`,"vitest.e2e.config.mjs":`vitest`,"vitest.e2e.config.mts":`vitest`,"vitest.e2e.config.ts":`vitest`,"vitest.unit.config.cjs":`vitest`,"vitest.unit.config.cts":`vitest`,"vitest.unit.config.js":`vitest`,"vitest.unit.config.mjs":`vitest`,"vitest.unit.config.mts":`vitest`,"vitest.unit.config.ts":`vitest`,"vitest.workspace.cjs":`vitest`,"vitest.workspace.cts":`vitest`,"vitest.workspace.js":`vitest`,"vitest.workspace.mjs":`vitest`,"vitest.workspace.mts":`vitest`,"vitest.workspace.ts":`vitest`,"volar.config.js":`vue-config`,"vpkg.json":`vlang`,"vue.config.cjs":`vue-config`,"vue.config.js":`vue-config`,"vue.config.mjs":`vue-config`,"vue.config.ts":`vue-config`,"wallaby.conf.js":`wallaby`,"wallaby.js":`wallaby`,"wally.toml":`wally`,"warp.md":`warp`,"webpack.base.cjs":`webpack`,"webpack.base.cts":`webpack`,"webpack.base.js":`webpack`,"webpack.base.mjs":`webpack`,"webpack.base.mts":`webpack`,"webpack.base.ts":`webpack`,"webpack.cjs":`webpack`,"webpack.client.cjs":`webpack`,"webpack.client.cts":`webpack`,"webpack.client.js":`webpack`,"webpack.client.mjs":`webpack`,"webpack.client.mts":`webpack`,"webpack.client.ts":`webpack`,"webpack.common.cjs":`webpack`,"webpack.common.cts":`webpack`,"webpack.common.js":`webpack`,"webpack.common.mjs":`webpack`,"webpack.common.mts":`webpack`,"webpack.common.ts":`webpack`,"webpack.config.babel.cjs":`webpack`,"webpack.config.babel.cts":`webpack`,"webpack.config.babel.js":`webpack`,"webpack.config.babel.mjs":`webpack`,"webpack.config.babel.mts":`webpack`,"webpack.config.babel.ts":`webpack`,"webpack.config.base.babel.cjs":`webpack`,"webpack.config.base.babel.cts":`webpack`,"webpack.config.base.babel.js":`webpack`,"webpack.config.base.babel.mjs":`webpack`,"webpack.config.base.babel.mts":`webpack`,"webpack.config.base.babel.ts":`webpack`,"webpack.config.base.cjs":`webpack`,"webpack.config.base.cts":`webpack`,"webpack.config.base.js":`webpack`,"webpack.config.base.mjs":`webpack`,"webpack.config.base.mts":`webpack`,"webpack.config.base.ts":`webpack`,"webpack.config.cjs":`webpack`,"webpack.config.client.cjs":`webpack`,"webpack.config.client.cts":`webpack`,"webpack.config.client.js":`webpack`,"webpack.config.client.mjs":`webpack`,"webpack.config.client.mts":`webpack`,"webpack.config.client.ts":`webpack`,"webpack.config.coffee":`webpack`,"webpack.config.common.babel.cjs":`webpack`,"webpack.config.common.babel.cts":`webpack`,"webpack.config.common.babel.js":`webpack`,"webpack.config.common.babel.mjs":`webpack`,"webpack.config.common.babel.mts":`webpack`,"webpack.config.common.babel.ts":`webpack`,"webpack.config.common.cjs":`webpack`,"webpack.config.common.cts":`webpack`,"webpack.config.common.js":`webpack`,"webpack.config.common.mjs":`webpack`,"webpack.config.common.mts":`webpack`,"webpack.config.common.ts":`webpack`,"webpack.config.cts":`webpack`,"webpack.config.dev.babel.cjs":`webpack`,"webpack.config.dev.babel.cts":`webpack`,"webpack.config.dev.babel.js":`webpack`,"webpack.config.dev.babel.mjs":`webpack`,"webpack.config.dev.babel.mts":`webpack`,"webpack.config.dev.babel.ts":`webpack`,"webpack.config.dev.cjs":`webpack`,"webpack.config.dev.cts":`webpack`,"webpack.config.dev.js":`webpack`,"webpack.config.dev.mjs":`webpack`,"webpack.config.dev.mts":`webpack`,"webpack.config.dev.ts":`webpack`,"webpack.config.js":`webpack`,"webpack.config.main.cjs":`webpack`,"webpack.config.main.cts":`webpack`,"webpack.config.main.js":`webpack`,"webpack.config.main.mjs":`webpack`,"webpack.config.main.mts":`webpack`,"webpack.config.main.ts":`webpack`,"webpack.config.mjs":`webpack`,"webpack.config.mts":`webpack`,"webpack.config.prod.babel.cjs":`webpack`,"webpack.config.prod.babel.cts":`webpack`,"webpack.config.prod.babel.js":`webpack`,"webpack.config.prod.babel.mjs":`webpack`,"webpack.config.prod.babel.mts":`webpack`,"webpack.config.prod.babel.ts":`webpack`,"webpack.config.prod.cjs":`webpack`,"webpack.config.prod.cts":`webpack`,"webpack.config.prod.js":`webpack`,"webpack.config.prod.mjs":`webpack`,"webpack.config.prod.mts":`webpack`,"webpack.config.prod.ts":`webpack`,"webpack.config.production.babel.cjs":`webpack`,"webpack.config.production.babel.cts":`webpack`,"webpack.config.production.babel.js":`webpack`,"webpack.config.production.babel.mjs":`webpack`,"webpack.config.production.babel.mts":`webpack`,"webpack.config.production.babel.ts":`webpack`,"webpack.config.production.cjs":`webpack`,"webpack.config.production.cts":`webpack`,"webpack.config.production.js":`webpack`,"webpack.config.production.mjs":`webpack`,"webpack.config.production.mts":`webpack`,"webpack.config.production.ts":`webpack`,"webpack.config.renderer.cjs":`webpack`,"webpack.config.renderer.cts":`webpack`,"webpack.config.renderer.js":`webpack`,"webpack.config.renderer.mjs":`webpack`,"webpack.config.renderer.mts":`webpack`,"webpack.config.renderer.ts":`webpack`,"webpack.config.server.cjs":`webpack`,"webpack.config.server.cts":`webpack`,"webpack.config.server.js":`webpack`,"webpack.config.server.mjs":`webpack`,"webpack.config.server.mts":`webpack`,"webpack.config.server.ts":`webpack`,"webpack.config.staging.babel.cjs":`webpack`,"webpack.config.staging.babel.cts":`webpack`,"webpack.config.staging.babel.js":`webpack`,"webpack.config.staging.babel.mjs":`webpack`,"webpack.config.staging.babel.mts":`webpack`,"webpack.config.staging.babel.ts":`webpack`,"webpack.config.staging.cjs":`webpack`,"webpack.config.staging.cts":`webpack`,"webpack.config.staging.js":`webpack`,"webpack.config.staging.mjs":`webpack`,"webpack.config.staging.mts":`webpack`,"webpack.config.staging.ts":`webpack`,"webpack.config.test.cjs":`webpack`,"webpack.config.test.cts":`webpack`,"webpack.config.test.js":`webpack`,"webpack.config.test.mjs":`webpack`,"webpack.config.test.mts":`webpack`,"webpack.config.test.ts":`webpack`,"webpack.config.ts":`webpack`,"webpack.config.vendor.cjs":`webpack`,"webpack.config.vendor.cts":`webpack`,"webpack.config.vendor.js":`webpack`,"webpack.config.vendor.mjs":`webpack`,"webpack.config.vendor.mts":`webpack`,"webpack.config.vendor.production.cjs":`webpack`,"webpack.config.vendor.production.cts":`webpack`,"webpack.config.vendor.production.js":`webpack`,"webpack.config.vendor.production.mjs":`webpack`,"webpack.config.vendor.production.mts":`webpack`,"webpack.config.vendor.production.ts":`webpack`,"webpack.config.vendor.ts":`webpack`,"webpack.cts":`webpack`,"webpack.dev.cjs":`webpack`,"webpack.dev.cts":`webpack`,"webpack.dev.js":`webpack`,"webpack.dev.mjs":`webpack`,"webpack.dev.mts":`webpack`,"webpack.dev.ts":`webpack`,"webpack.development.cjs":`webpack`,"webpack.development.cts":`webpack`,"webpack.development.js":`webpack`,"webpack.development.mjs":`webpack`,"webpack.development.mts":`webpack`,"webpack.development.ts":`webpack`,"webpack.dist.cjs":`webpack`,"webpack.dist.cts":`webpack`,"webpack.dist.js":`webpack`,"webpack.dist.mjs":`webpack`,"webpack.dist.mts":`webpack`,"webpack.dist.ts":`webpack`,"webpack.js":`webpack`,"webpack.mix.cjs":`webpack`,"webpack.mix.cts":`webpack`,"webpack.mix.js":`webpack`,"webpack.mix.mjs":`webpack`,"webpack.mix.mts":`webpack`,"webpack.mix.ts":`webpack`,"webpack.mjs":`webpack`,"webpack.mts":`webpack`,"webpack.prod.cjs":`webpack`,"webpack.prod.config.cjs":`webpack`,"webpack.prod.config.cts":`webpack`,"webpack.prod.config.js":`webpack`,"webpack.prod.config.mjs":`webpack`,"webpack.prod.config.mts":`webpack`,"webpack.prod.config.ts":`webpack`,"webpack.prod.cts":`webpack`,"webpack.prod.js":`webpack`,"webpack.prod.mjs":`webpack`,"webpack.prod.mts":`webpack`,"webpack.prod.ts":`webpack`,"webpack.production.cjs":`webpack`,"webpack.production.cts":`webpack`,"webpack.production.js":`webpack`,"webpack.production.mjs":`webpack`,"webpack.production.mts":`webpack`,"webpack.production.ts":`webpack`,"webpack.server.cjs":`webpack`,"webpack.server.cts":`webpack`,"webpack.server.js":`webpack`,"webpack.server.mjs":`webpack`,"webpack.server.mts":`webpack`,"webpack.server.ts":`webpack`,"webpack.test.cjs":`webpack`,"webpack.test.cts":`webpack`,"webpack.test.js":`webpack`,"webpack.test.mjs":`webpack`,"webpack.test.mts":`webpack`,"webpack.test.ts":`webpack`,"webpack.ts":`webpack`,"webpackfile.cjs":`webpack`,"webpackfile.cts":`webpack`,"webpackfile.js":`webpack`,"webpackfile.mjs":`webpack`,"webpackfile.mts":`webpack`,"webpackfile.ts":`webpack`,"werf-giterminism.yaml":`werf`,"werf-giterminism.yml":`werf`,"werf-includes.lock":`werf`,"werf-includes.yaml":`werf`,"werf-includes.yml":`werf`,"werf.yaml":`werf`,"werf.yml":`werf`,"windi.config.cjs":`windicss`,"windi.config.cts":`windicss`,"windi.config.js":`windicss`,"windi.config.json":`windicss`,"windi.config.ts":`windicss`,"wrangler.json":`wrangler`,"wrangler.jsonc":`wrangler`,"wrangler.toml":`wrangler`,"wxt.config.cjs":`wxt`,"wxt.config.cts":`wxt`,"wxt.config.js":`wxt`,"wxt.config.mjs":`wxt`,"wxt.config.mts":`wxt`,"wxt.config.ts":`wxt`,"xamlstyler.json":`xaml`,xmake:`xmake`,"xmake.lua":`xmake`,"yarn-error.log":`yarn`,"yarn.lock":`yarn`,"zeabur.json":`zeabur`,"zeabur.json5":`zeabur`,"zeabur.jsonc":`zeabur`,"zeabur.toml":`zeabur`,"zeabur.yaml":`zeabur`,"zeabur.yml":`zeabur`,zlogin:`console`,zlogout:`console`,zprofile:`console`,zshenv:`console`,zshrc:`console`,zshrc_apple_terminal:`console`},ka={60:`slint`,".ncurc.js":`dependencies-update`,".ncurc.json":`dependencies-update`,".ncurc.yml":`dependencies-update`,".wakatime-project":`wakatime`,"001":`zip`,"123dx":`3d`,"3dm":`3d`,"3ds":`3d`,"3fr":`image`,"3mf":`3d`,"4th":`forth`,"7z":`zip`,"8svx":`audio`,a:`lib`,a51:`assembly`,aa:`audio`,aac:`audio`,aax:`audio`,abap:`abap`,abc:`abc`,ac:`3d`,ac3:`audio`,accdb:`database`,accde:`database`,acds:`abap`,act:`palette`,ad:`asciidoc`,ada:`ada`,adb:`ada`,adoc:`asciidoc`,adp:`database`,ads:`ada`,aea:`assembly`,afphoto:`image`,agc:`assembly`,ags:`assembly`,ahk:`autohotkey`,ai:`adobe-illustrator`,aif:`audio`,aiff:`audio`,ait:`adobe-illustrator`,alac:`audio`,ali:`ada`,alloy:`grafana-alloy`,ami:`image`,amr:`audio`,amx:`pawn`,ape:`audio`,apfs:`zip`,apib:`apiblueprint`,apiblueprint:`apiblueprint`,apk:`android`,applescript:`applescript`,apx:`image`,argus:`assembly`,ari:`image`,arj:`zip`,arw:`image`,as:`actionscript`,asc:`key`,asciidoc:`asciidoc`,ascx:`xml`,asddls:`abap`,ase:`image`,aseprite:`image`,asm:`assembly`,asp:`html`,aspx:`html`,ass:`subtitles`,ast:`sas`,astore:`sas`,astro:`astro`,atom:`xml`,au3:`autoit`,aux:`tex`,avi:`video`,avif:`image`,awk:`console`,axaml:`xml`,axml:`xml`,azcli:`azure`,"azure-pipelines-main.yaml":`azure-pipelines`,"azure-pipelines-main.yml":`azure-pipelines`,"azure-pipelines.yaml":`azure-pipelines`,"azure-pipelines.yml":`azure-pipelines`,b:`brainfuck`,bak:`database`,bal:`ballerina`,balx:`ballerina`,bas:`visualstudio`,bash:`console`,bash_aliases:`console`,bash_login:`console`,bash_logout:`console`,bash_profile:`console`,bashrc:`console`,bat:`console`,bay:`image`,bazel:`bazel`,bbl:`bibliography`,bbx:`bbx`,bcf:`bibliography`,bdb:`database`,bean:`beancount`,beancount:`beancount`,"bench.cjs":`bench-js`,"bench.cts":`bench-ts`,"bench.js":`bench-js`,"bench.jsx":`bench-jsx`,"bench.mjs":`bench-js`,"bench.mts":`bench-ts`,"bench.ts":`bench-ts`,"bench.tsx":`bench-jsx`,bf:`brainfuck`,bib:`bibliography`,bicep:`bicep`,bin:`hex`,binsource:`assembly`,"blade.php":`laravel`,blend:`blender`,blend1:`blender`,blend2:`blender`,blg:`bibliography`,blink:`blink`,bmap:`font`,bmp:`image`,bpg:`image`,bpmn:`xml`,br:`zip`,braw:`image`,brk:`image`,brotli:`zip`,brs:`visualstudio`,bru:`bruno`,bst:`bibtex-style`,bubble:`dinophp`,bz2:`zip`,bzip2:`zip`,bzl:`bazel`,c:`c`,"c++":`cpp`,"c++m":`cpp`,c3:`c3`,cab:`zip`,cabal:`cabal`,caf:`audio`,cairo:`cairo`,cake:`cake`,cap:`image`,capnp:`capnp`,catpart:`3d`,catproduct:`3d`,cbl:`cobol`,cbx:`cbx`,cc:`cpp`,ccm:`cpp`,cda:`audio`,cdc:`cadence`,cdr:`audio`,cds:`cds`,cer:`certificate`,cert:`certificate`,cfc:`coldfusion`,cff:`yaml`,cfg:`settings`,cfm:`coldfusion`,cfml:`coldfusion`,cginc:`shader`,cjs:`javascript`,"cjs.map":`javascript-map`,cl:`lisp`,class:`javaclass`,clip:`image`,clj:`clojure`,cljc:`clojure`,cljs:`clojure`,cljx:`clojure`,clo:`tex`,clojure:`clojure`,cls:`tex`,cm:`sml`,cmake:`cmake`,cmd:`console`,cmj:`bucklescript`,cmx:`ocaml`,cnf:`settings`,coafile:`coala`,coarc:`coala`,cob:`cobol`,coco:`coconut`,"code-profile":`vscode`,"code-search":`search`,"code-snippets":`vscode`,"code-workplace":`vscode`,"code-workspace":`vscode`,coffee:`coffee`,command:`command`,comp:`shader`,"comp.glsl":`shader`,"comp.hlsl":`shader`,"compose.yaml":`docker`,"compose.yml":`docker`,compute:`shader`,"compute.glsl":`shader`,"compute.hlsl":`shader`,computeshader:`shader`,conf:`settings`,config:`settings`,containerfile:`docker`,containerignore:`docker`,"controller.js":`controller`,"controller.ts":`controller`,copilotmd:`markdown`,cp:`cpp`,cpio:`zip`,cpn:`coloredpetrinets`,cpp:`cpp`,cppm:`cpp`,cpt:`image`,cpy:`python`,cr:`crystal`,cr2:`image`,cr3:`image`,crt:`certificate`,crw:`image`,crx:`chrome`,cs:`csharp`,csh:`console`,csharp:`csharp`,cshrc:`console`,cshtml:`razor`,csl:`xml`,cson:`coffee`,csproj:`visualstudio`,"csproj.user":`xml`,css:`css`,"css.cjs":`vanilla-extract`,"css.js":`vanilla-extract`,"css.jsx":`vanilla-extract`,"css.map":`css-map`,"css.mjs":`vanilla-extract`,"css.ts":`vanilla-extract`,"css.tsx":`vanilla-extract`,csv:`table`,csx:`csharp`,ctp:`php`,cts:`typescript`,ctx:`context`,cu:`cuda`,cue:`cue`,cuh:`cuda`,cur:`image`,cxx:`cpp`,cxxm:`cpp`,"cy.js":`test-js`,"cy.jsx":`test-jsx`,"cy.ts":`test-ts`,"cy.tsx":`test-jsx`,d:`d`,"d.cts":`typescript-def`,"d.ets":`typescript-def`,"d.mts":`typescript-def`,"d.ts":`typescript-def`,dae:`3d`,dart:`dart`,dat:`hex`,data:`image`,db:`database`,db3:`database`,dbf:`database`,dblite:`database`,dblite3:`database`,dcr:`image`,dcs:`image`,dds:`image`,deb:`zip`,debugsymbols:`database`,def:`dotjs`,dex:`android`,dfxp:`subtitles`,dhall:`dhall`,dhallb:`dhall`,diff:`diff`,dio:`drawio`,directory:`settings`,dita:`xml`,ditamap:`xml`,djt:`django`,dlc:`settings`,dll:`dll`,dmg:`disc`,dmn:`xml`,dng:`image`,do:`tcl`,doc:`word`,"docker-compose.yaml":`docker`,"docker-compose.yml":`docker`,dockerfile:`docker`,dockerignore:`docker`,docx:`word`,dot:`dotjs`,drawio:`drawio`,drf:`image`,"drone.yml":`drone`,dsc:`denizenscript`,dsql:`database`,dss:`audio`,dtd:`xml`,dtml:`xml`,duc:`duc`,dwg:`3d`,dxf:`3d`,"e2e-spec.cjs":`test-js`,"e2e-spec.cts":`test-ts`,"e2e-spec.js":`test-js`,"e2e-spec.mjs":`test-js`,"e2e-spec.mts":`test-ts`,"e2e-spec.ts":`test-ts`,ebuild:`console`,ec3:`audio`,eclass:`console`,ecr:`crystal`,edb:`email`,edge:`edge`,edn:`clojure`,eex:`elixir`,efs:`audio`,egg:`python-misc`,eip:`image`,ejs:`ejs`,elm:`elm`,eml:`email`,emlx:`email`,enc:`audio`,ent:`xml`,env:`tune`,eot:`font`,eps:`image`,epub:`epub`,erb:`ruby`,erf:`image`,erl:`erlang`,es6:`javascript`,esd:`zip`,esx:`javascript`,ex:`elixir`,excalidraw:`excalidraw`,"excalidraw.json":`excalidraw`,"excalidraw.png":`excalidraw`,"excalidraw.svg":`excalidraw`,exe:`exe`,exp:`console`,exr:`image`,exrc:`vim`,exs:`elixir`,eyaml:`yaml`,eyml:`yaml`,f:`fortran`,f03:`fortran`,f08:`fortran`,f3d:`3d`,f77:`fortran`,f90:`fortran`,f95:`fortran`,far:`zip`,fast:`lisp`,fat:`zip`,fbx:`3d`,fdb:`database`,feather:`database`,feature:`cucumber`,features:`cucumber`,fen:`chess`,fff:`image`,fhtml:`velocity`,fig:`figma`,fish:`console`,flac:`audio`,flp:`audio`,flv:`video`,fnt:`font`,font:`font`,fonts:`font`,fpx:`image`,frag:`shader`,"frag.glsl":`shader`,"fragment.glsl":`shader`,fragmentshader:`shader`,"freezed.dart":`dart_generated`,frm:`database`,frt:`forth`,fs:`fsharp`,"fs.glsl":`shader`,fsi:`fsharp`,fsproj:`fsharp`,fsscript:`fsharp`,fsx:`fsharp`,fth:`forth`,ftl:`freemarker`,fun:`sml`,fx:`shader`,fxh:`shader`,fxml:`xml`,fxp:`foxpro`,"g.dart":`dart_generated`,g4:`antlr`,"garden.yaml":`garden`,"garden.yml":`garden`,gbr:`image`,gd:`godot`,gdb:`database`,gdextension:`godot-assets`,gdnlib:`godot-assets`,gdns:`godot-assets`,gdshader:`godot-assets`,gdshaderinc:`godot-assets`,gemini:`gemini`,gemspec:`ruby`,geojson:`json`,geom:`shader`,"geom.glsl":`shader`,"geom.hlsl":`shader`,"geometry.glsl":`shader`,"geometry.hlsl":`shader`,geometryshader:`shader`,gif:`image`,gifv:`video`,"gitlab-ci.yml":`gitlab`,glb:`3d`,gleam:`gleam`,glsl:`shader`,gltf:`3d`,gmi:`gemini`,gml:`gamemaker`,gnu:`gnuplot`,go:`go`,godot:`godot-assets`,gp:`audio`,gpg:`key`,gpl:`palette`,gpr:`image`,gql:`graphql`,gr:`grain`,gradle:`gradle`,graphcool:`graphcool`,graphql:`graphql`,grm:`sml`,groovy:`groovy`,gs:`apps-script`,"gs.glsl":`shader`,gsm:`audio`,gvimrc:`vim`,gvy:`groovy`,gyp:`python`,gypi:`python`,gz:`zip`,gzip:`zip`,h:`h`,"h++":`hpp`,"h.in":`cpp`,haml:`haml`,handlebars:`handlebars`,har:`json`,hbs:`handlebars`,hcl:`hcl`,hdd:`disc`,heex:`elixir`,heic:`image`,heif:`image`,hex:`hex`,hfs:`zip`,hh:`hpp`,hip:`hip`,hjs:`handlebars`,hjson:`hjson`,hlsl:`shader`,hlsli:`shader`,"horusec-config.json":`horusec`,hp:`hpp`,hpp:`hpp`,"hpp.in":`cpp`,hs:`haskell`,htm:`html`,html:`html`,"html.bubble":`dinophp`,html_vm:`html`,http:`http`,huff:`huff`,hurl:`hurl`,hx:`haxe`,hxx:`hpp`,i:`c`,iam:`3d`,ibc:`idris`,ibd:`database`,iced:`coffee`,icns:`image`,ico:`image`,ics:`email`,idr:`idris`,ige:`3d`,iges:`3d`,igs:`3d`,ii:`cpp`,iiq:`image`,ilk:`dll`,imba:`imba`,img:`image`,iml:`xml`,inc:`assembly`,ini:`settings`,"inky.php":`laravel`,inl:`hpp`,ino:`arduino`,ins:`doctex-installer`,ipa:`applescript`,ipp:`cpp`,ipt:`3d`,ipy:`python`,ipynb:`jupyter`,isml:`xml`,iso:`disc`,it:`audio`,iuml:`uml`,ixx:`cpp`,j2:`jinja`,jade:`pug`,jar:`jar`,jav:`java`,java:`java`,jb2:`image`,jbig2:`image`,jenkins:`jenkins`,jenkinsfile:`jenkins`,jfif:`image`,jinja:`jinja`,"jinja-html":`jinja`,jinja2:`jinja`,jl:`julia`,jmx:`xml`,jng:`image`,jpeg:`image`,jpg:`image`,jrxml:`xml`,js:`javascript`,"js.map":`javascript-map`,"js.snap":`test-js`,"jsconfig.json":`jsconfig`,jshtm:`html`,json:`json`,json5:`json`,jsonc:`json`,jsonl:`json`,jsonld:`json`,jsp:`java`,jst:`dotjs`,jsx:`react`,"jsx.snap":`test-jsx`,jt:`3d`,jxl:`image`,jxr:`image`,k:`kcl`,k25:`image`,kdbx:`database`,kdc:`image`,key:`key`,kl:`kl`,kql:`kusto`,kra:`image`,ksh:`console`,kt:`kotlin`,kts:`kotlin`,ktx:`image`,ktx2:`image`,kv:`kivy`,lang:`i18n`,latex:`tex`,launch:`xml`,lbx:`lbx`,ldf:`database`,lean:`lean`,leex:`elixir`,less:`less`,lex:`sml`,lha:`zip`,lhs:`haskell`,lib:`lib`,liquid:`liquid`,lisp:`lisp`,litcoffee:`markdown`,liz:`zip`,lock:`lock`,log:`log`,lol:`lolcode`,lottie:`lottie`,lrc:`lyric`,ls:`livescript`,lsp:`lisp`,ltx:`tex`,lua:`lua`,luau:`luau`,lucee:`coldfusion`,ly:`lilypond`,lz:`zip`,lz4:`zip`,lz5:`zip`,lzh:`zip`,lzma:`zip`,lzma2:`zip`,m:`objective-c`,m2:`macaulay2`,m2v:`video`,m3u:`audio`,m3u8:`audio`,m4a:`audio`,m4b:`audio`,m4p:`audio`,m4r:`audio`,m4v:`video`,mak:`settings`,manifest:`xml`,markdn:`markdown`,markdoc:`markdoc`,"markdoc.md":`markdoc`,markdown:`markdown`,marko:`markojs`,mbox:`email`,mca:`minecraft`,mcaddon:`minecraft`,mcfunction:`minecraft`,mcgame:`minecraft`,mclevel:`minecraft`,mcmeta:`minecraft`,mcpack:`minecraft`,mcproject:`minecraft`,mcr:`minecraft`,mcstructure:`minecraft`,mctemplate:`minecraft`,mcworld:`minecraft`,md:`markdown`,mdb:`database`,mdc:`image`,mde:`database`,mdf:`database`,mdoc:`markdoc`,mdown:`markdown`,mdp:`image`,mdtext:`markdown`,mdtxt:`markdown`,mdwn:`markdown`,mdx:`mdx`,mef:`image`,menu:`xml`,merlin:`merlin`,mermaid:`mermaid`,mesh:`3d`,mi:`c`,mid:`audio`,mii:`cpp`,mine:`minecraft`,mint:`mint`,mitigus:`assembly`,mjml:`mjml`,mjs:`javascript`,"mjs.map":`javascript-map`,mk:`makefile`,mka:`audio`,mkd:`markdown`,mkdn:`markdown`,mkv:`video`,ml:`ocaml`,mlb:`sml`,mli:`ocaml`,mlton:`sml`,mm:`objective-cpp`,mmd:`mermaid`,mmf:`audio`,mo:`i18n`,mod:`audio`,"module.js":`angular`,"module.ts":`angular`,mojo:`mojo`,moon:`moonscript`,mos:`image`,mov:`video`,mp2:`video`,mp3:`audio`,mp4:`video`,mpc:`audio`,mpe:`video`,mpeg:`video`,mpg:`video`,mpv:`video`,mqo:`3d`,mrf:`font`,mrpack:`mrpack`,mrw:`image`,ms:`assembly`,mscz:`audio`,msg:`email`,msi:`exe`,mtm:`audio`,mts:`typescript`,mui:`audio`,mus:`minecraft`,mustache:`handlebars`,musx:`audio`,mxl:`audio`,mxml:`mxml`,myd:`database`,myi:`database`,nasm:`assembly`,nb:`mathematica`,ndf:`database`,ndjson:`json`,"ndst.json":`ndst`,"ndst.yaml":`ndst`,"ndst.yml":`ndst`,nef:`image`,nf:`groovy`,"ng-template":`angular`,nginx:`nginx`,nginxconf:`nginx`,nginxconfig:`nginx`,nim:`nim`,nimble:`nim`,nix:`nix`,njk:`nunjucks`,npmrc:`settings`,nrw:`image`,nsa:`audio`,ntf:`font`,ntfs:`zip`,nu:`console`,nunjucks:`nunjucks`,nupkg:`nuget`,nuspec:`nuget`,o:`3d`,obj:`3d`,obm:`image`,odb:`database`,odin:`odin`,odp:`powerpoint`,ods:`table`,odt:`word`,odttf:`font`,oft:`email`,ogg:`video`,ogv:`video`,olm:`email`,onnx:`onnx`,opam:`opam`,"openapi.json":`openapi`,"openapi.yaml":`openapi`,"openapi.yml":`openapi`,opml:`xml`,option:`settings`,opus:`audio`,ora:`image`,orc:`database`,orf:`image`,ost:`email`,otf:`font`,otne:`otne`,owl:`xml`,p:`prolog`,p7s:`email`,pac:`javascript`,pal:`palette`,parquet:`database`,pas:`pascal`,passwd:`key`,patch:`git`,pbm:`image`,pcss:`postcss`,pdb:`database`,pde:`processing`,pdf:`pdf`,"pdm.lock":`pdm`,"pdm.toml":`pdm`,pdn:`image`,pef:`image`,pem:`key`,pgf:`image`,pgm:`image`,pgn:`chess`,pgsql:`database`,php:`php`,"php.bubble":`dinophp`,php4:`php`,php5:`php`,phtml:`php`,pic:`image`,pine:`pinejs`,pipeline:`pipeline`,"pixel.hlsl":`shader`,pkb:`database`,pkf:`audio`,pkl:`pkl`,pks:`database`,pl:`prolog`,plantuml:`uml`,plist:`xml`,plpgsql:`database`,ply:`3d`,pm:`perl`,pmd:`3d`,pmx:`3d`,png:`image`,pnm:`image`,pnml:`coloredpetrinets`,po:`i18n`,pod:`perl`,podspec:`ruby`,postgres:`database`,pot:`i18n`,potm:`powerpoint`,potx:`powerpoint`,pp:`puppet`,ppa:`powerpoint`,ppam:`powerpoint`,ppm:`image`,pps:`powerpoint`,ppsm:`powerpoint`,ppsx:`powerpoint`,ppt:`powerpoint`,pptm:`powerpoint`,pptx:`powerpoint`,prefs:`settings`,prg:`foxpro`,prisma:`prisma`,pro:`prolog`,profile:`console`,proj:`xml`,project:`xml`,"prompt.md":`prompt`,"prompts.md":`prompt`,prop:`settings`,properties:`settings`,props:`settings`,proto:`proto`,prt:`3d`,prw:`advpl`,prx:`advpl`,ps1:`powershell`,ps1xml:`powershell`,psb:`adobe-photoshop`,psc1:`powershell`,psd:`adobe-photoshop`,psd1:`powershell`,psdt:`adobe-photoshop`,psgi:`perl`,psh:`shader`,psm1:`powershell`,psql:`database`,psrc:`powershell`,pssc:`powershell`,pst:`email`,psv:`table`,pt:`pytorch`,pth:`pytorch`,ptx:`image`,pu:`uml`,pub:`key`,publishsettings:`xml`,pubxml:`xml`,"pubxml.user":`xml`,pug:`pug`,puml:`uml`,pure:`purescript`,purs:`purescript`,pwf:`pytorch`,pwn:`pawn`,"px.hlsl":`shader`,pxn:`image`,py:`python`,pyc:`python-misc`,pyi:`python`,pyt:`python`,pyw:`python`,qcow:`disc`,qcow2:`disc`,qcp:`audio`,qed:`disc`,qmd:`quarto`,qs:`qsharp`,qt:`video`,"quokka.js":`quokka`,"quokka.jsx":`quokka`,"quokka.ts":`quokka`,"quokka.tsx":`quokka`,r:`r`,r3d:`image`,ra:`audio`,raf:`image`,rahit:`shader`,"rahit.glsl":`shader`,rake:`ruby`,raku:`perl`,raml:`raml`,rar:`zip`,raw:`image`,razor:`razor`,rb:`ruby`,rbi:`ruby`,rbs:`ruby`,rbx:`ruby`,rbxl:`roblox`,rbxlx:`roblox`,rbxm:`roblox`,"rbxmk.lua":`rbxmk`,"rbxmk.luau":`rbxmk`,rbxmx:`roblox`,rc:`rc`,rcall:`shader`,"rcall.glsl":`shader`,rchit:`shader`,"rchit.glsl":`shader`,rdf:`xml`,re:`reason`,reb:`image`,red:`red`,reg:`regedit`,rego:`opa`,rei:`reason`,rej:`diff`,repo:`settings`,res:`rescript`,resi:`rescript-interface`,rest:`http`,restql:`restql`,resx:`xml`,rf64:`audio`,rgen:`shader`,"rgen.glsl":`shader`,rhistory:`r`,rhtml:`html`,rint:`shader`,"rint.glsl":`shader`,riot:`riot`,rip:`audio`,rjs:`ruby`,rkt:`racket`,rm:`video`,rmd:`r`,rmiss:`shader`,"rmiss.glsl":`shader`,rmvb:`video`,rng:`xml`,robot:`robot`,ron:`rust`,ronn:`markdown`,"route.js":`routing`,"route.jsx":`routing`,"route.ts":`routing`,"route.tsx":`routing`,"routes.js":`routing`,"routes.jsx":`routing`,"routes.ts":`routing`,"routes.tsx":`routing`,"routing.js":`routing`,"routing.jsx":`routing`,"routing.ts":`routing`,"routing.tsx":`routing`,rpm:`zip`,rpmsg:`email`,rprofile:`r`,rpy:`python`,rql:`restql`,rs:`rust`,rss:`xml`,rst:`markdown`,rt:`r`,rtf:`word`,ru:`ruby`,ruleset:`visualstudio`,rw2:`image`,rwl:`image`,rwz:`image`,s:`assembly`,sab:`3d`,sai:`image`,san:`san`,sas:`sas`,sas7bdat:`sas`,sashdat:`sas`,sass:`sass`,sast:`sas`,sat:`3d`,sbt:`sbt`,sbv:`subtitles`,sc:`scala`,scala:`scala`,"schema.json":`json_schema`,scm:`scheme`,scss:`sass`,sdf:`database`,sdt:`audio`,secret:`key`,sesx:`audio`,settings:`settings`,sf2:`audio`,sh:`console`,sha256:`key`,sha256sum:`key`,sha256sums:`key`,shader:`shader`,shasum:`key`,shproj:`xml`,shtml:`html`,sig:`sml`,"sigstore.json":`verified`,sketch:`sketch`,"skill.md":`skill`,"skills.md":`skill`,skp:`3d`,slang:`shader`,sldasm:`3d`,slddrw:`3d`,sldprt:`3d`,slim:`slim`,slint:`slint`,sln:`visualstudio`,"sln.dotsettings":`settings`,"sln.dotsettings.user":`settings`,slnf:`visualstudio`,slnx:`visualstudio`,sls:`salt`,slx:`simulink`,smali:`android`,smb:`3d`,smk:`snakemake`,sml:`sml`,smt:`3d`,snakemake:`snakemake`,so:`dll`,sol:`solidity`,"spec-d.ts":`test-ts`,"spec-d.tsx":`test-jsx`,"spec.cjs":`test-js`,"spec.cts":`test-ts`,"spec.js":`test-js`,"spec.jsx":`test-jsx`,"spec.mjs":`test-js`,"spec.mts":`test-ts`,"spec.ts":`test-ts`,"spec.tsx":`test-jsx`,spv:`shader`,spwn:`spwn`,sql:`database`,sqlite:`database`,sqlite3:`database`,squashfs:`zip`,sr2:`image`,srf:`image`,srt:`subtitles`,srw:`image`,ss:`scheme`,ssa:`subtitles`,sss:`postcss`,"st.css":`stylable`,stan:`stan`,stap:`audio`,ste:`3d`,"steadybit.yaml":`steadybit`,"steadybit.yml":`steadybit`,step:`3d`,stl:`3d`,"stories.js":`storybook`,"stories.jsx":`storybook`,"stories.mdx":`storybook`,"stories.svelte":`storybook`,"stories.ts":`storybook`,"stories.tsx":`storybook`,"stories.vue":`storybook`,"story.js":`storybook`,"story.jsx":`storybook`,"story.mdx":`storybook`,"story.ts":`storybook`,"story.tsx":`storybook`,storyboard:`xml`,stp:`3d`,styl:`stylus`,sub:`subtitles`,"sublime-project":`sublime`,"sublime-workspace":`sublime`,sui:`font`,suit:`font`,suo:`visualstudio`,sv:`verilog`,svelte:`svelte`,svg:`svg`,svh:`verilog`,svx:`mdsvex`,sw:`sway`,"swagger.json":`swagger`,"swagger.yaml":`swagger`,"swagger.yml":`swagger`,swc:`adobe-swc`,swcrc:`swc`,swf:`flash`,swift:`swift`,swiftdeps:`swift`,swiftdoc:`swift`,swiftmodule:`swift`,swiftsourceinfo:`swift`,swm:`zip`,sy:`siyuan`,synctex:`tex`,"synctex.gz":`tex`,t:`perl`,tag:`riot`,tar:`zip`,targets:`xml`,"taskfile.yaml":`taskfile`,"taskfile.yml":`taskfile`,tauri:`tauri`,taz:`zip`,tbz:`zip`,tbz2:`zip`,tcc:`hpp`,tcl:`tcl`,tcsh:`console`,tcshrc:`console`,templ:`templ`,template:`template`,terraformignore:`terraform`,tesc:`shader`,"tesc.glsl":`shader`,tese:`shader`,"tese.glsl":`shader`,"tess.hlsl":`shader`,"tessellation.hlsl":`shader`,"test-d.ts":`test-ts`,"test-d.tsx":`test-jsx`,"test.cjs":`test-js`,"test.cts":`test-ts`,"test.js":`test-js`,"test.jsx":`test-jsx`,"test.mjs":`test-js`,"test.mts":`test-ts`,"test.ts":`test-ts`,"test.tsx":`test-jsx`,tex:`tex`,tf:`terraform`,"tf.json":`terraform`,tfbackend:`terraform`,tfstate:`terraform`,tfvars:`terraform`,tg:`audio`,tga:`image`,tgz:`zip`,tif:`image`,tiff:`image`,tikz:`tex`,tl:`teal`,tld:`xml`,tldr:`tldraw`,tlz:`zip`,tmlanguage:`xml`,tmx:`xml`,tnef:`email`,tobi:`tobi`,toc:`toc`,todo:`todo`,tofu:`opentofu`,toml:`toml`,"tool-versions":`settings`,toon:`toon`,tpl:`smarty`,tpp:`cpp`,tpz:`zip`,tree:`tree`,tres:`godot-assets`,ts:`typescript`,"ts.glsl":`shader`,"ts.map":`json`,"ts.snap":`test-ts`,tsbuildinfo:`json`,tscn:`godot-assets`,"tsconfig.json":`tsconfig`,tsv:`table`,tsx:`react_ts`,"tsx.snap":`test-jsx`,ttc:`font`,ttf:`font`,ttml:`subtitles`,tw:`twine`,twee:`twine`,twig:`twig`,txt:`document`,txx:`cpp`,txz:`zip`,typ:`typst`,tz:`zip`,tzst:`zip`,tzstd:`zip`,ua:`uiua`,unity:`unity`,unitypackage:`unity`,url:`url`,usd:`3d`,usdz:`3d`,use:`sml`,v:`vlang`,vac:`3d`,vagrantfile:`vagrant`,vala:`vala`,vb:`visualstudio`,vba:`visualstudio`,vbhtml:`razor`,vbox:`virtual`,"vbox-prev":`virtual`,vbproj:`xml`,"vbproj.user":`xml`,vbs:`visualstudio`,vcl:`varnish`,vcxitems:`visualstudio`,"vcxitems.filters":`visualstudio`,vcxproj:`visualstudio`,"vcxproj.filters":`visualstudio`,vdi:`virtual`,vdp:`3d`,ved:`vedic`,veda:`vedic`,vedic:`vedic`,verse:`verse`,vert:`shader`,"vert.glsl":`shader`,"vertex.glsl":`shader`,vertexshader:`shader`,vfl:`vfl`,vhd:`verilog`,vhdl:`verilog`,vhdx:`verilog`,vim:`vim`,viminfo:`vim`,vimrc:`vim`,vm:`velocity`,vmdk:`disc`,vob:`video`,voc:`audio`,volt:`html`,vox:`3d`,vqf:`audio`,"vs.glsl":`shader`,vscodeignore:`vscode`,vsh:`shader`,vsix:`vscode`,vsixmanifest:`vscode`,vtl:`velocity`,vtt:`subtitles`,vue:`vue`,wasm:`webassembly`,wat:`webassembly`,wav:`audio`,weba:`audio`,webm:`video`,webmanifest:`json`,webp:`image`,wfp:`audio`,wgsl:`shader`,whl:`python-misc`,wim:`zip`,windi:`windicss`,winget:`yaml`,wire:`3d`,wixproj:`visualstudio`,wl:`wolframlanguage`,wls:`wolframlanguage`,wma:`audio`,wmv:`video`,woff:`font`,woff2:`font`,workbook:`markdown`,wpl:`audio`,wproj:`audio`,wpy:`wepy`,wrap:`meson`,wrl:`3d`,wsd:`uml`,wsdl:`xml`,wv:`audio`,wxi:`xml`,wxl:`xml`,wxs:`xml`,x3f:`image`,x_b:`3d`,x_t:`3d`,xaml:`xaml`,xar:`zip`,xbl:`xml`,xcf:`image`,xcplayground:`swift`,xht:`html`,xhtml:`html`,xib:`xml`,xlf:`i18n`,xliff:`xml`,xls:`table`,xlsm:`table`,xlsx:`table`,xml:`xml`,"xml.dist":`xml`,"xml.dist.sample":`xml`,xmp:`xml`,xoml:`xml`,xpdl:`xml`,xprofile:`console`,xquery:`xml`,xsd:`xml`,xsession:`console`,xsessionrc:`console`,xsh:`console`,xsl:`xml`,xslt:`xml`,xul:`xml`,xz:`zip`,yaml:`yaml`,"yaml-tmlanguage":`yaml`,"yaml-tmpreferences":`yaml`,"yaml-tmtheme":`yaml`,"yaml.dist":`yaml`,yang:`yang`,yash_profile:`console`,yashrc:`console`,yml:`yaml`,"yml.dist":`yaml`,yuv:`video`,yy:`gamemaker`,yyp:`gamemaker`,yyz:`gamemaker`,z:`zip`,zeabur:`zeabur`,zig:`zig`,zip:`zip`,zlogin:`console`,zlogout:`console`,zon:`zig`,zprofile:`console`,zsh:`console`,"zsh-theme":`console`,zshenv:`console`,zshrc:`console`,zst:`zip`,zstd:`zip`,ц:`tsil`,"🔥":`mojo`},Aa={"-@types":`folder-typescript`,"-addin":`folder-plugin`,"-addins":`folder-plugin`,"-addon":`folder-plugin`,"-addons":`folder-plugin`,"-admin":`folder-admin`,"-admins":`folder-admin`,"-agent":`folder-robot`,"-agents":`folder-robot`,"-android":`folder-android`,"-angular":`folder-angular`,"-anim":`folder-animation`,"-animated":`folder-animation`,"-animation":`folder-animation`,"-animations":`folder-animation`,"-anims":`folder-animation`,"-ansible":`folder-ansible`,"-api":`folder-api`,"-apis":`folder-api`,"-apollo":`folder-apollo`,"-apollo-cache":`folder-apollo`,"-apollo-client":`folder-apollo`,"-apollo-config":`folder-apollo`,"-app":`folder-app`,"-apple":`folder-macos`,"-application":`folder-app`,"-applications":`folder-app`,"-apps":`folder-app`,"-appwrite":`folder-appwrite`,"-arc":`folder-archive`,"-archival":`folder-archive`,"-archive":`folder-archive`,"-archives":`folder-archive`,"-arcs":`folder-archive`,"-article":`folder-docs`,"-articles":`folder-docs`,"-asm":`folder-assembly`,"-assembly":`folder-assembly`,"-asset":`folder-resource`,"-assets":`folder-resource`,"-astro":`folder-astro`,"-atom":`folder-atom`,"-atoms":`folder-atom`,"-attachment":`folder-attachment`,"-attachments":`folder-attachment`,"-aud":`folder-audio`,"-audio":`folder-audio`,"-audios":`folder-audio`,"-auds":`folder-audio`,"-aurelia_project":`folder-aurelia`,"-auth":`folder-secure`,"-authentication":`folder-secure`,"-auto":`folder-generator`,"-aws":`folder-aws`,"-azure":`folder-aws`,"-azure-pipelines":`folder-azure-pipelines`,"-azure-pipelines-ci":`folder-azure-pipelines`,"-back-up":`folder-backup`,"-back-ups":`folder-backup`,"-backend":`folder-server`,"-backends":`folder-server`,"-backup":`folder-backup`,"-backups":`folder-backup`,"-bak":`folder-backup`,"-baks":`folder-backup`,"-base":`folder-base`,"-bases":`folder-base`,"-batch":`folder-batch`,"-batches":`folder-batch`,"-batchs":`folder-batch`,"-bench":`folder-benchmark`,"-benches":`folder-benchmark`,"-benchmark":`folder-benchmark`,"-benchmarks":`folder-benchmark`,"-bibliographies":`folder-bibliography`,"-bibliography":`folder-bibliography`,"-bicep":`folder-bicep`,"-bin":`folder-dist`,"-bkp":`folder-backup`,"-bkps":`folder-backup`,"-blender":`folder-blender`,"-blender-assets":`folder-blender`,"-blender-files":`folder-blender`,"-blender-models":`folder-blender`,"-blender-project":`folder-blender`,"-bloc":`folder-bloc`,"-blocs":`folder-bloc`,"-blog":`folder-docs`,"-book":`folder-bibliography`,"-books":`folder-bibliography`,"-bot":`folder-robot`,"-bots":`folder-robot`,"-bower_components":`folder-bower`,"-browser":`folder-public`,"-browsers":`folder-public`,"-build":`folder-dist`,"-buildkite":`folder-buildkite`,"-builds":`folder-dist`,"-built":`folder-dist`,"-bull":`folder-queue`,"-cache":`folder-temp`,"-cached":`folder-temp`,"-calc":`folder-functions`,"-calcs":`folder-functions`,"-calculation":`folder-functions`,"-calculations":`folder-functions`,"-cargo":`folder-rust`,"-cart":`folder-cart`,"-centos":`folder-linux`,"-cert":`folder-secure`,"-certificate":`folder-secure`,"-certificates":`folder-secure`,"-certs":`folder-secure`,"-cfg":`folder-config`,"-cfgs":`folder-config`,"-cfn-gen":`folder-generator`,"-changes":`folder-delta`,"-changeset":`folder-changesets`,"-changesets":`folder-changesets`,"-chat":`folder-messages`,"-chats":`folder-messages`,"-ci":`folder-ci`,"-cipher":`folder-secure`,"-circleci":`folder-circleci`,"-cjs":`folder-javascript`,"-class":`folder-class`,"-classes":`folder-class`,"-claude":`folder-claude`,"-cli":`folder-command`,"-client":`folder-client`,"-clients":`folder-client`,"-cline_docs":`folder-cline`,"-clis":`folder-command`,"-cloud-firestore":`folder-firestore`,"-cloud-functions":`folder-cloud-functions`,"-cloudflare":`folder-cloudflare`,"-cloudfunctions":`folder-cloud-functions`,"-cluster":`folder-cluster`,"-clusters":`folder-cluster`,"-cmd":`folder-command`,"-cobol":`folder-cobol`,"-code":`folder-src`,"-color":`folder-theme`,"-colors":`folder-theme`,"-colour":`folder-theme`,"-colours":`folder-theme`,"-command":`folder-command`,"-commandline":`folder-command`,"-commands":`folder-command`,"-common":`folder-shared`,"-compiled":`folder-dist`,"-components":`folder-components`,"-composable":`folder-functions`,"-composables":`folder-functions`,"-concept":`folder-mock`,"-concepts":`folder-mock`,"-conf":`folder-config`,"-config":`folder-config`,"-configs":`folder-config`,"-configuration":`folder-config`,"-configurations":`folder-config`,"-confs":`folder-config`,"-connection":`folder-connection`,"-connections":`folder-connection`,"-console":`folder-console`,"-const":`folder-constant`,"-constant":`folder-constant`,"-constants":`folder-constant`,"-consts":`folder-constant`,"-container":`folder-container`,"-containers":`folder-container`,"-content":`folder-content`,"-contents":`folder-content`,"-context":`folder-context`,"-contexts":`folder-context`,"-contract":`folder-contract`,"-contract-test":`folder-contract`,"-contract-testing":`folder-contract`,"-contract-tests":`folder-contract`,"-contracts":`folder-contract`,"-controller":`folder-controller`,"-controllers":`folder-controller`,"-controls":`folder-controller`,"-conversation":`folder-messages`,"-conversations":`folder-messages`,"-core":`folder-core`,"-coverage":`folder-coverage`,"-crash":`folder-error`,"-crashes":`folder-error`,"-crates":`folder-lib`,"-css":`folder-css`,"-cts":`folder-typescript`,"-cubit":`folder-bloc`,"-cubits":`folder-bloc`,"-cue":`folder-cue`,"-cues":`folder-cue`,"-cursor":`folder-cursor`,"-custom":`folder-custom`,"-customs":`folder-custom`,"-cypher":`folder-secure`,"-cypress":`folder-cypress`,"-dal":`folder-dal`,"-dart":`folder-dart`,"-dart_tool":`folder-dart`,"-dart_tools":`folder-dart`,"-data":`folder-database`,"-data-access":`folder-dal`,"-data-access-layer":`folder-dal`,"-database":`folder-database`,"-databases":`folder-database`,"-db":`folder-database`,"-deb":`folder-linux`,"-debian":`folder-linux`,"-debug":`folder-debug`,"-debugger":`folder-debug`,"-debugging":`folder-debug`,"-decorator":`folder-decorators`,"-decorators":`folder-decorators`,"-deepin":`folder-linux`,"-delta":`folder-delta`,"-deltas":`folder-delta`,"-demo":`folder-examples`,"-demos":`folder-examples`,"-dependencies":`folder-packages`,"-design":`folder-theme`,"-designs":`folder-theme`,"-desktop":`folder-desktop`,"-devcontainer":`folder-container`,"-devpackages":`folder-packages`,"-devtools":`folder-tools`,"-dialog":`folder-messages`,"-dialogs":`folder-messages`,"-diary":`folder-docs`,"-directive":`folder-directive`,"-directives":`folder-directive`,"-display":`folder-desktop`,"-dist":`folder-dist`,"-distribution":`folder-dist`,"-doc":`folder-docs`,"-docker":`folder-docker`,"-dockerfiles":`folder-docker`,"-dockerhub":`folder-docker`,"-docs":`folder-docs`,"-document":`folder-docs`,"-documentation":`folder-docs`,"-documents":`folder-docs`,"-download":`folder-download`,"-downloader":`folder-download`,"-downloaders":`folder-download`,"-downloads":`folder-download`,"-draft":`folder-mock`,"-drafts":`folder-mock`,"-drizzle":`folder-drizzle`,"-ds_store":`folder-macos`,"-dump":`folder-dump`,"-dumps":`folder-dump`,"-e2e":`folder-coverage`,"-easing":`folder-animation`,"-easings":`folder-animation`,"-element":`folder-element`,"-elements":`folder-element`,"-email":`folder-mail`,"-emails":`folder-mail`,"-enum":`folder-enum`,"-enums":`folder-enum`,"-env":`folder-environment`,"-environment":`folder-environment`,"-environments":`folder-environment`,"-envs":`folder-environment`,"-err":`folder-error`,"-error":`folder-error`,"-errors":`folder-error`,"-errs":`folder-error`,"-eslint":`folder-eslint`,"-eslint-config":`folder-eslint`,"-eslint-configs":`folder-eslint`,"-eslint-plugin":`folder-eslint`,"-eslint-plugins":`folder-eslint`,"-etc":`folder-other`,"-event":`folder-event`,"-events":`folder-event`,"-example":`folder-examples`,"-examples":`folder-examples`,"-expo":`folder-expo`,"-expo-shared":`folder-expo`,"-export":`folder-export`,"-exported":`folder-export`,"-exports":`folder-export`,"-extension":`folder-plugin`,"-extensions":`folder-plugin`,"-external":`folder-lib`,"-externals":`folder-lib`,"-extra":`folder-other`,"-extras":`folder-other`,"-fastlane":`folder-fastlane`,"-favicon":`folder-favicon`,"-favicons":`folder-favicon`,"-feat":`folder-features`,"-feats":`folder-features`,"-feature":`folder-features`,"-features":`folder-features`,"-fig":`folder-images`,"-figs":`folder-images`,"-figure":`folder-images`,"-figures":`folder-images`,"-filter":`folder-filter`,"-filters":`folder-filter`,"-firebase":`folder-firebase`,"-firebase-cloud-functions":`folder-cloud-functions`,"-firebase-cloudfunctions":`folder-cloud-functions`,"-firebase-firestore":`folder-firestore`,"-firestore":`folder-firestore`,"-fixture":`folder-mock`,"-fixtures":`folder-mock`,"-flow-typed":`folder-flow`,"-flutter":`folder-flutter`,"-font":`folder-font`,"-fonts":`folder-font`,"-forgejo":`folder-forgejo`,"-form":`folder-form`,"-forms":`folder-form`,"-forum":`folder-messages`,"-fragments":`folder-components`,"-frontend":`folder-client`,"-frontends":`folder-client`,"-func":`folder-functions`,"-funcs":`folder-functions`,"-function":`folder-functions`,"-functions":`folder-functions`,"-game":`folder-console`,"-gamemaker":`folder-gamemaker`,"-gamemaker2":`folder-gamemaker`,"-games":`folder-console`,"-gcp":`folder-aws`,"-gemini":`folder-gemini-ai`,"-gemini-ai":`folder-gemini-ai`,"-geminiai":`folder-gemini-ai`,"-gen":`folder-generator`,"-generated":`folder-generator`,"-generator":`folder-generator`,"-generators":`folder-generator`,"-gens":`folder-generator`,"-git":`folder-git`,"-gitea":`folder-gitea`,"-githooks":`folder-git`,"-github":`folder-github`,"-github/issue_template":`folder-template`,"-github/pull_request_template":`folder-template`,"-github/workflows":`folder-gh-workflows`,"-gitlab":`folder-gitlab`,"-global":`folder-global`,"-glsl":`folder-shader`,"-go":`folder-go`,"-godot":`folder-godot`,"-godot-cpp":`folder-godot`,"-golang":`folder-go`,"-gql":`folder-graphql`,"-gradle":`folder-gradle`,"-graphql":`folder-graphql`,"-guard":`folder-guard`,"-guards":`folder-guard`,"-gui":`folder-ui`,"-gulp":`folder-gulp`,"-gulp-tasks":`folder-gulp`,"-gulpfile.babel.js":`folder-gulp`,"-gulpfile.js":`folder-gulp`,"-gulpfile.mjs":`folder-gulp`,"-gulpfile.ts":`folder-gulp`,"-gulpfiles":`folder-gulp`,"-handler":`folder-controller`,"-handlers":`folder-controller`,"-helm":`folder-helm`,"-helmchart":`folder-helm`,"-helmcharts":`folder-helm`,"-helper":`folder-helper`,"-helpers":`folder-helper`,"-hg":`folder-mercurial`,"-hgext":`folder-mercurial`,"-hghooks":`folder-mercurial`,"-histories":`folder-backup`,"-history":`folder-backup`,"-hlsl":`folder-shader`,"-home":`folder-home`,"-hook":`folder-hook`,"-hooks":`folder-hook`,"-html":`folder-views`,"-husky":`folder-husky`,"-i18n":`folder-i18n`,"-ico":`folder-images`,"-icon":`folder-images`,"-icons":`folder-images`,"-icos":`folder-images`,"-idea":`folder-intellij`,"-image":`folder-images`,"-images":`folder-images`,"-img":`folder-images`,"-imgs":`folder-images`,"-import":`folder-import`,"-imported":`folder-import`,"-imports":`folder-import`,"-in":`folder-input`,"-inc":`folder-include`,"-inc64":`folder-include`,"-include":`folder-include`,"-includes":`folder-include`,"-infra":`folder-server`,"-infrastructure":`folder-server`,"-input":`folder-input`,"-inputs":`folder-input`,"-integration":`folder-connection`,"-integration-test":`folder-coverage`,"-integration-tests":`folder-coverage`,"-integrations":`folder-connection`,"-interceptor":`folder-interceptor`,"-interceptors":`folder-interceptor`,"-interface":`folder-interface`,"-interfaces":`folder-interface`,"-internationalization":`folder-i18n`,"-inventories":`folder-server`,"-inventory":`folder-server`,"-io":`folder-input`,"-ios":`folder-ios`,"-ipad":`folder-macos`,"-iphone":`folder-macos`,"-ipod":`folder-macos`,"-ipynb":`folder-jupyter`,"-it":`folder-coverage`,"-j2":`folder-jinja`,"-java":`folder-java`,"-javascript":`folder-javascript`,"-javascripts":`folder-javascript`,"-jinja":`folder-jinja`,"-jinja2":`folder-jinja`,"-job":`folder-job`,"-jobs":`folder-job`,"-js":`folder-javascript`,"-json":`folder-json`,"-jsonc":`folder-json`,"-jsonl":`folder-json`,"-jsons":`folder-json`,"-jupyter":`folder-jupyter`,"-jwt":`folder-keys`,"-k8s":`folder-kubernetes`,"-key":`folder-keys`,"-keys":`folder-keys`,"-kit":`folder-tools`,"-kits":`folder-tools`,"-knowledge":`folder-docs`,"-kotlin":`folder-kotlin`,"-kql":`folder-kusto`,"-kubernetes":`folder-kubernetes`,"-kusto":`folder-kusto`,"-l10n":`folder-i18n`,"-lambda":`folder-functions`,"-lambdas":`folder-functions`,"-landing":`folder-home`,"-lang":`folder-i18n`,"-langs":`folder-i18n`,"-language":`folder-i18n`,"-languages":`folder-i18n`,"-layout":`folder-layout`,"-layouts":`folder-layout`,"-lefthook":`folder-lefthook`,"-lefthook-local":`folder-lefthook`,"-less":`folder-less`,"-lib":`folder-lib`,"-lib64":`folder-lib`,"-libraries":`folder-lib`,"-library":`folder-lib`,"-libs":`folder-lib`,"-license":`folder-license`,"-licenses":`folder-license`,"-link":`folder-link`,"-links":`folder-link`,"-linux":`folder-linux`,"-linuxbsd":`folder-linux`,"-liquibase":`folder-liquibase`,"-locale":`folder-i18n`,"-locales":`folder-i18n`,"-localization":`folder-i18n`,"-log":`folder-log`,"-logging":`folder-log`,"-logic":`folder-functions`,"-logs":`folder-log`,"-lottie":`folder-lottie`,"-lottiefiles":`folder-lottie`,"-lotties":`folder-lottie`,"-lua":`folder-lua`,"-luau":`folder-luau`,"-mac":`folder-macos`,"-macbook":`folder-macos`,"-macbook-air":`folder-macos`,"-macos":`folder-macos`,"-macosx":`folder-macos`,"-mail":`folder-mail`,"-mailers":`folder-mail`,"-mails":`folder-mail`,"-main":`folder-home`,"-manager":`folder-admin`,"-managers":`folder-admin`,"-mapping":`folder-mappings`,"-mappings":`folder-mappings`,"-markdown":`folder-markdown`,"-math":`folder-functions`,"-maths":`folder-functions`,"-md":`folder-markdown`,"-measure":`folder-benchmark`,"-measurement":`folder-benchmark`,"-measures":`folder-benchmark`,"-media":`folder-video`,"-messages":`folder-messages`,"-messaging":`folder-messages`,"-meta":`folder-meta`,"-meta-inf":`folder-config`,"-metadata":`folder-meta`,"-metro":`folder-metro`,"-middleware":`folder-middleware`,"-middlewares":`folder-middleware`,"-migration":`folder-migrations`,"-migrations":`folder-migrations`,"-mint":`folder-linux`,"-misc":`folder-other`,"-miscellaneous":`folder-other`,"-mjml":`folder-mjml`,"-mjs":`folder-javascript`,"-mobile":`folder-mobile`,"-mobiles":`folder-mobile`,"-mock":`folder-mock`,"-mocks":`folder-mock`,"-mod":`folder-plugin`,"-modding":`folder-plugin`,"-model":`folder-class`,"-models":`folder-class`,"-moderator":`folder-admin`,"-moderators":`folder-admin`,"-mods":`folder-plugin`,"-module":`folder-plugin`,"-modules":`folder-plugin`,"-mojo":`folder-mojo`,"-molecule":`folder-molecule`,"-molecules":`folder-molecule`,"-moon":`folder-moon`,"-motion":`folder-animation`,"-motions":`folder-animation`,"-movie":`folder-video`,"-movies":`folder-video`,"-mq":`folder-queue`,"-mts":`folder-typescript`,"-music":`folder-audio`,"-navigation":`folder-routes`,"-navigations":`folder-routes`,"-netlify":`folder-netlify`,"-news":`folder-docs`,"-next":`folder-next`,"-nginx":`folder-nginx`,"-node":`folder-node`,"-node_modules":`folder-node`,"-nodejs":`folder-node`,"-note":`folder-docs`,"-notebook":`folder-jupyter`,"-notebooks":`folder-jupyter`,"-notes":`folder-docs`,"-now":`folder-vercel`,"-nuxt":`folder-nuxt`,"-nyc-output":`folder-coverage`,"-nyc_output":`folder-coverage`,"-obsidian":`folder-obsidian`,"-opencode":`folder-opencode`,"-option":`folder-config`,"-options":`folder-config`,"-organism":`folder-organism`,"-organisms":`folder-organism`,"-osx":`folder-macos`,"-other":`folder-other`,"-others":`folder-other`,"-out":`folder-dist`,"-output":`folder-dist`,"-outputs":`folder-dist`,"-package":`folder-packages`,"-packages":`folder-packages`,"-pact":`folder-contract`,"-pacts":`folder-contract`,"-page":`folder-views`,"-pages":`folder-views`,"-palette":`folder-theme`,"-palettes":`folder-theme`,"-partial":`folder-include`,"-partials":`folder-include`,"-patches":`folder-git`,"-pdf":`folder-pdf`,"-pdfs":`folder-pdf`,"-pdm-build":`folder-pdm`,"-pdm-plugins":`folder-pdm`,"-perf":`folder-benchmark`,"-performance":`folder-benchmark`,"-phone":`folder-mobile`,"-phones":`folder-mobile`,"-photo":`folder-images`,"-photograph":`folder-images`,"-photographs":`folder-images`,"-photos":`folder-images`,"-php":`folder-php`,"-phpmailer":`folder-phpmailer`,"-pic":`folder-images`,"-pics":`folder-images`,"-picture":`folder-images`,"-pictures":`folder-images`,"-pipe":`folder-pipe`,"-pipeline":`folder-pipe`,"-pipelines":`folder-pipe`,"-pipes":`folder-pipe`,"-pkg":`folder-packages`,"-pkgs":`folder-packages`,"-plastic":`folder-plastic`,"-playground":`folder-sandbox`,"-playgrounds":`folder-sandbox`,"-playlist":`folder-audio`,"-playlists":`folder-audio`,"-plugin":`folder-plugin`,"-plugins":`folder-plugin`,"-policies":`folder-policy`,"-policy":`folder-policy`,"-popos":`folder-linux`,"-portability":`folder-mobile`,"-portable":`folder-mobile`,"-post":`folder-docs`,"-postman":`folder-postman`,"-posts":`folder-docs`,"-powershell":`folder-powershell`,"-pref":`folder-config`,"-preference":`folder-config`,"-preferences":`folder-config`,"-prefs":`folder-config`,"-presentation":`folder-ui`,"-preview":`folder-review`,"-previews":`folder-review`,"-prisma":`folder-prisma`,"-prisma/schema":`folder-prisma`,"-private":`folder-private`,"-profiling":`folder-benchmark`,"-proj":`folder-project`,"-project":`folder-project`,"-projects":`folder-project`,"-projs":`folder-project`,"-prompt":`folder-prompts`,"-prompts":`folder-prompts`,"-properties":`folder-config`,"-props":`folder-config`,"-proto":`folder-proto`,"-protobuf":`folder-proto`,"-protobufs":`folder-proto`,"-protos":`folder-proto`,"-provider":`folder-controller`,"-providers":`folder-controller`,"-proxy":`folder-public`,"-ps":`folder-powershell`,"-ps1":`folder-powershell`,"-ps4":`folder-console`,"-ps5":`folder-console`,"-public":`folder-public`,"-public_html":`folder-views`,"-pwa":`folder-client`,"-pycache":`folder-python`,"-pytest_cache":`folder-python`,"-python":`folder-python`,"-pytorch":`folder-pytorch`,"-quasar":`folder-quasar`,"-queue":`folder-queue`,"-queues":`folder-queue`,"-r":`folder-r`,"-recordings":`folder-audio`,"-release":`folder-dist`,"-remote":`folder-connection`,"-remotes":`folder-connection`,"-repo":`folder-repository`,"-report":`folder-resource`,"-reports":`folder-resource`,"-repos":`folder-repository`,"-repositories":`folder-repository`,"-repository":`folder-repository`,"-res":`folder-resource`,"-resolver":`folder-resolver`,"-resolvers":`folder-resolver`,"-resource":`folder-resource`,"-resources":`folder-resource`,"-restapi":`folder-api`,"-review":`folder-review`,"-reviewed":`folder-review`,"-reviews":`folder-review`,"-revisal":`folder-review`,"-revisals":`folder-review`,"-robot":`folder-robot`,"-robots":`folder-robot`,"-router":`folder-routes`,"-routers":`folder-routes`,"-routes":`folder-routes`,"-routing":`folder-routes`,"-rule":`folder-rules`,"-rules":`folder-rules`,"-rust":`folder-rust`,"-salt":`folder-salt`,"-saltstack":`folder-salt`,"-sample":`folder-examples`,"-sample-data":`folder-examples`,"-samples":`folder-examples`,"-sandbox":`folder-sandbox`,"-sandboxes":`folder-sandbox`,"-sass":`folder-sass`,"-scala":`folder-scala`,"-schema":`folder-class`,"-schemas":`folder-class`,"-sconf_temp":`folder-scons`,"-scons":`folder-scons`,"-scons_cache":`folder-scons`,"-screen":`folder-views`,"-screengrab":`folder-images`,"-screengrabs":`folder-images`,"-screens":`folder-views`,"-screenshot":`folder-images`,"-screenshots":`folder-images`,"-script":`folder-scripts`,"-scripting":`folder-scripts`,"-scripts":`folder-scripts`,"-scss":`folder-sass`,"-secret":`folder-keys`,"-secrets":`folder-keys`,"-secure":`folder-secure`,"-security":`folder-secure`,"-seed":`folder-seeders`,"-seeders":`folder-seeders`,"-seeding":`folder-seeders`,"-seeds":`folder-seeders`,"-server":`folder-server`,"-serverless":`folder-serverless`,"-serverpackages":`folder-packages`,"-servers":`folder-server`,"-service":`folder-controller`,"-services":`folder-controller`,"-setting":`folder-config`,"-settings":`folder-config`,"-shader":`folder-shader`,"-shaders":`folder-shader`,"-shared":`folder-shared`,"-shop":`folder-cart`,"-shopping":`folder-cart`,"-shopping-cart":`folder-cart`,"-sim":`folder-simulations`,"-sims":`folder-simulations`,"-simulation":`folder-simulations`,"-simulations":`folder-simulations`,"-site":`folder-public`,"-sketch":`folder-mock`,"-sketches":`folder-mock`,"-skill":`folder-skills`,"-skills":`folder-skills`,"-smtp":`folder-mail`,"-snap":`folder-snapcraft`,"-snapcraft":`folder-snapcraft`,"-snapshots":`folder-test`,"-snippet":`folder-snippet`,"-snippets":`folder-snippet`,"-song":`folder-audio`,"-songs":`folder-audio`,"-sound":`folder-audio`,"-sounds":`folder-audio`,"-source":`folder-src`,"-sources":`folder-src`,"-spa":`folder-client`,"-spec":`folder-test`,"-specs":`folder-test`,"-spellcheck":`folder-syntax`,"-spellcheckers":`folder-syntax`,"-sql":`folder-database`,"-src":`folder-src`,"-src-tauri":`folder-src-tauri`,"-srcs":`folder-src`,"-ssl":`folder-secure`,"-stack":`folder-stack`,"-stacks":`folder-stack`,"-start":`folder-home`,"-static":`folder-resource`,"-stencil":`folder-stencil`,"-store":`folder-store`,"-stores":`folder-store`,"-stories":`folder-storybook`,"-storybook":`folder-storybook`,"-style":`folder-css`,"-styles":`folder-css`,"-stylesheet":`folder-css`,"-stylesheets":`folder-css`,"-stylus":`folder-stylus`,"-sublime":`folder-sublime`,"-submodules":`folder-git`,"-supabase":`folder-supabase`,"-svelte":`folder-svelte`,"-svelte-kit":`folder-svelte`,"-svg":`folder-svg`,"-svgs":`folder-svg`,"-switch":`folder-console`,"-syntax":`folder-syntax`,"-syntaxes":`folder-syntax`,"-table-of-contents":`folder-toc`,"-target":`folder-target`,"-taskfile":`folder-taskfile`,"-taskfiles":`folder-taskfile`,"-tasks":`folder-tasks`,"-television":`folder-television`,"-temp":`folder-temp`,"-template":`folder-template`,"-templates":`folder-template`,"-terraform":`folder-terraform`,"-test":`folder-test`,"-testfiles":`folder-test`,"-testing":`folder-test`,"-tests":`folder-test`,"-texture":`folder-images`,"-textures":`folder-images`,"-theme":`folder-theme`,"-themes":`folder-theme`,"-third-party":`folder-lib`,"-thirdparty":`folder-lib`,"-tickets":`folder-tasks`,"-tls":`folder-secure`,"-tmp":`folder-temp`,"-toc":`folder-toc`,"-token":`folder-keys`,"-tokens":`folder-keys`,"-toolbox":`folder-tools`,"-toolboxes":`folder-tools`,"-tooling":`folder-tools`,"-toolkit":`folder-tools`,"-toolkits":`folder-tools`,"-tools":`folder-tools`,"-torch":`folder-pytorch`,"-transition":`folder-animation`,"-transitions":`folder-animation`,"-translate":`folder-i18n`,"-translation":`folder-i18n`,"-translations":`folder-i18n`,"-trash":`folder-trash`,"-trigger":`folder-trigger`,"-triggers":`folder-trigger`,"-ts":`folder-typescript`,"-turbo":`folder-turborepo`,"-tv":`folder-television`,"-tx":`folder-i18n`,"-typeface":`folder-font`,"-typefaces":`folder-font`,"-types":`folder-typescript`,"-typescript":`folder-typescript`,"-typings":`folder-typescript`,"-ubuntu":`folder-linux`,"-ui":`folder-ui`,"-unity":`folder-unity`,"-unix":`folder-linux`,"-update":`folder-update`,"-updates":`folder-update`,"-upgrade":`folder-update`,"-upgrades":`folder-update`,"-upload":`folder-upload`,"-uploads":`folder-upload`,"-util":`folder-utils`,"-utilities":`folder-utils`,"-utility":`folder-utils`,"-utils":`folder-utils`,"-ux":`folder-ui`,"-validation":`folder-rules`,"-validations":`folder-rules`,"-validator":`folder-rules`,"-validators":`folder-rules`,"-vector":`folder-svg`,"-vectors":`folder-svg`,"-vendor":`folder-lib`,"-vendors":`folder-lib`,"-venv":`folder-environment`,"-vercel":`folder-vercel`,"-verdaccio":`folder-verdaccio`,"-vid":`folder-video`,"-video":`folder-video`,"-videos":`folder-video`,"-vids":`folder-video`,"-view":`folder-views`,"-views":`folder-views`,"-vm":`folder-vm`,"-vms":`folder-vm`,"-voice":`folder-audio`,"-voices":`folder-audio`,"-vscode":`folder-vscode`,"-vscode-test":`folder-vscode`,"-vue":`folder-vue`,"-vuepress":`folder-vuepress`,"-wakatime":`folder-wakatime`,"-web":`folder-public`,"-webpack":`folder-webpack`,"-website":`folder-public`,"-websites":`folder-public`,"-widget":`folder-components`,"-widgets":`folder-components`,"-wiki":`folder-docs`,"-win":`folder-windows`,"-win10":`folder-windows`,"-win11":`folder-windows`,"-win32":`folder-windows`,"-windows":`folder-windows`,"-windows10":`folder-windows`,"-windows11":`folder-windows`,"-windowsnt":`folder-windows`,"-windowsxp":`folder-windows`,"-winnt":`folder-windows`,"-winxp":`folder-windows`,"-wordpress-org":`folder-wordpress`,"-wp-content":`folder-wordpress`,"-wsl":`folder-linux`,"-www":`folder-public`,"-wwwroot":`folder-public`,"-xbox":`folder-console`,"-xtask":`folder-scripts`,"-yarn":`folder-yarn`,"-zeabur":`folder-zeabur`,"-zed":`folder-zed`,".@types":`folder-typescript`,".addin":`folder-plugin`,".addins":`folder-plugin`,".addon":`folder-plugin`,".addons":`folder-plugin`,".admin":`folder-admin`,".admins":`folder-admin`,".agent":`folder-robot`,".agents":`folder-robot`,".android":`folder-android`,".angular":`folder-angular`,".anim":`folder-animation`,".animated":`folder-animation`,".animation":`folder-animation`,".animations":`folder-animation`,".anims":`folder-animation`,".ansible":`folder-ansible`,".api":`folder-api`,".apis":`folder-api`,".apollo":`folder-apollo`,".apollo-cache":`folder-apollo`,".apollo-client":`folder-apollo`,".apollo-config":`folder-apollo`,".app":`folder-app`,".apple":`folder-macos`,".application":`folder-app`,".applications":`folder-app`,".apps":`folder-app`,".appwrite":`folder-appwrite`,".arc":`folder-archive`,".archival":`folder-archive`,".archive":`folder-archive`,".archives":`folder-archive`,".arcs":`folder-archive`,".article":`folder-docs`,".articles":`folder-docs`,".asm":`folder-assembly`,".assembly":`folder-assembly`,".asset":`folder-resource`,".assets":`folder-resource`,".astro":`folder-astro`,".atom":`folder-atom`,".atoms":`folder-atom`,".attachment":`folder-attachment`,".attachments":`folder-attachment`,".aud":`folder-audio`,".audio":`folder-audio`,".audios":`folder-audio`,".auds":`folder-audio`,".aurelia_project":`folder-aurelia`,".auth":`folder-secure`,".authentication":`folder-secure`,".auto":`folder-generator`,".aws":`folder-aws`,".azure":`folder-aws`,".azure-pipelines":`folder-azure-pipelines`,".azure-pipelines-ci":`folder-azure-pipelines`,".back-up":`folder-backup`,".back-ups":`folder-backup`,".backend":`folder-server`,".backends":`folder-server`,".backup":`folder-backup`,".backups":`folder-backup`,".bak":`folder-backup`,".baks":`folder-backup`,".base":`folder-base`,".bases":`folder-base`,".batch":`folder-batch`,".batches":`folder-batch`,".batchs":`folder-batch`,".bench":`folder-benchmark`,".benches":`folder-benchmark`,".benchmark":`folder-benchmark`,".benchmarks":`folder-benchmark`,".bibliographies":`folder-bibliography`,".bibliography":`folder-bibliography`,".bicep":`folder-bicep`,".bin":`folder-dist`,".bkp":`folder-backup`,".bkps":`folder-backup`,".blender":`folder-blender`,".blender-assets":`folder-blender`,".blender-files":`folder-blender`,".blender-models":`folder-blender`,".blender-project":`folder-blender`,".bloc":`folder-bloc`,".blocs":`folder-bloc`,".blog":`folder-docs`,".book":`folder-bibliography`,".books":`folder-bibliography`,".bot":`folder-robot`,".bots":`folder-robot`,".bower_components":`folder-bower`,".browser":`folder-public`,".browsers":`folder-public`,".build":`folder-dist`,".buildkite":`folder-buildkite`,".builds":`folder-dist`,".built":`folder-dist`,".bull":`folder-queue`,".cache":`folder-temp`,".cached":`folder-temp`,".calc":`folder-functions`,".calcs":`folder-functions`,".calculation":`folder-functions`,".calculations":`folder-functions`,".cargo":`folder-rust`,".cart":`folder-cart`,".centos":`folder-linux`,".cert":`folder-secure`,".certificate":`folder-secure`,".certificates":`folder-secure`,".certs":`folder-secure`,".cfg":`folder-config`,".cfgs":`folder-config`,".cfn-gen":`folder-generator`,".changes":`folder-delta`,".changeset":`folder-changesets`,".changesets":`folder-changesets`,".chat":`folder-messages`,".chats":`folder-messages`,".ci":`folder-ci`,".cipher":`folder-secure`,".circleci":`folder-circleci`,".cjs":`folder-javascript`,".class":`folder-class`,".classes":`folder-class`,".claude":`folder-claude`,".cli":`folder-command`,".client":`folder-client`,".clients":`folder-client`,".cline_docs":`folder-cline`,".clis":`folder-command`,".cloud-firestore":`folder-firestore`,".cloud-functions":`folder-cloud-functions`,".cloudflare":`folder-cloudflare`,".cloudfunctions":`folder-cloud-functions`,".cluster":`folder-cluster`,".clusters":`folder-cluster`,".cmd":`folder-command`,".cobol":`folder-cobol`,".code":`folder-src`,".color":`folder-theme`,".colors":`folder-theme`,".colour":`folder-theme`,".colours":`folder-theme`,".command":`folder-command`,".commandline":`folder-command`,".commands":`folder-command`,".common":`folder-shared`,".compiled":`folder-dist`,".components":`folder-components`,".composable":`folder-functions`,".composables":`folder-functions`,".concept":`folder-mock`,".concepts":`folder-mock`,".conf":`folder-config`,".config":`folder-config`,".configs":`folder-config`,".configuration":`folder-config`,".configurations":`folder-config`,".confs":`folder-config`,".connection":`folder-connection`,".connections":`folder-connection`,".console":`folder-console`,".const":`folder-constant`,".constant":`folder-constant`,".constants":`folder-constant`,".consts":`folder-constant`,".container":`folder-container`,".containers":`folder-container`,".content":`folder-content`,".contents":`folder-content`,".context":`folder-context`,".contexts":`folder-context`,".contract":`folder-contract`,".contract-test":`folder-contract`,".contract-testing":`folder-contract`,".contract-tests":`folder-contract`,".contracts":`folder-contract`,".controller":`folder-controller`,".controllers":`folder-controller`,".controls":`folder-controller`,".conversation":`folder-messages`,".conversations":`folder-messages`,".core":`folder-core`,".coverage":`folder-coverage`,".crash":`folder-error`,".crashes":`folder-error`,".crates":`folder-lib`,".css":`folder-css`,".cts":`folder-typescript`,".cubit":`folder-bloc`,".cubits":`folder-bloc`,".cue":`folder-cue`,".cues":`folder-cue`,".cursor":`folder-cursor`,".custom":`folder-custom`,".customs":`folder-custom`,".cypher":`folder-secure`,".cypress":`folder-cypress`,".dal":`folder-dal`,".dart":`folder-dart`,".dart_tool":`folder-dart`,".dart_tools":`folder-dart`,".data":`folder-database`,".data-access":`folder-dal`,".data-access-layer":`folder-dal`,".database":`folder-database`,".databases":`folder-database`,".db":`folder-database`,".deb":`folder-linux`,".debian":`folder-linux`,".debug":`folder-debug`,".debugger":`folder-debug`,".debugging":`folder-debug`,".decorator":`folder-decorators`,".decorators":`folder-decorators`,".deepin":`folder-linux`,".delta":`folder-delta`,".deltas":`folder-delta`,".demo":`folder-examples`,".demos":`folder-examples`,".dependencies":`folder-packages`,".design":`folder-theme`,".designs":`folder-theme`,".desktop":`folder-desktop`,".devcontainer":`folder-container`,".devpackages":`folder-packages`,".devtools":`folder-tools`,".dialog":`folder-messages`,".dialogs":`folder-messages`,".diary":`folder-docs`,".directive":`folder-directive`,".directives":`folder-directive`,".display":`folder-desktop`,".dist":`folder-dist`,".distribution":`folder-dist`,".doc":`folder-docs`,".docker":`folder-docker`,".dockerfiles":`folder-docker`,".dockerhub":`folder-docker`,".docs":`folder-docs`,".document":`folder-docs`,".documentation":`folder-docs`,".documents":`folder-docs`,".download":`folder-download`,".downloader":`folder-download`,".downloaders":`folder-download`,".downloads":`folder-download`,".draft":`folder-mock`,".drafts":`folder-mock`,".drizzle":`folder-drizzle`,".ds_store":`folder-macos`,".dump":`folder-dump`,".dumps":`folder-dump`,".e2e":`folder-coverage`,".easing":`folder-animation`,".easings":`folder-animation`,".element":`folder-element`,".elements":`folder-element`,".email":`folder-mail`,".emails":`folder-mail`,".enum":`folder-enum`,".enums":`folder-enum`,".env":`folder-environment`,".environment":`folder-environment`,".environments":`folder-environment`,".envs":`folder-environment`,".err":`folder-error`,".error":`folder-error`,".errors":`folder-error`,".errs":`folder-error`,".eslint":`folder-eslint`,".eslint-config":`folder-eslint`,".eslint-configs":`folder-eslint`,".eslint-plugin":`folder-eslint`,".eslint-plugins":`folder-eslint`,".etc":`folder-other`,".event":`folder-event`,".events":`folder-event`,".example":`folder-examples`,".examples":`folder-examples`,".expo":`folder-expo`,".expo-shared":`folder-expo`,".export":`folder-export`,".exported":`folder-export`,".exports":`folder-export`,".extension":`folder-plugin`,".extensions":`folder-plugin`,".external":`folder-lib`,".externals":`folder-lib`,".extra":`folder-other`,".extras":`folder-other`,".fastlane":`folder-fastlane`,".favicon":`folder-favicon`,".favicons":`folder-favicon`,".feat":`folder-features`,".feats":`folder-features`,".feature":`folder-features`,".features":`folder-features`,".fig":`folder-images`,".figs":`folder-images`,".figure":`folder-images`,".figures":`folder-images`,".filter":`folder-filter`,".filters":`folder-filter`,".firebase":`folder-firebase`,".firebase-cloud-functions":`folder-cloud-functions`,".firebase-cloudfunctions":`folder-cloud-functions`,".firebase-firestore":`folder-firestore`,".firestore":`folder-firestore`,".fixture":`folder-mock`,".fixtures":`folder-mock`,".flow-typed":`folder-flow`,".flutter":`folder-flutter`,".font":`folder-font`,".fonts":`folder-font`,".forgejo":`folder-forgejo`,".form":`folder-form`,".forms":`folder-form`,".forum":`folder-messages`,".fragments":`folder-components`,".frontend":`folder-client`,".frontends":`folder-client`,".func":`folder-functions`,".funcs":`folder-functions`,".function":`folder-functions`,".functions":`folder-functions`,".game":`folder-console`,".gamemaker":`folder-gamemaker`,".gamemaker2":`folder-gamemaker`,".games":`folder-console`,".gcp":`folder-aws`,".gemini":`folder-gemini-ai`,".gemini-ai":`folder-gemini-ai`,".geminiai":`folder-gemini-ai`,".gen":`folder-generator`,".generated":`folder-generator`,".generator":`folder-generator`,".generators":`folder-generator`,".gens":`folder-generator`,".git":`folder-git`,".gitea":`folder-gitea`,".githooks":`folder-git`,".github":`folder-github`,".github/issue_template":`folder-template`,".github/pull_request_template":`folder-template`,".github/workflows":`folder-gh-workflows`,".gitlab":`folder-gitlab`,".global":`folder-global`,".glsl":`folder-shader`,".go":`folder-go`,".godot":`folder-godot`,".godot-cpp":`folder-godot`,".golang":`folder-go`,".gql":`folder-graphql`,".gradle":`folder-gradle`,".graphql":`folder-graphql`,".guard":`folder-guard`,".guards":`folder-guard`,".gui":`folder-ui`,".gulp":`folder-gulp`,".gulp-tasks":`folder-gulp`,".gulpfile.babel.js":`folder-gulp`,".gulpfile.js":`folder-gulp`,".gulpfile.mjs":`folder-gulp`,".gulpfile.ts":`folder-gulp`,".gulpfiles":`folder-gulp`,".handler":`folder-controller`,".handlers":`folder-controller`,".helm":`folder-helm`,".helmchart":`folder-helm`,".helmcharts":`folder-helm`,".helper":`folder-helper`,".helpers":`folder-helper`,".hg":`folder-mercurial`,".hgext":`folder-mercurial`,".hghooks":`folder-mercurial`,".histories":`folder-backup`,".history":`folder-backup`,".hlsl":`folder-shader`,".home":`folder-home`,".hook":`folder-hook`,".hooks":`folder-hook`,".html":`folder-views`,".husky":`folder-husky`,".i18n":`folder-i18n`,".ico":`folder-images`,".icon":`folder-images`,".icons":`folder-images`,".icos":`folder-images`,".idea":`folder-intellij`,".image":`folder-images`,".images":`folder-images`,".img":`folder-images`,".imgs":`folder-images`,".import":`folder-import`,".imported":`folder-import`,".imports":`folder-import`,".in":`folder-input`,".inc":`folder-include`,".inc64":`folder-include`,".include":`folder-include`,".includes":`folder-include`,".infra":`folder-server`,".infrastructure":`folder-server`,".input":`folder-input`,".inputs":`folder-input`,".integration":`folder-connection`,".integration-test":`folder-coverage`,".integration-tests":`folder-coverage`,".integrations":`folder-connection`,".interceptor":`folder-interceptor`,".interceptors":`folder-interceptor`,".interface":`folder-interface`,".interfaces":`folder-interface`,".internationalization":`folder-i18n`,".inventories":`folder-server`,".inventory":`folder-server`,".io":`folder-input`,".ios":`folder-ios`,".ipad":`folder-macos`,".iphone":`folder-macos`,".ipod":`folder-macos`,".ipynb":`folder-jupyter`,".it":`folder-coverage`,".j2":`folder-jinja`,".java":`folder-java`,".javascript":`folder-javascript`,".javascripts":`folder-javascript`,".jinja":`folder-jinja`,".jinja2":`folder-jinja`,".job":`folder-job`,".jobs":`folder-job`,".js":`folder-javascript`,".json":`folder-json`,".jsonc":`folder-json`,".jsonl":`folder-json`,".jsons":`folder-json`,".jupyter":`folder-jupyter`,".jwt":`folder-keys`,".k8s":`folder-kubernetes`,".key":`folder-keys`,".keys":`folder-keys`,".kit":`folder-tools`,".kits":`folder-tools`,".knowledge":`folder-docs`,".kotlin":`folder-kotlin`,".kql":`folder-kusto`,".kubernetes":`folder-kubernetes`,".kusto":`folder-kusto`,".l10n":`folder-i18n`,".lambda":`folder-functions`,".lambdas":`folder-functions`,".landing":`folder-home`,".lang":`folder-i18n`,".langs":`folder-i18n`,".language":`folder-i18n`,".languages":`folder-i18n`,".layout":`folder-layout`,".layouts":`folder-layout`,".lefthook":`folder-lefthook`,".lefthook-local":`folder-lefthook`,".less":`folder-less`,".lib":`folder-lib`,".lib64":`folder-lib`,".libraries":`folder-lib`,".library":`folder-lib`,".libs":`folder-lib`,".license":`folder-license`,".licenses":`folder-license`,".link":`folder-link`,".links":`folder-link`,".linux":`folder-linux`,".linuxbsd":`folder-linux`,".liquibase":`folder-liquibase`,".locale":`folder-i18n`,".locales":`folder-i18n`,".localization":`folder-i18n`,".log":`folder-log`,".logging":`folder-log`,".logic":`folder-functions`,".logs":`folder-log`,".lottie":`folder-lottie`,".lottiefiles":`folder-lottie`,".lotties":`folder-lottie`,".lua":`folder-lua`,".luau":`folder-luau`,".mac":`folder-macos`,".macbook":`folder-macos`,".macbook-air":`folder-macos`,".macos":`folder-macos`,".macosx":`folder-macos`,".mail":`folder-mail`,".mailers":`folder-mail`,".mails":`folder-mail`,".main":`folder-home`,".manager":`folder-admin`,".managers":`folder-admin`,".mapping":`folder-mappings`,".mappings":`folder-mappings`,".markdown":`folder-markdown`,".math":`folder-functions`,".maths":`folder-functions`,".md":`folder-markdown`,".measure":`folder-benchmark`,".measurement":`folder-benchmark`,".measures":`folder-benchmark`,".media":`folder-video`,".messages":`folder-messages`,".messaging":`folder-messages`,".meta":`folder-meta`,".meta-inf":`folder-config`,".metadata":`folder-meta`,".metro":`folder-metro`,".middleware":`folder-middleware`,".middlewares":`folder-middleware`,".migration":`folder-migrations`,".migrations":`folder-migrations`,".mint":`folder-linux`,".misc":`folder-other`,".miscellaneous":`folder-other`,".mjml":`folder-mjml`,".mjs":`folder-javascript`,".mobile":`folder-mobile`,".mobiles":`folder-mobile`,".mock":`folder-mock`,".mocks":`folder-mock`,".mod":`folder-plugin`,".modding":`folder-plugin`,".model":`folder-class`,".models":`folder-class`,".moderator":`folder-admin`,".moderators":`folder-admin`,".mods":`folder-plugin`,".module":`folder-plugin`,".modules":`folder-plugin`,".mojo":`folder-mojo`,".molecule":`folder-molecule`,".molecules":`folder-molecule`,".moon":`folder-moon`,".motion":`folder-animation`,".motions":`folder-animation`,".movie":`folder-video`,".movies":`folder-video`,".mq":`folder-queue`,".mts":`folder-typescript`,".music":`folder-audio`,".navigation":`folder-routes`,".navigations":`folder-routes`,".netlify":`folder-netlify`,".news":`folder-docs`,".next":`folder-next`,".nginx":`folder-nginx`,".node":`folder-node`,".node_modules":`folder-node`,".nodejs":`folder-node`,".note":`folder-docs`,".notebook":`folder-jupyter`,".notebooks":`folder-jupyter`,".notes":`folder-docs`,".now":`folder-vercel`,".nuxt":`folder-nuxt`,".nyc-output":`folder-coverage`,".nyc_output":`folder-coverage`,".obsidian":`folder-obsidian`,".opencode":`folder-opencode`,".option":`folder-config`,".options":`folder-config`,".organism":`folder-organism`,".organisms":`folder-organism`,".osx":`folder-macos`,".other":`folder-other`,".others":`folder-other`,".out":`folder-dist`,".output":`folder-dist`,".outputs":`folder-dist`,".package":`folder-packages`,".packages":`folder-packages`,".pact":`folder-contract`,".pacts":`folder-contract`,".page":`folder-views`,".pages":`folder-views`,".palette":`folder-theme`,".palettes":`folder-theme`,".partial":`folder-include`,".partials":`folder-include`,".patches":`folder-git`,".pdf":`folder-pdf`,".pdfs":`folder-pdf`,".pdm-build":`folder-pdm`,".pdm-plugins":`folder-pdm`,".perf":`folder-benchmark`,".performance":`folder-benchmark`,".phone":`folder-mobile`,".phones":`folder-mobile`,".photo":`folder-images`,".photograph":`folder-images`,".photographs":`folder-images`,".photos":`folder-images`,".php":`folder-php`,".phpmailer":`folder-phpmailer`,".pic":`folder-images`,".pics":`folder-images`,".picture":`folder-images`,".pictures":`folder-images`,".pipe":`folder-pipe`,".pipeline":`folder-pipe`,".pipelines":`folder-pipe`,".pipes":`folder-pipe`,".pkg":`folder-packages`,".pkgs":`folder-packages`,".plastic":`folder-plastic`,".playground":`folder-sandbox`,".playgrounds":`folder-sandbox`,".playlist":`folder-audio`,".playlists":`folder-audio`,".plugin":`folder-plugin`,".plugins":`folder-plugin`,".policies":`folder-policy`,".policy":`folder-policy`,".popos":`folder-linux`,".portability":`folder-mobile`,".portable":`folder-mobile`,".post":`folder-docs`,".postman":`folder-postman`,".posts":`folder-docs`,".powershell":`folder-powershell`,".pref":`folder-config`,".preference":`folder-config`,".preferences":`folder-config`,".prefs":`folder-config`,".presentation":`folder-ui`,".preview":`folder-review`,".previews":`folder-review`,".prisma":`folder-prisma`,".prisma/schema":`folder-prisma`,".private":`folder-private`,".profiling":`folder-benchmark`,".proj":`folder-project`,".project":`folder-project`,".projects":`folder-project`,".projs":`folder-project`,".prompt":`folder-prompts`,".prompts":`folder-prompts`,".properties":`folder-config`,".props":`folder-config`,".proto":`folder-proto`,".protobuf":`folder-proto`,".protobufs":`folder-proto`,".protos":`folder-proto`,".provider":`folder-controller`,".providers":`folder-controller`,".proxy":`folder-public`,".ps":`folder-powershell`,".ps1":`folder-powershell`,".ps4":`folder-console`,".ps5":`folder-console`,".public":`folder-public`,".public_html":`folder-views`,".pwa":`folder-client`,".pycache":`folder-python`,".pytest_cache":`folder-python`,".python":`folder-python`,".pytorch":`folder-pytorch`,".quasar":`folder-quasar`,".queue":`folder-queue`,".queues":`folder-queue`,".r":`folder-r`,".recordings":`folder-audio`,".release":`folder-dist`,".remote":`folder-connection`,".remotes":`folder-connection`,".repo":`folder-repository`,".report":`folder-resource`,".reports":`folder-resource`,".repos":`folder-repository`,".repositories":`folder-repository`,".repository":`folder-repository`,".res":`folder-resource`,".resolver":`folder-resolver`,".resolvers":`folder-resolver`,".resource":`folder-resource`,".resources":`folder-resource`,".restapi":`folder-api`,".review":`folder-review`,".reviewed":`folder-review`,".reviews":`folder-review`,".revisal":`folder-review`,".revisals":`folder-review`,".robot":`folder-robot`,".robots":`folder-robot`,".router":`folder-routes`,".routers":`folder-routes`,".routes":`folder-routes`,".routing":`folder-routes`,".rule":`folder-rules`,".rules":`folder-rules`,".rust":`folder-rust`,".salt":`folder-salt`,".saltstack":`folder-salt`,".sample":`folder-examples`,".sample-data":`folder-examples`,".samples":`folder-examples`,".sandbox":`folder-sandbox`,".sandboxes":`folder-sandbox`,".sass":`folder-sass`,".scala":`folder-scala`,".schema":`folder-class`,".schemas":`folder-class`,".sconf_temp":`folder-scons`,".scons":`folder-scons`,".scons_cache":`folder-scons`,".screen":`folder-views`,".screengrab":`folder-images`,".screengrabs":`folder-images`,".screens":`folder-views`,".screenshot":`folder-images`,".screenshots":`folder-images`,".script":`folder-scripts`,".scripting":`folder-scripts`,".scripts":`folder-scripts`,".scss":`folder-sass`,".secret":`folder-keys`,".secrets":`folder-keys`,".secure":`folder-secure`,".security":`folder-secure`,".seed":`folder-seeders`,".seeders":`folder-seeders`,".seeding":`folder-seeders`,".seeds":`folder-seeders`,".server":`folder-server`,".serverless":`folder-serverless`,".serverpackages":`folder-packages`,".servers":`folder-server`,".service":`folder-controller`,".services":`folder-controller`,".setting":`folder-config`,".settings":`folder-config`,".shader":`folder-shader`,".shaders":`folder-shader`,".shared":`folder-shared`,".shop":`folder-cart`,".shopping":`folder-cart`,".shopping-cart":`folder-cart`,".sim":`folder-simulations`,".sims":`folder-simulations`,".simulation":`folder-simulations`,".simulations":`folder-simulations`,".site":`folder-public`,".sketch":`folder-mock`,".sketches":`folder-mock`,".skill":`folder-skills`,".skills":`folder-skills`,".smtp":`folder-mail`,".snap":`folder-snapcraft`,".snapcraft":`folder-snapcraft`,".snapshots":`folder-test`,".snippet":`folder-snippet`,".snippets":`folder-snippet`,".song":`folder-audio`,".songs":`folder-audio`,".sound":`folder-audio`,".sounds":`folder-audio`,".source":`folder-src`,".sources":`folder-src`,".spa":`folder-client`,".spec":`folder-test`,".specs":`folder-test`,".spellcheck":`folder-syntax`,".spellcheckers":`folder-syntax`,".sql":`folder-database`,".src":`folder-src`,".src-tauri":`folder-src-tauri`,".srcs":`folder-src`,".ssl":`folder-secure`,".stack":`folder-stack`,".stacks":`folder-stack`,".start":`folder-home`,".static":`folder-resource`,".stencil":`folder-stencil`,".store":`folder-store`,".stores":`folder-store`,".stories":`folder-storybook`,".storybook":`folder-storybook`,".style":`folder-css`,".styles":`folder-css`,".stylesheet":`folder-css`,".stylesheets":`folder-css`,".stylus":`folder-stylus`,".sublime":`folder-sublime`,".submodules":`folder-git`,".supabase":`folder-supabase`,".svelte":`folder-svelte`,".svelte-kit":`folder-svelte`,".svg":`folder-svg`,".svgs":`folder-svg`,".switch":`folder-console`,".syntax":`folder-syntax`,".syntaxes":`folder-syntax`,".table-of-contents":`folder-toc`,".target":`folder-target`,".taskfile":`folder-taskfile`,".taskfiles":`folder-taskfile`,".tasks":`folder-tasks`,".television":`folder-television`,".temp":`folder-temp`,".template":`folder-template`,".templates":`folder-template`,".terraform":`folder-terraform`,".test":`folder-test`,".testfiles":`folder-test`,".testing":`folder-test`,".tests":`folder-test`,".texture":`folder-images`,".textures":`folder-images`,".theme":`folder-theme`,".themes":`folder-theme`,".third-party":`folder-lib`,".thirdparty":`folder-lib`,".tickets":`folder-tasks`,".tls":`folder-secure`,".tmp":`folder-temp`,".toc":`folder-toc`,".token":`folder-keys`,".tokens":`folder-keys`,".toolbox":`folder-tools`,".toolboxes":`folder-tools`,".tooling":`folder-tools`,".toolkit":`folder-tools`,".toolkits":`folder-tools`,".tools":`folder-tools`,".torch":`folder-pytorch`,".transition":`folder-animation`,".transitions":`folder-animation`,".translate":`folder-i18n`,".translation":`folder-i18n`,".translations":`folder-i18n`,".trash":`folder-trash`,".trigger":`folder-trigger`,".triggers":`folder-trigger`,".ts":`folder-typescript`,".turbo":`folder-turborepo`,".tv":`folder-television`,".tx":`folder-i18n`,".typeface":`folder-font`,".typefaces":`folder-font`,".types":`folder-typescript`,".typescript":`folder-typescript`,".typings":`folder-typescript`,".ubuntu":`folder-linux`,".ui":`folder-ui`,".unity":`folder-unity`,".unix":`folder-linux`,".update":`folder-update`,".updates":`folder-update`,".upgrade":`folder-update`,".upgrades":`folder-update`,".upload":`folder-upload`,".uploads":`folder-upload`,".util":`folder-utils`,".utilities":`folder-utils`,".utility":`folder-utils`,".utils":`folder-utils`,".ux":`folder-ui`,".validation":`folder-rules`,".validations":`folder-rules`,".validator":`folder-rules`,".validators":`folder-rules`,".vector":`folder-svg`,".vectors":`folder-svg`,".vendor":`folder-lib`,".vendors":`folder-lib`,".venv":`folder-environment`,".vercel":`folder-vercel`,".verdaccio":`folder-verdaccio`,".vid":`folder-video`,".video":`folder-video`,".videos":`folder-video`,".vids":`folder-video`,".view":`folder-views`,".views":`folder-views`,".vm":`folder-vm`,".vms":`folder-vm`,".voice":`folder-audio`,".voices":`folder-audio`,".vscode":`folder-vscode`,".vscode-test":`folder-vscode`,".vue":`folder-vue`,".vuepress":`folder-vuepress`,".wakatime":`folder-wakatime`,".web":`folder-public`,".webpack":`folder-webpack`,".website":`folder-public`,".websites":`folder-public`,".widget":`folder-components`,".widgets":`folder-components`,".wiki":`folder-docs`,".win":`folder-windows`,".win10":`folder-windows`,".win11":`folder-windows`,".win32":`folder-windows`,".windows":`folder-windows`,".windows10":`folder-windows`,".windows11":`folder-windows`,".windowsnt":`folder-windows`,".windowsxp":`folder-windows`,".winnt":`folder-windows`,".winxp":`folder-windows`,".wordpress-org":`folder-wordpress`,".wp-content":`folder-wordpress`,".wsl":`folder-linux`,".www":`folder-public`,".wwwroot":`folder-public`,".xbox":`folder-console`,".xtask":`folder-scripts`,".yarn":`folder-yarn`,".zeabur":`folder-zeabur`,".zed":`folder-zed`,"@types":`folder-typescript`,"_@types":`folder-typescript`,"__@types__":`folder-typescript`,__addin__:`folder-plugin`,__addins__:`folder-plugin`,__addon__:`folder-plugin`,__addons__:`folder-plugin`,__admin__:`folder-admin`,__admins__:`folder-admin`,__agent__:`folder-robot`,__agents__:`folder-robot`,__android__:`folder-android`,__angular__:`folder-angular`,__anim__:`folder-animation`,__animated__:`folder-animation`,__animation__:`folder-animation`,__animations__:`folder-animation`,__anims__:`folder-animation`,__ansible__:`folder-ansible`,__api__:`folder-api`,__apis__:`folder-api`,"__apollo-cache__":`folder-apollo`,"__apollo-client__":`folder-apollo`,"__apollo-config__":`folder-apollo`,__apollo__:`folder-apollo`,__app__:`folder-app`,__apple__:`folder-macos`,__application__:`folder-app`,__applications__:`folder-app`,__apps__:`folder-app`,__appwrite__:`folder-appwrite`,__arc__:`folder-archive`,__archival__:`folder-archive`,__archive__:`folder-archive`,__archives__:`folder-archive`,__arcs__:`folder-archive`,__article__:`folder-docs`,__articles__:`folder-docs`,__asm__:`folder-assembly`,__assembly__:`folder-assembly`,__asset__:`folder-resource`,__assets__:`folder-resource`,__astro__:`folder-astro`,__atom__:`folder-atom`,__atoms__:`folder-atom`,__attachment__:`folder-attachment`,__attachments__:`folder-attachment`,__aud__:`folder-audio`,__audio__:`folder-audio`,__audios__:`folder-audio`,__auds__:`folder-audio`,__aurelia_project__:`folder-aurelia`,__auth__:`folder-secure`,__authentication__:`folder-secure`,__auto__:`folder-generator`,__aws__:`folder-aws`,"__azure-pipelines-ci__":`folder-azure-pipelines`,"__azure-pipelines__":`folder-azure-pipelines`,__azure__:`folder-aws`,"__back-up__":`folder-backup`,"__back-ups__":`folder-backup`,__backend__:`folder-server`,__backends__:`folder-server`,__backup__:`folder-backup`,__backups__:`folder-backup`,__bak__:`folder-backup`,__baks__:`folder-backup`,__base__:`folder-base`,__bases__:`folder-base`,__batch__:`folder-batch`,__batches__:`folder-batch`,__batchs__:`folder-batch`,__bench__:`folder-benchmark`,__benches__:`folder-benchmark`,__benchmark__:`folder-benchmark`,__benchmarks__:`folder-benchmark`,__bibliographies__:`folder-bibliography`,__bibliography__:`folder-bibliography`,__bicep__:`folder-bicep`,__bin__:`folder-dist`,__bkp__:`folder-backup`,__bkps__:`folder-backup`,"__blender-assets__":`folder-blender`,"__blender-files__":`folder-blender`,"__blender-models__":`folder-blender`,"__blender-project__":`folder-blender`,__blender__:`folder-blender`,__bloc__:`folder-bloc`,__blocs__:`folder-bloc`,__blog__:`folder-docs`,__book__:`folder-bibliography`,__books__:`folder-bibliography`,__bot__:`folder-robot`,__bots__:`folder-robot`,__bower_components__:`folder-bower`,__browser__:`folder-public`,__browsers__:`folder-public`,__build__:`folder-dist`,__buildkite__:`folder-buildkite`,__builds__:`folder-dist`,__built__:`folder-dist`,__bull__:`folder-queue`,__cache__:`folder-temp`,__cached__:`folder-temp`,__calc__:`folder-functions`,__calcs__:`folder-functions`,__calculation__:`folder-functions`,__calculations__:`folder-functions`,__cargo__:`folder-rust`,__cart__:`folder-cart`,__centos__:`folder-linux`,__cert__:`folder-secure`,__certificate__:`folder-secure`,__certificates__:`folder-secure`,__certs__:`folder-secure`,__cfg__:`folder-config`,__cfgs__:`folder-config`,"__cfn-gen__":`folder-generator`,__changes__:`folder-delta`,__changeset__:`folder-changesets`,__changesets__:`folder-changesets`,__chat__:`folder-messages`,__chats__:`folder-messages`,__ci__:`folder-ci`,__cipher__:`folder-secure`,__circleci__:`folder-circleci`,__cjs__:`folder-javascript`,__class__:`folder-class`,__classes__:`folder-class`,__claude__:`folder-claude`,__cli__:`folder-command`,__client__:`folder-client`,__clients__:`folder-client`,__cline_docs__:`folder-cline`,__clis__:`folder-command`,"__cloud-firestore__":`folder-firestore`,"__cloud-functions__":`folder-cloud-functions`,__cloudflare__:`folder-cloudflare`,__cloudfunctions__:`folder-cloud-functions`,__cluster__:`folder-cluster`,__clusters__:`folder-cluster`,__cmd__:`folder-command`,__cobol__:`folder-cobol`,__code__:`folder-src`,__color__:`folder-theme`,__colors__:`folder-theme`,__colour__:`folder-theme`,__colours__:`folder-theme`,__command__:`folder-command`,__commandline__:`folder-command`,__commands__:`folder-command`,__common__:`folder-shared`,__compiled__:`folder-dist`,__components__:`folder-components`,__composable__:`folder-functions`,__composables__:`folder-functions`,__concept__:`folder-mock`,__concepts__:`folder-mock`,__conf__:`folder-config`,__config__:`folder-config`,__configs__:`folder-config`,__configuration__:`folder-config`,__configurations__:`folder-config`,__confs__:`folder-config`,__connection__:`folder-connection`,__connections__:`folder-connection`,__console__:`folder-console`,__const__:`folder-constant`,__constant__:`folder-constant`,__constants__:`folder-constant`,__consts__:`folder-constant`,__container__:`folder-container`,__containers__:`folder-container`,__content__:`folder-content`,__contents__:`folder-content`,__context__:`folder-context`,__contexts__:`folder-context`,"__contract-test__":`folder-contract`,"__contract-testing__":`folder-contract`,"__contract-tests__":`folder-contract`,__contract__:`folder-contract`,__contracts__:`folder-contract`,__controller__:`folder-controller`,__controllers__:`folder-controller`,__controls__:`folder-controller`,__conversation__:`folder-messages`,__conversations__:`folder-messages`,__core__:`folder-core`,__coverage__:`folder-coverage`,__crash__:`folder-error`,__crashes__:`folder-error`,__crates__:`folder-lib`,__css__:`folder-css`,__cts__:`folder-typescript`,__cubit__:`folder-bloc`,__cubits__:`folder-bloc`,__cue__:`folder-cue`,__cues__:`folder-cue`,__cursor__:`folder-cursor`,__custom__:`folder-custom`,__customs__:`folder-custom`,__cypher__:`folder-secure`,__cypress__:`folder-cypress`,__dal__:`folder-dal`,__dart__:`folder-dart`,__dart_tool__:`folder-dart`,__dart_tools__:`folder-dart`,"__data-access-layer__":`folder-dal`,"__data-access__":`folder-dal`,__data__:`folder-database`,__database__:`folder-database`,__databases__:`folder-database`,__db__:`folder-database`,__deb__:`folder-linux`,__debian__:`folder-linux`,__debug__:`folder-debug`,__debugger__:`folder-debug`,__debugging__:`folder-debug`,__decorator__:`folder-decorators`,__decorators__:`folder-decorators`,__deepin__:`folder-linux`,__delta__:`folder-delta`,__deltas__:`folder-delta`,__demo__:`folder-examples`,__demos__:`folder-examples`,__dependencies__:`folder-packages`,__design__:`folder-theme`,__designs__:`folder-theme`,__desktop__:`folder-desktop`,__devcontainer__:`folder-container`,__devpackages__:`folder-packages`,__devtools__:`folder-tools`,__dialog__:`folder-messages`,__dialogs__:`folder-messages`,__diary__:`folder-docs`,__directive__:`folder-directive`,__directives__:`folder-directive`,__display__:`folder-desktop`,__dist__:`folder-dist`,__distribution__:`folder-dist`,__doc__:`folder-docs`,__docker__:`folder-docker`,__dockerfiles__:`folder-docker`,__dockerhub__:`folder-docker`,__docs__:`folder-docs`,__document__:`folder-docs`,__documentation__:`folder-docs`,__documents__:`folder-docs`,__download__:`folder-download`,__downloader__:`folder-download`,__downloaders__:`folder-download`,__downloads__:`folder-download`,__draft__:`folder-mock`,__drafts__:`folder-mock`,__drizzle__:`folder-drizzle`,__ds_store__:`folder-macos`,__dump__:`folder-dump`,__dumps__:`folder-dump`,__e2e__:`folder-coverage`,__easing__:`folder-animation`,__easings__:`folder-animation`,__element__:`folder-element`,__elements__:`folder-element`,__email__:`folder-mail`,__emails__:`folder-mail`,__enum__:`folder-enum`,__enums__:`folder-enum`,__env__:`folder-environment`,__environment__:`folder-environment`,__environments__:`folder-environment`,__envs__:`folder-environment`,__err__:`folder-error`,__error__:`folder-error`,__errors__:`folder-error`,__errs__:`folder-error`,"__eslint-config__":`folder-eslint`,"__eslint-configs__":`folder-eslint`,"__eslint-plugin__":`folder-eslint`,"__eslint-plugins__":`folder-eslint`,__eslint__:`folder-eslint`,__etc__:`folder-other`,__event__:`folder-event`,__events__:`folder-event`,__example__:`folder-examples`,__examples__:`folder-examples`,"__expo-shared__":`folder-expo`,__expo__:`folder-expo`,__export__:`folder-export`,__exported__:`folder-export`,__exports__:`folder-export`,__extension__:`folder-plugin`,__extensions__:`folder-plugin`,__external__:`folder-lib`,__externals__:`folder-lib`,__extra__:`folder-other`,__extras__:`folder-other`,__fastlane__:`folder-fastlane`,__favicon__:`folder-favicon`,__favicons__:`folder-favicon`,__feat__:`folder-features`,__feats__:`folder-features`,__feature__:`folder-features`,__features__:`folder-features`,__fig__:`folder-images`,__figs__:`folder-images`,__figure__:`folder-images`,__figures__:`folder-images`,__filter__:`folder-filter`,__filters__:`folder-filter`,"__firebase-cloud-functions__":`folder-cloud-functions`,"__firebase-cloudfunctions__":`folder-cloud-functions`,"__firebase-firestore__":`folder-firestore`,__firebase__:`folder-firebase`,__firestore__:`folder-firestore`,__fixture__:`folder-mock`,__fixtures__:`folder-mock`,"__flow-typed__":`folder-flow`,__flutter__:`folder-flutter`,__font__:`folder-font`,__fonts__:`folder-font`,__forgejo__:`folder-forgejo`,__form__:`folder-form`,__forms__:`folder-form`,__forum__:`folder-messages`,__fragments__:`folder-components`,__frontend__:`folder-client`,__frontends__:`folder-client`,__func__:`folder-functions`,__funcs__:`folder-functions`,__function__:`folder-functions`,__functions__:`folder-functions`,__game__:`folder-console`,__gamemaker2__:`folder-gamemaker`,__gamemaker__:`folder-gamemaker`,__games__:`folder-console`,__gcp__:`folder-aws`,"__gemini-ai__":`folder-gemini-ai`,__gemini__:`folder-gemini-ai`,__geminiai__:`folder-gemini-ai`,__gen__:`folder-generator`,__generated__:`folder-generator`,__generator__:`folder-generator`,__generators__:`folder-generator`,__gens__:`folder-generator`,__git__:`folder-git`,__gitea__:`folder-gitea`,__githooks__:`folder-git`,"__github/issue_template__":`folder-template`,"__github/pull_request_template__":`folder-template`,"__github/workflows__":`folder-gh-workflows`,__github__:`folder-github`,__gitlab__:`folder-gitlab`,__global__:`folder-global`,__glsl__:`folder-shader`,__go__:`folder-go`,"__godot-cpp__":`folder-godot`,__godot__:`folder-godot`,__golang__:`folder-go`,__gql__:`folder-graphql`,__gradle__:`folder-gradle`,__graphql__:`folder-graphql`,__guard__:`folder-guard`,__guards__:`folder-guard`,__gui__:`folder-ui`,"__gulp-tasks__":`folder-gulp`,__gulp__:`folder-gulp`,"__gulpfile.babel.js__":`folder-gulp`,"__gulpfile.js__":`folder-gulp`,"__gulpfile.mjs__":`folder-gulp`,"__gulpfile.ts__":`folder-gulp`,__gulpfiles__:`folder-gulp`,__handler__:`folder-controller`,__handlers__:`folder-controller`,__helm__:`folder-helm`,__helmchart__:`folder-helm`,__helmcharts__:`folder-helm`,__helper__:`folder-helper`,__helpers__:`folder-helper`,__hg__:`folder-mercurial`,__hgext__:`folder-mercurial`,__hghooks__:`folder-mercurial`,__histories__:`folder-backup`,__history__:`folder-backup`,__hlsl__:`folder-shader`,__home__:`folder-home`,__hook__:`folder-hook`,__hooks__:`folder-hook`,__html__:`folder-views`,__husky__:`folder-husky`,__i18n__:`folder-i18n`,__ico__:`folder-images`,__icon__:`folder-images`,__icons__:`folder-images`,__icos__:`folder-images`,__idea__:`folder-intellij`,__image__:`folder-images`,__images__:`folder-images`,__img__:`folder-images`,__imgs__:`folder-images`,__import__:`folder-import`,__imported__:`folder-import`,__imports__:`folder-import`,__in__:`folder-input`,__inc64__:`folder-include`,__inc__:`folder-include`,__include__:`folder-include`,__includes__:`folder-include`,__infra__:`folder-server`,__infrastructure__:`folder-server`,__input__:`folder-input`,__inputs__:`folder-input`,"__integration-test__":`folder-coverage`,"__integration-tests__":`folder-coverage`,__integration__:`folder-connection`,__integrations__:`folder-connection`,__interceptor__:`folder-interceptor`,__interceptors__:`folder-interceptor`,__interface__:`folder-interface`,__interfaces__:`folder-interface`,__internationalization__:`folder-i18n`,__inventories__:`folder-server`,__inventory__:`folder-server`,__io__:`folder-input`,__ios__:`folder-ios`,__ipad__:`folder-macos`,__iphone__:`folder-macos`,__ipod__:`folder-macos`,__ipynb__:`folder-jupyter`,__it__:`folder-coverage`,__j2__:`folder-jinja`,__java__:`folder-java`,__javascript__:`folder-javascript`,__javascripts__:`folder-javascript`,__jinja2__:`folder-jinja`,__jinja__:`folder-jinja`,__job__:`folder-job`,__jobs__:`folder-job`,__js__:`folder-javascript`,__json__:`folder-json`,__jsonc__:`folder-json`,__jsonl__:`folder-json`,__jsons__:`folder-json`,__jupyter__:`folder-jupyter`,__jwt__:`folder-keys`,__k8s__:`folder-kubernetes`,__key__:`folder-keys`,__keys__:`folder-keys`,__kit__:`folder-tools`,__kits__:`folder-tools`,__knowledge__:`folder-docs`,__kotlin__:`folder-kotlin`,__kql__:`folder-kusto`,__kubernetes__:`folder-kubernetes`,__kusto__:`folder-kusto`,__l10n__:`folder-i18n`,__lambda__:`folder-functions`,__lambdas__:`folder-functions`,__landing__:`folder-home`,__lang__:`folder-i18n`,__langs__:`folder-i18n`,__language__:`folder-i18n`,__languages__:`folder-i18n`,__layout__:`folder-layout`,__layouts__:`folder-layout`,"__lefthook-local__":`folder-lefthook`,__lefthook__:`folder-lefthook`,__less__:`folder-less`,__lib64__:`folder-lib`,__lib__:`folder-lib`,__libraries__:`folder-lib`,__library__:`folder-lib`,__libs__:`folder-lib`,__license__:`folder-license`,__licenses__:`folder-license`,__link__:`folder-link`,__links__:`folder-link`,__linux__:`folder-linux`,__linuxbsd__:`folder-linux`,__liquibase__:`folder-liquibase`,__locale__:`folder-i18n`,__locales__:`folder-i18n`,__localization__:`folder-i18n`,__log__:`folder-log`,__logging__:`folder-log`,__logic__:`folder-functions`,__logs__:`folder-log`,__lottie__:`folder-lottie`,__lottiefiles__:`folder-lottie`,__lotties__:`folder-lottie`,__lua__:`folder-lua`,__luau__:`folder-luau`,__mac__:`folder-macos`,"__macbook-air__":`folder-macos`,__macbook__:`folder-macos`,__macos__:`folder-macos`,__macosx__:`folder-macos`,__mail__:`folder-mail`,__mailers__:`folder-mail`,__mails__:`folder-mail`,__main__:`folder-home`,__manager__:`folder-admin`,__managers__:`folder-admin`,__mapping__:`folder-mappings`,__mappings__:`folder-mappings`,__markdown__:`folder-markdown`,__math__:`folder-functions`,__maths__:`folder-functions`,__md__:`folder-markdown`,__measure__:`folder-benchmark`,__measurement__:`folder-benchmark`,__measures__:`folder-benchmark`,__media__:`folder-video`,__messages__:`folder-messages`,__messaging__:`folder-messages`,"__meta-inf__":`folder-config`,__meta__:`folder-meta`,__metadata__:`folder-meta`,__metro__:`folder-metro`,__middleware__:`folder-middleware`,__middlewares__:`folder-middleware`,__migration__:`folder-migrations`,__migrations__:`folder-migrations`,__mint__:`folder-linux`,__misc__:`folder-other`,__miscellaneous__:`folder-other`,__mjml__:`folder-mjml`,__mjs__:`folder-javascript`,__mobile__:`folder-mobile`,__mobiles__:`folder-mobile`,__mock__:`folder-mock`,__mocks__:`folder-mock`,__mod__:`folder-plugin`,__modding__:`folder-plugin`,__model__:`folder-class`,__models__:`folder-class`,__moderator__:`folder-admin`,__moderators__:`folder-admin`,__mods__:`folder-plugin`,__module__:`folder-plugin`,__modules__:`folder-plugin`,__mojo__:`folder-mojo`,__molecule__:`folder-molecule`,__molecules__:`folder-molecule`,__moon__:`folder-moon`,__motion__:`folder-animation`,__motions__:`folder-animation`,__movie__:`folder-video`,__movies__:`folder-video`,__mq__:`folder-queue`,__mts__:`folder-typescript`,__music__:`folder-audio`,__navigation__:`folder-routes`,__navigations__:`folder-routes`,__netlify__:`folder-netlify`,__news__:`folder-docs`,__next__:`folder-next`,__nginx__:`folder-nginx`,__node__:`folder-node`,__node_modules__:`folder-node`,__nodejs__:`folder-node`,__note__:`folder-docs`,__notebook__:`folder-jupyter`,__notebooks__:`folder-jupyter`,__notes__:`folder-docs`,__now__:`folder-vercel`,__nuxt__:`folder-nuxt`,"__nyc-output__":`folder-coverage`,__nyc_output__:`folder-coverage`,__obsidian__:`folder-obsidian`,__opencode__:`folder-opencode`,__option__:`folder-config`,__options__:`folder-config`,__organism__:`folder-organism`,__organisms__:`folder-organism`,__osx__:`folder-macos`,__other__:`folder-other`,__others__:`folder-other`,__out__:`folder-dist`,__output__:`folder-dist`,__outputs__:`folder-dist`,__package__:`folder-packages`,__packages__:`folder-packages`,__pact__:`folder-contract`,__pacts__:`folder-contract`,__page__:`folder-views`,__pages__:`folder-views`,__palette__:`folder-theme`,__palettes__:`folder-theme`,__partial__:`folder-include`,__partials__:`folder-include`,__patches__:`folder-git`,__pdf__:`folder-pdf`,__pdfs__:`folder-pdf`,"__pdm-build__":`folder-pdm`,"__pdm-plugins__":`folder-pdm`,__perf__:`folder-benchmark`,__performance__:`folder-benchmark`,__phone__:`folder-mobile`,__phones__:`folder-mobile`,__photo__:`folder-images`,__photograph__:`folder-images`,__photographs__:`folder-images`,__photos__:`folder-images`,__php__:`folder-php`,__phpmailer__:`folder-phpmailer`,__pic__:`folder-images`,__pics__:`folder-images`,__picture__:`folder-images`,__pictures__:`folder-images`,__pipe__:`folder-pipe`,__pipeline__:`folder-pipe`,__pipelines__:`folder-pipe`,__pipes__:`folder-pipe`,__pkg__:`folder-packages`,__pkgs__:`folder-packages`,__plastic__:`folder-plastic`,__playground__:`folder-sandbox`,__playgrounds__:`folder-sandbox`,__playlist__:`folder-audio`,__playlists__:`folder-audio`,__plugin__:`folder-plugin`,__plugins__:`folder-plugin`,__policies__:`folder-policy`,__policy__:`folder-policy`,__popos__:`folder-linux`,__portability__:`folder-mobile`,__portable__:`folder-mobile`,__post__:`folder-docs`,__postman__:`folder-postman`,__posts__:`folder-docs`,__powershell__:`folder-powershell`,__pref__:`folder-config`,__preference__:`folder-config`,__preferences__:`folder-config`,__prefs__:`folder-config`,__presentation__:`folder-ui`,__preview__:`folder-review`,__previews__:`folder-review`,"__prisma/schema__":`folder-prisma`,__prisma__:`folder-prisma`,__private__:`folder-private`,__profiling__:`folder-benchmark`,__proj__:`folder-project`,__project__:`folder-project`,__projects__:`folder-project`,__projs__:`folder-project`,__prompt__:`folder-prompts`,__prompts__:`folder-prompts`,__properties__:`folder-config`,__props__:`folder-config`,__protobuf__:`folder-proto`,__protobufs__:`folder-proto`,__protos__:`folder-proto`,__provider__:`folder-controller`,__providers__:`folder-controller`,__proxy__:`folder-public`,__ps1__:`folder-powershell`,__ps4__:`folder-console`,__ps5__:`folder-console`,__ps__:`folder-powershell`,__public__:`folder-public`,__public_html__:`folder-views`,__pwa__:`folder-client`,__pycache__:`folder-python`,__pytest_cache__:`folder-python`,__python__:`folder-python`,__pytorch__:`folder-pytorch`,__quasar__:`folder-quasar`,__queue__:`folder-queue`,__queues__:`folder-queue`,__r__:`folder-r`,__recordings__:`folder-audio`,__release__:`folder-dist`,__remote__:`folder-connection`,__remotes__:`folder-connection`,__repo__:`folder-repository`,__report__:`folder-resource`,__reports__:`folder-resource`,__repos__:`folder-repository`,__repositories__:`folder-repository`,__repository__:`folder-repository`,__res__:`folder-resource`,__resolver__:`folder-resolver`,__resolvers__:`folder-resolver`,__resource__:`folder-resource`,__resources__:`folder-resource`,__restapi__:`folder-api`,__review__:`folder-review`,__reviewed__:`folder-review`,__reviews__:`folder-review`,__revisal__:`folder-review`,__revisals__:`folder-review`,__robot__:`folder-robot`,__robots__:`folder-robot`,__router__:`folder-routes`,__routers__:`folder-routes`,__routes__:`folder-routes`,__routing__:`folder-routes`,__rule__:`folder-rules`,__rules__:`folder-rules`,__rust__:`folder-rust`,__salt__:`folder-salt`,__saltstack__:`folder-salt`,"__sample-data__":`folder-examples`,__sample__:`folder-examples`,__samples__:`folder-examples`,__sandbox__:`folder-sandbox`,__sandboxes__:`folder-sandbox`,__sass__:`folder-sass`,__scala__:`folder-scala`,__schema__:`folder-class`,__schemas__:`folder-class`,__sconf_temp__:`folder-scons`,__scons__:`folder-scons`,__scons_cache__:`folder-scons`,__screen__:`folder-views`,__screengrab__:`folder-images`,__screengrabs__:`folder-images`,__screens__:`folder-views`,__screenshot__:`folder-images`,__screenshots__:`folder-images`,__script__:`folder-scripts`,__scripting__:`folder-scripts`,__scripts__:`folder-scripts`,__scss__:`folder-sass`,__secret__:`folder-keys`,__secrets__:`folder-keys`,__secure__:`folder-secure`,__security__:`folder-secure`,__seed__:`folder-seeders`,__seeders__:`folder-seeders`,__seeding__:`folder-seeders`,__seeds__:`folder-seeders`,__server__:`folder-server`,__serverless__:`folder-serverless`,__serverpackages__:`folder-packages`,__servers__:`folder-server`,__service__:`folder-controller`,__services__:`folder-controller`,__setting__:`folder-config`,__settings__:`folder-config`,__shader__:`folder-shader`,__shaders__:`folder-shader`,__shared__:`folder-shared`,__shop__:`folder-cart`,"__shopping-cart__":`folder-cart`,__shopping__:`folder-cart`,__sim__:`folder-simulations`,__sims__:`folder-simulations`,__simulation__:`folder-simulations`,__simulations__:`folder-simulations`,__site__:`folder-public`,__sketch__:`folder-mock`,__sketches__:`folder-mock`,__skill__:`folder-skills`,__skills__:`folder-skills`,__smtp__:`folder-mail`,__snap__:`folder-snapcraft`,__snapcraft__:`folder-snapcraft`,__snapshots__:`folder-test`,__snippet__:`folder-snippet`,__snippets__:`folder-snippet`,__song__:`folder-audio`,__songs__:`folder-audio`,__sound__:`folder-audio`,__sounds__:`folder-audio`,__source__:`folder-src`,__sources__:`folder-src`,__spa__:`folder-client`,__spec__:`folder-test`,__specs__:`folder-test`,__spellcheck__:`folder-syntax`,__spellcheckers__:`folder-syntax`,__sql__:`folder-database`,"__src-tauri__":`folder-src-tauri`,__src__:`folder-src`,__srcs__:`folder-src`,__ssl__:`folder-secure`,__stack__:`folder-stack`,__stacks__:`folder-stack`,__start__:`folder-home`,__static__:`folder-resource`,__stencil__:`folder-stencil`,__store__:`folder-store`,__stores__:`folder-store`,__stories__:`folder-storybook`,__storybook__:`folder-storybook`,__style__:`folder-css`,__styles__:`folder-css`,__stylesheet__:`folder-css`,__stylesheets__:`folder-css`,__stylus__:`folder-stylus`,__sublime__:`folder-sublime`,__submodules__:`folder-git`,__supabase__:`folder-supabase`,"__svelte-kit__":`folder-svelte`,__svelte__:`folder-svelte`,__svg__:`folder-svg`,__svgs__:`folder-svg`,__switch__:`folder-console`,__syntax__:`folder-syntax`,__syntaxes__:`folder-syntax`,"__table-of-contents__":`folder-toc`,__target__:`folder-target`,__taskfile__:`folder-taskfile`,__taskfiles__:`folder-taskfile`,__tasks__:`folder-tasks`,__television__:`folder-television`,__temp__:`folder-temp`,__template__:`folder-template`,__templates__:`folder-template`,__terraform__:`folder-terraform`,__test__:`folder-test`,__testfiles__:`folder-test`,__testing__:`folder-test`,__tests__:`folder-test`,__texture__:`folder-images`,__textures__:`folder-images`,__theme__:`folder-theme`,__themes__:`folder-theme`,"__third-party__":`folder-lib`,__thirdparty__:`folder-lib`,__tickets__:`folder-tasks`,__tls__:`folder-secure`,__tmp__:`folder-temp`,__toc__:`folder-toc`,__token__:`folder-keys`,__tokens__:`folder-keys`,__toolbox__:`folder-tools`,__toolboxes__:`folder-tools`,__tooling__:`folder-tools`,__toolkit__:`folder-tools`,__toolkits__:`folder-tools`,__tools__:`folder-tools`,__torch__:`folder-pytorch`,__transition__:`folder-animation`,__transitions__:`folder-animation`,__translate__:`folder-i18n`,__translation__:`folder-i18n`,__translations__:`folder-i18n`,__trash__:`folder-trash`,__trigger__:`folder-trigger`,__triggers__:`folder-trigger`,__ts__:`folder-typescript`,__turbo__:`folder-turborepo`,__tv__:`folder-television`,__tx__:`folder-i18n`,__typeface__:`folder-font`,__typefaces__:`folder-font`,__types__:`folder-typescript`,__typescript__:`folder-typescript`,__typings__:`folder-typescript`,__ubuntu__:`folder-linux`,__ui__:`folder-ui`,__unity__:`folder-unity`,__unix__:`folder-linux`,__update__:`folder-update`,__updates__:`folder-update`,__upgrade__:`folder-update`,__upgrades__:`folder-update`,__upload__:`folder-upload`,__uploads__:`folder-upload`,__util__:`folder-utils`,__utilities__:`folder-utils`,__utility__:`folder-utils`,__utils__:`folder-utils`,__ux__:`folder-ui`,__validation__:`folder-rules`,__validations__:`folder-rules`,__validator__:`folder-rules`,__validators__:`folder-rules`,__vector__:`folder-svg`,__vectors__:`folder-svg`,__vendor__:`folder-lib`,__vendors__:`folder-lib`,__venv__:`folder-environment`,__vercel__:`folder-vercel`,__verdaccio__:`folder-verdaccio`,__vid__:`folder-video`,__video__:`folder-video`,__videos__:`folder-video`,__vids__:`folder-video`,__view__:`folder-views`,__views__:`folder-views`,__vm__:`folder-vm`,__vms__:`folder-vm`,__voice__:`folder-audio`,__voices__:`folder-audio`,"__vscode-test__":`folder-vscode`,__vscode__:`folder-vscode`,__vue__:`folder-vue`,__vuepress__:`folder-vuepress`,__wakatime__:`folder-wakatime`,__web__:`folder-public`,__webpack__:`folder-webpack`,__website__:`folder-public`,__websites__:`folder-public`,__widget__:`folder-components`,__widgets__:`folder-components`,__wiki__:`folder-docs`,__win10__:`folder-windows`,__win11__:`folder-windows`,__win32__:`folder-windows`,__win__:`folder-windows`,__windows10__:`folder-windows`,__windows11__:`folder-windows`,__windows__:`folder-windows`,__windowsnt__:`folder-windows`,__windowsxp__:`folder-windows`,__winnt__:`folder-windows`,__winxp__:`folder-windows`,"__wordpress-org__":`folder-wordpress`,"__wp-content__":`folder-wordpress`,__wsl__:`folder-linux`,__www__:`folder-public`,__wwwroot__:`folder-public`,__xbox__:`folder-console`,__xtask__:`folder-scripts`,__yarn__:`folder-yarn`,__zeabur__:`folder-zeabur`,__zed__:`folder-zed`,_addin:`folder-plugin`,_addins:`folder-plugin`,_addon:`folder-plugin`,_addons:`folder-plugin`,_admin:`folder-admin`,_admins:`folder-admin`,_agent:`folder-robot`,_agents:`folder-robot`,_android:`folder-android`,_angular:`folder-angular`,_anim:`folder-animation`,_animated:`folder-animation`,_animation:`folder-animation`,_animations:`folder-animation`,_anims:`folder-animation`,_ansible:`folder-ansible`,_api:`folder-api`,_apis:`folder-api`,_apollo:`folder-apollo`,"_apollo-cache":`folder-apollo`,"_apollo-client":`folder-apollo`,"_apollo-config":`folder-apollo`,_app:`folder-app`,_apple:`folder-macos`,_application:`folder-app`,_applications:`folder-app`,_apps:`folder-app`,_appwrite:`folder-appwrite`,_arc:`folder-archive`,_archival:`folder-archive`,_archive:`folder-archive`,_archives:`folder-archive`,_arcs:`folder-archive`,_article:`folder-docs`,_articles:`folder-docs`,_asm:`folder-assembly`,_assembly:`folder-assembly`,_asset:`folder-resource`,_assets:`folder-resource`,_astro:`folder-astro`,_atom:`folder-atom`,_atoms:`folder-atom`,_attachment:`folder-attachment`,_attachments:`folder-attachment`,_aud:`folder-audio`,_audio:`folder-audio`,_audios:`folder-audio`,_auds:`folder-audio`,_aurelia_project:`folder-aurelia`,_auth:`folder-secure`,_authentication:`folder-secure`,_auto:`folder-generator`,_aws:`folder-aws`,_azure:`folder-aws`,"_azure-pipelines":`folder-azure-pipelines`,"_azure-pipelines-ci":`folder-azure-pipelines`,"_back-up":`folder-backup`,"_back-ups":`folder-backup`,_backend:`folder-server`,_backends:`folder-server`,_backup:`folder-backup`,_backups:`folder-backup`,_bak:`folder-backup`,_baks:`folder-backup`,_base:`folder-base`,_bases:`folder-base`,_batch:`folder-batch`,_batches:`folder-batch`,_batchs:`folder-batch`,_bench:`folder-benchmark`,_benches:`folder-benchmark`,_benchmark:`folder-benchmark`,_benchmarks:`folder-benchmark`,_bibliographies:`folder-bibliography`,_bibliography:`folder-bibliography`,_bicep:`folder-bicep`,_bin:`folder-dist`,_bkp:`folder-backup`,_bkps:`folder-backup`,_blender:`folder-blender`,"_blender-assets":`folder-blender`,"_blender-files":`folder-blender`,"_blender-models":`folder-blender`,"_blender-project":`folder-blender`,_bloc:`folder-bloc`,_blocs:`folder-bloc`,_blog:`folder-docs`,_book:`folder-bibliography`,_books:`folder-bibliography`,_bot:`folder-robot`,_bots:`folder-robot`,_bower_components:`folder-bower`,_browser:`folder-public`,_browsers:`folder-public`,_build:`folder-dist`,_buildkite:`folder-buildkite`,_builds:`folder-dist`,_built:`folder-dist`,_bull:`folder-queue`,_cache:`folder-temp`,_cached:`folder-temp`,_calc:`folder-functions`,_calcs:`folder-functions`,_calculation:`folder-functions`,_calculations:`folder-functions`,_cargo:`folder-rust`,_cart:`folder-cart`,_centos:`folder-linux`,_cert:`folder-secure`,_certificate:`folder-secure`,_certificates:`folder-secure`,_certs:`folder-secure`,_cfg:`folder-config`,_cfgs:`folder-config`,"_cfn-gen":`folder-generator`,_changes:`folder-delta`,_changeset:`folder-changesets`,_changesets:`folder-changesets`,_chat:`folder-messages`,_chats:`folder-messages`,_ci:`folder-ci`,_cipher:`folder-secure`,_circleci:`folder-circleci`,_cjs:`folder-javascript`,_class:`folder-class`,_classes:`folder-class`,_claude:`folder-claude`,_cli:`folder-command`,_client:`folder-client`,_clients:`folder-client`,_cline_docs:`folder-cline`,_clis:`folder-command`,"_cloud-firestore":`folder-firestore`,"_cloud-functions":`folder-cloud-functions`,_cloudflare:`folder-cloudflare`,_cloudfunctions:`folder-cloud-functions`,_cluster:`folder-cluster`,_clusters:`folder-cluster`,_cmd:`folder-command`,_cobol:`folder-cobol`,_code:`folder-src`,_color:`folder-theme`,_colors:`folder-theme`,_colour:`folder-theme`,_colours:`folder-theme`,_command:`folder-command`,_commandline:`folder-command`,_commands:`folder-command`,_common:`folder-shared`,_compiled:`folder-dist`,_components:`folder-components`,_composable:`folder-functions`,_composables:`folder-functions`,_concept:`folder-mock`,_concepts:`folder-mock`,_conf:`folder-config`,_config:`folder-config`,_configs:`folder-config`,_configuration:`folder-config`,_configurations:`folder-config`,_confs:`folder-config`,_connection:`folder-connection`,_connections:`folder-connection`,_console:`folder-console`,_const:`folder-constant`,_constant:`folder-constant`,_constants:`folder-constant`,_consts:`folder-constant`,_container:`folder-container`,_containers:`folder-container`,_content:`folder-content`,_contents:`folder-content`,_context:`folder-context`,_contexts:`folder-context`,_contract:`folder-contract`,"_contract-test":`folder-contract`,"_contract-testing":`folder-contract`,"_contract-tests":`folder-contract`,_contracts:`folder-contract`,_controller:`folder-controller`,_controllers:`folder-controller`,_controls:`folder-controller`,_conversation:`folder-messages`,_conversations:`folder-messages`,_core:`folder-core`,_coverage:`folder-coverage`,_crash:`folder-error`,_crashes:`folder-error`,_crates:`folder-lib`,_css:`folder-css`,_cts:`folder-typescript`,_cubit:`folder-bloc`,_cubits:`folder-bloc`,_cue:`folder-cue`,_cues:`folder-cue`,_cursor:`folder-cursor`,_custom:`folder-custom`,_customs:`folder-custom`,_cypher:`folder-secure`,_cypress:`folder-cypress`,_dal:`folder-dal`,_dart:`folder-dart`,_dart_tool:`folder-dart`,_dart_tools:`folder-dart`,_data:`folder-database`,"_data-access":`folder-dal`,"_data-access-layer":`folder-dal`,_database:`folder-database`,_databases:`folder-database`,_db:`folder-database`,_deb:`folder-linux`,_debian:`folder-linux`,_debug:`folder-debug`,_debugger:`folder-debug`,_debugging:`folder-debug`,_decorator:`folder-decorators`,_decorators:`folder-decorators`,_deepin:`folder-linux`,_delta:`folder-delta`,_deltas:`folder-delta`,_demo:`folder-examples`,_demos:`folder-examples`,_dependencies:`folder-packages`,_design:`folder-theme`,_designs:`folder-theme`,_desktop:`folder-desktop`,_devcontainer:`folder-container`,_devpackages:`folder-packages`,_devtools:`folder-tools`,_dialog:`folder-messages`,_dialogs:`folder-messages`,_diary:`folder-docs`,_directive:`folder-directive`,_directives:`folder-directive`,_display:`folder-desktop`,_dist:`folder-dist`,_distribution:`folder-dist`,_doc:`folder-docs`,_docker:`folder-docker`,_dockerfiles:`folder-docker`,_dockerhub:`folder-docker`,_docs:`folder-docs`,_document:`folder-docs`,_documentation:`folder-docs`,_documents:`folder-docs`,_download:`folder-download`,_downloader:`folder-download`,_downloaders:`folder-download`,_downloads:`folder-download`,_draft:`folder-mock`,_drafts:`folder-mock`,_drizzle:`folder-drizzle`,_ds_store:`folder-macos`,_dump:`folder-dump`,_dumps:`folder-dump`,_e2e:`folder-coverage`,_easing:`folder-animation`,_easings:`folder-animation`,_element:`folder-element`,_elements:`folder-element`,_email:`folder-mail`,_emails:`folder-mail`,_enum:`folder-enum`,_enums:`folder-enum`,_env:`folder-environment`,_environment:`folder-environment`,_environments:`folder-environment`,_envs:`folder-environment`,_err:`folder-error`,_error:`folder-error`,_errors:`folder-error`,_errs:`folder-error`,_eslint:`folder-eslint`,"_eslint-config":`folder-eslint`,"_eslint-configs":`folder-eslint`,"_eslint-plugin":`folder-eslint`,"_eslint-plugins":`folder-eslint`,_etc:`folder-other`,_event:`folder-event`,_events:`folder-event`,_example:`folder-examples`,_examples:`folder-examples`,_expo:`folder-expo`,"_expo-shared":`folder-expo`,_export:`folder-export`,_exported:`folder-export`,_exports:`folder-export`,_extension:`folder-plugin`,_extensions:`folder-plugin`,_external:`folder-lib`,_externals:`folder-lib`,_extra:`folder-other`,_extras:`folder-other`,_fastlane:`folder-fastlane`,_favicon:`folder-favicon`,_favicons:`folder-favicon`,_feat:`folder-features`,_feats:`folder-features`,_feature:`folder-features`,_features:`folder-features`,_fig:`folder-images`,_figs:`folder-images`,_figure:`folder-images`,_figures:`folder-images`,_filter:`folder-filter`,_filters:`folder-filter`,_firebase:`folder-firebase`,"_firebase-cloud-functions":`folder-cloud-functions`,"_firebase-cloudfunctions":`folder-cloud-functions`,"_firebase-firestore":`folder-firestore`,_firestore:`folder-firestore`,_fixture:`folder-mock`,_fixtures:`folder-mock`,"_flow-typed":`folder-flow`,_flutter:`folder-flutter`,_font:`folder-font`,_fonts:`folder-font`,_forgejo:`folder-forgejo`,_form:`folder-form`,_forms:`folder-form`,_forum:`folder-messages`,_fragments:`folder-components`,_frontend:`folder-client`,_frontends:`folder-client`,_func:`folder-functions`,_funcs:`folder-functions`,_function:`folder-functions`,_functions:`folder-functions`,_game:`folder-console`,_gamemaker:`folder-gamemaker`,_gamemaker2:`folder-gamemaker`,_games:`folder-console`,_gcp:`folder-aws`,_gemini:`folder-gemini-ai`,"_gemini-ai":`folder-gemini-ai`,_geminiai:`folder-gemini-ai`,_gen:`folder-generator`,_generated:`folder-generator`,_generator:`folder-generator`,_generators:`folder-generator`,_gens:`folder-generator`,_git:`folder-git`,_gitea:`folder-gitea`,_githooks:`folder-git`,_github:`folder-github`,"_github/issue_template":`folder-template`,"_github/pull_request_template":`folder-template`,"_github/workflows":`folder-gh-workflows`,_gitlab:`folder-gitlab`,_global:`folder-global`,_glsl:`folder-shader`,_go:`folder-go`,_godot:`folder-godot`,"_godot-cpp":`folder-godot`,_golang:`folder-go`,_gql:`folder-graphql`,_gradle:`folder-gradle`,_graphql:`folder-graphql`,_guard:`folder-guard`,_guards:`folder-guard`,_gui:`folder-ui`,_gulp:`folder-gulp`,"_gulp-tasks":`folder-gulp`,"_gulpfile.babel.js":`folder-gulp`,"_gulpfile.js":`folder-gulp`,"_gulpfile.mjs":`folder-gulp`,"_gulpfile.ts":`folder-gulp`,_gulpfiles:`folder-gulp`,_handler:`folder-controller`,_handlers:`folder-controller`,_helm:`folder-helm`,_helmchart:`folder-helm`,_helmcharts:`folder-helm`,_helper:`folder-helper`,_helpers:`folder-helper`,_hg:`folder-mercurial`,_hgext:`folder-mercurial`,_hghooks:`folder-mercurial`,_histories:`folder-backup`,_history:`folder-backup`,_hlsl:`folder-shader`,_home:`folder-home`,_hook:`folder-hook`,_hooks:`folder-hook`,_html:`folder-views`,_husky:`folder-husky`,_i18n:`folder-i18n`,_ico:`folder-images`,_icon:`folder-images`,_icons:`folder-images`,_icos:`folder-images`,_idea:`folder-intellij`,_image:`folder-images`,_images:`folder-images`,_img:`folder-images`,_imgs:`folder-images`,_import:`folder-import`,_imported:`folder-import`,_imports:`folder-import`,_in:`folder-input`,_inc:`folder-include`,_inc64:`folder-include`,_include:`folder-include`,_includes:`folder-include`,_infra:`folder-server`,_infrastructure:`folder-server`,_input:`folder-input`,_inputs:`folder-input`,_integration:`folder-connection`,"_integration-test":`folder-coverage`,"_integration-tests":`folder-coverage`,_integrations:`folder-connection`,_interceptor:`folder-interceptor`,_interceptors:`folder-interceptor`,_interface:`folder-interface`,_interfaces:`folder-interface`,_internationalization:`folder-i18n`,_inventories:`folder-server`,_inventory:`folder-server`,_io:`folder-input`,_ios:`folder-ios`,_ipad:`folder-macos`,_iphone:`folder-macos`,_ipod:`folder-macos`,_ipynb:`folder-jupyter`,_it:`folder-coverage`,_j2:`folder-jinja`,_java:`folder-java`,_javascript:`folder-javascript`,_javascripts:`folder-javascript`,_jinja:`folder-jinja`,_jinja2:`folder-jinja`,_job:`folder-job`,_jobs:`folder-job`,_js:`folder-javascript`,_json:`folder-json`,_jsonc:`folder-json`,_jsonl:`folder-json`,_jsons:`folder-json`,_jupyter:`folder-jupyter`,_jwt:`folder-keys`,_k8s:`folder-kubernetes`,_key:`folder-keys`,_keys:`folder-keys`,_kit:`folder-tools`,_kits:`folder-tools`,_knowledge:`folder-docs`,_kotlin:`folder-kotlin`,_kql:`folder-kusto`,_kubernetes:`folder-kubernetes`,_kusto:`folder-kusto`,_l10n:`folder-i18n`,_lambda:`folder-functions`,_lambdas:`folder-functions`,_landing:`folder-home`,_lang:`folder-i18n`,_langs:`folder-i18n`,_language:`folder-i18n`,_languages:`folder-i18n`,_layout:`folder-layout`,_layouts:`folder-layout`,_lefthook:`folder-lefthook`,"_lefthook-local":`folder-lefthook`,_less:`folder-less`,_lib:`folder-lib`,_lib64:`folder-lib`,_libraries:`folder-lib`,_library:`folder-lib`,_libs:`folder-lib`,_license:`folder-license`,_licenses:`folder-license`,_link:`folder-link`,_links:`folder-link`,_linux:`folder-linux`,_linuxbsd:`folder-linux`,_liquibase:`folder-liquibase`,_locale:`folder-i18n`,_locales:`folder-i18n`,_localization:`folder-i18n`,_log:`folder-log`,_logging:`folder-log`,_logic:`folder-functions`,_logs:`folder-log`,_lottie:`folder-lottie`,_lottiefiles:`folder-lottie`,_lotties:`folder-lottie`,_lua:`folder-lua`,_luau:`folder-luau`,_mac:`folder-macos`,_macbook:`folder-macos`,"_macbook-air":`folder-macos`,_macos:`folder-macos`,_macosx:`folder-macos`,_mail:`folder-mail`,_mailers:`folder-mail`,_mails:`folder-mail`,_main:`folder-home`,_manager:`folder-admin`,_managers:`folder-admin`,_mapping:`folder-mappings`,_mappings:`folder-mappings`,_markdown:`folder-markdown`,_math:`folder-functions`,_maths:`folder-functions`,_md:`folder-markdown`,_measure:`folder-benchmark`,_measurement:`folder-benchmark`,_measures:`folder-benchmark`,_media:`folder-video`,_messages:`folder-messages`,_messaging:`folder-messages`,_meta:`folder-meta`,"_meta-inf":`folder-config`,_metadata:`folder-meta`,_metro:`folder-metro`,_middleware:`folder-middleware`,_middlewares:`folder-middleware`,_migration:`folder-migrations`,_migrations:`folder-migrations`,_mint:`folder-linux`,_misc:`folder-other`,_miscellaneous:`folder-other`,_mjml:`folder-mjml`,_mjs:`folder-javascript`,_mobile:`folder-mobile`,_mobiles:`folder-mobile`,_mock:`folder-mock`,_mocks:`folder-mock`,_mod:`folder-plugin`,_modding:`folder-plugin`,_model:`folder-class`,_models:`folder-class`,_moderator:`folder-admin`,_moderators:`folder-admin`,_mods:`folder-plugin`,_module:`folder-plugin`,_modules:`folder-plugin`,_mojo:`folder-mojo`,_molecule:`folder-molecule`,_molecules:`folder-molecule`,_moon:`folder-moon`,_motion:`folder-animation`,_motions:`folder-animation`,_movie:`folder-video`,_movies:`folder-video`,_mq:`folder-queue`,_mts:`folder-typescript`,_music:`folder-audio`,_navigation:`folder-routes`,_navigations:`folder-routes`,_netlify:`folder-netlify`,_news:`folder-docs`,_next:`folder-next`,_nginx:`folder-nginx`,_node:`folder-node`,_node_modules:`folder-node`,_nodejs:`folder-node`,_note:`folder-docs`,_notebook:`folder-jupyter`,_notebooks:`folder-jupyter`,_notes:`folder-docs`,_now:`folder-vercel`,_nuxt:`folder-nuxt`,"_nyc-output":`folder-coverage`,_nyc_output:`folder-coverage`,_obsidian:`folder-obsidian`,_opencode:`folder-opencode`,_option:`folder-config`,_options:`folder-config`,_organism:`folder-organism`,_organisms:`folder-organism`,_osx:`folder-macos`,_other:`folder-other`,_others:`folder-other`,_out:`folder-dist`,_output:`folder-dist`,_outputs:`folder-dist`,_package:`folder-packages`,_packages:`folder-packages`,_pact:`folder-contract`,_pacts:`folder-contract`,_page:`folder-views`,_pages:`folder-views`,_palette:`folder-theme`,_palettes:`folder-theme`,_partial:`folder-include`,_partials:`folder-include`,_patches:`folder-git`,_pdf:`folder-pdf`,_pdfs:`folder-pdf`,"_pdm-build":`folder-pdm`,"_pdm-plugins":`folder-pdm`,_perf:`folder-benchmark`,_performance:`folder-benchmark`,_phone:`folder-mobile`,_phones:`folder-mobile`,_photo:`folder-images`,_photograph:`folder-images`,_photographs:`folder-images`,_photos:`folder-images`,_php:`folder-php`,_phpmailer:`folder-phpmailer`,_pic:`folder-images`,_pics:`folder-images`,_picture:`folder-images`,_pictures:`folder-images`,_pipe:`folder-pipe`,_pipeline:`folder-pipe`,_pipelines:`folder-pipe`,_pipes:`folder-pipe`,_pkg:`folder-packages`,_pkgs:`folder-packages`,_plastic:`folder-plastic`,_playground:`folder-sandbox`,_playgrounds:`folder-sandbox`,_playlist:`folder-audio`,_playlists:`folder-audio`,_plugin:`folder-plugin`,_plugins:`folder-plugin`,_policies:`folder-policy`,_policy:`folder-policy`,_popos:`folder-linux`,_portability:`folder-mobile`,_portable:`folder-mobile`,_post:`folder-docs`,_postman:`folder-postman`,_posts:`folder-docs`,_powershell:`folder-powershell`,_pref:`folder-config`,_preference:`folder-config`,_preferences:`folder-config`,_prefs:`folder-config`,_presentation:`folder-ui`,_preview:`folder-review`,_previews:`folder-review`,_prisma:`folder-prisma`,"_prisma/schema":`folder-prisma`,_private:`folder-private`,_profiling:`folder-benchmark`,_proj:`folder-project`,_project:`folder-project`,_projects:`folder-project`,_projs:`folder-project`,_prompt:`folder-prompts`,_prompts:`folder-prompts`,_properties:`folder-config`,_props:`folder-config`,_proto:`folder-proto`,_protobuf:`folder-proto`,_protobufs:`folder-proto`,_protos:`folder-proto`,_provider:`folder-controller`,_providers:`folder-controller`,_proxy:`folder-public`,_ps:`folder-powershell`,_ps1:`folder-powershell`,_ps4:`folder-console`,_ps5:`folder-console`,_public:`folder-public`,_public_html:`folder-views`,_pwa:`folder-client`,_pycache:`folder-python`,_pytest_cache:`folder-python`,_python:`folder-python`,_pytorch:`folder-pytorch`,_quasar:`folder-quasar`,_queue:`folder-queue`,_queues:`folder-queue`,_r:`folder-r`,_recordings:`folder-audio`,_release:`folder-dist`,_remote:`folder-connection`,_remotes:`folder-connection`,_repo:`folder-repository`,_report:`folder-resource`,_reports:`folder-resource`,_repos:`folder-repository`,_repositories:`folder-repository`,_repository:`folder-repository`,_res:`folder-resource`,_resolver:`folder-resolver`,_resolvers:`folder-resolver`,_resource:`folder-resource`,_resources:`folder-resource`,_restapi:`folder-api`,_review:`folder-review`,_reviewed:`folder-review`,_reviews:`folder-review`,_revisal:`folder-review`,_revisals:`folder-review`,_robot:`folder-robot`,_robots:`folder-robot`,_router:`folder-routes`,_routers:`folder-routes`,_routes:`folder-routes`,_routing:`folder-routes`,_rule:`folder-rules`,_rules:`folder-rules`,_rust:`folder-rust`,_salt:`folder-salt`,_saltstack:`folder-salt`,_sample:`folder-examples`,"_sample-data":`folder-examples`,_samples:`folder-examples`,_sandbox:`folder-sandbox`,_sandboxes:`folder-sandbox`,_sass:`folder-sass`,_scala:`folder-scala`,_schema:`folder-class`,_schemas:`folder-class`,_sconf_temp:`folder-scons`,_scons:`folder-scons`,_scons_cache:`folder-scons`,_screen:`folder-views`,_screengrab:`folder-images`,_screengrabs:`folder-images`,_screens:`folder-views`,_screenshot:`folder-images`,_screenshots:`folder-images`,_script:`folder-scripts`,_scripting:`folder-scripts`,_scripts:`folder-scripts`,_scss:`folder-sass`,_secret:`folder-keys`,_secrets:`folder-keys`,_secure:`folder-secure`,_security:`folder-secure`,_seed:`folder-seeders`,_seeders:`folder-seeders`,_seeding:`folder-seeders`,_seeds:`folder-seeders`,_server:`folder-server`,_serverless:`folder-serverless`,_serverpackages:`folder-packages`,_servers:`folder-server`,_service:`folder-controller`,_services:`folder-controller`,_setting:`folder-config`,_settings:`folder-config`,_shader:`folder-shader`,_shaders:`folder-shader`,_shared:`folder-shared`,_shop:`folder-cart`,_shopping:`folder-cart`,"_shopping-cart":`folder-cart`,_sim:`folder-simulations`,_sims:`folder-simulations`,_simulation:`folder-simulations`,_simulations:`folder-simulations`,_site:`folder-public`,_sketch:`folder-mock`,_sketches:`folder-mock`,_skill:`folder-skills`,_skills:`folder-skills`,_smtp:`folder-mail`,_snap:`folder-snapcraft`,_snapcraft:`folder-snapcraft`,_snapshots:`folder-test`,_snippet:`folder-snippet`,_snippets:`folder-snippet`,_song:`folder-audio`,_songs:`folder-audio`,_sound:`folder-audio`,_sounds:`folder-audio`,_source:`folder-src`,_sources:`folder-src`,_spa:`folder-client`,_spec:`folder-test`,_specs:`folder-test`,_spellcheck:`folder-syntax`,_spellcheckers:`folder-syntax`,_sql:`folder-database`,_src:`folder-src`,"_src-tauri":`folder-src-tauri`,_srcs:`folder-src`,_ssl:`folder-secure`,_stack:`folder-stack`,_stacks:`folder-stack`,_start:`folder-home`,_static:`folder-resource`,_stencil:`folder-stencil`,_store:`folder-store`,_stores:`folder-store`,_stories:`folder-storybook`,_storybook:`folder-storybook`,_style:`folder-css`,_styles:`folder-css`,_stylesheet:`folder-css`,_stylesheets:`folder-css`,_stylus:`folder-stylus`,_sublime:`folder-sublime`,_submodules:`folder-git`,_supabase:`folder-supabase`,_svelte:`folder-svelte`,"_svelte-kit":`folder-svelte`,_svg:`folder-svg`,_svgs:`folder-svg`,_switch:`folder-console`,_syntax:`folder-syntax`,_syntaxes:`folder-syntax`,"_table-of-contents":`folder-toc`,_target:`folder-target`,_taskfile:`folder-taskfile`,_taskfiles:`folder-taskfile`,_tasks:`folder-tasks`,_television:`folder-television`,_temp:`folder-temp`,_template:`folder-template`,_templates:`folder-template`,_terraform:`folder-terraform`,_test:`folder-test`,_testfiles:`folder-test`,_testing:`folder-test`,_tests:`folder-test`,_texture:`folder-images`,_textures:`folder-images`,_theme:`folder-theme`,_themes:`folder-theme`,"_third-party":`folder-lib`,_thirdparty:`folder-lib`,_tickets:`folder-tasks`,_tls:`folder-secure`,_tmp:`folder-temp`,_toc:`folder-toc`,_token:`folder-keys`,_tokens:`folder-keys`,_toolbox:`folder-tools`,_toolboxes:`folder-tools`,_tooling:`folder-tools`,_toolkit:`folder-tools`,_toolkits:`folder-tools`,_tools:`folder-tools`,_torch:`folder-pytorch`,_transition:`folder-animation`,_transitions:`folder-animation`,_translate:`folder-i18n`,_translation:`folder-i18n`,_translations:`folder-i18n`,_trash:`folder-trash`,_trigger:`folder-trigger`,_triggers:`folder-trigger`,_ts:`folder-typescript`,_turbo:`folder-turborepo`,_tv:`folder-television`,_tx:`folder-i18n`,_typeface:`folder-font`,_typefaces:`folder-font`,_types:`folder-typescript`,_typescript:`folder-typescript`,_typings:`folder-typescript`,_ubuntu:`folder-linux`,_ui:`folder-ui`,_unity:`folder-unity`,_unix:`folder-linux`,_update:`folder-update`,_updates:`folder-update`,_upgrade:`folder-update`,_upgrades:`folder-update`,_upload:`folder-upload`,_uploads:`folder-upload`,_util:`folder-utils`,_utilities:`folder-utils`,_utility:`folder-utils`,_utils:`folder-utils`,_ux:`folder-ui`,_validation:`folder-rules`,_validations:`folder-rules`,_validator:`folder-rules`,_validators:`folder-rules`,_vector:`folder-svg`,_vectors:`folder-svg`,_vendor:`folder-lib`,_vendors:`folder-lib`,_venv:`folder-environment`,_vercel:`folder-vercel`,_verdaccio:`folder-verdaccio`,_vid:`folder-video`,_video:`folder-video`,_videos:`folder-video`,_vids:`folder-video`,_view:`folder-views`,_views:`folder-views`,_vm:`folder-vm`,_vms:`folder-vm`,_voice:`folder-audio`,_voices:`folder-audio`,_vscode:`folder-vscode`,"_vscode-test":`folder-vscode`,_vue:`folder-vue`,_vuepress:`folder-vuepress`,_wakatime:`folder-wakatime`,_web:`folder-public`,_webpack:`folder-webpack`,_website:`folder-public`,_websites:`folder-public`,_widget:`folder-components`,_widgets:`folder-components`,_wiki:`folder-docs`,_win:`folder-windows`,_win10:`folder-windows`,_win11:`folder-windows`,_win32:`folder-windows`,_windows:`folder-windows`,_windows10:`folder-windows`,_windows11:`folder-windows`,_windowsnt:`folder-windows`,_windowsxp:`folder-windows`,_winnt:`folder-windows`,_winxp:`folder-windows`,"_wordpress-org":`folder-wordpress`,"_wp-content":`folder-wordpress`,_wsl:`folder-linux`,_www:`folder-public`,_wwwroot:`folder-public`,_xbox:`folder-console`,_xtask:`folder-scripts`,_yarn:`folder-yarn`,_zeabur:`folder-zeabur`,_zed:`folder-zed`,addin:`folder-plugin`,addins:`folder-plugin`,addon:`folder-plugin`,addons:`folder-plugin`,admin:`folder-admin`,admins:`folder-admin`,agent:`folder-robot`,agents:`folder-robot`,android:`folder-android`,angular:`folder-angular`,anim:`folder-animation`,animated:`folder-animation`,animation:`folder-animation`,animations:`folder-animation`,anims:`folder-animation`,ansible:`folder-ansible`,api:`folder-api`,apis:`folder-api`,apollo:`folder-apollo`,"apollo-cache":`folder-apollo`,"apollo-client":`folder-apollo`,"apollo-config":`folder-apollo`,app:`folder-app`,apple:`folder-macos`,application:`folder-app`,applications:`folder-app`,apps:`folder-app`,appwrite:`folder-appwrite`,arc:`folder-archive`,archival:`folder-archive`,archive:`folder-archive`,archives:`folder-archive`,arcs:`folder-archive`,article:`folder-docs`,articles:`folder-docs`,asm:`folder-assembly`,assembly:`folder-assembly`,asset:`folder-resource`,assets:`folder-resource`,astro:`folder-astro`,atom:`folder-atom`,atoms:`folder-atom`,attachment:`folder-attachment`,attachments:`folder-attachment`,aud:`folder-audio`,audio:`folder-audio`,audios:`folder-audio`,auds:`folder-audio`,aurelia_project:`folder-aurelia`,auth:`folder-secure`,authentication:`folder-secure`,auto:`folder-generator`,aws:`folder-aws`,azure:`folder-aws`,"azure-pipelines":`folder-azure-pipelines`,"azure-pipelines-ci":`folder-azure-pipelines`,"back-up":`folder-backup`,"back-ups":`folder-backup`,backend:`folder-server`,backends:`folder-server`,backup:`folder-backup`,backups:`folder-backup`,bak:`folder-backup`,baks:`folder-backup`,base:`folder-base`,bases:`folder-base`,batch:`folder-batch`,batches:`folder-batch`,batchs:`folder-batch`,bench:`folder-benchmark`,benches:`folder-benchmark`,benchmark:`folder-benchmark`,benchmarks:`folder-benchmark`,bibliographies:`folder-bibliography`,bibliography:`folder-bibliography`,bicep:`folder-bicep`,bin:`folder-dist`,bkp:`folder-backup`,bkps:`folder-backup`,blender:`folder-blender`,"blender-assets":`folder-blender`,"blender-files":`folder-blender`,"blender-models":`folder-blender`,"blender-project":`folder-blender`,bloc:`folder-bloc`,blocs:`folder-bloc`,blog:`folder-docs`,book:`folder-bibliography`,books:`folder-bibliography`,bot:`folder-robot`,bots:`folder-robot`,bower_components:`folder-bower`,browser:`folder-public`,browsers:`folder-public`,build:`folder-dist`,buildkite:`folder-buildkite`,builds:`folder-dist`,built:`folder-dist`,bull:`folder-queue`,cache:`folder-temp`,cached:`folder-temp`,calc:`folder-functions`,calcs:`folder-functions`,calculation:`folder-functions`,calculations:`folder-functions`,cargo:`folder-rust`,cart:`folder-cart`,centos:`folder-linux`,cert:`folder-secure`,certificate:`folder-secure`,certificates:`folder-secure`,certs:`folder-secure`,cfg:`folder-config`,cfgs:`folder-config`,"cfn-gen":`folder-generator`,changes:`folder-delta`,changeset:`folder-changesets`,changesets:`folder-changesets`,chat:`folder-messages`,chats:`folder-messages`,ci:`folder-ci`,cipher:`folder-secure`,circleci:`folder-circleci`,cjs:`folder-javascript`,class:`folder-class`,classes:`folder-class`,claude:`folder-claude`,cli:`folder-command`,client:`folder-client`,clients:`folder-client`,cline_docs:`folder-cline`,clis:`folder-command`,"cloud-firestore":`folder-firestore`,"cloud-functions":`folder-cloud-functions`,cloudflare:`folder-cloudflare`,cloudfunctions:`folder-cloud-functions`,cluster:`folder-cluster`,clusters:`folder-cluster`,cmd:`folder-command`,cobol:`folder-cobol`,code:`folder-src`,color:`folder-theme`,colors:`folder-theme`,colour:`folder-theme`,colours:`folder-theme`,command:`folder-command`,commandline:`folder-command`,commands:`folder-command`,common:`folder-shared`,compiled:`folder-dist`,components:`folder-components`,composable:`folder-functions`,composables:`folder-functions`,concept:`folder-mock`,concepts:`folder-mock`,conf:`folder-config`,config:`folder-config`,configs:`folder-config`,configuration:`folder-config`,configurations:`folder-config`,confs:`folder-config`,connection:`folder-connection`,connections:`folder-connection`,console:`folder-console`,const:`folder-constant`,constant:`folder-constant`,constants:`folder-constant`,consts:`folder-constant`,container:`folder-container`,containers:`folder-container`,content:`folder-content`,contents:`folder-content`,context:`folder-context`,contexts:`folder-context`,contract:`folder-contract`,"contract-test":`folder-contract`,"contract-testing":`folder-contract`,"contract-tests":`folder-contract`,contracts:`folder-contract`,controller:`folder-controller`,controllers:`folder-controller`,controls:`folder-controller`,conversation:`folder-messages`,conversations:`folder-messages`,core:`folder-core`,coverage:`folder-coverage`,crash:`folder-error`,crashes:`folder-error`,crates:`folder-lib`,css:`folder-css`,cts:`folder-typescript`,cubit:`folder-bloc`,cubits:`folder-bloc`,cue:`folder-cue`,cues:`folder-cue`,cursor:`folder-cursor`,custom:`folder-custom`,customs:`folder-custom`,cypher:`folder-secure`,cypress:`folder-cypress`,dal:`folder-dal`,dart:`folder-dart`,dart_tool:`folder-dart`,dart_tools:`folder-dart`,data:`folder-database`,"data-access":`folder-dal`,"data-access-layer":`folder-dal`,database:`folder-database`,databases:`folder-database`,db:`folder-database`,deb:`folder-linux`,debian:`folder-linux`,debug:`folder-debug`,debugger:`folder-debug`,debugging:`folder-debug`,decorator:`folder-decorators`,decorators:`folder-decorators`,deepin:`folder-linux`,delta:`folder-delta`,deltas:`folder-delta`,demo:`folder-examples`,demos:`folder-examples`,dependencies:`folder-packages`,design:`folder-theme`,designs:`folder-theme`,desktop:`folder-desktop`,devcontainer:`folder-container`,devpackages:`folder-packages`,devtools:`folder-tools`,dialog:`folder-messages`,dialogs:`folder-messages`,diary:`folder-docs`,directive:`folder-directive`,directives:`folder-directive`,display:`folder-desktop`,dist:`folder-dist`,distribution:`folder-dist`,doc:`folder-docs`,docker:`folder-docker`,dockerfiles:`folder-docker`,dockerhub:`folder-docker`,docs:`folder-docs`,document:`folder-docs`,documentation:`folder-docs`,documents:`folder-docs`,download:`folder-download`,downloader:`folder-download`,downloaders:`folder-download`,downloads:`folder-download`,draft:`folder-mock`,drafts:`folder-mock`,drizzle:`folder-drizzle`,ds_store:`folder-macos`,dump:`folder-dump`,dumps:`folder-dump`,e2e:`folder-coverage`,easing:`folder-animation`,easings:`folder-animation`,element:`folder-element`,elements:`folder-element`,email:`folder-mail`,emails:`folder-mail`,enum:`folder-enum`,enums:`folder-enum`,env:`folder-environment`,environment:`folder-environment`,environments:`folder-environment`,envs:`folder-environment`,err:`folder-error`,error:`folder-error`,errors:`folder-error`,errs:`folder-error`,eslint:`folder-eslint`,"eslint-config":`folder-eslint`,"eslint-configs":`folder-eslint`,"eslint-plugin":`folder-eslint`,"eslint-plugins":`folder-eslint`,etc:`folder-other`,event:`folder-event`,events:`folder-event`,example:`folder-examples`,examples:`folder-examples`,expo:`folder-expo`,"expo-shared":`folder-expo`,export:`folder-export`,exported:`folder-export`,exports:`folder-export`,extension:`folder-plugin`,extensions:`folder-plugin`,external:`folder-lib`,externals:`folder-lib`,extra:`folder-other`,extras:`folder-other`,fastlane:`folder-fastlane`,favicon:`folder-favicon`,favicons:`folder-favicon`,feat:`folder-features`,feats:`folder-features`,feature:`folder-features`,features:`folder-features`,fig:`folder-images`,figs:`folder-images`,figure:`folder-images`,figures:`folder-images`,filter:`folder-filter`,filters:`folder-filter`,firebase:`folder-firebase`,"firebase-cloud-functions":`folder-cloud-functions`,"firebase-cloudfunctions":`folder-cloud-functions`,"firebase-firestore":`folder-firestore`,firestore:`folder-firestore`,fixture:`folder-mock`,fixtures:`folder-mock`,"flow-typed":`folder-flow`,flutter:`folder-flutter`,font:`folder-font`,fonts:`folder-font`,forgejo:`folder-forgejo`,form:`folder-form`,forms:`folder-form`,forum:`folder-messages`,fragments:`folder-components`,frontend:`folder-client`,frontends:`folder-client`,func:`folder-functions`,funcs:`folder-functions`,function:`folder-functions`,functions:`folder-functions`,game:`folder-console`,gamemaker:`folder-gamemaker`,gamemaker2:`folder-gamemaker`,games:`folder-console`,gcp:`folder-aws`,gemini:`folder-gemini-ai`,"gemini-ai":`folder-gemini-ai`,geminiai:`folder-gemini-ai`,gen:`folder-generator`,generated:`folder-generator`,generator:`folder-generator`,generators:`folder-generator`,gens:`folder-generator`,git:`folder-git`,gitea:`folder-gitea`,githooks:`folder-git`,github:`folder-github`,"github/issue_template":`folder-template`,"github/pull_request_template":`folder-template`,"github/workflows":`folder-gh-workflows`,gitlab:`folder-gitlab`,global:`folder-global`,glsl:`folder-shader`,go:`folder-go`,godot:`folder-godot`,"godot-cpp":`folder-godot`,golang:`folder-go`,gql:`folder-graphql`,gradle:`folder-gradle`,graphql:`folder-graphql`,guard:`folder-guard`,guards:`folder-guard`,gui:`folder-ui`,gulp:`folder-gulp`,"gulp-tasks":`folder-gulp`,"gulpfile.babel.js":`folder-gulp`,"gulpfile.js":`folder-gulp`,"gulpfile.mjs":`folder-gulp`,"gulpfile.ts":`folder-gulp`,gulpfiles:`folder-gulp`,handler:`folder-controller`,handlers:`folder-controller`,helm:`folder-helm`,helmchart:`folder-helm`,helmcharts:`folder-helm`,helper:`folder-helper`,helpers:`folder-helper`,hg:`folder-mercurial`,hgext:`folder-mercurial`,hghooks:`folder-mercurial`,histories:`folder-backup`,history:`folder-backup`,hlsl:`folder-shader`,home:`folder-home`,hook:`folder-hook`,hooks:`folder-hook`,html:`folder-views`,husky:`folder-husky`,i18n:`folder-i18n`,ico:`folder-images`,icon:`folder-images`,icons:`folder-images`,icos:`folder-images`,idea:`folder-intellij`,image:`folder-images`,images:`folder-images`,img:`folder-images`,imgs:`folder-images`,import:`folder-import`,imported:`folder-import`,imports:`folder-import`,in:`folder-input`,inc:`folder-include`,inc64:`folder-include`,include:`folder-include`,includes:`folder-include`,infra:`folder-server`,infrastructure:`folder-server`,input:`folder-input`,inputs:`folder-input`,integration:`folder-connection`,"integration-test":`folder-coverage`,"integration-tests":`folder-coverage`,integrations:`folder-connection`,interceptor:`folder-interceptor`,interceptors:`folder-interceptor`,interface:`folder-interface`,interfaces:`folder-interface`,internationalization:`folder-i18n`,inventories:`folder-server`,inventory:`folder-server`,io:`folder-input`,ios:`folder-ios`,ipad:`folder-macos`,iphone:`folder-macos`,ipod:`folder-macos`,ipynb:`folder-jupyter`,it:`folder-coverage`,j2:`folder-jinja`,java:`folder-java`,javascript:`folder-javascript`,javascripts:`folder-javascript`,jinja:`folder-jinja`,jinja2:`folder-jinja`,job:`folder-job`,jobs:`folder-job`,js:`folder-javascript`,json:`folder-json`,jsonc:`folder-json`,jsonl:`folder-json`,jsons:`folder-json`,jupyter:`folder-jupyter`,jwt:`folder-keys`,k8s:`folder-kubernetes`,key:`folder-keys`,keys:`folder-keys`,kit:`folder-tools`,kits:`folder-tools`,knowledge:`folder-docs`,kotlin:`folder-kotlin`,kql:`folder-kusto`,kubernetes:`folder-kubernetes`,kusto:`folder-kusto`,l10n:`folder-i18n`,lambda:`folder-functions`,lambdas:`folder-functions`,landing:`folder-home`,lang:`folder-i18n`,langs:`folder-i18n`,language:`folder-i18n`,languages:`folder-i18n`,layout:`folder-layout`,layouts:`folder-layout`,lefthook:`folder-lefthook`,"lefthook-local":`folder-lefthook`,less:`folder-less`,lib:`folder-lib`,lib64:`folder-lib`,libraries:`folder-lib`,library:`folder-lib`,libs:`folder-lib`,license:`folder-license`,licenses:`folder-license`,link:`folder-link`,links:`folder-link`,linux:`folder-linux`,linuxbsd:`folder-linux`,liquibase:`folder-liquibase`,locale:`folder-i18n`,locales:`folder-i18n`,localization:`folder-i18n`,log:`folder-log`,logging:`folder-log`,logic:`folder-functions`,logs:`folder-log`,lottie:`folder-lottie`,lottiefiles:`folder-lottie`,lotties:`folder-lottie`,lua:`folder-lua`,luau:`folder-luau`,mac:`folder-macos`,macbook:`folder-macos`,"macbook-air":`folder-macos`,macos:`folder-macos`,macosx:`folder-macos`,mail:`folder-mail`,mailers:`folder-mail`,mails:`folder-mail`,main:`folder-home`,manager:`folder-admin`,managers:`folder-admin`,mapping:`folder-mappings`,mappings:`folder-mappings`,markdown:`folder-markdown`,math:`folder-functions`,maths:`folder-functions`,md:`folder-markdown`,measure:`folder-benchmark`,measurement:`folder-benchmark`,measures:`folder-benchmark`,media:`folder-video`,messages:`folder-messages`,messaging:`folder-messages`,meta:`folder-meta`,"meta-inf":`folder-config`,metadata:`folder-meta`,metro:`folder-metro`,middleware:`folder-middleware`,middlewares:`folder-middleware`,migration:`folder-migrations`,migrations:`folder-migrations`,mint:`folder-linux`,misc:`folder-other`,miscellaneous:`folder-other`,mjml:`folder-mjml`,mjs:`folder-javascript`,mobile:`folder-mobile`,mobiles:`folder-mobile`,mock:`folder-mock`,mocks:`folder-mock`,mod:`folder-plugin`,modding:`folder-plugin`,model:`folder-class`,models:`folder-class`,moderator:`folder-admin`,moderators:`folder-admin`,mods:`folder-plugin`,module:`folder-plugin`,modules:`folder-plugin`,mojo:`folder-mojo`,molecule:`folder-molecule`,molecules:`folder-molecule`,moon:`folder-moon`,motion:`folder-animation`,motions:`folder-animation`,movie:`folder-video`,movies:`folder-video`,mq:`folder-queue`,mts:`folder-typescript`,music:`folder-audio`,navigation:`folder-routes`,navigations:`folder-routes`,netlify:`folder-netlify`,news:`folder-docs`,next:`folder-next`,nginx:`folder-nginx`,node:`folder-node`,node_modules:`folder-node`,nodejs:`folder-node`,note:`folder-docs`,notebook:`folder-jupyter`,notebooks:`folder-jupyter`,notes:`folder-docs`,now:`folder-vercel`,nuxt:`folder-nuxt`,"nyc-output":`folder-coverage`,nyc_output:`folder-coverage`,obsidian:`folder-obsidian`,opencode:`folder-opencode`,option:`folder-config`,options:`folder-config`,organism:`folder-organism`,organisms:`folder-organism`,osx:`folder-macos`,other:`folder-other`,others:`folder-other`,out:`folder-dist`,output:`folder-dist`,outputs:`folder-dist`,package:`folder-packages`,packages:`folder-packages`,pact:`folder-contract`,pacts:`folder-contract`,page:`folder-views`,pages:`folder-views`,palette:`folder-theme`,palettes:`folder-theme`,partial:`folder-include`,partials:`folder-include`,patches:`folder-git`,pdf:`folder-pdf`,pdfs:`folder-pdf`,"pdm-build":`folder-pdm`,"pdm-plugins":`folder-pdm`,perf:`folder-benchmark`,performance:`folder-benchmark`,phone:`folder-mobile`,phones:`folder-mobile`,photo:`folder-images`,photograph:`folder-images`,photographs:`folder-images`,photos:`folder-images`,php:`folder-php`,phpmailer:`folder-phpmailer`,pic:`folder-images`,pics:`folder-images`,picture:`folder-images`,pictures:`folder-images`,pipe:`folder-pipe`,pipeline:`folder-pipe`,pipelines:`folder-pipe`,pipes:`folder-pipe`,pkg:`folder-packages`,pkgs:`folder-packages`,plastic:`folder-plastic`,playground:`folder-sandbox`,playgrounds:`folder-sandbox`,playlist:`folder-audio`,playlists:`folder-audio`,plugin:`folder-plugin`,plugins:`folder-plugin`,policies:`folder-policy`,policy:`folder-policy`,popos:`folder-linux`,portability:`folder-mobile`,portable:`folder-mobile`,post:`folder-docs`,postman:`folder-postman`,posts:`folder-docs`,powershell:`folder-powershell`,pref:`folder-config`,preference:`folder-config`,preferences:`folder-config`,prefs:`folder-config`,presentation:`folder-ui`,preview:`folder-review`,previews:`folder-review`,prisma:`folder-prisma`,"prisma/schema":`folder-prisma`,private:`folder-private`,profiling:`folder-benchmark`,proj:`folder-project`,project:`folder-project`,projects:`folder-project`,projs:`folder-project`,prompt:`folder-prompts`,prompts:`folder-prompts`,properties:`folder-config`,props:`folder-config`,proto:`folder-proto`,protobuf:`folder-proto`,protobufs:`folder-proto`,protos:`folder-proto`,provider:`folder-controller`,providers:`folder-controller`,proxy:`folder-public`,ps:`folder-powershell`,ps1:`folder-powershell`,ps4:`folder-console`,ps5:`folder-console`,public:`folder-public`,public_html:`folder-views`,pwa:`folder-client`,pycache:`folder-python`,pytest_cache:`folder-python`,python:`folder-python`,pytorch:`folder-pytorch`,quasar:`folder-quasar`,queue:`folder-queue`,queues:`folder-queue`,r:`folder-r`,recordings:`folder-audio`,release:`folder-dist`,remote:`folder-connection`,remotes:`folder-connection`,repo:`folder-repository`,report:`folder-resource`,reports:`folder-resource`,repos:`folder-repository`,repositories:`folder-repository`,repository:`folder-repository`,res:`folder-resource`,resolver:`folder-resolver`,resolvers:`folder-resolver`,resource:`folder-resource`,resources:`folder-resource`,restapi:`folder-api`,review:`folder-review`,reviewed:`folder-review`,reviews:`folder-review`,revisal:`folder-review`,revisals:`folder-review`,robot:`folder-robot`,robots:`folder-robot`,router:`folder-routes`,routers:`folder-routes`,routes:`folder-routes`,routing:`folder-routes`,rule:`folder-rules`,rules:`folder-rules`,rust:`folder-rust`,salt:`folder-salt`,saltstack:`folder-salt`,sample:`folder-examples`,"sample-data":`folder-examples`,samples:`folder-examples`,sandbox:`folder-sandbox`,sandboxes:`folder-sandbox`,sass:`folder-sass`,scala:`folder-scala`,schema:`folder-class`,schemas:`folder-class`,sconf_temp:`folder-scons`,scons:`folder-scons`,scons_cache:`folder-scons`,screen:`folder-views`,screengrab:`folder-images`,screengrabs:`folder-images`,screens:`folder-views`,screenshot:`folder-images`,screenshots:`folder-images`,script:`folder-scripts`,scripting:`folder-scripts`,scripts:`folder-scripts`,scss:`folder-sass`,secret:`folder-keys`,secrets:`folder-keys`,secure:`folder-secure`,security:`folder-secure`,seed:`folder-seeders`,seeders:`folder-seeders`,seeding:`folder-seeders`,seeds:`folder-seeders`,server:`folder-server`,serverless:`folder-serverless`,serverpackages:`folder-packages`,servers:`folder-server`,service:`folder-controller`,services:`folder-controller`,setting:`folder-config`,settings:`folder-config`,shader:`folder-shader`,shaders:`folder-shader`,shared:`folder-shared`,shop:`folder-cart`,shopping:`folder-cart`,"shopping-cart":`folder-cart`,sim:`folder-simulations`,sims:`folder-simulations`,simulation:`folder-simulations`,simulations:`folder-simulations`,site:`folder-public`,sketch:`folder-mock`,sketches:`folder-mock`,skill:`folder-skills`,skills:`folder-skills`,smtp:`folder-mail`,snap:`folder-snapcraft`,snapcraft:`folder-snapcraft`,snapshots:`folder-test`,snippet:`folder-snippet`,snippets:`folder-snippet`,song:`folder-audio`,songs:`folder-audio`,sound:`folder-audio`,sounds:`folder-audio`,source:`folder-src`,sources:`folder-src`,spa:`folder-client`,spec:`folder-test`,specs:`folder-test`,spellcheck:`folder-syntax`,spellcheckers:`folder-syntax`,sql:`folder-database`,src:`folder-src`,"src-tauri":`folder-src-tauri`,srcs:`folder-src`,ssl:`folder-secure`,stack:`folder-stack`,stacks:`folder-stack`,start:`folder-home`,static:`folder-resource`,stencil:`folder-stencil`,store:`folder-store`,stores:`folder-store`,stories:`folder-storybook`,storybook:`folder-storybook`,style:`folder-css`,styles:`folder-css`,stylesheet:`folder-css`,stylesheets:`folder-css`,stylus:`folder-stylus`,sublime:`folder-sublime`,submodules:`folder-git`,supabase:`folder-supabase`,svelte:`folder-svelte`,"svelte-kit":`folder-svelte`,svg:`folder-svg`,svgs:`folder-svg`,switch:`folder-console`,syntax:`folder-syntax`,syntaxes:`folder-syntax`,"table-of-contents":`folder-toc`,target:`folder-target`,taskfile:`folder-taskfile`,taskfiles:`folder-taskfile`,tasks:`folder-tasks`,television:`folder-television`,temp:`folder-temp`,template:`folder-template`,templates:`folder-template`,terraform:`folder-terraform`,test:`folder-test`,testfiles:`folder-test`,testing:`folder-test`,tests:`folder-test`,texture:`folder-images`,textures:`folder-images`,theme:`folder-theme`,themes:`folder-theme`,"third-party":`folder-lib`,thirdparty:`folder-lib`,tickets:`folder-tasks`,tls:`folder-secure`,tmp:`folder-temp`,toc:`folder-toc`,token:`folder-keys`,tokens:`folder-keys`,toolbox:`folder-tools`,toolboxes:`folder-tools`,tooling:`folder-tools`,toolkit:`folder-tools`,toolkits:`folder-tools`,tools:`folder-tools`,torch:`folder-pytorch`,transition:`folder-animation`,transitions:`folder-animation`,translate:`folder-i18n`,translation:`folder-i18n`,translations:`folder-i18n`,trash:`folder-trash`,trigger:`folder-trigger`,triggers:`folder-trigger`,ts:`folder-typescript`,turbo:`folder-turborepo`,tv:`folder-television`,tx:`folder-i18n`,typeface:`folder-font`,typefaces:`folder-font`,types:`folder-typescript`,typescript:`folder-typescript`,typings:`folder-typescript`,ubuntu:`folder-linux`,ui:`folder-ui`,unity:`folder-unity`,unix:`folder-linux`,update:`folder-update`,updates:`folder-update`,upgrade:`folder-update`,upgrades:`folder-update`,upload:`folder-upload`,uploads:`folder-upload`,util:`folder-utils`,utilities:`folder-utils`,utility:`folder-utils`,utils:`folder-utils`,ux:`folder-ui`,validation:`folder-rules`,validations:`folder-rules`,validator:`folder-rules`,validators:`folder-rules`,vector:`folder-svg`,vectors:`folder-svg`,vendor:`folder-lib`,vendors:`folder-lib`,venv:`folder-environment`,vercel:`folder-vercel`,verdaccio:`folder-verdaccio`,vid:`folder-video`,video:`folder-video`,videos:`folder-video`,vids:`folder-video`,view:`folder-views`,views:`folder-views`,vm:`folder-vm`,vms:`folder-vm`,voice:`folder-audio`,voices:`folder-audio`,vscode:`folder-vscode`,"vscode-test":`folder-vscode`,vue:`folder-vue`,vuepress:`folder-vuepress`,wakatime:`folder-wakatime`,web:`folder-public`,webpack:`folder-webpack`,website:`folder-public`,websites:`folder-public`,widget:`folder-components`,widgets:`folder-components`,wiki:`folder-docs`,win:`folder-windows`,win10:`folder-windows`,win11:`folder-windows`,win32:`folder-windows`,windows:`folder-windows`,windows10:`folder-windows`,windows11:`folder-windows`,windowsnt:`folder-windows`,windowsxp:`folder-windows`,winnt:`folder-windows`,winxp:`folder-windows`,"wordpress-org":`folder-wordpress`,"wp-content":`folder-wordpress`,wsl:`folder-linux`,www:`folder-public`,wwwroot:`folder-public`,xbox:`folder-console`,xtask:`folder-scripts`,yarn:`folder-yarn`,zeabur:`folder-zeabur`,zed:`folder-zed`},ja={".autorc":`auto_light`,".browserslistrc":`browserlist_light`,".bun-version":`bun_light`,".codeclimate.yml":`code-climate_light`,".config/releaserc":`semantic-release_light`,".config/releaserc.cjs":`semantic-release_light`,".config/releaserc.cts":`semantic-release_light`,".config/releaserc.js":`semantic-release_light`,".config/releaserc.json":`semantic-release_light`,".config/releaserc.json5":`semantic-release_light`,".config/releaserc.jsonc":`semantic-release_light`,".config/releaserc.mjs":`semantic-release_light`,".config/releaserc.mts":`semantic-release_light`,".config/releaserc.toml":`semantic-release_light`,".config/releaserc.ts":`semantic-release_light`,".config/releaserc.yaml":`semantic-release_light`,".config/releaserc.yml":`semantic-release_light`,".config/stylelintrc":`stylelint_light`,".config/stylelintrc.cjs":`stylelint_light`,".config/stylelintrc.cts":`stylelint_light`,".config/stylelintrc.js":`stylelint_light`,".config/stylelintrc.json":`stylelint_light`,".config/stylelintrc.json5":`stylelint_light`,".config/stylelintrc.jsonc":`stylelint_light`,".config/stylelintrc.mjs":`stylelint_light`,".config/stylelintrc.mts":`stylelint_light`,".config/stylelintrc.toml":`stylelint_light`,".config/stylelintrc.ts":`stylelint_light`,".config/stylelintrc.yaml":`stylelint_light`,".config/stylelintrc.yml":`stylelint_light`,".copilotignore":`copilot_light`,".cursor":`cursor_light`,".cursor.json":`cursor_light`,".cursorignore":`cursor_light`,".cursorindexingignore":`cursor_light`,".cursorrc":`cursor_light`,".cursorrules":`cursor_light`,".drone.yml":`drone_light`,".easignore":`expo_light`,".nano-staged.cjs":`nano-staged_light`,".nano-staged.js":`nano-staged_light`,".nano-staged.json":`nano-staged_light`,".nano-staged.mjs":`nano-staged_light`,".nanostagedrc":`nano-staged_light`,".nowignore":`vercel_light`,".pnpmfile.cjs":`pnpm_light`,".releaserc":`semantic-release_light`,".releaserc.cjs":`semantic-release_light`,".releaserc.cts":`semantic-release_light`,".releaserc.js":`semantic-release_light`,".releaserc.json":`semantic-release_light`,".releaserc.json5":`semantic-release_light`,".releaserc.jsonc":`semantic-release_light`,".releaserc.mjs":`semantic-release_light`,".releaserc.mts":`semantic-release_light`,".releaserc.toml":`semantic-release_light`,".releaserc.ts":`semantic-release_light`,".releaserc.yaml":`semantic-release_light`,".releaserc.yml":`semantic-release_light`,".rubocop-todo.yml":`rubocop_light`,".rubocop.yml":`rubocop_light`,".rubocop_todo.yml":`rubocop_light`,".shellcheckrc":`shellcheck_light`,".stylelintcache":`stylelint_light`,".stylelintignore":`stylelint_light`,".stylelintrc":`stylelint_light`,".stylelintrc.cjs":`stylelint_light`,".stylelintrc.cts":`stylelint_light`,".stylelintrc.js":`stylelint_light`,".stylelintrc.json":`stylelint_light`,".stylelintrc.json5":`stylelint_light`,".stylelintrc.jsonc":`stylelint_light`,".stylelintrc.mjs":`stylelint_light`,".stylelintrc.mts":`stylelint_light`,".stylelintrc.toml":`stylelint_light`,".stylelintrc.ts":`stylelint_light`,".stylelintrc.yaml":`stylelint_light`,".stylelintrc.yml":`stylelint_light`,".vercelignore":`vercel_light`,".wakatime-project":`wakatime_light`,"auto-config.js":`auto_light`,"auto-config.json":`auto_light`,"auto-config.ts":`auto_light`,"auto-config.yaml":`auto_light`,"auto-config.yml":`auto_light`,"auto.config.js":`auto_light`,"auto.config.ts":`auto_light`,browserslist:`browserlist_light`,"bun.lock":`bun_light`,"bun.lockb":`bun_light`,"bunfig.toml":`bun_light`,"circle.yml":`circleci_light`,"copilot-instructions.md":`copilot_light`,"deno.json":`deno_light`,"deno.jsonc":`deno_light`,"deno.lock":`deno_light`,"eas.json":`expo_light`,hosts:`hosts_light`,"jsr.json":`jsr_light`,"jsr.jsonc":`jsr_light`,"nano-staged.cjs":`nano-staged_light`,"nano-staged.js":`nano-staged_light`,"nano-staged.json":`nano-staged_light`,"nano-staged.mjs":`nano-staged_light`,"netlify.json":`netlify_light`,"netlify.toml":`netlify_light`,"netlify.yaml":`netlify_light`,"netlify.yml":`netlify_light`,"next.config.js":`next_light`,"next.config.mjs":`next_light`,"next.config.mts":`next_light`,"next.config.ts":`next_light`,"now.json":`vercel_light`,"openapi.json":`openapi_light`,"openapi.yaml":`openapi_light`,"openapi.yml":`openapi_light`,"opencode.json":`opencode_light`,"opencode.jsonc":`opencode_light`,"payload.config.js":`payload_light`,"payload.config.mjs":`payload_light`,"payload.config.mts":`payload_light`,"payload.config.ts":`payload_light`,"pnpm-lock.yaml":`pnpm_light`,"pnpm-workspace.yaml":`pnpm_light`,"release.config.cjs":`semantic-release_light`,"release.config.cts":`semantic-release_light`,"release.config.js":`semantic-release_light`,"release.config.json":`semantic-release_light`,"release.config.json5":`semantic-release_light`,"release.config.jsonc":`semantic-release_light`,"release.config.mjs":`semantic-release_light`,"release.config.mts":`semantic-release_light`,"release.config.toml":`semantic-release_light`,"release.config.ts":`semantic-release_light`,"release.config.yaml":`semantic-release_light`,"release.config.yml":`semantic-release_light`,"remix.config.js":`remix_light`,"remix.config.ts":`remix_light`,sconscript:`scons_light`,sconstruct:`scons_light`,scsub:`scons_light`,shellcheckrc:`shellcheck_light`,"snowpack.config.cjs":`snowpack_light`,"snowpack.config.cts":`snowpack_light`,"snowpack.config.js":`snowpack_light`,"snowpack.config.json":`snowpack_light`,"snowpack.config.mjs":`snowpack_light`,"snowpack.config.mts":`snowpack_light`,"snowpack.config.ts":`snowpack_light`,"snowpack.deps.json":`snowpack_light`,"stitches.config.js":`stitches_light`,"stitches.config.ts":`stitches_light`,"stylelint.config.cjs":`stylelint_light`,"stylelint.config.cts":`stylelint_light`,"stylelint.config.js":`stylelint_light`,"stylelint.config.json":`stylelint_light`,"stylelint.config.json5":`stylelint_light`,"stylelint.config.jsonc":`stylelint_light`,"stylelint.config.mjs":`stylelint_light`,"stylelint.config.mts":`stylelint_light`,"stylelint.config.toml":`stylelint_light`,"stylelint.config.ts":`stylelint_light`,"stylelint.config.yaml":`stylelint_light`,"stylelint.config.yml":`stylelint_light`,"turbo.json":`turborepo_light`,"turbo.jsonc":`turborepo_light`,"vercel.json":`vercel_light`,"vercel.ts":`vercel_light`,"warp.md":`warp_light`,"zeabur.json":`zeabur_light`,"zeabur.json5":`zeabur_light`,"zeabur.jsonc":`zeabur_light`,"zeabur.toml":`zeabur_light`,"zeabur.yaml":`zeabur_light`,"zeabur.yml":`zeabur_light`},Ma={".wakatime-project":`wakatime_light`,ai:`adobe-illustrator_light`,ait:`adobe-illustrator_light`,blink:`blink_light`,cr:`crystal_light`,"drone.yml":`drone_light`,ecr:`crystal_light`,fen:`chess_light`,hcl:`hcl_light`,huff:`huff_light`,iuml:`uml_light`,j2:`jinja_light`,jinja:`jinja_light`,"jinja-html":`jinja_light`,jinja2:`jinja_light`,"openapi.json":`openapi_light`,"openapi.yaml":`openapi_light`,"openapi.yml":`openapi_light`,pgn:`chess_light`,plantuml:`uml_light`,psb:`adobe-photoshop_light`,psd:`adobe-photoshop_light`,psdt:`adobe-photoshop_light`,pu:`uml_light`,puml:`uml_light`,tldr:`tldraw_light`,tofu:`opentofu_light`,toml:`toml_light`,verse:`verse_light`,wsd:`uml_light`,zeabur:`zeabur_light`},Na={"-cursor":`folder-cursor_light`,"-idea":`folder-intellij_light`,"-j2":`folder-jinja_light`,"-jinja":`folder-jinja_light`,"-jinja2":`folder-jinja_light`,".cursor":`folder-cursor_light`,".idea":`folder-intellij_light`,".j2":`folder-jinja_light`,".jinja":`folder-jinja_light`,".jinja2":`folder-jinja_light`,__cursor__:`folder-cursor_light`,__idea__:`folder-intellij_light`,__j2__:`folder-jinja_light`,__jinja2__:`folder-jinja_light`,__jinja__:`folder-jinja_light`,_cursor:`folder-cursor_light`,_idea:`folder-intellij_light`,_j2:`folder-jinja_light`,_jinja:`folder-jinja_light`,_jinja2:`folder-jinja_light`,cursor:`folder-cursor_light`,idea:`folder-intellij_light`,j2:`folder-jinja_light`,jinja:`folder-jinja_light`,jinja2:`folder-jinja_light`},Pa={pug:``,just:``,json:``,playwright:``,xml:``,javascript:``,rocket:``,routing:``,settings:``,typedoc:``,"markdoc-config":``,"astro-config":``,visualstudio:``,"go-mod":``,"python-misc":``,ruff:``,uv:``,scons:``,console:``,excalidraw:``,gradle:``,license:``,unlicense:``,key:``,keystatic:``,ruby:``,gemfile:``,rubocop:``,rspec:``,swift:``,docker:``,latexmk:``,email:``,graphql:``,xaml:``,happo:``,chromatic:``,git:``,lua:``,r:``,dart:``,cmake:``,semgrep:``,"vue-config":``,nuxt:``,harmonix:``,lock:``,angular:``,mjml:``,vercel:``,liara:``,verdaccio:``,payload:``,next:``,remark:``,remix:``,laravel:``,vfl:``,kl:``,postcss:``,posthtml:``,todo:``,cabal:``,http:``,graphcool:``,webpack:``,rstack:``,lynx:``,ionic:``,gulp:``,nodejs:``,npm:``,yarn:``,android:``,tune:``,turborepo:``,babel:``,blitz:``,contributing:``,readme:``,changelog:``,architecture:``,credits:``,authors:``,flow:``,favicon:``,karma:``,bithound:``,svgo:``,appveyor:``,travis:``,codecov:``,sonarcloud:``,protractor:``,fusebox:``,heroku:``,editorconfig:``,bower:``,eslint:``,conduct:``,watchman:``,aurelia:``,auto:``,mocha:``,jenkins:``,firebase:``,rollup:``,hack:``,hardhat:``,stylelint:``,"code-climate":``,prettier:``,renovate:``,apollo:``,nodemon:``,webhint:``,browserlist:``,snyk:``,drone:``,opencode:``,sequelize:``,gatsby:``,wakatime:``,circleci:``,cloudfoundry:``,grunt:``,jest:``,fastlane:``,helm:``,wallaby:``,stencil:``,makefile:``,"semantic-release":``,bitbucket:``,bazel:``,"godot-assets":``,"azure-pipelines":``,vagrant:``,prisma:``,istanbul:``,tailwindcss:``,buildkite:``,netlify:``,svelte:``,nest:``,moon:``,percy:``,gitpod:``,stackblitz:``,codeowners:``,gcp:``,amplify:``,husky:``,tilt:``,capacitor:``,adonis:``,meson:``,commitizen:``,commitlint:``,buck:``,nx:``,dune:``,roadmap:``,nuget:``,stryker:``,modernizr:``,slug:``,stitches:``,nginx:``,minecraft:``,replit:``,duc:``,snowpack:``,quasar:``,dependabot:``,vite:``,vitest:``,velite:``,rolldown:``,lerna:``,windicss:``,textlint:``,vlang:``,sentry:``,contentlayer:``,phpunit:``,"php-cs-fixer":``,robots:``,tsconfig:``,tauri:``,jsconfig:``,maven:``,serverless:``,supabase:``,ember:``,horusec:``,poetry:``,pdm:``,parcel:``,astyle:``,lighthouse:``,svgr:``,rome:``,cypress:``,plop:``,tobimake:``,gleam:``,pnpm:``,gridsome:``,steadybit:``,caddy:``,openapi:``,swagger:``,bun:``,"nano-staged":``,knip:``,taskfile:``,craco:``,mercurial:``,deno:``,plastic:``,typst:``,unocss:``,"ifanr-cloud":``,concourse:``,syncpack:``,werf:``,luau:``,wally:``,panda:``,biome:``,esbuild:``,drizzle:``,puppeteer:``,garden:``,pkl:``,kubernetes:``,phpstan:``,screwdriver:``,snapcraft:``,kcl:``,clangd:``,markdownlint:``,trigger:``,deepsource:``,jsr:``,"coderabbit-ai":``,"gemini-ai":``,taze:``,wxt:``,lefthook:``,label:``,zeabur:``,copilot:``,"pre-commit":``,lintstaged:``,histoire:``,installation:``,"github-sponsors":``,"minecraft-fabric":``,umi:``,"pm2-ecosystem":``,hosts:``,citation:``,xmake:``,wrangler:``,cline:``,packship:``,snakemake:``,hadolint:``,tsdoc:``,oxc:``,claude:``,cursor:``,metro:``,bashly:``,google:``,shellcheck:``,warp:``,skill:``,tsdown:``,appwrite:``,expo:``,slint:``,html:``,markdown:``,blink:``,css:``,sass:``,less:``,json_schema:``,hjson:``,jinja:``,proto:``,prompt:``,sublime:``,simulink:``,quarto:``,twine:``,yaml:``,toml:``,toon:``,image:``,palette:``,react:``,react_ts:``,typescript:``,"typescript-def":``,markdoc:``,markojs:``,astro:``,pdf:``,table:``,vscode:``,varnish:``,database:``,kusto:``,csharp:``,qsharp:``,zip:``,vala:``,zig:``,exe:``,hex:``,java:``,jar:``,javaclass:``,c3:``,c:``,h:``,hip:``,cpp:``,hpp:``,"objective-c":``,"objective-cpp":``,rc:``,go:``,python:``,url:``,powershell:``,word:``,certificate:``,font:``,lib:``,bibliography:``,"bibtex-style":``,dll:``,fsharp:``,arduino:``,tex:``,context:``,"doctex-installer":``,bbx:``,cbx:``,lbx:``,powerpoint:``,video:``,virtual:``,vedic:``,audio:``,coffee:``,document:``,lyric:``,rust:``,raml:``,haskell:``,kotlin:``,otne:``,diff:``,clojure:``,groovy:``,dart_generated:``,actionscript:``,mxml:``,autohotkey:``,flash:``,"adobe-swc":``,swc:``,assembly:``,vue:``,ocaml:``,odin:``,onnx:``,"javascript-map":``,"css-map":``,handlebars:``,perl:``,haxe:``,"test-ts":``,"test-jsx":``,"test-js":``,puppet:``,elixir:``,livescript:``,erlang:``,twig:``,julia:``,elm:``,purescript:``,smarty:``,stylus:``,reason:``,bucklescript:``,merlin:``,verilog:``,mathematica:``,wolframlanguage:``,nunjucks:``,robot:``,solidity:``,autoit:``,haml:``,yang:``,terraform:``,opentofu:``,applescript:``,cake:``,cucumber:``,nim:``,apiblueprint:``,riot:``,coldfusion:``,nix:``,slim:``,restql:``,kivy:``,sbt:``,gitlab:``,figma:``,huff:``,crystal:``,cuda:``,log:``,dotjs:``,ejs:``,processing:``,storybook:``,wepy:``,hcl:``,san:``,quokka:``,django:``,red:``,foxpro:``,i18n:``,webassembly:``,jupyter:``,d:``,mdx:``,mdsvex:``,ballerina:``,racket:``,mint:``,velocity:``,godot:``,azure:``,razor:``,abc:``,asciidoc:``,edge:``,scheme:``,lisp:``,"3d":``,svg:``,"adobe-illustrator":``,"adobe-photoshop":``,vim:``,moonscript:``,advpl:``,disc:``,fortran:``,tcl:``,liquid:``,prolog:``,coconut:``,sketch:``,pawn:``,forth:``,uml:``,dhall:``,sml:``,opam:``,imba:``,drawio:``,pascal:``,unity:``,sas:``,command:``,denizenscript:``,search:``,rescript:``,"rescript-interface":``,brainfuck:``,bicep:``,cobol:``,grain:``,lolcode:``,idris:``,pipeline:``,opa:``,scala:``,lilypond:``,chess:``,gemini:``,php:``,ada:``,coala:``,dinophp:``,teal:``,template:``,shader:``,siyuan:``,ndst:``,tobi:``,capnp:``,tree:``,cadence:``,antlr:``,stylable:``,pinejs:``,gamemaker:``,tldraw:``,mermaid:``,mojo:``,roblox:``,rbxmk:``,spwn:``,templ:``,chrome:``,stan:``,abap:``,lottie:``,"apps-script":``,verified:``,bruno:``,cairo:``,"grafana-alloy":``,freemarker:``,tsil:``,hurl:``,cds:``,verse:``,sway:``,"bench-ts":``,"bench-jsx":``,"bench-js":``,controller:``,"dependencies-update":``,subtitles:``,beancount:``,epub:``,regedit:``,gnuplot:``,coloredpetrinets:``,pytorch:``,blender:``,"vanilla-extract":``,toc:``,cue:``,lean:``,salt:``,macaulay2:``,uiua:``,mrpack:``,"folder-rust":``,"folder-robot":``,"folder-src":``,"folder-dist":``,"folder-css":``,"folder-sass":``,"folder-television":``,"folder-desktop":``,"folder-console":``,"folder-images":``,"folder-scripts":``,"folder-node":``,"folder-javascript":``,"folder-json":``,"folder-font":``,"folder-bower":``,"folder-test":``,"folder-directive":``,"folder-jinja":``,"folder-markdown":``,"folder-pdm":``,"folder-php":``,"folder-phpmailer":``,"folder-sublime":``,"folder-docs":``,"folder-gh-workflows":``,"folder-git":``,"folder-github":``,"folder-gitea":``,"folder-gitlab":``,"folder-forgejo":``,"folder-vscode":``,"folder-views":``,"folder-vue":``,"folder-vuepress":``,"folder-expo":``,"folder-config":``,"folder-i18n":``,"folder-components":``,"folder-verdaccio":``,"folder-aurelia":``,"folder-resource":``,"folder-lib":``,"folder-theme":``,"folder-webpack":``,"folder-global":``,"folder-public":``,"folder-include":``,"folder-docker":``,"folder-nginx":``,"folder-astro":``,"folder-database":``,"folder-migrations":``,"folder-log":``,"folder-target":``,"folder-temp":``,"folder-aws":``,"folder-audio":``,"folder-video":``,"folder-kubernetes":``,"folder-import":``,"folder-export":``,"folder-wakatime":``,"folder-circleci":``,"folder-wordpress":``,"folder-gradle":``,"folder-coverage":``,"folder-class":``,"folder-other":``,"folder-lua":``,"folder-turborepo":``,"folder-typescript":``,"folder-graphql":``,"folder-routes":``,"folder-ci":``,"folder-eslint":``,"folder-benchmark":``,"folder-messages":``,"folder-less":``,"folder-gulp":``,"folder-python":``,"folder-r":``,"folder-sandbox":``,"folder-scons":``,"folder-mojo":``,"folder-moon":``,"folder-debug":``,"folder-fastlane":``,"folder-plugin":``,"folder-middleware":``,"folder-controller":``,"folder-ansible":``,"folder-server":``,"folder-client":``,"folder-tasks":``,"folder-android":``,"folder-ios":``,"folder-ui":``,"folder-upload":``,"folder-download":``,"folder-tools":``,"folder-helper":``,"folder-serverless":``,"folder-api":``,"folder-app":``,"folder-apollo":``,"folder-archive":``,"folder-backup":``,"folder-batch":``,"folder-buildkite":``,"folder-cluster":``,"folder-command":``,"folder-constant":``,"folder-container":``,"folder-content":``,"folder-context":``,"folder-core":``,"folder-delta":``,"folder-dump":``,"folder-examples":``,"folder-environment":``,"folder-functions":``,"folder-generator":``,"folder-hook":``,"folder-trigger":``,"folder-job":``,"folder-keys":``,"folder-layout":``,"folder-mail":``,"folder-mappings":``,"folder-meta":``,"folder-changesets":``,"folder-packages":``,"folder-shared":``,"folder-shader":``,"folder-stack":``,"folder-template":``,"folder-utils":``,"folder-supabase":``,"folder-private":``,"folder-linux":``,"folder-windows":``,"folder-macos":``,"folder-error":``,"folder-event":``,"folder-secure":``,"folder-custom":``,"folder-mock":``,"folder-syntax":``,"folder-vm":``,"folder-stylus":``,"folder-flow":``,"folder-rules":``,"folder-review":``,"folder-animation":``,"folder-guard":``,"folder-prisma":``,"folder-pipe":``,"folder-interceptor":``,"folder-svg":``,"folder-nuxt":``,"folder-terraform":``,"folder-mobile":``,"folder-stencil":``,"folder-firebase":``,"folder-firestore":``,"folder-cloud-functions":``,"folder-svelte":``,"folder-update":``,"folder-intellij":``,"folder-azure-pipelines":``,"folder-mjml":``,"folder-admin":``,"folder-jupyter":``,"folder-scala":``,"folder-connection":``,"folder-quasar":``,"folder-next":``,"folder-dal":``,"folder-cobol":``,"folder-yarn":``,"folder-husky":``,"folder-storybook":``,"folder-base":``,"folder-cart":``,"folder-home":``,"folder-project":``,"folder-prompts":``,"folder-interface":``,"folder-netlify":``,"folder-enum":``,"folder-contract":``,"folder-helm":``,"folder-queue":``,"folder-vercel":``,"folder-cypress":``,"folder-decorators":``,"folder-java":``,"folder-resolver":``,"folder-angular":``,"folder-unity":``,"folder-pdf":``,"folder-proto":``,"folder-plastic":``,"folder-gamemaker":``,"folder-mercurial":``,"folder-godot":``,"folder-lottie":``,"folder-taskfile":``,"folder-drizzle":``,"folder-cloudflare":``,"folder-seeders":``,"folder-store":``,"folder-bicep":``,"folder-snapcraft":``,"folder-flutter":``,"folder-snippet":``,"folder-element":``,"folder-src-tauri":``,"folder-favicon":``,"folder-features":``,"folder-lefthook":``,"folder-bloc":``,"folder-powershell":``,"folder-repository":``,"folder-luau":``,"folder-obsidian":``,"folder-trash":``,"folder-cline":``,"folder-liquibase":``,"folder-dart":``,"folder-zeabur":``,"folder-kusto":``,"folder-policy":``,"folder-attachment":``,"folder-bibliography":``,"folder-link":``,"folder-pytorch":``,"folder-blender":``,"folder-atom":``,"folder-molecule":``,"folder-organism":``,"folder-claude":``,"folder-cursor":``,"folder-gemini-ai":``,"folder-opencode":``,"folder-input":``,"folder-salt":``,"folder-simulations":``,"folder-metro":``,"folder-filter":``,"folder-toc":``,"folder-cue":``,"folder-license":``,"folder-form":``,"folder-postman":``,"folder-skills":``,"folder-zed":``,"folder-appwrite":``,"folder-assembly":``,"folder-go":``,"folder-kotlin":``,file:``,folder:``,scons_light:``,rubocop_light:``,vercel_light:``,payload_light:``,next_light:``,remix_light:``,turborepo_light:``,auto_light:``,stylelint_light:``,"code-climate_light":``,browserlist_light:``,drone_light:``,opencode_light:``,wakatime_light:``,circleci_light:``,"semantic-release_light":``,netlify_light:``,stitches_light:``,snowpack_light:``,pnpm_light:``,openapi_light:``,bun_light:``,"nano-staged_light":``,deno_light:``,jsr_light:``,zeabur_light:``,copilot_light:``,hosts_light:``,cursor_light:``,shellcheck_light:``,warp_light:``,expo_light:``,blink_light:``,jinja_light:``,toml_light:``,opentofu_light:``,huff_light:``,crystal_light:``,hcl_light:``,"adobe-illustrator_light":``,"adobe-photoshop_light":``,uml_light:``,chess_light:``,tldraw_light:``,verse_light:``,"folder-jinja_light":``,"folder-intellij_light":``,"folder-cursor_light":``};function Fa(e,t){return Object.hasOwn(e,t)}function Ia(e,t,n,r){let i=e[n];return!r||!Fa(t,n)?i:t[n]}function La(){return typeof window<`u`&&typeof window.matchMedia!=`function`?!1:!Da().value}function Ra(e,t){let n=e.toLowerCase();if(Fa(Oa,e))return Ia(Oa,ja,e,t);if(Fa(Oa,n))return Ia(Oa,ja,n,t)}function za(e,t){let n=e.toLowerCase().split(`.`);for(let e=1;ee.length>0).at(-1)??e}function Ha(e){return e.replaceAll(/\s(?:width|height)="[^"]*"/g,``).replace(/^