diff --git a/.github/workflows/deploy-website.yml b/.github/workflows/deploy-website.yml index aa0fcc37..2e4380d3 100644 --- a/.github/workflows/deploy-website.yml +++ b/.github/workflows/deploy-website.yml @@ -27,16 +27,26 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 - + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install --frozen-lockfile + working-directory: website + + - name: Build website + run: bun run build + working-directory: website + - name: Setup Pages uses: actions/configure-pages@v5 - + - name: Upload artifact uses: actions/upload-pages-artifact@v4 with: - # Upload the website directory - path: './website' - + path: './website/dist' + - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/publish-website-artifacts.yml b/.github/workflows/publish-website-artifacts.yml index c417d210..5127aeb3 100644 --- a/.github/workflows/publish-website-artifacts.yml +++ b/.github/workflows/publish-website-artifacts.yml @@ -41,40 +41,117 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Copy artifacts to website folder + - name: Copy artifacts to website public folder run: | - mkdir -p website + mkdir -p website/public # Copy macOS DMG DMG_FILE=$(find /tmp/artifacts -name "*.dmg" | head -1) if [ -n "$DMG_FILE" ]; then - cp "$DMG_FILE" website/astro-editor-latest.dmg + cp "$DMG_FILE" website/public/astro-editor-latest.dmg echo "Copied DMG: $DMG_FILE" fi # Copy Windows MSI MSI_FILE=$(find /tmp/artifacts -name "*.msi" | head -1) if [ -n "$MSI_FILE" ]; then - cp "$MSI_FILE" website/astro-editor-latest.msi + cp "$MSI_FILE" website/public/astro-editor-latest.msi echo "Copied MSI: $MSI_FILE" fi # Copy Linux AppImage APPIMAGE_FILE=$(find /tmp/artifacts -name "*.AppImage" | head -1) if [ -n "$APPIMAGE_FILE" ]; then - cp "$APPIMAGE_FILE" website/astro-editor-latest.AppImage + cp "$APPIMAGE_FILE" website/public/astro-editor-latest.AppImage echo "Copied AppImage: $APPIMAGE_FILE" fi - echo "Website folder contents:" - ls -la website/*.dmg website/*.msi website/*.AppImage 2>/dev/null || true + echo "Website public folder contents:" + ls -la website/public/*.dmg website/public/*.msi website/public/*.AppImage 2>/dev/null || true - - name: Commit website artifacts + - name: Generate release page + run: | + RELEASE_BODY=$(gh release view "$RELEASE_TAG" --json body -q .body) + VERSION="${RELEASE_TAG#v}" + DATE=$(gh release view "$RELEASE_TAG" --json publishedAt -q .publishedAt | cut -dT -f1) + + # Sanitise body for MDX: + # - Strip leading H2 title + # - Strip "Installation Instructions" section and everything after + # - Strip "Full Changelog" links + # - Escape curly braces outside code spans/blocks + # + # NOTE: This logic is duplicated in website/scripts/generate-release-pages.ts + # (sanitiseBody, escapeCurlyBraces, localiseImages). If you change this, + # update that script too (and vice versa). + CLEAN_BODY=$(printf '%s\n' "$RELEASE_BODY" | \ + sed '/^## *\(πŸš€ *\)\{0,1\}Astro Editor v[0-9]/d' | \ + sed '/^### Installation Instructions/,$d' | \ + sed '/^\*\*Full Changelog\*\*/d' | \ + awk ' + /^```/ { in_code = !in_code } + in_code { print; next } + { + line = "" + n = split($0, chars, "") + in_tick = 0 + for (i = 1; i <= n; i++) { + if (chars[i] == "`") in_tick = !in_tick + if (!in_tick && chars[i] == "{") { line = line "" "{"; continue } + if (!in_tick && chars[i] == "}") { line = line "" "}"; continue } + line = line chars[i] + } + print line + } + ' | \ + sed -e :a -e '/^[[:space:]]*$/{ $d; N; ba; }') + + # Download GitHub attachment images to local repo + IMAGES_DIR="website/public/releases" + mkdir -p "$IMAGES_DIR" + IMAGE_URLS=$(printf '%s\n' "$CLEAN_BODY" | grep -oE 'https://github\.com/user-attachments/assets/[a-f0-9-]+' | sort -u || true) + IMG_INDEX=0 + for URL in $IMAGE_URLS; do + IMG_INDEX=$((IMG_INDEX + 1)) + LOCAL_NAME="${VERSION}-${IMG_INDEX}.png" + curl -sL -o "${IMAGES_DIR}/${LOCAL_NAME}" "$URL" + CLEAN_BODY=$(printf '%s' "$CLEAN_BODY" | sed "s|${URL}|/releases/${LOCAL_NAME}|g") + echo "Downloaded image: ${LOCAL_NAME}" + done + + # Generate MDX file + RELEASES_DIR="website/src/content/docs/releases" + mkdir -p "$RELEASES_DIR" + OUTPUT_FILE="$RELEASES_DIR/${VERSION}.mdx" + + { + printf '%s\n' "---" + printf '%s\n' "title: 'v${VERSION}'" + printf '%s\n' "description: 'Astro Editor v${VERSION}'" + printf '%s\n' "date: ${DATE}" + printf '%s\n' "slug: 'releases/v${VERSION}'" + printf '%s\n' "---" + + if [ -n "$CLEAN_BODY" ]; then + printf '\n%s\n\n%s\n' "$CLEAN_BODY" "---" + fi + + printf '\n%s\n' "[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/${RELEASE_TAG})" + } > "$OUTPUT_FILE" + + echo "Generated release page: $OUTPUT_FILE" + cat "$OUTPUT_FILE" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Commit website artifacts and release page run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git add website/astro-editor-latest.dmg website/astro-editor-latest.msi website/astro-editor-latest.AppImage 2>/dev/null || true - git commit -m "chore: update installers for $RELEASE_TAG" || echo "No changes to commit" + git add website/public/astro-editor-latest.dmg website/public/astro-editor-latest.msi website/public/astro-editor-latest.AppImage 2>/dev/null || true + git add website/public/releases/*.png 2>/dev/null || true + git add website/src/content/docs/releases/*.mdx 2>/dev/null || true + git commit -m "chore: update installers and add release page for $RELEASE_TAG" || echo "No changes to commit" git pull --rebase origin main git push origin main diff --git a/.gitignore b/.gitignore index 62fb74ff..95ba3643 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,9 @@ temp-dummy-astro-project/ # Code quality reports jscpd-report/ -.claude/worktrees/ +# Website build artifacts +website/dist/ website/.astro/ +website/node_modules/ + +.claude/worktrees/ diff --git a/.vscode/settings.json b/.vscode/settings.json index 6d4da956..956d4d66 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "css": "css" }, "files.associations": { - "*.css": "tailwindcss" + "*.css": "tailwindcss", + "*.mdx": "markdown" } } diff --git a/AGENTS.md b/AGENTS.md index 5c210d79..cc5fd036 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,6 +22,8 @@ - Comprehensive keyboard shortcuts and menu integration - Toast notifications throughout the app +**Note:** The `website/` directory is an independent project that uses **bun** (not pnpm). It is not part of the pnpm workspace. See `website/AGENTS.md` for its own instructions. + ## Core Rules ### New Sessions diff --git a/docs/tasks-done/task-2026-02-17-rework-website.md b/docs/tasks-done/task-2026-02-17-rework-website.md new file mode 100644 index 00000000..c332c606 --- /dev/null +++ b/docs/tasks-done/task-2026-02-17-rework-website.md @@ -0,0 +1,548 @@ +# Task: Replace Static Website with Starlight Documentation Site + +Replace the current static `index.html` in `website/` with an Astro + Starlight documentation site, modelled on the Taskdn project's website (`~/dev/taskdn/website/`). The homepage content stays essentially the same for now (Task 3 will redesign it). Documentation content is stub-only (Task 2 will write it). + +## Context + +- **Current state**: `website/` contains a static `index.html` (Tailwind CDN, dark theme, marketing page with feature sections, YouTube embed, download buttons), favicon assets, screenshot PNGs, and three installer binaries (`astro-editor-latest.{dmg,msi,AppImage}`). +- **Deployment**: Two GitHub Actions workflows: + - `deploy-website.yml` β€” deploys `website/` to GitHub Pages on push to `main` when `website/**` changes + - `publish-website-artifacts.yml` β€” on release publish, downloads binaries from the GH release, copies them as `astro-editor-latest.*` into `website/`, commits to `main`, triggers deploy +- **Domain**: `astroeditor.danny.is` (CNAME on GitHub Pages) +- **Analytics**: Simple Analytics (privacy-first, no cookies) +- **Reference**: Taskdn website at `~/dev/taskdn/website/` β€” same stack but multi-product (has `product` enum in schema, multiple sidebar sections). Astro Editor is single-product so simpler. +- **33 historical releases** on GitHub (v0.1.1 through v1.0.10). Release bodies range from minimal ("No user-facing changes") to rich markdown with images. Post-1.0.0 releases should all get changelog pages; pre-1.0.0 are case-by-case. + +## Follow-up Tasks + +- **Task 2** β€” Write actual documentation content (by hand with AI help, new screenshots) +- **Task 3** β€” Complete homepage redesign (rebuild `index.astro` from scratch with proper Astro features) + +--- + +## Phase 0: Repo Setup + +- [ ] Backup current website: `mv website/ website-old/` (git-tracked, recoverable) +- [ ] Add website build artifacts to root `.gitignore`: `website/dist/`, `website/.astro/`, `website/node_modules/` + +No GH Actions changes yet β€” they'll be broken on this branch which is fine. + +--- + +## Phase 1: Build Out Starlight Site [βœ… DONE] + +Core scaffolding, config, and all structural pages. + +### 1.1 Scaffold & Dependencies + +- [ ] Scaffold Starlight project in `website/` using the CLI to get latest configs: + ```bash + npm create astro@latest -- --template starlight website + ``` + (`website/` won't exist after Phase 0 backup, so this should work directly) +- [ ] Ensure `package.json` has `"type": "module"` and standard scripts: + ```json + { + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro", + "check": "astro check && tsc --noEmit && bun run lint && bun run format:check", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --write .", + "format:check": "prettier --check ." + } + } + ``` +- [ ] Install runtime deps: `@astrojs/starlight`, `astro`, `sharp`, `starlight-theme-flexoki`, `starlight-llms-txt`, `starlight-kbd` +- [ ] Install dev deps: `@astrojs/check`, `typescript`, `eslint`, `@eslint/js`, `typescript-eslint`, `eslint-plugin-astro`, `prettier`, `prettier-plugin-astro` + +### 1.2 Configuration Files + +- [ ] `astro.config.mjs` β€” Starlight with: + - Site: `https://astroeditor.danny.is` + - Plugins: Flexoki theme (blue accent), llms.txt, kbd (macOS default + Windows) + - Title: `Astro Editor` + - Description: `Schema-aware markdown editor for Astro content collections` + - Footer component override + - Logo from `src/assets/` + - Favicon: `/favicon.png` + - Social: GitHub (`https://github.com/dannysmith/astro-editor`) + - Head: OG meta, Twitter card, Simple Analytics script + - Sidebar: Getting Started link + Releases link (expand in Phase 4) +- [ ] `tsconfig.json` β€” extends `astro/tsconfigs/strict`, path aliases (`@components`, `@layouts`, `@assets`) +- [ ] `eslint.config.js` β€” JS recommended + TS recommended + Astro recommended, ignoring `dist/`, `.astro/`, `node_modules/` +- [ ] `prettier.config.js` β€” no semi, single quotes, tab width 2, trailing comma es5, astro plugin +- [ ] `.prettierignore` β€” `dist/`, `.astro/`, `node_modules/`, `bun.lock`, `*.md`, `*.mdx` +- [ ] `website/.gitignore` β€” `dist/`, `.astro/`, `node_modules/`, `npm-debug.log*`, `.env`, `.env.production`, `.DS_Store` +- [ ] `website/AGENTS.md` β€” Starlight/Astro-specific AI instructions (build up over time). Include: Astro/Starlight version, key patterns, content conventions +- [ ] `website/CLAUDE.md` β€” just `@AGENTS.md` (same pattern as root project) + +### 1.3 Content Collection & Components + +- [ ] `src/content.config.ts` β€” docs collection with `date` field extension (no `product` field) +- [ ] `src/components/Footer.astro` β€” wraps Starlight default footer, adds copyright ("Danny Smith") + privacy policy link +- [ ] `src/layouts/Layout.astro` β€” standalone layout for non-Starlight pages (homepage). Flexoki palette, full meta tags, Simple Analytics. See reference implementation appendix below. + +### 1.4 Homepage + +- [ ] `src/pages/index.astro` β€” port current `index.html` content into Astro component using standalone `Layout.astro` + - Keep Tailwind CDN for now (Task 3 will handle properly) + - **Gotcha**: Inline ` + + + + + + + +``` + +### Releases Index Page + +```astro +--- +import { getCollection } from 'astro:content' +import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' + +const allDocs = await getCollection('docs') +const releases = allDocs.filter( + (doc) => doc.id.startsWith('releases/') && doc.data.date +) + +const sortedReleases = releases.sort( + (a, b) => b.data.date!.getTime() - a.data.date!.getTime() +) + +function formatDate(date: Date): string { + return date.toLocaleDateString('en-GB', { + year: 'numeric', + month: 'short', + day: 'numeric', + timeZone: 'UTC', + }) +} +--- + + +

All releases.

+ + +
+ + +``` + +### Release Page Format + +Each file in `src/content/docs/releases/` (e.g. `1.0.5.mdx`): + +```mdx +--- +title: 'v1.0.5' +description: 'Astro Editor v1.0.5' +date: 2026-01-07 +--- + +Summary of what changed. + +## What's Changed + +* Feature X +* Bug fix Y + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.5) +``` + +### Writing Documentation Content + +All docs go in `src/content/docs/` as `.mdx` files. Starlight routes them automatically based on file path. + +**Frontmatter** β€” every page requires: + +```yaml +--- +title: 'Page Title' +description: 'One sentence for SEO' +--- +``` + +**Available Components** (import from `@astrojs/starlight/components`): + +- **Tabs / TabItem** β€” OS/package-manager variants. Use `syncKey` for cross-page sync (`pkg`, `os`, `shell`) +- **Aside** β€” callout boxes (`note`, `tip`, `caution`, `danger`). Also `:::tip` markdown syntax +- **LinkCard / Card / CardGrid** β€” navigation cards and feature grids +- **Steps** β€” styled numbered step lists (wrap around ordered list) +- **FileTree** β€” directory structure diagrams +- **Badge** β€” inline labels +- **Kbd** (from `starlight-kbd/components`) β€” keyboard shortcuts: `` + +**Code Blocks** (Expressive Code): + +- Always specify language: `` ```bash ``, `` ```json ``, etc. +- `bash` renders as terminal frame +- `title="filename.ext"` for file name header +- `frame="none"` for non-runnable snippets +- Line highlighting: `{2,4-5}`, text markers: `"config"`, diff: `ins={2} del={1}` + +**Images** β€” live in `src/assets/`, import with `@assets` alias: + +```mdx +import { Image } from 'astro:assets' +import screenshot from '@assets/my-screenshot.png' + +Description +``` diff --git a/docs/tasks-todo/task-2-write-documentation.md b/docs/tasks-todo/task-2-write-documentation.md new file mode 100644 index 00000000..e1ce36ad --- /dev/null +++ b/docs/tasks-todo/task-2-write-documentation.md @@ -0,0 +1,102 @@ +# Task: Write Documentation Content + +Write the actual documentation for Astro Editor to the starlight site in `website/`. Most content will be written by hand with AI assistance and new screenshots will be taken to replace/supplement the current ones. The existing user guide at `docs/user-guide.md` is the starting point for content but is somewhat out of date. + +## Main Docs Section + +### Getting Started + +- [ ] Intro & Overview (of the Main Window) +- [ ] Fundamental Concepts +- [ ] A Simple Example - example schema, file tree and file + how they look in the editor +- [ ] Installation - mention cross-platform stuff +- [ ] Opening a Project - briefly mention how to configure most common path overrides + +### Philosophy (single page: `philosophy.mdx`) + +- [ ] Overview and Why - The first bit of the demo video but simplified +- [ ] Core Principles + +### The Editor + +- [ ] Overview + - How it looks & what's not shown + - responsive typography + - hanging headers + - Custom heading color & font size +- [ ] Focus mode +- [ ] Typewriter mode +- [ ] Copyedit modes +- [ ] Auto-Saving + +### Editing Features + +- [ ] Overview + - Basic Markdown Features + - Headers (Keyboard shortcut) +- [ ] Inserting Links (single page: `editing/links.mdx`) + - Cmd+K and paste over text + - Clicking links +- [ ] Inserting links to other content items (Content Linker) +- [ ] Inserting and Previewing Images & Files (single page: `editing/images-and-files.mdx`) + - Inserting images and files + - Previewing images on hover +- [ ] Inserting Components in MDX files (single page: `editing/mdx-components.mdx`) + - "MDX" Astro Components + - React/Vue/Svelte Components + +### File Management (Left Sidebar) + +- [ ] Overview + - Opening a Project & Viewing Collections + - What's shown + MDX label + Subfolders etc +- [ ] Drafts (+ Drafts filter) +- [ ] Filtering and sorting +- [ ] IDE Integration & Context Menu +- [ ] Creating new files + +### Frontmatter & Schemas (Right Sidebar) + +- [ ] Overview + - Intro & Screenshot + - How schemas & frontmatter are parsed/ordered in the sidebar +- [ ] Basic Field Types (& their Display) + - [ ] Nested fields +- [ ] Image Fields +- [ ] Reference Fields +- [ ] Special Fields + - Title + - Description +- [ ] Required Fields & Descriptions +- [ ] Examples + +### Preferences + +- [ ] General Pane +- [ ] Project Pane +- [ ] Collections Pane +- [ ] Advanced Pane + +### Other Bits + +- [ ] The Command Palette +- [ ] Troubleshooting + +## Reference Section + +These docs are technical reference docs for users rather than guides. Their job is not to teach. + +- [ ] Keyboard Shortcuts - Full list of shortcuts +- [ ] Special Fields - reference for special field names & their behaviours + - title + - description + - pubdate/date + - draft? + - slug (used when inserting links to other content items if a URL override is set) +- [ ] Overrides - Reference for **exactly** what each path/field override field does +- [ ] Advanced Preferences & Project Store (The preferences JSON files etc) +- [ ] How YAML is read/written/formatted + +## Releases Section + +This is already implemented. diff --git a/docs/tasks-todo/task-3-homepage-redesign.md b/docs/tasks-todo/task-3-homepage-redesign.md new file mode 100644 index 00000000..c346b903 --- /dev/null +++ b/docs/tasks-todo/task-3-homepage-redesign.md @@ -0,0 +1,10 @@ +# Task: Complete Homepage Redesign + +Rebuild `website/src/pages/index.astro` from scratch as a proper marketing/landing page, replacing the quick port from the old static `index.html`. + +## Context + +- We already ported the existing homepage content into Astro with minimal changes (keeps Tailwind CDN) +- This task starts fresh: new design, proper use of Astro features (``, scoped styles, components), no Tailwind CDN +- Reference the Taskdn homepage (`~/dev/taskdn/website/src/pages/index.astro`) for patterns (Flexoki palette, `light-dark()`, component extraction, accessible animations) +- The standalone `Layout.astro` from Task 1 provides the base HTML shell and Flexoki CSS variables diff --git a/website/README.md b/website-old/README.md similarity index 100% rename from website/README.md rename to website-old/README.md diff --git a/website/apple-touch-icon.png b/website-old/apple-touch-icon.png similarity index 100% rename from website/apple-touch-icon.png rename to website-old/apple-touch-icon.png diff --git a/website/astro-editor-latest.AppImage b/website-old/astro-editor-latest.AppImage similarity index 100% rename from website/astro-editor-latest.AppImage rename to website-old/astro-editor-latest.AppImage diff --git a/website/astro-editor-latest.dmg b/website-old/astro-editor-latest.dmg similarity index 100% rename from website/astro-editor-latest.dmg rename to website-old/astro-editor-latest.dmg diff --git a/website/astro-editor-latest.msi b/website-old/astro-editor-latest.msi similarity index 100% rename from website/astro-editor-latest.msi rename to website-old/astro-editor-latest.msi diff --git a/website/dark-mode.png b/website-old/dark-mode.png similarity index 100% rename from website/dark-mode.png rename to website-old/dark-mode.png diff --git a/website/editor-mode.png b/website-old/editor-mode.png similarity index 100% rename from website/editor-mode.png rename to website-old/editor-mode.png diff --git a/website/favicon-16x16.png b/website-old/favicon-16x16.png similarity index 100% rename from website/favicon-16x16.png rename to website-old/favicon-16x16.png diff --git a/website/favicon-32x32.png b/website-old/favicon-32x32.png similarity index 100% rename from website/favicon-32x32.png rename to website-old/favicon-32x32.png diff --git a/website/favicon.ico b/website-old/favicon.ico similarity index 100% rename from website/favicon.ico rename to website-old/favicon.ico diff --git a/website/focus-mode.png b/website-old/focus-mode.png similarity index 100% rename from website/focus-mode.png rename to website-old/focus-mode.png diff --git a/website/icon.png b/website-old/icon.png similarity index 100% rename from website/icon.png rename to website-old/icon.png diff --git a/website/image-field-in-sidebar.png b/website-old/image-field-in-sidebar.png similarity index 100% rename from website/image-field-in-sidebar.png rename to website-old/image-field-in-sidebar.png diff --git a/website/image-preview-hover.png b/website-old/image-preview-hover.png similarity index 100% rename from website/image-preview-hover.png rename to website-old/image-preview-hover.png diff --git a/website/index.html b/website-old/index.html similarity index 100% rename from website/index.html rename to website-old/index.html diff --git a/website/mdx-insert-panel.png b/website-old/mdx-insert-panel.png similarity index 100% rename from website/mdx-insert-panel.png rename to website-old/mdx-insert-panel.png diff --git a/website/og-image.png b/website-old/og-image.png similarity index 100% rename from website/og-image.png rename to website-old/og-image.png diff --git a/website/overview.png b/website-old/overview.png similarity index 100% rename from website/overview.png rename to website-old/overview.png diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 00000000..c4d24571 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,19 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/website/.prettierignore b/website/.prettierignore new file mode 100644 index 00000000..c9286642 --- /dev/null +++ b/website/.prettierignore @@ -0,0 +1,8 @@ +dist/ +.astro/ +node_modules/ +pnpm-lock.yaml + +# Ignore markdown/MDX - Prettier breaks Starlight-specific syntax +*.md +*.mdx diff --git a/website/AGENTS.md b/website/AGENTS.md new file mode 100644 index 00000000..c879302e --- /dev/null +++ b/website/AGENTS.md @@ -0,0 +1,74 @@ +# Claude / AI Agent Instructions for Astro Editor Website + +## CRITICAL: Package Manager + +**Always use `bun`, never `pnpm` or `npm`, when working in `website/`.** This project is fully independent of the root Astro Editor pnpm workspace. It has its own `bun.lock` and `node_modules/`. + +## Project Overview + +Public-facing documentation website for Astro Editor, built with Astro + Starlight. + +## Stack + +- **Framework**: Astro 5.x with Starlight 0.37.x +- **Theme**: starlight-theme-flexoki (blue accent) +- **Plugins**: starlight-llms-txt, starlight-kbd +- **Package Manager**: bun (independent of root project's pnpm workspace) +- **Analytics**: Simple Analytics (privacy-first, no cookies) + +## Directory Structure + +``` +website/ +β”œβ”€β”€ astro.config.mjs # Starlight configuration +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ assets/ # Images, logos (processed by Astro) +β”‚ β”œβ”€β”€ components/ +β”‚ β”‚ └── Footer.astro # Custom footer (Starlight override) +β”‚ β”œβ”€β”€ content/ +β”‚ β”‚ └── docs/ # Documentation content (.mdx files) +β”‚ β”‚ β”œβ”€β”€ privacy.mdx +β”‚ β”‚ β”œβ”€β”€ getting-started.mdx +β”‚ β”‚ └── releases/ # Release notes +β”‚ β”œβ”€β”€ layouts/ +β”‚ β”‚ └── Layout.astro # Standalone layout (non-Starlight pages) +β”‚ β”œβ”€β”€ pages/ +β”‚ β”‚ β”œβ”€β”€ index.astro # Homepage (standalone, not Starlight) +β”‚ β”‚ └── releases/ +β”‚ β”‚ └── index.astro # Releases list (StarlightPage) +β”‚ └── content.config.ts # Content collection schema +└── public/ # Static assets (copied as-is to dist/) +``` + +## Commands + +```bash +bun run dev # Start dev server +bun run build # Production build +bun run preview # Preview production build +bun run check # Type check + lint + format check +bun run lint # ESLint +bun run format # Prettier format +``` + +## Content Conventions + +- All docs in `src/content/docs/` as `.mdx` files +- Frontmatter requires `title` and `description` +- Release pages also have a `date` field +- File naming: kebab-case + +## Documentation Structure + +The sidebar is manually defined in `astro.config.mjs` using explicit `slug` entries. Sections are organised into directories under `src/content/docs/`. + +- **Main docs** are grouped by topic (e.g. `editor/`, `editing/`, `frontmatter/`, `preferences/`). Most sections have an `overview.mdx` as their first page. Some topics (`philosophy`, `command-palette`, `troubleshooting`) are single top-level pages. +- **Reference section** (`reference/`) is for technical reference β€” keyboard shortcuts, special field behaviours, override settings, etc. These document *what* things do, not how to use them. +- **Releases** (`releases/`) are auto-generated per GitHub release by the `publish-website-artifacts.yml` workflow. The releases index page at `src/pages/releases/index.astro` lists them sorted by date. Don't create release pages by hand. +- **Privacy policy** (`privacy.mdx`) and **getting-started.mdx** live at the docs root. + +## Writing Style + +- Active voice, second person, present tense +- No time estimates +- Use Starlight components (Tabs, Aside, Steps, etc.) where appropriate diff --git a/website/CLAUDE.md b/website/CLAUDE.md new file mode 100644 index 00000000..43c994c2 --- /dev/null +++ b/website/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/website/astro.config.mjs b/website/astro.config.mjs new file mode 100644 index 00000000..21fd2db9 --- /dev/null +++ b/website/astro.config.mjs @@ -0,0 +1,143 @@ +// @ts-check +import { defineConfig } from 'astro/config' +import starlight from '@astrojs/starlight' +import starlightThemeFlexoki from 'starlight-theme-flexoki' +import starlightLlmsTxt from 'starlight-llms-txt' +import starlightKbd from 'starlight-kbd' + +// https://astro.build/config +export default defineConfig({ + site: 'https://astroeditor.danny.is', + integrations: [ + starlight({ + plugins: [ + starlightThemeFlexoki({ accentColor: 'blue' }), + starlightLlmsTxt(), + starlightKbd({ + types: [ + { id: 'mac', label: 'macOS', default: true }, + { id: 'windows', label: 'Windows' }, + ], + }), + ], + title: 'Astro Editor', + description: 'Schema-aware markdown editor for Astro content collections', + components: { + Footer: './src/components/Footer.astro', + }, + logo: { + src: './src/assets/icon.png', + alt: 'Astro Editor Logo', + }, + favicon: '/favicon.png', + social: [ + { + icon: 'github', + label: 'GitHub', + href: 'https://github.com/dannysmith/astro-editor', + }, + ], + head: [ + { tag: 'meta', attrs: { property: 'og:type', content: 'website' } }, + { + tag: 'meta', + attrs: { property: 'og:site_name', content: 'Astro Editor' }, + }, + { + tag: 'meta', + attrs: { name: 'twitter:card', content: 'summary_large_image' }, + }, + { + tag: 'script', + attrs: { + async: true, + src: 'https://scripts.simpleanalyticscdn.com/latest.js', + }, + }, + ], + sidebar: [ + { + label: 'Getting Started', + items: [ + { slug: 'getting-started' }, + { slug: 'getting-started/concepts' }, + { slug: 'getting-started/example' }, + { slug: 'getting-started/installation' }, + { slug: 'getting-started/opening-a-project' }, + ], + }, + { + slug: 'philosophy', + }, + { + label: 'The Editor', + items: [ + { slug: 'editor/overview' }, + { slug: 'editor/focus-mode' }, + { slug: 'editor/typewriter-mode' }, + { slug: 'editor/copyedit-modes' }, + { slug: 'editor/auto-saving' }, + ], + }, + { + label: 'Editing Features', + items: [ + { slug: 'editing/overview' }, + { slug: 'editing/links' }, + { slug: 'editing/content-linker' }, + { slug: 'editing/images-and-files' }, + { slug: 'editing/mdx-components' }, + ], + }, + { + label: 'File Management', + items: [ + { slug: 'file-management/overview' }, + { slug: 'file-management/drafts' }, + { slug: 'file-management/filtering-and-sorting' }, + { slug: 'file-management/ide-integration' }, + { slug: 'file-management/creating-files' }, + ], + }, + { + label: 'Frontmatter & Schemas', + items: [ + { slug: 'frontmatter/overview' }, + { slug: 'frontmatter/basic-fields' }, + { slug: 'frontmatter/image-fields' }, + { slug: 'frontmatter/reference-fields' }, + { slug: 'frontmatter/special-fields' }, + { slug: 'frontmatter/required-fields' }, + { slug: 'frontmatter/examples' }, + ], + }, + { + label: 'Preferences', + items: [ + { slug: 'preferences/general' }, + { slug: 'preferences/project' }, + { slug: 'preferences/collections' }, + { slug: 'preferences/advanced' }, + ], + }, + { slug: 'command-palette' }, + { slug: 'troubleshooting' }, + { + label: 'Reference', + collapsed: true, + items: [ + { slug: 'reference/keyboard-shortcuts' }, + { slug: 'reference/special-fields' }, + { slug: 'reference/overrides' }, + { slug: 'reference/advanced-preferences' }, + { slug: 'reference/yaml' }, + ], + }, + { + label: 'Releases', + link: '/releases/', + }, + ], + }), + ], +}) diff --git a/website/bun.lock b/website/bun.lock new file mode 100644 index 00000000..b3b66299 --- /dev/null +++ b/website/bun.lock @@ -0,0 +1,1377 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "astro-editor-website", + "dependencies": { + "@astrojs/starlight": "^0.37.6", + "astro": "^5.6.1", + "sharp": "^0.34.2", + "starlight-kbd": "^0.3.0", + "starlight-llms-txt": "^0.7.0", + "starlight-theme-flexoki": "^0.2.2", + "zod": "^3.25.76", + }, + "devDependencies": { + "@astrojs/check": "^0.9.6", + "@eslint/js": "^9.39.2", + "eslint": "^9.39.2", + "eslint-plugin-astro": "^1.5.0", + "prettier": "^3.7.4", + "prettier-plugin-astro": "^0.14.1", + "typescript": "^5.9.3", + "typescript-eslint": "^8.51.0", + }, + }, + }, + "packages": { + "@astrojs/check": ["@astrojs/check@0.9.6", "", { "dependencies": { "@astrojs/language-server": "^2.16.1", "chokidar": "^4.0.1", "kleur": "^4.1.5", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "astro-check": "bin/astro-check.js" } }, "sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA=="], + + "@astrojs/compiler": ["@astrojs/compiler@2.13.1", "", {}, "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg=="], + + "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.5", "", {}, "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA=="], + + "@astrojs/language-server": ["@astrojs/language-server@2.16.3", "", { "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/yaml2ts": "^0.2.2", "@jridgewell/sourcemap-codec": "^1.5.5", "@volar/kit": "~2.4.27", "@volar/language-core": "~2.4.27", "@volar/language-server": "~2.4.27", "@volar/language-service": "~2.4.27", "muggle-string": "^0.4.1", "tinyglobby": "^0.2.15", "volar-service-css": "0.0.68", "volar-service-emmet": "0.0.68", "volar-service-html": "0.0.68", "volar-service-prettier": "0.0.68", "volar-service-typescript": "0.0.68", "volar-service-typescript-twoslash-queries": "0.0.68", "volar-service-yaml": "0.0.68", "vscode-html-languageservice": "^5.6.1", "vscode-uri": "^3.1.0" }, "peerDependencies": { "prettier": "^3.0.0", "prettier-plugin-astro": ">=0.11.0" }, "optionalPeers": ["prettier", "prettier-plugin-astro"], "bin": { "astro-ls": "bin/nodeServer.js" } }, "sha512-yO5K7RYCMXUfeDlnU6UnmtnoXzpuQc0yhlaCNZ67k1C/MiwwwvMZz+LGa+H35c49w5QBfvtr4w4Zcf5PcH8uYA=="], + + "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.10", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.19.0", "smol-toml": "^1.5.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A=="], + + "@astrojs/mdx": ["@astrojs/mdx@4.3.13", "", { "dependencies": { "@astrojs/markdown-remark": "6.3.10", "@mdx-js/mdx": "^3.1.1", "acorn": "^8.15.0", "es-module-lexer": "^1.7.0", "estree-util-visit": "^2.0.0", "hast-util-to-html": "^9.0.5", "piccolore": "^0.1.3", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "remark-smartypants": "^3.0.2", "source-map": "^0.7.6", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q=="], + + "@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], + + "@astrojs/sitemap": ["@astrojs/sitemap@3.7.0", "", { "dependencies": { "sitemap": "^8.0.2", "stream-replace-string": "^2.0.0", "zod": "^3.25.76" } }, "sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA=="], + + "@astrojs/starlight": ["@astrojs/starlight@0.37.6", "", { "dependencies": { "@astrojs/markdown-remark": "^6.3.1", "@astrojs/mdx": "^4.2.3", "@astrojs/sitemap": "^3.3.0", "@pagefind/default-ui": "^1.3.0", "@types/hast": "^3.0.4", "@types/js-yaml": "^4.0.9", "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.41.1", "bcp-47": "^2.1.0", "hast-util-from-html": "^2.0.1", "hast-util-select": "^6.0.2", "hast-util-to-string": "^3.0.0", "hastscript": "^9.0.0", "i18next": "^23.11.5", "js-yaml": "^4.1.0", "klona": "^2.0.6", "magic-string": "^0.30.17", "mdast-util-directive": "^3.0.0", "mdast-util-to-markdown": "^2.1.0", "mdast-util-to-string": "^4.0.0", "pagefind": "^1.3.0", "rehype": "^13.0.1", "rehype-format": "^5.0.0", "remark-directive": "^3.0.0", "ultrahtml": "^1.6.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "vfile": "^6.0.2" }, "peerDependencies": { "astro": "^5.5.0" } }, "sha512-wQrKwH431q+8FsLBnNQeG+R36TMtEGxTQ2AuiVpcx9APcazvL3n7wVW8mMmYyxX0POjTnxlcWPkdMGR3Yj1L+w=="], + + "@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="], + + "@astrojs/yaml2ts": ["@astrojs/yaml2ts@0.2.2", "", { "dependencies": { "yaml": "^2.5.0" } }, "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@capsizecss/unpack": ["@capsizecss/unpack@4.0.0", "", { "dependencies": { "fontkitten": "^1.0.0" } }, "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA=="], + + "@ctrl/tinycolor": ["@ctrl/tinycolor@4.2.0", "", {}, "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A=="], + + "@emmetio/abbreviation": ["@emmetio/abbreviation@2.3.3", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA=="], + + "@emmetio/css-abbreviation": ["@emmetio/css-abbreviation@2.1.8", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw=="], + + "@emmetio/css-parser": ["@emmetio/css-parser@0.4.1", "", { "dependencies": { "@emmetio/stream-reader": "^2.2.0", "@emmetio/stream-reader-utils": "^0.1.0" } }, "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ=="], + + "@emmetio/html-matcher": ["@emmetio/html-matcher@1.3.0", "", { "dependencies": { "@emmetio/scanner": "^1.0.0" } }, "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ=="], + + "@emmetio/scanner": ["@emmetio/scanner@1.0.4", "", {}, "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="], + + "@emmetio/stream-reader": ["@emmetio/stream-reader@2.2.0", "", {}, "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="], + + "@emmetio/stream-reader-utils": ["@emmetio/stream-reader-utils@0.1.0", "", {}, "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], + + "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.3", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ=="], + + "@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + + "@expressive-code/core": ["@expressive-code/core@0.41.6", "", { "dependencies": { "@ctrl/tinycolor": "^4.0.4", "hast-util-select": "^6.0.2", "hast-util-to-html": "^9.0.1", "hast-util-to-text": "^4.0.1", "hastscript": "^9.0.0", "postcss": "^8.4.38", "postcss-nested": "^6.0.1", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1" } }, "sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g=="], + + "@expressive-code/plugin-frames": ["@expressive-code/plugin-frames@0.41.6", "", { "dependencies": { "@expressive-code/core": "^0.41.6" } }, "sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg=="], + + "@expressive-code/plugin-shiki": ["@expressive-code/plugin-shiki@0.41.6", "", { "dependencies": { "@expressive-code/core": "^0.41.6", "shiki": "^3.2.2" } }, "sha512-Y6zmKBmsIUtWTzdefqlzm/h9Zz0Rc4gNdt2GTIH7fhHH2I9+lDYCa27BDwuBhjqcos6uK81Aca9dLUC4wzN+ng=="], + + "@expressive-code/plugin-text-markers": ["@expressive-code/plugin-text-markers@0.41.6", "", { "dependencies": { "@expressive-code/core": "^0.41.6" } }, "sha512-PBFa1wGyYzRExMDzBmAWC6/kdfG1oLn4pLpBeTfIRrALPjcGA/59HP3e7q9J0Smk4pC7U+lWkA2LHR8FYV8U7Q=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], + + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], + + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], + + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], + + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], + + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], + + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], + + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], + + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], + + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], + + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], + + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], + + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], + + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], + + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], + + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], + + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], + + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], + + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], + + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], + + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], + + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], + + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], + + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], + + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], + + "@pagefind/darwin-arm64": ["@pagefind/darwin-arm64@1.4.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ=="], + + "@pagefind/darwin-x64": ["@pagefind/darwin-x64@1.4.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A=="], + + "@pagefind/default-ui": ["@pagefind/default-ui@1.4.0", "", {}, "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ=="], + + "@pagefind/freebsd-x64": ["@pagefind/freebsd-x64@1.4.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q=="], + + "@pagefind/linux-arm64": ["@pagefind/linux-arm64@1.4.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw=="], + + "@pagefind/linux-x64": ["@pagefind/linux-x64@1.4.0", "", { "os": "linux", "cpu": "x64" }, "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg=="], + + "@pagefind/windows-x64": ["@pagefind/windows-x64@1.4.0", "", { "os": "win32", "cpu": "x64" }, "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g=="], + + "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.57.1", "", { "os": "android", "cpu": "arm" }, "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.57.1", "", { "os": "android", "cpu": "arm64" }, "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.57.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.57.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.57.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.57.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.57.1", "", { "os": "linux", "cpu": "arm" }, "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.57.1", "", { "os": "linux", "cpu": "arm" }, "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.57.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.57.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.57.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.57.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.57.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.57.1", "", { "os": "linux", "cpu": "x64" }, "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.57.1", "", { "os": "linux", "cpu": "x64" }, "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.57.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.57.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.57.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.57.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.57.1", "", { "os": "win32", "cpu": "x64" }, "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.57.1", "", { "os": "win32", "cpu": "x64" }, "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA=="], + + "@shikijs/core": ["@shikijs/core@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA=="], + + "@shikijs/langs": ["@shikijs/langs@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0" } }, "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA=="], + + "@shikijs/themes": ["@shikijs/themes@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0" } }, "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g=="], + + "@shikijs/types": ["@shikijs/types@3.22.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + + "@types/braces": ["@types/braces@3.0.5", "", {}, "sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w=="], + + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], + + "@types/micromatch": ["@types/micromatch@4.0.10", "", { "dependencies": { "@types/braces": "*" } }, "sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + + "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], + + "@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], + + "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], + + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.56.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/type-utils": "8.56.0", "@typescript-eslint/utils": "8.56.0", "@typescript-eslint/visitor-keys": "8.56.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.56.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.56.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", "@typescript-eslint/typescript-estree": "8.56.0", "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.56.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.56.0", "@typescript-eslint/types": "^8.56.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.0", "", { "dependencies": { "@typescript-eslint/types": "8.56.0", "@typescript-eslint/visitor-keys": "8.56.0" } }, "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.56.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.56.0", "", { "dependencies": { "@typescript-eslint/types": "8.56.0", "@typescript-eslint/typescript-estree": "8.56.0", "@typescript-eslint/utils": "8.56.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.56.0", "", {}, "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.0", "@typescript-eslint/tsconfig-utils": "8.56.0", "@typescript-eslint/types": "8.56.0", "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.56.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", "@typescript-eslint/typescript-estree": "8.56.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.0", "", { "dependencies": { "@typescript-eslint/types": "8.56.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@volar/kit": ["@volar/kit@2.4.28", "", { "dependencies": { "@volar/language-service": "2.4.28", "@volar/typescript": "2.4.28", "typesafe-path": "^0.2.2", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "*" } }, "sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg=="], + + "@volar/language-core": ["@volar/language-core@2.4.28", "", { "dependencies": { "@volar/source-map": "2.4.28" } }, "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ=="], + + "@volar/language-server": ["@volar/language-server@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "@volar/language-service": "2.4.28", "@volar/typescript": "2.4.28", "path-browserify": "^1.0.1", "request-light": "^0.7.0", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw=="], + + "@volar/language-service": ["@volar/language-service@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw=="], + + "@volar/source-map": ["@volar/source-map@2.4.28", "", {}, "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ=="], + + "@volar/typescript": ["@volar/typescript@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw=="], + + "@vscode/emmet-helper": ["@vscode/emmet-helper@2.11.0", "", { "dependencies": { "emmet": "^2.4.3", "jsonc-parser": "^2.3.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.15.1", "vscode-uri": "^3.0.8" } }, "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw=="], + + "@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], + + "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], + + "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], + + "astro": ["astro@5.17.2", "", { "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", "@astrojs/markdown-remark": "6.3.10", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.3.1", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.1.1", "cssesc": "^3.0.0", "debug": "^4.4.3", "deterministic-object-hash": "^2.0.2", "devalue": "^5.6.2", "diff": "^8.0.3", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", "esbuild": "^0.27.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.4.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.1", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.1", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.3", "shiki": "^3.21.0", "smol-toml": "^1.6.0", "svgo": "^4.0.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.3", "unist-util-visit": "^5.0.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^6.4.1", "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", "zod-to-json-schema": "^3.25.1", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "astro.js" } }, "sha512-7jnMqGo53hOQNwo1N/wqeOvUp8wwW/p+DeerSjSkHNx8L/1mhy6P7rVo7EhdmF8DpKqw0tl/B5Fx1WcIzg1ysA=="], + + "astro-eslint-parser": ["astro-eslint-parser@1.3.0", "", { "dependencies": { "@astrojs/compiler": "^2.0.0", "@typescript-eslint/scope-manager": "^7.0.0 || ^8.0.0", "@typescript-eslint/types": "^7.0.0 || ^8.0.0", "astrojs-compiler-sync": "^1.0.0", "debug": "^4.3.4", "entities": "^6.0.0", "eslint-scope": "^8.0.1", "eslint-visitor-keys": "^4.0.0", "espree": "^10.0.0", "fast-glob": "^3.3.3", "is-glob": "^4.0.3", "semver": "^7.3.8" } }, "sha512-aOLc/aDR7lTWAHlytEefwn4Y6qs6uMr69DZvUx2A1AOAZsWhGB/paiRWPtVchh9wzMvLeqr+DkbENhVreVr9AQ=="], + + "astro-expressive-code": ["astro-expressive-code@0.41.6", "", { "dependencies": { "rehype-expressive-code": "^0.41.6" }, "peerDependencies": { "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta" } }, "sha512-l47tb1uhmVIebHUkw+HEPtU/av0G4O8Q34g2cbkPvC7/e9ZhANcjUUciKt9Hp6gSVDdIuXBBLwJQn2LkeGMOAw=="], + + "astrojs-compiler-sync": ["astrojs-compiler-sync@1.1.1", "", { "dependencies": { "synckit": "^0.11.0" }, "peerDependencies": { "@astrojs/compiler": ">=0.27.0" } }, "sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], + + "bcp-47": ["bcp-47@2.1.0", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w=="], + + "bcp-47-match": ["bcp-47-match@2.0.3", "", {}, "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], + + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + + "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + + "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], + + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + + "css-selector-parser": ["css-selector-parser@3.3.0", "", {}, "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g=="], + + "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], + + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], + + "devalue": ["devalue@5.6.2", "", {}, "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], + + "direction": ["direction@2.0.1", "", { "bin": { "direction": "cli.js" } }, "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + + "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], + + "emmet": ["emmet@2.4.11", "", { "dependencies": { "@emmetio/abbreviation": "^2.3.3", "@emmetio/css-abbreviation": "^2.1.8" } }, "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], + + "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], + + "esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], + + "eslint-compat-utils": ["eslint-compat-utils@0.6.5", "", { "dependencies": { "semver": "^7.5.4" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ=="], + + "eslint-plugin-astro": ["eslint-plugin-astro@1.6.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@jridgewell/sourcemap-codec": "^1.4.14", "@typescript-eslint/types": "^7.7.1 || ^8", "astro-eslint-parser": "^1.3.0", "eslint-compat-utils": "^0.6.0", "globals": "^16.0.0", "postcss": "^8.4.14", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "eslint": ">=8.57.0" } }, "sha512-yGIbLHuj5MOUXa0s4sZ6cVhv6ehb+WLF80tsrGaxMk6VTUExruMzubQDzhOYt8fbR1c9vILCCRSCsKI7M1whig=="], + + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], + + "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], + + "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + + "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="], + + "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], + + "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], + + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + + "expressive-code": ["expressive-code@0.41.6", "", { "dependencies": { "@expressive-code/core": "^0.41.6", "@expressive-code/plugin-frames": "^0.41.6", "@expressive-code/plugin-shiki": "^0.41.6", "@expressive-code/plugin-text-markers": "^0.41.6" } }, "sha512-W/5+IQbrpCIM5KGLjO35wlp1NCwDOOVQb+PAvzEoGkW1xjGM807ZGfBKptNWH6UECvt6qgmLyWolCMYKh7eQmA=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], + + "fontace": ["fontace@0.4.1", "", { "dependencies": { "fontkitten": "^1.0.2" } }, "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw=="], + + "fontkitten": ["fontkitten@1.0.2", "", { "dependencies": { "tiny-inflate": "^1.0.3" } }, "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], + + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@16.5.0", "", {}, "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ=="], + + "h3": ["h3@1.15.5", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "hast-util-embedded": ["hast-util-embedded@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA=="], + + "hast-util-format": ["hast-util-format@1.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-minify-whitespace": "^1.0.0", "hast-util-phrasing": "^3.0.0", "hast-util-whitespace": "^3.0.0", "html-whitespace-sensitive-tag-names": "^3.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA=="], + + "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], + + "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], + + "hast-util-has-property": ["hast-util-has-property@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA=="], + + "hast-util-is-body-ok-link": ["hast-util-is-body-ok-link@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ=="], + + "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], + + "hast-util-minify-whitespace": ["hast-util-minify-whitespace@1.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-is-element": "^3.0.0", "hast-util-whitespace": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw=="], + + "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], + + "hast-util-phrasing": ["hast-util-phrasing@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-has-property": "^3.0.0", "hast-util-is-body-ok-link": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ=="], + + "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], + + "hast-util-select": ["hast-util-select@6.0.4", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "bcp-47-match": "^2.0.0", "comma-separated-tokens": "^2.0.0", "css-selector-parser": "^3.0.0", "devlop": "^1.0.0", "direction": "^2.0.0", "hast-util-has-property": "^3.0.0", "hast-util-to-string": "^3.0.0", "hast-util-whitespace": "^3.0.0", "nth-check": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw=="], + + "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], + + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], + + "hast-util-to-mdast": ["hast-util-to-mdast@10.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-phrasing": "^3.0.0", "hast-util-to-html": "^9.0.0", "hast-util-to-text": "^4.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "mdast-util-to-string": "^4.0.0", "rehype-minify-whitespace": "^6.0.0", "trim-trailing-lines": "^2.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ=="], + + "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], + + "hast-util-to-string": ["hast-util-to-string@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A=="], + + "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + + "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + + "html-whitespace-sensitive-tag-names": ["html-whitespace-sensitive-tag-names@3.0.1", "", {}, "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "i18next": ["i18next@23.16.8", "", { "dependencies": { "@babel/runtime": "^7.23.2" } }, "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + + "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + + "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "jsonc-parser": ["jsonc-parser@2.3.1", "", {}, "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "klona": ["klona@2.0.6", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + + "lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], + + "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], + + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], + + "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], + + "mdast-util-directive": ["mdast-util-directive@3.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q=="], + + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], + + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], + + "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], + + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], + + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], + + "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], + + "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], + + "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], + + "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], + + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], + + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], + + "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], + + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], + + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + + "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], + + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], + + "micromark-extension-directive": ["micromark-extension-directive@3.0.2", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "parse-entities": "^4.0.0" } }, "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA=="], + + "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], + + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], + + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], + + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], + + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], + + "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], + + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], + + "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="], + + "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="], + + "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], + + "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="], + + "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], + + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], + + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], + + "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], + + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], + + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], + + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], + + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], + + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], + + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="], + + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], + + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], + + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], + + "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], + + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + + "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + + "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "p-limit": ["p-limit@6.2.0", "", { "dependencies": { "yocto-queue": "^1.1.1" } }, "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + + "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], + + "pagefind": ["pagefind@1.4.0", "", { "optionalDependencies": { "@pagefind/darwin-arm64": "1.4.0", "@pagefind/darwin-x64": "1.4.0", "@pagefind/freebsd-x64": "1.4.0", "@pagefind/linux-arm64": "1.4.0", "@pagefind/linux-x64": "1.4.0", "@pagefind/windows-x64": "1.4.0" }, "bin": { "pagefind": "lib/runner/bin.cjs" } }, "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + + "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], + + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + + "prettier-plugin-astro": ["prettier-plugin-astro@0.14.1", "", { "dependencies": { "@astrojs/compiler": "^2.9.1", "prettier": "^3.0.0", "sass-formatter": "^0.7.6" } }, "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw=="], + + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], + + "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], + + "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], + + "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], + + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], + + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + + "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], + + "rehype-expressive-code": ["rehype-expressive-code@0.41.6", "", { "dependencies": { "expressive-code": "^0.41.6" } }, "sha512-aBMX8kxPtjmDSFUdZlAWJkMvsQ4ZMASfee90JWIAV8tweltXLzkWC3q++43ToTelI8ac5iC0B3/S/Cl4Ql1y2g=="], + + "rehype-format": ["rehype-format@5.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-format": "^1.0.0" } }, "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ=="], + + "rehype-minify-whitespace": ["rehype-minify-whitespace@6.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-minify-whitespace": "^1.0.0" } }, "sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw=="], + + "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], + + "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], + + "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], + + "rehype-remark": ["rehype-remark@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "hast-util-to-mdast": "^10.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ=="], + + "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], + + "remark-directive": ["remark-directive@3.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-directive": "^3.0.0", "micromark-extension-directive": "^3.0.0", "unified": "^11.0.0" } }, "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A=="], + + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], + + "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="], + + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + + "remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], + + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + + "request-light": ["request-light@0.7.0", "", {}, "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], + + "retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], + + "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], + + "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@4.57.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.1", "@rollup/rollup-android-arm64": "4.57.1", "@rollup/rollup-darwin-arm64": "4.57.1", "@rollup/rollup-darwin-x64": "4.57.1", "@rollup/rollup-freebsd-arm64": "4.57.1", "@rollup/rollup-freebsd-x64": "4.57.1", "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", "@rollup/rollup-linux-arm-musleabihf": "4.57.1", "@rollup/rollup-linux-arm64-gnu": "4.57.1", "@rollup/rollup-linux-arm64-musl": "4.57.1", "@rollup/rollup-linux-loong64-gnu": "4.57.1", "@rollup/rollup-linux-loong64-musl": "4.57.1", "@rollup/rollup-linux-ppc64-gnu": "4.57.1", "@rollup/rollup-linux-ppc64-musl": "4.57.1", "@rollup/rollup-linux-riscv64-gnu": "4.57.1", "@rollup/rollup-linux-riscv64-musl": "4.57.1", "@rollup/rollup-linux-s390x-gnu": "4.57.1", "@rollup/rollup-linux-x64-gnu": "4.57.1", "@rollup/rollup-linux-x64-musl": "4.57.1", "@rollup/rollup-openbsd-x64": "4.57.1", "@rollup/rollup-openharmony-arm64": "4.57.1", "@rollup/rollup-win32-arm64-msvc": "4.57.1", "@rollup/rollup-win32-ia32-msvc": "4.57.1", "@rollup/rollup-win32-x64-gnu": "4.57.1", "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "s.color": ["s.color@0.0.15", "", {}, "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA=="], + + "sass-formatter": ["sass-formatter@0.7.9", "", { "dependencies": { "suf-log": "^2.5.3" } }, "sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw=="], + + "sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="], + + "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shiki": ["shiki@3.22.0", "", { "dependencies": { "@shikijs/core": "3.22.0", "@shikijs/engine-javascript": "3.22.0", "@shikijs/engine-oniguruma": "3.22.0", "@shikijs/langs": "3.22.0", "@shikijs/themes": "3.22.0", "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g=="], + + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + + "sitemap": ["sitemap@8.0.2", "", { "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.4.1" }, "bin": { "sitemap": "dist/cli.js" } }, "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ=="], + + "smol-toml": ["smol-toml@1.6.0", "", {}, "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw=="], + + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "starlight-kbd": ["starlight-kbd@0.3.0", "", { "peerDependencies": { "@astrojs/starlight": ">=0.32.0" } }, "sha512-bhG1kWGEXCkuV8pkYW6sWEVmwD2bnpQpVIxq4QDJp7tLsprAbIKnD7RKFCP/QtITfwaVgKq3uMNK0+p4TUAgGg=="], + + "starlight-llms-txt": ["starlight-llms-txt@0.7.0", "", { "dependencies": { "@astrojs/mdx": "^4.3.13", "@types/hast": "^3.0.4", "@types/micromatch": "^4.0.10", "github-slugger": "^2.0.0", "hast-util-select": "^6.0.4", "micromatch": "^4.0.8", "rehype-parse": "^9.0.1", "rehype-remark": "^10.0.1", "remark-gfm": "^4.0.1", "remark-stringify": "^11.0.0", "unified": "^11.0.5", "unist-util-remove": "^4.0.0" }, "peerDependencies": { "@astrojs/starlight": ">=0.31", "astro": "^5.15.9" } }, "sha512-KAay6JLXqB0GiNQ481z3Z/h/y4xeAU55TUGLz+npjxcRvN3h/7rDxjmyLiphZF8xfoqqSTduQPanl5Ct4Je6kA=="], + + "starlight-theme-flexoki": ["starlight-theme-flexoki@0.2.2", "", { "peerDependencies": { "@astrojs/starlight": ">=0.34" } }, "sha512-WIgWwRqK5m1fhzcKJ+dSQ31puY6NW8HoYvSLL3EOPp9QlNXaX2QxjiViR9nIpWUbo3rq+6HqY//WJid19F3QWQ=="], + + "stream-replace-string": ["stream-replace-string@2.0.0", "", {}, "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + + "suf-log": ["suf-log@2.5.3", "", { "dependencies": { "s.color": "0.0.15" } }, "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="], + + "synckit": ["synckit@0.11.12", "", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ=="], + + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], + + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trim-trailing-lines": ["trim-trailing-lines@2.1.0", "", {}, "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + + "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + + "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + + "typesafe-path": ["typesafe-path@0.2.2", "", {}, "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "typescript-auto-import-cache": ["typescript-auto-import-cache@0.3.6", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ=="], + + "typescript-eslint": ["typescript-eslint@8.56.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.56.0", "@typescript-eslint/parser": "8.56.0", "@typescript-eslint/typescript-estree": "8.56.0", "@typescript-eslint/utils": "8.56.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg=="], + + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], + + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], + + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + + "unifont": ["unifont@0.7.4", "", { "dependencies": { "css-tree": "^3.1.0", "ofetch": "^1.5.1", "ohash": "^2.0.11" } }, "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg=="], + + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], + + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + + "unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], + + "unist-util-remove": ["unist-util-remove@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg=="], + + "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], + + "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + + "unstorage": ["unstorage@1.17.4", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.5", "lru-cache": "^11.2.0", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + + "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], + + "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], + + "volar-service-css": ["volar-service-css@0.0.68", "", { "dependencies": { "vscode-css-languageservice": "^6.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q=="], + + "volar-service-emmet": ["volar-service-emmet@0.0.68", "", { "dependencies": { "@emmetio/css-parser": "^0.4.1", "@emmetio/html-matcher": "^1.3.0", "@vscode/emmet-helper": "^2.9.3", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-nHvixrRQ83EzkQ4G/jFxu9Y4eSsXS/X2cltEPDM+K9qZmIv+Ey1w0tg1+6caSe8TU5Hgw4oSTwNMf/6cQb3LzQ=="], + + "volar-service-html": ["volar-service-html@0.0.68", "", { "dependencies": { "vscode-html-languageservice": "^5.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-fru9gsLJxy33xAltXOh4TEdi312HP80hpuKhpYQD4O5hDnkNPEBdcQkpB+gcX0oK0VxRv1UOzcGQEUzWCVHLfA=="], + + "volar-service-prettier": ["volar-service-prettier@0.0.68", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0", "prettier": "^2.2 || ^3.0" }, "optionalPeers": ["@volar/language-service", "prettier"] }, "sha512-grUmWHkHlebMOd6V8vXs2eNQUw/bJGJMjekh/EPf/p2ZNTK0Uyz7hoBRngcvGfJHMsSXZH8w/dZTForIW/4ihw=="], + + "volar-service-typescript": ["volar-service-typescript@0.0.68", "", { "dependencies": { "path-browserify": "^1.0.1", "semver": "^7.6.2", "typescript-auto-import-cache": "^0.3.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-z7B/7CnJ0+TWWFp/gh2r5/QwMObHNDiQiv4C9pTBNI2Wxuwymd4bjEORzrJ/hJ5Yd5+OzeYK+nFCKevoGEEeKw=="], + + "volar-service-typescript-twoslash-queries": ["volar-service-typescript-twoslash-queries@0.0.68", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-NugzXcM0iwuZFLCJg47vI93su5YhTIweQuLmZxvz5ZPTaman16JCvmDZexx2rd5T/75SNuvvZmrTOTNYUsfe5w=="], + + "volar-service-yaml": ["volar-service-yaml@0.0.68", "", { "dependencies": { "vscode-uri": "^3.0.8", "yaml-language-server": "~1.19.2" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-84XgE02LV0OvTcwfqhcSwVg4of3MLNUWPMArO6Aj8YXqyEVnPu8xTEMY2btKSq37mVAPuaEVASI4e3ptObmqcA=="], + + "vscode-css-languageservice": ["vscode-css-languageservice@6.3.9", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA=="], + + "vscode-html-languageservice": ["vscode-html-languageservice@5.6.1", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA=="], + + "vscode-json-languageservice": ["vscode-json-languageservice@4.1.8", "", { "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.16.0", "vscode-nls": "^5.0.0", "vscode-uri": "^3.0.2" } }, "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg=="], + + "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], + + "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], + + "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], + + "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], + + "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], + + "vscode-nls": ["vscode-nls@5.2.0", "", {}, "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="], + + "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], + + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], + + "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], + + "yaml-language-server": ["yaml-language-server@1.19.2", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", "lodash": "4.17.21", "prettier": "^3.5.0", "request-light": "^0.5.7", "vscode-json-languageservice": "4.1.8", "vscode-languageserver": "^9.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.16.0", "vscode-uri": "^3.0.2", "yaml": "2.7.1" }, "bin": { "yaml-language-server": "bin/yaml-language-server" } }, "sha512-9F3myNmJzUN/679jycdMxqtydPSDRAarSj3wPiF7pchEPnO9Dg07Oc+gIYLqXR4L+g+FSEVXXv2+mr54StLFOg=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], + + "yocto-spinner": ["yocto-spinner@0.2.3", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ=="], + + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], + + "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.0", "", {}, "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "boxen/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "boxen/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + + "postcss-nested/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + + "unstorage/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + + "vite/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "vscode-json-languageservice/jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], + + "widest-line/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "yaml-language-server/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + + "yaml-language-server/request-light": ["request-light@0.5.8", "", {}, "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg=="], + + "yaml-language-server/yaml": ["yaml@2.7.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "boxen/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "boxen/string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], + + "p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "unstorage/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + + "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "widest-line/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "widest-line/string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "yaml-language-server/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + } +} diff --git a/website/eslint.config.js b/website/eslint.config.js new file mode 100644 index 00000000..fc3f1ed6 --- /dev/null +++ b/website/eslint.config.js @@ -0,0 +1,12 @@ +import js from '@eslint/js' +import tseslint from 'typescript-eslint' +import eslintPluginAstro from 'eslint-plugin-astro' + +export default [ + js.configs.recommended, + ...tseslint.configs.recommended, + ...eslintPluginAstro.configs.recommended, + { + ignores: ['dist/', '.astro/', 'node_modules/'], + }, +] diff --git a/website/package.json b/website/package.json new file mode 100644 index 00000000..a6fca5aa --- /dev/null +++ b/website/package.json @@ -0,0 +1,40 @@ +{ + "name": "astro-editor-website", + "description": "Documentation website for Astro Editor", + "version": "0.0.1", + "private": true, + "author": "Danny Smith", + "license": "MIT", + "type": "module", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro", + "check": "astro check && tsc --noEmit && bun run lint && bun run format:check", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --write .", + "format:check": "prettier --check ." + }, + "dependencies": { + "@astrojs/starlight": "^0.37.6", + "astro": "^5.6.1", + "zod": "^3.25.76", + "sharp": "^0.34.2", + "starlight-kbd": "^0.3.0", + "starlight-llms-txt": "^0.7.0", + "starlight-theme-flexoki": "^0.2.2" + }, + "devDependencies": { + "@astrojs/check": "^0.9.6", + "@eslint/js": "^9.39.2", + "eslint": "^9.39.2", + "eslint-plugin-astro": "^1.5.0", + "prettier": "^3.7.4", + "prettier-plugin-astro": "^0.14.1", + "typescript": "^5.9.3", + "typescript-eslint": "^8.51.0" + } +} diff --git a/website/prettier.config.js b/website/prettier.config.js new file mode 100644 index 00000000..8c1b459a --- /dev/null +++ b/website/prettier.config.js @@ -0,0 +1,16 @@ +/** @type {import("prettier").Config} */ +export default { + semi: false, + singleQuote: true, + tabWidth: 2, + trailingComma: 'es5', + plugins: ['prettier-plugin-astro'], + overrides: [ + { + files: '*.astro', + options: { + parser: 'astro', + }, + }, + ], +} diff --git a/website/public/CNAME b/website/public/CNAME new file mode 100644 index 00000000..9719c08a --- /dev/null +++ b/website/public/CNAME @@ -0,0 +1 @@ +astroeditor.danny.is diff --git a/website/public/apple-touch-icon.png b/website/public/apple-touch-icon.png new file mode 100644 index 00000000..9632d7b1 Binary files /dev/null and b/website/public/apple-touch-icon.png differ diff --git a/website/public/astro-editor-latest.AppImage b/website/public/astro-editor-latest.AppImage new file mode 100644 index 00000000..6b0a6543 Binary files /dev/null and b/website/public/astro-editor-latest.AppImage differ diff --git a/website/public/astro-editor-latest.dmg b/website/public/astro-editor-latest.dmg new file mode 100644 index 00000000..8b105c16 Binary files /dev/null and b/website/public/astro-editor-latest.dmg differ diff --git a/website/public/astro-editor-latest.msi b/website/public/astro-editor-latest.msi new file mode 100644 index 00000000..40fe68e7 Binary files /dev/null and b/website/public/astro-editor-latest.msi differ diff --git a/website/public/dark-mode.png b/website/public/dark-mode.png new file mode 100644 index 00000000..0d6675fc Binary files /dev/null and b/website/public/dark-mode.png differ diff --git a/website/public/editor-mode.png b/website/public/editor-mode.png new file mode 100644 index 00000000..e4cdca6f Binary files /dev/null and b/website/public/editor-mode.png differ diff --git a/website/public/favicon-16x16.png b/website/public/favicon-16x16.png new file mode 100644 index 00000000..b17274bf Binary files /dev/null and b/website/public/favicon-16x16.png differ diff --git a/website/public/favicon-32x32.png b/website/public/favicon-32x32.png new file mode 100644 index 00000000..cb142127 Binary files /dev/null and b/website/public/favicon-32x32.png differ diff --git a/website/public/favicon.ico b/website/public/favicon.ico new file mode 100644 index 00000000..d558e118 Binary files /dev/null and b/website/public/favicon.ico differ diff --git a/website/public/favicon.png b/website/public/favicon.png new file mode 100644 index 00000000..cb142127 Binary files /dev/null and b/website/public/favicon.png differ diff --git a/website/public/focus-mode.png b/website/public/focus-mode.png new file mode 100644 index 00000000..e4b822eb Binary files /dev/null and b/website/public/focus-mode.png differ diff --git a/website/public/icon.png b/website/public/icon.png new file mode 100644 index 00000000..cbbcd36e Binary files /dev/null and b/website/public/icon.png differ diff --git a/website/public/image-field-in-sidebar.png b/website/public/image-field-in-sidebar.png new file mode 100644 index 00000000..a1dc2f8a Binary files /dev/null and b/website/public/image-field-in-sidebar.png differ diff --git a/website/public/image-preview-hover.png b/website/public/image-preview-hover.png new file mode 100644 index 00000000..6eba173e Binary files /dev/null and b/website/public/image-preview-hover.png differ diff --git a/website/public/mdx-insert-panel.png b/website/public/mdx-insert-panel.png new file mode 100644 index 00000000..771aed87 Binary files /dev/null and b/website/public/mdx-insert-panel.png differ diff --git a/website/public/og-image.png b/website/public/og-image.png new file mode 100644 index 00000000..f2db0f43 Binary files /dev/null and b/website/public/og-image.png differ diff --git a/website/public/overview.png b/website/public/overview.png new file mode 100644 index 00000000..934fc6f2 Binary files /dev/null and b/website/public/overview.png differ diff --git a/website/public/releases/0.1.37-after.png b/website/public/releases/0.1.37-after.png new file mode 100644 index 00000000..b8496b02 Binary files /dev/null and b/website/public/releases/0.1.37-after.png differ diff --git a/website/public/releases/0.1.37-before.png b/website/public/releases/0.1.37-before.png new file mode 100644 index 00000000..28be86a8 Binary files /dev/null and b/website/public/releases/0.1.37-before.png differ diff --git a/website/public/robots.txt b/website/public/robots.txt new file mode 100644 index 00000000..6290bdee --- /dev/null +++ b/website/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://astroeditor.danny.is/sitemap-index.xml diff --git a/website/scripts/generate-release-pages.ts b/website/scripts/generate-release-pages.ts new file mode 100644 index 00000000..fac9b719 --- /dev/null +++ b/website/scripts/generate-release-pages.ts @@ -0,0 +1,266 @@ +#!/usr/bin/env npx tsx +/** + * Generate release pages from GitHub releases. + * + * Usage: + * npx tsx scripts/generate-release-pages.ts [--all] [--dry-run] + * + * Options: + * --all Include all releases (post-1.0.0 are always included; + * pre-1.0.0 are included without prompting) + * --dry-run Print what would be generated without writing files + * + * Without --all, pre-1.0.0 releases are presented for manual approval. + */ + +import { execFileSync, execSync } from 'node:child_process' +import { existsSync, mkdirSync, writeFileSync } from 'node:fs' +import { join } from 'node:path' +import * as readline from 'node:readline' + +const RELEASES_DIR = join(import.meta.dirname, '../src/content/docs/releases') +const IMAGES_DIR = join(import.meta.dirname, '../public/releases') +const REPO = 'dannysmith/astro-editor' + +interface Release { + tagName: string + name: string + publishedAt: string + body: string +} + +// ── Helpers ────────────────────────────────────────────────────────── + +function isPost1_0(tag: string): boolean { + const match = tag.match(/^v?(\d+)\.(\d+)\.(\d+)/) + if (!match) return false + const [, major] = match.map(Number) + return major >= 1 +} + +function versionFromTag(tag: string): string { + return tag.replace(/^v/, '') +} + +function formatDate(iso: string): string { + return iso.split('T')[0] // YYYY-MM-DD +} + +/** + * Escape content for safe MDX rendering: + * - Curly braces in prose (not in code blocks) β†’ HTML entities + * - Strip "Installation Instructions" boilerplate section + * - Strip leading H2 title that duplicates the frontmatter title + * + * NOTE: This logic is duplicated in .github/workflows/publish-website-artifacts.yml + * (the "Generate release page" step). If you change this, update that workflow too + * (and vice versa). + */ +function sanitiseBody(body: string): string { + let text = body + + // Strip the leading "## Astro Editor vX.Y.Z" or "## πŸš€ Astro Editor vX.Y.Z" + text = text.replace(/^##\s*(?:πŸš€\s*)?Astro Editor\s+v[\d.]+\s*\n*/i, '') + + // Strip "Installation Instructions" section and everything after it + text = text.replace(/### Installation Instructions[\s\S]*$/i, '') + + // Strip "Full Changelog" links + text = text.replace(/\*\*Full Changelog\*\*:.*$/gm, '') + + // Escape curly braces outside of code blocks/spans + text = escapeCurlyBraces(text) + + // Trim trailing whitespace + text = text.trimEnd() + + return text +} + +/** + * Escape { and } in prose but leave code blocks and inline code alone. + */ +function escapeCurlyBraces(text: string): string { + const lines = text.split('\n') + let inCodeBlock = false + const result: string[] = [] + + for (const line of lines) { + if (line.trimStart().startsWith('```')) { + inCodeBlock = !inCodeBlock + result.push(line) + continue + } + + if (inCodeBlock) { + result.push(line) + continue + } + + // For non-code lines, escape braces outside of inline code spans + result.push(escapeLineOutsideCode(line)) + } + + return result.join('\n') +} + +function escapeLineOutsideCode(line: string): string { + // Split by inline code spans, supporting multi-backtick delimiters (e.g. `` `code` ``) + const parts = line.split(/(`+[^`]*`+)/) + return parts + .map((part, i) => { + // Odd indices are inside backticks + if (i % 2 === 1) return part + // Escape braces in prose + return part.replace(/\{/g, '{').replace(/\}/g, '}') + }) + .join('') +} + +/** + * Download GitHub user-attachment images to local public/releases/ and rewrite URLs. + */ +function localiseImages(body: string, version: string, dryRun: boolean): string { + const pattern = /https:\/\/github\.com\/user-attachments\/assets\/[a-f0-9-]+/g + const urls = [...new Set(body.match(pattern) || [])] + + if (urls.length === 0) return body + + if (!dryRun) { + mkdirSync(IMAGES_DIR, { recursive: true }) + } + + let result = body + urls.forEach((url, i) => { + const localName = `${version}-${i + 1}.png` + const localPath = join(IMAGES_DIR, localName) + + if (!dryRun) { + execFileSync('curl', ['-sL', '-o', localPath, url]) + console.log(` Downloaded image: ${localName}`) + } else { + console.log(` DRY-RUN would download: ${url} β†’ ${localName}`) + } + + result = result.replaceAll(url, `/releases/${localName}`) + }) + + return result +} + +function generatePage(release: Release): string { + const version = versionFromTag(release.tagName) + const date = formatDate(release.publishedAt) + const body = sanitiseBody(release.body) + const ghUrl = `https://github.com/${REPO}/releases/tag/${release.tagName}` + + const hasContent = body.trim().length > 0 + + return [ + '---', + `title: 'v${version}'`, + `description: 'Astro Editor v${version}'`, + `date: ${date}`, + `slug: 'releases/v${version}'`, + '---', + '', + ...(hasContent ? [body, '', '---', ''] : []), + `[View on GitHub](${ghUrl})`, + '', + ].join('\n') +} + +function ask(question: string): Promise { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }) + return new Promise((resolve) => { + rl.question(question, (answer) => { + rl.close() + resolve(answer.trim().toLowerCase()) + }) + }) +} + +// ── Main ───────────────────────────────────────────────────────────── + +async function main() { + const args = process.argv.slice(2) + const includeAll = args.includes('--all') + const dryRun = args.includes('--dry-run') + + // Fetch all releases (list endpoint doesn't include body) + console.log('Fetching releases from GitHub...') + const json = execSync( + `gh release list --repo ${REPO} --limit 100 --json tagName,name,publishedAt`, + { encoding: 'utf-8' } + ) + const summaries: Omit[] = JSON.parse(json) + + // Fetch bodies individually + console.log(`Found ${summaries.length} releases. Fetching bodies...`) + const releases: Release[] = summaries.map((summary) => { + const body = execSync( + `gh release view "${summary.tagName}" --repo ${REPO} --json body -q .body`, + { encoding: 'utf-8' } + ) + return { ...summary, body } + }) + + // Ensure output directory exists + if (!dryRun) { + mkdirSync(RELEASES_DIR, { recursive: true }) + } + + let generated = 0 + let skipped = 0 + + for (const release of releases) { + const version = versionFromTag(release.tagName) + const filePath = join(RELEASES_DIR, `${version}.mdx`) + + if (existsSync(filePath)) { + console.log(` SKIP ${version} (already exists)`) + skipped++ + continue + } + + const post1 = isPost1_0(release.tagName) + + if (!post1 && !includeAll) { + console.log(`\n── ${release.tagName} (pre-1.0) ──`) + const body = sanitiseBody(release.body) + if (body.trim().length === 0) { + console.log(' (empty body after stripping boilerplate)') + } else { + console.log(body.slice(0, 300)) + if (body.length > 300) console.log(' ...') + } + const answer = await ask(' Include this release? [y/N] ') + if (answer !== 'y') { + console.log(` SKIP ${version}`) + skipped++ + continue + } + } + + release.body = localiseImages(release.body, versionFromTag(release.tagName), dryRun) + const content = generatePage(release) + + if (dryRun) { + console.log(` DRY-RUN would write ${version}.mdx`) + } else { + writeFileSync(filePath, content, 'utf-8') + console.log(` WROTE ${version}.mdx`) + } + generated++ + } + + console.log(`\nDone. Generated: ${generated}, Skipped: ${skipped}`) +} + +main().catch((err) => { + console.error(err) + process.exit(1) +}) diff --git a/website/src/assets/icon.png b/website/src/assets/icon.png new file mode 100644 index 00000000..cbbcd36e Binary files /dev/null and b/website/src/assets/icon.png differ diff --git a/website/src/components/Footer.astro b/website/src/components/Footer.astro new file mode 100644 index 00000000..47ed623f --- /dev/null +++ b/website/src/components/Footer.astro @@ -0,0 +1,39 @@ +--- +import Default from '@astrojs/starlight/components/Footer.astro' +--- + + + + + + diff --git a/website/src/content.config.ts b/website/src/content.config.ts new file mode 100644 index 00000000..f699f94e --- /dev/null +++ b/website/src/content.config.ts @@ -0,0 +1,15 @@ +import { defineCollection } from 'astro:content' +import { docsLoader } from '@astrojs/starlight/loaders' +import { docsSchema } from '@astrojs/starlight/schema' +import { z } from 'astro:content' + +export const collections = { + docs: defineCollection({ + loader: docsLoader(), + schema: docsSchema({ + extend: z.object({ + date: z.coerce.date().optional(), + }), + }), + }), +} diff --git a/website/src/content/docs/command-palette.mdx b/website/src/content/docs/command-palette.mdx new file mode 100644 index 00000000..2178ba9c --- /dev/null +++ b/website/src/content/docs/command-palette.mdx @@ -0,0 +1,33 @@ +--- +title: 'Command Palette' +description: 'The command palette in Astro Editor' +--- + +The command palette provides quick access to all major functions in Astro Editor. It's designed for keyboard-driven workflows. + +**Opening the Palette**: Press `Cmd+P` from anywhere in the application to open the command palette. Start typing immediately to search. + +**Fuzzy Search**: The palette uses intelligent fuzzy matching, so you can type partial words or abbreviations. For example, typing "foc" will find "Toggle Focus Mode". + +## Command Categories + +Commands are organized into logical groups that appear at the top of the search results: + +**File Operations** + +- **New File**: Create a new file in the current collection +- **Save File**: Save the currently open file +- **Close File**: Close the current file + +**Navigation** + +- **Open Collection**: Jump to a different content collection +- **Content Linker**: Open the Content Linker to search, open, or insert links to content items +- **Toggle Sidebar**: Show/hide the left file browser +- **Toggle Frontmatter Panel**: Show/hide the right frontmatter editor + +**Project Management** + +- **Open Project**: Select and open a different Astro project +- **Reload Collections**: Refresh the project's content collections +- **Open in IDE**: Open the current project, collection, or file in your configured IDE. diff --git a/website/src/content/docs/editing/content-linker.mdx b/website/src/content/docs/editing/content-linker.mdx new file mode 100644 index 00000000..e58fedd2 --- /dev/null +++ b/website/src/content/docs/editing/content-linker.mdx @@ -0,0 +1,63 @@ +--- +title: 'Content Linker' +description: 'Insert links to other content items in your collection' +--- + +The Content Linker lets you quickly search across all your content items and either open a file or insert a markdown link to it at your current cursor position. It's especially handy when you're writing and want to cross-reference another piece of content without leaving the editor. + +**Opening the Content Linker**: Press `Cmd+Shift+K` from the editor, or use the command palette (`Cmd+P`) and search for "Content Linker". + +**How it works:** + +1. A search dialog appears showing all content items across every collection in your project +2. Type to filter by title or filename -- the search narrows results as you type +3. Choose what to do with the selected item: + - **Press Enter** to open the file in the editor + - **Press Cmd+Enter** to insert a markdown link at your current cursor position + +The dialog footer shows these actions as a reminder: `Enter` to open, `Cmd+Enter` to insert a link. + +## How Links Are Formatted + +The format of inserted links depends on whether you've configured a URL pattern for the collection. + +**With a URL pattern configured:** + +Links use the pattern you've defined. For example, if your blog collection has a pattern of `/writing/{slug}`: + +```markdown +[My Blog Post](/writing/my-blog-post) +``` + +The `{slug}` placeholder resolves to the content item's frontmatter `slug` field if one exists, or falls back to the item's ID (the filename without extension). + +**Without a URL pattern:** + +Links use a relative file path from the current file to the target: + +```markdown +[My Blog Post](../blog/my-blog-post.md) +``` + +## URL Pattern Configuration + +You can configure a URL pattern for each collection in Collection Settings. The pattern determines how the Content Linker formats links when you insert them. + +**Setting up a URL pattern:** + +1. Open Preferences (`Cmd+,`) +2. Navigate to your collection's settings +3. Find the **Content Links** section +4. Enter a pattern in the **Link URL Pattern** field (e.g., `/blog/{slug}`) + +The `{slug}` placeholder is replaced with the content item's slug when a link is inserted. If the item has a `slug` field in its frontmatter, that value is used. Otherwise, the item's ID (filename without extension) is used. + +**Examples:** + +| Pattern | Slug / ID | Resulting Link Path | +| ----------------- | -------------- | ---------------------- | +| `/blog/{slug}` | `my-first-post`| `/blog/my-first-post` | +| `/writing/{slug}` | `hello-world` | `/writing/hello-world` | +| `/docs/{slug}` | `getting-started` | `/docs/getting-started` | + +If you leave the URL pattern empty, the Content Linker falls back to relative file paths. diff --git a/website/src/content/docs/editing/images-and-files.mdx b/website/src/content/docs/editing/images-and-files.mdx new file mode 100644 index 00000000..84a3c7fc --- /dev/null +++ b/website/src/content/docs/editing/images-and-files.mdx @@ -0,0 +1,16 @@ +--- +title: 'Images & Files' +description: 'Insert and preview images and files in the editor' +--- + +## Image Preview on Hover + +When you're editing in the main editor, you can quickly preview images by holding the Option/Alt key and hovering over any image path or URL. A preview will appear in the bottom right corner of the editor. + +**How it works:** + +- **Remote images**: Any http:// or https:// URL shows a preview +- **Absolute paths**: Paths like `/src/assets/article/image.png` (relative to your project root) +- **Relative paths**: Paths like `./image.png` or `../images/photo.jpg` (resolved relative to the current file) + +**Note**: Preview for relative paths works in most cases but may be unreliable in unusual folder structures. For the most reliable results, use absolute paths from your project root. diff --git a/website/src/content/docs/editing/links.mdx b/website/src/content/docs/editing/links.mdx new file mode 100644 index 00000000..28ce9abf --- /dev/null +++ b/website/src/content/docs/editing/links.mdx @@ -0,0 +1,8 @@ +--- +title: 'Inserting Links' +description: 'Insert and interact with links β€” Cmd+K, paste over text, and clicking links' +--- + +This page will cover inserting links with Cmd+K, pasting over selected text, and clicking links to open them. + +Documentation is coming soon. diff --git a/website/src/content/docs/editing/mdx-components.mdx b/website/src/content/docs/editing/mdx-components.mdx new file mode 100644 index 00000000..1aebd8b9 --- /dev/null +++ b/website/src/content/docs/editing/mdx-components.mdx @@ -0,0 +1,27 @@ +--- +title: 'MDX Components' +description: 'Insert Astro, React, Vue, and Svelte components in MDX files' +--- + +When editing an MDX file, `Cmd+/` will open the component builder. This shows all the components inside your configured `/components/mdx` directory. + +**Framework Support**: The component builder works with components written in multiple frameworks: + +- **Astro** (`.astro` files) +- **React** (`.tsx`, `.jsx` files) +- **Vue** (`.vue` files) +- **Svelte** (`.svelte` files) + +Each component in the list shows a small badge indicating which framework it's written in, along with an icon for quick visual identification. + +**Using the component builder:** + +1. Press `Cmd+/` in any MDX file +2. Browse or search for a component +3. Select a component to see its configuration options +4. Toggle the props you want to include +5. Press `Cmd+Enter` to insert the component into your document + +After insertion, you can tab through the various prop values to fill them in. The component builder automatically detects which props are available by reading the component's source code. + +**Subdirectory Support**: Components can be organized in subdirectories within your MDX components folder. Astro Editor scans recursively and shows all available components regardless of how deeply nested they are. diff --git a/website/src/content/docs/editing/overview.mdx b/website/src/content/docs/editing/overview.mdx new file mode 100644 index 00000000..5eb1c035 --- /dev/null +++ b/website/src/content/docs/editing/overview.mdx @@ -0,0 +1,28 @@ +--- +title: 'Editing Features' +description: 'Overview of editing features β€” basic markdown, headers, and keyboard shortcuts' +--- + +## Editor Keyboard Shortcuts + +Astro Editor includes the following keyboard shortcuts. + +| Shortcut | Action | Description | +| -------------- | ----------------- | ---------------------------------------------------- | +| `Cmd+B` | Bold | Toggle bold formatting for selected text | +| `Cmd+I` | Italic | Toggle italic formatting for selected text | +| `Cmd+K` | Link | Create or edit a link for selected text | +| `Cmd+Shift+K` | Content Linker | Search and insert a link to another content item | +| `Cmd+]` | Indent Right | Indent current line right | +| `Cmd+[` | Indent Left | Indent current line left | +| `Cmd+Z` | Undo | Undo the last edit action | +| `Cmd+Shift+Z` | Redo | Redo the last undo action | +| `Cmd+Shift+T` | Typewriter Mode | Keep cursor line centered in viewport | +| `Cmd+Shift+F` | Toggle Focus Mode | Enable/disable focus writing mode | +| `Opt+Click` | Open URL | Open URL under mouse cursor in browser | +| `Opt+Hover` | Image Preview | Preview image at path/URL under cursor | +| `Opt+Cmd+1` | Heading 1 | Convert current line to H1 | +| `Opt+Cmd+2` | Heading 2 | Convert current line to H2 | +| `Opt+Cmd+3` | Heading 3 | Convert current line to H3 | +| `Opt+Cmd+4` | Heading 4 | Convert current line to H4 | +| `Opt+Cmd+0` | Plain Text | Convert current line to plain paragraph | diff --git a/website/src/content/docs/editor/auto-saving.mdx b/website/src/content/docs/editor/auto-saving.mdx new file mode 100644 index 00000000..a36a7ca3 --- /dev/null +++ b/website/src/content/docs/editor/auto-saving.mdx @@ -0,0 +1,11 @@ +--- +title: 'Auto-Saving' +description: 'How Astro Editor automatically saves your work' +--- + +Astro Editor automatically saves your work with two complementary mechanisms: + +1. **Pause-based save**: Automatically saves your changes after you stop typing (configurable in preferences, default is 2 seconds) +2. **Flow-state backup**: An additional save occurs every 10 seconds while you're actively typing, ensuring content is written to disk during extended writing sessions + +You can manually save at any time using `Cmd+S`. diff --git a/website/src/content/docs/editor/copyedit-modes.mdx b/website/src/content/docs/editor/copyedit-modes.mdx new file mode 100644 index 00000000..570aa5b8 --- /dev/null +++ b/website/src/content/docs/editor/copyedit-modes.mdx @@ -0,0 +1,25 @@ +--- +title: 'Copyedit Modes' +description: 'Syntax highlighting modes for copyediting' +--- + +Copyedit mode highlights different parts of speech in your writing with distinct colors, helping you analyze writing patterns and identify areas for improvement. + +**Parts of Text Highlighted**: + +- **Nouns**: Purple highlighting to identify subjects and objects +- **Verbs**: Blue highlighting to spot action words and tense patterns +- **Adjectives**: Green highlighting to review descriptive language +- **Adverbs**: Orange highlighting to catch potentially unnecessary modifiers +- **Conjunctions**: Red highlighting to see sentence connection patterns + +**Individual Controls**: You can toggle highlighting for specific parts of speech using the command palette. + +**Smart Exclusions**: Highlighting automatically excludes code blocks and markdown syntax, so only your actual prose is analyzed. + +**Writing Use Cases**: + +- Spot overuse of adverbs in your writing +- Check for consistent verb tenses +- Review the density of adjectives in descriptions +- Identify complex sentence structures with many conjunctions diff --git a/website/src/content/docs/editor/focus-mode.mdx b/website/src/content/docs/editor/focus-mode.mdx new file mode 100644 index 00000000..e308c796 --- /dev/null +++ b/website/src/content/docs/editor/focus-mode.mdx @@ -0,0 +1,6 @@ +--- +title: 'Focus Mode' +description: 'Distraction-free writing with focus mode' +--- + +Dims everything but the current sentence (or line for lists). Can be toggled with the πŸ‘οΈ icon in the toolbar. diff --git a/website/src/content/docs/editor/overview.mdx b/website/src/content/docs/editor/overview.mdx new file mode 100644 index 00000000..b253daf0 --- /dev/null +++ b/website/src/content/docs/editor/overview.mdx @@ -0,0 +1,10 @@ +--- +title: 'The Editor' +description: 'Overview of the editor β€” appearance, responsive typography, and hanging headers' +--- + +The editor window shows the entire contents of your markdown or MDX files with the exception of the YAML frontmatter and any JSX `import` lines immediately following the frontmatter. It's designed to provide an extremely clean writing interface, especially when both sidebars are closed. It provides markdown syntax highlighting. + +## Editing Modes + +A number of "modes" can be toggled while writing/editing, which alter how the editor displays your content. These are generally compatible with each other (they can be toggled on and off independently). diff --git a/website/src/content/docs/editor/typewriter-mode.mdx b/website/src/content/docs/editor/typewriter-mode.mdx new file mode 100644 index 00000000..48e1bc2a --- /dev/null +++ b/website/src/content/docs/editor/typewriter-mode.mdx @@ -0,0 +1,12 @@ +--- +title: 'Typewriter Mode' +description: 'Keep your current line centred with typewriter mode' +--- + +Typewriter mode keeps the cursor line vertically centered in the editor at all times. As you type or navigate, the viewport scrolls to keep the cursor in the middle of the visible area, creating an immersive writing experience similar to iA Writer's typewriter mode. + +Toggle it with `Cmd+Shift+T`, or via the command palette ("Toggle Typewriter Mode"). + +Typewriter mode works well alongside Focus Mode β€” enable both for a deeply focused writing experience where your current sentence stays front and center. + +**Note**: Typewriter mode is session-only and resets when you restart the app. diff --git a/website/src/content/docs/file-management/creating-files.mdx b/website/src/content/docs/file-management/creating-files.mdx new file mode 100644 index 00000000..c0b8b8ad --- /dev/null +++ b/website/src/content/docs/file-management/creating-files.mdx @@ -0,0 +1,10 @@ +--- +title: 'Creating Files' +description: 'Create new content files in your collections' +--- + +Use `Cmd+N` or the "New File" button to create a new file. The file is created in the currently active location: + +- If you're in a subdirectory, the file is created there +- If you're at the collection root, the file is created at the root +- The file will have default frontmatter values from your collection schema diff --git a/website/src/content/docs/file-management/drafts.mdx b/website/src/content/docs/file-management/drafts.mdx new file mode 100644 index 00000000..32b57456 --- /dev/null +++ b/website/src/content/docs/file-management/drafts.mdx @@ -0,0 +1,8 @@ +--- +title: 'Drafts' +description: 'Working with drafts and the drafts filter' +--- + +**Draft Detection**: Files are automatically detected as drafts when their `draft` frontmatter field (or configured equivalent) is set to `true`. + +**Draft Filtering**: Use the "Show Drafts Only" toggle in the toolbar to filter the file list to show only draft files. This filter works across all subdirectories within the current collection, making it easy to review all unpublished content. diff --git a/website/src/content/docs/file-management/filtering-and-sorting.mdx b/website/src/content/docs/file-management/filtering-and-sorting.mdx new file mode 100644 index 00000000..6061047b --- /dev/null +++ b/website/src/content/docs/file-management/filtering-and-sorting.mdx @@ -0,0 +1,6 @@ +--- +title: 'Filtering & Sorting' +description: 'Filter and sort your content files' +--- + +**File Ordering**: Files are automatically sorted by their publication date (newest first), using the date field configured in your project settings (defaults to `pubDate`, `date`, or `publishedDate`). Files without dates appear at the top of the list. diff --git a/website/src/content/docs/file-management/ide-integration.mdx b/website/src/content/docs/file-management/ide-integration.mdx new file mode 100644 index 00000000..9269ed9b --- /dev/null +++ b/website/src/content/docs/file-management/ide-integration.mdx @@ -0,0 +1,21 @@ +--- +title: 'IDE Integration' +description: 'Open files in your IDE and use the context menu' +--- + +## Context Menu + +Right-click any file to access additional operations: + +- **Rename**: Edit the filename inline without changing file content +- **Duplicate**: Create a copy of the file with a new name +- **Reveal in Finder**: Open the file's location in the Finder +- **Copy Path**: Copies the file's absolute path to the clipboard + +## Opening in Your IDE + +The "Open in IDE" command launches your preferred code editor with either the current file or the entire project. Configure your IDE command in preferences (`Cmd+,`). Popular options include: + +- `code` for Visual Studio Code +- `cursor` for Cursor +- `subl` for Sublime Text diff --git a/website/src/content/docs/file-management/overview.mdx b/website/src/content/docs/file-management/overview.mdx new file mode 100644 index 00000000..3805bb9a --- /dev/null +++ b/website/src/content/docs/file-management/overview.mdx @@ -0,0 +1,41 @@ +--- +title: 'File Management' +description: 'Overview of the left sidebar β€” collections, file list, and subfolders' +--- + +The left sidebar provides your primary interface for navigating between files and collections in your Astro project. + +## Collections and File Organization + +**Collection Selection**: Click on any collection name to view its files. The currently selected collection is highlighted, and its files appear below. + +**Subfolder Support**: Collections can be organized into subdirectories, and Astro Editor fully supports this structure. When you open a collection, you'll see: + +- **Subdirectories** listed at the top (sorted alphabetically) +- **Files** listed below subdirectories (sorted by date) + +To navigate into a subdirectory, simply click on it. The sidebar header shows breadcrumb navigation so you always know where you are. + +**Breadcrumb Navigation**: When you're inside a subdirectory, the header shows a breadcrumb trail. Click any segment to jump to that level: + +``` +Articles / 2024 / January +``` + +- Click "Articles" to return to the collection root +- Click "2024" to go up one level +- "January" shows your current location (not clickable) + +**Back Navigation**: The back button is context-aware: + +- In a subdirectory: Goes up one level +- At collection root: Returns to collections list +- Use it to quickly navigate up the hierarchy + +**File Ordering**: Files are automatically sorted by their publication date (newest first), using the date field configured in your project settings (defaults to `pubDate`, `date`, or `publishedDate`). Files without dates appear at the top of the list. + +**File Display**: Each file shows: + +- **Title**: Taken from the `title` frontmatter field, or the filename if no title exists +- **Date**: Publication date in a readable format (e.g., "Dec 15, 2023") +- **Draft Badge**: Yellow "Draft" indicator for files marked as drafts diff --git a/website/src/content/docs/frontmatter/basic-fields.mdx b/website/src/content/docs/frontmatter/basic-fields.mdx new file mode 100644 index 00000000..c6a10777 --- /dev/null +++ b/website/src/content/docs/frontmatter/basic-fields.mdx @@ -0,0 +1,49 @@ +--- +title: 'Basic Field Types' +description: 'Basic frontmatter field types and nested fields' +--- + +## How Schema Fields Become Forms + +Astro Editor converts schema definitions into appropriate form controls. The mapping works as follows: + +| Zod Schema Type | Form Control | Behavior | +| ------------------------- | ----------------- | ------------------------------------------ | +| `z.string()` | Single-line input | Standard text input | +| `z.string().optional()` | Single-line input | Empty field allowed, no validation | +| `z.enum(['a', 'b', 'c'])` | Dropdown select | Shows all enum options | +| `z.boolean()` | Toggle switch | True/false with visual switch | +| `z.date()` | Date picker | Native date selection widget | +| `z.number()` | Number input | Numeric validation and steppers | +| `z.array(z.string())` | Tag input | Add/remove tags with keyboard | +| `z.reference('authors')` | Dropdown select | Select from another collection (see below) | +| `image()` | Image picker | File picker with preview (see below) | +| `z.object({ ... })` | Grouped fields | Nested fields in a fieldset (see below) | + +## Nested Object Fields + +When your schema includes nested objects, the frontmatter sidebar groups the related fields together for better organization. + +**In your schema:** + +```typescript +const blog = defineCollection({ + schema: z.object({ + metadata: z.object({ + category: z.string(), + priority: z.number().optional(), + deadline: z.date().optional(), + }), + }), +}) +``` + +**In the frontmatter sidebar:** + +Nested object fields are displayed in a fieldset with: + +- A header showing the object name (e.g., "Metadata") +- Indentation and a left border for visual grouping +- All nested fields rendered with their appropriate controls + +This makes it easy to see which fields belong together and maintains the logical structure of your content. diff --git a/website/src/content/docs/frontmatter/examples.mdx b/website/src/content/docs/frontmatter/examples.mdx new file mode 100644 index 00000000..c0ccdea6 --- /dev/null +++ b/website/src/content/docs/frontmatter/examples.mdx @@ -0,0 +1,8 @@ +--- +title: 'Examples' +description: 'Example schemas and how they render in Astro Editor' +--- + +This page will show example schemas and how they render in the frontmatter sidebar. + +Documentation is coming soon. diff --git a/website/src/content/docs/frontmatter/image-fields.mdx b/website/src/content/docs/frontmatter/image-fields.mdx new file mode 100644 index 00000000..a06ff794 --- /dev/null +++ b/website/src/content/docs/frontmatter/image-fields.mdx @@ -0,0 +1,52 @@ +--- +title: 'Image Fields' +description: 'How image fields work in the frontmatter sidebar' +--- + +Image fields use Astro's special `image()` helper to handle images in your content collections. The frontmatter sidebar provides a complete image management experience. + +**In your schema:** + +```typescript +import { defineCollection, z } from 'astro:content' + +const blog = defineCollection({ + schema: ({ image }) => z.object({ + cover: image().optional(), + thumbnail: image(), + }), +}) +``` + +**In the frontmatter sidebar:** + +When you have an image field, you'll see: + +- **Current image preview**: A small thumbnail of the current image (if one is set) +- **Current path**: The path to the image file, displayed as text +- **File picker button**: Click to browse and select an image, or drag and drop an image directly onto the button +- **Edit button**: Click to switch to a text input field where you can manually type or paste a path directly +- **Clear button**: Remove the current image + +## How Image Copying Works + +When you select or drag an image into an image field, Astro Editor: + +1. Copies the image to your collection's configured assets directory +2. Renames it following the same pattern as the current file (YYYY-MM-DD-name.ext) +3. Updates the frontmatter with a **relative path** to the copied image (default behavior) +4. Shows a preview immediately + +## Path Configuration + +- **Default behavior**: Images use relative paths (e.g., `./image.png`), making your content more portable +- **Override option**: Configure absolute paths (relative to project root) on a per-project or per-collection basis in preferences +- This applies to both image fields in frontmatter and images dragged into the editor + +## Special Cases + +- If the image is already inside your Astro project's directory structure, it's not copied - Astro Editor uses the path as-is +- Manual path editing (via the edit button) allows you to reference images that are already in place +- Image paths are validated - you'll see an error if the path doesn't exist or is outside your project + +**Known limitation**: Image fields nested inside object fields (like `metadata.image: image()`) currently show as text fields. This is a known issue that will be fixed in a future release. diff --git a/website/src/content/docs/frontmatter/overview.mdx b/website/src/content/docs/frontmatter/overview.mdx new file mode 100644 index 00000000..60cbb8c6 --- /dev/null +++ b/website/src/content/docs/frontmatter/overview.mdx @@ -0,0 +1,39 @@ +--- +title: 'Frontmatter & Schemas' +description: 'Overview of the right sidebar β€” how schemas and frontmatter are parsed and displayed' +--- + +The frontmatter sidebar automatically generates editing forms based on your Astro content collection schemas. This means you get proper validation, appropriate input types, and a clean editing experience without any manual configuration. + +## How Schema Parsing Works + +Astro Editor uses a flexible multi-source approach to read your content collection schemas, ensuring maximum compatibility with different Astro project setups. + +**Primary Method: JSON Schema Files** (Recommended) + +Astro Editor first looks for JSON schema files in your project. These can be in two locations: + +1. **Astro-generated schemas**: Files in `.astro/collections/` directory (like `blog.schema.json`) +2. **Custom schema files**: `content.config.json` or `content/config.json` in your project root + +To ensure Astro-generated files are available: + +1. Run `pnpm run dev` or `astro sync` in your project directory +2. Astro will automatically generate schema files in `.astro/collections/` +3. Astro Editor reads these schemas and builds the frontmatter forms + +**Support for Schema Imports** + +Astro Editor supports `content.config.json` files that import schemas from other sources. This is particularly useful for sites using frameworks like [Starlight](https://starlight.astro.build/), which provide their own schema definitions. If your project imports schemas rather than defining them inline, Astro Editor can still read and use them. + +**Fallback Method: Zod Schema Parsing** + +If JSON schema files aren't found, Astro Editor falls back to parsing your Zod schema definitions directly from `src/content/config.ts` or `src/content.config.ts`. This works for most cases but has limitations with complex schemas, dynamically built schemas, or third-party schema definitions. + +**Best Practice**: Always run `astro sync` after modifying your content collection schemas to ensure Astro Editor has the latest field definitions. + +## Field Order and Defaults + +Fields appear in the sidebar in the same order they're defined in your Zod schema. When you create a new file, any default values specified in your schema are automatically applied in the panel. + +The frontmatter is written to your file in the same order it's shown in the schema, with any non-schema fields shown in alphabetical order by field name. diff --git a/website/src/content/docs/frontmatter/reference-fields.mdx b/website/src/content/docs/frontmatter/reference-fields.mdx new file mode 100644 index 00000000..3b90f882 --- /dev/null +++ b/website/src/content/docs/frontmatter/reference-fields.mdx @@ -0,0 +1,24 @@ +--- +title: 'Reference Fields' +description: 'How reference fields work in the frontmatter sidebar' +--- + +Reference fields let you link content collection entries together. For example, you might have an `authors` collection and want to reference an author from your blog posts. + +**In your schema:** + +```typescript +const blog = defineCollection({ + schema: z.object({ + author: z.reference('authors'), // Single reference + contributors: z.array(z.reference('authors')), // Multiple references + }), +}) +``` + +**In the frontmatter sidebar:** + +- Single references (`z.reference()`) show as a dropdown where you can select one item from the referenced collection +- Array references (`z.array(z.reference())`) show as a multi-select or tag input where you can select multiple items + +**What gets displayed:** The dropdown shows the `name` field from each referenced item, or falls back to the `id` if no name field exists. This works for both markdown-based collections and data file collections (like `authors.json`). diff --git a/website/src/content/docs/frontmatter/required-fields.mdx b/website/src/content/docs/frontmatter/required-fields.mdx new file mode 100644 index 00000000..f16e6ae9 --- /dev/null +++ b/website/src/content/docs/frontmatter/required-fields.mdx @@ -0,0 +1,24 @@ +--- +title: 'Required Fields & Descriptions' +description: 'How required fields and field descriptions are displayed' +--- + +## Field Descriptions + +When you add descriptions to your schema fields, they appear in the frontmatter sidebar to guide your editing. Any field using `.describe()` in your schema will display that description below the input field in gray text. This is helpful for explaining what the field is for or providing usage examples. + +```typescript +title: z.string().describe('The main heading for your article') +``` + +## Field Constraints + +Character limits, min/max values, and other constraints from your schema are enforced in the form. For example: + +- `z.string().min(10).max(100)` - Shows character counter and prevents saving if out of range +- `z.number().min(1).max(10)` - Number input with validation +- `z.string().length(50)` - Enforces exact length + +## Required Fields + +Required schema fields show an asterisk (\*) next to their label and prevent saving if empty. diff --git a/website/src/content/docs/frontmatter/special-fields.mdx b/website/src/content/docs/frontmatter/special-fields.mdx new file mode 100644 index 00000000..4fb8a529 --- /dev/null +++ b/website/src/content/docs/frontmatter/special-fields.mdx @@ -0,0 +1,10 @@ +--- +title: 'Special Fields' +description: 'Special frontmatter fields β€” title and description' +--- + +**Title Fields**: If your schema has a field named `title` (or configured in project settings), it renders as a larger, bold textarea that automatically expands as you type. Title fields always appear first in the panel, regardless of their position in the schema. + +**Description Fields**: Fields named `description` get a multi-line textarea that grows based on content length. + +**Required Fields**: Required schema fields show an asterisk (\*) next to their label and prevent saving if empty. diff --git a/website/src/content/docs/getting-started.mdx b/website/src/content/docs/getting-started.mdx new file mode 100644 index 00000000..c5fe0857 --- /dev/null +++ b/website/src/content/docs/getting-started.mdx @@ -0,0 +1,35 @@ +--- +title: 'Getting Started' +description: 'Introduction to Astro Editor and an overview of the main window' +--- + +Astro Editor provides a clean, pleasant user experience for authoring and editing [Markdown](https://www.markdownguide.org/) & [MDX](https://mdxjs.com/) files in the content collections of local [Astro](https://astro.build/) sites. + +## Quick Start + +Getting started with Astro Editor takes just a few steps. The application is designed to work with existing Astro projects that use content collections. + +1. **Open an Astro Project**: Use `File > Open Project` to select your Astro project directory. Astro Editor will automatically scan for content collections defined in your `src/content/config.ts` or `src/content.config.ts` file. + +2. **Select a Collection**: Once your project opens, you'll see your content collections listed in the left sidebar. Click on any collection name to view the files it contains. + +3. **Open a File**: Click on any markdown or MDX file in the file list to open it in the main editor. The editor will show your content without the frontmatter, which appears in the right sidebar. + +4. **Start Writing**: Begin editing. Your changes are automatically saved every 2 seconds, and you can manually save anytime with `Cmd+S`. + +5. **Edit Frontmatter**: Use the right sidebar to edit metadata fields. These forms are automatically generated from your Astro content collection schemas. + +That's it. Astro Editor handles project discovery, file management, and frontmatter editing automatically based on your existing Astro setup. + +## Interface Overview + +Astro Editor uses a clean three-panel layout designed to minimize distractions while providing easy access to files and metadata: + +| Interface Area | Purpose | +| ----------------- | ---------------------------------------------------------------------------- | +| **Left Sidebar** | Browse collections and files, with draft indicators and context menu options | +| **Main Editor** | Clean writing space with markdown syntax highlighting | +| **Right Sidebar** | Dynamic frontmatter forms generated from your Astro collection schemas | +| **Top Bar** | Project name, window controls, and menu access | + +Both sidebars can be hidden using `Cmd+1` (left) and `Cmd+2` (right) for distraction-free writing. The panels remember their sizes and visibility between sessions. diff --git a/website/src/content/docs/getting-started/concepts.mdx b/website/src/content/docs/getting-started/concepts.mdx new file mode 100644 index 00000000..9feda126 --- /dev/null +++ b/website/src/content/docs/getting-started/concepts.mdx @@ -0,0 +1,17 @@ +--- +title: 'Fundamental Concepts' +description: 'Core concepts behind Astro Editor β€” content collections, schemas, and frontmatter' +--- + +## Astro Requirements + +Astro Editor will only work properly with Astro projects which: + +- Are using Astro 5+ _(it might work with Astro 4+ but you should expect a few bugs)_ +- Use Astro [Content Collections](https://docs.astro.build/en/guides/content-collections/) and have a `src/content/config.ts` or `src/content.config.ts` file. +- Have at least one collection defined with `defineCollection`. It **must** use the `glob` loader and have a `schema`. +- Have all collections in a single directory: `src/content/[collectionname]` + +Content collections can contain non-markdown/MDX files, but they will not be shown in the editor. + +Some features require you to have certain properties in your schema. A date field is required for proper ordering in the file list. A boolean field is required to show and filter drafts. A text field is required to show titles in the sidebar. Etc. diff --git a/website/src/content/docs/getting-started/example.mdx b/website/src/content/docs/getting-started/example.mdx new file mode 100644 index 00000000..f1b46522 --- /dev/null +++ b/website/src/content/docs/getting-started/example.mdx @@ -0,0 +1,23 @@ +--- +title: 'A Simple Example' +description: 'A walkthrough example showing a schema, file tree, and file in the editor' +--- + +By default, Astro Editor expects the following structure in your Astro project: + +``` +my-astro-site +└── src + β”œβ”€β”€ assets + β”‚ └── mycollection + β”‚ └── image1.png + β”œβ”€β”€ content + β”‚ └── mycollection + β”‚ └── blog-post.mdx + β”œβ”€β”€ components + β”‚ └── mdx + β”‚ └── ExampleAstroComponent.astro + └── content.config.ts +``` + +The paths to the _Assets_, _Content_, and _MDX Components_ directories (relative to the project root) are configurable per project and per collection (see [Preferences](/preferences/general/)). diff --git a/website/src/content/docs/getting-started/installation.mdx b/website/src/content/docs/getting-started/installation.mdx new file mode 100644 index 00000000..ad7e05ae --- /dev/null +++ b/website/src/content/docs/getting-started/installation.mdx @@ -0,0 +1,8 @@ +--- +title: 'Installation' +description: 'Install Astro Editor on macOS, Windows, or Linux' +--- + +This page will cover installing Astro Editor on each supported platform. + +Documentation is coming soon. diff --git a/website/src/content/docs/getting-started/opening-a-project.mdx b/website/src/content/docs/getting-started/opening-a-project.mdx new file mode 100644 index 00000000..c251cfc7 --- /dev/null +++ b/website/src/content/docs/getting-started/opening-a-project.mdx @@ -0,0 +1,10 @@ +--- +title: 'Opening a Project' +description: 'How to open an Astro project and configure common path overrides' +--- + +Use `File > Open Project` to select your Astro project directory. Astro Editor will automatically scan for content collections defined in your `src/content/config.ts` or `src/content.config.ts` file. + +## Directory Restrictions + +For security reasons, Astro Editor cannot open projects located in certain system directories. If you attempt to open a project in one of these locations, you'll see an error message asking you to choose a different location. diff --git a/website/src/content/docs/philosophy.mdx b/website/src/content/docs/philosophy.mdx new file mode 100644 index 00000000..2b0a8a04 --- /dev/null +++ b/website/src/content/docs/philosophy.mdx @@ -0,0 +1,22 @@ +--- +title: 'Philosophy' +description: 'Why Astro Editor exists and the core principles behind it' +--- + +Most folks who publish content with Astro work in two distinct _modes_. We're in **coder mode** when we're editing Astro components, pages, CSS etc. This is best done in a _coding tool_ like VSCode. We're in **writer mode** when we're writing or editing prose in markdown. Editors designed for coding are not well suited to this - they have too many distractions and lack the kinds of tools which help with writing and editing prose. + +Because of this, it's common for folks to **write** in tools like iA Writer or Obsidian and then switch to VSCode to add frontmatter, build and publish. The workflow often looks something like this: + +1. Create a new draft markdown file & start writing +2. Edit and tweak (maybe over a number of sessions) +3. Add frontmatter for things like description, tags etc +4. Build & run locally to check everything works +5. Push to github and deploy/publish + +Steps 1-3 are very much _writer mode_ tasks, while 4 & 5 are definitely _coder mode_ tasks. Astro Editor is only concerned with the former, which means: + +- Code blocks are not syntax highlighted. If you have code examples in your files you're better off authoring them in a coding tool which can properly lint, format and check your code examples. +- There's no mechanism for committing or publishing in Astro Editor. You should do that in a code editor or terminal. +- There's no way to preview your writing. The best way to do that is by running your astro site locally with `pnpm run dev` and looking at it there. + +Because the goal of this **simplicity when in writer mode**, Astro Editor is intentionally opinionated about its UI and limits the user customisation features to _"making it work with your Astro project and no more"_. It's not possible to customise the colour schemes, typeface etc. If you need fine-grained customization & extensibility we recommend using a custom profile in VSCode (or Obsidian) which you've set up for Markdown editing. diff --git a/website/src/content/docs/preferences/advanced.mdx b/website/src/content/docs/preferences/advanced.mdx new file mode 100644 index 00000000..1666b705 --- /dev/null +++ b/website/src/content/docs/preferences/advanced.mdx @@ -0,0 +1,8 @@ +--- +title: 'Advanced Preferences' +description: 'The Advanced pane in Astro Editor preferences' +--- + +This page will cover the Advanced preferences pane. + +Documentation is coming soon. diff --git a/website/src/content/docs/preferences/collections.mdx b/website/src/content/docs/preferences/collections.mdx new file mode 100644 index 00000000..a36ffa73 --- /dev/null +++ b/website/src/content/docs/preferences/collections.mdx @@ -0,0 +1,53 @@ +--- +title: 'Collections Preferences' +description: 'The Collections pane in Astro Editor preferences' +--- + +You can configure settings for individual collections, allowing different collections to have different paths and field mappings. This is useful when different parts of your site have different structures. + +## When to Use Collection Settings + +- Blog posts in `content/blog/` while docs remain in `src/content/docs/` +- Different collections using different field names (e.g., blog uses `publishDate`, docs use `date`) +- Collection-specific asset directories (e.g., blog images in `public/blog-images/`) + +## Path Overrides (per collection) + +- **Content Directory**: Where this collection's files are located (absolute path from project root) + - Example: `content/blog/` means files are in `/content/blog/`, not `/src/content/blog/` +- **Assets Directory**: Where this collection's assets should be copied (absolute path from project root) + - Example: `public/blog-images/` for blog, `public/docs-images/` for docs +- **MDX Components Directory**: Where this collection's MDX components are located + - Example: `src/components/blog/` for blog-specific components + +## File Defaults (per collection) + +- **Default File Type for New Files**: Override the project/global default for newly created files in this collection. Useful when one collection uses MDX while others use Markdown. + - Example: Blog collection uses `.mdx` for interactive components, docs collection uses `.md` for simple content + +## Image Path Strategy (per collection) + +- **Use Relative Paths for Images**: By default, images dragged into the editor or added to image fields use relative paths (e.g., `./image.png`), making content more portable. Disable this option to use absolute paths (relative to project root, e.g., `/src/assets/image.png`) instead. + - Can be configured at project level (applies to all collections) or per collection (overrides project setting) + - Useful when different collections have different portability requirements + +## Content Links (per collection) + +- **Link URL Pattern**: Define the URL pattern used when inserting links via the Content Linker. Enter a pattern like `/blog/{slug}` where `{slug}` is replaced with the content item's slug or ID. When set, the Content Linker uses this pattern to create clean URLs (e.g., `[My Post](/blog/my-post)`). When left empty, links use relative file paths instead. + +## Frontmatter Field Mappings (per collection) + +- **Title Field**: Which field to use for file titles in sidebar (e.g., `title` or `heading`) +- **Date Field**: Which field(s) to use for sorting files (e.g., `publishDate` or `["pubDate", "date"]`) +- **Description Field**: Which field to style as a textarea (e.g., `description` or `summary`) +- **Draft Field**: Which boolean field indicates draft status (e.g., `draft` or `published`) + +## How Settings Work (Three-Tier Fallback) + +When Astro Editor needs a setting (like content directory), it looks in this order: + +1. **Collection setting** (if configured for this collection) +2. **Project setting** (if configured at project level) +3. **Hard-coded default** (built into the app) + +**Example**: If you set project content directory to `content/`, all collections use `content/`. But if you configure the "blog" collection to use `content/blog-posts/`, only the blog collection uses that path while other collections still use `content/`. diff --git a/website/src/content/docs/preferences/general.mdx b/website/src/content/docs/preferences/general.mdx new file mode 100644 index 00000000..c84bd6cb --- /dev/null +++ b/website/src/content/docs/preferences/general.mdx @@ -0,0 +1,24 @@ +--- +title: 'General Preferences' +description: 'The General pane in Astro Editor preferences' +--- + +Access global preferences through `Cmd+,` or the application menu. These settings apply across all projects: + +**Theme**: Choose between light mode, dark mode, or system theme (follows macOS setting). + +**Heading Colors**: Customize the color of markdown headings in the editor. Separate color pickers for dark theme and light theme allow you to personalize your writing environment while maintaining good contrast in both modes. + +**IDE Command**: Configure the command used for "Open in IDE" functionality. Common values: + +- `code` for Visual Studio Code +- `cursor` for Cursor +- `subl` for Sublime Text + +**Auto-save Delay**: Configure how frequently Astro Editor automatically saves your work (default is 2 seconds). + +**Default File Type for New Files**: Choose whether newly created files use Markdown (`.md`) or MDX (`.mdx`) format. Applies across all projects unless overridden at the project or collection level. + +**Copyedit Highlighting**: Choose which parts of speech to highlight in copyedit mode. + +**Important**: Global settings contain ONLY truly global preferences (theme, IDE command, copyedit highlights, auto-save delay, default file type). There are no global defaults for project or collection settings. diff --git a/website/src/content/docs/preferences/project.mdx b/website/src/content/docs/preferences/project.mdx new file mode 100644 index 00000000..201c745c --- /dev/null +++ b/website/src/content/docs/preferences/project.mdx @@ -0,0 +1,29 @@ +--- +title: 'Project Preferences' +description: 'The Project pane in Astro Editor preferences' +--- + +Each project has its own settings that apply to the entire project. Access project settings through the preferences panel (only visible when a project is open). + +## Path Overrides + +Customize directory locations if your project uses non-standard paths: + +- **Content Directory**: Default is `src/content/`, but you might use `content/` or `docs/` +- **Assets Directory**: Default is `src/assets/`, useful for projects using `public/images/` or `static/` +- **MDX Components Directory**: Default is `src/components/mdx/`, can be changed if your components are elsewhere + +Project-level path overrides apply to all collections unless a collection has its own override. + +## File Defaults + +- **Default File Type for New Files**: Override the global default for newly created files in this project. Choose between Markdown (`.md`) or MDX (`.mdx`), or inherit the global setting. + +## Field Mappings + +Configure which fields Astro Editor should use for common purposes: + +- **Title Field**: Which field to display as the title in the file list (default: `title`) +- **Date Field**: Which field(s) to use for sorting files by date (e.g., `pubDate`, `date`, or `publishedDate`) +- **Description Field**: Which field should render as a multi-line textarea (default: `description`) +- **Draft Field**: Which boolean field indicates draft status (default: `draft`) diff --git a/website/src/content/docs/privacy.mdx b/website/src/content/docs/privacy.mdx new file mode 100644 index 00000000..da3b79fe --- /dev/null +++ b/website/src/content/docs/privacy.mdx @@ -0,0 +1,105 @@ +--- +title: "Privacy Policy" +description: "How Astro Editor handles your data" +sidebar: + hidden: true +--- + +**Last updated:** February 2025 + +This privacy policy explains how Astro Editor ("we", "us", "our") collects, uses, and protects information when you use our website and desktop application. We are committed to protecting your privacy and being transparent about our data practices. + +## Data Controller + +Astro Editor is operated by Danny Smith, based in the United Kingdom. For any privacy-related queries, contact [hi@danny.is](mailto:hi@danny.is). + +## Summary + +Astro Editor stores all your data locally on your device. We don't collect, store, or transmit your content, projects, or personal information. The only data processing occurs through privacy-friendly website analytics. + +## What We Collect + +### Website Analytics + +This website uses [Simple Analytics](https://simpleanalytics.com/) to understand how visitors use the documentation. Simple Analytics is a privacy-first analytics provider that: + +- **Does not use cookies** or similar tracking technologies +- **Does not collect personal data** or IP addresses +- **Does not track individuals** or create user profiles +- **Is fully GDPR, UK GDPR, and PECR compliant** by design +- Stores data on EU-based infrastructure + +Because Simple Analytics does not collect personal data or use cookies, no consent banner is required under UK PECR regulations. + +The aggregate data collected includes: +- Page views and referral sources +- General geographic region (country level only) +- Device type and browser (non-identifying) + +### Desktop App + +Astro Editor is a native desktop application that is entirely offline and privacy-respecting: + +- All data is stored as local files on your device +- No data is transmitted to external servers +- No usage analytics or telemetry is collected +- No user account or registration is required +- No internet connection is needed to use the app + +## Legal Basis for Processing + +Under the UK General Data Protection Regulation (UK GDPR), we rely on **legitimate interests** (Article 6(1)(f)) as our legal basis for processing the limited, non-personal website analytics data. Our legitimate interest is to understand aggregate website usage to improve our documentation and services. + +## Data Sharing + +We do not sell, trade, or share your personal data with third parties. The only third-party service we use is Simple Analytics for website statistics, which processes only anonymous, aggregate data. + +## Data Retention + +- **Website analytics**: Aggregate statistics are retained by Simple Analytics for as long as our account is active +- **Local app data**: Stored indefinitely on your device under your controlβ€”you can delete it at any time + +## Your Rights + +Under the UK GDPR, you have the following rights regarding your personal data: + +- **Right of access** – Request a copy of data we hold about you +- **Right to rectification** – Request correction of inaccurate data +- **Right to erasure** – Request deletion of your data +- **Right to restrict processing** – Request limitation of how we use your data +- **Right to data portability** – Receive your data in a portable format +- **Right to object** – Object to processing based on legitimate interests +- **Right to withdraw consent** – Where processing is based on consent + +Since we collect no personal data through our products and only anonymous aggregate data through website analytics, these rights have limited practical application. However, if you have any concerns, please contact us. + +## Cookies + +**This website does not use cookies.** + +Simple Analytics is specifically designed to work without cookies or any form of local storage that would require consent under UK PECR (Privacy and Electronic Communications Regulations 2003). + +## Children's Privacy + +Our products are not directed at children under 13, and we do not knowingly collect personal data from children. + +## Changes to This Policy + +We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date. We encourage you to review this policy periodically. + +## Complaints + +If you have concerns about how we handle your data, please contact us first at [hi@danny.is](mailto:hi@danny.is). + +You also have the right to lodge a complaint with the UK Information Commissioner's Office (ICO): + +- **Website**: [ico.org.uk](https://ico.org.uk/) +- **Helpline**: 0303 123 1113 +- **Address**: Information Commissioner's Office, Wycliffe House, Water Lane, Wilmslow, Cheshire, SK9 5AF + +## Contact + +For any questions about this privacy policy or our data practices: + +- **Email**: [hi@danny.is](mailto:hi@danny.is) +- **GitHub**: [github.com/dannysmith/astro-editor](https://github.com/dannysmith/astro-editor) diff --git a/website/src/content/docs/reference/advanced-preferences.mdx b/website/src/content/docs/reference/advanced-preferences.mdx new file mode 100644 index 00000000..c4295b84 --- /dev/null +++ b/website/src/content/docs/reference/advanced-preferences.mdx @@ -0,0 +1,16 @@ +--- +title: 'Advanced Preferences & Project Store' +description: 'Reference for preferences JSON files and the project store' +--- + +## Settings Storage + +Settings are automatically saved to your system: + +- **Location**: `~/Library/Application Support/is.danny.astroeditor/` +- **Global Settings**: Theme, IDE command, and other app-wide preferences +- **Project Registry**: Remembers all opened projects and their metadata +- **Project Files**: Individual settings files for each project (includes collection overrides) +- **Auto-Recovery**: Settings persist across app restarts and crashes + +Projects are identified by their `package.json` name and automatically migrate if you move the project folder. diff --git a/website/src/content/docs/reference/keyboard-shortcuts.mdx b/website/src/content/docs/reference/keyboard-shortcuts.mdx new file mode 100644 index 00000000..c2fcb40a --- /dev/null +++ b/website/src/content/docs/reference/keyboard-shortcuts.mdx @@ -0,0 +1,101 @@ +--- +title: 'Keyboard Shortcuts' +description: 'Full list of keyboard shortcuts in Astro Editor' +--- + +import { Kbd } from 'starlight-kbd/components' + +## Global + +These shortcuts work anywhere in the app, regardless of what's focused. + +| Shortcut | Action | +| --- | --- | +| | Save current file | +| | Create new file in the current collection | +| | Close current file | +| | Open the command palette | +| | Open a project | +| | Open preferences | +| | Toggle the left sidebar | +| | Toggle the frontmatter panel | +| | Focus the main editor | +| | Toggle full screen | + +## Editor + +These shortcuts work when the editor is focused. + +### Text Formatting + +| Shortcut | Action | +| --- | --- | +| | Toggle bold | +| | Toggle italic | +| | Insert or edit a link | +| | Open the content linker | +| | Insert MDX component (in `.mdx` files) or toggle comment | + +### Headings + +| Shortcut | Action | +| --- | --- | +| | Heading 1 | +| | Heading 2 | +| | Heading 3 | +| | Heading 4 | +| | Remove heading (plain paragraph) | + +### Writing Modes + +| Shortcut | Action | +| --- | --- | +| | Toggle focus mode | +| | Toggle typewriter mode | + +### Search + +| Shortcut | Action | +| --- | --- | +| | Open search | +| | Find next match | +| | Find previous match | + +### Standard Editing + +| Shortcut | Action | +| --- | --- | +| | Undo | +| | Redo | +| | Indent | +| | Dedent | +| | Select all | +| | Add cursors to selected line ends | +| | Insert tab or jump to next snippet field | +| | Jump to previous snippet field | + +### Mouse + +| Action | Effect | +| --- | --- | +| + hover over image path | Preview the image | +| + click a URL | Open the URL in your browser | + +## Component Builder + +These shortcuts work when the component builder dialog is open. + +| Shortcut | Action | +| --- | --- | +| | Insert the component | +| | Toggle all optional props | +| | Go back to component list | + +## Content Linker + +These shortcuts work when the content linker dialog is open. + +| Shortcut | Action | +| --- | --- | +| | Open the selected file | +| | Insert a link to the selected file | diff --git a/website/src/content/docs/reference/overrides.mdx b/website/src/content/docs/reference/overrides.mdx new file mode 100644 index 00000000..3c525b2f --- /dev/null +++ b/website/src/content/docs/reference/overrides.mdx @@ -0,0 +1,8 @@ +--- +title: 'Overrides' +description: 'Reference for path and field override settings' +--- + +This page will document exactly what each path and field override setting does. + +Documentation is coming soon. diff --git a/website/src/content/docs/reference/special-fields.mdx b/website/src/content/docs/reference/special-fields.mdx new file mode 100644 index 00000000..447aef84 --- /dev/null +++ b/website/src/content/docs/reference/special-fields.mdx @@ -0,0 +1,8 @@ +--- +title: 'Special Fields' +description: 'Reference for special field names and their behaviours' +--- + +This page will document the special field names (title, description, pubdate/date, draft, slug) and their behaviours. + +Documentation is coming soon. diff --git a/website/src/content/docs/reference/yaml.mdx b/website/src/content/docs/reference/yaml.mdx new file mode 100644 index 00000000..2fd2a3e6 --- /dev/null +++ b/website/src/content/docs/reference/yaml.mdx @@ -0,0 +1,8 @@ +--- +title: 'How YAML is Handled' +description: 'Reference for how YAML frontmatter is read, written, and formatted' +--- + +This page will document how Astro Editor reads, writes, and formats YAML frontmatter. + +Documentation is coming soon. diff --git a/website/src/content/docs/releases/0.1.1.mdx b/website/src/content/docs/releases/0.1.1.mdx new file mode 100644 index 00000000..b7cdebcc --- /dev/null +++ b/website/src/content/docs/releases/0.1.1.mdx @@ -0,0 +1,10 @@ +--- +title: 'v0.1.1' +description: 'Astro Editor v0.1.1' +date: 2025-07-24 +slug: 'releases/v0.1.1' +--- + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.1) diff --git a/website/src/content/docs/releases/0.1.10.mdx b/website/src/content/docs/releases/0.1.10.mdx new file mode 100644 index 00000000..e067c97e --- /dev/null +++ b/website/src/content/docs/releases/0.1.10.mdx @@ -0,0 +1,10 @@ +--- +title: 'v0.1.10' +description: 'Astro Editor v0.1.10' +date: 2025-07-29 +slug: 'releases/v0.1.10' +--- + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.10) diff --git a/website/src/content/docs/releases/0.1.18.mdx b/website/src/content/docs/releases/0.1.18.mdx new file mode 100644 index 00000000..c0ed8776 --- /dev/null +++ b/website/src/content/docs/releases/0.1.18.mdx @@ -0,0 +1,10 @@ +--- +title: 'v0.1.18' +description: 'Astro Editor v0.1.18' +date: 2025-08-05 +slug: 'releases/v0.1.18' +--- + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.18) diff --git a/website/src/content/docs/releases/0.1.19.mdx b/website/src/content/docs/releases/0.1.19.mdx new file mode 100644 index 00000000..cc482cec --- /dev/null +++ b/website/src/content/docs/releases/0.1.19.mdx @@ -0,0 +1,13 @@ +--- +title: 'v0.1.19' +description: 'Astro Editor v0.1.19' +date: 2025-08-05 +slug: 'releases/v0.1.19' +--- + +- Added customisable heading colours in Markdown. +- Made auto save duration customisable + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.19) diff --git a/website/src/content/docs/releases/0.1.20.mdx b/website/src/content/docs/releases/0.1.20.mdx new file mode 100644 index 00000000..0bd802a8 --- /dev/null +++ b/website/src/content/docs/releases/0.1.20.mdx @@ -0,0 +1,10 @@ +--- +title: 'v0.1.20' +description: 'Astro Editor v0.1.20' +date: 2025-08-18 +slug: 'releases/v0.1.20' +--- + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.20) diff --git a/website/src/content/docs/releases/0.1.21.mdx b/website/src/content/docs/releases/0.1.21.mdx new file mode 100644 index 00000000..c82fb6d2 --- /dev/null +++ b/website/src/content/docs/releases/0.1.21.mdx @@ -0,0 +1,10 @@ +--- +title: 'v0.1.21' +description: 'Astro Editor v0.1.21' +date: 2025-08-18 +slug: 'releases/v0.1.21' +--- + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.21) diff --git a/website/src/content/docs/releases/0.1.22.mdx b/website/src/content/docs/releases/0.1.22.mdx new file mode 100644 index 00000000..8f0a83f9 --- /dev/null +++ b/website/src/content/docs/releases/0.1.22.mdx @@ -0,0 +1,13 @@ +--- +title: 'v0.1.22' +description: 'Astro Editor v0.1.22' +date: 2025-08-18 +slug: 'releases/v0.1.22' +--- + +- Addresses critical bug which caused silent errors for new installations when initialising projects. +- Added more robust logging for production builds. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.22) diff --git a/website/src/content/docs/releases/0.1.23.mdx b/website/src/content/docs/releases/0.1.23.mdx new file mode 100644 index 00000000..117917a9 --- /dev/null +++ b/website/src/content/docs/releases/0.1.23.mdx @@ -0,0 +1,12 @@ +--- +title: 'v0.1.23' +description: 'Astro Editor v0.1.23' +date: 2025-08-19 +slug: 'releases/v0.1.23' +--- + +Fixes issue where custom MDX component path was not being properly respected. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.23) diff --git a/website/src/content/docs/releases/0.1.24.mdx b/website/src/content/docs/releases/0.1.24.mdx new file mode 100644 index 00000000..1d9f6ab5 --- /dev/null +++ b/website/src/content/docs/releases/0.1.24.mdx @@ -0,0 +1,14 @@ +--- +title: 'v0.1.24' +description: 'Astro Editor v0.1.24' +date: 2025-10-04 +slug: 'releases/v0.1.24' +--- + +- Schema fields are now read from the JSON files which astro generates rather than directly from the Zod schema. In the event these haven't been generated it will fall back to the old behaviour. +- Constraints (character limits, min/max etc), default values and `.describe()` descriptions are now shown in the UI of the right sidebar. +- Minor bugfixes and technical dependancy updates. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.24) diff --git a/website/src/content/docs/releases/0.1.25.mdx b/website/src/content/docs/releases/0.1.25.mdx new file mode 100644 index 00000000..2c8ef4df --- /dev/null +++ b/website/src/content/docs/releases/0.1.25.mdx @@ -0,0 +1,24 @@ +--- +title: 'v0.1.25' +description: 'Astro Editor v0.1.25' +date: 2025-10-13 +slug: 'releases/v0.1.25' +--- + +- Added support for subfolders. The file browser now shows subfolders and their contents within content collections. +- The default paths for `src/content`, assets and "MDX components" directories can now be configured on a per-project basis in the preferences. +- The default or project settings paths for content, assets and "MDX" components directories can be overridden on a per-collection basis in the preferences. +- Frontmatter mappings for title, pubDate, description and draft are now configured on a per-collection basis and persisted in the project settings. +- Simplified preferences storage system and project registry and introduced system to migrate old settings files to new. Preferences system is now more robust when the preferences JSON files have missing data. +- Added debug panel to preferences pane to help with support requests. +- Copyedit highlights are now off by default for new installations. +- Rebuilt and simplified schema parser so Astro's generated schema files and the Zod schemas in `content.config.ts` are properly parsed and merged in Rust before being passed in a sensible shape into the front-end. +- Added support for `reference()` fields, which can either reference single items in other collections, or multiple items. +- Added support for reading JSON-file-based content collections *only when they are referenced by another collection*. So given an `authors.json` file with the appropriate schema which is referenced in an `articles` collection, Author can be selected from a dropdown in the frontmatter panel. +- Improved support for field descriptions and nested fields in sidebar UI. +- Fixed bug where auto-updater would update regardless of user input. Added menu item to check for updates. +- Upgraded dependencies, and minor technical improvements. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.25) diff --git a/website/src/content/docs/releases/0.1.27.mdx b/website/src/content/docs/releases/0.1.27.mdx new file mode 100644 index 00000000..1ab11bdf --- /dev/null +++ b/website/src/content/docs/releases/0.1.27.mdx @@ -0,0 +1,12 @@ +--- +title: 'v0.1.27' +description: 'Astro Editor v0.1.27' +date: 2025-10-16 +slug: 'releases/v0.1.27' +--- + +The DMG now universal includes a universal binary which should work on both ARM and Intel-based machines. Previously only ARM binaries were included. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.27) diff --git a/website/src/content/docs/releases/0.1.28.mdx b/website/src/content/docs/releases/0.1.28.mdx new file mode 100644 index 00000000..2aa2cc1f --- /dev/null +++ b/website/src/content/docs/releases/0.1.28.mdx @@ -0,0 +1,14 @@ +--- +title: 'v0.1.28' +description: 'Astro Editor v0.1.28' +date: 2025-10-20 +slug: 'releases/v0.1.28' +--- + +- Fixes a display bug with preferences in dark mode +- Adds support for React, Vue, and Svelte components in the MDX Component Builder in addition to Astro components. +- Minor dependency updates. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.28) diff --git a/website/src/content/docs/releases/0.1.29.mdx b/website/src/content/docs/releases/0.1.29.mdx new file mode 100644 index 00000000..9942d58b --- /dev/null +++ b/website/src/content/docs/releases/0.1.29.mdx @@ -0,0 +1,13 @@ +--- +title: 'v0.1.29' +description: 'Astro Editor v0.1.29' +date: 2025-10-21 +slug: 'releases/v0.1.29' +--- + +- Fixes nested properties (ie objects) in schemas so they display properly in the sidebar. +- Fixes a bug where boolean fields in sidebar. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.29) diff --git a/website/src/content/docs/releases/0.1.30.mdx b/website/src/content/docs/releases/0.1.30.mdx new file mode 100644 index 00000000..21fa5dd8 --- /dev/null +++ b/website/src/content/docs/releases/0.1.30.mdx @@ -0,0 +1,28 @@ +--- +title: 'v0.1.30' +description: 'Astro Editor v0.1.30' +date: 2025-10-23 +slug: 'releases/v0.1.30' +--- + +### New Features + +- Holding option/alt when hovering over an image URL or path in the editor shows a preview in the bottom right. This works for remote images (ie a URL), absolute paths relative to the Astro project route, and relative paths. Relative paths may not work reliably for unusual or complex Astro folder structures. +- Fields which use Astro's `image()` helper in their `content.config.json` schema will render an image picker and preview in the frontmatter sidebar. + - Images can be dragged to the button or selected from the file picker. They will be copied to the collections configured assets directory (and renamed appropriately) and the path (absolute relative to the project root) will be added to the frontmatter. + - Images added from *within* the astro site are not copied to `assets` - their absolute path is inserted as-is. + - Image paths can be manually edited like any other text field by clicking the edit button. + - Image previews support remote images (ie a URL), absolute paths relative to the Astro project route, and relative paths. Relative paths may not work reliably for unusual or complex Astro folder structures. + - Fields using Astro's `image()` helper which are nested inside an `object()` in the schema currently show as simple text fields in the UI. This will be fixed in a future release. + +### Bugfixes + +- Ligatures in iA Writer Duo are disabled. Fixes an issue where the editor would visually add extra spaces in some paragraphs. +- Updates to frontmatter fields which affect the file browser sidebar (draft, title, published date) now correctly update the sidebar. +- Text fields and textareas in the frontmatter panel now have auto-capitalise and spellcheck disabled. +- Fixed some visual display bugs in dark mode. +- Minor performance improvements to schema parsing and rendering. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.30) diff --git a/website/src/content/docs/releases/0.1.31.mdx b/website/src/content/docs/releases/0.1.31.mdx new file mode 100644 index 00000000..1f818507 --- /dev/null +++ b/website/src/content/docs/releases/0.1.31.mdx @@ -0,0 +1,20 @@ +--- +title: 'v0.1.31' +description: 'Astro Editor v0.1.31' +date: 2025-10-24 +slug: 'releases/v0.1.31' +--- + +### Breaking Changes ⚠️ +Generated JSON schemas are now **required** for schema fields to show in the sidebar. While `content.config.json` or `content/config.json` schemas are still parsed, they are now **only** used to enrich the generated JSON schemas. Runnigh `astro sync` or `astro dev` or `astro build` in your Astro project will auto-generate these schemas, so this should not negatively affect many users. + +### New Features +- Image and Reference fields now work properly inside nested objects in the schema. + +### Technical Improvements & Bugfixes +- Rebuilt simplified Zod schema parser to only handle information which isn't available in the generated JSON schemas. Currently this is Zod `references()` and Astro `image()` fields. +- Simplified logic for handling images and files added to MD/MDX files and/or frontmatter. No change to functionality, but should make this more reliable. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.31) diff --git a/website/src/content/docs/releases/0.1.32.mdx b/website/src/content/docs/releases/0.1.32.mdx new file mode 100644 index 00000000..c639ac09 --- /dev/null +++ b/website/src/content/docs/releases/0.1.32.mdx @@ -0,0 +1,19 @@ +--- +title: 'v0.1.32' +description: 'Astro Editor v0.1.32' +date: 2025-11-01 +slug: 'releases/v0.1.32' +--- + +This is effectively a pre-release of 1.0.0, which will be shipped with no additional features after I've spent some time testing this release. + +### This Release + +- Users can now choose between Markdown or MDX as the default filetype for new files. This is configurable in the global settings, and can be overridden on a per-project and per-collection basis. +- Files now auto-save every ten seconds regardless of whether the user has stopped typing. This ensures content is written to disk when typing in flow-state. The existing autosave-after-cease-typing functionality still works as before. +- Fixed minor UI inconsistencies. +- Extensive refactoring & performance improvements under-the-hood. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.32) diff --git a/website/src/content/docs/releases/0.1.33.mdx b/website/src/content/docs/releases/0.1.33.mdx new file mode 100644 index 00000000..762b172a --- /dev/null +++ b/website/src/content/docs/releases/0.1.33.mdx @@ -0,0 +1,17 @@ +--- +title: 'v0.1.33' +description: 'Astro Editor v0.1.33' +date: 2025-11-06 +slug: 'releases/v0.1.33' +--- + +This is effectively a second pre-release of 1.0.0, which will be shipped with no additional features after I've spent some time testing this release. + +### This Release + +- Images and files dragged into the editor or added to an image-type frontmatter field now default to relative paths. This can be overridden to use absolute paths (relative to the project root) on a per-project and per-collection basis. +- Extensive refactoring under the hood. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.33) diff --git a/website/src/content/docs/releases/0.1.34.mdx b/website/src/content/docs/releases/0.1.34.mdx new file mode 100644 index 00000000..9dbdc22f --- /dev/null +++ b/website/src/content/docs/releases/0.1.34.mdx @@ -0,0 +1,18 @@ +--- +title: 'v0.1.34' +description: 'Astro Editor v0.1.34' +date: 2025-11-09 +slug: 'releases/v0.1.34' +--- + +This is effectively a third pre-release of 1.0.0, which will be shipped with no additional features after I've spent some time testing this release. + +### This Release + +- Fixed bug where images added to frontmatter or the editor could result in multiple copies appearing in the Assets directory. +- Removed buggy status bar. +- Under-the-hood performance improvements and refactoring. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.34) diff --git a/website/src/content/docs/releases/0.1.35.mdx b/website/src/content/docs/releases/0.1.35.mdx new file mode 100644 index 00000000..6f1feb1e --- /dev/null +++ b/website/src/content/docs/releases/0.1.35.mdx @@ -0,0 +1,12 @@ +--- +title: 'v0.1.35' +description: 'Astro Editor v0.1.35' +date: 2025-11-10 +slug: 'releases/v0.1.35' +--- + +This is effectively a pre-release of 1.0.0, which will be shipped with no additional features after I've spent some time testing this release. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.35) diff --git a/website/src/content/docs/releases/0.1.36.mdx b/website/src/content/docs/releases/0.1.36.mdx new file mode 100644 index 00000000..672ca22a --- /dev/null +++ b/website/src/content/docs/releases/0.1.36.mdx @@ -0,0 +1,18 @@ +--- +title: 'v0.1.36' +description: 'Astro Editor v0.1.36' +date: 2025-11-12 +slug: 'releases/v0.1.36' +--- + +This is another pre-release of 1.0.0, which will be shipped with no additional features after I've spent some time testing this release. + +### This Release + +No user-facing changes. + +- Minor improvements under-the-hood. Eg. now uses react-compiler. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.36) diff --git a/website/src/content/docs/releases/0.1.37.mdx b/website/src/content/docs/releases/0.1.37.mdx new file mode 100644 index 00000000..b4f2169c --- /dev/null +++ b/website/src/content/docs/releases/0.1.37.mdx @@ -0,0 +1,27 @@ +--- +title: 'v0.1.37' +description: 'Astro Editor v0.1.37' +date: 2025-11-12 +slug: 'releases/v0.1.37' +--- + +Yet another pre-release of 1.0.0, which will be shipped with no additional features after I've spent some time testing this release. + +### This Release + +Hash markers for Markdown Headings now hang in the left margin if the editor pane is wide enough to accommodate them. + +#### Before + +Before + + +#### After + +After + +PS. I fucking love modern CSS ❀️ + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.37) diff --git a/website/src/content/docs/releases/0.1.9.mdx b/website/src/content/docs/releases/0.1.9.mdx new file mode 100644 index 00000000..8b005158 --- /dev/null +++ b/website/src/content/docs/releases/0.1.9.mdx @@ -0,0 +1,8 @@ +--- +title: 'v0.1.9' +description: 'Astro Editor v0.1.9' +date: 2025-07-25 +slug: 'releases/v0.1.9' +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v0.1.9) diff --git a/website/src/content/docs/releases/1.0.0.mdx b/website/src/content/docs/releases/1.0.0.mdx new file mode 100644 index 00000000..995c0613 --- /dev/null +++ b/website/src/content/docs/releases/1.0.0.mdx @@ -0,0 +1,12 @@ +--- +title: 'v1.0.0' +description: 'Astro Editor v1.0.0' +date: 2025-11-22 +slug: 'releases/v1.0.0' +--- + +No functional changes since 0.1.37 prerelease. Astro Editor is now considered stable. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.0) diff --git a/website/src/content/docs/releases/1.0.1.mdx b/website/src/content/docs/releases/1.0.1.mdx new file mode 100644 index 00000000..9b212c0d --- /dev/null +++ b/website/src/content/docs/releases/1.0.1.mdx @@ -0,0 +1,13 @@ +--- +title: 'v1.0.1' +description: 'Astro Editor v1.0.1' +date: 2025-11-27 +slug: 'releases/v1.0.1' +--- + +- New setting in General preferences pane to adjust the base font-size for the editor. +- Fixed visual bug in frontmatter panel where boolean fields with descriptions displayed incorrectly. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.1) diff --git a/website/src/content/docs/releases/1.0.10.mdx b/website/src/content/docs/releases/1.0.10.mdx new file mode 100644 index 00000000..8d964d80 --- /dev/null +++ b/website/src/content/docs/releases/1.0.10.mdx @@ -0,0 +1,12 @@ +--- +title: 'v1.0.10' +description: 'Astro Editor v1.0.10' +date: 2026-02-16 +slug: 'releases/v1.0.10' +--- + +No user-facing changes + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.10) diff --git a/website/src/content/docs/releases/1.0.2.mdx b/website/src/content/docs/releases/1.0.2.mdx new file mode 100644 index 00000000..5a9ebb7b --- /dev/null +++ b/website/src/content/docs/releases/1.0.2.mdx @@ -0,0 +1,21 @@ +--- +title: 'v1.0.2' +description: 'Astro Editor v1.0.2' +date: 2025-12-07 +slug: 'releases/v1.0.2' +--- + +### Typewriter mode removed (for now) + +A buggy implementation of "typewriter mode" was completely removed. This was a very old feature which was only available via the command palette, and which kept the current line vertically entered in the editor window. It did not work reliably or performantly, and was prone to causing weird UI behaviour when switched on. I will eventually reimplement this in a more considered way in a future release. + +### Bugfixes + +- Scrollbars are properly rendered in dark mode. +- Frontmatter fields which are `nullish()` properly preserve their types when being written to YAML. +- Frontmatter is not written to disk unless it has been changed in the frontmatter panel by the user. Just opening (or editing the content) of a file will no longer rewrite your frontmatter. +- Lots of under-the-hood improvements. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.2) diff --git a/website/src/content/docs/releases/1.0.3.mdx b/website/src/content/docs/releases/1.0.3.mdx new file mode 100644 index 00000000..db4966f8 --- /dev/null +++ b/website/src/content/docs/releases/1.0.3.mdx @@ -0,0 +1,20 @@ +--- +title: 'v1.0.3' +description: 'Astro Editor v1.0.3' +date: 2025-12-08 +slug: 'releases/v1.0.3' +--- + +### Editor Improvements + +- Editor typography now changes based on the width of the Editor pane, not the width of the application window. +- New `Cmd + Shift + L` shortcut, which adds a cursor to the end of each line in the currently selected text. +- Markers for inline formatting (eg bold, italic) are now subdued in the same way as other markdown syntax. +- Fenced code blocks now have a distinct background. +- Blockquotes now have more distinct styling. +- Fixed a bug where the editor pane sometimes wouldn't use the correct typeface settings. +- Other minor improvements to editor typography. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.3) diff --git a/website/src/content/docs/releases/1.0.4.mdx b/website/src/content/docs/releases/1.0.4.mdx new file mode 100644 index 00000000..7d00a46b --- /dev/null +++ b/website/src/content/docs/releases/1.0.4.mdx @@ -0,0 +1,14 @@ +--- +title: 'v1.0.4' +description: 'Astro Editor v1.0.4' +date: 2025-12-15 +slug: 'releases/v1.0.4' +--- + +Untested builds for windows and Linux are included in this build. macOS Users should see no change in behaviour, though there has been significant refactoring under-the-hood to cater for multi-platform support. + +If you are encountering new bugs on macOS, please report as usual. If you are a Windows or Linux user, please test the builds out and report any bugs in #56 to begin with. πŸ™ + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.4) diff --git a/website/src/content/docs/releases/1.0.5.mdx b/website/src/content/docs/releases/1.0.5.mdx new file mode 100644 index 00000000..58f263cf --- /dev/null +++ b/website/src/content/docs/releases/1.0.5.mdx @@ -0,0 +1,31 @@ +--- +title: 'v1.0.5' +description: 'Astro Editor v1.0.5' +date: 2026-01-07 +slug: 'releases/v1.0.5' +--- + +**Search & Sort** β€” Filter your files with the new search bar. Click the filter icon next to any collection to search by filename and customize sorting. Choose from multiple sort options (date, title, filename, etc.) based on your collection's frontmatter fields, with ascending/descending toggle. + +532494815-1f7264f4-4c1a-4790-a619-8c67a86396af + + +**Remember Window Layout** β€” Astro Editor now remembers your window size and sidebar positions between sessions. Open the app and pick up right where you left off. + +**Collection Schema Warnings** β€” Collections without a defined schema now show a warning indicator, making it easier to spot configuration issues. + +**Windows Improvements** + + - Fixed title bar buttons not responding to clicks + - Added Windows menu (hamburger icon in the title bar) + - Square corners when maximized/fullscreen (matching Windows conventions) + - New keyboard shortcuts for Windows users + +**Bug Fixes** + + - Sorting improvements - Files without dates now sort alphabetically by title. Files with the same date use an alphabetical tiebreaker, eliminating the previously unpredictable ordering. + - Draft filtering fix - Fixed an issue where files could incorrectly appear in the Drafts filter. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.5) diff --git a/website/src/content/docs/releases/1.0.6.mdx b/website/src/content/docs/releases/1.0.6.mdx new file mode 100644 index 00000000..88f5154b --- /dev/null +++ b/website/src/content/docs/releases/1.0.6.mdx @@ -0,0 +1,19 @@ +--- +title: 'v1.0.6' +description: 'Astro Editor v1.0.6' +date: 2026-01-21 +slug: 'releases/v1.0.6' +--- + +* Trailing newlines are no longer stripped from the end of files on save. + +### Bugfixes + +* Race condition fix during auto-save. +* Preserve cursor position during content updates in the editor to prevent jumping, especially during auto-save. + +> **Note**: Windows and Linux builds are experimental and not officially supported yet. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.6) diff --git a/website/src/content/docs/releases/1.0.7.mdx b/website/src/content/docs/releases/1.0.7.mdx new file mode 100644 index 00000000..463bbfc3 --- /dev/null +++ b/website/src/content/docs/releases/1.0.7.mdx @@ -0,0 +1,14 @@ +--- +title: 'v1.0.7' +description: 'Astro Editor v1.0.7' +date: 2026-01-25 +slug: 'releases/v1.0.7' +--- + +Minor security updates and dependency updates. No user-facing changes. + +> **Note**: Windows and Linux builds are experimental and not officially supported yet. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.7) diff --git a/website/src/content/docs/releases/1.0.8.mdx b/website/src/content/docs/releases/1.0.8.mdx new file mode 100644 index 00000000..039635c7 --- /dev/null +++ b/website/src/content/docs/releases/1.0.8.mdx @@ -0,0 +1,23 @@ +--- +title: 'v1.0.8' +description: 'Astro Editor v1.0.8' +date: 2026-02-14 +slug: 'releases/v1.0.8' +--- + +### New Features + +- New Typewriter mode which can be toggled via the button in the menubar or the command palette. Keeps the cursor vertically centred in the editor at all times. +- The "Open in IDE" feature now supports any editor, not just the six previously whitelisted options. Instead of selecting from a dropdown, you can now enter any command in the preferences: use simple commands like `code` or `cursor` if they're in a standard location, or provide the full path to your editor's binary (eg. `/usr/local/bin/nvim` or `~/bin/my-editor`) if not. This resolves issues where editors weren't detected on Windows or installed in non-standard locations. Your existing IDE preference *should* continue to work without any changes. +- If no project is loaded, the welcome screen shows an "Open Project" button - thanks to @nickradford (#116) + +### Bugfixes & Minor Improvements + +- `Cmd + P` should work reliably on Windows now. +- Removed "Save" from the command palette +- Fixed bug where typing in text inputs in the preferences would always jump the cursor to the end of the input. +- Various dependency updates. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.8) diff --git a/website/src/content/docs/releases/1.0.9.mdx b/website/src/content/docs/releases/1.0.9.mdx new file mode 100644 index 00000000..6bf9cf60 --- /dev/null +++ b/website/src/content/docs/releases/1.0.9.mdx @@ -0,0 +1,19 @@ +--- +title: 'v1.0.9' +description: 'Astro Editor v1.0.9' +date: 2026-02-16 +slug: 'releases/v1.0.9' +--- + +### New Features + +- The updater now shows release notes and provides more control over when and how to update (you can skip a version etc). +- You can now search for other content items with `Cmd+Shift+K`. Pressing enter will open it in the editor. Pressing `Cmd+Enter` will insert a markdown link to the document under the cursor in the current doc. By default, it will insert a relative path to the markdown file which will probably need fixing in your code editor. You can override this behaviour on a per-collection basis in the preferences: If your astro site publishes `src/content/articles/foo.md` to `/writing/foo`, you can set the Articles URL setting to `/writing/{slug}` and the correct path will be used in the markdown link. This will use the target file's `slug` frontmatter fields (if it exists) or the filename without its extension. + +### BugFixes + +- 1.0.8 introduced a bug where the left and right sidebar could be fully collapsed by dragging them into the sides of the window, but could not be shown again with the keyboard shortcuts or toolbar icons. This is now fixed. + +--- + +[View on GitHub](https://github.com/dannysmith/astro-editor/releases/tag/v1.0.9) diff --git a/website/src/content/docs/troubleshooting.mdx b/website/src/content/docs/troubleshooting.mdx new file mode 100644 index 00000000..a60210a6 --- /dev/null +++ b/website/src/content/docs/troubleshooting.mdx @@ -0,0 +1,43 @@ +--- +title: 'Troubleshooting' +description: 'Common issues and how to resolve them' +--- + +If you're experiencing issues with Astro Editor, you can collect detailed logs to help with troubleshooting. + +## Getting Diagnostic Logs + +Astro Editor automatically logs detailed information to help diagnose setup problems, crashes, or other issues. + +**To collect logs for support:** + +**Method 1: Debug Panel (Recommended)** + +1. Open Preferences (`Cmd+,`) +2. Navigate to the Debug tab +3. Click "Copy Debug Info" to copy system and project information to your clipboard +4. Send this information along with a description of your issue + +**Method 2: Complete Log File** + +1. **Open Finder** and navigate to: `~/Library/Logs/is.danny.astroeditor/` +2. **Copy the file** `Astro Editor.log` +3. **Send this file** along with a description of your issue + +**Method 3: Console.app for Live Monitoring** + +1. **Open Console.app** (Applications > Utilities > Console) +2. **Search for "Astro Editor"** in the search bar +3. **Reproduce the issue** you're experiencing (try opening the project again, etc.) +4. **Filter the results** by typing "Astro Editor" to see only relevant log entries +5. **Select and copy** the relevant log entries +6. **Send the logs** along with a description of your issue + +**Note:** The debug info and log files contain no personal content - only technical information about file paths, app operations, and error details needed for debugging. + +**Useful search terms in Console.app:** + +- `Astro Editor [PROJECT_SETUP]` - Project opening and setup issues +- `Astro Editor [PROJECT_SCAN]` - Collection and file discovery problems +- `Astro Editor [PROJECT_REGISTRY]` - Project registration and management +- `Astro Editor [PROJECT_DISCOVERY]` - Project metadata detection diff --git a/website/src/layouts/Layout.astro b/website/src/layouts/Layout.astro new file mode 100644 index 00000000..54158459 --- /dev/null +++ b/website/src/layouts/Layout.astro @@ -0,0 +1,124 @@ +--- +interface Props { + title: string + description: string + image?: string +} + +const { title, description, image = '/favicon.png' } = Astro.props +const canonicalURL = new URL(Astro.url.pathname, Astro.site) +--- + + + + + + + + + + {title} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro new file mode 100644 index 00000000..7efdbfb4 --- /dev/null +++ b/website/src/pages/index.astro @@ -0,0 +1,944 @@ +--- +import Layout from '@layouts/Layout.astro' +--- + + + + + + + + + + + + + +
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
+
+ + Made for Astro content collections +
+

+ The CMS experience your Astro content deserves +

+

+ Astro Editor reads your Zod schemas and transforms frontmatter + into smart forms. Get validation, cross-collection references, + image fields with previews, and multi-framework MDX components β€” + all in a beautiful interface inspired by iA Writer. +

+ +

+ Or install via Homebrew: brew install --cask astro-editor +

+
+
+
+ +
+
+
+

See it in action

+

+ Schema-aware frontmatter forms meet distraction-free writing. Your + content collections, beautifully organized. +

+
+
+ +
+
+
+ +
+
+
+
+
File Sidebar
+
+ Collections & drafts organized by date +
+
+
+
Clean Editor
+
+ Markdown without the YAML clutter +
+
+
+
Smart Forms
+
+ Auto-generated from your Zod schemas +
+
+
+
+
+ +
+

+ Most Astro developers work in two modes: + coder mode for components and deployment, + writer mode for content. Code editors excel at the + former but overwhelm the latter with distractions and YAML complexity. + Astro Editor focuses purely on writer modeβ€”no git, no preview, no deploymentβ€”just + beautiful, distraction-free writing with intelligent frontmatter forms + that understand your schemas. +

+
+
+
+ +
+
+
+
+
+

Focus mode

+

+ Eliminate distractions with focus mode. Only your current + sentence stays bright while everything else fades away. +

