From d6692d9f1993e9db5fc0ab5ee3b55cc953bb0476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20F=C3=BCcher?= Date: Mon, 30 Mar 2026 11:43:05 -0300 Subject: [PATCH 1/5] Issue 93 setup astro (#104) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Set up Astro + Starlight project structure (Issue #93) Implements the initial website directory with: - Astro + Starlight configuration - TypeScript setup (tsconfig.json) - Component structure (ChartDemo, SinceBadge) - Custom landing page (src/pages/index.astro) - Documentation pages structure (src/content/docs/) * Getting Started: introduction, installation, quickstart * Guides: radix, transit, animation, custom settings, etc. * Framework integrations: React, Vue, Angular * API Reference: Chart, Radix, Transit, Settings, Types, etc. * Project: changelog, contributing - Placeholder logo and styles - .gitignore and environment setup Acceptance criteria met: ✓ website/ directory created with package.json ✓ astro.config.mjs configured with Starlight ✓ TypeScript setup ✓ src/ directory structure with pages, components, styles, content/docs ✓ public/ directory with placeholder logo ✓ ChartDemo and SinceBadge components ready Next: npm install and verify build (will be done in Phase 1) * fix: Resolve build errors for Astro 6 + Starlight 0.38 compatibility - Fix tsconfig.json: correct Astro tsconfig preset path (configs/ -> tsconfigs/) - Upgrade to astro@^6.0.0 + @astrojs/starlight@^0.38.0 (Zod v4 compatible) - Add .npmrc with legacy-peer-deps=true for peer dependency resolution - Fix src/content.config.ts location and add docsLoader() (Astro 6 requirement) - Fix astro.config.mjs sidebar slugs (remove 'docs/' prefix) - Fix social config syntax (array instead of object, Starlight v0.33+ change) - Rewrite landing page to use StarlightPage component correctly - Fix internal links to use correct route paths Build result: 24 pages built, search index generated, sitemap created. * docs: Add retrospective findings to AGENTS.md - Add Environment section (nvm use 24, website sub-project) - Add Adding New Dependencies section with verification workflow * fix: Exclude website/ from root TypeScript and webpack build The website/ sub-project has its own node_modules with Astro/Starlight packages. Without exclusions, ts-loader was crawling into website/node_modules/ and failing with 24 TypeScript errors. - tsconfig.json: add 'website' to exclude list - webpack.config.js: add /website/ to ts-loader exclude regex * docs: Add sub-project isolation hard rule to AGENTS.md --- AGENTS.md | 35 + tsconfig.json | 2 +- webpack.config.js | 2 +- website/.gitignore | 27 + website/.npmrc | 1 + website/astro.config.mjs | 71 + website/package-lock.json | 6672 +++++++++++++++++ website/package.json | 24 + website/public/img/logo.svg | 7 + website/src/components/ChartDemo.astro | 122 + website/src/components/SinceBadge.astro | 29 + website/src/content.config.ts | 7 + .../src/content/docs/api/aspect-calculator.md | 34 + website/src/content/docs/api/chart.md | 71 + website/src/content/docs/api/radix.md | 42 + website/src/content/docs/api/settings.md | 48 + website/src/content/docs/api/transit.md | 44 + website/src/content/docs/api/types.md | 70 + website/src/content/docs/api/zodiac.md | 42 + website/src/content/docs/changelog.md | 30 + website/src/content/docs/contributing.md | 69 + website/src/content/docs/guides/animation.md | 31 + .../src/content/docs/guides/click-events.md | 38 + .../content/docs/guides/custom-settings.md | 27 + .../src/content/docs/guides/custom-symbols.md | 32 + .../content/docs/guides/frameworks/angular.md | 56 + .../content/docs/guides/frameworks/react.md | 56 + .../src/content/docs/guides/frameworks/vue.md | 57 + .../content/docs/guides/multiple-charts.md | 34 + .../src/content/docs/guides/radix-chart.md | 81 + .../src/content/docs/guides/transit-chart.md | 44 + website/src/content/docs/installation.md | 103 + website/src/content/docs/introduction.md | 108 + website/src/content/docs/quickstart.md | 120 + website/src/env.d.ts | 2 + website/src/pages/index.astro | 191 + website/src/styles/custom.css | 20 + website/tsconfig.json | 10 + 38 files changed, 8457 insertions(+), 2 deletions(-) create mode 100644 AGENTS.md create mode 100644 website/.gitignore create mode 100644 website/.npmrc create mode 100644 website/astro.config.mjs create mode 100644 website/package-lock.json create mode 100644 website/package.json create mode 100644 website/public/img/logo.svg create mode 100644 website/src/components/ChartDemo.astro create mode 100644 website/src/components/SinceBadge.astro create mode 100644 website/src/content.config.ts create mode 100644 website/src/content/docs/api/aspect-calculator.md create mode 100644 website/src/content/docs/api/chart.md create mode 100644 website/src/content/docs/api/radix.md create mode 100644 website/src/content/docs/api/settings.md create mode 100644 website/src/content/docs/api/transit.md create mode 100644 website/src/content/docs/api/types.md create mode 100644 website/src/content/docs/api/zodiac.md create mode 100644 website/src/content/docs/changelog.md create mode 100644 website/src/content/docs/contributing.md create mode 100644 website/src/content/docs/guides/animation.md create mode 100644 website/src/content/docs/guides/click-events.md create mode 100644 website/src/content/docs/guides/custom-settings.md create mode 100644 website/src/content/docs/guides/custom-symbols.md create mode 100644 website/src/content/docs/guides/frameworks/angular.md create mode 100644 website/src/content/docs/guides/frameworks/react.md create mode 100644 website/src/content/docs/guides/frameworks/vue.md create mode 100644 website/src/content/docs/guides/multiple-charts.md create mode 100644 website/src/content/docs/guides/radix-chart.md create mode 100644 website/src/content/docs/guides/transit-chart.md create mode 100644 website/src/content/docs/installation.md create mode 100644 website/src/content/docs/introduction.md create mode 100644 website/src/content/docs/quickstart.md create mode 100644 website/src/env.d.ts create mode 100644 website/src/pages/index.astro create mode 100644 website/src/styles/custom.css create mode 100644 website/tsconfig.json diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..4b26518 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,35 @@ +# AGENTS.md + +## Environment +- Node: use `nvm use 24` if node commands fail +- Website sub-project lives in `website/` with its own `package.json`; run npm commands from there + +## Build / Lint / Test +- Install: `npm ci` +- Build: `npm run build` (webpack UMD bundle → `dist/astrochart.js`) +- Lint: `npm run lint` (ESLint, TypeScript source files only) +- Test all: `npm test` (Jest + ts-jest, jsdom environment) +- Test single file: `npx jest project/src/utils.test.ts` +- Test with coverage: `npm run test:coverage` + +## Code Style +- **Formatting:** 2-space indent, single quotes, no semicolons, unix line endings, no trailing commas, no `var` +- **Functions:** class methods have a space before parens (`radix (data: AstroData) {`); standalone functions use `export const fn = (...) => { ... }` +- **Naming:** Classes/interfaces PascalCase, methods/variables camelCase, settings keys UPPER_SNAKE_CASE, files lowercase single-word +- **Imports:** default imports for classes, named imports for functions, `import type` for type-only; relative `./` paths, no extensions, no aliases +- **Types:** interfaces/types live in the file where primarily used — no separate types file +- **Tests:** co-located (`foo.test.ts` next to `foo.ts`), use `describe`/`test` (not `it`), prefer `toStrictEqual`, never commit `.only` +- **Errors:** throw plain `Error('descriptive message')`, no custom error classes; null checks use loose equality (`== null`) +- **Docs:** JSDoc on public methods/classes with `@param`, `@return` tags +- **⚠️ Breaking changes:** this is a production library with many consumers — never change public API (exported types, method names, function signatures) + +## Adding New Dependencies +- Never write import paths or config shapes from memory for fast-moving packages (Astro, Starlight, etc.) +- After `npm install`, verify real exports: `cat node_modules//package.json | python3 -c "import json,sys; d=json.load(sys.stdin); print(list(d.get('exports',{}).keys()))"` +- Run `npm run build` (or `dev`) after creating the first file — don't build 30 files then discover the config is wrong +- Use `legacy-peer-deps=true` in `.npmrc` when a package's peer range lags behind the latest patch + +## Sub-projects isolation (⚠️ hard rule) +- `website/` is a completely separate project — it must **never** affect the library build or tests +- Any new sub-project directory **must** be added to the root `tsconfig.json` `exclude` list AND to the `exclude` regex in `webpack.config.js` before committing +- After adding a sub-project, always run `npm run build` and `npm test` from the **root** to verify isolation diff --git a/tsconfig.json b/tsconfig.json index e1aeaea..09747aa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,5 +10,5 @@ "declaration": true, "strictNullChecks": true }, - "exclude": ["project/src/**/*.test.ts", "dist"] + "exclude": ["project/src/**/*.test.ts", "dist", "website"] } \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 2e002c9..c701689 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,7 +7,7 @@ module.exports = { { test: /\.tsx?$/, use: 'ts-loader', - exclude: [/node_modules/, /.test.ts/], + exclude: [/node_modules/, /.test.ts/, /website/], }, ], }, diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..1f163c5 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,27 @@ +# dependencies +node_modules/ +.pnp +.pnp.js + +# testing +coverage/ + +# astro +dist/ +.astro/ + +# misc +.DS_Store +*.log +.env +.env.local +.env.*.local + +# IDE +.vscode/ +.idea/ +.sublime-project +.sublime-workspace +*.swp +*.swo +*~ diff --git a/website/.npmrc b/website/.npmrc new file mode 100644 index 0000000..521a9f7 --- /dev/null +++ b/website/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true diff --git a/website/astro.config.mjs b/website/astro.config.mjs new file mode 100644 index 0000000..77eca5b --- /dev/null +++ b/website/astro.config.mjs @@ -0,0 +1,71 @@ +import { defineConfig } from 'astro/config' +import starlight from '@astrojs/starlight' +import sitemap from '@astrojs/sitemap' + +export default defineConfig({ + site: 'https://astrodraw.github.io/', + integrations: [ + starlight({ + title: 'AstroChart', + description: 'Pure SVG astrology charts for the web', + favicon: '/favicon.svg', + logo: { + src: './public/img/logo.svg', + alt: 'AstroChart Logo' + }, + social: [ + { icon: 'github', label: 'GitHub', href: 'https://github.com/AstroDraw/AstroChart' } + ], + sidebar: [ + { + label: 'Getting Started', + items: [ + { label: 'Introduction', slug: 'introduction' }, + { label: 'Installation', slug: 'installation' }, + { label: 'Quick Start', slug: 'quickstart' } + ] + }, + { + label: 'Guides', + items: [ + { label: 'Radix Chart', slug: 'guides/radix-chart' }, + { label: 'Transit Chart', slug: 'guides/transit-chart' }, + { label: 'Animation', slug: 'guides/animation' }, + { label: 'Custom Settings', slug: 'guides/custom-settings' }, + { label: 'Custom Symbols', slug: 'guides/custom-symbols' }, + { label: 'Multiple Charts', slug: 'guides/multiple-charts' }, + { label: 'Click Events', slug: 'guides/click-events' }, + { + label: 'Framework Integrations', + items: [ + { label: 'React', slug: 'guides/frameworks/react' }, + { label: 'Vue', slug: 'guides/frameworks/vue' }, + { label: 'Angular', slug: 'guides/frameworks/angular' } + ] + } + ] + }, + { + label: 'API Reference', + items: [ + { label: 'Chart', slug: 'api/chart' }, + { label: 'Radix', slug: 'api/radix' }, + { label: 'Transit', slug: 'api/transit' }, + { label: 'Aspect Calculator', slug: 'api/aspect-calculator' }, + { label: 'Zodiac', slug: 'api/zodiac' }, + { label: 'Settings Reference', slug: 'api/settings' }, + { label: 'Types', slug: 'api/types' } + ] + }, + { + label: 'Project', + items: [ + { label: 'Changelog', slug: 'changelog' }, + { label: 'Contributing', slug: 'contributing' } + ] + } + ] + }), + sitemap() + ] +}) diff --git a/website/package-lock.json b/website/package-lock.json new file mode 100644 index 0000000..add876b --- /dev/null +++ b/website/package-lock.json @@ -0,0 +1,6672 @@ +{ + "name": "astrochart-website", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "astrochart-website", + "version": "1.0.0", + "dependencies": { + "@astrojs/sitemap": "^3.1.0", + "@astrojs/starlight": "^0.38.0", + "astro": "^6.0.0", + "sharp": "^0.33.0" + }, + "devDependencies": { + "typescript": "^5.3.3" + }, + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/@astrojs/compiler": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-3.0.1.tgz", + "integrity": "sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.8.0.tgz", + "integrity": "sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w==", + "license": "MIT", + "dependencies": { + "picomatch": "^4.0.3" + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.0.tgz", + "integrity": "sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.8.0", + "@astrojs/prism": "4.0.1", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "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", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.0", + "smol-toml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.1.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-5.0.3.tgz", + "integrity": "sha512-zv/OlM5sZZvyjHqJjR3FjJvoCgbxdqj3t4jO/gSEUNcck3BjdtMgNQw8UgPfAGe4yySdG4vjZ3OC5wUxhu7ckg==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "7.1.0", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.16.0", + "es-module-lexer": "^2.0.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.1.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "astro": "^6.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.1.tgz", + "integrity": "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.2.tgz", + "integrity": "sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA==", + "license": "MIT", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.38.2.tgz", + "integrity": "sha512-7AsrvG4EsXUmJT5uqiXJN4oZqKaY0wc/Ip7C6/zGnShHRVoTAA4jxeYIZ3wqbqA6zv4cnp9qk31vB2m2dUcmfg==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "^7.0.0", + "@astrojs/mdx": "^5.0.0", + "@astrojs/sitemap": "^3.7.1", + "@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.6", + "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": "^6.0.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.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "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/@clack/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.1.0.tgz", + "integrity": "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==", + "license": "MIT", + "dependencies": { + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.1.0.tgz", + "integrity": "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.1.0", + "sisteransi": "^1.0.5" + } + }, + "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.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expressive-code/core": { + "version": "0.41.7", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.41.7.tgz", + "integrity": "sha512-ck92uZYZ9Wba2zxkiZLsZGi9N54pMSAVdrI9uW3Oo9AtLglD5RmrdTwbYPCT2S/jC36JGB2i+pnQtBm/Ib2+dg==", + "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.7", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.41.7.tgz", + "integrity": "sha512-diKtxjQw/979cTglRFaMCY/sR6hWF0kSMg8jsKLXaZBSfGS0I/Hoe7Qds3vVEgeoW+GHHQzMcwvgx/MOIXhrTA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.7" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.41.7", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.41.7.tgz", + "integrity": "sha512-DL605bLrUOgqTdZ0Ot5MlTaWzppRkzzqzeGEu7ODnHF39IkEBbFdsC7pbl3LbUQ1DFtnfx6rD54k/cdofbW6KQ==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.7", + "shiki": "^3.2.2" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.41.7", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.41.7.tgz", + "integrity": "sha512-Ewpwuc5t6eFdZmWlFyeuy3e1PTQC0jFvw2Q+2bpcWXbOZhPLsT7+h8lsSIJxb5mS7wZko7cKyQ2RLYDyK6Fpmw==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.7" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "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.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "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.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "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.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "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.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "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.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "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.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "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.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "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.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "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.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "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.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "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.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "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.0.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.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "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.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "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.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "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.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "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.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.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.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "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.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "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.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz", + "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz", + "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz", + "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz", + "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "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.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "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": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "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.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "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/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.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "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": "6.1.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-6.1.1.tgz", + "integrity": "sha512-vq8sHpu1JsY1fWAunn+tdKNbVDmLQNiVdyuGsVT2csgITdFGXXVAyEXFWc1DzkMN0ehElPeiHnqItyQOJK+GqA==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^3.0.1", + "@astrojs/internal-helpers": "0.8.0", + "@astrojs/markdown-remark": "7.1.0", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^1.1.1", + "devalue": "^5.6.3", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.27.3", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "rehype": "^13.0.2", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.4", + "unist-util-visit": "^5.1.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^7.3.1", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.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.7", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.41.7.tgz", + "integrity": "sha512-hUpogGc6DdAd+I7pPXsctyYPRBJDK7Q7d06s4cyP0Vz3OcbziP3FNzN0jZci1BpCvLn9675DvS7B9ctKKX64JQ==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.41.7" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta" + } + }, + "node_modules/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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/astro/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", + "optional": true, + "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/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/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/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/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.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.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/devalue": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "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.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "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/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": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "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.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "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.7", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.41.7.tgz", + "integrity": "sha512-2wZjC8OQ3TaVEMcBtYY4Va3lo6J+Ai9jf3d4dbhURMJcU4Pbqe6EcHe424MIZI0VHUA1bR6xdpoHYi3yxokWqA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.7", + "@expressive-code/plugin-frames": "^0.41.7", + "@expressive-code/plugin-shiki": "^0.41.7", + "@expressive-code/plugin-text-markers": "^0.41.7" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "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/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.10", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.10.tgz", + "integrity": "sha512-YzJeWSkDZxAhvmp8dexjRK5hxziRO7I9m0N53WhvYL5NiWfkUkzssVzY9jvGu0HBoLFW6+duYmNSn6MaZBCCtg==", + "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/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-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "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-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.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "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/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.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "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.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "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.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "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.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "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/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "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.5", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz", + "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz", + "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "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.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "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/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.7", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.41.7.tgz", + "integrity": "sha512-25f8ZMSF1d9CMscX7Cft0TSQIqdwjce2gDOvQ+d/w0FovsMwrSt3ODP4P3Z7wO1jsIJ4eYyaDRnIR/27bd/EMQ==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.41.7" + } + }, + "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.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "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.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "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": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/smol-toml": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", + "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", + "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/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/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.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "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.5.0" + }, + "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/tinyclip": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.12.tgz", + "integrity": "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "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/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "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.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "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.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "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": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "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.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", + "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 || ^8.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/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": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "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/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "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/website/package.json b/website/package.json new file mode 100644 index 0000000..7204e42 --- /dev/null +++ b/website/package.json @@ -0,0 +1,24 @@ +{ + "name": "astrochart-website", + "version": "1.0.0", + "description": "AstroChart documentation website built with Astro + Starlight", + "private": true, + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "astro": "^6.0.0", + "@astrojs/starlight": "^0.38.0", + "@astrojs/sitemap": "^3.1.0", + "sharp": "^0.33.0" + }, + "devDependencies": { + "typescript": "^5.3.3" + }, + "engines": { + "node": ">=18.14.1" + } +} diff --git a/website/public/img/logo.svg b/website/public/img/logo.svg new file mode 100644 index 0000000..e542127 --- /dev/null +++ b/website/public/img/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/website/src/components/ChartDemo.astro b/website/src/components/ChartDemo.astro new file mode 100644 index 0000000..e68d522 --- /dev/null +++ b/website/src/components/ChartDemo.astro @@ -0,0 +1,122 @@ +--- +/** + * ChartDemo Component + * Renders a live interactive astrology chart using the AstroChart library. + * + * @param id - Unique element ID for the chart container + * @param data - AstroData object for the chart + * @param width - Chart width in pixels (default: 600) + * @param height - Chart height in pixels (default: 600) + * @param type - Chart type: 'radix' or 'transit' (default: 'radix') + * @param showCode - Show code snippet (default: false) + * @param code - Optional code snippet to display + */ + +export interface Props { + id: string + data: any + width?: number + height?: number + type?: 'radix' | 'transit' + showCode?: boolean + code?: string +} + +const { + id, + data, + width = 600, + height = 600, + type = 'radix', + showCode = false, + code +} = Astro.props +--- + +
+
+ + + {showCode && code && ( +
+ + Show Code + +
+        {code}
+      
+
+ )} +
+ + + + diff --git a/website/src/components/SinceBadge.astro b/website/src/components/SinceBadge.astro new file mode 100644 index 0000000..de973de --- /dev/null +++ b/website/src/components/SinceBadge.astro @@ -0,0 +1,29 @@ +--- +/** + * SinceBadge Component + * Displays a "Since vX.Y" badge inline with documentation. + * + * @param version - Semantic version string (e.g., "3.1.0") + */ + +export interface Props { + version: string +} + +const { version } = Astro.props +--- + +Since v{version} + + diff --git a/website/src/content.config.ts b/website/src/content.config.ts new file mode 100644 index 0000000..188b4ee --- /dev/null +++ b/website/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/website/src/content/docs/api/aspect-calculator.md b/website/src/content/docs/api/aspect-calculator.md new file mode 100644 index 0000000..6f2a963 --- /dev/null +++ b/website/src/content/docs/api/aspect-calculator.md @@ -0,0 +1,34 @@ +--- +title: Aspect Calculator +description: API reference for aspect calculation utilities. +--- + +# Aspect Calculator + +Utilities for working with aspects and angular relationships. + +## Functions + +### `calculateAspect(planet1X: number, planet1Y: number, planet2X: number, planet2Y: number): number` + +Calculates the aspect angle between two planets. + +**Parameters:** +- `planet1X`, `planet1Y` — First planet coordinates +- `planet2X`, `planet2Y` — Second planet coordinates + +**Returns:** Aspect angle in degrees + +## Example + +```typescript +import { calculateAspect } from '@astrodraw/astrochart' + +const angle = calculateAspect(120, 45, 220, 75) +console.log(angle) // Aspect angle in degrees +``` + +## Next Steps + +- **[Radix Chart Guide](/docs/guides/radix-chart)** — See aspects in action +- **[API Reference](/docs/api/chart)** — See all methods diff --git a/website/src/content/docs/api/chart.md b/website/src/content/docs/api/chart.md new file mode 100644 index 0000000..54735af --- /dev/null +++ b/website/src/content/docs/api/chart.md @@ -0,0 +1,71 @@ +--- +title: Chart +description: API reference for the Chart class. +--- + +# Chart + +The main `Chart` class is used to render astrology charts. + +## Constructor + +```typescript +new Chart(elementId: string, width: number, height: number, settings?: Settings) +``` + +**Parameters:** +- `elementId` — The ID of the container element where the chart will be rendered +- `width` — Chart width in pixels +- `height` — Chart height in pixels +- `settings` — Optional `Settings` object for customization + +## Methods + +### `radix(data: AstroData): this` + +Renders a radix (natal) chart. + +**Parameters:** +- `data` — An `AstroData` object with planets, cusps, and aspects + +**Returns:** The chart instance (for method chaining) + +### `transit(data: AstroData): this` + +Renders a transit ring over an existing radix chart. + +**Parameters:** +- `data` — An `AstroData` object for the transit positions + +**Returns:** The chart instance (for method chaining) + +### `animate(data: AstroData, duration: number, reverse?: boolean, callback?: () => void): void` + +Animates a transition to new data. + +**Parameters:** +- `data` — New astrology data to animate to +- `duration` — Animation duration in milliseconds +- `reverse` — (Optional) Reverse the animation direction +- `callback` — (Optional) Function called when animation completes + +## Example + +```typescript +import { Chart } from '@astrodraw/astrochart' + +const chart = new Chart('my-chart', 600, 600) +chart.radix(radixData) +chart.transit(transitData) + +// Animate to new transit positions +chart.animate(newTransitData, 1000, false, () => { + console.log('Animation complete') +}) +``` + +## Next Steps + +- **[Radix Guide](/docs/guides/radix-chart)** — Learn about radix charts +- **[Transit Guide](/docs/guides/transit-chart)** — Learn about transit charts +- **[Settings Reference](/docs/api/settings)** — Customize chart appearance diff --git a/website/src/content/docs/api/radix.md b/website/src/content/docs/api/radix.md new file mode 100644 index 0000000..3d989a0 --- /dev/null +++ b/website/src/content/docs/api/radix.md @@ -0,0 +1,42 @@ +--- +title: Radix +description: API reference for radix chart methods. +--- + +# Radix + +Methods and properties for working with radix charts. + +## Methods + +### `Chart.radix(data: AstroData): Chart` + +Renders a radix chart. + +**Parameters:** +- `data` — AstroData object with planets, cusps, and aspects + +**Returns:** The chart instance for method chaining + +## Example + +```typescript +import { Chart } from '@astrodraw/astrochart' + +const data = { + planets: [ + { name: 'Sun', x: 120, y: 45, type: 'personal' } + ], + cusps: [ + { name: 'Asc', x: 0, y: 0 } + ] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +## Next Steps + +- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn more +- **[Chart API](/docs/api/chart)** — See all methods diff --git a/website/src/content/docs/api/settings.md b/website/src/content/docs/api/settings.md new file mode 100644 index 0000000..e6a21ef --- /dev/null +++ b/website/src/content/docs/api/settings.md @@ -0,0 +1,48 @@ +--- +title: Settings Reference +description: All available AstroChart settings. +--- + +# Settings Reference + +Customize AstroChart charts with the `Settings` object. + +## Colors + +| Setting | Type | Default | Description | +|---------|------|---------|-------------| +| `BACKGROUND_COLOR` | string | `'#ffffff'` | Chart background color | +| `PAPER_BORDER_COLOR` | string | `'#000000'` | Outer border color | +| `ZODIAC_SIGN_COLOR` | string | `'#666666'` | Zodiac sign color | + +## Sizing + +| Setting | Type | Default | Description | +|---------|------|---------|-------------| +| `PAPER_BORDER_WIDTH` | number | `2` | Border stroke width | +| `INNER_CIRCLE_RADIUS_RATIO` | number | `0.5` | Ratio of inner circle to paper | + +## Rendering + +| Setting | Type | Default | Description | +|---------|------|---------|-------------| +| `STROKE_ONLY` | boolean | `false` | Render planets as outlines only | +| `ADD_CLICK_AREA` | boolean | `false` | Enable click detection | + +## Example + +```javascript +const settings = { + BACKGROUND_COLOR: '#f5f5f5', + PAPER_BORDER_COLOR: '#333333', + STROKE_ONLY: true +} + +const chart = new Chart('chart', 600, 600, settings) +chart.radix(data) +``` + +## Next Steps + +- **[Custom Settings Guide](/docs/guides/custom-settings)** — Learn more +- **[Types Reference](/docs/api/types)** — See all type definitions diff --git a/website/src/content/docs/api/transit.md b/website/src/content/docs/api/transit.md new file mode 100644 index 0000000..11318a6 --- /dev/null +++ b/website/src/content/docs/api/transit.md @@ -0,0 +1,44 @@ +--- +title: Transit +description: API reference for transit chart methods. +--- + +# Transit + +Methods and properties for working with transit charts. + +## Methods + +### `Chart.transit(data: AstroData): Chart` + +Renders a transit ring over an existing radix chart. + +**Parameters:** +- `data` — AstroData object with transit planetary positions + +**Returns:** The chart instance for method chaining + +### `Transit.animate(data: AstroData, duration: number, reverse?: boolean, callback?: () => void): void` + +Animates a transition between transit states. + +**Parameters:** +- `data` — New transit data +- `duration` — Animation duration in milliseconds +- `reverse` — Optional reverse direction flag +- `callback` — Optional completion callback + +## Example + +```typescript +const chart = new Chart('chart', 600, 600) +const transit = chart.radix(radixData).transit(transitData) + +// Animate to new transit positions +transit.animate(newTransitData, 1500) +``` + +## Next Steps + +- **[Transit Chart Guide](/docs/guides/transit-chart)** — Learn more +- **[Animation Guide](/docs/guides/animation)** — Learn about animations diff --git a/website/src/content/docs/api/types.md b/website/src/content/docs/api/types.md new file mode 100644 index 0000000..849599b --- /dev/null +++ b/website/src/content/docs/api/types.md @@ -0,0 +1,70 @@ +--- +title: Types +description: TypeScript type definitions for AstroChart. +--- + +# Types + +Complete TypeScript type definitions for AstroChart. + +## AstroData + +```typescript +interface AstroData { + planets?: Planet[] + cusps?: Cusp[] + aspects?: Aspect[] + pointsOfInterest?: PointOfInterest[] +} +``` + +## Planet + +```typescript +interface Planet { + name: string + x: number + y: number + type: 'personal' | 'social' | 'generational' | 'angle' + retrograde?: boolean +} +``` + +## Cusp + +```typescript +interface Cusp { + name: string + x: number + y: number +} +``` + +## Aspect + +```typescript +interface Aspect { + planet1: string + planet2: string + type: 'conjunction' | 'sextile' | 'square' | 'trine' | 'opposition' + value: number + orb?: number +} +``` + +## Settings + +```typescript +interface Settings { + BACKGROUND_COLOR?: string + PAPER_BORDER_COLOR?: string + STROKE_ONLY?: boolean + ADD_CLICK_AREA?: boolean + [key: string]: any +} +``` + +## Next Steps + +- **[Settings Reference](/docs/api/settings)** — See all settings +- **[API Reference](/docs/api/chart)** — See all methods diff --git a/website/src/content/docs/api/zodiac.md b/website/src/content/docs/api/zodiac.md new file mode 100644 index 0000000..80bb061 --- /dev/null +++ b/website/src/content/docs/api/zodiac.md @@ -0,0 +1,42 @@ +--- +title: Zodiac +description: API reference for zodiac utilities. +--- + +# Zodiac + +Utilities for working with zodiac signs and astrological positions. + +## Functions + +### `getZodiacSign(degrees: number): string` + +Gets the zodiac sign for a given degree position. + +**Parameters:** +- `degrees` — Position in degrees (0–360) + +**Returns:** Zodiac sign name (e.g., "Aries", "Taurus") + +### `getZodiacDegrees(sign: string): number` + +Gets the starting degree for a zodiac sign. + +**Parameters:** +- `sign` — Zodiac sign name + +**Returns:** Starting degree position (0–360) + +## Example + +```typescript +import { getZodiacSign, getZodiacDegrees } from '@astrodraw/astrochart' + +const sign = getZodiacSign(120) // "Leo" +const degrees = getZodiacDegrees('Aries') // 0 +``` + +## Next Steps + +- **[Guides](/docs/guides/radix-chart)** — See zodiac in action +- **[API Reference](/docs/api/chart)** — See all methods diff --git a/website/src/content/docs/changelog.md b/website/src/content/docs/changelog.md new file mode 100644 index 0000000..b6904fe --- /dev/null +++ b/website/src/content/docs/changelog.md @@ -0,0 +1,30 @@ +--- +title: Changelog +description: AstroChart version history and release notes. +--- + +# Changelog + +All notable changes to AstroChart are documented here. + +## [3.0.2] — 2024-01-15 + +### Added +- Initial public release of AstroChart +- Complete radix chart rendering +- Transit chart support +- Aspect rendering with multiple aspect types +- Full TypeScript support +- Comprehensive documentation +- Live demo components + +### Fixed +- SVG rendering optimizations +- Browser compatibility improvements + +### Changed +- API finalized for stable release + +## Future Versions + +See the [GitHub Issues](https://github.com/AstroDraw/AstroChart/issues) for planned features and enhancements. diff --git a/website/src/content/docs/contributing.md b/website/src/content/docs/contributing.md new file mode 100644 index 0000000..bd24efb --- /dev/null +++ b/website/src/content/docs/contributing.md @@ -0,0 +1,69 @@ +--- +title: Contributing +description: Contribute to the AstroChart project. +--- + +# Contributing to AstroChart + +We love contributions! Whether it's bug reports, feature requests, or code contributions, your help makes AstroChart better. + +## Getting Started + +1. **Fork** the repository on GitHub +2. **Clone** your fork locally +3. **Create a branch** for your feature or bugfix +4. **Make your changes** and test thoroughly +5. **Submit a pull request** with a clear description + +## Development Setup + +```bash +git clone https://github.com/YOUR_USERNAME/AstroChart.git +cd AstroChart +npm install +npm run build +npm test +``` + +## Code Style + +- Use 2-space indentation +- Follow the existing code conventions +- Write clear, descriptive commit messages +- Include tests for new features + +## Testing + +```bash +npm test # Run all tests +npm run test:coverage # Run tests with coverage report +``` + +## Bug Reports + +When reporting bugs, please include: +- A clear description of the issue +- Steps to reproduce +- Expected vs actual behavior +- Browser and version information +- A minimal code example if possible + +## Feature Requests + +Feature requests are welcome! Please describe: +- The desired behavior +- Use cases +- Why this feature would be valuable +- Any alternative solutions you've considered + +## Questions? + +- Open an issue on [GitHub](https://github.com/AstroDraw/AstroChart/issues) +- Check the [Documentation](/docs/introduction) +- Review existing issues for similar questions + +## License + +By contributing, you agree that your contributions will be licensed under the MIT License. + +Thank you for making AstroChart better! 🙌 diff --git a/website/src/content/docs/guides/animation.md b/website/src/content/docs/guides/animation.md new file mode 100644 index 0000000..95c87e3 --- /dev/null +++ b/website/src/content/docs/guides/animation.md @@ -0,0 +1,31 @@ +--- +title: Animation +description: Animate transitions between chart states. +--- + +# Animation + +AstroChart supports smooth animations when updating transit data or other chart properties. + +## Basic Animation + +Use `transit.animate()` to animate transitions: + +```javascript +const chart = new Chart('chart', 600, 600) +const transit = chart.radix(radixData).transit(transitData) + +// Animate to new transit data over 1000ms +transit.animate(newTransitData, 1000) +``` + +## Animation Options + +- **Duration** — Animation duration in milliseconds +- **Reverse** — Reverse the animation direction +- **Callback** — Function to call when animation completes + +## Next Steps + +- **[Transit Charts](/docs/guides/transit-chart)** — Learn about transit charts +- **[Custom Settings](/docs/guides/custom-settings)** — Customize animations diff --git a/website/src/content/docs/guides/click-events.md b/website/src/content/docs/guides/click-events.md new file mode 100644 index 0000000..81211dd --- /dev/null +++ b/website/src/content/docs/guides/click-events.md @@ -0,0 +1,38 @@ +--- +title: Click Events +description: Add interactivity with click handlers. +--- + +# Click Events + +Enable click detection on chart elements with the `ADD_CLICK_AREA` setting. + +## Example + +```javascript +const settings = { + ADD_CLICK_AREA: true +} + +const chart = new Chart('chart', 600, 600, settings) +chart.radix(data) + +// Add click listeners +document.addEventListener('click', (e) => { + if (e.target.id.includes('sign-')) { + console.log('Clicked on sign:', e.target.id) + } +}) +``` + +## Element IDs + +Use these helper functions to identify clicked elements: + +- `getSignWrapperId(sign)` — Get the ID for a zodiac sign +- `getHouseIdWrapper(house)` — Get the ID for a house + +## Next Steps + +- **[Framework Integrations](/docs/guides/frameworks/react)** — Use with React, Vue, etc. +- **[API Reference](/docs/api/chart)** — See all methods diff --git a/website/src/content/docs/guides/custom-settings.md b/website/src/content/docs/guides/custom-settings.md new file mode 100644 index 0000000..ade86fd --- /dev/null +++ b/website/src/content/docs/guides/custom-settings.md @@ -0,0 +1,27 @@ +--- +title: Custom Settings +description: Customize chart appearance with AstroChart settings. +--- + +# Custom Settings + +AstroChart provides extensive customization options through the `Settings` object. + +## Basic Settings + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const settings = { + BACKGROUND_COLOR: '#ffffff', + PAPER_BORDER_COLOR: '#000000' +} + +const chart = new Chart('chart', 600, 600, settings) +chart.radix(data) +``` + +## Next Steps + +- **[Types Reference](/docs/api/types)** — See all available settings +- **[Custom Symbols](/docs/guides/custom-symbols)** — Create custom symbols diff --git a/website/src/content/docs/guides/custom-symbols.md b/website/src/content/docs/guides/custom-symbols.md new file mode 100644 index 0000000..1f1030c --- /dev/null +++ b/website/src/content/docs/guides/custom-symbols.md @@ -0,0 +1,32 @@ +--- +title: Custom Symbols +description: Replace default symbols with your own designs. +--- + +# Custom Symbols + +AstroChart allows you to define custom SVG symbols for planets, signs, and other chart elements. + +## Custom Symbol Function + +```javascript +const settings = { + CUSTOM_SYMBOL_FN: (name, x, y, context) => { + // Create your own SVG element + const symbol = document.createElementNS('http://www.w3.org/2000/svg', 'circle') + symbol.setAttribute('cx', x) + symbol.setAttribute('cy', y) + symbol.setAttribute('r', 8) + symbol.setAttribute('fill', '#ff0000') + return symbol + } +} + +const chart = new Chart('chart', 600, 600, settings) +chart.radix(data) +``` + +## Next Steps + +- **[Custom Settings](/docs/guides/custom-settings)** — Explore more settings +- **[API Reference](/docs/api/chart)** — See all methods diff --git a/website/src/content/docs/guides/frameworks/angular.md b/website/src/content/docs/guides/frameworks/angular.md new file mode 100644 index 0000000..747d779 --- /dev/null +++ b/website/src/content/docs/guides/frameworks/angular.md @@ -0,0 +1,56 @@ +--- +title: Angular +description: Integrate AstroChart with Angular applications. +--- + +# Using AstroChart with Angular + +This guide shows how to use AstroChart in Angular applications. + +## Basic Component + +```typescript +import { Component, ViewChild, ElementRef, AfterViewInit, Input } from '@angular/core' +import { Chart } from '@astrodraw/astrochart' + +@Component({ + selector: 'app-astrochart', + template: '
', + styleUrls: ['./astrochart.component.css'] +}) +export class AstroChartComponent implements AfterViewInit { + @ViewChild('container') container!: ElementRef + @Input() data: any + @Input() width = 600 + @Input() height = 600 + + ngAfterViewInit() { + if (!this.container) return + const chart = new Chart(this.container.nativeElement.id, this.width, this.height) + chart.radix(this.data) + } +} +``` + +## With Universal (SSR) + +Guard against server-side rendering: + +```typescript +import { isPlatformBrowser } from '@angular/common' +import { Component, Inject, PLATFORM_ID } from '@angular/core' + +export class AstroChartComponent { + constructor(@Inject(PLATFORM_ID) private platformId: Object) {} + + ngAfterViewInit() { + if (!isPlatformBrowser(this.platformId)) return + // Initialize chart + } +} +``` + +## Next Steps + +- **[React Integration](/docs/guides/frameworks/react)** — Use with React +- **[Vue Integration](/docs/guides/frameworks/vue)** — Use with Vue diff --git a/website/src/content/docs/guides/frameworks/react.md b/website/src/content/docs/guides/frameworks/react.md new file mode 100644 index 0000000..fb81bea --- /dev/null +++ b/website/src/content/docs/guides/frameworks/react.md @@ -0,0 +1,56 @@ +--- +title: React +description: Integrate AstroChart with React applications. +--- + +# Using AstroChart with React + +This guide shows how to use AstroChart in React applications. + +## Basic Hook + +```typescript +import { useEffect, useRef } from 'react' +import { Chart } from '@astrodraw/astrochart' + +export function AstroChartComponent({ data, width = 600, height = 600 }) { + const containerRef = useRef(null) + + useEffect(() => { + if (!containerRef.current) return + + const chart = new Chart(containerRef.current.id, width, height) + chart.radix(data) + + return () => { + if (containerRef.current) { + containerRef.current.innerHTML = '' + } + } + }, [data, width, height]) + + return
+} +``` + +## With Next.js + +For Next.js with SSR disabled: + +```typescript +import dynamic from 'next/dynamic' + +const AstroChart = dynamic( + () => import('./AstroChart'), + { ssr: false } +) + +export default function Page() { + return +} +``` + +## Next Steps + +- **[Vue Integration](/docs/guides/frameworks/vue)** — Use with Vue +- **[Angular Integration](/docs/guides/frameworks/angular)** — Use with Angular diff --git a/website/src/content/docs/guides/frameworks/vue.md b/website/src/content/docs/guides/frameworks/vue.md new file mode 100644 index 0000000..2cad019 --- /dev/null +++ b/website/src/content/docs/guides/frameworks/vue.md @@ -0,0 +1,57 @@ +--- +title: Vue +description: Integrate AstroChart with Vue applications. +--- + +# Using AstroChart with Vue + +This guide shows how to use AstroChart in Vue applications. + +## Basic Component + +```vue + + + +``` + +## With Nuxt + +For Nuxt (SSR): + +```vue + + + +``` + +## Next Steps + +- **[React Integration](/docs/guides/frameworks/react)** — Use with React +- **[Angular Integration](/docs/guides/frameworks/angular)** — Use with Angular diff --git a/website/src/content/docs/guides/multiple-charts.md b/website/src/content/docs/guides/multiple-charts.md new file mode 100644 index 0000000..5b3e606 --- /dev/null +++ b/website/src/content/docs/guides/multiple-charts.md @@ -0,0 +1,34 @@ +--- +title: Multiple Charts +description: Render multiple independent charts on one page. +--- + +# Multiple Charts + +You can render multiple independent charts on the same page by using unique container IDs. + +## Example + +```javascript +import { Chart } from '@astrodraw/astrochart' + +// First chart +const chart1 = new Chart('chart1', 400, 400) +chart1.radix(data1) + +// Second chart +const chart2 = new Chart('chart2', 400, 400) +chart2.radix(data2) +``` + +HTML: + +```html +
+
+``` + +## Next Steps + +- **[Click Events](/docs/guides/click-events)** — Add interactivity +- **[Framework Integrations](/docs/guides/frameworks/react)** — Use with React, Vue, etc. diff --git a/website/src/content/docs/guides/radix-chart.md b/website/src/content/docs/guides/radix-chart.md new file mode 100644 index 0000000..743feb1 --- /dev/null +++ b/website/src/content/docs/guides/radix-chart.md @@ -0,0 +1,81 @@ +--- +title: Radix Chart +description: Learn how to render a complete radix (natal) chart with AstroChart. +--- + +# Radix Chart + +A radix chart (also called a natal or birth chart) is a snapshot of the sky at a specific time and location. + +This guide shows how to render a complete radix chart with planets, cusps, and aspects using AstroChart. + +## Basic Radix Chart + +The simplest radix chart requires planets and cusps: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const data = { + planets: [ + { name: 'Sun', x: 120, y: 45, type: 'personal' }, + { name: 'Moon', x: 220, y: 75, type: 'personal' } + ], + cusps: [ + { name: 'Asc', x: 150, y: 0 }, + { name: 'MC', x: 150, y: 300 } + ] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +## Full Example with All Planets + +```javascript +const data = { + planets: [ + { name: 'Sun', x: 120, y: 45, type: 'personal' }, + { name: 'Moon', x: 220, y: 75, type: 'personal' }, + { name: 'Mercury', x: 180, y: 60, type: 'personal' }, + { name: 'Venus', x: 150, y: 90, type: 'personal' }, + { name: 'Mars', x: 90, y: 80, type: 'personal' }, + { name: 'Jupiter', x: 280, y: 120, type: 'social' }, + { name: 'Saturn', x: 310, y: 150, type: 'social' }, + { name: 'Uranus', x: 45, y: 200, type: 'generational' }, + { name: 'Neptune', x: 15, y: 250, type: 'generational' }, + { name: 'Pluto', x: 350, y: 280, type: 'generational' } + ], + cusps: [ + { name: 'Asc', x: 0, y: 0 }, + { name: 'MC', x: 0, y: 90 }, + { name: 'Desc', x: 0, y: 180 }, + { name: 'IC', x: 0, y: 270 } + ], + aspects: [ + { planet1: 'Sun', planet2: 'Moon', type: 'conjunction', value: 12 }, + { planet1: 'Sun', planet2: 'Mercury', type: 'trine', value: 8 } + ] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +## API Methods + +### `chart.radix(data: AstroData)` + +Renders a radix chart with the provided astrological data. + +**Parameters:** +- `data` — An `AstroData` object containing planets, cusps, and aspects + +**Returns:** The chart instance (for method chaining) + +## Next Steps + +- **[Transit Charts](/docs/guides/transit-chart)** — Add a transit ring +- **[Aspects](/docs/api/chart)** — Learn more about aspect rendering +- **[Settings](/docs/guides/custom-settings)** — Customize appearance diff --git a/website/src/content/docs/guides/transit-chart.md b/website/src/content/docs/guides/transit-chart.md new file mode 100644 index 0000000..a472ec9 --- /dev/null +++ b/website/src/content/docs/guides/transit-chart.md @@ -0,0 +1,44 @@ +--- +title: Transit Chart +description: Learn how to render transit charts with AstroChart. +--- + +# Transit Chart + +A transit chart overlays current planetary positions over a natal chart to show how transits affect your birth chart. + +This guide shows how to render transit charts using AstroChart. + +## Basic Transit Chart + +To render a transit chart, provide both radix (natal) and transit data: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const radixData = { + planets: [ + { name: 'Sun', x: 120, y: 45, type: 'personal' }, + { name: 'Moon', x: 220, y: 75, type: 'personal' } + ], + cusps: [ + { name: 'Asc', x: 0, y: 0 }, + { name: 'MC', x: 0, y: 90 } + ] +} + +const transitData = { + planets: [ + { name: 'Sun', x: 140, y: 55, type: 'personal' }, + { name: 'Moon', x: 250, y: 100, type: 'personal' } + ] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(radixData).transit(transitData) +``` + +## Next Steps + +- **[Animation](/docs/guides/animation)** — Animate transit movements +- **[Radix Charts](/docs/guides/radix-chart)** — Learn about radix charts diff --git a/website/src/content/docs/installation.md b/website/src/content/docs/installation.md new file mode 100644 index 0000000..bb11009 --- /dev/null +++ b/website/src/content/docs/installation.md @@ -0,0 +1,103 @@ +--- +title: Installation +description: Install AstroChart via npm, CDN, or other methods. +--- + +# Installation + +AstroChart can be installed in several ways depending on your project setup. + +## NPM + +The recommended way to install AstroChart is via npm: + +```bash +npm install @astrodraw/astrochart +``` + +### With Yarn + +```bash +yarn add @astrodraw/astrochart +``` + +### With PNPM + +```bash +pnpm add @astrodraw/astrochart +``` + +## CDN + +For quick prototyping or embedding AstroChart in existing projects, use the UMD bundle from a CDN: + +```html + + +
+ + +``` + +The UMD bundle exposes `astrochart` as a global variable containing all exports. + +## ESM Import + +For modern bundler setups (Webpack, Vite, Rollup, etc.), import directly: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +## TypeScript + +Full TypeScript type definitions are included in the npm package: + +```typescript +import type { Chart, AstroData, Settings } from '@astrodraw/astrochart' + +const chart: Chart = new Chart('chart', 600, 600) +const settings: Settings = { /* ... */ } +``` + +No additional `@types/` package needed. + +## Compatibility + +| Environment | Status | +|-------------|--------| +| Node.js 18+ | ✅ Supported | +| Browsers (modern) | ✅ Supported | +| IE11 | ⚠️ Requires polyfills | +| Mobile browsers | ✅ Supported | +| React | ✅ See [React guide](/docs/guides/frameworks/react) | +| Vue | ✅ See [Vue guide](/docs/guides/frameworks/vue) | +| Angular | ✅ See [Angular guide](/docs/guides/frameworks/angular) | + +## Verification + +After installation, verify AstroChart is working: + +```javascript +import { Chart, version } from '@astrodraw/astrochart' + +console.log('AstroChart version:', version) +// Output: AstroChart version: 3.0.2 +``` + +## Next Steps + +- **[Quick Start](/docs/quickstart)** — Render your first chart +- **[API Reference](/docs/api/chart)** — Learn all available methods +- **[Guides](/docs/guides/radix-chart)** — Explore common use cases diff --git a/website/src/content/docs/introduction.md b/website/src/content/docs/introduction.md new file mode 100644 index 0000000..3f54114 --- /dev/null +++ b/website/src/content/docs/introduction.md @@ -0,0 +1,108 @@ +--- +title: Introduction +description: Learn what AstroChart is and how it can help you render astrology charts on the web. +--- + +# Welcome to AstroChart + +AstroChart is a **pure SVG, zero-dependency library** for rendering interactive astrology charts directly in web browsers. + +## What is AstroChart? + +AstroChart specializes in visualizing astrological data as beautiful, interactive SVG charts. It can render: + +- **Radix Charts** — A snapshot of the sky at a specific time and location +- **Transit Charts** — Real-time planetary positions overlaid on a radix chart +- **Aspects** — Angular relationships between planets with customizable lines and colors +- **Animations** — Smooth transitions between chart states +- **Custom Symbols** — Replace default symbols with your own SVG designs + +All of this happens **client-side in the browser**, with no external API calls or backend dependencies. + +## What AstroChart is NOT + +AstroChart is **not** an ephemeris calculator. It does not compute planetary positions, house cusps, or aspects — it only **renders them**. You must provide the planetary data (coordinates, house positions, aspects) from another source. + +For calculating planetary positions, consider: +- [Swiss Ephemeris](https://www.astro.com/swisseph/) +- [Skyfield](https://rhodesmill.org/skyfield/) +- [pymeeus](https://pymeeus.readthedocs.io/) +- [astro-charts](https://github.com/AstroDraw/astro-charts) (Python) + +## Key Features + +| Feature | Details | +|---------|---------| +| **Pure SVG** | All charts render as scalable vector graphics, perfect for any screen size | +| **Zero Dependencies** | No jQuery, React, Vue, or other libraries required | +| **Framework Agnostic** | Use with vanilla JavaScript, React, Vue, Angular, or any framework | +| **Fully Customizable** | Control colors, fonts, symbol styles, and rendering modes | +| **TypeScript Ready** | Complete type definitions included for type-safe code | +| **Interactive** | Add click handlers to zodiac signs, houses, and planets | +| **Lightweight** | Small bundle size (~50 KB minified, ~15 KB gzipped) | + +## Quick Start + +### 1. Install + +```bash +npm install @astrodraw/astrochart +``` + +### 2. Add a Container + +```html +
+``` + +### 3. Render a Chart + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const data = { + planets: [ + { name: 'Sun', x: 120, y: 45, type: 'personal' }, + { name: 'Moon', x: 220, y: 75, type: 'personal' }, + // ... more planets + ], + cusps: [ + { name: 'Asc', x: 150, y: 0 }, + { name: 'MC', x: 150, y: 300 }, + // ... more cusps + ], + aspects: [ + { planet1: 'Sun', planet2: 'Moon', type: 'conjunction', value: 12 } + ] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +That's it! You now have a fully rendered astrology chart. + +## Next Steps + +- **[Installation Guide](/docs/installation)** — Detailed setup instructions for npm, CDN, and more +- **[Quick Start Guide](/docs/quickstart)** — A step-by-step walkthrough with examples +- **[API Reference](/docs/api/chart)** — Complete documentation of all classes and methods +- **[Gallery](/gallery)** — See what's possible with AstroChart + +## Browser Support + +AstroChart requires: +- Modern browsers with SVG support (IE11+ with polyfills) +- ES2015+ JavaScript support + +## License + +AstroChart is released under the **MIT License**. See the [GitHub repository](https://github.com/AstroDraw/AstroChart) for details. + +## Contributing + +Found a bug? Have a feature request? We'd love your help! See the [Contributing Guide](/docs/contributing) for instructions. + +--- + +Ready to dive in? [Get started now](/docs/quickstart). diff --git a/website/src/content/docs/quickstart.md b/website/src/content/docs/quickstart.md new file mode 100644 index 0000000..a1c7abb --- /dev/null +++ b/website/src/content/docs/quickstart.md @@ -0,0 +1,120 @@ +--- +title: Quick Start +description: Get up and running with AstroChart in 5 minutes. +--- + +# Quick Start + +This guide will show you how to render your first AstroChart in just a few lines of code. + +## 1. Install + +```bash +npm install @astrodraw/astrochart +``` + +## 2. Create a Container + +Add a `
` to your HTML where the chart will be rendered: + +```html +
+``` + +## 3. Provide Data + +AstroChart needs an `AstroData` object with planets, cusps, and optionally aspects: + +```javascript +const data = { + planets: [ + { name: 'Sun', x: 120, y: 45, type: 'personal' }, + { name: 'Moon', x: 220, y: 75, type: 'personal' }, + { name: 'Mercury', x: 180, y: 60, type: 'personal' }, + { name: 'Venus', x: 150, y: 90, type: 'personal' }, + { name: 'Mars', x: 90, y: 80, type: 'personal' } + ], + cusps: [ + { name: 'Asc', x: 150, y: 0 }, + { name: 'MC', x: 150, y: 300 } + ] +} +``` + +### Data Format Explained + +- **`planets`** — Array of planetary positions. Each planet has: + - `name` — Planet or point name (e.g., "Sun", "Moon") + - `x`, `y` — Position in degrees (0–360, typically on a circle) + - `type` — Category: `'personal'`, `'social'`, `'generational'`, etc. + +- **`cusps`** — Array of house cusps or important points. Format same as planets. + +- **`aspects`** (optional) — Angular relationships between planets: + ```javascript + aspects: [ + { planet1: 'Sun', planet2: 'Moon', type: 'conjunction', value: 12 } + ] + ``` + +## 4. Render the Chart + +Import the `Chart` class and render: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +That's it! You now have a fully rendered radix chart. + +## Complete Example + +```html + + + + AstroChart Quick Start + + +
+ + + + +``` + +## Next Steps + +- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn more about radix charts +- **[Transit Charts](/docs/guides/transit-chart)** — Add transit rings +- **[Animation](/docs/guides/animation)** — Animate chart transitions +- **[API Reference](/docs/api/chart)** — See all available methods + +## Troubleshooting + +**Chart doesn't appear?** +- Check the browser console for errors +- Make sure the container element exists: `document.getElementById('chart')` +- Verify the data object is correctly formatted + +**Need help?** +- [Open an issue on GitHub](https://github.com/AstroDraw/AstroChart/issues) +- Check the [API Reference](/docs/api/chart) diff --git a/website/src/env.d.ts b/website/src/env.d.ts new file mode 100644 index 0000000..acef35f --- /dev/null +++ b/website/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro new file mode 100644 index 0000000..b4df245 --- /dev/null +++ b/website/src/pages/index.astro @@ -0,0 +1,191 @@ +--- +// Custom landing page for AstroChart +// Uses StarlightPage with splash template to keep the header/footer from Starlight + +import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' +--- + + + +
+ + +
+
npm install @astrodraw/astrochart
+
+ + +
+

Why AstroChart?

+
+
+

⚡ Zero Dependencies

+

Pure SVG and vanilla JavaScript. No React, Vue, or other frameworks required.

+
+
+

🎨 Fully Customizable

+

Control colors, fonts, sizes, rendering modes, and add custom symbols with simple settings.

+
+
+

📱 Responsive

+

Charts scale perfectly to any container size and work on all modern browsers.

+
+
+

🔧 Framework Agnostic

+

Use as a standalone library or integrate with React, Vue, Angular, or any other framework.

+
+
+

📊 Complete API

+

Render radix charts, transit rings, aspects, animations, and click events with ease.

+
+
+

✅ TypeScript Support

+

Full type definitions included. Write safe, maintainable code with IDE autocompletion.

+
+
+
+ + + + +
+ +
+ + diff --git a/website/src/styles/custom.css b/website/src/styles/custom.css new file mode 100644 index 0000000..736c76b --- /dev/null +++ b/website/src/styles/custom.css @@ -0,0 +1,20 @@ +/* AstroChart Custom Styles */ + +:root { + /* Override Starlight theme colors if needed */ + --sl-color-accent-low: hsl(var(--sl-hue), 100%, 97%); + --sl-color-accent: hsl(var(--sl-hue), 100%, 50%); + --sl-color-accent-high: hsl(var(--sl-hue), 100%, 20%); +} + +/* Chart demo containers */ +.chart-demo { + display: flex; + justify-content: center; + margin: 2rem 0; +} + +.chart-demo svg { + max-width: 100%; + height: auto; +} diff --git a/website/tsconfig.json b/website/tsconfig.json new file mode 100644 index 0000000..d105f7f --- /dev/null +++ b/website/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "jsxImportSource": "astro", + "lib": ["dom", "dom.iterable", "esnext"], + "moduleResolution": "bundler", + "module": "esnext", + "target": "esnext" + } +} From 2bd70cf63b0f4301e273ac4c0aa5f136f0d72968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20F=C3=BCcher?= Date: Mon, 30 Mar 2026 16:24:39 -0300 Subject: [PATCH 2/5] [Phase 1] Implement ChartDemo component and demo data (#105) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(website): implement ChartDemo component and demo data (#94) - Add `src/data/demoData.ts` with defaultRadixData (15 planets + 12 cusps) and defaultTransitData for transit/animate examples - Rewrite ChartDemo.astro with updated props: id, height (default 500), mode ('radix'|'transit'|'animate'), showCode (default true) - Animate mode renders a 'Start Animation' button wired to transit.animate() - Inline diff --git a/website/src/content/docs/api/radix.md b/website/src/content/docs/api/radix.md index 3d989a0..d7171cd 100644 --- a/website/src/content/docs/api/radix.md +++ b/website/src/content/docs/api/radix.md @@ -1,42 +1,89 @@ --- title: Radix -description: API reference for radix chart methods. +description: API reference for the Radix class returned by chart.radix(). --- # Radix -Methods and properties for working with radix charts. +`chart.radix(data)` renders a birth chart and returns a `Radix` instance. +You use this instance to draw aspects or chain into a transit ring. -## Methods - -### `Chart.radix(data: AstroData): Chart` - -Renders a radix chart. - -**Parameters:** -- `data` — AstroData object with planets, cusps, and aspects +## Creating a Radix -**Returns:** The chart instance for method chaining - -## Example - -```typescript +```javascript import { Chart } from '@astrodraw/astrochart' const data = { - planets: [ - { name: 'Sun', x: 120, y: 45, type: 'personal' } - ], + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0], + Jupiter: [298.56, 0], + Saturn: [245.78, 0], + Uranus: [178.90, 0], + Neptune: [210.12, 0], + Pluto: [238.34, 0] + }, cusps: [ - { name: 'Asc', x: 0, y: 0 } + 315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89 ] } const chart = new Chart('chart', 600, 600) -chart.radix(data) +const radix = chart.radix(data) +``` + +## Methods + +### `radix.aspects(formedAspects?): Radix` + +Draws aspect lines between planets inside the chart. + +```javascript +// Draw aspects computed from the default settings +radix.aspects() + +// Or pass pre-computed aspects +radix.aspects(myAspects) ``` +### `radix.transit(data: AstroData): Transit` + +Adds a transit ring around the radix chart. Returns a `Transit` instance. + +```javascript +const transit = radix.transit(transitData) +transit.aspects() +``` + +See the [Transit API](/api/transit) for full details. + +### `radix.addPointsOfInterest(points: Points): Radix` + +Adds extra points (e.g. Arabic parts, fixed stars) to the aspect calculation +without rendering them as planet symbols. + +```javascript +radix.addPointsOfInterest({ Vertex: [324.5, 0] }) +radix.aspects() +``` + +## Data format + +`AstroData` passed to `radix()` must have: + +| Field | Type | Constraint | +|-------|------|------------| +| `planets` | `Record` | Keys must be [valid planet names](/api/types#valid-planet-keys) | +| `cusps` | `number[]` | Exactly **12** degree values | + +Planet array: `[degrees, retrogradeFlag]` — negative second element = retrograde. + ## Next Steps -- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn more -- **[Chart API](/docs/api/chart)** — See all methods +- [Types reference](/api/types) — `AstroData`, valid planet keys, full example +- [Transit API](/api/transit) — transit ring methods +- [Radix Chart guide](/guides/radix-chart) — practical walkthrough diff --git a/website/src/content/docs/api/types.md b/website/src/content/docs/api/types.md index 849599b..986698e 100644 --- a/website/src/content/docs/api/types.md +++ b/website/src/content/docs/api/types.md @@ -5,66 +5,108 @@ description: TypeScript type definitions for AstroChart. # Types -Complete TypeScript type definitions for AstroChart. +Complete TypeScript type definitions used by AstroChart. ## AstroData +The main data object passed to `chart.radix()` and `chart.radix().transit()`. + ```typescript interface AstroData { - planets?: Planet[] - cusps?: Cusp[] - aspects?: Aspect[] - pointsOfInterest?: PointOfInterest[] + planets: Points // keyed planet positions + cusps: number[] // exactly 12 house cusp degrees } ``` -## Planet +## Points + +Planet positions are stored as a plain object where each key is a planet name and each value is a two-element array. ```typescript -interface Planet { - name: string - x: number - y: number - type: 'personal' | 'social' | 'generational' | 'angle' - retrograde?: boolean -} +type Points = Record +// number[0] — position in degrees (0–360) +// number[1] — retrograde flag: negative value = retrograde (e.g. -1) ``` -## Cusp +### Valid planet keys -```typescript -interface Cusp { - name: string - x: number - y: number -} -``` +Only the following keys are recognised and rendered with their proper astrological symbol. +Any other key is silently rendered as a generic fallback circle. -## Aspect +| Key | Body | +|-----|------| +| `Sun` | ☉ Sun | +| `Moon` | ☽ Moon | +| `Mercury` | ☿ Mercury | +| `Venus` | ♀ Venus | +| `Mars` | ♂ Mars | +| `Jupiter` | ♃ Jupiter | +| `Saturn` | ♄ Saturn | +| `Uranus` | ♅ Uranus | +| `Neptune` | ♆ Neptune | +| `Pluto` | ♇ Pluto | +| `Chiron` | ⚷ Chiron | +| `Lilith` | Lilith (Black Moon) | +| `NNode` | ☊ North Node | +| `SNode` | ☋ South Node | +| `Fortune` | ⊕ Part of Fortune | -```typescript -interface Aspect { - planet1: string - planet2: string - type: 'conjunction' | 'sextile' | 'square' | 'trine' | 'opposition' - value: number - orb?: number +## Full AstroData example + +```javascript +const data = { + planets: { + Sun: [12.45, 0], // Aries 12° — direct + Moon: [145.67, 0], // Leo 25° + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0], + Jupiter: [298.56, -1], // retrograde (negative second element) + Saturn: [245.78, 0], + Uranus: [178.90, 0], + Neptune: [210.12, 0], + Pluto: [238.34, 0], + Chiron: [125.67, 0], + NNode: [95.45, 0], + SNode: [275.45, 0], + Lilith: [145.23, 0], + Fortune: [325.67, 0] + }, + cusps: [ + 315.45, // 1st house (Ascendant) + 35.67, // 2nd house + 65.23, // 3rd house + 92.45, // 4th house (IC) + 125.67, // 5th house + 155.89, // 6th house + 135.45, // 7th house (Descendant) + 215.67, // 8th house + 245.23, // 9th house + 272.45, // 10th house (MC) + 305.67, // 11th house + 335.89 // 12th house + ] } ``` ## Settings +Partial settings object passed as an optional fourth argument to `new Chart()`. +See the [Settings reference](/api/settings) for all available keys. + ```typescript interface Settings { - BACKGROUND_COLOR?: string - PAPER_BORDER_COLOR?: string + SYMBOL_SCALE?: number + COLOR_BACKGROUND?: string STROKE_ONLY?: boolean ADD_CLICK_AREA?: boolean - [key: string]: any + ASPECTS?: Record + // ... and many more — see Settings reference } ``` ## Next Steps -- **[Settings Reference](/docs/api/settings)** — See all settings -- **[API Reference](/docs/api/chart)** — See all methods +- [Settings Reference](/api/settings) — all configurable settings +- [Chart API](/api/chart) — `Chart` class methods +- [Radix Chart guide](/guides/radix-chart) — practical walkthrough diff --git a/website/src/content/docs/guides/radix-chart.md b/website/src/content/docs/guides/radix-chart.md index 743feb1..38a075a 100644 --- a/website/src/content/docs/guides/radix-chart.md +++ b/website/src/content/docs/guides/radix-chart.md @@ -5,57 +5,73 @@ description: Learn how to render a complete radix (natal) chart with AstroChart. # Radix Chart -A radix chart (also called a natal or birth chart) is a snapshot of the sky at a specific time and location. +A radix chart (also called a natal or birth chart) is a snapshot of the sky at a specific moment in time. -This guide shows how to render a complete radix chart with planets, cusps, and aspects using AstroChart. +AstroChart renders the chart from an `AstroData` object containing **planet positions** and **house cusps** — both expressed as degree values (0–360). ## Basic Radix Chart -The simplest radix chart requires planets and cusps: +```html +
+``` ```javascript import { Chart } from '@astrodraw/astrochart' const data = { - planets: [ - { name: 'Sun', x: 120, y: 45, type: 'personal' }, - { name: 'Moon', x: 220, y: 75, type: 'personal' } - ], - cusps: [ - { name: 'Asc', x: 150, y: 0 }, - { name: 'MC', x: 150, y: 300 } - ] + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0] + }, + cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] } const chart = new Chart('chart', 600, 600) chart.radix(data) ``` +## Data format + +Planet positions use a plain object (`Record`): + +```javascript +{ + Sun: [degrees, retrogradeFlag] + // ^^^^^^^ 0–360 ^^^^^^^^ negative = retrograde, 0 = direct +} +``` + +House cusps are an **array of exactly 12 degree values** representing the start of each house in order (1st through 12th). Passing fewer or more than 12 will throw a validation error. + +See the [Types reference](/api/types) for all valid planet keys and a full example. + ## Full Example with All Planets ```javascript +import { Chart } from '@astrodraw/astrochart' + const data = { - planets: [ - { name: 'Sun', x: 120, y: 45, type: 'personal' }, - { name: 'Moon', x: 220, y: 75, type: 'personal' }, - { name: 'Mercury', x: 180, y: 60, type: 'personal' }, - { name: 'Venus', x: 150, y: 90, type: 'personal' }, - { name: 'Mars', x: 90, y: 80, type: 'personal' }, - { name: 'Jupiter', x: 280, y: 120, type: 'social' }, - { name: 'Saturn', x: 310, y: 150, type: 'social' }, - { name: 'Uranus', x: 45, y: 200, type: 'generational' }, - { name: 'Neptune', x: 15, y: 250, type: 'generational' }, - { name: 'Pluto', x: 350, y: 280, type: 'generational' } - ], + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0], + Jupiter: [298.56, 0], + Saturn: [245.78, 0], + Uranus: [178.90, 0], + Neptune: [210.12, 0], + Pluto: [238.34, 0], + Chiron: [125.67, 0], + NNode: [95.45, 0], + SNode: [275.45, 0], + Lilith: [145.23, 0], + Fortune: [325.67, 0] + }, cusps: [ - { name: 'Asc', x: 0, y: 0 }, - { name: 'MC', x: 0, y: 90 }, - { name: 'Desc', x: 0, y: 180 }, - { name: 'IC', x: 0, y: 270 } - ], - aspects: [ - { planet1: 'Sun', planet2: 'Moon', type: 'conjunction', value: 12 }, - { planet1: 'Sun', planet2: 'Mercury', type: 'trine', value: 8 } + 315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89 ] } @@ -63,19 +79,46 @@ const chart = new Chart('chart', 600, 600) chart.radix(data) ``` -## API Methods +## Retrograde planets + +Set the second array element to a negative value to mark a planet as retrograde. +The library will render an **R** next to the symbol. + +```javascript +const data = { + planets: { + Jupiter: [298.56, -1], // retrograde + Saturn: [245.78, 0], // direct + }, + cusps: [ /* 12 values */ ] +} +``` + +## Aspects + +Call `.aspects()` on the returned `Radix` instance to draw aspect lines: + +```javascript +const radix = chart.radix(data) +radix.aspects() +``` + +Aspects are computed automatically based on the default orbs (conjunction 10°, square 8°, trine 8°, opposition 10°). Override them via [Settings](/api/settings). + +## API Reference -### `chart.radix(data: AstroData)` +### `chart.radix(data: AstroData): Radix` -Renders a radix chart with the provided astrological data. +Renders a radix chart and returns a `Radix` instance. **Parameters:** -- `data` — An `AstroData` object containing planets, cusps, and aspects +- `data` — `AstroData` object with `planets` and `cusps` -**Returns:** The chart instance (for method chaining) +**Returns:** `Radix` instance (use it to call `.aspects()` or `.transit()`) ## Next Steps -- **[Transit Charts](/docs/guides/transit-chart)** — Add a transit ring -- **[Aspects](/docs/api/chart)** — Learn more about aspect rendering -- **[Settings](/docs/guides/custom-settings)** — Customize appearance +- [Transit Charts](/guides/transit-chart) — overlay a transit ring +- [Animation](/guides/animation) — animate transit movement +- [Custom Settings](/guides/custom-settings) — colours, scale, orbs +- [Types reference](/api/types) — full type definitions and valid planet keys diff --git a/website/src/content/docs/test-demo.mdx b/website/src/content/docs/test-demo.mdx new file mode 100644 index 0000000..f252864 --- /dev/null +++ b/website/src/content/docs/test-demo.mdx @@ -0,0 +1,30 @@ +--- +title: Chart Demo Test +description: Test page for ChartDemo component in all modes +--- + +import ChartDemo from '../../components/ChartDemo.astro' + +# Chart Demo Component Test + +This page demonstrates the ChartDemo component in all three modes. + +## Radix Mode + +A basic radix (birth) chart showing planetary positions at a specific time. + + + +## Transit Mode + +A chart showing both radix (inner) and transit (outer) rings. + + + +## Animation Mode + +An animated chart with a button to trigger the animation. + + + + diff --git a/website/src/data/demoData.ts b/website/src/data/demoData.ts new file mode 100644 index 0000000..7b80c03 --- /dev/null +++ b/website/src/data/demoData.ts @@ -0,0 +1,96 @@ +/** + * Demo data module for AstroChart examples. + * Contains sample birth chart and transit data for component examples. + */ + +export interface AstroData { + planets: Record + cusps: number[] +} + +/** + * Default radix (birth chart) data. + * Represents a sample birth chart with 15 planets and 12 cusps. + * Planet positions are in degrees. + * Based on: 1990-04-03, 14:30 UTC, New York, NY + */ +export const defaultRadixData: AstroData = { + planets: { + Sun: [12.45, 0], // Aries 12°45' + Moon: [145.67, 0], // Leo 25°40' + Mercury: [8.23, 0], // Aries 8°14' + Venus: [35.12, 0], // Taurus 5°07' + Mars: [162.34, 0], // Virgo 12°20' + Jupiter: [298.56, 0], // Aquarius 28°34' + Saturn: [245.78, 0], // Sagittarius 5°47' + Uranus: [178.90, 0], // Libra 28°54' + Neptune: [210.12, 0], // Scorpio 0°07' + Pluto: [238.34, 0], // Sagittarius 28°20' + Chiron: [125.67, 0], // Leo 5°40' + NNode: [95.45, 0], // Gemini 5°27' + SNode: [275.45, 0], // Sagittarius 5°27' + Lilith: [145.23, 0], // Leo 25°14' + Fortune: [325.67, 0] // Aquarius 25°40' + }, + cusps: [ + 315.45, // Asc (Aquarius 15°27') + 35.67, // 2nd (Taurus 5°40') + 65.23, // 3rd (Gemini 5°14') + 92.45, // IC (Gemini 2°27') + 125.67, // 5th (Leo 5°40') + 155.89, // 6th (Virgo 15°53') + 135.45, // Dsc (Leo 15°27') - opposite Asc + 215.67, // 8th (Scorpio 5°40') + 245.23, // 9th (Sagittarius 5°14') + 272.45, // MC (Sagittarius 2°27') + 305.67, // 11th (Aquarius 5°40') + 335.89 // 12th (Pisces 15°53') + ] +} + +/** + * Default transit data. + * Represents current planetary positions for transit chart overlay. + * Date: Example 2024-01-15, 10:00 UTC + */ +export const defaultTransitData: AstroData = { + planets: { + Sun: [25.34, 0], // Aquarius 25°20' + Moon: [182.45, 0], // Libra 2°27' + Mercury: [42.67, 0], // Taurus 12°40' + Venus: [58.12, 0], // Taurus 28°07' + Mars: [198.34, 0], // Libra 18°20' + Jupiter: [328.56, 0], // Pisces 28°34' + Saturn: [288.78, 0], // Capricorn 8°47' + Uranus: [298.90, 0], // Aquarius 28°54' + Neptune: [325.12, 0], // Pisces 25°07' + Pluto: [300.34, 0], // Aquarius 0°20' + Chiron: [168.67, 0], // Virgo 18°40' + NNode: [62.45, 0], // Taurus 2°27' + SNode: [242.45, 0], // Sagittarius 2°27' + Lilith: [215.23, 0], // Scorpio 5°14' + Fortune: [45.67, 0] // Taurus 15°40' + }, + cusps: [ + 315.45, // Asc (Aquarius 15°27') - same as radix for comparison + 35.67, // 2nd (Taurus 5°40') + 65.23, // 3rd (Gemini 5°14') + 92.45, // IC (Gemini 2°27') + 125.67, // 5th (Leo 5°40') + 155.89, // 6th (Virgo 15°53') + 135.45, // Dsc (Leo 15°27') + 215.67, // 8th (Scorpio 5°40') + 245.23, // 9th (Sagittarius 5°14') + 272.45, // MC (Sagittarius 2°27') + 305.67, // 11th (Aquarius 5°40') + 335.89 // 12th (Pisces 15°53') + ] +} + +/** + * Sample data combining both radix and transit for animation examples. + */ +export const animationData = { + radix: defaultRadixData, + transit: defaultTransitData +} From 7274348e27d49aa105444d1fd25974f38d74005b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20F=C3=BCcher?= Date: Mon, 30 Mar 2026 21:37:28 -0300 Subject: [PATCH 3/5] [Phase 1] Create custom landing page (#106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Phase 1] Create custom landing page Implement comprehensive landing page for AstroChart with all required sections: Hero Section: - Tagline: "A free and open-source JavaScript library for generating SVG astrology charts" - npm install snippet - "Get Started" CTA → /installation - "View on GitHub" link Version Badge: - Dynamically reads version from package.json at build time - Displays as "v3.0.2" - Links to /changelog Live Demo Section: - Side-by-side radix and transit chart demos using ChartDemo component - Collapsible code example showing usage - Interactive charts powered by pure SVG Feature Cards: - Pure SVG: crisp, scalable vector graphics - Zero Dependencies: pure vanilla JavaScript - Fully Customizable: control all visual settings - TypeScript-first: full type definitions included Sponsorship Section: - Ko-fi button with coffee emoji - GitHub Sponsors button with heart emoji - Gradient background styling Mobile Responsive: - Works on 320px–1920px viewports - Grid layouts adjust to single column on mobile - Sponsor buttons stack vertically on narrow screens Build verified: 25 pages built successfully with no errors Closes #95 🤖 Generated with [eca](https://eca.dev) Co-Authored-By: eca * fix sponsor link --------- Co-authored-by: eca --- website/src/pages/index.astro | 305 ++++++++++++++++++++++++++++++---- 1 file changed, 271 insertions(+), 34 deletions(-) diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index b4df245..27b852f 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -3,17 +3,25 @@ // Uses StarlightPage with splash template to keep the header/footer from Starlight import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' +import ChartDemo from '../components/ChartDemo.astro' +import { readFileSync } from 'node:fs' +import { resolve } from 'node:path' + +// Read version from package.json at build time +const packageJsonPath = resolve(process.cwd(), '../package.json') +const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) +const version = packageJson.version --- @@ -25,46 +33,92 @@ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro'
npm install @astrodraw/astrochart
+ + + + +
+

See It In Action

+

Interactive astrology charts powered by pure SVG

+ +
+
+

Radix Chart

+ +
+ +
+

Transit Chart

+ +
+
+ +
+ Show Code Example +
import { Chart } from '@astrodraw/astrochart'
+
+// Create a new chart
+const chart = new Chart('chart', 600, 600)
+
+// Render radix (birth) chart
+chart.radix({
+  planets: {
+    Sun: [12.45, 0],
+    Moon: [145.67, 0],
+    // ... more planets
+  },
+  cusps: [315.45, 35.67, 65.23, /* ... 12 total */]
+})
+
+// Add transit ring
+chart.transit(transitData)
+
+
+

Why AstroChart?

-

⚡ Zero Dependencies

-

Pure SVG and vanilla JavaScript. No React, Vue, or other frameworks required.

-
-
-

🎨 Fully Customizable

-

Control colors, fonts, sizes, rendering modes, and add custom symbols with simple settings.

-
-
-

📱 Responsive

-

Charts scale perfectly to any container size and work on all modern browsers.

+

📊 Pure SVG

+

Renders crisp, scalable vector graphics that look perfect at any size. No canvas, no images—just clean SVG code.

-

🔧 Framework Agnostic

-

Use as a standalone library or integrate with React, Vue, Angular, or any other framework.

+

⚡ Zero Dependencies

+

Pure vanilla JavaScript with no external dependencies. Lightweight, fast, and works anywhere.

-

📊 Complete API

-

Render radix charts, transit rings, aspects, animations, and click events with ease.

+

🎨 Fully Customizable

+

Control colors, fonts, sizes, rendering modes, and add custom symbols with simple settings objects.

-

✅ TypeScript Support

-

Full type definitions included. Write safe, maintainable code with IDE autocompletion.

+

✅ TypeScript-first

+

Built with TypeScript. Full type definitions included for safe, maintainable code with IDE autocompletion.

+ +
+

Support AstroChart

+

AstroChart is free and open-source. If you find it useful, consider supporting its development!

+ + +
+
@@ -99,6 +153,109 @@ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' font-family: var(--sl-font-mono, 'Courier New', monospace); } + /* Version Badge */ + .version-badge { + text-align: center; + margin: 1rem auto 3rem; + } + + .version-badge a { + display: inline-block; + padding: 0.375rem 0.75rem; + background: var(--sl-color-accent); + color: white; + font-weight: 600; + font-size: 0.875rem; + border-radius: 0.375rem; + text-decoration: none; + transition: opacity 0.2s ease; + } + + .version-badge a:hover { + opacity: 0.9; + } + + /* Demo Section */ + .demo-section { + margin: 4rem 0; + padding: 2rem; + background: var(--sl-color-bg-nav); + border-radius: 1rem; + border: 1px solid var(--sl-color-border); + } + + .demo-section h2 { + font-size: 2rem; + text-align: center; + margin: 0 0 0.5rem 0; + color: var(--sl-color-white); + } + + .demo-intro { + text-align: center; + color: var(--sl-color-gray-2); + margin: 0 0 2rem 0; + font-size: 1.1rem; + } + + .demo-container { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; + margin-bottom: 2rem; + } + + .demo-item h3 { + text-align: center; + margin: 0 0 1rem 0; + font-size: 1.2rem; + color: var(--sl-color-white); + } + + .demo-code { + margin-top: 2rem; + border-top: 1px solid var(--sl-color-border); + padding-top: 1.5rem; + } + + .demo-code summary { + cursor: pointer; + font-weight: 600; + color: var(--sl-color-accent); + padding: 0.5rem; + text-align: center; + list-style: none; + } + + .demo-code summary::-webkit-details-marker { + display: none; + } + + .demo-code summary::before { + content: '▼ '; + display: inline-block; + transition: transform 0.2s; + } + + .demo-code[open] summary::before { + transform: rotate(180deg); + } + + .demo-code pre { + background: #1e1e1e; + padding: 1.5rem; + border-radius: 0.5rem; + overflow-x: auto; + margin-top: 1rem; + font-size: 0.875rem; + line-height: 1.6; + } + + .demo-code code { + color: #d4d4d4; + font-family: var(--sl-font-mono, 'Courier New', monospace); + } + /* Features Section */ .features { margin: 4rem 0; @@ -142,6 +299,66 @@ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' font-size: 0.95rem; } + /* Sponsorship Section */ + .sponsorship { + text-align: center; + padding: 3rem 2rem; + background: linear-gradient(135deg, var(--sl-color-bg-nav) 0%, var(--sl-color-bg-sidebar) 100%); + border-radius: 1rem; + border: 1px solid var(--sl-color-border); + margin: 4rem 0; + } + + .sponsorship h2 { + font-size: 1.75rem; + margin: 0 0 1rem 0; + color: var(--sl-color-white); + } + + .sponsorship p { + color: var(--sl-color-gray-2); + margin: 0 0 2rem 0; + font-size: 1.05rem; + } + + .sponsor-buttons { + display: flex; + gap: 1rem; + justify-content: center; + flex-wrap: wrap; + } + + .sponsor-btn { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.875rem 1.75rem; + border-radius: 0.5rem; + font-weight: 600; + font-size: 1rem; + text-decoration: none; + transition: transform 0.2s ease, box-shadow 0.2s ease; + } + + .sponsor-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + } + + .sponsor-btn.kofi { + background: #FF5E5B; + color: white; + } + + .sponsor-btn.github { + background: #6e5494; + color: white; + } + + .sponsor-btn span { + font-size: 1.2rem; + } + /* CTA Footer */ .cta-footer { text-align: center; @@ -149,7 +366,7 @@ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' background: var(--sl-color-bg-nav); border-radius: 1rem; border: 1px solid var(--sl-color-border); - margin: 4rem 0; + margin: 4rem 0 2rem; } .cta-footer h2 { @@ -160,6 +377,7 @@ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' .cta-footer p { color: var(--sl-color-gray-2); margin: 0.5rem 0; + font-size: 1.05rem; } .cta-footer a { @@ -172,20 +390,39 @@ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro' text-decoration: underline; } - .version-info { - font-size: 0.9rem; - margin-top: 1.5rem !important; - color: var(--sl-color-gray-3) !important; - } - /* Responsive */ @media (max-width: 768px) { + .demo-container { + grid-template-columns: 1fr; + } + .feature-grid { grid-template-columns: 1fr; } - .features h2 { + .features h2, + .demo-section h2 { font-size: 1.5rem; } + + .sponsor-buttons { + flex-direction: column; + align-items: stretch; + } + + .sponsor-btn { + justify-content: center; + } + } + + @media (max-width: 320px) { + .landing-content { + padding: 0 1rem; + } + + .install-snippet pre { + font-size: 0.875rem; + padding: 0.5rem 1rem; + } } From 6efbc135839a40f26155f89095420286e90252f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20F=C3=BCcher?= Date: Mon, 30 Mar 2026 22:33:22 -0300 Subject: [PATCH 4/5] [Phase 1] Write core documentation pages (#107) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Phase 1] Write core documentation pages ✅ Issue #97 Complete ## Pages Created/Updated 1. **introduction.mdx** — Welcome page with feature overview - Explains what AstroChart is and is NOT - Feature table highlighting key capabilities - Inline showing a basic radix chart - Links to GitHub, npm, and next steps 2. **installation.md** — Installation guide - npm, yarn, pnpm package managers - CDN unpkg bundle with UMD global example - ESM import for bundlers - TypeScript type definitions - Compatibility table for different environments 3. **quickstart.mdx** — Quick Start guide - 4-step walkthrough: Install → Container → Data → Render - Data format explanation (Record for planets, array of 12 for cusps) - Complete HTML + JS example (copy-pasteable) - Live showing rendered output - Troubleshooting section 4. **guides/radix-chart.mdx** — Radix Chart guide - Full explanation of radix charts - Data format details with valid planet names - House cusps requirement (exactly 12 values) - Complete example with all 15 planets/points - Retrograde planet marking - Aspects with customizable orbs - Live example 5. **guides/transit-chart.mdx** — Transit Chart guide - How transit charts overlay on radix - Complete examples with both radix and transit data - Retrograde transit planets - Transit-to-natal aspects - Live showing dual-ring chart - API reference for transit methods 6. **guides/animation.mdx** — Animation guide (greatly expanded) - Detailed animation method signature and parameters - Complete interactive example with date picker - Duration best practices (300ms–5s recommendations) - Callback patterns and completion handling - Chaining animations with async/await - Performance considerations - Common patterns (date input, continuous loop) - Live with interactive button - Troubleshooting guide ## Key Changes - Converted 5 files from .md to .mdx to support component imports - Fixed all data format examples to use correct AstroData structure: - `planets: Record` (was array of objects) - `cusps: number[]` of exactly 12 values - Added `` components to intro, quickstart, and all 3 guides - Enhanced animation guide with complete API documentation - Verified all code examples match actual library API - All pages include proper links to related docs ## Build Verification ✅ Build successful: 25 pages generated ✅ All 6 core docs pages render without errors ✅ Pagefind search index includes all new pages ✅ No TypeScript diagnostics ✅ No broken internal links ✅ No console errors 🧑 Generated with [eca](https://eca.dev) Co-Authored-By: eca * chore: rebuild dist bundle Regenerate astrochart.js UMD bundle via `npm run build`. No source changes — output is deterministic from current TypeScript sources. 🤖 Generated with [eca](https://eca.dev) Co-Authored-By: eca * docs: fix planet velocity description — not a retrograde flag The second element of a planet array is the astrological velocity of the point, not a boolean/flag. A negative velocity means the planet is retrograde; the sign of the value carries the meaning, not an arbitrary sentinel like -1. Updated in all affected files: - quickstart.mdx - guides/radix-chart.mdx - guides/transit-chart.mdx - api/types.md - api/radix.md Example values in code snippets updated to use realistic velocities (e.g. -1.5, -0.3) instead of the misleading -1 flag convention. 🤖 Generated with [eca](https://eca.dev) Co-Authored-By: eca --------- Co-authored-by: eca --- dist/astrochart.js | 2 +- website/src/content/docs/api/radix.md | 2 +- website/src/content/docs/api/types.md | 4 +- website/src/content/docs/guides/animation.md | 31 -- website/src/content/docs/guides/animation.mdx | 271 ++++++++++++++++++ .../src/content/docs/guides/radix-chart.md | 124 -------- .../src/content/docs/guides/radix-chart.mdx | 175 +++++++++++ .../src/content/docs/guides/transit-chart.md | 44 --- .../src/content/docs/guides/transit-chart.mdx | 182 ++++++++++++ .../{introduction.md => introduction.mdx} | 32 ++- website/src/content/docs/quickstart.md | 120 -------- website/src/content/docs/quickstart.mdx | 150 ++++++++++ 12 files changed, 800 insertions(+), 337 deletions(-) delete mode 100644 website/src/content/docs/guides/animation.md create mode 100644 website/src/content/docs/guides/animation.mdx delete mode 100644 website/src/content/docs/guides/radix-chart.md create mode 100644 website/src/content/docs/guides/radix-chart.mdx delete mode 100644 website/src/content/docs/guides/transit-chart.md create mode 100644 website/src/content/docs/guides/transit-chart.mdx rename website/src/content/docs/{introduction.md => introduction.mdx} (85%) delete mode 100644 website/src/content/docs/quickstart.md create mode 100644 website/src/content/docs/quickstart.mdx diff --git a/dist/astrochart.js b/dist/astrochart.js index 3850aed..bf84840 100644 --- a/dist/astrochart.js +++ b/dist/astrochart.js @@ -1 +1 @@ -!function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.astrochart=s():t.astrochart=s()}(self,(()=>(()=>{"use strict";var t={d:(s,e)=>{for(var i in e)t.o(e,i)&&!t.o(s,i)&&Object.defineProperty(s,i,{enumerable:!0,get:e[i]})},o:(t,s)=>Object.prototype.hasOwnProperty.call(t,s),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},s={};t.r(s),t.d(s,{AspectCalculator:()=>_,Chart:()=>m,default:()=>R});const e={SYMBOL_SCALE:1,COLOR_BACKGROUND:"#fff",POINTS_COLOR:"#000",POINTS_TEXT_SIZE:8,POINTS_STROKE:1.8,SIGNS_COLOR:"#000",SIGNS_STROKE:1.5,MARGIN:50,PADDING:18,ID_CHART:"astrology",ID_RADIX:"radix",ID_TRANSIT:"transit",ID_ASPECTS:"aspects",ID_POINTS:"planets",ID_SIGNS:"signs",ID_CIRCLES:"circles",ID_AXIS:"axis",ID_CUSPS:"cusps",ID_RULER:"ruler",ID_BG:"bg",CIRCLE_COLOR:"#333",CIRCLE_STRONG:2,LINE_COLOR:"#333",INDOOR_CIRCLE_RADIUS_RATIO:2,INNER_CIRCLE_RADIUS_RATIO:8,RULER_RADIUS:4,SYMBOL_SUN:"Sun",SYMBOL_MOON:"Moon",SYMBOL_MERCURY:"Mercury",SYMBOL_VENUS:"Venus",SYMBOL_MARS:"Mars",SYMBOL_JUPITER:"Jupiter",SYMBOL_SATURN:"Saturn",SYMBOL_URANUS:"Uranus",SYMBOL_NEPTUNE:"Neptune",SYMBOL_PLUTO:"Pluto",SYMBOL_CHIRON:"Chiron",SYMBOL_LILITH:"Lilith",SYMBOL_NNODE:"NNode",SYMBOL_SNODE:"SNode",SYMBOL_FORTUNE:"Fortune",SYMBOL_AS:"As",SYMBOL_DS:"Ds",SYMBOL_MC:"Mc",SYMBOL_IC:"Ic",SYMBOL_AXIS_FONT_COLOR:"#333",SYMBOL_AXIS_STROKE:1.6,SYMBOL_CUSP_1:"1",SYMBOL_CUSP_2:"2",SYMBOL_CUSP_3:"3",SYMBOL_CUSP_4:"4",SYMBOL_CUSP_5:"5",SYMBOL_CUSP_6:"6",SYMBOL_CUSP_7:"7",SYMBOL_CUSP_8:"8",SYMBOL_CUSP_9:"9",SYMBOL_CUSP_10:"10",SYMBOL_CUSP_11:"11",SYMBOL_CUSP_12:"12",CUSPS_STROKE:1,CUSPS_FONT_COLOR:"#000",SYMBOL_ARIES:"Aries",SYMBOL_TAURUS:"Taurus",SYMBOL_GEMINI:"Gemini",SYMBOL_CANCER:"Cancer",SYMBOL_LEO:"Leo",SYMBOL_VIRGO:"Virgo",SYMBOL_LIBRA:"Libra",SYMBOL_SCORPIO:"Scorpio",SYMBOL_SAGITTARIUS:"Sagittarius",SYMBOL_CAPRICORN:"Capricorn",SYMBOL_AQUARIUS:"Aquarius",SYMBOL_PISCES:"Pisces",SYMBOL_SIGNS:["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],COLOR_ARIES:"#FF4500",COLOR_TAURUS:"#8B4513",COLOR_GEMINI:"#87CEEB",COLOR_CANCER:"#27AE60",COLOR_LEO:"#FF4500",COLOR_VIRGO:"#8B4513",COLOR_LIBRA:"#87CEEB",COLOR_SCORPIO:"#27AE60",COLOR_SAGITTARIUS:"#FF4500",COLOR_CAPRICORN:"#8B4513",COLOR_AQUARIUS:"#87CEEB",COLOR_PISCES:"#27AE60",COLORS_SIGNS:["#FF4500","#8B4513","#87CEEB","#27AE60","#FF4500","#8B4513","#87CEEB","#27AE60","#FF4500","#8B4513","#87CEEB","#27AE60"],CUSTOM_SYMBOL_FN:null,SHIFT_IN_DEGREES:180,STROKE_ONLY:!1,ADD_CLICK_AREA:!1,COLLISION_RADIUS:10,ASPECTS:{conjunction:{degree:0,orbit:10,color:"transparent"},square:{degree:90,orbit:8,color:"#FF4500"},trine:{degree:120,orbit:8,color:"#27AE60"},opposition:{degree:180,orbit:10,color:"#27AE60"}},SHOW_DIGNITIES_TEXT:!0,DIGNITIES_RULERSHIP:"r",DIGNITIES_DETRIMENT:"d",DIGNITIES_EXALTATION:"e",DIGNITIES_EXACT_EXALTATION:"E",DIGNITIES_FALL:"f",DIGNITIES_EXACT_EXALTATION_DEFAULT:[{name:"Sun",position:19,orbit:2},{name:"Moon",position:33,orbit:2},{name:"Mercury",position:155,orbit:2},{name:"Venus",position:357,orbit:2},{name:"Mars",position:298,orbit:2},{name:"Jupiter",position:105,orbit:2},{name:"Saturn",position:201,orbit:2},{name:"NNode",position:63,orbit:2}],ANIMATION_CUSPS_ROTATION_SPEED:2,DEBUG:!1};var i=function(t,s,e,i,n){var r=(n.SHIFT_IN_DEGREES-i)*Math.PI/180;return{x:t+e*Math.cos(r),y:s+e*Math.sin(r)}},n=function(t){return 180*t/Math.PI},r=function(t,s,e){var i=[],n=t.x+e.COLLISION_RADIUS/1.4*e.SYMBOL_SCALE,r=t.y-e.COLLISION_RADIUS*e.SYMBOL_SCALE;return s.forEach((function(t,s){i.push({text:t,x:n,y:r+e.COLLISION_RADIUS/1.4*e.SYMBOL_SCALE*s})}),this),i},h=function(t){var s={hasError:!1,messages:[]};if(null==t)return s.messages.push("Data is not set."),s.hasError=!0,s;for(var e in null==t.planets&&(s.messages.push("There is not property 'planets'."),s.hasError=!0),t.planets)t.planets.hasOwnProperty(e)&&(Array.isArray(t.planets[e])||(s.messages.push("The planets property '"+e+"' has to be Array."),s.hasError=!0));return null==t.cusps||Array.isArray(t.cusps)||(s.messages.push("Property 'cusps' has to be Array."),s.hasError=!0),null!=t.cusps&&12!==t.cusps.length&&(s.messages.push("Count of 'cusps' values has to be 12."),s.hasError=!0),s},a=function(t,s,e){var i=document.getElementById(s);if(null!=i)return o(i),i;var n=document.getElementById(e);if(null==n)throw new Error("Paper element should exist");var r=document.createElementNS(n.namespaceURI,"g");return r.setAttribute("id",s),t.appendChild(r),r},o=function(t){if(null!=t)for(var s;null!=(s=t.lastChild);)t.removeChild(s)},S=function(t,s,e,n){if(0===t.length)return t.push(s),t;if(2*Math.PI*e.r-n.COLLISION_RADIUS*n.SYMBOL_SCALE*2*(t.length+2)<=0)throw n.DEBUG&&console.log("Universe circumference: "+2*Math.PI*e.r+", Planets circumference: "+n.COLLISION_RADIUS*n.SYMBOL_SCALE*2*(t.length+2)),new Error("Unresolved planet collision. Try change SYMBOL_SCALE or paper size.");var r,h,a,o,p,g=!1;t.sort(c);for(var A=0,L=t.length;A180&&(e=(e+180)%360,i=(i+180)%360),e<=i?(t.angle=t.angle-1,s.angle=s.angle+1):e>=i&&(t.angle=t.angle+1,s.angle=s.angle-1),t.angle=(t.angle+360)%360,s.angle=(s.angle+360)%360},p=function(t,s,e,n,r,h){for(var a=[],o=n,S=e<=n?o-Math.abs(n-e)/2:o+Math.abs(n-e)/2,u=0,p=0;u<72;u++){var c=p+r,g=i(t,s,e,c,h),A=i(t,s,u%2==0?o:S,c,h);a.push({startX:g.x,startY:g.y,endX:A.x,endY:A.y}),p+=5}return a},c=function(t,s){return t.angle-s.angle};const g=function(){function t(t,s){if(null===t)throw new Error("Param 'cusps' must not be empty.");if(!Array.isArray(t)||12!==t.length)throw new Error("Param 'cusps' is not 12 length Array.");this.cusps=t,this.settings=null!=s?s:e}return t.prototype.getSign=function(t){var s=t%n(2*Math.PI);return Math.floor(s/30+1)},t.prototype.isRetrograde=function(t){return t<0},t.prototype.getHouseNumber=function(t){for(var s=t%n(2*Math.PI),e=0,i=this.cusps.length;e=this.cusps[e]&&sthis.cusps[e%(i-1)+1])return e+1;throw new Error("Oops, serious error in the method: 'astrology.Zodiac.getHouseNumber'.")},t.prototype.getDignities=function(t,s){if(!t||!t.name||null==t.position)return[];var e=[],i=this.getSign(t.position);switch(t.position,n(2*Math.PI),t.name){case this.settings.SYMBOL_SUN:5===i?e.push(this.settings.DIGNITIES_RULERSHIP):11===i&&e.push(this.settings.DIGNITIES_DETRIMENT),1===i?e.push(this.settings.DIGNITIES_EXALTATION):6===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_MOON:4===i?e.push(this.settings.DIGNITIES_RULERSHIP):10===i&&e.push(this.settings.DIGNITIES_DETRIMENT),2===i?e.push(this.settings.DIGNITIES_EXALTATION):8===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_MERCURY:3===i?e.push(this.settings.DIGNITIES_RULERSHIP):9===i&&e.push(this.settings.DIGNITIES_DETRIMENT),6===i?e.push(this.settings.DIGNITIES_EXALTATION):12===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_VENUS:2===i||7===i?e.push(this.settings.DIGNITIES_RULERSHIP):1!==i&&8!==i||e.push(this.settings.DIGNITIES_DETRIMENT),12===i?e.push(this.settings.DIGNITIES_EXALTATION):6===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_MARS:1===i||8===i?e.push(this.settings.DIGNITIES_RULERSHIP):2!==i&&7!==i||e.push(this.settings.DIGNITIES_DETRIMENT),10===i?e.push(this.settings.DIGNITIES_EXALTATION):4===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_JUPITER:9===i||12===i?e.push(this.settings.DIGNITIES_RULERSHIP):3!==i&&6!==i||e.push(this.settings.DIGNITIES_DETRIMENT),4===i?e.push(this.settings.DIGNITIES_EXALTATION):10===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_SATURN:10===i||11===i?e.push(this.settings.DIGNITIES_RULERSHIP):4!==i&&5!==i||e.push(this.settings.DIGNITIES_DETRIMENT),7===i?e.push(this.settings.DIGNITIES_EXALTATION):1===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_URANUS:11===i?e.push(this.settings.DIGNITIES_RULERSHIP):5===i&&e.push(this.settings.DIGNITIES_DETRIMENT),8===i?e.push(this.settings.DIGNITIES_EXALTATION):2===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_NEPTUNE:12===i?e.push(this.settings.DIGNITIES_RULERSHIP):6===i&&e.push(this.settings.DIGNITIES_DETRIMENT),5===i||9===i?e.push(this.settings.DIGNITIES_EXALTATION):11!==i&&3!==i||e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_PLUTO:8===i?e.push(this.settings.DIGNITIES_RULERSHIP):2===i&&e.push(this.settings.DIGNITIES_DETRIMENT),1===i?e.push(this.settings.DIGNITIES_EXALTATION):7===i&&e.push(this.settings.DIGNITIES_FALL)}if(null!=s&&Array.isArray(s))for(var r=0,h=s.length;r=n(2*Math.PI)?s+e/2-n(2*Math.PI):s+e/2;return r>h?r>=t&&t<=r&&(i=!0):r<=t&&t<=h&&(i=!0),i},t}();var A={conjunction:{degree:0,orbit:10,color:"transparent"},square:{degree:90,orbit:8,color:"#FF4500"},trine:{degree:120,orbit:8,color:"#27AE60"},opposition:{degree:180,orbit:10,color:"#27AE60"}},L=function(){function t(t,s){var e;if(null==t)throw new Error("Param 'toPoint' must not be empty.");this.settings=null!=s?s:{},this.settings.ASPECTS=null!==(e=null==s?void 0:s.ASPECTS)&&void 0!==e?e:A,this.toPoints=t,this.context=this}return t.prototype.getToPoints=function(){return this.toPoints},t.prototype.radix=function(t){if(null==t)return[];var s=[];for(var e in t)if(t.hasOwnProperty(e))for(var i in this.toPoints)if(this.toPoints.hasOwnProperty(i)&&e!==i)for(var n in this.settings.ASPECTS)this.hasAspect(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n])&&s.push({aspect:{name:n,degree:this.settings.ASPECTS[n].degree,orbit:this.settings.ASPECTS[n].orbit,color:this.settings.ASPECTS[n].color},point:{name:e,position:t[e][0]},toPoint:{name:i,position:this.toPoints[i][0]},precision:this.calcPrecision(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n].degree).toFixed(4)});return s.sort(this.compareAspectsByPrecision)},t.prototype.transit=function(t){if(null==t)return[];var s=[];for(var e in t)if(t.hasOwnProperty(e))for(var i in this.toPoints)if(this.toPoints.hasOwnProperty(i))for(var n in this.settings.ASPECTS)if(this.hasAspect(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n])){var r=this.calcPrecision(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n].degree);this.isTransitPointApproachingToAspect(this.settings.ASPECTS[n].degree,this.toPoints[i][0],t[e][0])&&(r*=-1),t[e][1]&&t[e][1]<0&&(r*=-1),s.push({aspect:{name:n,degree:this.settings.ASPECTS[n].degree,orbit:this.settings.ASPECTS[n].orbit,color:this.settings.ASPECTS[n].color},point:{name:e,position:t[e][0]},toPoint:{name:i,position:this.toPoints[i][0]},precision:r.toFixed(4)})}return s.sort(this.compareAspectsByPrecision)},t.prototype.hasAspect=function(t,s,e){var i=!1,r=Math.abs(t-s);r>n(Math.PI)&&(r=n(2*Math.PI)-r);var h=e.degree-e.orbit/2,a=e.degree+e.orbit/2;return h<=r&&r<=a&&(i=!0),i},t.prototype.calcPrecision=function(t,s,e){var i=Math.abs(t-s);return i>n(Math.PI)&&(i=n(2*Math.PI)-i),Math.abs(i-e)},t.prototype.isTransitPointApproachingToAspect=function(t,s,e){e-s>0?e-s>n(Math.PI)?e=(e+t)%n(2*Math.PI):s=(s+t)%n(2*Math.PI):s-e>n(Math.PI)?s=(s+t)%n(2*Math.PI):e=(e+t)%n(2*Math.PI);var i=e,r=s,h=i-r;return Math.abs(h)>n(Math.PI)&&(i=s,r=e),i-r<0},t.prototype.compareAspectsByPrecision=function(t,s){return parseFloat(t.precision)-parseFloat(s.precision)},t}();const _=L,O=function(){function t(t,s){if("function"!=typeof t)throw new Error("param 'callback' has to be a function.");this.debug=s,this.callback=t,this.boundTick_=this.tick.bind(this)}return t.prototype.start=function(){this.requestID_||(this.lastGameLoopFrame=(new Date).getTime(),this.tick(),this.debug&&console.log("[astrology.Timer] start"))},t.prototype.stop=function(){this.requestID_&&(window.cancelAnimationFrame(this.requestID_),this.requestID_=void 0,this.debug&&console.log("[astrology.Timer] stop"))},t.prototype.isRunning=function(){return!!this.requestID_},t.prototype.tick=function(){var t=(new Date).getTime();this.requestID_=window.requestAnimationFrame(this.boundTick_),this.callback(t-this.lastGameLoopFrame),this.lastGameLoopFrame=t},t}();const d=function(){function t(t,s){for(var e in this.transit=t,this.isReverse=!1,this.rotation=0,this.settings=s,this.actualPlanetPos={},this.transit.data.planets)this.transit.data.planets.hasOwnProperty(e)&&(this.actualPlanetPos[e]=this.transit.data.planets[e]);this.timer=new O(this.update.bind(this),this.settings.DEBUG),this.timeSinceLoopStart=0,this.context=this,this.cuspsElement=null}return t.prototype.animate=function(t,s,e,i){this.data=t,this.duration=1e3*s,this.isReverse=e||!1,this.callback=i,this.rotation=0,this.cuspsElement=document.getElementById(this.transit.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_CUSPS),this.timer.start()},t.prototype.update=function(t){if(t=null!=t?t:1,this.timeSinceLoopStart+=t,this.timeSinceLoopStart>=this.duration)return this.timer.stop(),void("function"==typeof this.callback&&this.callback());var s=this.duration-this.timeSinceLoopStart0&&(e+=this.isReverse?-1*(this.settings.ANIMATION_CUSPS_ROTATION_SPEED*s+s):this.settings.ANIMATION_CUSPS_ROTATION_SPEED*s);var i=this.isReverse?this.rotation-e:e-this.rotation;i<0&&(i+=s);var r=i/t;this.isReverse&&(r*=-1),this.rotation+=r,this.cuspsElement.setAttribute("transform","rotate("+this.rotation+" "+this.transit.cx+" "+this.transit.cy+")"),1===t&&this.cuspsElement.removeAttribute("transform")},t.prototype.updatePlanets=function(t){for(var s in this.data.planets)if(this.data.planets.hasOwnProperty(s)){var e=this.actualPlanetPos[s][0],i=this.data.planets[s][0],r=null!=this.actualPlanetPos[s][1]&&this.actualPlanetPos[s][1]<0,h=void 0;(h=this.isReverse&&r?i-e:this.isReverse||r?e-i:i-e)<0&&(h+=n(2*Math.PI));var a=h/t;this.isReverse&&(a*=-1),r&&(a*=-1);var o=e+a;o<0&&(o+=n(2*Math.PI)),this.actualPlanetPos[s][0]=o}this.transit.drawPoints(this.actualPlanetPos)},t}();const l=function(){function t(t,s,e){var i=h(s);if(i.hasError)throw new Error(i.messages.join(" | "));this.data=s,this.paper=t.paper,this.cx=t.cx,this.cy=t.cy,this.toPoints=t.toPoints,this.radius=t.radius,this.settings=e,this.rulerRadius=this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO/this.settings.RULER_RADIUS,this.pointRadius=this.radius+(this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO+this.settings.PADDING*this.settings.SYMBOL_SCALE),this.shift=t.shift,this.universe=document.createElementNS(this.paper.root.namespaceURI,"g"),this.universe.setAttribute("id",this.paper._paperElementId+"-"+this.settings.ID_TRANSIT),this.paper.root.appendChild(this.universe),this.context=this}return t.prototype.drawBg=function(){var t=this.universe,s=a(t,this.paper._paperElementId+"-"+this.settings.ID_BG,this.paper._paperElementId),e=this.paper.segment(this.cx,this.cy,this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO,0,359.99,this.radius/this.settings.INDOOR_CIRCLE_RADIUS_RATIO,1);e.setAttribute("fill",this.settings.STROKE_ONLY?"none":this.settings.COLOR_BACKGROUND),s.appendChild(e)},t.prototype.drawPoints=function(t){var s=null==t?this.data.planets:t;if(null!=s){var e,n,h=this.universe,o=a(h,this.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_POINTS,this.paper._paperElementId),u=(this.radius,this.radius,this.settings.INNER_CIRCLE_RADIUS_RATIO,this.radius,this.settings.INDOOR_CIRCLE_RADIUS_RATIO,this.settings.PADDING,this.settings.SYMBOL_SCALE,Object.keys(s).length,this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO);for(var p in this.locatedPoints=[],s)if(s.hasOwnProperty(p)){var c=i(this.cx,this.cy,this.pointRadius,s[p][0]+this.shift,this.settings),A={name:p,x:c.x,y:c.y,r:this.settings.COLLISION_RADIUS*this.settings.SYMBOL_SCALE,angle:s[p][0]+this.shift,pointer:s[p][0]+this.shift};this.locatedPoints=S(this.locatedPoints,A,{cx:this.cx,cy:this.cy,r:this.pointRadius},this.settings)}this.settings.DEBUG&&console.log("Transit count of points: "+this.locatedPoints.length),this.settings.DEBUG&&console.log("Transit located points:\n"+JSON.stringify(this.locatedPoints)),this.locatedPoints.forEach((function(t){e=i(this.cx,this.cy,u,s[t.name][0]+this.shift,this.settings),n=i(this.cx,this.cy,u+this.rulerRadius/2,s[t.name][0]+this.shift,this.settings);var h=this.paper.line(e.x,e.y,n.x,n.y);if(h.setAttribute("stroke",this.settings.CIRCLE_COLOR),h.setAttribute("stroke-width",this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE),o.appendChild(h),!this.settings.STROKE_ONLY&&s[t.name][0]+this.shift!==t.angle){e=n,n=i(this.cx,this.cy,this.pointRadius-this.settings.COLLISION_RADIUS*this.settings.SYMBOL_SCALE,t.angle,this.settings);var a=this.paper.line(e.x,e.y,n.x,n.y);a.setAttribute("stroke",this.settings.LINE_COLOR),a.setAttribute("stroke-width",this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE*.5),o.appendChild(a)}var S=this.paper.getSymbol(t.name,t.x,t.y);S.setAttribute("id",this.paper.root.id+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_POINTS+"-"+t.name),o.appendChild(S);var p=[(Math.floor(s[t.name][0])%30).toString()],c=new g(this.data.cusps,this.settings);s[t.name][1]&&c.isRetrograde(s[t.name][1])?p.push("R"):p.push(""),p=p.concat(c.getDignities({name:t.name,position:s[t.name][0]},this.settings.DIGNITIES_EXACT_EXALTATION_DEFAULT).join(",")),r(t,p,this.settings).forEach((function(t){o.appendChild(this.paper.text(t.text,t.x,t.y,this.settings.POINTS_TEXT_SIZE,this.settings.SIGNS_COLOR))}),this)}),this)}},t.prototype.drawCircles=function(){var t=this.universe,s=a(t,this.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_CIRCLES,this.paper._paperElementId),e=this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO,i=this.paper.circle(this.cx,this.cy,e);i.setAttribute("stroke",this.settings.CIRCLE_COLOR),i.setAttribute("stroke-width",(this.settings.CIRCLE_STRONG*this.settings.SYMBOL_SCALE).toString()),s.appendChild(i)},t.prototype.drawCusps=function(t){var s=null==t?this.data.cusps:t;if(null!=s)for(var e=this.universe,r=a(e,this.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_CUSPS,this.paper._paperElementId),h=this.radius+(this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO-this.rulerRadius)/2,o=0,S=s.length;o0?L-A:L-A+g,O=i(this.cx,this.cy,h,(A+_/2)%g+this.shift,this.settings);r.appendChild(this.paper.getSymbol((o+1).toString(),O.x,O.y))}},t.prototype.drawRuler=function(){var t=this.universe,s=a(t,this.paper.root.id+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_RULER,this.paper._paperElementId),e=this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO;p(this.cx,this.cy,e,e-this.rulerRadius,this.shift,this.settings).forEach((function(t){var e=this.paper.line(t.startX,t.startY,t.endX,t.endY);e.setAttribute("stroke",this.settings.CIRCLE_COLOR),e.setAttribute("stroke-width",this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE),s.appendChild(e)}),this);var i=this.paper.circle(this.cx,this.cy,e-this.rulerRadius);i.setAttribute("stroke",this.settings.CIRCLE_COLOR),i.setAttribute("stroke-width",(this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE).toString()),s.appendChild(i)},t.prototype.aspects=function(t){for(var s=null!=t&&Array.isArray(t)?t:new _(this.toPoints,this.settings).transit(this.data.planets),e=this.universe,n=a(e,this.paper.root.id+"-"+this.settings.ID_ASPECTS,this.paper._paperElementId),r=0,h=s.length;r0?I-C:I-C+l,m=i(o.cx,o.cy,e,(C+E/2)%l+o.shift,o.settings);s.appendChild(o.paper.getSymbol((t+1).toString(),m.x,m.y))},o=this,S=0,u=this.data.cusps.length;S(()=>{"use strict";var t={d:(s,e)=>{for(var i in e)t.o(e,i)&&!t.o(s,i)&&Object.defineProperty(s,i,{enumerable:!0,get:e[i]})},o:(t,s)=>Object.prototype.hasOwnProperty.call(t,s),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},s={};t.r(s),t.d(s,{AspectCalculator:()=>_,Chart:()=>m,default:()=>R});const e={SYMBOL_SCALE:1,COLOR_BACKGROUND:"#fff",POINTS_COLOR:"#000",POINTS_TEXT_SIZE:8,POINTS_STROKE:1.8,SIGNS_COLOR:"#000",SIGNS_STROKE:1.5,MARGIN:50,PADDING:18,ID_CHART:"astrology",ID_RADIX:"radix",ID_TRANSIT:"transit",ID_ASPECTS:"aspects",ID_POINTS:"planets",ID_SIGNS:"signs",ID_CIRCLES:"circles",ID_AXIS:"axis",ID_CUSPS:"cusps",ID_RULER:"ruler",ID_BG:"bg",CIRCLE_COLOR:"#333",CIRCLE_STRONG:2,LINE_COLOR:"#333",INDOOR_CIRCLE_RADIUS_RATIO:2,INNER_CIRCLE_RADIUS_RATIO:8,RULER_RADIUS:4,SYMBOL_SUN:"Sun",SYMBOL_MOON:"Moon",SYMBOL_MERCURY:"Mercury",SYMBOL_VENUS:"Venus",SYMBOL_MARS:"Mars",SYMBOL_JUPITER:"Jupiter",SYMBOL_SATURN:"Saturn",SYMBOL_URANUS:"Uranus",SYMBOL_NEPTUNE:"Neptune",SYMBOL_PLUTO:"Pluto",SYMBOL_CHIRON:"Chiron",SYMBOL_LILITH:"Lilith",SYMBOL_NNODE:"NNode",SYMBOL_SNODE:"SNode",SYMBOL_FORTUNE:"Fortune",SYMBOL_AS:"As",SYMBOL_DS:"Ds",SYMBOL_MC:"Mc",SYMBOL_IC:"Ic",SYMBOL_AXIS_FONT_COLOR:"#333",SYMBOL_AXIS_STROKE:1.6,SYMBOL_CUSP_1:"1",SYMBOL_CUSP_2:"2",SYMBOL_CUSP_3:"3",SYMBOL_CUSP_4:"4",SYMBOL_CUSP_5:"5",SYMBOL_CUSP_6:"6",SYMBOL_CUSP_7:"7",SYMBOL_CUSP_8:"8",SYMBOL_CUSP_9:"9",SYMBOL_CUSP_10:"10",SYMBOL_CUSP_11:"11",SYMBOL_CUSP_12:"12",CUSPS_STROKE:1,CUSPS_FONT_COLOR:"#000",SYMBOL_ARIES:"Aries",SYMBOL_TAURUS:"Taurus",SYMBOL_GEMINI:"Gemini",SYMBOL_CANCER:"Cancer",SYMBOL_LEO:"Leo",SYMBOL_VIRGO:"Virgo",SYMBOL_LIBRA:"Libra",SYMBOL_SCORPIO:"Scorpio",SYMBOL_SAGITTARIUS:"Sagittarius",SYMBOL_CAPRICORN:"Capricorn",SYMBOL_AQUARIUS:"Aquarius",SYMBOL_PISCES:"Pisces",SYMBOL_SIGNS:["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],COLOR_ARIES:"#FF4500",COLOR_TAURUS:"#8B4513",COLOR_GEMINI:"#87CEEB",COLOR_CANCER:"#27AE60",COLOR_LEO:"#FF4500",COLOR_VIRGO:"#8B4513",COLOR_LIBRA:"#87CEEB",COLOR_SCORPIO:"#27AE60",COLOR_SAGITTARIUS:"#FF4500",COLOR_CAPRICORN:"#8B4513",COLOR_AQUARIUS:"#87CEEB",COLOR_PISCES:"#27AE60",COLORS_SIGNS:["#FF4500","#8B4513","#87CEEB","#27AE60","#FF4500","#8B4513","#87CEEB","#27AE60","#FF4500","#8B4513","#87CEEB","#27AE60"],CUSTOM_SYMBOL_FN:null,SHIFT_IN_DEGREES:180,STROKE_ONLY:!1,ADD_CLICK_AREA:!1,COLLISION_RADIUS:10,ASPECTS:{conjunction:{degree:0,orbit:10,color:"transparent"},square:{degree:90,orbit:8,color:"#FF4500"},trine:{degree:120,orbit:8,color:"#27AE60"},opposition:{degree:180,orbit:10,color:"#27AE60"}},SHOW_DIGNITIES_TEXT:!0,DIGNITIES_RULERSHIP:"r",DIGNITIES_DETRIMENT:"d",DIGNITIES_EXALTATION:"e",DIGNITIES_EXACT_EXALTATION:"E",DIGNITIES_FALL:"f",DIGNITIES_EXACT_EXALTATION_DEFAULT:[{name:"Sun",position:19,orbit:2},{name:"Moon",position:33,orbit:2},{name:"Mercury",position:155,orbit:2},{name:"Venus",position:357,orbit:2},{name:"Mars",position:298,orbit:2},{name:"Jupiter",position:105,orbit:2},{name:"Saturn",position:201,orbit:2},{name:"NNode",position:63,orbit:2}],ANIMATION_CUSPS_ROTATION_SPEED:2,DEBUG:!1};var i=function(t,s,e,i,n){var r=(n.SHIFT_IN_DEGREES-i)*Math.PI/180;return{x:t+e*Math.cos(r),y:s+e*Math.sin(r)}},n=function(t){return 180*t/Math.PI},r=function(t,s,e){var i=[],n=t.x+e.COLLISION_RADIUS/1.4*e.SYMBOL_SCALE,r=t.y-e.COLLISION_RADIUS*e.SYMBOL_SCALE;return s.forEach((function(t,s){i.push({text:t,x:n,y:r+e.COLLISION_RADIUS/1.4*e.SYMBOL_SCALE*s})}),this),i},h=function(t){var s={hasError:!1,messages:[]};if(null==t)return s.messages.push("Data is not set."),s.hasError=!0,s;for(var e in null==t.planets&&(s.messages.push("There is not property 'planets'."),s.hasError=!0),t.planets)t.planets.hasOwnProperty(e)&&(Array.isArray(t.planets[e])||(s.messages.push("The planets property '"+e+"' has to be Array."),s.hasError=!0));return null==t.cusps||Array.isArray(t.cusps)||(s.messages.push("Property 'cusps' has to be Array."),s.hasError=!0),null!=t.cusps&&12!==t.cusps.length&&(s.messages.push("Count of 'cusps' values has to be 12."),s.hasError=!0),s},a=function(t,s,e){var i=document.getElementById(s);if(null!=i)return o(i),i;var n=document.getElementById(e);if(null==n)throw new Error("Paper element should exist");var r=document.createElementNS(n.namespaceURI,"g");return r.setAttribute("id",s),t.appendChild(r),r},o=function(t){if(null!=t)for(var s;null!=(s=t.lastChild);)t.removeChild(s)},S=function(t,s,e,n){if(0===t.length)return t.push(s),t;if(2*Math.PI*e.r-n.COLLISION_RADIUS*n.SYMBOL_SCALE*2*(t.length+2)<=0)throw n.DEBUG&&console.log("Universe circumference: "+2*Math.PI*e.r+", Planets circumference: "+n.COLLISION_RADIUS*n.SYMBOL_SCALE*2*(t.length+2)),new Error("Unresolved planet collision. Try change SYMBOL_SCALE or paper size.");var r,h,a,o,p,g=!1;t.sort(c);for(var A=0,L=t.length;A180&&(e=(e+180)%360,i=(i+180)%360),e<=i?(t.angle=t.angle-1,s.angle=s.angle+1):e>=i&&(t.angle=t.angle+1,s.angle=s.angle-1),t.angle=(t.angle+360)%360,s.angle=(s.angle+360)%360},p=function(t,s,e,n,r,h){for(var a=[],o=n,S=e<=n?o-Math.abs(n-e)/2:o+Math.abs(n-e)/2,u=0,p=0;u<72;u++){var c=p+r,g=i(t,s,e,c,h),A=i(t,s,u%2==0?o:S,c,h);a.push({startX:g.x,startY:g.y,endX:A.x,endY:A.y}),p+=5}return a},c=function(t,s){return t.angle-s.angle};const g=function(){function t(t,s){if(null===t)throw new Error("Param 'cusps' must not be empty.");if(!Array.isArray(t)||12!==t.length)throw new Error("Param 'cusps' is not 12 length Array.");this.cusps=t,this.settings=null!=s?s:e}return t.prototype.getSign=function(t){var s=t%n(2*Math.PI);return Math.floor(s/30+1)},t.prototype.isRetrograde=function(t){return t<0},t.prototype.getHouseNumber=function(t){for(var s=t%n(2*Math.PI),e=0,i=this.cusps.length;e=this.cusps[e]&&sthis.cusps[e%(i-1)+1])return e+1;throw new Error("Oops, serious error in the method: 'astrology.Zodiac.getHouseNumber'.")},t.prototype.getDignities=function(t,s){if(!t||!t.name||null==t.position)return[];var e=[],i=this.getSign(t.position);switch(t.position,n(2*Math.PI),t.name){case this.settings.SYMBOL_SUN:5===i?e.push(this.settings.DIGNITIES_RULERSHIP):11===i&&e.push(this.settings.DIGNITIES_DETRIMENT),1===i?e.push(this.settings.DIGNITIES_EXALTATION):6===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_MOON:4===i?e.push(this.settings.DIGNITIES_RULERSHIP):10===i&&e.push(this.settings.DIGNITIES_DETRIMENT),2===i?e.push(this.settings.DIGNITIES_EXALTATION):8===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_MERCURY:3===i?e.push(this.settings.DIGNITIES_RULERSHIP):9===i&&e.push(this.settings.DIGNITIES_DETRIMENT),6===i?e.push(this.settings.DIGNITIES_EXALTATION):12===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_VENUS:2===i||7===i?e.push(this.settings.DIGNITIES_RULERSHIP):1!==i&&8!==i||e.push(this.settings.DIGNITIES_DETRIMENT),12===i?e.push(this.settings.DIGNITIES_EXALTATION):6===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_MARS:1===i||8===i?e.push(this.settings.DIGNITIES_RULERSHIP):2!==i&&7!==i||e.push(this.settings.DIGNITIES_DETRIMENT),10===i?e.push(this.settings.DIGNITIES_EXALTATION):4===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_JUPITER:9===i||12===i?e.push(this.settings.DIGNITIES_RULERSHIP):3!==i&&6!==i||e.push(this.settings.DIGNITIES_DETRIMENT),4===i?e.push(this.settings.DIGNITIES_EXALTATION):10===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_SATURN:10===i||11===i?e.push(this.settings.DIGNITIES_RULERSHIP):4!==i&&5!==i||e.push(this.settings.DIGNITIES_DETRIMENT),7===i?e.push(this.settings.DIGNITIES_EXALTATION):1===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_URANUS:11===i?e.push(this.settings.DIGNITIES_RULERSHIP):5===i&&e.push(this.settings.DIGNITIES_DETRIMENT),8===i?e.push(this.settings.DIGNITIES_EXALTATION):2===i&&e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_NEPTUNE:12===i?e.push(this.settings.DIGNITIES_RULERSHIP):6===i&&e.push(this.settings.DIGNITIES_DETRIMENT),5===i||9===i?e.push(this.settings.DIGNITIES_EXALTATION):11!==i&&3!==i||e.push(this.settings.DIGNITIES_FALL);break;case this.settings.SYMBOL_PLUTO:8===i?e.push(this.settings.DIGNITIES_RULERSHIP):2===i&&e.push(this.settings.DIGNITIES_DETRIMENT),1===i?e.push(this.settings.DIGNITIES_EXALTATION):7===i&&e.push(this.settings.DIGNITIES_FALL)}if(null!=s&&Array.isArray(s))for(var r=0,h=s.length;r=n(2*Math.PI)?s+e/2-n(2*Math.PI):s+e/2;return r>h?r>=t&&t<=r&&(i=!0):r<=t&&t<=h&&(i=!0),i},t}();var A={conjunction:{degree:0,orbit:10,color:"transparent"},square:{degree:90,orbit:8,color:"#FF4500"},trine:{degree:120,orbit:8,color:"#27AE60"},opposition:{degree:180,orbit:10,color:"#27AE60"}},L=function(){function t(t,s){var e;if(null==t)throw new Error("Param 'toPoint' must not be empty.");this.settings=null!=s?s:{},this.settings.ASPECTS=null!==(e=null==s?void 0:s.ASPECTS)&&void 0!==e?e:A,this.toPoints=t,this.context=this}return t.prototype.getToPoints=function(){return this.toPoints},t.prototype.radix=function(t){if(null==t)return[];var s=[];for(var e in t)if(t.hasOwnProperty(e))for(var i in this.toPoints)if(this.toPoints.hasOwnProperty(i)&&e!==i)for(var n in this.settings.ASPECTS)this.hasAspect(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n])&&s.push({aspect:{name:n,degree:this.settings.ASPECTS[n].degree,orbit:this.settings.ASPECTS[n].orbit,color:this.settings.ASPECTS[n].color},point:{name:e,position:t[e][0]},toPoint:{name:i,position:this.toPoints[i][0]},precision:this.calcPrecision(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n].degree).toFixed(4)});return s.sort(this.compareAspectsByPrecision)},t.prototype.transit=function(t){if(null==t)return[];var s=[];for(var e in t)if(t.hasOwnProperty(e))for(var i in this.toPoints)if(this.toPoints.hasOwnProperty(i))for(var n in this.settings.ASPECTS)if(this.hasAspect(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n])){var r=this.calcPrecision(t[e][0],this.toPoints[i][0],this.settings.ASPECTS[n].degree);this.isTransitPointApproachingToAspect(this.settings.ASPECTS[n].degree,this.toPoints[i][0],t[e][0])&&(r*=-1),t[e][1]&&t[e][1]<0&&(r*=-1),s.push({aspect:{name:n,degree:this.settings.ASPECTS[n].degree,orbit:this.settings.ASPECTS[n].orbit,color:this.settings.ASPECTS[n].color},point:{name:e,position:t[e][0]},toPoint:{name:i,position:this.toPoints[i][0]},precision:r.toFixed(4)})}return s.sort(this.compareAspectsByPrecision)},t.prototype.hasAspect=function(t,s,e){var i=!1,r=Math.abs(t-s);r>n(Math.PI)&&(r=n(2*Math.PI)-r);var h=e.degree-e.orbit/2,a=e.degree+e.orbit/2;return h<=r&&r<=a&&(i=!0),i},t.prototype.calcPrecision=function(t,s,e){var i=Math.abs(t-s);return i>n(Math.PI)&&(i=n(2*Math.PI)-i),Math.abs(i-e)},t.prototype.isTransitPointApproachingToAspect=function(t,s,e){e-s>0?e-s>n(Math.PI)?e=(e+t)%n(2*Math.PI):s=(s+t)%n(2*Math.PI):s-e>n(Math.PI)?s=(s+t)%n(2*Math.PI):e=(e+t)%n(2*Math.PI);var i=e,r=s,h=i-r;return Math.abs(h)>n(Math.PI)&&(i=s,r=e),i-r<0},t.prototype.compareAspectsByPrecision=function(t,s){return parseFloat(t.precision)-parseFloat(s.precision)},t}();const _=L,O=function(){function t(t,s){if("function"!=typeof t)throw new Error("param 'callback' has to be a function.");this.debug=s,this.callback=t,this.boundTick_=this.tick.bind(this)}return t.prototype.start=function(){this.requestID_||(this.lastGameLoopFrame=(new Date).getTime(),this.tick(),this.debug&&console.log("[astrology.Timer] start"))},t.prototype.stop=function(){this.requestID_&&(window.cancelAnimationFrame(this.requestID_),this.requestID_=void 0,this.debug&&console.log("[astrology.Timer] stop"))},t.prototype.isRunning=function(){return!!this.requestID_},t.prototype.tick=function(){var t=(new Date).getTime();this.requestID_=window.requestAnimationFrame(this.boundTick_),this.callback(t-this.lastGameLoopFrame),this.lastGameLoopFrame=t},t}();const d=function(){function t(t,s){for(var e in this.transit=t,this.isReverse=!1,this.rotation=0,this.settings=s,this.actualPlanetPos={},this.transit.data.planets)this.transit.data.planets.hasOwnProperty(e)&&(this.actualPlanetPos[e]=this.transit.data.planets[e]);this.timer=new O(this.update.bind(this),this.settings.DEBUG),this.timeSinceLoopStart=0,this.context=this,this.cuspsElement=null}return t.prototype.animate=function(t,s,e,i){this.data=t,this.duration=1e3*s,this.isReverse=e||!1,this.callback=i,this.rotation=0,this.cuspsElement=document.getElementById(this.transit.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_CUSPS),this.timer.start()},t.prototype.update=function(t){if(t=null!=t?t:1,this.timeSinceLoopStart+=t,this.timeSinceLoopStart>=this.duration)return this.timer.stop(),void("function"==typeof this.callback&&this.callback());var s=this.duration-this.timeSinceLoopStart0&&(e+=this.isReverse?-1*(this.settings.ANIMATION_CUSPS_ROTATION_SPEED*s+s):this.settings.ANIMATION_CUSPS_ROTATION_SPEED*s);var i=this.isReverse?this.rotation-e:e-this.rotation;i<0&&(i+=s);var r=i/t;this.isReverse&&(r*=-1),this.rotation+=r,this.cuspsElement.setAttribute("transform","rotate("+this.rotation+" "+this.transit.cx+" "+this.transit.cy+")"),1===t&&this.cuspsElement.removeAttribute("transform")},t.prototype.updatePlanets=function(t){for(var s in this.data.planets)if(this.data.planets.hasOwnProperty(s)){var e=this.actualPlanetPos[s][0],i=this.data.planets[s][0],r=null!=this.actualPlanetPos[s][1]&&this.actualPlanetPos[s][1]<0,h=void 0;(h=this.isReverse&&r?i-e:this.isReverse||r?e-i:i-e)<0&&(h+=n(2*Math.PI));var a=h/t;this.isReverse&&(a*=-1),r&&(a*=-1);var o=e+a;o<0&&(o+=n(2*Math.PI)),this.actualPlanetPos[s][0]=o}this.transit.drawPoints(this.actualPlanetPos)},t}();const l=function(){function t(t,s,e){var i=h(s);if(i.hasError)throw new Error(i.messages.join(" | "));this.data=s,this.paper=t.paper,this.cx=t.cx,this.cy=t.cy,this.toPoints=t.toPoints,this.radius=t.radius,this.settings=e,this.rulerRadius=this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO/this.settings.RULER_RADIUS,this.pointRadius=this.radius+(this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO+this.settings.PADDING*this.settings.SYMBOL_SCALE),this.shift=t.shift,this.universe=document.createElementNS(this.paper.root.namespaceURI,"g"),this.universe.setAttribute("id",this.paper._paperElementId+"-"+this.settings.ID_TRANSIT),this.paper.root.appendChild(this.universe),this.context=this}return t.prototype.drawBg=function(){var t=this.universe,s=a(t,this.paper._paperElementId+"-"+this.settings.ID_BG,this.paper._paperElementId),e=this.paper.segment(this.cx,this.cy,this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO,0,359.99,this.radius/this.settings.INDOOR_CIRCLE_RADIUS_RATIO,1);e.setAttribute("fill",this.settings.STROKE_ONLY?"none":this.settings.COLOR_BACKGROUND),s.appendChild(e)},t.prototype.drawPoints=function(t){var s=null==t?this.data.planets:t;if(null!=s){var e,n,h=this.universe,o=a(h,this.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_POINTS,this.paper._paperElementId),u=(this.radius,this.radius,this.settings.INNER_CIRCLE_RADIUS_RATIO,this.radius,this.settings.INDOOR_CIRCLE_RADIUS_RATIO,this.settings.PADDING,this.settings.SYMBOL_SCALE,Object.keys(s).length,this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO);for(var p in this.locatedPoints=[],s)if(s.hasOwnProperty(p)){var c=i(this.cx,this.cy,this.pointRadius,s[p][0]+this.shift,this.settings),A={name:p,x:c.x,y:c.y,r:this.settings.COLLISION_RADIUS*this.settings.SYMBOL_SCALE,angle:s[p][0]+this.shift,pointer:s[p][0]+this.shift};this.locatedPoints=S(this.locatedPoints,A,{cx:this.cx,cy:this.cy,r:this.pointRadius},this.settings)}this.settings.DEBUG&&console.log("Transit count of points: "+this.locatedPoints.length),this.settings.DEBUG&&console.log("Transit located points:\n"+JSON.stringify(this.locatedPoints)),this.locatedPoints.forEach((function(t){e=i(this.cx,this.cy,u,s[t.name][0]+this.shift,this.settings),n=i(this.cx,this.cy,u+this.rulerRadius/2,s[t.name][0]+this.shift,this.settings);var h=this.paper.line(e.x,e.y,n.x,n.y);if(h.setAttribute("stroke",this.settings.CIRCLE_COLOR),h.setAttribute("stroke-width",this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE),o.appendChild(h),!this.settings.STROKE_ONLY&&s[t.name][0]+this.shift!==t.angle){e=n,n=i(this.cx,this.cy,this.pointRadius-this.settings.COLLISION_RADIUS*this.settings.SYMBOL_SCALE,t.angle,this.settings);var a=this.paper.line(e.x,e.y,n.x,n.y);a.setAttribute("stroke",this.settings.LINE_COLOR),a.setAttribute("stroke-width",this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE*.5),o.appendChild(a)}var S=this.paper.getSymbol(t.name,t.x,t.y);S.setAttribute("id",this.paper.root.id+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_POINTS+"-"+t.name),o.appendChild(S);var p=[(Math.floor(s[t.name][0])%30).toString()],c=new g(this.data.cusps,this.settings);s[t.name][1]&&c.isRetrograde(s[t.name][1])?p.push("R"):p.push(""),p=p.concat(c.getDignities({name:t.name,position:s[t.name][0]},this.settings.DIGNITIES_EXACT_EXALTATION_DEFAULT).join(",")),r(t,p,this.settings).forEach((function(t){o.appendChild(this.paper.text(t.text,t.x,t.y,this.settings.POINTS_TEXT_SIZE,this.settings.SIGNS_COLOR))}),this)}),this)}},t.prototype.drawCircles=function(){var t=this.universe,s=a(t,this.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_CIRCLES,this.paper._paperElementId),e=this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO,i=this.paper.circle(this.cx,this.cy,e);i.setAttribute("stroke",this.settings.CIRCLE_COLOR),i.setAttribute("stroke-width",(this.settings.CIRCLE_STRONG*this.settings.SYMBOL_SCALE).toString()),s.appendChild(i)},t.prototype.drawCusps=function(t){var s=null==t?this.data.cusps:t;if(null!=s)for(var e=this.universe,r=a(e,this.paper._paperElementId+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_CUSPS,this.paper._paperElementId),h=this.radius+(this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO-this.rulerRadius)/2,o=0,S=s.length;o0?L-A:L-A+g,O=i(this.cx,this.cy,h,(A+_/2)%g+this.shift,this.settings);r.appendChild(this.paper.getSymbol((o+1).toString(),O.x,O.y))}},t.prototype.drawRuler=function(){var t=this.universe,s=a(t,this.paper.root.id+"-"+this.settings.ID_TRANSIT+"-"+this.settings.ID_RULER,this.paper._paperElementId),e=this.radius+this.radius/this.settings.INNER_CIRCLE_RADIUS_RATIO;p(this.cx,this.cy,e,e-this.rulerRadius,this.shift,this.settings).forEach((function(t){var e=this.paper.line(t.startX,t.startY,t.endX,t.endY);e.setAttribute("stroke",this.settings.CIRCLE_COLOR),e.setAttribute("stroke-width",this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE),s.appendChild(e)}),this);var i=this.paper.circle(this.cx,this.cy,e-this.rulerRadius);i.setAttribute("stroke",this.settings.CIRCLE_COLOR),i.setAttribute("stroke-width",(this.settings.CUSPS_STROKE*this.settings.SYMBOL_SCALE).toString()),s.appendChild(i)},t.prototype.aspects=function(t){for(var s=null!=t&&Array.isArray(t)?t:new _(this.toPoints,this.settings).transit(this.data.planets),e=this.universe,n=a(e,this.paper.root.id+"-"+this.settings.ID_ASPECTS,this.paper._paperElementId),r=0,h=s.length;r0?I-C:I-C+l,m=i(o.cx,o.cy,e,(C+E/2)%l+o.shift,o.settings);s.appendChild(o.paper.getSymbol((t+1).toString(),m.x,m.y))},o=this,S=0,u=this.data.cusps.length;S` | Keys must be [valid planet names](/api/types#valid-planet-keys) | | `cusps` | `number[]` | Exactly **12** degree values | -Planet array: `[degrees, retrogradeFlag]` — negative second element = retrograde. +Planet array: `[degrees, velocity]` — the second element is the astrological velocity; a negative value means the planet is retrograde. ## Next Steps diff --git a/website/src/content/docs/api/types.md b/website/src/content/docs/api/types.md index 986698e..82f192d 100644 --- a/website/src/content/docs/api/types.md +++ b/website/src/content/docs/api/types.md @@ -25,7 +25,7 @@ Planet positions are stored as a plain object where each key is a planet name an ```typescript type Points = Record // number[0] — position in degrees (0–360) -// number[1] — retrograde flag: negative value = retrograde (e.g. -1) +// number[1] — astrological velocity: negative value = retrograde, positive = direct ``` ### Valid planet keys @@ -61,7 +61,7 @@ const data = { Mercury: [8.23, 0], Venus: [35.12, 0], Mars: [162.34, 0], - Jupiter: [298.56, -1], // retrograde (negative second element) + Jupiter: [298.56, -0.3], // retrograde (negative velocity) Saturn: [245.78, 0], Uranus: [178.90, 0], Neptune: [210.12, 0], diff --git a/website/src/content/docs/guides/animation.md b/website/src/content/docs/guides/animation.md deleted file mode 100644 index 95c87e3..0000000 --- a/website/src/content/docs/guides/animation.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Animation -description: Animate transitions between chart states. ---- - -# Animation - -AstroChart supports smooth animations when updating transit data or other chart properties. - -## Basic Animation - -Use `transit.animate()` to animate transitions: - -```javascript -const chart = new Chart('chart', 600, 600) -const transit = chart.radix(radixData).transit(transitData) - -// Animate to new transit data over 1000ms -transit.animate(newTransitData, 1000) -``` - -## Animation Options - -- **Duration** — Animation duration in milliseconds -- **Reverse** — Reverse the animation direction -- **Callback** — Function to call when animation completes - -## Next Steps - -- **[Transit Charts](/docs/guides/transit-chart)** — Learn about transit charts -- **[Custom Settings](/docs/guides/custom-settings)** — Customize animations diff --git a/website/src/content/docs/guides/animation.mdx b/website/src/content/docs/guides/animation.mdx new file mode 100644 index 0000000..85f5589 --- /dev/null +++ b/website/src/content/docs/guides/animation.mdx @@ -0,0 +1,271 @@ +--- +title: Animation +description: Animate transitions between chart states to create smooth, interactive visualizations. +--- + +import ChartDemo from '../../../components/ChartDemo.astro' + +# Animation + +AstroChart supports smooth animations when transitioning between chart states. This is particularly useful for: +- Animating transit planets over time +- Creating interactive date range selectors +- Showing planetary movement across a time period +- Building engaging educational tools + +## Basic Animation + +Use the `.animate()` method on a `Transit` instance to smoothly transition to new transit data: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const radixData = { + planets: { /* ... */ }, + cusps: [ /* 12 values */ ] +} + +const transitData1 = { + planets: { /* initial positions */ } +} + +const transitData2 = { + planets: { /* new positions */ } +} + +// Render the chart with initial transit +const chart = new Chart('chart', 600, 600) +const transit = chart.radix(radixData).transit(transitData1) + +// Later, animate to new positions over 1000 milliseconds +transit.animate(transitData2, 1000) +``` + +## Animation Method Signature + +```typescript +transit.animate( + data: AstroData, + duration: number, + options?: { + reverse?: boolean + onComplete?: () => void + } +): Promise +``` + +### Parameters + +- **`data`** — The target `AstroData` object with new transit positions +- **`duration`** — Animation duration in milliseconds (e.g., 1000 for 1 second) +- **`options`** (optional): + - **`reverse`** — If `true`, animate backward from current to target (default: `false`) + - **`onComplete`** — Callback function called when animation finishes + +## Complete Example + +Here's a complete example with an interactive date range slider: + +```html + + + + + Transit Animation + + +

Animate Transits Over Time

+ +
+ +
+ + + +
+ + + + +``` + +## Animation with Callbacks + +Run custom code when an animation completes: + +```javascript +const transit = chart.radix(radixData).transit(initialTransit) + +transit.animate(newTransit, 1000, { + onComplete: () => { + console.log('Animation finished!') + // Update UI, fetch new data, etc. + } +}) +``` + +## Chaining Animations + +Use async/await to chain multiple animations: + +```javascript +const transit = chart.radix(radixData).transit(data1) + +// Animate from data1 → data2 +await transit.animate(data2, 1000) + +// Then animate from data2 → data3 +await transit.animate(data3, 1000) + +// Then back to data1 +await transit.animate(data1, 1000) +``` + +## Duration Best Practices + +- **Fast animations** (300–500 milliseconds): Quick UI updates, responsive feedback +- **Medium animations** (1000–2000 milliseconds): Watching planetary movement, default duration +- **Slow animations** (3000+ milliseconds): Educational, contemplative viewing +- **Very fast** (less than 300ms): Can feel jarring; not recommended for planetary movement + +```javascript +// Fast movement update +transit.animate(newData, 500) + +// Smooth, visible movement +transit.animate(newData, 2000) + +// Slow, educational animation +transit.animate(newData, 5000) +``` + +## Performance Considerations + +- Animations are GPU-accelerated via SVG transforms +- Rendering is smooth even for 15+ planets +- Duration and animation type don't significantly impact performance +- For slower devices, use shorter durations (500–1000ms) + +## Interactive Demo + +Try the animated demo below. Click "Start Animation" to see transits move smoothly: + + + +## Common Patterns + +### Animate on Date Input + +```javascript +const dateInput = document.getElementById('dateInput') +const transit = chart.radix(radixData).transit(initialTransit) + +dateInput.addEventListener('change', async (e) => { + const selectedDate = new Date(e.target.value) + + // Calculate new transit positions for selectedDate + // (you'll need an ephemeris calculator for this) + const newTransit = calculateTransit(selectedDate) + + await transit.animate(newTransit, 1500) +}) +``` + +### Continuous Animation Loop + +```javascript +const transit = chart.radix(radixData).transit(data1) +const allTransitData = [ data1, data2, data3, data4 ] +let currentIndex = 0 + +async function loop() { + currentIndex = (currentIndex + 1) % allTransitData.length + await transit.animate(allTransitData[currentIndex], 2000) + loop() // Continue forever +} + +loop() +``` + +## Troubleshooting + +**Animation is choppy or stutters** +- Check if your browser supports SVG animations (all modern browsers do) +- Reduce the number of planets or aspects +- Increase duration slightly (jerky motion often means too-fast animation) + +**Animation doesn't start** +- Ensure the transit data format matches the expected structure +- Check browser console for errors +- Verify the `transit` object was properly created + +**Callback never fires** +- Ensure you're using `.animate()` on a `Transit` instance (not `Radix`) +- Check that duration is reasonable (not 0 or negative) + +## Next Steps + +- **[Transit Charts](/docs/guides/transit-chart)** — Learn about transit rendering +- **[Custom Settings](/docs/guides/custom-settings)** — Customize animation appearance +- **[API Reference](/docs/api/transit)** — Full Transit API documentation diff --git a/website/src/content/docs/guides/radix-chart.md b/website/src/content/docs/guides/radix-chart.md deleted file mode 100644 index 38a075a..0000000 --- a/website/src/content/docs/guides/radix-chart.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Radix Chart -description: Learn how to render a complete radix (natal) chart with AstroChart. ---- - -# Radix Chart - -A radix chart (also called a natal or birth chart) is a snapshot of the sky at a specific moment in time. - -AstroChart renders the chart from an `AstroData` object containing **planet positions** and **house cusps** — both expressed as degree values (0–360). - -## Basic Radix Chart - -```html -
-``` - -```javascript -import { Chart } from '@astrodraw/astrochart' - -const data = { - planets: { - Sun: [12.45, 0], - Moon: [145.67, 0] - }, - cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, - 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] -} - -const chart = new Chart('chart', 600, 600) -chart.radix(data) -``` - -## Data format - -Planet positions use a plain object (`Record`): - -```javascript -{ - Sun: [degrees, retrogradeFlag] - // ^^^^^^^ 0–360 ^^^^^^^^ negative = retrograde, 0 = direct -} -``` - -House cusps are an **array of exactly 12 degree values** representing the start of each house in order (1st through 12th). Passing fewer or more than 12 will throw a validation error. - -See the [Types reference](/api/types) for all valid planet keys and a full example. - -## Full Example with All Planets - -```javascript -import { Chart } from '@astrodraw/astrochart' - -const data = { - planets: { - Sun: [12.45, 0], - Moon: [145.67, 0], - Mercury: [8.23, 0], - Venus: [35.12, 0], - Mars: [162.34, 0], - Jupiter: [298.56, 0], - Saturn: [245.78, 0], - Uranus: [178.90, 0], - Neptune: [210.12, 0], - Pluto: [238.34, 0], - Chiron: [125.67, 0], - NNode: [95.45, 0], - SNode: [275.45, 0], - Lilith: [145.23, 0], - Fortune: [325.67, 0] - }, - cusps: [ - 315.45, 35.67, 65.23, 92.45, 125.67, 155.89, - 135.45, 215.67, 245.23, 272.45, 305.67, 335.89 - ] -} - -const chart = new Chart('chart', 600, 600) -chart.radix(data) -``` - -## Retrograde planets - -Set the second array element to a negative value to mark a planet as retrograde. -The library will render an **R** next to the symbol. - -```javascript -const data = { - planets: { - Jupiter: [298.56, -1], // retrograde - Saturn: [245.78, 0], // direct - }, - cusps: [ /* 12 values */ ] -} -``` - -## Aspects - -Call `.aspects()` on the returned `Radix` instance to draw aspect lines: - -```javascript -const radix = chart.radix(data) -radix.aspects() -``` - -Aspects are computed automatically based on the default orbs (conjunction 10°, square 8°, trine 8°, opposition 10°). Override them via [Settings](/api/settings). - -## API Reference - -### `chart.radix(data: AstroData): Radix` - -Renders a radix chart and returns a `Radix` instance. - -**Parameters:** -- `data` — `AstroData` object with `planets` and `cusps` - -**Returns:** `Radix` instance (use it to call `.aspects()` or `.transit()`) - -## Next Steps - -- [Transit Charts](/guides/transit-chart) — overlay a transit ring -- [Animation](/guides/animation) — animate transit movement -- [Custom Settings](/guides/custom-settings) — colours, scale, orbs -- [Types reference](/api/types) — full type definitions and valid planet keys diff --git a/website/src/content/docs/guides/radix-chart.mdx b/website/src/content/docs/guides/radix-chart.mdx new file mode 100644 index 0000000..e805525 --- /dev/null +++ b/website/src/content/docs/guides/radix-chart.mdx @@ -0,0 +1,175 @@ +--- +title: Radix Chart +description: Learn how to render a complete radix (natal) chart with AstroChart. +--- + +import ChartDemo from '../../../components/ChartDemo.astro' + +# Radix Chart + +A **radix chart** (also called a natal or birth chart) is a snapshot of the sky at a specific moment in time. It shows the positions of planets and house cusps for a particular birth location. + +AstroChart renders radix charts from an `AstroData` object containing: +- **Planets** — Positions as degrees (0–360), keyed by planet name +- **House Cusps** — Exactly 12 degree values representing houses 1–12 + +## Basic Radix Chart + +Here's the simplest example: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const data = { + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0] + }, + cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +## Data Format + +### Planets + +Planets are stored in a key-value object (`Record`): + +```javascript +planets: { + Sun: [degrees, velocity] + // ^^^^^^^ 0–360 + // ^^^^^^^^ optional: astrological velocity — negative = retrograde, positive or omitted = direct +} +``` + +**Valid planet names:** +- Personal: `Sun`, `Moon`, `Mercury`, `Venus`, `Mars` +- Social: `Jupiter`, `Saturn` +- Generational: `Uranus`, `Neptune`, `Pluto` +- Points: `Chiron`, `Lilith`, `NNode` (North Node), `SNode` (South Node), `Fortune` + +### House Cusps + +Cusps must be an **array of exactly 12 degree values**: + +```javascript +cusps: [ + 315.45, // 1st house cusp (Ascendant) + 35.67, // 2nd house cusp + 65.23, // 3rd house cusp + 92.45, // 4th house cusp (IC) + 125.67, // 5th house cusp + 155.89, // 6th house cusp + 135.45, // 7th house cusp (Descendant) + 215.67, // 8th house cusp + 245.23, // 9th house cusp + 272.45, // 10th house cusp (MC) + 305.67, // 11th house cusp + 335.89 // 12th house cusp +] +``` + +Passing fewer or more than 12 cusps will throw a validation error. + +## Full Example with All Planets + +Here's a complete example with all 15 standard planets and points: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const data = { + planets: { + Sun: [12.45, 0], // direct + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0], + Jupiter: [298.56, 0], + Saturn: [245.78, 0], + Uranus: [178.90, 0], + Neptune: [210.12, 0], + Pluto: [238.34, 0], + Chiron: [125.67, 0], + Lilith: [145.23, 0], + NNode: [95.45, 0], // North Node + SNode: [275.45, 0], // South Node + Fortune: [325.67, 0] + }, + cusps: [ + 315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89 + ] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +## Retrograde Planets + +A planet is retrograde when its **astrological velocity is negative**. Pass the velocity as the second element of the array — the library automatically renders an **R** symbol next to retrograde planets: + +```javascript +const data = { + planets: { + Mercury: [8.23, -1.5], // retrograde (negative velocity) + Venus: [35.12, 1.2], // direct (positive velocity) + Jupiter: [298.56, -0.3], // retrograde (negative velocity) + }, + cusps: [ /* 12 values */ ] +} +``` + +## Adding Aspects + +Call `.aspects()` on the returned `Radix` instance to draw aspect lines between planets: + +```javascript +const chart = new Chart('chart', 600, 600) +const radix = chart.radix(data) +radix.aspects() // draws conjunction, square, trine, opposition lines +``` + +Aspects are calculated automatically using default orbs: +- Conjunction: 10° +- Square: 8° +- Trine: 8° +- Opposition: 10° + +You can customize orbs via [Settings](/docs/api/settings). + +## Interactive Demo + +See a complete radix chart in action: + + + +## API Reference + +### `chart.radix(data: AstroData): Radix` + +Renders a radix chart and returns a `Radix` instance for further operations. + +**Parameters:** +- `data` — `AstroData` object with `planets` (object) and `cusps` (array of 12 numbers) + +**Returns:** `Radix` instance + +**Methods on Radix:** +- `aspects()` — Draw aspect lines between planets +- `transit(data)` — Overlay a transit ring +- `on(eventName, callback)` — Add click/hover listeners + +## Next Steps + +- **[Transit Charts](/docs/guides/transit-chart)** — Layer a transit ring over your radix +- **[Animation](/docs/guides/animation)** — Animate transitions between states +- **[Custom Settings](/docs/guides/custom-settings)** — Customize colors, fonts, and appearance +- **[Custom Symbols](/docs/guides/custom-symbols)** — Replace symbols with custom SVG +- **[Types Reference](/docs/api/types)** — Full type definitions diff --git a/website/src/content/docs/guides/transit-chart.md b/website/src/content/docs/guides/transit-chart.md deleted file mode 100644 index a472ec9..0000000 --- a/website/src/content/docs/guides/transit-chart.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Transit Chart -description: Learn how to render transit charts with AstroChart. ---- - -# Transit Chart - -A transit chart overlays current planetary positions over a natal chart to show how transits affect your birth chart. - -This guide shows how to render transit charts using AstroChart. - -## Basic Transit Chart - -To render a transit chart, provide both radix (natal) and transit data: - -```javascript -import { Chart } from '@astrodraw/astrochart' - -const radixData = { - planets: [ - { name: 'Sun', x: 120, y: 45, type: 'personal' }, - { name: 'Moon', x: 220, y: 75, type: 'personal' } - ], - cusps: [ - { name: 'Asc', x: 0, y: 0 }, - { name: 'MC', x: 0, y: 90 } - ] -} - -const transitData = { - planets: [ - { name: 'Sun', x: 140, y: 55, type: 'personal' }, - { name: 'Moon', x: 250, y: 100, type: 'personal' } - ] -} - -const chart = new Chart('chart', 600, 600) -chart.radix(radixData).transit(transitData) -``` - -## Next Steps - -- **[Animation](/docs/guides/animation)** — Animate transit movements -- **[Radix Charts](/docs/guides/radix-chart)** — Learn about radix charts diff --git a/website/src/content/docs/guides/transit-chart.mdx b/website/src/content/docs/guides/transit-chart.mdx new file mode 100644 index 0000000..036b338 --- /dev/null +++ b/website/src/content/docs/guides/transit-chart.mdx @@ -0,0 +1,182 @@ +--- +title: Transit Chart +description: Learn how to render transit charts by layering current planetary positions over a natal chart. +--- + +import ChartDemo from '../../../components/ChartDemo.astro' + +# Transit Chart + +A **transit chart** overlays the **current** positions of planets over your **natal (radix) chart**. This shows how transiting planets are affecting your birth chart right now. + +Transit charts are useful for: +- Seeing current planetary activity relative to your birth chart +- Identifying aspects between transit and natal planets +- Tracking planetary transits over time +- Understanding how cosmic events may affect you + +## Basic Transit Chart + +To render a transit chart, provide **both** radix (natal) data and transit data to the same chart: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +// Your natal chart data +const radixData = { + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0] + }, + cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] +} + +// Current planetary positions (transit data) +const transitData = { + planets: { + Sun: [155.67, 0], // current Sun position + Moon: [245.23, 0], // current Moon position + Mercury: [122.34, 0], + Venus: [198.56, 0], + Mars: [310.78, 0] + } +} + +const chart = new Chart('chart', 600, 600) +chart.radix(radixData).transit(transitData) +``` + +## How Transits Are Rendered + +When you call `.transit()`, AstroChart renders: +- The **inner ring** shows your natal (radix) planets +- The **outer ring** shows the transit planets +- The **houses** and **aspects** remain from the natal chart +- Transit-to-natal aspects can be calculated automatically + +## Full Example with Multiple Planets + +Here's a complete example with more planets: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const radixData = { + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0], + Jupiter: [298.56, 0], + Saturn: [245.78, 0], + Uranus: [178.90, 0], + Neptune: [210.12, 0], + Pluto: [238.34, 0], + NNode: [95.45, 0] + }, + cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] +} + +const transitData = { + planets: { + Sun: [155.67, 0], // Sun has moved 143.22° + Moon: [245.23, 0], // Moon has moved 99.56° + Mercury: [122.34, 0], + Venus: [198.56, 0], + Mars: [310.78, 0], + Jupiter: [15.67, 0], + Saturn: [288.90, 0], + Uranus: [205.12, 0], + Neptune: [245.34, 0], + Pluto: [275.67, 0], + NNode: [85.45, 0] + } +} + +const chart = new Chart('chart', 600, 600) +chart.radix(radixData).transit(transitData) +``` + +## Retrograde Transits + +Transit planets can also be retrograde — pass a negative velocity as the second element: + +```javascript +const transitData = { + planets: { + Mercury: [122.34, -1.2], // retrograde transit (negative velocity) + Venus: [198.56, 1.1], // direct transit (positive velocity) + Mars: [310.78, -0.8] // retrograde transit (negative velocity) + } +} +``` + +## Adding Aspects + +You can draw transit-to-natal aspects on the chart: + +```javascript +const chart = new Chart('chart', 600, 600) +const transit = chart.radix(radixData).transit(transitData) +transit.aspects() // Shows aspects between transit and natal planets +``` + +## Interactive Demo + +See a live transit chart with both natal and transit planets: + + + +## Updating Transit Data + +To update the transit planets (e.g., for a different date/time), call `.transit()` again with new data: + +```javascript +// Initial transit +const transit = radix.transit(transitData) + +// Later, update to a different date +transit = radix.transit(newTransitData) +``` + +Or use `.animate()` for a smooth animation between transit states (see [Animation Guide](/docs/guides/animation)). + +## API Reference + +### `radix.transit(data: AstroData): Transit` + +Renders a transit ring and returns a `Transit` instance. + +**Parameters:** +- `data` — `AstroData` object with transit planets. **Note:** Transit data only needs `planets`; `cusps` are taken from the radix. + +**Returns:** `Transit` instance + +**Methods on Transit:** +- `aspects()` — Calculate and draw transit-to-natal aspects +- `animate(data, duration, callback)` — Animate to new transit positions +- `on(eventName, callback)` — Add click/hover listeners + +## Common Questions + +**Do I need to recalculate aspects?** +Yes, aspects are calculated between transit and natal planets. Call `.aspects()` after rendering the transit. + +**Can I have multiple transit rings?** +Currently, one radix supports one transit ring. For multiple overlays, consider rendering separate charts or using custom SVG rendering. + +**How do I get current planetary positions?** +You need an ephemeris calculator (Swiss Ephemeris, Skyfield, etc.). AstroChart only renders positions; it does not calculate them. + +## Next Steps + +- **[Animation](/docs/guides/animation)** — Animate transits over time +- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn more about natal charts +- **[Custom Settings](/docs/guides/custom-settings)** — Customize colors and appearance +- **[API Reference](/docs/api/transit)** — Full Transit API documentation diff --git a/website/src/content/docs/introduction.md b/website/src/content/docs/introduction.mdx similarity index 85% rename from website/src/content/docs/introduction.md rename to website/src/content/docs/introduction.mdx index 3f54114..44c2391 100644 --- a/website/src/content/docs/introduction.md +++ b/website/src/content/docs/introduction.mdx @@ -3,6 +3,8 @@ title: Introduction description: Learn what AstroChart is and how it can help you render astrology charts on the web. --- +import ChartDemo from '../../components/ChartDemo.astro' + # Welcome to AstroChart AstroChart is a **pure SVG, zero-dependency library** for rendering interactive astrology charts directly in web browsers. @@ -61,19 +63,15 @@ npm install @astrodraw/astrochart import { Chart } from '@astrodraw/astrochart' const data = { - planets: [ - { name: 'Sun', x: 120, y: 45, type: 'personal' }, - { name: 'Moon', x: 220, y: 75, type: 'personal' }, - // ... more planets - ], - cusps: [ - { name: 'Asc', x: 150, y: 0 }, - { name: 'MC', x: 150, y: 300 }, - // ... more cusps - ], - aspects: [ - { planet1: 'Sun', planet2: 'Moon', type: 'conjunction', value: 12 } - ] + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0] + }, + cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] } const chart = new Chart('chart', 600, 600) @@ -82,12 +80,18 @@ chart.radix(data) That's it! You now have a fully rendered astrology chart. +## See It In Action + +Here's a basic radix chart rendered with AstroChart: + + + ## Next Steps - **[Installation Guide](/docs/installation)** — Detailed setup instructions for npm, CDN, and more - **[Quick Start Guide](/docs/quickstart)** — A step-by-step walkthrough with examples +- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn how to render complete natal charts - **[API Reference](/docs/api/chart)** — Complete documentation of all classes and methods -- **[Gallery](/gallery)** — See what's possible with AstroChart ## Browser Support diff --git a/website/src/content/docs/quickstart.md b/website/src/content/docs/quickstart.md deleted file mode 100644 index a1c7abb..0000000 --- a/website/src/content/docs/quickstart.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Quick Start -description: Get up and running with AstroChart in 5 minutes. ---- - -# Quick Start - -This guide will show you how to render your first AstroChart in just a few lines of code. - -## 1. Install - -```bash -npm install @astrodraw/astrochart -``` - -## 2. Create a Container - -Add a `
` to your HTML where the chart will be rendered: - -```html -
-``` - -## 3. Provide Data - -AstroChart needs an `AstroData` object with planets, cusps, and optionally aspects: - -```javascript -const data = { - planets: [ - { name: 'Sun', x: 120, y: 45, type: 'personal' }, - { name: 'Moon', x: 220, y: 75, type: 'personal' }, - { name: 'Mercury', x: 180, y: 60, type: 'personal' }, - { name: 'Venus', x: 150, y: 90, type: 'personal' }, - { name: 'Mars', x: 90, y: 80, type: 'personal' } - ], - cusps: [ - { name: 'Asc', x: 150, y: 0 }, - { name: 'MC', x: 150, y: 300 } - ] -} -``` - -### Data Format Explained - -- **`planets`** — Array of planetary positions. Each planet has: - - `name` — Planet or point name (e.g., "Sun", "Moon") - - `x`, `y` — Position in degrees (0–360, typically on a circle) - - `type` — Category: `'personal'`, `'social'`, `'generational'`, etc. - -- **`cusps`** — Array of house cusps or important points. Format same as planets. - -- **`aspects`** (optional) — Angular relationships between planets: - ```javascript - aspects: [ - { planet1: 'Sun', planet2: 'Moon', type: 'conjunction', value: 12 } - ] - ``` - -## 4. Render the Chart - -Import the `Chart` class and render: - -```javascript -import { Chart } from '@astrodraw/astrochart' - -const chart = new Chart('chart', 600, 600) -chart.radix(data) -``` - -That's it! You now have a fully rendered radix chart. - -## Complete Example - -```html - - - - AstroChart Quick Start - - -
- - - - -``` - -## Next Steps - -- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn more about radix charts -- **[Transit Charts](/docs/guides/transit-chart)** — Add transit rings -- **[Animation](/docs/guides/animation)** — Animate chart transitions -- **[API Reference](/docs/api/chart)** — See all available methods - -## Troubleshooting - -**Chart doesn't appear?** -- Check the browser console for errors -- Make sure the container element exists: `document.getElementById('chart')` -- Verify the data object is correctly formatted - -**Need help?** -- [Open an issue on GitHub](https://github.com/AstroDraw/AstroChart/issues) -- Check the [API Reference](/docs/api/chart) diff --git a/website/src/content/docs/quickstart.mdx b/website/src/content/docs/quickstart.mdx new file mode 100644 index 0000000..4551e50 --- /dev/null +++ b/website/src/content/docs/quickstart.mdx @@ -0,0 +1,150 @@ +--- +title: Quick Start +description: Get up and running with AstroChart in 5 minutes. +--- + +import ChartDemo from '../../components/ChartDemo.astro' + +# Quick Start + +This guide will show you how to render your first AstroChart in just a few lines of code. + +## 1. Install + +```bash +npm install @astrodraw/astrochart +``` + +## 2. Create a Container + +Add a `
` to your HTML where the chart will be rendered: + +```html +
+``` + +## 3. Provide Data + +AstroChart needs an `AstroData` object with planets (as a key-value record of degree positions) and exactly 12 cusp values: + +```javascript +const data = { + planets: { + Sun: [12.45, 0], // [degrees, velocity] + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0] + }, + cusps: [ + 315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89 + ] +} +``` + +### Data Format Explained + +- **`planets`** — Object where each key is a planet/point name and value is an array: + - First element: degree position (0–360) + - Second element (optional): astrological velocity — negative value means the planet is retrograde, positive (or omitted) means direct + - Valid planet names: `Sun`, `Moon`, `Mercury`, `Venus`, `Mars`, `Jupiter`, `Saturn`, `Uranus`, `Neptune`, `Pluto`, `Chiron`, `Lilith`, `NNode`, `SNode`, `Fortune` + +- **`cusps`** — Array of exactly **12 degree values** (0–360) representing the start of houses 1–12 in order. + +## 4. Render the Chart + +Import the `Chart` class and call the `.radix()` method: + +```javascript +import { Chart } from '@astrodraw/astrochart' + +const data = { + planets: { + Sun: [12.45, 0], + Moon: [145.67, 0], + Mercury: [8.23, 0], + Venus: [35.12, 0], + Mars: [162.34, 0] + }, + cusps: [315.45, 35.67, 65.23, 92.45, 125.67, 155.89, + 135.45, 215.67, 245.23, 272.45, 305.67, 335.89] +} + +const chart = new Chart('chart', 600, 600) +chart.radix(data) +``` + +That's it! The chart is now rendered as an SVG inside the `#chart` container. + +## Complete HTML Example + +```html + + + + + + AstroChart Quick Start + + +

My First Astrology Chart

+
+ + + + +``` + +Copy this into an HTML file, open it in your browser, and you'll see a fully rendered radix chart! + +## Interactive Demo + +Here's a live example you can interact with: + + + +## Next Steps + +- **[Radix Chart Guide](/docs/guides/radix-chart)** — Learn more about radix charts and all available planets +- **[Transit Charts](/docs/guides/transit-chart)** — Add a transit ring to overlay current positions +- **[Animation](/docs/guides/animation)** — Animate chart transitions +- **[Custom Settings](/docs/guides/custom-settings)** — Customize colors, fonts, and more +- **[API Reference](/docs/api/chart)** — See all available methods and options + +## Troubleshooting + +**Chart doesn't appear?** +- Check the browser console for errors (F12 → Console tab) +- Make sure the container element exists: `document.getElementById('chart')` +- Verify the data object has `planets` and `cusps` properties with correct structure +- Cusps must have exactly 12 values + +**Getting type errors in TypeScript?** +- Import types from `@astrodraw/astrochart`: `import type { Chart, AstroData } from '@astrodraw/astrochart'` + +**Need help?** +- [Open an issue on GitHub](https://github.com/AstroDraw/AstroChart/issues) +- Check the [API Reference](/docs/api/chart) +- See [Common Guides](/docs/guides/radix-chart) From b4848389e506a842c02fc7fc72450a19f1b7c68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arthur=20F=C3=BCcher?= Date: Tue, 31 Mar 2026 09:17:38 -0300 Subject: [PATCH 5/5] [Phase 1] Configure and test CI/CD pipeline (#96) (#108) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci: add docs-deploy workflow and deployment guide (#96) - Add .github/workflows/docs-deploy.yml: - Triggers on push to main (paths: website/** and project/src/**) - Supports manual trigger via workflow_dispatch - Builds library → copies bundle → builds Astro site → deploys to AstroDraw/astrodraw.github.io via peaceiris/actions-gh-pages - Uses DOCS_DEPLOY_KEY secret for SSH deploy key authentication - Add docs/docs-deploy.md: - Explains what each workflow step does - One-time SSH key pair setup instructions - How to manually trigger via GitHub Actions UI - Debugging guide for common failure scenarios Closes #96 🤖 Generated with [eca](https://eca.dev) Co-Authored-By: eca * ci: switch to official GitHub Pages action, deploy from AstroChart repo (#96) Replace peaceiris/actions-gh-pages (third-party, slow to maintain, requires SSH deploy key setup) with the official GitHub Actions stack: - actions/upload-pages-artifact@v3 - actions/deploy-pages@v4 Changes: - Split single job into build + deploy jobs - Add top-level permissions (pages: write, id-token: write, contents: read) - Add concurrency group to prevent overlapping deploys - Remove all external repo / SSH deploy key config — no secrets needed - Site now deploys directly to AstroChart repo Pages Update website/astro.config.mjs: - site: https://astrodraw.github.io/AstroChart - base: /AstroChart (required for project repo sub-path deployment) Update docs/docs-deploy.md to reflect new one-time setup (Pages source → GitHub Actions in repo settings) and remove SSH key instructions. 🤖 Generated with [eca](https://eca.dev) Co-Authored-By: eca * ci: temporarily enable workflow trigger on issue-96-ci-cd for testing * ci: revert temporary test trigger on issue-96-ci-cd --------- Co-authored-by: eca --- .github/workflows/docs-deploy.yml | 64 ++++++++++++++++++ docs/docs-deploy.md | 108 ++++++++++++++++++++++++++++++ website/astro.config.mjs | 3 +- 3 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docs-deploy.yml create mode 100644 docs/docs-deploy.md diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml new file mode 100644 index 0000000..bcec0f0 --- /dev/null +++ b/.github/workflows/docs-deploy.yml @@ -0,0 +1,64 @@ +name: Deploy Docs + +on: + push: + branches: + - main + paths: + - 'website/**' + - 'project/src/**' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install root dependencies + run: npm ci + + - name: Build library + run: npm run build + + - name: Copy bundle to website + run: cp dist/astrochart.js website/public/astrochart.js + + - name: Install website dependencies + run: npm ci + working-directory: website + + - name: Build Astro site + run: npm run build + working-directory: website + + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: website/dist + + deploy: + needs: build + runs-on: ubuntu-22.04 + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/docs/docs-deploy.md b/docs/docs-deploy.md new file mode 100644 index 0000000..af9f661 --- /dev/null +++ b/docs/docs-deploy.md @@ -0,0 +1,108 @@ +# Docs Deployment Guide + +This document explains how the AstroChart documentation site is built and deployed to GitHub Pages directly from this repository. + +The live site is served at **https://astrodraw.github.io/AstroChart/**. + +--- + +## What the Workflow Does + +The workflow file is located at `.github/workflows/docs-deploy.yml`. + +It runs on every push to `main` that touches either `website/**` or `project/src/**`, and can also be triggered manually. + +The workflow has two jobs: + +### Job 1: `build` + +1. **Checkout** — checks out the `AstroChart` repository. +2. **Set up Node.js 20** — installs Node using `actions/setup-node`. +3. **Install root dependencies** — runs `npm ci` at the repo root. +4. **Build library** — runs `npm run build` to produce `dist/astrochart.js` (webpack UMD bundle). +5. **Copy bundle to website** — copies `dist/astrochart.js` → `website/public/astrochart.js` so the live demos can load it. +6. **Install website dependencies** — runs `npm ci` inside `website/`. +7. **Build Astro site** — runs `npm run build` inside `website/`, outputting the static site to `website/dist/`. +8. **Upload Pages artifact** — uploads `website/dist/` as a GitHub Pages artifact using the official `actions/upload-pages-artifact` action. + +### Job 2: `deploy` + +1. **Deploy to GitHub Pages** — deploys the uploaded artifact using the official `actions/deploy-pages` action. Uses GitHub's OIDC token — no secrets or SSH keys needed. + +--- + +## One-Time Setup (GitHub Pages source) + +This only needs to be done once per repository. + +1. Go to the repository **Settings → Pages**: + `https://github.com/AstroDraw/AstroChart/settings/pages` +2. Under **Source**, select **GitHub Actions** (not a branch). +3. Click **Save**. + +That's it. The workflow handles everything else automatically. + +> **Note:** GitHub automatically creates a `github-pages` environment on the first successful deploy. You can see it under **Settings → Environments**. + +--- + +## How to Manually Trigger the Workflow + +You can trigger a deploy at any time without pushing code: + +1. Go to the **Actions** tab in the AstroChart repository: + `https://github.com/AstroDraw/AstroChart/actions/workflows/docs-deploy.yml` +2. Click **Run workflow** +3. Select the branch (typically `main`) +4. Click **Run workflow** + +The workflow will run and deploy the current state of `main` to GitHub Pages. + +--- + +## How to Debug Deploy Failures + +### Step 1 — Check the workflow logs + +Go to `https://github.com/AstroDraw/AstroChart/actions` and click the failed run. Each step's output is expandable. Common failure points: + +| Step | Likely cause | +|---|---| +| Build library | TypeScript compile error or missing dep — run `npm run build` locally | +| Build Astro site | MDX/Astro error — run `cd website && npm run build` locally | +| Upload Pages artifact | `website/dist/` is empty or missing — check the Astro build step above it | +| Deploy to GitHub Pages | Pages source not set to "GitHub Actions" — see one-time setup above | + +### Step 2 — Permissions error on deploy + +If the deploy job fails with a permissions error: + +- Verify the repository **Settings → Pages → Source** is set to **GitHub Actions**, not a branch. +- Verify the workflow has the correct top-level permissions (`pages: write`, `id-token: write`). +- Check that the `deploy` job declares `environment: name: github-pages`. + +### Step 3 — Verify the deployed site + +After a successful run: + +1. Visit `https://astrodraw.github.io/AstroChart/` — homepage should load. +2. Open browser DevTools → Network tab — no 404s for `/AstroChart/astrochart.js`. +3. Click through the sidebar — navigation should work. +4. Open the browser console — no JS errors. + +If the site shows stale content, GitHub Pages may have a CDN cache delay of up to 10 minutes after deployment. + +--- + +## Astro base path configuration + +The `website/astro.config.mjs` file is configured with: + +```js +site: 'https://astrodraw.github.io/AstroChart', +base: '/AstroChart', +``` + +The `base` option tells Astro to prefix all internal links and asset URLs with `/AstroChart`, which is required for a project repository deployed to a sub-path. + +If the site is ever moved to the root URL (`https://astrodraw.github.io/`), remove the `base` option and update `site` accordingly. diff --git a/website/astro.config.mjs b/website/astro.config.mjs index 77eca5b..844c018 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -3,7 +3,8 @@ import starlight from '@astrojs/starlight' import sitemap from '@astrojs/sitemap' export default defineConfig({ - site: 'https://astrodraw.github.io/', + site: 'https://astrodraw.github.io/AstroChart', + base: '/AstroChart', integrations: [ starlight({ title: 'AstroChart',