From 364b6602c4a769e504548bee6ade900f5a072729 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Wed, 28 Jan 2026 12:14:16 -0700 Subject: [PATCH] Initial RS-UV3A Starlight documentation site Documentation for the HobbyPCB RS-UV3A tri-band FM transceiver board covering 2m, 1.25m, and 70cm amateur radio bands. Structure: - Getting Started: quick start, connections, serial setup - Guides: voice, packet/APRS, beacons, repeater/satellite, firmware - Reference: specs, 66 serial commands, connector pinouts, hw revisions - Accessories: RS-UVPA 5W power amplifier Features: - Ham radio green theme for readability - Full command reference with categorization - Searchable via Starlight/Pagefind - Mobile responsive --- .gitignore | 23 + README.md | 51 + astro.config.mjs | 86 + package-lock.json | 6394 +++++++++++++++++ package.json | 17 + public/favicon.svg | 1 + src/assets/radio-dark.svg | 8 + src/assets/radio-light.svg | 8 + src/content.config.ts | 7 + src/content/docs/accessories/rs-uvpa.md | 223 + .../docs/getting-started/connections.md | 205 + src/content/docs/getting-started/index.md | 93 + .../docs/getting-started/serial-setup.md | 247 + src/content/docs/guides/beacon-operation.md | 260 + src/content/docs/guides/firmware-upgrade.md | 164 + src/content/docs/guides/packet-aprs.md | 220 + src/content/docs/guides/repeater-satellite.md | 258 + src/content/docs/guides/voice-operation.md | 270 + src/content/docs/index.mdx | 87 + src/content/docs/reference/commands/audio.md | 259 + src/content/docs/reference/commands/beacon.md | 275 + .../docs/reference/commands/dtmf-cw.md | 367 + .../docs/reference/commands/frequency.md | 134 + src/content/docs/reference/commands/index.md | 94 + .../docs/reference/commands/io-control.md | 190 + src/content/docs/reference/commands/memory.md | 232 + .../docs/reference/commands/squelch-tones.md | 259 + src/content/docs/reference/commands/system.md | 686 ++ src/content/docs/reference/connectors.md | 241 + .../docs/reference/hardware-revisions.md | 188 + src/content/docs/reference/specifications.md | 176 + src/styles/custom.css | 110 + tsconfig.json | 5 + 33 files changed, 11838 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 astro.config.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 src/assets/radio-dark.svg create mode 100644 src/assets/radio-light.svg create mode 100644 src/content.config.ts create mode 100644 src/content/docs/accessories/rs-uvpa.md create mode 100644 src/content/docs/getting-started/connections.md create mode 100644 src/content/docs/getting-started/index.md create mode 100644 src/content/docs/getting-started/serial-setup.md create mode 100644 src/content/docs/guides/beacon-operation.md create mode 100644 src/content/docs/guides/firmware-upgrade.md create mode 100644 src/content/docs/guides/packet-aprs.md create mode 100644 src/content/docs/guides/repeater-satellite.md create mode 100644 src/content/docs/guides/voice-operation.md create mode 100644 src/content/docs/index.mdx create mode 100644 src/content/docs/reference/commands/audio.md create mode 100644 src/content/docs/reference/commands/beacon.md create mode 100644 src/content/docs/reference/commands/dtmf-cw.md create mode 100644 src/content/docs/reference/commands/frequency.md create mode 100644 src/content/docs/reference/commands/index.md create mode 100644 src/content/docs/reference/commands/io-control.md create mode 100644 src/content/docs/reference/commands/memory.md create mode 100644 src/content/docs/reference/commands/squelch-tones.md create mode 100644 src/content/docs/reference/commands/system.md create mode 100644 src/content/docs/reference/connectors.md create mode 100644 src/content/docs/reference/hardware-revisions.md create mode 100644 src/content/docs/reference/specifications.md create mode 100644 src/styles/custom.css create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87ea293 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Build output +dist/ + +# Node modules +node_modules/ + +# Environment +.env +.env.* +!.env.example + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Astro +.astro/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..b4b4927 --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# RS-UV3A Documentation + +Documentation site for the HobbyPCB RS-UV3A VHF/UHF Tri-Band FM Transceiver. + +Built with [Astro](https://astro.build) and [Starlight](https://starlight.astro.build). + +## About the RS-UV3A + +The RS-UV3A is a compact FM transceiver board designed by Jim Veatch (WA2EUJ) at HobbyPCB. It covers: + +- **2m Band:** 136–174 MHz +- **1.25m Band:** 200–260 MHz +- **70cm Band:** 400–520 MHz + +Features include on-board USB-serial, wide-range DC-DC converter (3.5V–16V), and Arduino/Raspberry Pi compatibility. + +## Documentation Structure + +- **Getting Started** — Quick start, connections, serial setup +- **Guides** — Voice operation, packet/APRS, beacons, repeaters +- **Reference** — Specifications, all 66 serial commands, connector pinouts +- **Accessories** — RS-UVPA 5W power amplifier + +## Development + +```bash +# Install dependencies +npm install + +# Start dev server at localhost:4321 +npm run dev + +# Build for production +npm run build + +# Preview production build +npm run preview +``` + +## Source Material + +Documentation is based on official HobbyPCB manuals: +- RS-UV3A Rev A Manual +- RS-UV3 Command Reference (Firmware 2.4A) +- RS-UV3 Rev C Manual +- RS-UVPA Manual + +## Links + +- [HobbyPCB Wiki](https://sites.google.com/site/hobbypcbrsuv3awiki/) +- [Starlight Documentation](https://starlight.astro.build/) diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..b974c0d --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,86 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +// https://astro.build/config +export default defineConfig({ + telemetry: false, + devToolbar: { enabled: false }, + integrations: [ + starlight({ + title: 'RS-UV3A', + description: 'Documentation for the HobbyPCB RS-UV3A VHF/UHF Tri-Band FM Transceiver', + logo: { + light: './src/assets/radio-light.svg', + dark: './src/assets/radio-dark.svg', + replacesTitle: false, + }, + social: [ + { + icon: 'external', + label: 'HobbyPCB Wiki', + href: 'https://sites.google.com/site/hobbypcbrsuv3awiki/' + }, + ], + customCss: ['./src/styles/custom.css'], + sidebar: [ + { + label: 'Getting Started', + items: [ + { label: 'Introduction', slug: 'getting-started' }, + { label: 'Connections', slug: 'getting-started/connections' }, + { label: 'Serial Setup', slug: 'getting-started/serial-setup' }, + ], + }, + { + label: 'Guides', + items: [ + { label: 'Voice Operation', slug: 'guides/voice-operation' }, + { label: 'Packet & APRS', slug: 'guides/packet-aprs' }, + { label: 'Beacon Operation', slug: 'guides/beacon-operation' }, + { label: 'Repeater & Satellite', slug: 'guides/repeater-satellite' }, + { label: 'Firmware Upgrade', slug: 'guides/firmware-upgrade' }, + ], + }, + { + label: 'Reference', + items: [ + { label: 'Specifications', slug: 'reference/specifications' }, + { + label: 'Commands', + collapsed: true, + items: [ + { label: 'Quick Reference', slug: 'reference/commands' }, + { label: 'Frequency', slug: 'reference/commands/frequency' }, + { label: 'Audio', slug: 'reference/commands/audio' }, + { label: 'Squelch & Tones', slug: 'reference/commands/squelch-tones' }, + { label: 'DTMF & CW', slug: 'reference/commands/dtmf-cw' }, + { label: 'Beacon', slug: 'reference/commands/beacon' }, + { label: 'Memory', slug: 'reference/commands/memory' }, + { label: 'I/O Control', slug: 'reference/commands/io-control' }, + { label: 'System', slug: 'reference/commands/system' }, + ], + }, + { label: 'Connectors', slug: 'reference/connectors' }, + { label: 'Hardware Revisions', slug: 'reference/hardware-revisions' }, + ], + }, + { + label: 'Accessories', + items: [ + { label: 'RS-UVPA Power Amp', slug: 'accessories/rs-uvpa' }, + ], + }, + ], + head: [ + { + tag: 'meta', + attrs: { + name: 'keywords', + content: 'RS-UV3A, HobbyPCB, ham radio, amateur radio, FM transceiver, VHF, UHF, 2m, 70cm, 1.25m, Arduino', + }, + }, + ], + }), + ], +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..cf587d7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6394 @@ +{ + "name": "rs-uv3-docs", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rs-uv3-docs", + "version": "0.0.1", + "dependencies": { + "@astrojs/starlight": "^0.37.4", + "astro": "^5.6.1", + "sharp": "^0.34.2" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.0.tgz", + "integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "license": "MIT", + "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" + } + }, + "node_modules/@astrojs/mdx": { + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.13.tgz", + "integrity": "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==", + "license": "MIT", + "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" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.0.tgz", + "integrity": "sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.2", + "stream-replace-string": "^2.0.0", + "zod": "^3.25.76" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.37.4.tgz", + "integrity": "sha512-ygPGDgRd9nCcNgaYMNN7UeAMAkDOR1ibv3ps3xEz+cuvKG3CRLd19UwdB+Gyz1tbkyfjPWPkFKNhLwNybro8Tw==", + "license": "MIT", + "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" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expressive-code/core": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.41.6.tgz", + "integrity": "sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g==", + "license": "MIT", + "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" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.41.6.tgz", + "integrity": "sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.41.6.tgz", + "integrity": "sha512-Y6zmKBmsIUtWTzdefqlzm/h9Zz0Rc4gNdt2GTIH7fhHH2I9+lDYCa27BDwuBhjqcos6uK81Aca9dLUC4wzN+ng==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6", + "shiki": "^3.2.2" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.41.6.tgz", + "integrity": "sha512-PBFa1wGyYzRExMDzBmAWC6/kdfG1oLn4pLpBeTfIRrALPjcGA/59HP3e7q9J0Smk4pC7U+lWkA2LHR8FYV8U7Q==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.4.0.tgz", + "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz", + "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz", + "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz", + "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz", + "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz", + "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz", + "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz", + "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz", + "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz", + "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz", + "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz", + "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz", + "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz", + "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz", + "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz", + "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz", + "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz", + "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz", + "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz", + "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz", + "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz", + "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz", + "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz", + "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz", + "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz", + "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz", + "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz", + "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", + "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", + "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", + "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", + "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "5.16.16", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.16.tgz", + "integrity": "sha512-MFlFvQ84ixaHyqB3uGwMhNHdBLZ3vHawyq3PqzQS2TNWiNfQrxp5ag6S3lX+Cvnh0MUcXX+UnJBPMBHjP1/1ZQ==", + "license": "MIT", + "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.25.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" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.41.6.tgz", + "integrity": "sha512-l47tb1uhmVIebHUkw+HEPtU/av0G4O8Q34g2cbkPvC7/e9ZhANcjUUciKt9Hp6gSVDdIuXBBLwJQn2LkeGMOAw==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.41.6" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "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" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.41.6.tgz", + "integrity": "sha512-W/5+IQbrpCIM5KGLjO35wlp1NCwDOOVQb+PAvzEoGkW1xjGM807ZGfBKptNWH6UECvt6qgmLyWolCMYKh7eQmA==", + "license": "MIT", + "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" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.0.tgz", + "integrity": "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + } + }, + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "license": "MIT", + "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" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", + "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz", + "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", + "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", + "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", + "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/i18next": { + "version": "23.16.8", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", + "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "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" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.41.6.tgz", + "integrity": "sha512-aBMX8kxPtjmDSFUdZlAWJkMvsQ4ZMASfee90JWIAV8tweltXLzkWC3q++43ToTelI8ac5iC0B3/S/Cl4Ql1y2g==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.41.6" + } + }, + "node_modules/rehype-format": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz", + "integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-format": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.0.tgz", + "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.0", + "@rollup/rollup-android-arm64": "4.57.0", + "@rollup/rollup-darwin-arm64": "4.57.0", + "@rollup/rollup-darwin-x64": "4.57.0", + "@rollup/rollup-freebsd-arm64": "4.57.0", + "@rollup/rollup-freebsd-x64": "4.57.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", + "@rollup/rollup-linux-arm-musleabihf": "4.57.0", + "@rollup/rollup-linux-arm64-gnu": "4.57.0", + "@rollup/rollup-linux-arm64-musl": "4.57.0", + "@rollup/rollup-linux-loong64-gnu": "4.57.0", + "@rollup/rollup-linux-loong64-musl": "4.57.0", + "@rollup/rollup-linux-ppc64-gnu": "4.57.0", + "@rollup/rollup-linux-ppc64-musl": "4.57.0", + "@rollup/rollup-linux-riscv64-gnu": "4.57.0", + "@rollup/rollup-linux-riscv64-musl": "4.57.0", + "@rollup/rollup-linux-s390x-gnu": "4.57.0", + "@rollup/rollup-linux-x64-gnu": "4.57.0", + "@rollup/rollup-linux-x64-musl": "4.57.0", + "@rollup/rollup-openbsd-x64": "4.57.0", + "@rollup/rollup-openharmony-arm64": "4.57.0", + "@rollup/rollup-win32-arm64-msvc": "4.57.0", + "@rollup/rollup-win32-ia32-msvc": "4.57.0", + "@rollup/rollup-win32-x64-gnu": "4.57.0", + "@rollup/rollup-win32-x64-msvc": "4.57.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "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" + } + }, + "node_modules/shiki": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz", + "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.21.0", + "@shikijs/engine-javascript": "3.21.0", + "@shikijs/engine-oniguruma": "3.21.0", + "@shikijs/langs": "3.21.0", + "@shikijs/themes": "3.21.0", + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz", + "integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "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": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.3.tgz", + "integrity": "sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "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" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", + "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" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0de3ff9 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "rs-uv3-docs", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.37.4", + "astro": "^5.6.1", + "sharp": "^0.34.2" + } +} \ No newline at end of file diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..cba5ac1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/radio-dark.svg b/src/assets/radio-dark.svg new file mode 100644 index 0000000..832f028 --- /dev/null +++ b/src/assets/radio-dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/radio-light.svg b/src/assets/radio-light.svg new file mode 100644 index 0000000..5ca8cab --- /dev/null +++ b/src/assets/radio-light.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..d9ee8c9 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; +import { docsLoader } from '@astrojs/starlight/loaders'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), +}; diff --git a/src/content/docs/accessories/rs-uvpa.md b/src/content/docs/accessories/rs-uvpa.md new file mode 100644 index 0000000..ab2febb --- /dev/null +++ b/src/content/docs/accessories/rs-uvpa.md @@ -0,0 +1,223 @@ +--- +title: RS-UVPA Power Amplifier +description: 5W power amplifier companion board for the RS-UV3A +--- + +The RS-UVPA is a 5W power amplifier designed to integrate with the RS-UV3A transceiver, boosting output power for improved range. + +## Overview + +The RS-UVPA provides: +- **5W output** on 2m and 1.25m bands +- **4W output** on 70cm band +- **Low-noise preamplifier** for improved RX sensitivity +- **SWR protection** to prevent amplifier damage +- **Band-keying outputs** for external amplifiers + +## Specifications + +| Parameter | Specification | +|-----------|---------------| +| **TX Frequency Range** | 144–148 MHz, 220–225 MHz, 432–450 MHz | +| **RX Frequency Range** | 130–500 MHz | +| **Drive Level** | 200 mW – 1W | +| **Output Power** | 5W min (2m/1.25m), 4W min (70cm) | +| **Spurious** | > 53 dBc, typically 60 dBc | +| **Antenna Impedance** | 50Ω | +| **SWR Trip** | 3:1 | +| **RX Gain** | 2–3 dB or 12–15 dB (jumper selectable) | +| **RX Noise Figure** | 1.5 dB max | +| **DC Power** | 8V – 15V DC | +| **TX Current** | 2A max | +| **RX Current** | < 50 mA | +| **Size** | 120 × 75 × 25 mm | + +## Operation + +Once installed, the RS-UVPA operates transparently—it automatically switches between TX and RX and selects the correct band filtering. + +### SWR Protection + +The RS-UVPA includes SWR protection: +- **SWR LED** illuminates when high SWR is detected +- Amplifier is disabled for remainder of transmission +- Normal operation resumes on next transmission + +:::warning[Antenna Required] +Always connect an antenna or 50Ω load before transmitting. Operating without a load can damage the amplifier despite SWR protection. +::: + +:::danger[Shielding Required] +Do NOT operate with the antenna directly connected to the PCB unless the RS-UVPA is mounted in a **shielded metal enclosure**. Otherwise, the PCB becomes part of the antenna system, causing unexpected behavior or component damage. +::: + +## Installation + +### Compatible Hardware + +| Board | Compatibility | +|-------|---------------| +| RS-UV3A Rev A | ✓ Full support | +| RS-UV3 Rev D | ✓ Full support | +| RS-UV3 Rev C | ✓ Full support | +| RS-UV3 Rev B | Contact HobbyPCB | + +### Required Modifications + +Before installing the RS-UVPA on the RS-UV3A: + +#### Step 1: Prepare the RS-UV3A + +1. **Remove solder from SJ1** — This solder jumper routes RF to the SMA jack. Use solder wick to clear it. +2. **Remove the VIN power connector** — It interferes with the amplifier's power connector. The RS-UVPA will supply power to the RS-UV3A. + +:::tip +The SMA jack can remain installed—it doesn't interfere mechanically and is difficult to remove. +::: + +#### Step 2: Add Headers to RS-UV3A + +Solder three headers to the RS-UV3A: + +| Header | Pins | Purpose | +|--------|------|---------| +| AMP | 6 | Amplifier interface | +| PW | 2 | Power switch | +| PA | 2 | RF connection | + +**Soldering tips:** +- Solder one pin first +- Verify header is seated flat and perpendicular +- Solder remaining pins + +#### Step 3: Mate the Boards + +1. Align headers on RS-UV3A with sockets on RS-UVPA +2. Press boards together firmly +3. Install jumper across PW header (or connect switch) + +The RS-UVPA has a redundant PW header for switch connection. + +#### Step 4: Enclosure Mounting + +The board stack can be mounted using: +- PCB mounting holes +- Extruded enclosures for 120×75 mm boards (e.g., Hammond 1455K1201) +- HobbyPCB enclosure (available on website) + +**Important:** Transfer the plastic cap from the RS-UVPA's SMA connector to the unused RS-UV3A SMA connector to prevent confusion. + +## Connections + +### Power + +| Parameter | Specification | +|-----------|---------------| +| Connector | On RS-UVPA (shared with RS-UV3A) | +| Voltage | 8V – 15V DC | +| Current | 2A max (TX) | + +The RS-UVPA provides power to the RS-UV3A through the interconnecting headers. + +### Antenna + +Connect antenna to the RS-UVPA SMA jack (not the RS-UV3A jack when mated). + +### Control Outputs + +The RS-UVPA provides band-select outputs for keying external amplifiers: + +| Signal | Description | +|--------|-------------| +| 2m Key | Active during 2m TX | +| 1.25m Key | Active during 1.25m TX | +| 70cm Key | Active during 70cm TX | + +## RX Preamplifier + +The RS-UVPA includes a switchable LNA (Low-Noise Amplifier): + +| Mode | Gain | Use Case | +|------|------|----------| +| Low Gain | 2–3 dB | Overcomes amplifier insertion loss | +| High Gain | 12–15 dB | Improved weak-signal reception | + +Select mode via jumper on the RS-UVPA board. + +### When to Use High Gain + +- Weak signal work (DX, satellites) +- When the RS-UV3A's sensitivity is limiting +- Base station installations with long feedlines + +### When to Use Low Gain + +- Strong signal environments +- To avoid receiver overload +- Mobile installations in urban areas + +## Drive Level Adjustment + +The RS-UVPA is optimized for the RS-UV3A's ~200 mW output. If using with other transmitters: + +| Drive Power | Notes | +|-------------|-------| +| < 200 mW | Reduced output power | +| 200 mW – 500 mW | Optimal range | +| 500 mW – 1W | May require attenuator adjustment | +| > 1W | Not recommended | + +For drive levels above 500 mW, internal attenuator adjustment may be required—contact HobbyPCB for guidance. + +## Troubleshooting + +### Low Output Power + +1. Check drive level from RS-UV3A (`PW1` = high power) +2. Verify antenna connection +3. Check for SWR LED illumination +4. Measure DC input voltage (should be 8V–15V) + +### SWR LED Always On + +1. Check antenna connection +2. Verify antenna is for correct band +3. Measure antenna SWR with analyzer +4. Check for damaged feedline + +### No TX + +1. Verify RS-UV3A is transmitting (TX LED) +2. Check header connections between boards +3. Verify power is applied to RS-UVPA + +### Receiver Desensitized + +1. Check antenna connection +2. Try low-gain preamp mode +3. Verify no strong nearby transmitters + +## Using with Other Radios + +The RS-UVPA can be used with other VHF/UHF transmitters that provide up to 1W output, including: + +- Hamshield (Arduino shield radio) +- Other RS-UV3 variants +- Low-power transmitter modules + +For non-RS-UV3 applications: +1. Connect TX output to RS-UVPA input +2. Connect RS-UVPA output to antenna +3. Provide PTT signal for TX/RX switching +4. Provide 8V–15V DC power + +Contact HobbyPCB for detailed integration guidance. + +## Regulatory Notes + +When using the RS-UVPA: + +- Output power increases to 5W (37 dBm) +- Ensure compliance with band plans and power limits +- Spurious emissions meet FCC Part 97 requirements +- Operator is responsible for proper station identification diff --git a/src/content/docs/getting-started/connections.md b/src/content/docs/getting-started/connections.md new file mode 100644 index 0000000..e5b77a4 --- /dev/null +++ b/src/content/docs/getting-started/connections.md @@ -0,0 +1,205 @@ +--- +title: Connections +description: Complete connector pinouts and wiring guide for the RS-UV3A +--- + +The RS-UV3A provides multiple connection options for power, audio, control, and expansion. This page covers all physical connections on the board. + +## Board Layout + +The RS-UV3A has the following major connection points: + +1. **VIN** — DC power input jack +2. **USB** — Micro USB for power and serial +3. **ANT** — SMA antenna connector +4. **JP1** — Arduino/serial header +5. **ICSP** — PIC programmer header +6. **AMP** — Power amplifier header +7. **I/O** — DB-9 external interface +8. **SPK/MIC** — 3.5mm TRRS jack +9. **JP2** — FTDI cable header +10. **26M** — Oscillator output +11. **PW** — Power switch header +12. **PA** — Internal PA header +13. **I/O_P** — I/O power jumper + +## DC Power (VIN) + +The main power input uses a 2.1mm barrel connector. + +| Parameter | Value | +|-----------|-------| +| Connector | 5.5 × 2.1 mm barrel | +| Polarity | Center positive | +| Voltage | 3.5V – 16V DC | +| Protection | Reverse polarity diode | +| Recommended Fuse | 1A | + +The on-board buck-boost converter provides stable power across this wide input range. Power consumption is approximately 1.6W maximum; actual current draw varies inversely with input voltage. + +## Micro USB + +The USB connector provides both power and serial communication. + +- **Power:** 5V from USB host +- **Serial:** Driverless FTDI chip (most OS) +- **Baud Rate:** 19200 (default), configurable via `B1` command + +USB and VIN power are diode-isolated—you can connect both simultaneously for backup power operation. + +## Antenna (ANT) + +The SMA female jack handles both TX and RX. + +| Parameter | Specification | +|-----------|---------------| +| Connector | SMA female | +| Impedance | 50Ω | +| Max RF Input | -10 dBm | +| Max DC | 25V | + +Internal filtering: +- **RX:** 100 MHz high-pass filter, LNA with band-equalizing filter +- **TX:** Individual low-pass filters for 2m, 1.25m, and 70cm bands + +## Arduino Header (JP1) + +Four signals for microcontroller integration: + +| Pin | Signal | Direction | Description | +|-----|--------|-----------|-------------| +| 1 | DIN | In | Digital input (PTT, SQ open, or disabled via `AI` command) | +| 2 | RXD | In | Serial data to RS-UV3A (connect to MCU TXD) | +| 3 | DOUT | Out | Digital output (configurable via `AO` command) | +| 4 | TXD | Out | Serial data from RS-UV3A (connect to MCU RXD) | +| 5 | 3.3V | — | 3.3V output for accessories | +| 6 | GND | — | Ground | + +**Logic levels:** +- Input: 3.3V and 5V compatible +- Output: 2V–5V, set by VIO pin voltage + +### DIN Pin Functions (`AI` command) +- `0` — Disabled (default) +- `1` — Squelch open input +- `2` — PTT input + +### DOUT Pin Functions (`AO` command) +- `0` — Always low (default) +- `1` — High when squelch open +- `2` — High when DTMF detected +- `3` — High when transmitting +- `4` — High when CTCSS detected +- `5` — Always high + +## I/O Connector (DB-9) + +:::danger[Not RS-232!] +The DB-9 connector uses **3.3V/5V TTL levels**, NOT standard RS-232 voltages. Connecting to a true RS-232 port may damage the RS-UV3A. +::: + +| Pin | Signal | Description | +|-----|--------|-------------| +| 1 | TX Audio | Line-level TX input, adjustable via VR3 | +| 2 | PTT | Ground to transmit (-24V to +24V tolerant) | +| 3 | GND | Ground | +| 4 | RX Audio | Line-level RX output, adjustable via `VU` command | +| 5 | COR | Open-drain, low when squelch open (150mA @ 12V max) | +| 6 | PWR | 8.5V if I/O_P jumper installed, otherwise N/C | +| 7 | E_TX | External serial TXD or TX indicator (see `EX` command) | +| 8 | E_RX | External serial RXD or squelch indicator (see `EX` command) | +| 9 | GND | Ground | + +### E_TX/E_RX Functions (`EX` command) +- `0` — E_TX high during TX, E_RX low when squelch open +- `1` — TTL serial port (default) + +## Speaker/Mic Jack (SPK/MIC) + +Standard 3.5mm TRRS connector for speaker-microphones: + +| Contact | Signal | +|---------|--------| +| Tip | Speaker (+) | +| Ring 1 | Microphone | +| Ring 2 | PTT | +| Sleeve | Ground | + +## Internal Audio/PTT + +Direct solder points for internal enclosure mounting: + +| Pad | Signal | Notes | +|-----|--------|-------| +| SPKR | Speaker out | Low-impedance (8Ω), level via VR1 | +| MIC | Microphone in | 3.3V bias for electret | +| PTT | Push-to-talk | Ground to transmit | + +Adjacent pads provide ground connections. + +### Microphone Bias + +The MIC input includes 3.3V bias through R6 for electret microphones. To use a dynamic mic or external preamp: +- Remove R6 and install in R7 position, OR +- Add a DC blocking capacitor in series + +## USB Serial Header (JP2) + +For FTDI cable connection (alternative to on-board USB): + +| Pin | Signal | +|-----|--------| +| 1 | GND | +| 2 | CTS | +| 3 | VIO (reference voltage) | +| 4 | TXD (from RS-UV3A) | +| 5 | RXD (to RS-UV3A) | +| 6 | RTS | + +:::note +JP1 and JP2 share the same serial port. Use only one at a time. +::: + +## Amplifier Header (AMP) + +For connection to RS-UVPA power amplifier: + +| Pin | Signal | Description | +|-----|--------|-------------| +| 1 | RC1 | Digital control 1 | +| 2 | RC2 | Digital control 2 | +| 3 | AN1 | Analog input 1 | +| 4 | AN2 | Analog input 2 | +| 5 | +8.5V | Power output | +| 6 | GND | Ground | + +## Power Switch Header (PW) + +Direct connection to VIN power. Ships with jumper installed. + +- Remove jumper to install external power switch +- Can also be used as alternate power input or to power peripherals + +## PA Header and SJ1 + +Internal connection for RS-UVPA integration: + +- **SJ1** (Solder Jumper): Factory-installed, routes RF to SMA jack +- **PA Header**: RF connection when using internal amplifier + +To use RS-UVPA: Clear solder from SJ1 and connect amplifier to PA header. + +## I/O Power Header (I/O_P) + +Install jumper to put 8.5V on DB-9 pin 6. Useful for powering: +- GPS receivers +- Bluetooth modules +- Other 5V–8.5V accessories + +## 26 MHz Output (26M) + +Access to the 26 MHz TCXO reference oscillator. Intended for sub-receiver applications—advanced use only. + +## ICSP Header + +Programming header for the PIC18F45K22 microcontroller. Pins are staggered to allow connection without soldering a header. diff --git a/src/content/docs/getting-started/index.md b/src/content/docs/getting-started/index.md new file mode 100644 index 0000000..99d0f47 --- /dev/null +++ b/src/content/docs/getting-started/index.md @@ -0,0 +1,93 @@ +--- +title: Getting Started +description: Quick start guide for the RS-UV3A FM transceiver +--- + +This guide will help you get your RS-UV3A up and running for basic voice operation. + +## What You'll Need + +Before powering on your RS-UV3A, gather these essentials: + +1. **Antenna** or 50Ω dummy load +2. **Power source** (one of the following): + - USB cable and USB power supply/computer + - 9V battery + - 12V DC wall adapter (5.5×2.1mm barrel connector) +3. **Speaker** (or headphones) +4. **Microphone** (electret type) +5. **PTT switch** (momentary contact) + +## Minimum Connections + +### 1. Antenna + +Connect a suitable antenna or 50Ω load to the SMA jack. The RS-UV3A is tolerant of antenna mismatches (even open or short circuits), but a well-matched antenna gives best performance and equipment longevity. + +:::caution[Never transmit without a load] +While the RS-UV3A can survive momentary antenna mismatches, always connect an antenna or dummy load before transmitting. +::: + +### 2. Power + +You have several options for powering the RS-UV3A: + +| Method | Voltage | Notes | +|--------|---------|-------| +| **USB** | 5V | Powers board and provides serial | +| **VIN Jack** | 3.5–16V | 5.5×2.1mm barrel, center positive | +| **PW Header** | 3.5–16V | For custom installations | + +The RS-UV3A includes diode protection, so USB and external power can be connected simultaneously. This provides backup power capability—connect a USB power bank to keep operating if primary power fails. + +:::tip[Power Switch] +The PW header has a factory-installed jumper. Remove it and wire in a switch for on/off control. +::: + +### 3. Audio and PTT + +For basic voice operation, connect: + +| Connection | Signal | Notes | +|------------|--------|-------| +| **SPKR** | Speaker output | 8Ω speaker, level via VR1 | +| **MIC** | Microphone input | 3.3V bias for electret mic | +| **PTT** | Push-to-talk | Ground to transmit | + +The ground pads next to each signal provide convenient connection points. + +## Factory Default Settings + +Out of the box, your RS-UV3A is configured for: + +- **Frequency:** 146.520 MHz (2m FM simplex calling frequency) +- **Mode:** Simplex (TX and RX on same frequency) +- **Power:** High (~200 mW) +- **Squelch:** Level 3 +- **Baud Rate:** 19200 + +At this point, you can listen on 146.52 MHz and transmit by pressing PTT! + +## Next Steps + +To change frequencies or adjust other parameters, you'll need a serial connection: + +- [Serial Setup](/getting-started/serial-setup/) — Connect to a computer for full control +- [Connections Reference](/getting-started/connections/) — Detailed pinouts for all connectors +- [Voice Operation](/guides/voice-operation/) — In-depth guide for voice communications + +## Quick Test + +1. Power on the RS-UV3A +2. Connect a speaker to hear receiver audio +3. Turn the squelch control (VR1) to hear background noise +4. Tune a handheld radio to 146.52 MHz and transmit +5. You should hear the signal on your RS-UV3A speaker + +If you have a serial terminal connected: + +``` +FS146520 # Confirm frequency +SQ3 # Set squelch level +VU15 # Set volume +``` diff --git a/src/content/docs/getting-started/serial-setup.md b/src/content/docs/getting-started/serial-setup.md new file mode 100644 index 0000000..f8c81db --- /dev/null +++ b/src/content/docs/getting-started/serial-setup.md @@ -0,0 +1,247 @@ +--- +title: Serial Setup +description: Connecting to the RS-UV3A via serial for configuration and control +--- + +Full control of the RS-UV3A requires a serial connection. This guide covers the various ways to connect and configure serial communication. + +## Connection Options + +The RS-UV3A provides three serial connection methods: + +| Method | Connector | Best For | +|--------|-----------|----------| +| **On-board USB** | Micro USB | Most users—single cable for power and control | +| **JP1 Header** | 0.1" header | Arduino and microcontroller projects | +| **JP2 Header** | 6-pin header | FTDI cable or Raspberry Pi | +| **DB-9 I/O** | DB-9 pins 7/8 | External serial devices | + +:::note[Important] +JP1 and JP2 share the same internal serial port (`B1` baud setting). The DB-9 uses a separate serial port (`B2` baud setting). +::: + +## On-board USB (Recommended) + +The RS-UV3A Rev A includes an FTDI FT230X USB-serial chip that works without drivers on most modern operating systems. + +### Setup Steps + +1. Connect a micro USB cable to the RS-UV3A +2. Connect the other end to your computer +3. The board powers on and enumerates as a serial port + +### Finding the Port + +**Linux:** +```bash +ls /dev/ttyUSB* +# or +dmesg | grep tty +``` + +**macOS:** +```bash +ls /dev/tty.usbserial* +``` + +**Windows:** +- Open Device Manager +- Look under "Ports (COM & LPT)" +- Note the COM port number (e.g., COM3) + +## Terminal Software + +Use any serial terminal program to communicate with the RS-UV3A: + +| Platform | Options | +|----------|---------| +| Linux | `minicom`, `screen`, `picocom`, `putty` | +| macOS | `screen`, `CoolTerm`, `Serial` | +| Windows | PuTTY, Tera Term, RealTerm | +| Cross-platform | Arduino Serial Monitor, VS Code Serial Monitor | + +### Connection Settings + +| Parameter | Value | +|-----------|-------| +| Baud Rate | 19200 (default) | +| Data Bits | 8 | +| Parity | None | +| Stop Bits | 1 | +| Flow Control | None | +| Line Ending | Carriage Return (CR) | + +### Example: Using screen (Linux/macOS) + +```bash +screen /dev/ttyUSB0 19200 +``` + +To exit: `Ctrl-A` then `K`, confirm with `Y` + +### Example: Using minicom (Linux) + +```bash +minicom -D /dev/ttyUSB0 -b 19200 +``` + +Configure: `Ctrl-A` then `O` → Serial port setup → Hardware flow control: No + +## Verifying Connection + +Send a command to verify communication: + +``` +FW +``` + +Expected response: +``` +FW: 2.4A +``` + +(Version number may vary) + +Try a few more commands: + +``` +F? # Query frequency +SS # Read signal strength +VT # Read voltage +TP # Read temperature +``` + +## Changing Baud Rate + +The RS-UV3A supports multiple baud rates: + +| Code | Baud Rate | +|------|-----------| +| 0 | 1200 | +| 1 | 4800 | +| 2 | 9600 | +| 3 | 19200 (default) | +| 4 | 38400 | +| 5 | 57600 | + +### Internal Serial (USB/JP1/JP2) + +``` +B13 # Set to 19200 (default) +B15 # Set to 57600 +``` + +### External Serial (DB-9) + +``` +B23 # Set to 19200 (default) +B25 # Set to 57600 +``` + +:::caution +Baud rate changes require a **power cycle** to take effect. After changing, you'll need to reconnect your terminal at the new baud rate. +::: + +## Arduino Connection + +To connect the RS-UV3A to an Arduino: + +1. Install headers on JP1 (see [Connections](/getting-started/connections/)) +2. Connect: + - RS-UV3A RXD → Arduino TX pin + - RS-UV3A TXD → Arduino RX pin + - RS-UV3A GND → Arduino GND + +3. Use SoftwareSerial or hardware UART at 19200 baud + +### Arduino Example + +```cpp +#include + +SoftwareSerial radio(10, 11); // RX, TX + +void setup() { + Serial.begin(9600); + radio.begin(19200); + + delay(100); + radio.println("F?"); // Query frequency +} + +void loop() { + if (radio.available()) { + Serial.write(radio.read()); + } +} +``` + +### Logic Levels + +The RS-UV3A accepts 3.3V or 5V logic inputs. Output voltage depends on the VIO pin: + +- If Arduino VIN powers the RS-UV3A: outputs match Arduino logic +- For 3.3V devices (like Raspberry Pi): jumper JP1 3.3V to JP2 VIO + +## Raspberry Pi Connection + +Connect directly to GPIO UART: + +| RS-UV3A (JP1/JP2) | Raspberry Pi | +|-------------------|--------------| +| TXD | GPIO 15 (RXD) | +| RXD | GPIO 14 (TXD) | +| GND | GND | +| 3.3V → VIO | (jumper on RS-UV3A) | + +Enable UART on Raspberry Pi: +```bash +sudo raspi-config +# → Interface Options → Serial Port +# → Login shell: No +# → Serial hardware: Yes +``` + +## Command Syntax + +All RS-UV3A commands follow these rules: + +- **Not case sensitive** — `fs146520` equals `FS146520` +- **Terminated by CR** — Carriage return (ASCII 13) +- **Fixed digit counts** — Some parameters require all digits (e.g., `FS146520` not `FS14652`) +- **Query with ?** — Most commands accept `?` to query current value + +### Quick Command Test + +``` +FS146520 # Set frequency to 146.520 MHz +F? # Query current frequency +SQ5 # Set squelch to level 5 +TX1 # Transmit for 1 minute max +TX0 # Stop transmitting +``` + +See the [Command Reference](/reference/commands/) for the complete command list. + +## Troubleshooting + +### No Response to Commands + +1. Check USB cable is data-capable (not charge-only) +2. Verify correct COM port +3. Confirm baud rate is 19200 +4. Ensure line ending is CR (not LF or CRLF) +5. Check for loose connections + +### Garbled Output + +- Wrong baud rate — try 19200, then other rates +- Line ending issues — try CR only +- Noise on serial line — use shorter cables, add bypass capacitors + +### USB Not Recognized + +- Try a different USB cable +- Try a different USB port +- On Windows, install [FTDI drivers](https://ftdichip.com/drivers/) if needed +- Check `dmesg` output on Linux for errors diff --git a/src/content/docs/guides/beacon-operation.md b/src/content/docs/guides/beacon-operation.md new file mode 100644 index 0000000..ccdb899 --- /dev/null +++ b/src/content/docs/guides/beacon-operation.md @@ -0,0 +1,260 @@ +--- +title: Beacon Operation +description: Using the RS-UV3A as an automatic CW beacon +--- + +The RS-UV3A has built-in beacon functionality for transmitting periodic CW identification or messages. This is useful for propagation studies, fox hunting, and repeater ID. + +## Beacon Types + +The RS-UV3A supports two beacon modes: + +| Type | Command | Description | +|------|---------|-------------| +| **MCW** (Audio CW) | `BT` | FM carrier with CW-modulated audio tone | +| **True CW** | `BC` | On-off keyed carrier (OOK) | + +### MCW vs True CW + +**MCW (Modulated CW):** +- Transmits on FM frequencies +- Can be received with any FM receiver (HT, mobile radio) +- Must be used in voice portions of the band + +**True CW:** +- Traditional on-off keying +- Requires a CW receiver (SSB/CW mode) +- Can be used in CW/data portions of bands +- Better range due to narrower bandwidth + +## Setting Up a Beacon + +### Step 1: Set the Beacon Message + +``` +BMWA2EUJ # Simple callsign +BMWA2EUJ BEACON # Callsign with text +BM? # Query current message +``` + +Maximum message length is 32 characters. Valid characters: +- Letters A–Z +- Numbers 0–9 +- Punctuation: period, comma, question mark, slash +- Space + +### Step 2: Set CW Parameters + +``` +CS15 # 15 WPM (words per minute) +CF0800 # 800 Hz tone frequency +CS? # Query speed +CF? # Query frequency +``` + +Speed range: 5–25 WPM +Tone range: 400–1300 Hz + +### Step 3: Set the Beacon Timer + +For MCW beacon: +``` +BT120 # Send beacon every 120 seconds (2 minutes) +BT600 # Every 10 minutes (maximum) +BT060 # Every 60 seconds (minimum) +BT000 # Disable beacon +``` + +For true CW beacon: +``` +BC120 # Send CW beacon every 120 seconds +BC000 # Disable beacon +``` + +:::note +Setting `BT` automatically disables `BC`, and vice versa. Only one beacon type can be active. +::: + +## Advanced Beacon Features + +### Carrier Insertion (True CW Only) + +In true CW mode, you can insert unmodulated carrier segments for DF (direction finding): + +``` +BM#10WA2EUJ # 10 seconds of carrier, then callsign +BMWA2EUJ#05 # Callsign, then 5 seconds carrier +BM#15WA2EUJ#10 # 15s carrier, call, 10s carrier +``` + +The `#nn` syntax inserts `nn` seconds of unmodulated carrier (1–30 seconds). + +### Message Repeat + +Use `&` to repeat the message continuously during the beacon: + +``` +BMWA2EUJ & # Repeats "WA2EUJ" until timer expires +``` + +Everything after `&` is sent once at the end. + +### Multi-Channel Beacons + +Send beacons on multiple frequencies by storing different frequencies in memory channels: + +``` +# Setup channel 1 +FS144275 # 2m frequency +PW1 # High power +ST1 # Save to channel 1 + +# Setup channel 2 +FS222100 # 1.25m frequency +PW1 # High power +ST2 # Save to channel 2 + +# Setup channel 3 +FS432100 # 70cm frequency +PW0 # Low power (different power level example) +ST3 # Save to channel 3 + +# Enable multi-channel beacon +MC3 # Cycle through channels 1-3 +BT120 # Beacon every 2 minutes +``` + +The beacon will: +1. Recall channel 1, transmit beacon +2. Wait 2 minutes +3. Recall channel 2, transmit beacon +4. Wait 2 minutes +5. Recall channel 3, transmit beacon +6. Wait 2 minutes +7. Return to channel 1, repeat... + +To disable multi-channel mode: +``` +MC0 # Single channel beacon +``` + +## CW Sidetone + +Enable sidetone to hear the CW through the speaker: + +``` +SD1 # Sidetone on +SD0 # Sidetone off (default) +``` + +The sidetone level follows the DTMF/CW gain setting: + +``` +GT08 # Default tone gain +GT12 # Louder tones +``` + +## Manual CW Transmission + +Send CW messages on demand: + +``` +CTWA2EUJ # Send "WA2EUJ" as MCW (audio) +CWWA2EUJ # Send "WA2EUJ" as true CW +``` + +Maximum manual message length is 28 characters. + +## Fox Hunting Setup + +For a hidden transmitter (fox hunt): + +``` +FS146565 # Out-of-the-way frequency +BMFOX # Simple message +BC060 # Beacon every minute +PW0 # Low power for nearby hunting +ST0 # Save settings +``` + +For longer-range hunts, use true CW with carrier segments: + +``` +BM#30FOX # 30 seconds carrier + "FOX" +BC120 # Every 2 minutes +PW1 # High power +``` + +## Propagation Beacon + +For propagation studies across multiple bands: + +``` +# Store frequencies for each band +FS144280 +ST1 + +FS222100 +ST2 + +FS432400 +ST3 + +# Configure beacon +BMWA2EUJ/B QTH # Beacon message with locator +CS12 # Slow speed for weak signal copy +MC3 # Three bands +BC300 # Every 5 minutes +``` + +## Beacon with External Controller + +For more sophisticated beacon applications (APRS beacons, GPS-based beacons), connect an Arduino or Raspberry Pi: + +1. Connect MCU to JP1 (serial + control) +2. Use `CT` or `CW` commands to send messages +3. Use `TX1`/`TX0` for transmitter control +4. MCU handles timing and message generation + +This allows: +- GPS-derived position beacons +- Temperature/telemetry beacons +- Conditional beacons (only when conditions met) + +## Stopping a Beacon + +``` +BT000 # Disable MCW beacon +BC000 # Disable CW beacon +``` + +Or simply power cycle the RS-UV3A if beacon was not saved with `ST0`. + +## Complete Beacon Example + +Setting up a 2m MCW beacon for a propagation test: + +``` +# Set frequency (beacon sub-band) +FS144280 + +# Configure CW +CS18 # 18 WPM +CF0750 # 750 Hz tone +SD1 # Enable sidetone to verify + +# Set message +BMWA2EUJ/B FN20 # Call + grid square + +# Set timing +BT180 # Every 3 minutes + +# Set power +PW1 # High power + +# Save to channel and as default +ST1 # Save to channel 1 +ST0 # Save as power-on default +``` + +The RS-UV3A will now beacon every 3 minutes until power is removed or beacon is disabled. diff --git a/src/content/docs/guides/firmware-upgrade.md b/src/content/docs/guides/firmware-upgrade.md new file mode 100644 index 0000000..cf03337 --- /dev/null +++ b/src/content/docs/guides/firmware-upgrade.md @@ -0,0 +1,164 @@ +--- +title: Firmware Upgrade +description: How to update the RS-UV3A firmware using the bootloader +--- + +The RS-UV3A firmware can be updated using a built-in bootloader. This guide covers the upgrade process. + +## Prerequisites + +You'll need: + +1. **RS-UV3A** connected via USB or serial +2. **Windows PC** (bootloader software is Windows-only) +3. **mikroBootloader 2.3** software +4. **Latest firmware file** (.HEX format) from HobbyPCB + +## Getting the Software + +### Bootloader Software + +Search for and download `mikroBootloader2.3.zip`. This is a standalone tool from MikroElektronika that doesn't require installation. + +### Firmware File + +Download the latest `RS_UV3_FIRMWARE_VX-X.HEX` from the [HobbyPCB Files](https://sites.google.com/site/hobbypcbrsuv3awiki/) page. + +## Upgrade Process + +### Step 1: Configure the Bootloader + +1. Extract and run `mikroBootloader.exe` +2. Click **Change Settings** +3. Set **Port** to your RS-UV3A's COM port +4. Set **Baud rate** to **115200** +5. Leave other settings at defaults +6. Click **OK** + +:::tip[Finding Your COM Port] +On Windows, check Device Manager → Ports (COM & LPT) to find the RS-UV3A. +::: + +### Step 2: Enter Bootloader Mode + +The RS-UV3A must be listening for the bootloader before you can connect. + +**Method 1: BL Command (Normal Operation)** + +If your RS-UV3A is working and responsive: + +1. Open a terminal program (PuTTY, Tera Term) +2. Connect at 19200 baud +3. Send the command: + ``` + BL + ``` +4. **Close the terminal program** (important!) + +The RS-UV3A is now waiting for the bootloader. It will wait indefinitely. + +**Method 2: ICSP Jumper (If Unresponsive)** + +If the RS-UV3A won't respond to commands (corrupted firmware): + +1. Power off the RS-UV3A +2. Place a jumper on the ICSP header: + - Pins 1-2 for USB/JP1 serial upload + - Pins 4-5 for DB-9 serial upload +3. Power on the RS-UV3A + +The RS-UV3A will boot directly into bootloader mode. + +### Step 3: Connect and Upload + +1. Ensure your terminal program is **closed** +2. In mikroBootloader, ensure **PIC18** is selected in "Select MCU" +3. Click **Connect** +4. You should see "Connected" in the History window +5. Click **Browse** and select the firmware .HEX file +6. Click **Begin uploading** +7. Wait for the upload to complete (progress bar fills) + +### Step 4: Restart + +1. Power cycle the RS-UV3A +2. Connect with a terminal program +3. Verify the new version: + ``` + FW + ``` + +You should see the new firmware version reported. + +## Troubleshooting + +### "No response from device" + +- Verify the COM port is correct +- Ensure the terminal program is closed +- Check that you sent `BL` command successfully +- Try the ICSP jumper method + +### Upload Fails Partway + +- Check USB cable connection +- Try a different USB port +- Reduce cable length +- Ensure stable power supply + +### RS-UV3A Unresponsive After Failed Upload + +Use the ICSP jumper method to force bootloader mode, then re-upload. + +### Wrong Bootloader Baud Rate + +The bootloader always runs at 115200 baud, regardless of the `B1` setting. Don't confuse this with the normal operating baud rate (default 19200). + +## After Upgrading + +After a successful upgrade: + +1. Check version: `FW` +2. Your saved settings should be retained +3. If settings were lost, restore defaults: `FD1` +4. Reconfigure as needed +5. Save settings: `ST0` + +## Version History + +Check the HobbyPCB wiki for release notes on each firmware version. Typical improvements include: +- New commands +- Bug fixes +- Improved receiver performance +- Additional features + +## Important Notes + +:::caution[Don't Interrupt the Upload] +Never power off or disconnect during the upload process. This can leave the RS-UV3A in an unresponsive state requiring the ICSP jumper recovery method. +::: + +:::note[Windows Only] +The mikroBootloader software only runs on Windows. For Linux/Mac users, a Windows VM or separate Windows PC is required for firmware updates. +::: + +### Exiting Bootloader Mode Without Uploading + +If you accidentally entered bootloader mode (`BL` command) and want to exit without uploading: +- Simply power cycle the RS-UV3A +- It will boot normally (unless you have an ICSP jumper installed) + +## ICSP Header Pinout + +For reference, the ICSP header pins (when viewed from the top): + +``` + 1 2 + 3 4 + 5 6 +``` + +- **Pins 1-2 jumper:** Bootloader on USB/JP1 serial +- **Pins 4-5 jumper:** Bootloader on DB-9 serial + +Remove the jumper after successful upload to resume normal operation. diff --git a/src/content/docs/guides/packet-aprs.md b/src/content/docs/guides/packet-aprs.md new file mode 100644 index 0000000..8807ab8 --- /dev/null +++ b/src/content/docs/guides/packet-aprs.md @@ -0,0 +1,220 @@ +--- +title: Packet & APRS +description: Using the RS-UV3A for packet radio and APRS +--- + +The RS-UV3A supports packet radio and APRS (Automatic Packet Reporting System) operations when connected to a TNC (Terminal Node Controller) or software modem. + +## Overview + +The RS-UV3A provides: +- **TX audio input** for packet tones from the TNC +- **RX audio output** for received signals to the TNC +- **PTT control** for keying the transmitter +- **COR output** for carrier-operated relay + +## Hardware Connections + +### Using the DB-9 I/O Connector + +Connect your TNC or sound card modem to the DB-9: + +| DB-9 Pin | Signal | TNC Connection | +|----------|--------|----------------| +| 1 | TX Audio In | TNC TX audio out | +| 2 | PTT | TNC PTT output | +| 3 | GND | TNC ground | +| 4 | RX Audio Out | TNC RX audio in | +| 5 | COR | TNC COR/DCD input (optional) | + +:::danger[TTL Levels!] +The DB-9 is NOT RS-232! Use only TTL (3.3V/5V) devices or a level converter. +::: + +### Audio Level Adjustment + +1. **TX Audio:** Adjust VR3 on the board for proper deviation (typically 3–3.5 kHz for packet) +2. **RX Audio:** Use the `VU` command to set receiver audio level + +``` +VU15 # Good starting point for DTMF/packet decode +``` + +## Configuration for Packet + +### Basic Setup for 1200 Baud + +Standard 2m packet uses 144.39 MHz (APRS) or 145.01 MHz (general packet): + +``` +FS144390 # APRS frequency +AF0 # Wide audio filter for data +DP0 # Disable pre/de-emphasis for flat response +SQ3 # Moderate squelch +ST0 # Save as defaults +``` + +### APRS Digipeater/iGate Configuration + +For unattended operation: + +``` +FS144390 # 144.39 MHz +TM0 # No tone squelch +SQ3 # Open on moderately weak signals +AF0 # Wide audio bandwidth +DP0 # Flat audio response +TO000 # Disable timeout (TNC controls TX) +ST0 # Save settings +``` + +## COR (Carrier Operated Relay) + +The DB-9 pin 5 provides a COR output: +- **Low (ground)** when squelch is open +- **Open circuit** when squelch is closed + +This can signal the TNC that a carrier is present, useful for collision avoidance in packet operations. + +### COR Inhibit + +After transmitting, there's often a burst of noise as the receiver recovers. Use COR inhibit to prevent false DCD triggers: + +``` +CO0100 # 100 ms COR inhibit after TX +CO0200 # 200 ms inhibit +CO? # Query current setting +``` + +## External Serial for TNC Control + +If your TNC needs to send commands to the RS-UV3A, configure the DB-9 serial: + +``` +EX1 # Enable serial on E_TX/E_RX pins +B23 # Set external serial to 19200 baud +``` + +Now pins 7 (E_TX) and 8 (E_RX) function as a TTL serial port. + +## Using with Software TNCs + +### Direwolf on Linux + +Connect the RS-UV3A to a USB sound card: + +``` +# direwolf.conf +ADEVICE plughw:1,0 +CHANNEL 0 +MYCALL N0CALL-1 +MODEM 1200 +PTT /dev/ttyUSB0 RTS # If using RS-UV3A serial for PTT +``` + +### SoundModem on Windows + +1. Connect RS-UV3A audio to sound card line in/out +2. Configure SoundModem with your sound card +3. Use a serial port (or VOX) for PTT + +## Channel Bandwidth + +Standard packet uses 25 kHz channel spacing: + +``` +BW1 # 25 kHz bandwidth (default) +``` + +For narrow-band packet environments: + +``` +BW0 # 12.5 kHz bandwidth +``` + +:::note +Bandwidth changes require a power cycle to take effect. +::: + +## Multiple Frequency Operation + +Store different packet frequencies in memory channels: + +``` +FS144390 # APRS +ST1 # Save to channel 1 + +FS145010 # General packet +ST2 # Save to channel 2 + +FS144990 # Alternate +ST3 # Save to channel 3 +``` + +Switch channels via serial: + +``` +RC1 # Recall APRS frequency +RC2 # Recall general packet +``` + +## Troubleshooting Packet + +### Not Decoding Packets + +1. **Check audio level:** `VU15` is a good starting point +2. **Disable filters:** `AF0` and `DP0` for flat response +3. **Check squelch:** `SQ2` or `SQ3` for reliable opening +4. **Verify frequency:** `F?` to confirm + +### TX Not Working + +1. **Verify PTT:** Ground pin 2 should key TX +2. **Check audio:** Use a speaker to verify TNC is sending tones +3. **Adjust deviation:** VR3 controls TX audio level + +### Audio Distortion + +1. **TX too hot:** Turn down TNC output or VR3 +2. **RX overdriven:** Reduce `VU` setting +3. **Check filters:** Try `AF1`/`AF0`, `DP1`/`DP0` combinations + +## 9600 Baud Considerations + +The RS-UV3A Rev A can support 9600 baud packet, but requires careful setup: + +- Use wide bandwidth mode (`BW1`) +- Disable all audio filtering (`AF0`, `HP0`, `DP0`) +- Adjust audio levels carefully—9600 baud is more sensitive to deviation errors +- VR3 adjustment is critical for proper deviation + +:::caution +9600 baud operation is more demanding than 1200 baud. Some experimentation may be required for reliable operation. +::: + +## Complete APRS Setup Example + +For a typical APRS tracker/digipeater: + +``` +# Set frequency and save +FS144390 # APRS frequency + +# Optimize for data +AF0 # Wide audio +DP0 # Flat response + +# Squelch and volume +SQ3 # Moderate squelch +VU15 # Good decode level + +# TX settings +PW1 # High power +TO060 # 60 second timeout (safety) +CO0150 # 150 ms COR inhibit + +# Save as defaults +ST0 +``` + +Then connect your TNC, configure it with your callsign and path, and you're ready for APRS! diff --git a/src/content/docs/guides/repeater-satellite.md b/src/content/docs/guides/repeater-satellite.md new file mode 100644 index 0000000..5090bca --- /dev/null +++ b/src/content/docs/guides/repeater-satellite.md @@ -0,0 +1,258 @@ +--- +title: Repeater & Satellite +description: Using two RS-UV3A boards for full duplex operation +--- + +A single RS-UV3A cannot transmit and receive simultaneously. However, two RS-UV3As can be combined to create a full-duplex system for repeater or satellite communications. + +## Full Duplex Configuration + +### Hardware Setup + +You'll need: +- Two RS-UV3A boards +- Two antennas (with sufficient isolation) +- Shared power supply +- Audio interconnection between boards + +**Basic wiring:** + +| RX Board | TX Board | +|----------|----------| +| RX Audio Out (DB-9 pin 4) | TX Audio In (DB-9 pin 1) | +| COR Out (DB-9 pin 5) | PTT (DB-9 pin 2) | +| Ground | Ground | + +The COR-to-PTT connection automatically keys the TX board when the RX board hears a signal. + +### Frequency Configuration + +**Repeater example (2m input, 70cm output):** + +*RX Board:* +``` +FS146940 # 2m input frequency +TF10000 # 100.0 Hz CTCSS (input tone) +TM2 # Require tone to open squelch +SQ4 # Moderate squelch +``` + +*TX Board:* +``` +FS446100 # 70cm output frequency +TF10000 # 100.0 Hz CTCSS (output tone) - optional +TM1 # Encode tone on TX +PW1 # High power +``` + +## Repeater Features + +The RS-UV3A includes several features specifically for repeater operation. + +### Hang Time + +Keep the transmitter keyed briefly after the input signal drops: + +``` +HT1000 # 1000 ms (1 second) hang time +HT2000 # 2 second hang time +HT0000 # No hang time (immediate drop) +HT? # Query current setting +``` + +Range: 0–5000 ms + +### CW Identification + +FCC requires repeaters to identify at least every 10 minutes. Configure automatic CW ID: + +``` +CLWA2EUJ # Set callsign (15 characters max) +IT600 # ID every 600 seconds (10 minutes) +CS15 # 15 WPM CW speed +CF0750 # 750 Hz CW tone +``` + +The CW ID is sent after the current transmission ends, not interrupting conversations. + +### Timeout Timer + +Prevent stuck transmitters from tying up the repeater: + +``` +TO180 # 3 minute timeout +TG TIMEOUT # Message to send on timeout +``` + +When a user exceeds the timeout, the repeater sends the timeout message in CW and unkeys. + +### Courtesy Beep + +Signal users that the repeater is ready for the next transmission: + +``` +CB0 # No courtesy beep (default) +CB1 # Low tone beep +CB2 # High tone beep +CB3 # High/low beep +CB4 # Two-tone beep +``` + +The courtesy beep sounds after the hang time expires. + +### COR Inhibit + +Prevent receiver squelch noise from keying the transmitter after TX drops: + +``` +CO0200 # 200 ms inhibit after TX +``` + +## Complete Repeater Example + +**RX Board Configuration:** +``` +# Frequency and tones +FS146940 # Input frequency +TF10000 # 100.0 Hz CTCSS +TM2 # Tone squelch (require tone to access) + +# Squelch +SQ4 # Moderate squelch +TSM # Medium tone sensitivity + +# Audio +VU18 # RX audio level (to TX board) +AF1 # Audio filter on + +# Save settings +ST0 +``` + +**TX Board Configuration:** +``` +# Frequency and tones +FS146340 # Output frequency (600 kHz down) +TF10000 # 100.0 Hz CTCSS +TM1 # Encode tone on TX + +# ID and timeout +CLWA2EUJ/R # Repeater callsign +IT600 # ID every 10 minutes +CS15 # CW speed +TO180 # 3 minute timeout +TGTIME # Timeout message + +# Hang time and courtesy +HT1500 # 1.5 second hang time +CB2 # High tone courtesy beep +CO0150 # COR inhibit + +# Power +PW1 # High power + +# Save settings +ST0 +``` + +## Satellite Communications + +For satellite work, configure one RS-UV3A for uplink and one for downlink. + +**Example for a 2m uplink / 70cm downlink satellite:** + +*Uplink Board:* +``` +FS145980 # Uplink frequency +TM1 # Encode any required tone +PW1 # High power for satellite +``` + +*Downlink Board:* +``` +FS435800 # Downlink frequency +SQ2 # Sensitive squelch +VU20 # Good volume for weak signals +``` + +### Doppler Considerations + +Satellite frequencies shift due to Doppler effect. You'll need to adjust frequencies during the pass: +- Use a tracking program to calculate Doppler +- Send frequency commands via serial as the pass progresses +- Or use an Arduino to automate frequency updates + +``` +# Example Doppler correction commands +FR435804 # Adjust downlink as satellite approaches +FR435800 # Nominal at TCA +FR435796 # Adjust as satellite recedes +``` + +## Cross-Band Repeat + +A simpler configuration where you repeat between two bands: + +**2m to 70cm:** + +*2m Board:* +``` +FS146520 # 2m simplex +COR Out → TX Board PTT +RX Audio → TX Board TX Audio +``` + +*70cm Board:* +``` +FS446000 # 70cm simplex +TX triggered by 2m board COR +``` + +This allows extending range between a 2m mobile and a 70cm HT, for example. + +## Important Considerations + +### Antenna Isolation + +For full-duplex operation, the TX and RX antennas must have sufficient isolation to prevent the TX signal from desensing or damaging the RX: + +- **Physical separation:** Different poles, opposite sides of building +- **Frequency separation:** Different bands provide natural isolation +- **Filtering:** Cavity filters or duplexers for same-band operation + +:::danger[Same-Band Full Duplex] +Operating a repeater with input and output on the same band (e.g., both 2m) requires expensive cavity duplexers. The RS-UV3A alone cannot provide sufficient isolation. +::: + +### Power Supply + +Both boards can share a power supply, but ensure adequate current capacity: +- Two boards: ~3.5W maximum during TX +- If using RS-UVPA amplifiers: plan for up to 30W total + +### Cooling + +Extended TX duty cycles may require additional cooling. The RS-UV3A will read its temperature: + +``` +TP # Read PCB temperature +``` + +If temperatures exceed 60°C, consider adding airflow or heatsinking. + +## Controller Integration + +For more sophisticated repeater control, interface both RS-UV3As to a repeater controller or Raspberry Pi: + +1. Connect both boards via USB (each gets its own COM port) +2. Use serial commands for: + - Frequency changes + - Power control + - Status monitoring + - Remote programming + +This enables features like: +- DTMF remote control +- Internet linking (EchoLink, IRLP) +- Weather announcements +- Scheduled operations diff --git a/src/content/docs/guides/voice-operation.md b/src/content/docs/guides/voice-operation.md new file mode 100644 index 0000000..150da6f --- /dev/null +++ b/src/content/docs/guides/voice-operation.md @@ -0,0 +1,270 @@ +--- +title: Voice Operation +description: Using the RS-UV3A for voice communications +--- + +This guide covers setting up the RS-UV3A for voice communications, including simplex operation, repeater access, and tone squelch configuration. + +## Basic Voice Setup + +For voice operation you need: + +1. **Antenna** connected to SMA jack +2. **Power** via USB or VIN +3. **Speaker** connected to SPKR pads or SPK/MIC jack +4. **Microphone** (electret) connected to MIC pad +5. **PTT switch** connected to PTT pad + +## Setting Frequencies + +### Simplex Operation + +For simplex (same frequency TX and RX), use the `FS` command: + +``` +FS146520 # 146.520 MHz (2m FM calling) +FS223500 # 223.500 MHz (1.25m FM calling) +FS446000 # 446.000 MHz (70cm FM calling) +``` + +:::tip[Frequency Format] +Always use 6 digits for frequency in kHz. For example, 146.52 MHz = `146520` kHz. +::: + +### Repeater Operation (Split Frequencies) + +Use the `FD` (down) or `FU` (up) commands for standard repeater offsets: + +``` +FD146940 # RX 146.940, TX 146.340 (600 kHz down) +FU147060 # RX 147.060, TX 147.660 (600 kHz up) +``` + +Standard offsets by band: +- **2m:** ±600 kHz +- **1.25m:** ±1600 kHz +- **70cm:** ±5000 kHz + +For non-standard splits, set TX and RX separately: + +``` +FR146940 # Set RX frequency +FT146340 # Set TX frequency +``` + +## Volume and Audio + +### Receiver Volume + +The volume can be adjusted two ways: + +1. **Hardware:** Turn VR1 potentiometer on the board +2. **Software:** Use the `VU` command (0–39, in 1 dB steps) + +``` +VU15 # Set volume to 15 (recommended for DTMF decode) +VU20 # Increase volume +VU? # Query current volume +``` + +### Audio Filters + +The RS-UV3A has switchable audio filters: + +| Command | Filter | Passband | +|---------|--------|----------| +| `AF1` | Low-pass ON | 300–2500 Hz | +| `AF0` | Low-pass OFF | 300–5500 Hz | +| `HP1` | High-pass ON | Higher low corner | +| `HP0` | High-pass OFF | Lower low corner | + +For natural-sounding voice, use the defaults (`AF1`, `HP1`). For data modes, you may want wider audio (`AF0`). + +### Microphone Gain + +Adjust microphone sensitivity with the `GM` command: + +``` +GM10 # Default gain (10) +GM15 # Maximum gain +GM05 # Lower gain for hot mics +GM? # Query current setting +``` + +Range is 0–15 in 2 dB steps. + +## Squelch Settings + +### RSSI Squelch + +The basic squelch uses received signal strength: + +``` +SQ3 # Default, opens on moderate signals +SQ0 # Always open (listen to noise) +SQ9 # Very tight (strong signals only) +SQ? # Query current level +``` + +For extended range (weak signal work), enable high squelch range: + +``` +SR1 # Add 30 dB to squelch setting +SR0 # Normal range (default) +``` + +### Checking Squelch Status + +Query whether the squelch is currently open: + +``` +SO # Returns SO: 0 (closed) or SO: 1 (open) +``` + +## Tone Squelch (CTCSS/PL) + +Many repeaters require CTCSS (Continuous Tone-Coded Squelch System) tones. + +### Setting the Tone Frequency + +``` +TF10000 # 100.0 Hz (multiply desired Hz by 100) +TF13180 # 131.8 Hz +TF08850 # 88.5 Hz +TF? # Query current tone +``` + +Common CTCSS frequencies: 67.0, 71.9, 74.4, 77.0, 79.7, 82.5, 85.4, 88.5, 91.5, 94.8, 97.4, 100.0, 103.5, 107.2, 110.9, 114.8, 118.8, 123.0, 127.3, 131.8, 136.5, 141.3, 146.2, 151.4, 156.7, 162.2, 167.9, 173.8, 179.9, 186.2, 192.8, 203.5 + +### Tone Mode + +Control when tones are transmitted/required: + +``` +TM0 # Off (default) +TM1 # TX only (encode tone on transmit) +TM2 # TX and RX (encode + tone squelch) +``` + +- **TM1:** Use when the repeater requires a PL tone to access but you want to hear all traffic +- **TM2:** Use when you only want to hear stations with your tone (tone squelch) + +### Tone Squelch Sensitivity + +If tone squelch is unreliable: + +``` +TSL # Low sensitivity (default) +TSM # Medium sensitivity +TSH # High sensitivity +``` + +## Transmitting + +### Manual PTT + +Ground the PTT pad or press the button on a speaker-mic. The TX LED illuminates during transmission. + +### Software Control + +Transmit via serial command: + +``` +TX1 # Transmit with 1 minute timeout +TX2 # Transmit with 2 minute timeout +TX5 # Transmit with 5 minute timeout +TX0 # Stop transmitting immediately +``` + +:::caution[TX0 Override] +`TX0` will stop transmission even if the hardware PTT line is still held low. +::: + +### Timeout Timer + +Prevent excessive transmissions with the timeout timer: + +``` +TO120 # 120 second (2 minute) timeout +TO300 # 5 minute timeout +TO000 # Disable timeout +TO? # Query current setting +``` + +When timeout occurs, the RS-UV3A sends a configurable CW message and unkeys: + +``` +TG TO # Set timeout message to "TO" +TGTIME # Set timeout message to "TIME" +``` + +## TX Power + +The RS-UV3A has two power levels: + +``` +PW1 # High power (~200 mW, 23 dBm) +PW0 # Low power (~10 mW, 10 dBm) +PW? # Query current setting +``` + +## VOX Operation + +The RS-UV3A includes voice-operated transmit (VOX): + +``` +VX1 # Enable VOX +VX0 # Disable VOX (default) +VL0 # High sensitivity +VL1 # Medium sensitivity (default) +VL2 # Low sensitivity +``` + +:::warning[Don't use VOX with speaker-mic] +VOX will key the transmitter when it hears audio from the speaker. Only use VOX with headphones or when the speaker is isolated from the microphone. +::: + +## Pre/De-emphasis + +For standard FM voice, keep pre-emphasis and de-emphasis enabled: + +``` +DP1 # Enabled (default) +DP0 # Disabled (for some data modes) +``` + +## Signal Monitoring + +Read current signal conditions: + +``` +SS # Signal strength in dBm +SN # Noise level (lower = cleaner signal) +SO # Squelch state (0 = closed, 1 = open) +``` + +## Complete Voice Setup Example + +Setting up for a typical 2m repeater (146.94 MHz, -600 kHz offset, 100.0 Hz PL): + +``` +FD146940 # 146.94 RX, 146.34 TX +TF10000 # 100.0 Hz CTCSS +TM1 # Encode tone on TX only +SQ4 # Moderate squelch +VU18 # Comfortable volume +PW1 # High power +TO180 # 3 minute timeout +ST0 # Save as power-on default +``` + +Then to recall these settings after power-up: +``` +RC0 # Not needed if saved as defaults +``` + +Or save to a memory channel: +``` +ST1 # Save to channel 1 +RC1 # Recall channel 1 +``` diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx new file mode 100644 index 0000000..04330ad --- /dev/null +++ b/src/content/docs/index.mdx @@ -0,0 +1,87 @@ +--- +title: RS-UV3A FM Transceiver +description: Documentation for the HobbyPCB RS-UV3A VHF/UHF Tri-Band FM Transceiver +template: splash +hero: + tagline: A versatile tri-band FM transceiver for 2m, 1.25m, and 70cm amateur radio bands + image: + file: ../../assets/radio-dark.svg + actions: + - text: Get Started + link: /getting-started/ + icon: right-arrow + variant: primary + - text: Command Reference + link: /reference/commands/ + icon: external +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## Overview + +The **RS-UV3A** is a compact FM transceiver board designed by Jim Veatch (WA2EUJ) at HobbyPCB. It provides a complete radio solution for voice, data, and beacon applications across three amateur radio bands. + + + + - **2m Band:** 136–174 MHz + - **1.25m Band:** 200–260 MHz + - **70cm Band:** 400–520 MHz + + + On-board FTDI USB-serial chip provides driverless connection to most operating systems. Power and control through a single USB cable. + + + Built-in buck-boost DC-DC converter accepts 3.5V to 16V input. Run from USB, 9V battery, or 12V wall adapter. + + + Direct headers for Arduino connection. Compatible with Raspberry Pi and other single-board computers. + + + +## Applications + +### Voice Communications +- Single or multi-channel RX/TX transceiver +- Repeater and remote base operation +- Base station, mobile, or portable use + +### Data Communications +- 1200 baud packet radio +- APRS with external TNC +- DTMF encode and decode +- CW (Morse code) + +### Specialized Uses +- CW and audio beacons +- Signal measurement and test equipment +- Direction finding (pseudo-doppler DF) +- Repeater controller (using two boards) +- Satellite uplink/downlink + +## Quick Specs + +| Parameter | Value | +|-----------|-------| +| RX Sensitivity | < -120 dBm (12 dB SINAD) | +| Output Power | > 200 mW (23 dBm) | +| TX Spurious | < -50 dBc | +| DC Power | 3.5–16V | +| Current | 1.6W max | +| Board Size | 120 × 75 mm | + +## Rev A Features + +The Rev A board adds several improvements over previous revisions: + +- **On-board USB-Serial:** Driverless FTDI chip for plug-and-play operation +- **Wide-range DC-DC:** Buck-boost converter accepts 3.5V to 16V input +- **Power Output:** Optional power on DB-9 pin 6 for accessories +- **LED Indicators:** Power, TX, and user-definable status LED + +--- + +