+

+ Perfect for deep writing sessions when you need to concentrate + on one thought at a time. +

+
+
+ Focus mode highlighting only the current sentence +
+
+ +
+
+

+ Copyedit highlighting +

+

+ Analyze your writing with color-coded parts of speech. Spot + overused adverbs, check verb consistency, and improve your + prose. +

+

+ Toggle individual highlights for nouns, verbs, adjectives, + adverbs, and conjunctions. +

+
+
+ Editor with copyedit highlighting showing different parts of speech in colors +
+
+ +
+
+

+ MDX component insertion +

+

+ Press Cmd+/ in MDX files to instantly insert components from + any frameworkβ€”Astro, React, Vue, or Svelte. Configure props + visually, then tab through to fill values. +

+

+ Reads your component props automatically from your project's + MDX component directory. +

+
+
+ MDX component insertion panel showing component props configuration +
+
+ +
+
+

+ Beautiful dark interface +

+

+ Inspired by iA Writer's clean aesthetics. Custom syntax + highlighting makes your markdown beautiful without + overwhelming your content. Customize heading colors to match + your style. +

+

+ Light and dark themes with thoughtful typography designed for + long writing sessions. +

+
+
+ Dark mode interface showing clean editor with syntax highlighting +
+
+ +
+
+

Smart image fields

+

+ Image fields with live previews and drag-and-drop support. + Images are automatically copied to your assets directory with + web-safe names using relative paths by default for portable + content. +

+

+ Edit paths manually or clear images with a click. Configure + absolute paths per project or collection when needed. Works + with Astro's image() helper for type-safe frontmatter. +

+
+
+ Image field in frontmatter sidebar showing preview and path editing +
+
+ +
+
+

+ Image preview on hover +

+

+ Hold Option/Alt and hover over any image path or URL in your + markdown to see an instant preview in the bottom right corner. +

+

+ Works with remote images (URLs), absolute paths relative to + your project root, and relative paths. Perfect for quickly + checking your images without leaving the editor. +

+
+
+ Image preview appearing when hovering over an image path in the editor +
+
+
+
+
+ +
+
+
+

+ Everything you need to edit Astro content +

+

+ Thoughtful details for teams and solo creators β€” designed to keep + you in flow. +

+
+ +
+
+
+ + + +
+

Schema-aware frontmatter

+

+ Reads your Zod schemas to generate smart forms. Dates become + pickers, enums become dropdowns, references link collections. + Nested objects and constraints fully supported. +

+
+
+
+ + + +
+

Smart image handling

+

+ Image fields with live previews. Drag images to automatically + copy, rename, and link them with relative paths for portability. + Hover over any image path with Option to preview it instantly. +

+
+
+
+ + + +
+

Writer mode, not coder mode

+

+ Focus mode dims everything but your current sentence. Write + without distractions. +

+
+
+
+ + + +
+

Command palette

+

+ Press Cmd+K for instant access. Fuzzy search files across + collections, execute commands, switch projects β€” all + keyboard-driven. +

+
+
+
+ + + +
+

MDX component insertion

+

+ Press Cmd+/ in MDX files to insert Astro, React, Vue, or Svelte + components. Configure props visually, then tab through to fill + values. +

+
+
+
+ + + +
+

+ Auto-save & crash recovery +

+

+ Automatically saves as you write with configurable delay, plus + backup saves every 10 seconds during flow state. Full crash + recovery means you never lose work, even if the app quits + unexpectedly. +

+
+
+
+ + + +
+

Navigate deep hierarchies

+

+ Full support for nested subdirectories with breadcrumb + navigation. Files and folders sorted intelligently, with draft + filtering across all levels. +

+
+
+
+ + + +
+

+ Adapt to any project structure +

+

+ Three-tier preferences system lets you override paths and field + mappings globally, per project, or per collection. Works with + unusual Astro setups without compromise. +

+
+
+
+ + + + +
+

Image preview on hover

+

+ Hold Option/Alt and hover over any image path or URL in the + editor for an instant preview. Works with remote images, + absolute paths, and relative paths. +

+
+
+
+
+ +
+
+

How it works

+
+
    +
  1. +
    + 1 +
    +

    Open your Astro project

    +

    + Point to any Astro 5+ project with content collections. + Schemas are read from your content.config.ts + automatically. +

    +
    +
    +
  2. +
  3. +
    + 2 +
    +

    Write without friction

    +

    + Frontmatter fields become smart forms. YAML stays hidden. + Focus purely on your content. +

    +
    +
    +
  4. +
  5. +
    + 3 +
    +

    Stay in your workflow

    +

    + Use your IDE for code, terminal for git. Astro Editor + handles the writing. Each tool does what it does best. +

    +
    +
    +
  6. +
+
+
import { defineCollection, z } from "astro:content";
+
+const posts = defineCollection({
+  type: "content",
+  schema: z.object({
+    title: z.string(),
+    featured: z.boolean().default(false),
+    date: z.date(),
+    tags: z.array(z.string()).default([]),
+    description: z.string().optional()
+  })
+});
+
+export const collections = { posts };
+

+ Your schemas define the editing experience. No configuration + needed. +

+
+
+
+
+
+ + + + +
+
diff --git a/website/src/pages/releases/index.astro b/website/src/pages/releases/index.astro new file mode 100644 index 00000000..cfdbda3d --- /dev/null +++ b/website/src/pages/releases/index.astro @@ -0,0 +1,65 @@ +--- +import { getCollection } from 'astro:content' +import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' + +const allDocs = await getCollection('docs') +const releases = allDocs.filter( + (doc) => doc.id.startsWith('releases/') && doc.data.date +) + +const sortedReleases = [...releases].sort( + (a, b) => b.data.date!.getTime() - a.data.date!.getTime() +) + +function formatDate(date: Date): string { + return date.toLocaleDateString('en-GB', { + year: 'numeric', + month: 'short', + day: 'numeric', + timeZone: 'UTC', + }) +} +--- + + +

All releases.

+ +
    + { + sortedReleases.map((release) => ( +
  • + {release.data.title} + + + +
  • + )) + } +
+
+ + diff --git a/website/tsconfig.json b/website/tsconfig.json new file mode 100644 index 00000000..600f611c --- /dev/null +++ b/website/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist", "scripts"], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@components/*": ["src/components/*"], + "@layouts/*": ["src/layouts/*"], + "@assets/*": ["src/assets/*"] + } + } +}