+ Designed by Jim Veatch, WA2EUJ
+ HobbyPCB Wiki +

diff --git a/src/content/docs/reference/commands/audio.md b/src/content/docs/reference/commands/audio.md new file mode 100644 index 0000000..ec563ce --- /dev/null +++ b/src/content/docs/reference/commands/audio.md @@ -0,0 +1,259 @@ +--- +title: Audio Commands +description: Volume, filters, and gain control commands for the RS-UV3A +--- + +## VU – Volume + +Sets the receiver audio volume. + +### Syntax + +``` +VUnn +VU? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nn` | 00–39 | Volume level in 1 dB steps | + +### Default + +12 + +### Examples + +``` +VU15 # Set volume to 15 +VU25 # Increase volume +VU? # Query current volume +``` + +### Notes + +- Both digits are required (e.g., `VU05` not `VU5`) +- Volume 10–15 recommended for DTMF decoding +- Also affects audio on I/O connector pin 4 +- Hardware adjustment available via VR1 potentiometer + +### Related Commands + +- [`GM`](#gm-microphone-gain) — Microphone gain +- [`AF`](#af-audio-low-pass) — Audio low-pass filter +- [`HP`](#hp-audio-high-pass) — Audio high-pass filter + +--- + +## AF – Audio Low-Pass Filter + +Enables or disables the audio low-pass filter. + +### Syntax + +``` +AFn +AF? +``` + +### Parameters + +| Value | Filter | Passband | +|-------|--------|----------| +| 0 | OFF | 300–5500 Hz | +| 1 | ON | 300–2500 Hz | + +### Default + +1 (ON) + +### Examples + +``` +AF1 # Enable filter (voice mode) +AF0 # Disable filter (wide audio for data) +AF? # Query current setting +``` + +### Notes + +- Use `AF1` for normal voice communications +- Use `AF0` for packet radio, wider audio bandwidth needs +- Filter reduces high-frequency noise on weak signals + +--- + +## HP – Audio High-Pass Filter + +Enables or disables the audio high-pass filter. + +### Syntax + +``` +HPn +HP? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Low-frequency corner lower | +| 1 | Low-frequency corner higher | + +### Default + +1 + +### Examples + +``` +HP1 # Enable high-pass (default) +HP0 # Disable for lower audio response +HP? # Query current setting +``` + +### Notes + +- Affects the low-frequency cutoff of the audio path +- For voice, `HP1` is typically preferred +- For data modes, experiment with `HP0` if low tones are important + +--- + +## GM – Microphone Gain + +Sets the microphone input gain. + +### Syntax + +``` +GMnn +GM? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nn` | 00–15 | Gain level in 2 dB steps | + +### Default + +10 + +### Examples + +``` +GM10 # Default gain +GM15 # Maximum gain (hot microphone) +GM05 # Reduced gain (loud talker or line input) +GM? # Query current setting +``` + +### Notes + +- Both digits required (`GM05` not `GM5`) +- Affects microphone input on MIC pad and SPK/MIC jack +- Does not affect TX audio input on I/O connector pin 1 +- Electret mic element powered by 3.3V bias (R6) + +### Adjusting for Proper Deviation + +1. Set GM to default (10) +2. Transmit and monitor on another receiver +3. If audio is weak, increase GM +4. If audio is distorted, decrease GM +5. Target: 3–5 kHz deviation for voice + +--- + +## GT – Tone Gain + +Sets the gain for CW and DTMF transmitted tones. + +### Syntax + +``` +GTnn +GT? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nn` | 00–15 | Gain level in 2 dB steps | + +### Default + +8 + +### Examples + +``` +GT08 # Default tone gain +GT12 # Louder tones +GT04 # Quieter tones +GT? # Query current setting +``` + +### Notes + +- Affects CW identification tones +- Affects DTMF transmission tones +- Affects sidetone if enabled (`SD1`) +- Adjust to achieve proper deviation (typically 3 kHz for tones) + +### Related Commands + +- [`SD`](/reference/commands/dtmf-cw/#sd-sidetone) — Enable/disable sidetone +- [`CS`](/reference/commands/dtmf-cw/#cs-cw-speed) — CW speed +- [`DD`](/reference/commands/dtmf-cw/#dd-dtmf-duration) — DTMF duration + +--- + +## DP – Pre/De-emphasis + +Enables or disables TX pre-emphasis and RX de-emphasis. + +### Syntax + +``` +DPn +DP? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Pre/de-emphasis OFF (flat response) | +| 1 | Pre/de-emphasis ON (standard FM) | + +### Default + +1 (ON) + +### Examples + +``` +DP1 # Standard FM voice mode +DP0 # Flat response for data +DP? # Query current setting +``` + +### Notes + +- Standard FM uses pre-emphasis on TX and de-emphasis on RX +- Pre-emphasis boosts high frequencies on transmit +- De-emphasis cuts high frequencies on receive +- For packet radio, `DP0` may provide flatter audio response +- 9600 baud packet typically requires `DP0` + +### Related Commands + +- [`AF`](#af-audio-low-pass) — Audio low-pass filter +- [`HP`](#hp-audio-high-pass) — Audio high-pass filter diff --git a/src/content/docs/reference/commands/beacon.md b/src/content/docs/reference/commands/beacon.md new file mode 100644 index 0000000..0ed7681 --- /dev/null +++ b/src/content/docs/reference/commands/beacon.md @@ -0,0 +1,275 @@ +--- +title: Beacon Commands +description: Automatic beacon and identification commands for the RS-UV3A +--- + +## BC – CW Beacon Timer + +Sets the interval for true CW beacon transmissions. + +### Syntax + +``` +BCnnn +BC? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnn` | 060–600 | Interval in seconds | +| | 000 | Disable beacon | + +### Default + +000 (disabled) + +### Examples + +``` +BC120 # Beacon every 2 minutes +BC300 # Beacon every 5 minutes +BC600 # Beacon every 10 minutes (max) +BC000 # Disable beacon +BC? # Query current setting +``` + +### Notes + +- All 3 digits required +- Setting `BC` automatically disables `BT` (MCW beacon) +- True CW requires a CW/SSB receiver +- Beacon message set by `BM` command + +### Related Commands + +- [`BT`](#bt-mcw-beacon-timer) — MCW beacon timer +- [`BM`](#bm-beacon-message) — Beacon message + +--- + +## BT – MCW Beacon Timer + +Sets the interval for modulated CW (audio) beacon transmissions. + +### Syntax + +``` +BTnnn +BT? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnn` | 060–600 | Interval in seconds | +| | 000 | Disable beacon | + +### Default + +000 (disabled) + +### Examples + +``` +BT120 # Beacon every 2 minutes +BT180 # Beacon every 3 minutes +BT000 # Disable beacon +BT? # Query current setting +``` + +### Notes + +- All 3 digits required +- Setting `BT` automatically disables `BC` (CW beacon) +- MCW can be received with any FM receiver +- Beacon message set by `BM` command + +--- + +## BM – Beacon Message + +Sets the text message for beacon transmissions. + +### Syntax + +``` +BM +BM? +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `` | Message up to 32 characters | + +### Default + +'RS-UV3' + +### Special Characters (True CW only) + +| Character | Description | +|-----------|-------------| +| `#nn` | Insert nn seconds of carrier (01–30) | +| `&` | Repeat message from beginning | + +### Examples + +``` +BMWA2EUJ # Simple callsign +BMWA2EUJ/B FN20 # Callsign with grid +BM#10WA2EUJ # 10 sec carrier, then callsign +BMWA2EUJ & # Repeat callsign continuously +BM? # Query current message +``` + +### Notes + +- `#nn` carrier insertion only works with `BC` (true CW) +- Everything after `&` is sent once at the end +- Standard Morse characters supported + +--- + +## MC – Multi-Channel Beacons + +Configures beacon to cycle through multiple memory channels. + +### Syntax + +``` +MCn +MC? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Single channel beacon | +| 2–9 | Cycle through channels 1 to n | + +### Default + +0 (single channel) + +### Examples + +``` +MC0 # Single channel beacon +MC3 # Cycle channels 1, 2, 3 +MC5 # Cycle channels 1 through 5 +MC? # Query current setting +``` + +### Operation + +With `MC3` and `BT120`: +1. Recall channel 1, send beacon +2. Wait 120 seconds +3. Recall channel 2, send beacon +4. Wait 120 seconds +5. Recall channel 3, send beacon +6. Wait 120 seconds +7. Return to channel 1, repeat... + +### Notes + +- Store different frequencies/power levels in memory channels first +- Enables multi-band beacons from single RS-UV3A +- Each channel can have different TX power (`PW` setting) + +### Setup Example + +``` +# Configure three beacon frequencies +FS144280 +PW1 +ST1 + +FS222100 +PW1 +ST2 + +FS432100 +PW0 +ST3 + +# Enable multi-channel +MC3 +BT180 +``` + +--- + +## IT – ID Timer + +Sets the automatic CW identification timer for repeater applications. + +### Syntax + +``` +ITnnn +IT? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnn` | 000–500 | Interval in seconds | +| | 000 | Disable auto-ID | + +### Default + +000 (disabled) + +### Examples + +``` +IT600 # ID every 10 minutes +IT300 # ID every 5 minutes +IT000 # Disable auto-ID +IT? # Query current setting +``` + +### Notes + +- FCC requires repeater ID at least every 10 minutes +- ID is sent after current transmission ends +- Uses callsign set by `CL` command +- CW parameters from `CS` and `CF` +- All 3 digits required + +### Related Commands + +- [`CL`](/reference/commands/dtmf-cw/#cl-callsign) — Set callsign +- [`ID`](#id-send-id) — Manual ID + +--- + +## ID – Send ID + +Immediately sends the stored callsign as CW. + +### Syntax + +``` +ID +``` + +### Notes + +- Sends callsign from `CL` command +- Automatically keys TX if needed +- Uses MCW (audio CW on FM carrier) +- Speed and tone from `CS` and `CF` + +### Related Commands + +- [`CL`](/reference/commands/dtmf-cw/#cl-callsign) — Set callsign +- [`IT`](#it-id-timer) — Automatic ID timer diff --git a/src/content/docs/reference/commands/dtmf-cw.md b/src/content/docs/reference/commands/dtmf-cw.md new file mode 100644 index 0000000..47178ee --- /dev/null +++ b/src/content/docs/reference/commands/dtmf-cw.md @@ -0,0 +1,367 @@ +--- +title: DTMF & CW Commands +description: DTMF tone and Morse code commands for the RS-UV3A +--- + +## DD – DTMF Duration + +Sets the duration of DTMF tones. + +### Syntax + +``` +DDnnnn +DD? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnnn` | 0050–2000 | Duration in milliseconds | + +### Default + +0500 (500 ms) + +### Examples + +``` +DD0500 # 500 ms (default) +DD0100 # 100 ms (fast) +DD1000 # 1 second +DD? # Query current setting +``` + +### Notes + +- All 4 digits required +- Includes both tone and inter-digit pause +- Longer durations improve decode reliability +- Shorter durations allow faster dialing + +--- + +## DR – DTMF Detector + +Enables or disables the DTMF tone detector. + +### Syntax + +``` +DRn +DR? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | DTMF detection OFF | +| 1 | DTMF detection ON | + +### Default + +0 (OFF) + +### Examples + +``` +DR1 # Enable DTMF detection +DR0 # Disable DTMF detection +DR? # Query current state +``` + +### Output + +When enabled and a DTMF tone is detected, the hex value is sent via serial: +- Tones 0–9 → `30`–`39` (ASCII '0'–'9') +- Tone A → `41` +- Tone B → `42` +- Tone C → `43` +- Tone D → `44` +- Tone * → `2A` +- Tone # → `23` + +### Notes + +- DTMF detection works best with `VU` around 10–15 +- Used for remote control applications +- Can trigger Arduino DOUT pin (see `AO2`) + +--- + +## DS – Send DTMF + +Sends a string of DTMF tones. + +### Syntax + +``` +DS +``` + +### Parameters + +| Character | Description | +|-----------|-------------| +| 0–9 | Numeric tones | +| A–D | Letter tones | +| * | Star | +| # | Pound | +| other | Pause (inter-digit gap) | + +### Examples + +``` +DS123 # Send "1", "2", "3" +DS*123# # Send "*123#" +DSA1B2C3D4 # Send "A1B2C3D4" +DS1 2 3 # Send "1", pause, "2", pause, "3" +``` + +### Notes + +- Maximum 28 characters +- Automatically keys TX if not already transmitting +- Duration per tone set by `DD` command +- Non-DTMF characters create pauses + +--- + +## CT – Send MCW + +Sends text as modulated CW (FM audio tones). + +### Syntax + +``` +CT +``` + +### Examples + +``` +CTCQ CQ CQ # Send "CQ CQ CQ" as audio CW +CTWA2EUJ # Send callsign +CT73 DE WA2EUJ # Send message +``` + +### Notes + +- MCW = Morse code as audio tones on FM carrier +- Can be received with any FM receiver +- Speed set by `CS` command +- Tone frequency set by `CF` command +- Maximum 28 characters +- Automatically keys TX + +--- + +## CW – Send CW + +Sends text as true CW (on-off keyed carrier). + +### Syntax + +``` +CW +``` + +### Examples + +``` +CWCQ CQ CQ # Send "CQ CQ CQ" as true CW +CWWA2EUJ # Send callsign +``` + +### Notes + +- True CW = carrier keyed on/off +- Requires CW/SSB receiver to decode +- Can use CW portions of bands +- Speed set by `CS` command +- Maximum 28 characters +- Automatically keys TX + +--- + +## CF – CW Frequency + +Sets the audio tone frequency for MCW and sidetone. + +### Syntax + +``` +CFnnnn +CF? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnnn` | 0400–1300 | Frequency in Hz | + +### Default + +0650 (650 Hz) + +### Examples + +``` +CF0650 # 650 Hz (default) +CF0800 # 800 Hz +CF1000 # 1000 Hz +CF? # Query current frequency +``` + +### Notes + +- All 4 digits required +- Affects MCW transmission and sidetone +- True CW (`CW` command) uses carrier, not this tone +- Choose frequency that's comfortable to listen to + +--- + +## CS – CW Speed + +Sets the Morse code sending speed. + +### Syntax + +``` +CSnn +CS? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nn` | 05–25 | Speed in words per minute | + +### Default + +22 WPM + +### Examples + +``` +CS15 # 15 WPM +CS22 # 22 WPM (default) +CS12 # 12 WPM (slow) +CS? # Query current speed +``` + +### Notes + +- Both digits required (`CS15` not `CS1`) +- Affects `CT`, `CW`, `ID`, and beacon messages +- Standard word is "PARIS" (50 elements) + +--- + +## CL – Callsign + +Sets the callsign for CW identification. + +### Syntax + +``` +CL +CL? +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `` | Callsign, up to 15 characters | + +### Default + +'RS-UV3' + +### Examples + +``` +CLWA2EUJ # Set callsign +CLWA2EUJ/R # Callsign with suffix +CL? # Query current callsign +``` + +### Notes + +- Used by `ID` command and `IT` timer +- Maximum 15 characters +- Typically your amateur radio callsign + +--- + +## ID – Send ID + +Sends the stored callsign as CW. + +### Syntax + +``` +ID +``` + +### Examples + +``` +ID # Send callsign in MCW +``` + +### Notes + +- Sends callsign set by `CL` command +- Automatically keys TX +- Uses speed and frequency from `CS`/`CF` +- No parameters required + +### Related Commands + +- [`CL`](#cl-callsign) — Set callsign +- [`IT`](#it-id-timer) — Automatic ID timer + +--- + +## SD – Sidetone + +Enables or disables CW/DTMF sidetone through the speaker. + +### Syntax + +``` +SDn +SD? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Sidetone OFF | +| 1 | Sidetone ON | + +### Default + +0 (OFF) + +### Examples + +``` +SD1 # Enable sidetone +SD0 # Disable sidetone +SD? # Query current state +``` + +### Notes + +- Allows monitoring CW and DTMF transmissions +- Sidetone level controlled by `GT` command +- Frequency controlled by `CF` command (for CW) diff --git a/src/content/docs/reference/commands/frequency.md b/src/content/docs/reference/commands/frequency.md new file mode 100644 index 0000000..2530cbb --- /dev/null +++ b/src/content/docs/reference/commands/frequency.md @@ -0,0 +1,134 @@ +--- +title: Frequency Commands +description: Commands for setting and measuring frequencies on the RS-UV3A +--- + +## F – Set Frequency + +Sets the transmit and/or receive frequency. + +### Syntax + +``` +Fz nnnnnn +F? +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `z` | Mode selector (see below) | +| `nnnnnn` | Frequency in kHz (all 6 digits required) | + +**Mode selectors:** + +| Mode | Description | +|------|-------------| +| `R` | Set RX frequency only | +| `T` | Set TX frequency only | +| `S` | Set both TX and RX to same frequency (simplex) | +| `D` | Set RX to frequency, TX to frequency minus standard offset | +| `U` | Set RX to frequency, TX to frequency plus standard offset | + +**Standard repeater offsets:** +- 2m band: 600 kHz +- 1.25m band: 1600 kHz +- 70cm band: 5000 kHz + +### Examples + +``` +FS146520 # Simplex on 146.520 MHz +FD146940 # RX 146.940, TX 146.340 (-600 kHz) +FU147060 # RX 147.060, TX 147.660 (+600 kHz) +FR223500 # Set RX only to 223.500 MHz +FT222900 # Set TX only to 222.900 MHz +F? # Query current frequencies +``` + +### Response + +`F?` returns: +``` +RX: 146520 +TX: 146520 +``` + +### Notes + +- Frequency range: 136-174 MHz, 200-260 MHz, 400-520 MHz +- The RS-UV3A is designed to transmit only on amateur frequencies +- TX outside amateur bands may have reduced power due to filtering +- Firmware 2.4+ supports 0.5 kHz steps by adding `5` to frequency + +### 0.5 kHz Steps (Firmware 2.4+) + +For frequencies like 146.5225 MHz: + +``` +FS1465225 # 146.5225 MHz (note: 7 digits) +``` + +### Related Commands + +- [`FM`](#fm-measure-signal) — Measure signal on a frequency +- [`ST`](/reference/commands/memory/#st-store-channel) — Store current frequency +- [`RC`](/reference/commands/memory/#rc-recall-channel) — Recall stored frequency + +--- + +## FM – Measure Signal + +Tunes to a frequency, measures signal strength, and returns to the original frequency. + +### Syntax + +``` +FMnnnnnn +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `nnnnnn` | Frequency in kHz (all 6 digits required) | + +### Examples + +``` +FM146520 # Measure signal on 146.520 MHz +FM445000 # Measure signal on 445.000 MHz +``` + +### Response + +Returns signal strength in dBm: +``` +FM: -95 +``` + +### Notes + +- Measurement takes approximately 100 ms +- Returns to original frequency after measurement +- Useful for channel activity monitoring +- Can be used to build a basic spectrum display with a controller +- Signal level is raw RSSI, not calibrated to a specific standard + +### Applications + +**Channel scanning:** +``` +FM144390 # Check APRS frequency +FM146520 # Check calling frequency +FM146940 # Check local repeater +``` + +**Signal survey:** +Use with an Arduino or other controller to scan frequencies and log signal levels for propagation studies or interference hunting. + +### Related Commands + +- [`F`](#f-set-frequency) — Set operating frequency +- [`SS`](/reference/commands/system/#ss-signal-strength) — Read current signal strength diff --git a/src/content/docs/reference/commands/index.md b/src/content/docs/reference/commands/index.md new file mode 100644 index 0000000..ec7cda6 --- /dev/null +++ b/src/content/docs/reference/commands/index.md @@ -0,0 +1,94 @@ +--- +title: Command Quick Reference +description: Complete list of RS-UV3A serial commands +--- + +This page provides a quick reference for all 66 RS-UV3A serial commands. Click on a command to see detailed documentation. + +## Command Syntax + +- Commands are **not case sensitive** (`fs` = `FS`) +- Commands end with **carriage return** (CR, ASCII 13) +- Numeric parameters require **all digits** (e.g., `FS146520` not `FS14652`) +- Query current value with **`?`** suffix (e.g., `F?`, `SQ?`) +- Default baud rate is **19200** + +:::danger[Serial Port Warning] +The DB-9 connector uses **TTL levels (3.3V/5V)**, NOT RS-232 voltages. Do not connect to a standard RS-232 port. +::: + +## Quick Reference Table + +| Command | Description | Category | +|---------|-------------|----------| +| [**F**](/reference/commands/frequency/#f-set-frequency) | Set TX/RX frequency | [Frequency](/reference/commands/frequency/) | +| [**FM**](/reference/commands/frequency/#fm-measure-signal) | Measure signal level | [Frequency](/reference/commands/frequency/) | +| [**VU**](/reference/commands/audio/#vu-volume) | Set volume (0–39) | [Audio](/reference/commands/audio/) | +| [**AF**](/reference/commands/audio/#af-audio-low-pass) | Audio low-pass filter | [Audio](/reference/commands/audio/) | +| [**HP**](/reference/commands/audio/#hp-audio-high-pass) | Audio high-pass filter | [Audio](/reference/commands/audio/) | +| [**GM**](/reference/commands/audio/#gm-microphone-gain) | Microphone gain | [Audio](/reference/commands/audio/) | +| [**GT**](/reference/commands/audio/#gt-tone-gain) | CW/DTMF tone gain | [Audio](/reference/commands/audio/) | +| [**DP**](/reference/commands/audio/#dp-pre-de-emphasis) | Pre/de-emphasis | [Audio](/reference/commands/audio/) | +| [**SQ**](/reference/commands/squelch-tones/#sq-squelch-level) | Squelch level (0–9) | [Squelch & Tones](/reference/commands/squelch-tones/) | +| [**SR**](/reference/commands/squelch-tones/#sr-squelch-range) | Squelch range | [Squelch & Tones](/reference/commands/squelch-tones/) | +| [**SO**](/reference/commands/squelch-tones/#so-squelch-status) | Squelch status | [Squelch & Tones](/reference/commands/squelch-tones/) | +| [**TF**](/reference/commands/squelch-tones/#tf-ctcss-frequency) | CTCSS tone frequency | [Squelch & Tones](/reference/commands/squelch-tones/) | +| [**TM**](/reference/commands/squelch-tones/#tm-tone-mode) | CTCSS mode | [Squelch & Tones](/reference/commands/squelch-tones/) | +| [**TS**](/reference/commands/squelch-tones/#ts-tone-sensitivity) | Tone squelch sensitivity | [Squelch & Tones](/reference/commands/squelch-tones/) | +| [**DD**](/reference/commands/dtmf-cw/#dd-dtmf-duration) | DTMF tone duration | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**DR**](/reference/commands/dtmf-cw/#dr-dtmf-detector) | DTMF detector on/off | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**DS**](/reference/commands/dtmf-cw/#ds-send-dtmf) | Send DTMF string | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**CT**](/reference/commands/dtmf-cw/#ct-send-mcw) | Send MCW (audio CW) | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**CW**](/reference/commands/dtmf-cw/#cw-send-cw) | Send true CW | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**CF**](/reference/commands/dtmf-cw/#cf-cw-frequency) | CW audio frequency | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**CS**](/reference/commands/dtmf-cw/#cs-cw-speed) | CW speed (WPM) | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**CL**](/reference/commands/dtmf-cw/#cl-callsign) | Set callsign | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**SD**](/reference/commands/dtmf-cw/#sd-sidetone) | CW/DTMF sidetone | [DTMF & CW](/reference/commands/dtmf-cw/) | +| [**BC**](/reference/commands/beacon/#bc-cw-beacon-timer) | True CW beacon timer | [Beacon](/reference/commands/beacon/) | +| [**BT**](/reference/commands/beacon/#bt-mcw-beacon-timer) | MCW beacon timer | [Beacon](/reference/commands/beacon/) | +| [**BM**](/reference/commands/beacon/#bm-beacon-message) | Beacon message | [Beacon](/reference/commands/beacon/) | +| [**MC**](/reference/commands/beacon/#mc-multi-channel) | Multi-channel beacons | [Beacon](/reference/commands/beacon/) | +| [**IT**](/reference/commands/beacon/#it-id-timer) | CW ID timer | [Beacon](/reference/commands/beacon/) | +| [**ID**](/reference/commands/beacon/#id-send-id) | Send CW ID | [Beacon](/reference/commands/beacon/) | +| [**RC**](/reference/commands/memory/#rc-recall-channel) | Recall memory channel | [Memory](/reference/commands/memory/) | +| [**ST**](/reference/commands/memory/#st-store-channel) | Store memory channel | [Memory](/reference/commands/memory/) | +| [**CP**](/reference/commands/memory/#cp-channel-parameters) | Report channel parameters | [Memory](/reference/commands/memory/) | +| [**CC**](/reference/commands/memory/#cc-check-channel) | Check channel squelch | [Memory](/reference/commands/memory/) | +| [**FD1**](/reference/commands/memory/#fd1-factory-defaults) | Restore factory defaults | [Memory](/reference/commands/memory/) | +| [**AI**](/reference/commands/io-control/#ai-arduino-input) | Arduino input pin function | [I/O Control](/reference/commands/io-control/) | +| [**AO**](/reference/commands/io-control/#ao-arduino-output) | Arduino output pin function | [I/O Control](/reference/commands/io-control/) | +| [**EX**](/reference/commands/io-control/#ex-external-pins) | External pin function | [I/O Control](/reference/commands/io-control/) | +| [**LD**](/reference/commands/io-control/#ld-status-led) | Status LED function | [I/O Control](/reference/commands/io-control/) | +| [**TX**](/reference/commands/system/#tx-transmit) | Transmit on/off | [System](/reference/commands/system/) | +| [**PW**](/reference/commands/system/#pw-tx-power) | TX power level | [System](/reference/commands/system/) | +| [**TO**](/reference/commands/system/#to-timeout) | Timeout timer | [System](/reference/commands/system/) | +| [**TG**](/reference/commands/system/#tg-timeout-message) | Timeout message | [System](/reference/commands/system/) | +| [**HT**](/reference/commands/system/#ht-hang-time) | TX hang time | [System](/reference/commands/system/) | +| [**CO**](/reference/commands/system/#co-cor-inhibit) | COR inhibit time | [System](/reference/commands/system/) | +| [**CB**](/reference/commands/system/#cb-courtesy-beep) | Courtesy beep | [System](/reference/commands/system/) | +| [**VX**](/reference/commands/system/#vx-vox) | VOX on/off | [System](/reference/commands/system/) | +| [**VL**](/reference/commands/system/#vl-vox-level) | VOX sensitivity | [System](/reference/commands/system/) | +| [**BW**](/reference/commands/system/#bw-bandwidth) | Channel bandwidth | [System](/reference/commands/system/) | +| [**PD**](/reference/commands/system/#pd-power-down) | Transceiver chip power | [System](/reference/commands/system/) | +| [**B1**](/reference/commands/system/#b1-baud-rate-1) | Serial port 1 baud rate | [System](/reference/commands/system/) | +| [**B2**](/reference/commands/system/#b2-baud-rate-2) | Serial port 2 baud rate | [System](/reference/commands/system/) | +| [**FW**](/reference/commands/system/#fw-firmware-version) | Firmware version | [System](/reference/commands/system/) | +| [**BL**](/reference/commands/system/#bl-bootloader) | Enter bootloader | [System](/reference/commands/system/) | +| [**SS**](/reference/commands/system/#ss-signal-strength) | Signal strength | [System](/reference/commands/system/) | +| [**SN**](/reference/commands/system/#sn-noise-level) | Noise level | [System](/reference/commands/system/) | +| [**VT**](/reference/commands/system/#vt-voltage) | Operating voltage | [System](/reference/commands/system/) | +| [**TP**](/reference/commands/system/#tp-temperature) | PCB temperature | [System](/reference/commands/system/) | +| [**BS**](/reference/commands/system/#bs-battery-status) | Battery status (legacy) | [System](/reference/commands/system/) | +| [**RR**](/reference/commands/system/#rr-register-read) | Read chip register | [System](/reference/commands/system/) | +| [**RS**](/reference/commands/system/#rs-register-set) | Set chip register | [System](/reference/commands/system/) | + +## Command Categories + +- **[Frequency](/reference/commands/frequency/)** — Setting and measuring frequencies +- **[Audio](/reference/commands/audio/)** — Volume, filters, and gain controls +- **[Squelch & Tones](/reference/commands/squelch-tones/)** — RSSI squelch and CTCSS +- **[DTMF & CW](/reference/commands/dtmf-cw/)** — Tone signaling and Morse code +- **[Beacon](/reference/commands/beacon/)** — Automatic beacon operation +- **[Memory](/reference/commands/memory/)** — Channel storage and recall +- **[I/O Control](/reference/commands/io-control/)** — Arduino and external pin functions +- **[System](/reference/commands/system/)** — Power, status, and configuration diff --git a/src/content/docs/reference/commands/io-control.md b/src/content/docs/reference/commands/io-control.md new file mode 100644 index 0000000..0fec3fd --- /dev/null +++ b/src/content/docs/reference/commands/io-control.md @@ -0,0 +1,190 @@ +--- +title: I/O Control Commands +description: Arduino and external I/O pin configuration commands for the RS-UV3A +--- + +## AI – Arduino Input + +Sets the function of the Arduino DIN pin on JP1. + +### Syntax + +``` +AIn +AI? +``` + +### Parameters + +| Value | Function | +|-------|----------| +| 0 | Disabled (no function) | +| 1 | Squelch open input | +| 2 | PTT input | + +### Default + +0 (Disabled) + +### Examples + +``` +AI0 # Disable DIN function +AI2 # Use DIN as PTT input +AI? # Query current function +``` + +### Notes + +- When `AI2`, grounding DIN keys the transmitter +- When `AI1`, DIN state reports squelch to external device +- DIN accepts 3.3V or 5V logic levels + +### Related Commands + +- [`AO`](#ao-arduino-output) — Arduino output pin + +--- + +## AO – Arduino Output + +Sets the function of the Arduino DOUT pin on JP1. + +### Syntax + +``` +AOn +AO? +``` + +### Parameters + +| Value | Function | +|-------|----------| +| 0 | Always LOW | +| 1 | HIGH when squelch open | +| 2 | HIGH when DTMF detected | +| 3 | HIGH when transmitting (TX ON) | +| 4 | HIGH when CTCSS detected | +| 5 | Always HIGH | +| 6 | HIGH when VOX triggered (firmware 2.4+) | + +### Default + +0 (LOW) + +### Examples + +``` +AO0 # DOUT always low +AO1 # DOUT high when squelch opens +AO3 # DOUT high during TX +AO? # Query current function +``` + +### Notes + +- Output voltage is 2–5V based on VIO pin +- Useful for LED indicators or controller inputs +- `AO2` requires DTMF detection enabled (`DR1`) +- `AO4` requires CTCSS mode enabled (`TM2`) + +### Applications + +| Setting | Use Case | +|---------|----------| +| `AO1` | Busy LED, COR indicator | +| `AO2` | DTMF command trigger | +| `AO3` | TX indicator LED | +| `AO4` | Selective call indicator | + +--- + +## EX – External Pins + +Sets the function of E_TX and E_RX pins on the DB-9 I/O connector. + +### Syntax + +``` +EXn +EX? +``` + +### Parameters + +| Value | E_TX (pin 7) | E_RX (pin 8) | +|-------|--------------|--------------| +| 0 | HIGH when TX | LOW when squelch open | +| 1 | Serial TXD | Serial RXD | + +### Default + +1 (TTL Serial Port) + +### Examples + +``` +EX1 # Use as serial port (default) +EX0 # Use as TX/SQ indicators +EX? # Query current function +``` + +### Serial Mode (EX1) + +- Pin 7 (E_TX): Serial data OUT (connect to device RX) +- Pin 8 (E_RX): Serial data IN (connect to device TX) +- Baud rate set by `B2` command + +### Indicator Mode (EX0) + +- Pin 7 (E_TX): HIGH during transmit, LOW during receive +- Pin 8 (E_RX): LOW when squelch open, HIGH when closed + +### Notes + +- Serial mode uses 3.3V logic levels +- Indicator mode useful for external controllers +- Choose mode based on what's connected to DB-9 + +--- + +## LD – Status LED + +Sets the function of the ST (status) LED on the board. + +### Syntax + +``` +LDn +LD? +``` + +### Parameters + +| Value | Function | +|-------|----------| +| 0 | Always OFF | +| 1 | Always ON | +| 2 | ON when squelch open | +| 3 | Battery charge status (legacy) | +| 4 | ON when VOX triggered (firmware 2.4+) | + +### Default + +2 (Squelch open) + +### Examples + +``` +LD0 # LED off +LD2 # LED on when signal received +LD? # Query current function +``` + +### Notes + +- The RS-UV3A has three LEDs: PWR, TX, and ST +- PWR and TX are fixed function +- Only ST LED is user-configurable +- `LD3` is a legacy function for older boards with battery charging diff --git a/src/content/docs/reference/commands/memory.md b/src/content/docs/reference/commands/memory.md new file mode 100644 index 0000000..972b17a --- /dev/null +++ b/src/content/docs/reference/commands/memory.md @@ -0,0 +1,232 @@ +--- +title: Memory Commands +description: Channel memory storage and recall commands for the RS-UV3A +--- + +## RC – Recall Channel + +Recalls operating parameters from a memory channel. + +### Syntax + +``` +RCn +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `n` | 1–9 | Memory channel number | + +### Examples + +``` +RC1 # Recall channel 1 +RC5 # Recall channel 5 +``` + +### Recalled Parameters + +- RX frequency +- TX frequency +- CTCSS tone frequency +- Squelch mode (CTCSS settings) +- TX power level + +### Notes + +- No query form—use `CP` to view channel contents +- Channel 0 is current operating parameters (set at `ST0`) +- Invalid channels return no response + +### Related Commands + +- [`ST`](#st-store-channel) — Store channel +- [`CP`](#cp-channel-parameters) — View channel parameters + +--- + +## ST – Store Channel + +Stores current operating parameters to a memory channel. + +### Syntax + +``` +STn +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `n` | 0–9 | Memory channel number | + +### Special + +| Channel | Description | +|---------|-------------| +| 0 | Power-on default settings | +| 1–9 | User memory channels | + +### Examples + +``` +ST1 # Save to channel 1 +ST0 # Save as power-on defaults +``` + +### Stored Parameters + +- RX frequency +- TX frequency +- CTCSS tone frequency +- Squelch mode (CTCSS settings) +- TX power level + +### Notes + +- `ST0` saves current state as power-on default +- Settings persist through power cycles +- Configure all parameters before storing + +### Setup Example + +``` +# Configure for local repeater +FD146940 # 146.94 MHz, -600 offset +TF10000 # 100.0 Hz CTCSS +TM1 # Encode tone +PW1 # High power + +# Save to channel and as default +ST1 # Save to channel 1 +ST0 # Also save as power-on default +``` + +--- + +## CP – Channel Parameters + +Reports all parameters for a memory channel without switching to it. + +### Syntax + +``` +CPn +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `n` | 0–9 | Memory channel number | + +### Examples + +``` +CP0 # View current operating parameters +CP1 # View channel 1 +CP5 # View channel 5 +``` + +### Response Format + +``` +TX: 146520 +RX: 146520 +Tone: 10000 +TM: 0 +PW: 1 +``` + +### Notes + +- Does not change current operating frequency +- Channel 0 shows current state +- Useful for scanning channel contents + +--- + +## CC – Check Channel + +Checks if the squelch is open on a specific memory channel. + +### Syntax + +``` +CCn +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `n` | 1–9 | Memory channel number | + +### Response + +``` +0 # Squelch closed (no signal) +1 # Squelch open (signal present) +``` + +### Notes + +- Temporarily tunes to the channel +- Takes ~50 ms for carrier squelch +- Takes ~100 ms for tone squelch +- Returns to original channel after check +- Useful for scanning applications + +### Scanning Example + +``` +CC1 # Check channel 1 +CC2 # Check channel 2 +CC3 # Check channel 3 +``` + +A controller can use this to find active channels. + +--- + +## FD1 – Factory Defaults + +Resets all parameters and memory channels to factory default values. + +### Syntax + +``` +FD1 +``` + +### Notes + +- Resets ALL settings +- Resets ALL memory channels +- Some settings require power cycle to take effect +- No confirmation prompt—executes immediately + +:::caution +This erases all custom settings! Use only when needed. +::: + +### Default Values After FD1 + +| Parameter | Default | +|-----------|---------| +| Frequency | 146.520 MHz | +| Mode | Simplex | +| Squelch | 3 | +| Volume | 12 | +| CTCSS | Off, 131.8 Hz | +| Power | High | +| Baud Rate | 19200 | +| Beacon | Off | +| Callsign | RS-UV3 | + +### Related Commands + +- [`ST0`](#st-store-channel) — Save current as default (partial save) diff --git a/src/content/docs/reference/commands/squelch-tones.md b/src/content/docs/reference/commands/squelch-tones.md new file mode 100644 index 0000000..abae5aa --- /dev/null +++ b/src/content/docs/reference/commands/squelch-tones.md @@ -0,0 +1,259 @@ +--- +title: Squelch & Tone Commands +description: Squelch and CTCSS/PL tone commands for the RS-UV3A +--- + +## SQ – Squelch Level + +Sets the RSSI-based squelch threshold. + +### Syntax + +``` +SQn +SQ? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Squelch always open (hear noise) | +| 1–8 | Progressively tighter squelch | +| 9 | Squelch always closed (muted) | + +### Default + +3 + +### Examples + +``` +SQ3 # Default setting +SQ0 # Open squelch (monitoring) +SQ6 # Tight squelch (strong signals only) +SQ? # Query current level +``` + +### Notes + +- Lower values = more sensitive (opens on weaker signals) +- Higher values = tighter (requires stronger signals) +- Use `SQ0` for weak signal work or monitoring +- Use higher values in noisy environments + +### Related Commands + +- [`SR`](#sr-squelch-range) — Extend squelch range +- [`SO`](#so-squelch-status) — Query squelch state + +--- + +## SR – Squelch Range + +Extends the squelch threshold range for weak signal operation. + +### Syntax + +``` +SRn +SR? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Normal range | +| 1 | Extended range (+30 dB) | + +### Default + +0 + +### Examples + +``` +SR0 # Normal range +SR1 # Extended range for weak signals +SR? # Query current setting +``` + +### Notes + +- `SR1` adds 30 dB to the current squelch setting +- Useful for DX work or satellite communications +- Combine with low `SQ` values for very weak signal reception + +--- + +## SO – Squelch Status + +Reports whether the squelch is currently open or closed. + +### Syntax + +``` +SO +``` + +### Response + +``` +SO: 0 # Squelch closed (no signal) +SO: 1 # Squelch open (signal present) +``` + +### Notes + +- Works with both RSSI and CTCSS squelch +- Useful for external controllers to detect activity +- No parameters, query only + +### Related Commands + +- [`SQ`](#sq-squelch-level) — Set squelch level +- [`TM`](#tm-tone-mode) — CTCSS mode setting + +--- + +## TF – CTCSS Frequency + +Sets the CTCSS (PL) tone frequency for encode and decode. + +### Syntax + +``` +TFnnnnn +TF? +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `nnnnn` | Tone frequency × 100 (5 digits) | + +### Default + +13180 (131.8 Hz) + +### Examples + +``` +TF10000 # 100.0 Hz +TF08850 # 88.5 Hz +TF13180 # 131.8 Hz +TF14620 # 146.2 Hz +TF? # Query current tone +``` + +### Standard CTCSS Frequencies (Hz) + +67.0, 71.9, 74.4, 77.0, 79.7, 82.5, 85.4, 88.5, 91.5, 94.8, 97.4, 100.0, 103.5, 107.2, 110.9, 114.8, 118.8, 123.0, 127.3, 131.8, 136.5, 141.3, 146.2, 151.4, 156.7, 162.2, 167.9, 173.8, 179.9, 186.2, 192.8, 203.5 + +### Notes + +- All 5 digits required (`TF10000` not `TF100`) +- Same frequency used for TX encode and RX decode +- Must enable with `TM` command to take effect + +### Related Commands + +- [`TM`](#tm-tone-mode) — Enable CTCSS +- [`TS`](#ts-tone-sensitivity) — Tone decode sensitivity + +--- + +## TM – Tone Mode + +Enables or disables CTCSS encoding and tone squelch. + +### Syntax + +``` +TMn +TM? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Off (no CTCSS) | +| 1 | Encode only (TX tone, no tone squelch) | +| 2 | Encode + decode (TX tone + tone squelch) | +| 3 | DCS mode (if supported by firmware) | + +### Default + +0 (Off) + +### Examples + +``` +TM0 # No CTCSS +TM1 # Encode tone on TX only +TM2 # Encode tone + require tone to open squelch +TM? # Query current mode +``` + +### Use Cases + +| Mode | Use Case | +|------|----------| +| `TM0` | Open repeaters, simplex | +| `TM1` | Repeater requires PL, hear all traffic | +| `TM2` | Only hear stations with your PL tone | + +### Notes + +- `TM1` sends tone but doesn't require it to receive +- `TM2` provides selective calling capability +- Tone frequency set by `TF` command + +--- + +## TS – Tone Sensitivity + +Sets CTCSS decoder sensitivity for tone squelch. + +### Syntax + +``` +TSx +TS? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| L | Low sensitivity | +| M | Medium sensitivity | +| H | High sensitivity | + +### Default + +L (Low) + +### Examples + +``` +TSL # Low sensitivity (default) +TSM # Medium sensitivity +TSH # High sensitivity +TS? # Query current setting +``` + +### Notes + +- Higher sensitivity = detects weaker tones +- May cause false triggers on noise with `TSH` +- Use `TSM` or `TSH` if tone squelch is unreliable +- Only affects RX tone detection, not TX encoding + +### Related Commands + +- [`TM`](#tm-tone-mode) — Enable tone squelch +- [`TF`](#tf-ctcss-frequency) — Set tone frequency diff --git a/src/content/docs/reference/commands/system.md b/src/content/docs/reference/commands/system.md new file mode 100644 index 0000000..9004d95 --- /dev/null +++ b/src/content/docs/reference/commands/system.md @@ -0,0 +1,686 @@ +--- +title: System Commands +description: Power, status, and configuration commands for the RS-UV3A +--- + +## TX – Transmit + +Controls the transmitter. + +### Syntax + +``` +TXn +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Stop transmitting (return to RX) | +| 1–5 | Transmit with n-minute timeout | + +### Examples + +``` +TX1 # Transmit, 1 minute max +TX3 # Transmit, 3 minute max +TX0 # Stop transmitting +``` + +### Notes + +- `TX0` stops TX even if hardware PTT is held +- Timeout overrides `TO` setting for this transmission only +- If TX is off, radio is in RX mode + +--- + +## PW – TX Power + +Sets the transmit power level. + +### Syntax + +``` +PWn +PW? +``` + +### Parameters + +| Value | Power Level | +|-------|-------------| +| 0 | Low (~10 mW, 10 dBm) | +| 1 | High (~200 mW, 23 dBm) | + +### Default + +1 (High) + +### Examples + +``` +PW1 # High power +PW0 # Low power +PW? # Query current setting +``` + +--- + +## TO – Timeout + +Sets the transmit timeout timer. + +### Syntax + +``` +TOnnn +TO? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnn` | 000–600 | Timeout in seconds | +| | 000 | Disable timeout | + +### Default + +000 (disabled) + +### Examples + +``` +TO180 # 3 minute timeout +TO300 # 5 minute timeout +TO000 # No timeout +TO? # Query current setting +``` + +### Notes + +- All 3 digits required +- When timeout occurs, sends TG message and unkeys +- Protects against stuck PTT + +--- + +## TG – Timeout Message + +Sets the CW message sent when TX times out. + +### Syntax + +``` +TG +TG? +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `` | Message up to 7 characters | + +### Default + +'TO' + +### Examples + +``` +TGTIME # Send "TIME" on timeout +TGTO # Send "TO" (default) +TG? # Query current message +``` + +--- + +## HT – Hang Time + +Sets TX hang time for repeater applications. + +### Syntax + +``` +HTnnnn +HT? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnnn` | 0000–5000 | Hang time in milliseconds | + +### Default + +0000 (no hang time) + +### Examples + +``` +HT1500 # 1.5 second hang time +HT2000 # 2 second hang time +HT0000 # No hang time +HT? # Query current setting +``` + +### Notes + +- All 4 digits required +- TX stays keyed for specified time after PTT release +- Used with courtesy beep in repeater applications + +--- + +## CO – COR Inhibit + +Sets the COR (Carrier Operated Relay) inhibit time. + +### Syntax + +``` +COnnnn +CO? +``` + +### Parameters + +| Parameter | Range | Description | +|-----------|-------|-------------| +| `nnnn` | 0000–9999 | Inhibit time in milliseconds | + +### Default + +0000 + +### Examples + +``` +CO0150 # 150 ms inhibit +CO0200 # 200 ms inhibit +CO? # Query current setting +``` + +### Notes + +- Prevents COR from going active briefly after TX ends +- Avoids squelch noise triggering COR +- Useful for packet and repeater applications + +--- + +## CB – Courtesy Beep + +Sets the courtesy beep for repeater applications. + +### Syntax + +``` +CBn +CB? +``` + +### Parameters + +| Value | Beep | +|-------|------| +| 0 | None | +| 1 | Low tone | +| 2 | High tone | +| 3 | High/low | +| 4 | Two tones | + +### Default + +0 (none) + +### Examples + +``` +CB0 # No beep +CB2 # High tone beep +CB? # Query current setting +``` + +### Notes + +- Sounds after hang time expires +- Signals repeater is ready for next transmission + +--- + +## VX – VOX + +Enables or disables voice-operated transmit. + +### Syntax + +``` +VXn +VX? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | VOX off | +| 1 | VOX on | + +### Default + +0 (off) + +### Examples + +``` +VX1 # Enable VOX +VX0 # Disable VOX +VX? # Query current setting +``` + +### Notes + +- Pressing PTT disables VOX +- Do not use with speaker-mic (RX audio will trigger TX) +- Sensitivity set by `VL` command + +--- + +## VL – VOX Level + +Sets VOX sensitivity. + +### Syntax + +``` +VLn +VL? +``` + +### Parameters + +| Value | Sensitivity | +|-------|-------------| +| 0 | High (most sensitive) | +| 1 | Medium | +| 2 | Low (least sensitive) | + +### Default + +1 (Medium) + +### Examples + +``` +VL0 # High sensitivity +VL2 # Low sensitivity +VL? # Query current setting +``` + +--- + +## BW – Bandwidth + +Sets the channel bandwidth. + +### Syntax + +``` +BWn +BW? +``` + +### Parameters + +| Value | Bandwidth | +|-------|-----------| +| 0 | 12.5 kHz (narrow) | +| 1 | 25 kHz (wide) | + +### Default + +1 (25 kHz) + +### Examples + +``` +BW1 # 25 kHz (standard) +BW0 # 12.5 kHz (narrow) +BW? # Query current setting +``` + +### Notes + +- **Requires power cycle to take effect** +- Use narrow for crowded bands +- Some repeaters require narrow bandwidth + +--- + +## PD – Power Down + +Controls the transceiver chip power. + +### Syntax + +``` +PDn +PD? +``` + +### Parameters + +| Value | Description | +|-------|-------------| +| 0 | Chip powered down | +| 1 | Chip powered on | + +### Default + +1 (on) + +### Examples + +``` +PD0 # Power down (saves ~70 mA) +PD1 # Power up +PD? # Query state +``` + +### Notes + +- Reduces current by approximately 70 mA +- Radio cannot TX/RX when powered down +- Serial commands still work + +--- + +## B1 – Baud Rate 1 + +Sets the baud rate for serial port 1 (USB/JP1/JP2). + +### Syntax + +``` +B1n +B1? +``` + +### Parameters + +| Value | Baud Rate | +|-------|-----------| +| 0 | 1200 | +| 1 | 4800 | +| 2 | 9600 | +| 3 | 19200 | +| 4 | 38400 | +| 5 | 57600 | + +### Default + +3 (19200) + +### Examples + +``` +B13 # Set to 19200 +B15 # Set to 57600 +B1? # Query current setting +``` + +### Notes + +- **Requires power cycle to take effect** +- Reconnect terminal at new baud rate after power cycle + +--- + +## B2 – Baud Rate 2 + +Sets the baud rate for serial port 2 (DB-9 I/O connector). + +### Syntax + +``` +B2n +B2? +``` + +### Parameters + +Same as B1. + +### Default + +3 (19200) + +### Notes + +- Only applies when `EX1` (serial mode) +- **Requires power cycle to take effect** + +--- + +## FW – Firmware Version + +Reports the current firmware version. + +### Syntax + +``` +FW +``` + +### Response + +``` +FW: 2.4A +``` + +### Notes + +- Query only, no parameters + +--- + +## BL – Bootloader + +Enters bootloader mode for firmware updates. + +### Syntax + +``` +BL +``` + +### Notes + +- RS-UV3A waits indefinitely for bootloader connection +- Power cycle required to exit without updating +- See [Firmware Upgrade](/guides/firmware-upgrade/) guide + +--- + +## SS – Signal Strength + +Reads the current receiver signal strength. + +### Syntax + +``` +SS +``` + +### Response + +``` +SS: -85 +``` + +Value is in dBm. + +--- + +## SN – Noise Level + +Reads the current receiver noise level. + +### Syntax + +``` +SN +``` + +### Response + +``` +SN: 1234 +``` + +### Notes + +- Lower values indicate cleaner signal +- Raw value, not calibrated + +--- + +## VT – Voltage + +Reads the operating voltage. + +### Syntax + +``` +VT +``` + +### Response + +``` +VT: 8.5V +``` + +### Notes + +- Reads the 8.5V internal rail +- Useful for monitoring power status + +--- + +## TP – Temperature + +Reads the PCB temperature. + +### Syntax + +``` +TP +``` + +### Response + +``` +TP: 42 +``` + +Temperature in °C. + +### Notes + +- PCB temperature, not ambient +- Will be warmer during TX + +--- + +## BS – Battery Status + +Legacy command for battery charger status. + +### Syntax + +``` +BS +``` + +### Response + +``` +BS: 0 +``` + +or + +``` +BS: 1 +``` + +### Notes + +- RS-UV3A Rev A does not have battery charging +- Included for compatibility with older RS-UV3 versions + +--- + +## RR – Register Read + +Reads an RDA1846S transceiver chip register. **Advanced use.** + +### Syntax + +``` +RRxx +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `xx` | Register address in hex | + +### Response + +Returns 16-bit hex value. + +### Notes + +- For advanced debugging only +- Register documentation available online for RDA1846S + +--- + +## RS – Register Set + +Sets an RDA1846S transceiver chip register. **Advanced use.** + +### Syntax + +``` +RSxxyyyy +``` + +### Parameters + +| Parameter | Description | +|-----------|-------------| +| `xx` | Register address in hex | +| `yyyy` | 16-bit value in hex | + +### Response + +``` +OK +``` + +or no response if failed. + +### Notes + +- Can disrupt radio operation if used incorrectly +- For advanced debugging only +- Settings may not persist through power cycle diff --git a/src/content/docs/reference/connectors.md b/src/content/docs/reference/connectors.md new file mode 100644 index 0000000..379aed1 --- /dev/null +++ b/src/content/docs/reference/connectors.md @@ -0,0 +1,241 @@ +--- +title: Connectors +description: Detailed connector pinouts and signal descriptions for the RS-UV3A +--- + +This page provides detailed pinouts for all RS-UV3A connectors. + +## SMA Antenna Jack (ANT) + +| Parameter | Specification | +|-----------|---------------| +| Connector | SMA female | +| Impedance | 50Ω | +| Max RF Input | -10 dBm | +| Max DC | 25V | + +The antenna jack is shared between TX and RX via an internal RF switch. + +## DC Power Jack (VIN) + +| Parameter | Specification | +|-----------|---------------| +| Connector | 5.5×2.1 mm barrel | +| Polarity | Center positive | +| Voltage | 3.5V – 16V DC | +| Protection | Reverse polarity diode | + +## Micro USB + +| Function | Description | +|----------|-------------| +| Power | 5V from USB host | +| Data | USB serial via FTDI FT230X | +| Default Baud | 19200 | + +Provides both power and serial communication through a single cable. + +## Arduino Header (JP1) + +6-pin 0.1" header for microcontroller integration: + +| Pin | Signal | Direction | Description | +|:---:|--------|:---------:|-------------| +| 1 | DIN | Input | Digital input (PTT/SQ via `AI` command) | +| 2 | RXD | Input | Serial data to RS-UV3A | +| 3 | DOUT | Output | Digital output (configurable via `AO` command) | +| 4 | TXD | Output | Serial data from RS-UV3A | +| 5 | 3.3V | Power | 3.3V output for accessories | +| 6 | GND | Ground | Ground | + +### DIN Functions (`AI` command) + +| Value | Function | +|:-----:|----------| +| 0 | Disabled | +| 1 | Squelch open input | +| 2 | PTT input (ground to TX) | + +### DOUT Functions (`AO` command) + +| Value | Function | +|:-----:|----------| +| 0 | Always LOW | +| 1 | HIGH when squelch open | +| 2 | HIGH when DTMF detected | +| 3 | HIGH when transmitting | +| 4 | HIGH when CTCSS detected | +| 5 | Always HIGH | +| 6 | HIGH when VOX triggered | + +### Logic Levels + +- **Input:** 3.3V and 5V tolerant +- **Output:** 2V–5V (determined by VIO voltage) + +## I/O Connector (DB-9) + +DB-9 male connector for external audio, serial, and control: + +| Pin | Signal | Direction | Description | +|:---:|--------|:---------:|-------------| +| 1 | TX Audio | Input | Line-level TX audio (adj. via VR3) | +| 2 | PTT | Input | Ground to transmit (-24V to +24V tolerant) | +| 3 | GND | Ground | Ground | +| 4 | RX Audio | Output | Line-level RX audio (adj. via `VU` command) | +| 5 | COR | Output | Open-drain, LOW when squelch open | +| 6 | PWR | Power | 8.5V if I/O_P jumper installed | +| 7 | E_TX | I/O | Serial TXD or TX indicator (see `EX` command) | +| 8 | E_RX | I/O | Serial RXD or SQ indicator (see `EX` command) | +| 9 | GND | Ground | Ground | + +:::danger[TTL Levels Only!] +This is **NOT** a standard RS-232 connector. It uses 3.3V/5V TTL logic levels. Connecting to RS-232 equipment may damage the RS-UV3A. +::: + +### COR Output Specifications + +| Parameter | Specification | +|-----------|---------------| +| Type | Open-drain, active LOW | +| Current | 150 mA max | +| Voltage | 12V max | + +### E_TX/E_RX Functions (`EX` command) + +| Mode | E_TX (pin 7) | E_RX (pin 8) | +|:----:|--------------|--------------| +| 0 | HIGH when TX | LOW when SQ open | +| 1 | Serial TXD | Serial RXD | + +## Speaker/Mic Jack (SPK/MIC) + +4-conductor 3.5mm TRRS jack for speaker-microphone: + +| Contact | Signal | Description | +|---------|--------|-------------| +| Tip | Speaker + | Speaker audio output | +| Ring 1 | Microphone | Mic input (3.3V bias) | +| Ring 2 | PTT | Ground to transmit | +| Sleeve | Ground | Common ground | + +Compatible with standard speaker-microphones wired in this configuration. + +## Internal Audio/PTT + +Direct solder pads for enclosure-mounted components: + +| Pad | Signal | Description | +|-----|--------|-------------| +| SPKR | Speaker out | 8Ω speaker, level via VR1 | +| MIC | Microphone in | 3.3V bias for electret | +| PTT | Push-to-talk | Ground to transmit | + +Ground pads are located adjacent to each signal pad. + +### Microphone Bias + +The MIC input provides 3.3V bias through R6 for electret microphone elements. For dynamic microphones or external preamps: + +- Remove R6 and relocate to R7 position, OR +- Add a DC blocking capacitor in series + +## USB Serial Header (JP2) + +6-pin header for FTDI cable or direct connection: + +| Pin | Signal | Description | +|:---:|--------|-------------| +| 1 | GND | Ground | +| 2 | CTS | Clear to send (optional) | +| 3 | VIO | Reference voltage for logic levels | +| 4 | TXD | Serial out from RS-UV3A | +| 5 | RXD | Serial in to RS-UV3A | +| 6 | RTS | Request to send (optional) | + +:::note +JP1 and JP2 share the same serial port. Use only one at a time. +::: + +## Amplifier Header (AMP) + +6-pin header for RS-UVPA power amplifier connection: + +| Pin | Signal | Description | +|:---:|--------|-------------| +| 1 | RC1 | Digital control output 1 | +| 2 | RC2 | Digital control output 2 | +| 3 | AN1 | Analog input 1 | +| 4 | AN2 | Analog input 2 | +| 5 | +8.5V | Power output | +| 6 | GND | Ground | + +## Power Switch Header (PW) + +2-pin header for external power switch: + +| Pin | Signal | +|:---:|--------| +| 1 | VIN+ | +| 2 | VIN+ (through jumper) | + +- Ships with jumper installed (power always on) +- Remove jumper and wire to SPST switch for on/off control +- Can be used as alternate power input + +## PA Header and SJ1 + +Internal RF connection point for RS-UVPA integration: + +| Component | Description | +|-----------|-------------| +| PA Header | RF in/out for internal amplifier | +| SJ1 | Solder jumper (factory-installed) | + +- **SJ1 closed (default):** RF routes to ANT jack +- **SJ1 open:** RF routes to PA header for amplifier connection + +To install RS-UVPA: Clear solder from SJ1, connect amp to PA header. + +## ICSP Header + +In-circuit serial programming header for PIC18F45K22: + +``` + 1 2 + ● ● + 3 4 + ● ● + 5 6 + ● ● +``` + +Pins are staggered to allow programming without soldering a header. + +### Bootloader Jumper Positions + +| Jumper | Result | +|--------|--------| +| 1-2 | Boot to bootloader on USB/JP1 serial | +| 4-5 | Boot to bootloader on DB-9 serial | + +## I/O Power Header (I/O_P) + +2-pin jumper to enable 8.5V on DB-9 pin 6: + +| State | Result | +|-------|--------| +| Open | Pin 6 not connected | +| Jumpered | Pin 6 = 8.5V | + +Useful for powering external accessories like GPS modules. + +## 26 MHz Output (26M) + +Single-pin access to 26 MHz TCXO reference: + +| Parameter | Specification | +|-----------|---------------| +| Signal | 26 MHz square wave | +| Purpose | Sub-receiver reference | +| Usage | Advanced applications only | diff --git a/src/content/docs/reference/hardware-revisions.md b/src/content/docs/reference/hardware-revisions.md new file mode 100644 index 0000000..5c6bd8a --- /dev/null +++ b/src/content/docs/reference/hardware-revisions.md @@ -0,0 +1,188 @@ +--- +title: Hardware Revisions +description: Differences between RS-UV3 hardware revisions +--- + +The RS-UV3 has gone through several hardware revisions. This page documents the differences between revisions and compatibility considerations. + +## Revision Summary + +| Revision | Key Features | +|----------|--------------| +| **Rev A** (Current) | On-board USB, buck-boost DC-DC, 3.5V–16V input | +| **Rev D** | Battery charging, 9V–16V input, FTDI cable required | +| **Rev C** | Battery charging, LED indicators, sub-RX header | +| **Rev B** | Basic design, battery charging | + +## RS-UV3A Rev A (Current) + +The Rev A is the latest and recommended version. + +### New Features in Rev A + +| Feature | Description | +|---------|-------------| +| **On-board USB** | FTDI FT230X for driverless USB serial | +| **Wide-range DC-DC** | Buck-boost converter accepts 3.5V–16V | +| **USB Power** | Can be powered entirely from USB | +| **Micro USB** | Single connector for power + serial | +| **LED Indicators** | Power, TX, and user-configurable Status | +| **DB-9 Power** | Optional 8.5V on pin 6 via I/O_P jumper | + +### Removed in Rev A + +| Feature | Notes | +|---------|-------| +| Battery Charging | No MCP73213 charger circuit | +| Battery Connector | No BATT header | +| 9V minimum | Now accepts down to 3.5V | + +### Specifications + +| Parameter | Rev A | +|-----------|-------| +| Input Voltage | 3.5V – 16V | +| Power Consumption | 1.6W max | +| Weight | 34 grams | +| USB Serial | On-board FTDI | + +## RS-UV3 Rev D + +### Features + +- Battery charge management (MCP73213) +- 8.4V dual-cell LiPo support +- 9V–16V DC input required +- Three LEDs (PWR, TX, ST) +- Requires external FTDI cable for serial + +### Specifications + +| Parameter | Rev D | +|-----------|-------| +| Input Voltage | 9V – 16V | +| Battery | 8.4V dual-cell LiPo | +| Charge Current | 150 mA | +| Weight | ~40 grams | +| USB Serial | External FTDI cable | + +## RS-UV3 Rev C + +### Features + +- First revision with LED indicators +- Sub-receiver RF output header (S_RX) +- Battery charging +- I/O power jumper added + +### Specifications + +| Parameter | Rev C | +|-----------|-------| +| Input Voltage | 9V – 16V | +| RX Current | 180 mA max | +| TX Current | 400 mA max | +| Weight | 40 grams | + +## RS-UV3 Rev B + +The original production version with basic features. + +### Features + +- Basic transceiver functionality +- Battery charging +- No LEDs +- No S_RX header + +:::note[Rev B Support] +If connecting RS-UVPA to Rev B, contact HobbyPCB Technical Support for guidance. +::: + +## Firmware Compatibility + +All revisions use the same firmware, but some features are revision-specific: + +| Feature | Rev A | Rev D | Rev C | Rev B | +|---------|:-----:|:-----:|:-----:|:-----:| +| `LD` (ST LED) | ✓ | ✓ | ✓ | — | +| `BS` (Battery Status) | Legacy | ✓ | ✓ | ✓ | +| `VT` (Voltage) | ✓* | ✓ | ✓ | ✓ | + +*Rev A returns internal 8.5V rail voltage + +## Physical Compatibility + +All revisions share the same: +- Board dimensions (120 × 75 mm) +- Mounting hole positions +- SMA antenna position +- Arduino header pinout + +This ensures enclosures and accessories are compatible across revisions. + +## Upgrading from Older Revisions + +### Rev C/D to Rev A + +If upgrading from Rev C/D: + +1. **Battery:** Rev A has no charging—use external power management +2. **Serial:** Rev A has on-board USB—FTDI cable not required +3. **Voltage:** Rev A accepts lower voltages (3.5V vs 9V) +4. **Settings:** Use `FD1` to reset to defaults after firmware update + +### Power Considerations + +| Revision | Minimum Voltage | USB Power | +|----------|-----------------|-----------| +| Rev A | 3.5V | Yes | +| Rev C/D | 9V | No (FTDI for serial only) | + +## RS-UVPA Compatibility + +The RS-UVPA power amplifier is compatible with: +- RS-UV3A Rev A +- RS-UV3 Rev D +- RS-UV3 Rev C + +Rev B may require additional modifications—contact HobbyPCB. + +### Installation Differences + +**Rev A Installation:** +1. Remove solder from SJ1 +2. Add AMP, PW, and PA headers +3. Remove VIN connector (interferes with amp) +4. Mate boards + +**Rev C/D Installation:** +1. Remove solder from SJ1 +2. Add required headers +3. Remove VIN connector +4. Mate boards + +## Identifying Your Revision + +Check the silkscreen on the PCB near the edge for the revision letter: +- "RS-UV3A Rev A" +- "RS-UV3 Rev D" +- "RS-UV3 Rev C" + +Or query firmware: +``` +FW +``` + +Firmware versions don't indicate hardware revision, but feature behavior may hint at the hardware (e.g., `BS` command behavior). + +## Documentation Notes + +This documentation primarily covers the **RS-UV3A Rev A**. Some features described may not be available on older revisions: + +- On-board USB: Rev A only +- USB power: Rev A only +- Battery charging: Rev C/D only +- 3.5V minimum: Rev A only + +When in doubt, refer to the original documentation for your specific revision on the [HobbyPCB Wiki](https://sites.google.com/site/hobbypcbrsuv3awiki/). diff --git a/src/content/docs/reference/specifications.md b/src/content/docs/reference/specifications.md new file mode 100644 index 0000000..987d6ad --- /dev/null +++ b/src/content/docs/reference/specifications.md @@ -0,0 +1,176 @@ +--- +title: Specifications +description: Technical specifications for the RS-UV3A FM transceiver +--- + +## General Specifications + +| Parameter | Specification | +|-----------|---------------| +| **Frequency Range** | | +| 2m Band | 136–174 MHz | +| 1.25m Band | 200–260 MHz | +| 70cm Band | 400–520 MHz | +| **Modulation** | FM with switchable pre/de-emphasis and LP filters | +| **Channel Spacing** | 12.5 kHz or 25 kHz (configurable) | + +:::note[Transmit Frequencies] +The RS-UV3A is designed to transmit only on amateur radio frequencies. TX operation outside the amateur bands may exhibit reduced power due to output filter configuration. +::: + +## Receiver Specifications + +| Parameter | Specification | +|-----------|---------------| +| Sensitivity | < -120 dBm for 12 dB SINAD | +| Input Filtering | 100 MHz high-pass filter | +| LNA | Low-noise amplifier with band-equalizing filter | +| Squelch | RSSI-based, 10 levels (0–9) | +| Tone Squelch | CTCSS/PL, 3 sensitivity levels | +| Audio Output | Low impedance (8Ω speaker) | +| Volume Range | 40 dB (0–39, 1 dB steps) | + +### Maximum RF Input + +| Parameter | Limit | +|-----------|-------| +| RF Power | -10 dBm | +| DC Voltage | 25V | + +## Transmitter Specifications + +| Parameter | Specification | +|-----------|---------------| +| Output Power (High) | > 200 mW (23 dBm) | +| Output Power (Low) | ~10 mW (10 dBm) | +| Spurious Emissions | < -50 dBc (amateur band TX) | +| CTCSS Encoding | Selectable standard frequencies | +| Modulation Input | Electret microphone (3.3V bias) | +| Mic Gain Range | 30 dB (0–15, 2 dB steps) | + +### Output Filtering + +The transmitter includes individual low-pass filters for each band: +- 2m band filter +- 1.25m band filter +- 70cm band filter + +## Power Specifications + +| Parameter | Specification | +|-----------|---------------| +| Input Voltage | 3.5V – 16V DC | +| USB Power | 5V from USB host | +| Power Consumption | 1.6W maximum | +| Converter Type | Buck-boost DC-DC | +| Internal Rails | 3.3V, 8.5V | + +### Polarity Protection + +- Input is diode protected against reverse polarity +- USB and VIN can be connected simultaneously (diode isolated) +- Recommended: 1A fuse in series with positive lead + +## Physical Specifications + +| Parameter | Specification | +|-----------|---------------| +| Board Size | 120 × 75 mm (4 11/16" × 3 15/16") | +| Height | 16 mm (5/8") excluding connectors | +| Weight | 34 grams (1.2 oz) | + +## Connectors + +| Connector | Type | Purpose | +|-----------|------|---------| +| ANT | SMA female | RF antenna | +| VIN | 5.5×2.1 mm barrel | DC power input | +| USB | Micro USB | Power + serial | +| SPK/MIC | 3.5 mm TRRS | Speaker-microphone | +| I/O | DB-9 male | Audio, serial, control | +| JP1 | 0.1" header | Arduino interface | +| JP2 | 0.1" header | FTDI cable | +| ICSP | 0.1" header | Programming | +| AMP | 0.1" header | Power amp interface | +| PW | 0.1" header | Power switch | + +## Serial Interface + +| Parameter | Specification | +|-----------|---------------| +| Interface | FTDI FT230X USB-serial | +| Logic Levels | 3.3V/5V TTL | +| Default Baud | 19200 | +| Available Bauds | 1200, 4800, 9600, 19200, 38400, 57600 | +| Serial Ports | 2 (USB/JP1 and DB-9) | + +:::danger[Not RS-232] +The DB-9 connector uses TTL logic levels (3.3V/5V), NOT RS-232 voltages. Do not connect to standard RS-232 equipment. +::: + +## Environmental + +| Parameter | Specification | +|-----------|---------------| +| Operating Temp | 0°C to +50°C (typical) | +| Storage Temp | -20°C to +70°C | +| Humidity | Non-condensing | + +## Reference Oscillator + +| Parameter | Specification | +|-----------|---------------| +| Type | TCXO | +| Frequency | 26 MHz | +| Accuracy | < 50 Hz frequency error (factory calibrated) | + +## Transceiver Chip + +The RS-UV3A uses the RDA1846S single-chip transceiver: + +- Integrated VCO, LNA, mixer, IF filter +- Programmable via SPI from PIC microcontroller +- CTCSS/DCS encode/decode +- DTMF encode/decode +- RSSI and audio S/N measurement + +## Microcontroller + +| Parameter | Specification | +|-----------|---------------| +| Chip | PIC18F45K22 | +| Programming | ICSP header | +| Bootloader | mikroBootloader compatible | + +## Block Diagram + +``` + ┌─────────────┐ + SMA ───────────►│ RF SWITCH │◄──────────── TX LPF + │ └──────┬──────┘ │ + │ │ │ + ┌────▼────┐ ┌─────▼─────┐ ┌─────▼─────┐ + │ HPF │ │ LNA │ │ PA │ + │ 100MHz │ │ │ │ │ + └────┬────┘ └─────┬─────┘ └─────┬─────┘ + │ │ │ + │ ┌─────▼─────┐ ┌─────▼─────┐ + │ │ BPF │ │ RDA1846S │ + │ │ Equalizer │ │ TX │ + │ └─────┬─────┘ └───────────┘ + │ │ ▲ + │ ┌─────▼─────┐ │ + │ │ RDA1846S │ │ + │ │ RX ├──────────────────┘ + │ └─────┬─────┘ + │ │ + │ ┌─────▼─────┐ ┌───────────┐ + │ │ Audio │◄────►│ PIC MCU │ + │ │ Codec │ └─────┬─────┘ + │ └───────────┘ │ + │ │ + │ ┌─────▼─────┐ + └──────────────────────────────│ FTDI │ + │ USB-SER │ + └───────────┘ +``` diff --git a/src/styles/custom.css b/src/styles/custom.css new file mode 100644 index 0000000..8386570 --- /dev/null +++ b/src/styles/custom.css @@ -0,0 +1,110 @@ +/* RS-UV3A Documentation - Ham Radio Theme + * Green accent color reminiscent of classic radio displays + */ + +:root { + --sl-color-accent-low: #1a3d2e; + --sl-color-accent: #2d8659; + --sl-color-accent-high: #4ade80; + --sl-color-white: #ffffff; + --sl-color-gray-1: #f0fdf4; + --sl-color-gray-2: #dcfce7; + + /* Table styling */ + --sl-color-table-header: var(--sl-color-accent-low); +} + +:root[data-theme='dark'] { + --sl-color-accent-low: #1a3d2e; + --sl-color-accent: #22c55e; + --sl-color-accent-high: #bbf7d0; + --sl-color-gray-1: #0f1f17; + --sl-color-gray-2: #162b1f; +} + +/* Command code blocks - give them the terminal look */ +code { + font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace; +} + +/* Make command syntax stand out */ +.sl-markdown-content code:not(pre code) { + background-color: var(--sl-color-accent-low); + color: var(--sl-color-accent-high); + padding: 0.15em 0.35em; + border-radius: 4px; +} + +/* Table improvements for command reference */ +.sl-markdown-content table { + width: 100%; + border-collapse: collapse; + font-size: 0.9em; +} + +.sl-markdown-content th { + background-color: var(--sl-color-accent-low); + color: var(--sl-color-white); + text-align: left; + padding: 0.75rem; +} + +.sl-markdown-content td { + padding: 0.5rem 0.75rem; + border-bottom: 1px solid var(--sl-color-gray-5); +} + +.sl-markdown-content tr:hover { + background-color: var(--sl-color-gray-6); +} + +/* Aside/callout styling */ +.starlight-aside--caution { + border-color: #f59e0b; +} + +.starlight-aside--danger { + border-color: #ef4444; +} + +/* Pin diagram tables - fixed width for better alignment */ +.sl-markdown-content table.pin-diagram { + font-family: monospace; +} + +.sl-markdown-content table.pin-diagram td:first-child { + width: 3em; + text-align: center; + font-weight: bold; +} + +/* Hero section on landing page */ +.hero-title { + font-size: 2.5rem; + font-weight: 700; + color: var(--sl-color-accent); +} + +/* Badge styling */ +.badge { + display: inline-block; + padding: 0.25em 0.5em; + border-radius: 4px; + font-size: 0.8em; + font-weight: 600; +} + +.badge-2m { + background-color: #22c55e; + color: white; +} + +.badge-125m { + background-color: #3b82f6; + color: white; +} + +.badge-70cm { + background-color: #a855f7; + color: white; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +}